openai-provider-gigachat

0
Эта ветка отстает от базовой kmpavloff/openai-provider-gigachat/master на 2 коммита
README.md

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 файл

Установка

  1. Склонируйте репозиторий
  2. Скопируйте
    config.example.json
    в
    config.json
  3. Добавьте ваш authorization key в
    config.json

Конфигурация

Создайте файл

config.json
:

Параметры конфигурации

  • authorization_key
    - ключ авторизации GigaChat API (обязательный)
  • oauth_url
    - URL для получения токена доступа (по умолчанию:
    https://ngw.devices.sberbank.ru:9443/api/v2/oauth
    )
  • scope
    - область доступа API (по умолчанию:
    GIGACHAT_API_PERS
    )
  • addr
    - адрес сервера (по умолчанию:
    localhost
    )
  • port
    - порт сервера (по умолчанию:
    8080
    )
  • insecure
    - если нужно ходить в
    gigaChat
    без проверки сертификатов

Запуск

Или с кастомными параметрами:

Переменные окружения

  • ADDR
    - адрес сервера (переопределяет значение из config.json)
  • PORT
    - порт сервера (переопределяет значение из config.json)
  • CONFIG_PATH
    - путь к файлу конфигурации (по умолчанию: config.json)
  • LOG_LEVEL
    - уровень логирования: DEBUG, INFO, WARN, ERROR (по умолчанию: INFO)

Примечание: переменные окружения

ADDR
и
PORT
имеют приоритет над значениями в конфигурационном файле.

Использование

Сервер запускается на

http://localhost:8080/v1
и полностью совместим с 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
    - единая система структурированного логирования
  • TokenManager
    - автоматическое управление получением и обновлением access_token
  • GigaChatProvider
    - проксирование запросов к GigaChat API с конвертацией форматов
  • Converters
    - преобразование моделей данных между форматами OpenAI и GigaChat
  • HTTPHandlers
    - обработка HTTP запросов для всех endpoints
  • Router
    - маршрутизация запросов и middleware (CORS, auth, logging)

Подробная диаграмма архитектуры доступна в файле arch.puml (C4 модель).

Подключение провайдера в opencode

OpenCode это CLI Agent, который может использовать разные LLM модели совместимые с OpenAI-like API. Чтобы подключить новый провайдер нужно выполнить следующие шаги:

  1. добавить новый provider

вводим имя провайдера

"salutedevices
который мы будем использовать далее в файле
opencode.json

  1. создать файл
    opencode.json
    в корне проекта в котором будет запускаться opencode

apiKey можно указать любой, так как сервером будет получаться реальный

access_token
для доступа к GigaChat. Ссылка на инструкцию по подключению CustomProvider в opencode

Подключение провайдера в crush

Crush аналогичный opencode cli Agent. Ниже представлен конфигурационный файл по добавлению провайдера.

  1. Добавить файл конфигурации в
    $HOME/.config/crush/crush.json
    следующее описание:
  1. Запустите
    openai-provider-gigachat
    и
    crush
    . В crush смените используемую модель через меню
    Ctrl+P
    .

Подробное описание работы с crush можно найти на github'е.