openai-provider-gigachat
OpenAI-compatible Provider для GigaChat API
OpenAI-совместимый HTTP сервер, проксирующий запросы к GigaChat API Сбербанка.
Функции
- Полная совместимость с OpenAI API
- Автоматическое управление access tokens с обновлением
- Поддержка всех основных endpoints:
- Chat Completions (включая streaming)
- Text Completions
- Embeddings
- Models
- Files
- Fine-tuning
- Images
- Audio
- Moderation
- CORS поддержка
- Конфигурация через JSON файл
Установка
- Склонируйте репозиторий
- Скопируйте
вconfig.example.jsonconfig.json - Добавьте ваш authorization key в config.json
Конфигурация
Создайте файл :
Параметры конфигурации
- ключ авторизации GigaChat API (обязательный)authorization_key- URL для получения токена доступа (по умолчанию:oauth_url)https://ngw.devices.sberbank.ru:9443/api/v2/oauth- область доступа API (по умолчанию:scope)GIGACHAT_API_PERS- адрес сервера (по умолчанию:addr)localhost- порт сервера (по умолчанию:port)8080- если нужно ходить вinsecureбез проверки сертификатовgigaChat
Запуск
Или с кастомными параметрами:
Переменные окружения
- адрес сервера (переопределяет значение из config.json)ADDR- порт сервера (переопределяет значение из config.json)PORT- путь к файлу конфигурации (по умолчанию: config.json)CONFIG_PATH- уровень логирования: DEBUG, INFO, WARN, ERROR (по умолчанию: INFO)LOG_LEVEL
Примечание: переменные окружения и имеют приоритет над значениями в конфигурационном файле.
Использование
Сервер запускается на и полностью совместим с OpenAI API.
Пример запроса:
Примечание: Authorization header обязателен для совместимости с OpenAI клиентами, но сам токен не используется - аутентификация происходит через конфигурацию сервера.
Логирование
Сервер поддерживает структурированное логирование с четырьмя уровнями:
- DEBUG - подробная информация о всех запросах/ответах, токенах, телах запросов
- INFO - основные события: запуск сервера, завершение запросов, обновление токенов
- WARN - предупреждения о потенциальных проблемах
- ERROR - ошибки выполнения
Примеры логов:
[INFO ] 2024-01-15 10:30:45 Starting OpenAI-compatible provider for GigaChat
[DEBUG] 2024-01-15 10:30:46 Request: POST https://gigachat.devices.sberbank.ru/api/v1/chat/completions, Token: eyJjdH...W9hQ
[INFO ] 2024-01-15 10:30:47 Request completed: POST /chat/completions, Status: 200, Duration: 1.2s
Управление уровнем логирования:
Архитектура
Проект построен по модульному принципу с разделением ответственности:
- управление конфигурацией сервера (файл + переменные окружения)Config- единая система структурированного логированияLogger- автоматическое управление получением и обновлением access_tokenTokenManager- проксирование запросов к GigaChat API с конвертацией форматовGigaChatProvider- преобразование моделей данных между форматами OpenAI и GigaChatConverters- обработка HTTP запросов для всех endpointsHTTPHandlers- маршрутизация запросов и middleware (CORS, auth, logging)Router
Подробная диаграмма архитектуры доступна в файле arch.puml (C4 модель).
Подключение провайдера в opencode
OpenCode это CLI Agent, который может использовать разные LLM модели совместимые с OpenAI-like API. Чтобы подключить новый провайдер нужно выполнить следующие шаги:
- добавить новый provider
вводим имя провайдера который мы будем использовать далее в файле
- создать файл
в корне проекта в котором будет запускаться opencodeopencode.json
apiKey можно указать любой, так как сервером будет получаться реальный для доступа к GigaChat. Ссылка на инструкцию по подключению CustomProvider в opencode
Подключение провайдера в crush
Crush аналогичный opencode cli Agent. Ниже представлен конфигурационный файл по добавлению провайдера.
- Добавить файл конфигурации в
следующее описание:$HOME/.config/crush/crush.json
- Запустите
иopenai-provider-gigachat. В crush смените используемую модель через менюcrush.Ctrl+P
Подробное описание работы с crush можно найти на github'е.