https://github.com/ai-forever/gpt2giga

Proxy to stream OpenAI traffic to GigaChat

https://github.com/ai-forever/gpt2giga

Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (1.8%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

Proxy to stream OpenAI traffic to GigaChat

Basic Info
  • Host: GitHub
  • Owner: ai-forever
  • License: mit
  • Language: Python
  • Default Branch: main
  • Size: 226 KB
Statistics
  • Stars: 50
  • Watchers: 5
  • Forks: 20
  • Open Issues: 7
  • Releases: 1
Created over 1 year ago · Last pushed 11 months ago
Metadata Files
Readme License

README.md

Утилита для проксирования OpenAI-запросов в GigaChat

Утилита gpt2giga — это прокси-сервер, который перенаправляет запросы, отправленные в OpenAI API, в GigaChat API.

При старте утилиты запускается HTTP-сервер, адрес которого нужно использовать вместо адреса OpenAI API, заданного в вашем приложении (например, https://api.openai.com/v1/). Утилита обработает запрос и перенаправит его заданной модели GigaChat. После получения ответа модели, она передаст его в приложение в формате OpenAI.

Утилита работает как с запросами на генерацию, так и с запросами на создание эмбеддингов (эндпоинты /embeddings или /v1/embeddings).

Общая схема работы gpt2giga:

```mermaid sequenceDiagram participant YourApp as Приложение participant gpt2giga participant GigaChat as GigaChat API

YourApp->>gpt2giga: OpenAI-запрос
gpt2giga->>GigaChat: Запрос формата GigaChat API
GigaChat->>gpt2giga: Ответ формата GigaChat API
gpt2giga->>YourApp: OpenAI-ответ

```

Возможности gpt2giga

С помощью gpt2giga вы можете:

  • использовать возможности моделей OpenAI и полностью заменить ChatGPT на GigaChat;
  • вызывать функции через API, включая передачу и выполнение функций с аргументами;
  • обрабатывать ответ модели в режиме потоковой генерации токенов с помощью параметра stream=true;
  • перенаправлять запросы на создание эмбеддингов (поддерживаются эндпоинты /embeddings и /v1/embeddings);
  • работать в асинхронном режиме с множеством потоков запросов от нескольких клиентов;
  • отображать подробные сведения о запросах и ответах при включенном verbose-режиме логирования;
  • задавать параметры работы как с помощью аргументов командной строки, так и с помощью переменных окружения (.env).

Начало работы

Утилиту можно запустить как в контейнере, с помощью Docker, так и локально.

Запуск в Docker

Для запуска с помощью Docker:

  1. В файле docker-compose.yml укажите ключ авторизации GigaChat API:

yaml environment: - GIGACHAT_CREDENTIALS: <your_api_key> - GIGACHAT_SCOPE: <your_api_scope> 2. Запустите контейнер с помощью Docker Compose:

```sh # В зависимости от версии Docker используйте одну из команд docker-compose up -d

# или docker compose up -d ```

Локальный запуск

Для локального запуска:

  1. Установите пакет gpt2giga с помощью менеджера пакетов pip:

sh pip install gpt2giga

Вы также можете использовать исходники:

sh pip install git+https://github.com/ai-forever/gpt2giga.git

После установки пакета вы сможете использовать команду gpt2giga, которая позволяет запускать и настраивать прокси-сервер.

  1. Переименуйте файл .env.example в .env и сохраните его в корне своего проекта:

sh cp .env.example .env

  1. В файле .env укажите данные для авторизации в GigaChat API.

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

[!NOTE] Кроме переменных gpt2giga в .env можно указать переменные окружения, которые поддерживает python-библиотека GigaChat.

  1. В терминале выполните команду gpt2giga.

Запустится прокси-сервер, по умолчанию доступный по адресу localhost:8090. Адрес и порт сервера, а также другие параметры, можно настроить с помощью аргументов командной строки или переменных окружения.

Изменение параметров gpt2giga

Вы можете изменять параметры работы утилиты с помощью аргументов командной строки или переменных окружения.

Аргументы командной строки

Утилита поддерживает аргументы:

  • --host <HOST> — хост, на котором запускается прокси-сервер. По умолчанию localhost;
  • --port <PORT> — порт, на котором запускается прокси-сервер. По умолчанию 8090;
  • --mtls-ca-cert-path - путь к файлу сертификата mTLS корневого центра сертификации;
  • --mtls-cert-file-path - путь к клиентский сертификату mTLS;
  • --mtls-key-file-path - путь к закрытому ключу mTLS;
  • --verbose — включить подробный вывод логов (запросы и ответы);
  • --pass-model — передавать в GigaChat API модель, которую указал клиент в поле model в режиме чата;
  • --pass-token — передавать токен, полученный в заголовке Authorization, в GigaChat API. С помощью него можно настраивать передачу ключей в GigaChat через OPENAI_API_KEY;
  • --base-url <BASE_URL> — базовый URL для GigaChat API. По умолчанию берется значение переменной GIGACHAT_BASE_URL или поля BASE_URL внутри пакета;
  • --model <MODEL> — модель для запросов в GigaChat. По умолчанию GIGACHAT_MODEL;
  • --timeout <TIMEOUT> — таймаут для запросов к GigaChat API. По умолчанию 600 секунд;
  • --embeddings <EMBED_MODEL> — модель, которая будет использоваться для создания эмбеддингов. По умолчанию EmbeddingsGigaR;
  • --env-path <PATH> — путь до файла с переменными окружения .env. По умолчанию ищется .env в текущей директории
  • --verify-ssl-certs <True/False> - проверять сертификаты SSL (по умолчанию True)
  • --mtls-auth - использовать аутентификацию по сертефикатам mTLS
  • --enable-images — экспериментальный флаг, который включает передачу изображений в формате OpenAI в GigaChat API

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

Для настройки параметров утилиты также можно использовать переменные окружения, заданные в файле .env.

Список доступных переменных:

  • PROXY_HOST="localhost" — хост, на котором запускается прокси-сервер. По умолчанию localhost;
  • PROXY_PORT="8090" — порт, на котором запускается прокси-сервер. По умолчанию 8090;
  • MTLS_CA_CERT_PATH - путь к файлу сертификата корневого центра сертификации;
  • MTLS_CERT_FILE_PATH - путь к клиентский сертификату;
  • MTLS_KEY_FILE_PATH - путь к закрытому ключу;
  • GPT2GIGA_VERBOSE="False" — включает/отключает вывод подробной информации;
  • GPT2GIGA_PASS_MODEL="False" — передавать ли модель, указанную в запросе, непосредственно в GigaChat;
  • GPT2GIGA_PASS_TOKEN="False" — передавать токен, полученный в заголовке Authorization, в GigaChat API;
  • GIGACHAT_BASE_URL="https://gigachat.devices.sberbank.ru/api/v1" — базовый URL GigaChat;
  • GIGACHAT_MODEL="GigaChat" — модель GigaChat API, которая будет обрабатывать запросы по умолчанию;
  • GPT2GIGA_TIMEOUT="600" — таймаут для запросов к GigaChat API (в секундах);
  • GIGACHAT_MTLS_AUTH - использовать аутентификацию по сертефикатам mTLS;
  • GPT2GIGA_EMBEDDINGS="EmbeddingsGigaR" — модель для создания эмбеддингов.

Также можно использовать переменные, которые поддерживает библиотека GigaChat:

  • GIGACHAT_USER и GIGACHAT_PASSWORD — для авторизации с помощью с помощью логина и пароля;
  • GIGACHAT_CREDENTIALS и GIGACHAT_SCOPE — для авторизации с помощью ключа авторизации;
  • GIGACHAT_ACCESS_TOKEN — для авторизации с помощью токена доступа, полученного в обмен на ключ;
  • GIGACHAT_CA_BUNDLE_FILE - путь к файлу сертификата корневого центра сертификации;
  • GIGACHAT_CERT_FILE - путь к клиентскому сертификату;
  • GIGACHAT_KEY_FILE - путь к закрытому ключу;
  • GIGACHAT_KEY_FILE_PASSWORD - пароль от закрытого ключа;
  • GIGACHAT_VERIFY_SSL_CERTS — для того, что бы проверять SSL сертификаты, по умолчанию False.

Пример запуска утилиты с заданными параметрами

Для запуска прокси-сервера с заданным адресом и портом выполните команду:

sh gpt2giga \ --host 127.0.0.1 \ --port 8080 \ --verbose \ --pass-model \ --pass-token \ --base-url https://gigachat.devices.sberbank.ru/api/v1 \ --model GigaChat-Max \ --timeout 300 \ --embeddings EmbeddingsGigaR

После запуска сервер будет перенаправлять все запросы, адресованные OpenAI API, в GigaChat API.

Авторизация с помощью заголовка

Утилита может авторизовать запросы в GigaChat API с помощью данных, полученных в заголовке Authorization.

Для этого запустите gpt2giga с аргументом --pass-token или задайте переменную окружения GPT2GIGA_PASS_TOKEN=True. Поддерживается авторизация с помощью ключа, токена доступа и логина и пароля.

Возможные варианты содержимого заголовка Authorization:

  • giga-cred-<credentials>:<scope> — авторизация с помощью ключа. Вместо <scope> нужно указать версию API, к которой будут выполняться запросы. Подробнее о ключе авторизации и версии API.
  • giga-auth-<access_token> — при авторизации с помощью токена доступа. Токен доступа получается в обмен на ключ авторизации и действителен в течение 30 минут.
  • giga-user-<user>:<password> — при авторизации с помощью логина и пароля.

Совместимые приложения

Таблица содержит приложения, проверенные на совместную работу с gpt2giga.

| Приложение | Описание | | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | | Aider | AI-ассистент для написания приложений.
Подробнее о запуске и настройке Aider для работы с gpt2giga — в README | | n8n | Платформа для создания nocode-агентов | | Cline | AI-ассистент разработчика | | OpenHands | AI-ассистент для разработки
Подробнее о запуске и настройке OpenHands для работы с gpt2giga — в README |

Лицензия

Проект распространяется под лицензией MIT. Подробная информация — в файле LICENSE.

Owner

  • Name: AI Forever
  • Login: ai-forever
  • Kind: organization
  • Location: Armenia

Creating ML for the future. AI projects you already know. We are non-profit organization with members from all over the world.

GitHub Events

Total
  • Create event: 7
  • Release event: 1
  • Issues event: 5
  • Watch event: 41
  • Delete event: 2
  • Issue comment event: 11
  • Member event: 3
  • Push event: 32
  • Pull request review comment event: 6
  • Pull request review event: 6
  • Pull request event: 24
  • Fork event: 16
Last Year
  • Create event: 7
  • Release event: 1
  • Issues event: 5
  • Watch event: 41
  • Delete event: 2
  • Issue comment event: 11
  • Member event: 3
  • Push event: 32
  • Pull request review comment event: 6
  • Pull request review event: 6
  • Pull request event: 24
  • Fork event: 16

Committers

Last synced: about 1 year ago

All Time
  • Total Commits: 28
  • Total Committers: 6
  • Avg Commits per committer: 4.667
  • Development Distribution Score (DDS): 0.464
Past Year
  • Commits: 28
  • Committers: 6
  • Avg Commits per committer: 4.667
  • Development Distribution Score (DDS): 0.464
Top Committers
Name Email Commits
mikelarg m****z@g****m 15
Konstantin Krestnikov r****0@g****m 8
Dmitrii Overchenko l****z@b****u 2
Dmitry Abramov A****B@y****u 1
Lytkini i****n@s****u 1
Aleksey Shvedchikov a****k@g****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 10 months ago

All Time
  • Total issues: 7
  • Total pull requests: 27
  • Average time to close issues: about 18 hours
  • Average time to close pull requests: 15 days
  • Total issue authors: 7
  • Total pull request authors: 15
  • Average comments per issue: 0.86
  • Average comments per pull request: 0.04
  • Merged pull requests: 14
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 7
  • Pull requests: 27
  • Average time to close issues: about 18 hours
  • Average time to close pull requests: 15 days
  • Issue authors: 7
  • Pull request authors: 15
  • Average comments per issue: 0.86
  • Average comments per pull request: 0.04
  • Merged pull requests: 14
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • Webbrother (1)
  • nnnet (1)
  • nickbob (1)
  • perovskikh (1)
  • mitrokun (1)
  • RussianLioN (1)
  • choopachuck (1)
Pull Request Authors
  • Lytkini (4)
  • Rai220 (4)
  • Mikelarg (2)
  • artemkolyadin (2)
  • Webbrother (2)
  • nepshaaa (2)
  • Redrrah (2)
  • n1654 (2)
  • Asya02 (1)
  • alexsvdk (1)
  • choopachuck (1)
  • A6PAMOB (1)
  • RakhimovRamis (1)
  • Artem-eho (1)
  • drauggres (1)
Top Labels
Issue Labels
Pull Request Labels
codex (2)

Packages

  • Total packages: 1
  • Total downloads:
    • pypi 348 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 13
  • Total maintainers: 1
pypi.org: gpt2giga
  • Versions: 13
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 348 Last month
Rankings
Dependent packages count: 10.2%
Average: 33.8%
Dependent repos count: 57.4%
Maintainers (1)
Last synced: 11 months ago

Dependencies

poetry.lock pypi
  • aiohappyeyeballs 2.4.3
  • aiohttp 3.10.10
  • aiosignal 1.3.1
  • annotated-types 0.7.0
  • anyio 4.6.2.post1
  • async-timeout 4.0.3
  • asyncio 3.4.3
  • attrs 24.2.0
  • certifi 2024.8.30
  • exceptiongroup 1.2.2
  • frozenlist 1.5.0
  • gigachat 0.1.35
  • h11 0.14.0
  • httpcore 1.0.6
  • httpx 0.27.2
  • idna 3.10
  • multidict 6.1.0
  • propcache 0.2.0
  • pydantic 2.9.2
  • pydantic-core 2.23.4
  • python-dotenv 1.0.1
  • sniffio 1.3.1
  • typing-extensions 4.12.2
  • yarl 1.17.1
pyproject.toml pypi
  • aiohttp ^3.10.10
  • asyncio ^3.4.3
  • gigachat ^0.1.35
  • python ^3.9
  • python-dotenv ^1.0.1
Dockerfile docker
  • python 3.9-slim build