Skip to content

chelaxian/1min-relay

 
 

Repository files navigation

1min-relay

Описание проекта

1min-relay - это сервер-посредник (прокси), реализующий API, совместимый с OpenAI API, для работы с различными AI-моделями через сервис 1min.ai. Он позволяет использовать клиентские приложения, поддерживающие OpenAI API, с моделями различных провайдеров через единый интерфейс.

Особенности

  • Полностью совместим с OpenAI API, включая chat/completions, images, audio и files
  • Поддерживает большое количество моделей от различных провайдеров: OpenAI, Claude, Mistral, Google и других
  • Работает с различными типами запросов: текстовыми, изображениями, аудио и файлами
  • Реализует потоковую передачу данных (streaming)
  • Имеет функцию ограничения запросов (rate limiting) с использованием Memcached
  • Позволяет задать подмножество разрешенных моделей через переменные окружения
  • Оптимизированная модульная структура с минимальным дублированием кода

Структура проекта

Проект имеет модульную структуру для облегчения разработки и поддержки:

1min-relay/
├── app.py                # Основной файл приложения - инициализация сервера и настройки
├── utils/                # Общие утилиты и модули
│   ├── __init__.py       # Инициализация пакета
│   ├── common.py         # Общие вспомогательные функции
│   ├── constants.py      # Константы и конфигурационные переменные
│   ├── imports.py        # Централизованные импорты
│   ├── logger.py         # Настройка логирования
│   └── memcached.py      # Функции для работы с Memcached
├── routes/               # Маршруты API
│   ├── __init__.py       # Инициализация модуля маршрутов
│   ├── text.py           # Маршруты для текстовых запросов
│   ├── images.py         # Маршруты для работы с изображениями
│   ├── audio.py          # Маршруты для аудио запросов
│   ├── files.py          # Маршруты для работы с файлами
│   └── functions/        # Вспомогательные функции для различных типов запросов
│       ├── __init__.py   # Инициализация пакета функций
│       ├── shared_func.py# Общие вспомогательные функции для всех типов запросов
│       ├── txt_func.py   # Вспомогательные функции для текстовых моделей
│       ├── img_func.py   # Вспомогательные функции для работы с изображениями
│       ├── audio_func.py # Вспомогательные функции для работы с аудио
│       └── file_func.py  # Вспомогательные функции для работы с файлами
├── requirements.txt      # Зависимости проекта
├── INSTALL.sh            # Скрипт локальной установки (venv)
├── RUN.sh                # Скрипт локального запуска (venv)
├── UPDATE.sh             # Скрипт обновления Docker-контейнера
├── Dockerfile            # Инструкции для сборки Docker-образа
├── CODE_STRUCTURE.md     # Подробная информация о структуре кода
└── README.md             # Документация проекта

Ключевые компоненты:

  • app.py: Основной файл приложения, который инициализирует сервер, настраивает параметры и создает Flask-приложение.

  • utils/: Содержит основные утилитные модули, обеспечивающие базовую функциональность:

    • common.py: Общие вспомогательные функции, используемые во всем приложении
    • constants.py: Определяет все константы, конфигурационные переменные и списки моделей
    • imports.py: Централизует импорты для избежания циклических зависимостей
    • logger.py: Настраивает логирование для приложения
    • memcached.py: Обеспечивает функциональность ограничения запросов
  • routes/: Содержит основные API-эндпоинты, реализующие совместимость с OpenAI API:

    • text.py: Реализует эндпоинты chat/completions
    • images.py: Реализует эндпоинты для генерации и обработки изображений
    • audio.py: Реализует эндпоинты для преобразования речи в текст и текста в речь
    • files.py: Реализует эндпоинты для управления файлами
  • routes/functions/: Содержит вспомогательные функции, поддерживающие основные обработчики маршрутов:

    • shared_func.py: Общие вспомогательные функции для всех типов запросов
    • txt_func.py: Вспомогательные функции для текстовых моделей
    • img_func.py: Вспомогательные функции для работы с изображениями
    • audio_func.py: Вспомогательные функции для работы с аудио
    • file_func.py: Вспомогательные функции для работы с файлами

Требования

  • Python 3.7+
  • Flask и связанные библиотеки
  • Memcached (опционально для rate limiting)
  • API ключ сервиса 1min.ai

Установка и запуск

Установка зависимостей

sudo apt update
sudo apt install python3 python3-venv python3-pip -y
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

Настройка переменных окружения

Создайте файл .env в корневой директории проекта:

PORT=5001
SUBSET_OF_ONE_MIN_PERMITTED_MODELS=gpt-4o-mini,mistral-nemo,claude-3-haiku-20240307,gemini-1.5-flash
PERMIT_MODELS_FROM_SUBSET_ONLY=false

Запуск сервера

sudo apt install memcached libmemcached-tools -y
sudo systemctl enable memcached
sudo systemctl start memcached
source venv/bin/activate
python app.py

После запуска сервер будет доступен по адресу http://localhost:5001/.

Скрипты для автоматизации локальной установки (venv), локального запуска (venv), обновления (Docker-контейнер)

chmod +x *.sh
# python-venv
sudo ./INSTALL.sh
./RUN.sh
# docker (reinstall)
mv UPDATE.sh ../
cd ../
./UPDATE.sh

Использование с клиентами OpenAI API

Большинство клиентов OpenAI API могут быть настроены для использования этого сервера путем указания базового URL:

http://localhost:5001/v1

При отправке запросов к API используйте свой API ключ 1min.ai в заголовке Authorization:

Authorization: Bearer your-1min-api-key

Запуск с использованием Docker

Вы также можете запустить сервер в Docker-контейнере:

    docker run -d --name 1min-relay-container --restart always --network 1min-relay-network -p 5001:5001 \
      -e SUBSET_OF_ONE_MIN_PERMITTED_MODELS="mistral-nemo,gpt-4o-mini,deepseek-chat" \
      -e PERMIT_MODELS_FROM_SUBSET_ONLY=False \
      -e MEMCACHED_HOST=memcached \
      -e MEMCACHED_PORT=11211 \
      1min-relay-container:latest

Лицензия

MIT License

About

This project is a relay from 1min ai api to openai like structure

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 98.9%
  • Other 1.1%