OpenAI API Bridge — это высокопроизводительный сервис-прокси на FastAPI, который служит мостом между новым Responses API и классическим Chat Completions API от OpenAI. Он позволяет разработчикам использовать единый, современный клиент для взаимодействия с любыми OpenAI-совместимыми моделями, независимо от того, какой формат API они поддерживают.

Архитектура

Система построена на двух ключевых адаптерах, которые обеспечивают двунаправленное преобразование запросов и ответов:

  1. ResponsesToChatAdapter — этот компонент "понижает" запросы. Он анализирует входящий запрос в формате Responses API и преобразует его в эквивалентный запрос для Chat Completions API. Адаптер корректно обрабатывает такие сложные элементы, как системные инструкции, вызовы функций (tools), параметры reasoning и требования к формату ответа.
  2. ChatCompletionsToResponsesAdapter — этот компонент "повышает" ответы. Он принимает стандартный или потоковый (SSE) ответ от Chat Completions API и преобразует его в современный, структурированный формат Responses API. Адаптер генерирует корректную последовательность событий, включая reasoning, дельты контента и финальные данные об использовании токенов.

Сервер на FastAPI динамически определяет, какой API поддерживает целевая модель, и либо проксирует запрос напрямую, либо задействует адаптеры для конвертации.

Технологии

  • Python 3.12+ — используется для обеспечения производительности и поддержки современных асинхронных возможностей.
  • FastAPI — высокопроизводительный веб-фреймворк для создания асинхронных API.
  • OpenAI Python SDK v1.x — для типизации и взаимодействия с API.
  • Asyncio — для эффективной обработки параллельных запросов и потоковой передачи данных.
  • Uv — современный и быстрый менеджер зависимостей и виртуальных окружений.

Особенности

  • 🎯 Универсальность: Используйте единый клиент Responses API для работы с любыми моделями, поддерживающими OpenAI-совместимые API.
  • 🚀 Прозрачная адаптация: Автоматическое преобразование запросов и ответов "на лету" без необходимости изменять клиентский код.
  • 🔄 Двунаправленная конвертация: Полная поддержка преобразования как из Responses в Chat Completions, так и обратно.
  • STREAM Потоковая передача: Корректная обработка и преобразование потоковых (server-sent events) ответов с сохранением всех событий, включая reasoning и tool_calls.
  • 🛠️ Гибкая конфигурация: Настройка целевых эндпоинтов и моделей через переменные окружения, что позволяет легко интегрироваться с vLLM, Ollama, Groq и другими сервисами.
  • 🧪 Надежность: Проект покрыт комплексными интеграционными и модульными тестами для обеспечения стабильности.

Пример использования

Сервер-мост запускается как прокси перед вашим основным OpenAI-совместимым API (например, vLLM).

1. Запуск сервера:

# Установка переменных окружения
export REMOTE_OPENAI_BASE_URL="http://localhost:8000" # URL вашего vLLM или другого API
export REMOTE_OPENAI_API_KEY="your-api-key"
export DEFAULT_MODEL="meta-llama/Llama-3-8B-Instruct"

# Запуск сервера
uv run python main.py

2. Клиентский код (Python): Клиент отправляет запрос в формате Responses API на адрес запущенного моста. Мост автоматически преобразует его в Chat Completions и вернет ответ в формате Responses.

from openai import OpenAI

# Клиент подключается к нашему мосту
client = OpenAI(
    base_url="http://127.0.0.1:8099", # Адрес моста
    api_key="not-needed"
)

# Используем современный Responses API
with client.responses.stream(
    model="meta-llama/Llama-3-8B-Instruct",
    input="Напиши короткую историю о роботе, который нашел друга.",
    reasoning={"effort": "low"}
) as stream:
    for event in stream:
        # Клиент получает события в новом формате, даже если модель его не поддерживает
        if event.type == 'response.reasoning_text.delta':
            print(f"Модель размышляет: {event.delta}")
        elif event.type == 'response.output_text.delta':
            print(event.delta, end="")

Результат: Клиентский код остается чистым и современным, а вся сложность по адаптации API скрыта внутри сервиса-моста.

Подробнее о проекте и исходный код доступны на GitHub: ascorblack/openai-api-bridge.