Skip to content

Менеджер для работы с API различных AI-провайдеров

Notifications You must be signed in to change notification settings

Sarvensky/ai_manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI Manager

AI Manager — это универсальный Python-менеджер для удобной работы с API различных AI-провайдеров. Он предоставляет единый интерфейс для отправки запросов, автоматический выбор доступного провайдера, управление прокси-серверами и гибкую настройку параметров.

Основные возможности

  • Поддержка нескольких провайдеров: Работайте с GigaChat, Gemini, Groq, Mistral, OpenRouter, SambaNova и YandexGPT через один интерфейс.
  • Автоматический выбор провайдера: Менеджер сам найдет и выберет первого доступного провайдера на основе ваших API-ключей в переменных окружения.
  • Встроенный менеджер прокси: Автоматический поиск, тестирование и использование прокси-серверов для провайдеров, которым это необходимо.
  • Гибкая настройка: Устанавливайте глобальные и локальные параметры для температуры, максимального количества токенов и моделей.
  • Управление системным промптом: Легко задавайте и меняйте системный промпт для всех запросов.
  • Получение списка моделей: Узнайте, какие модели доступны у каждого провайдера.
  • Автоматическая установка сертификатов: Для GigaChat менеджер сам проверит и установит необходимые сертификаты Минцифры.

1. Установка

Установите библиотеку с помощью pip, указав ссылку на этот Git-репозиторий. Все необходимые зависимости, такие как python-dotenv, будут установлены автоматически.

pip install git+https://github.com/sarvensky/ai_manager.git@main

2. Настройка

API-ключи

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

  1. Создайте файл .env в корневой директории вашего проекта.
  2. Добавьте в него ключи по следующему шаблону:
# .env

# Обязательно для GigaChat
GIGACHAT_API_KEY="Ваш_авторизационный_ключ_для_GigaChat"

# Обязательно для Groq
GROQ_API_KEY="Ваш_ключ_для_Groq"

# Обязательно для Gemini
GEMINI_API_KEY="Ваш_ключ_для_Gemini"

# Обязательно для Mistral
MISTRAL_API_KEY="Ваш_ключ_для_Mistral"

# ... и для других провайдеров
# SAMBANOVA_API_KEY="..."
# OPENROUTER_API_KEY="..."
# YANDEX_API_KEY="..."
# YANDEX_FOLDER_ID="..."

Расширенная конфигурация

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

# --- Основные настройки ---

# Провайдер, который будет использоваться по умолчанию.
# Если не указан, будет выбран первый доступный из списка.
# Пример: AI_PROVIDER="groq"
AI_PROVIDER="groq"

# Путь к файлу с системным промптом (относительно корня проекта).
# Пример: SYSTEM_PROMPT_FILE="PROMPTS/main_prompt.txt"
SYSTEM_PROMPT_FILE="PROMPTS/system_prompt.txt"

# Температура генерации по умолчанию (число с точкой).
DEFAULT_TEMPERATURE="0.6"

# --- Настройки моделей по умолчанию ---

# Вы можете переопределить модели по умолчанию для каждого провайдера.
# Это удобно, чтобы не указывать модель при каждом вызове .chat().
#
# Формат: <ПРОВАЙДЕР>_MODEL="имя_модели"
# Например, чтобы использовать Llama3 70b для Groq:
# GROQ_MODEL="llama3-70b-8192"
#
# GIGACHAT_MODEL="GigaChat-Pro"
# GEMINI_MODEL="gemini-1.5-pro-latest"
# MISTRAL_MODEL="mistral-large-latest"
# OPENROUTER_MODEL="anthropic/claude-3-haiku:free"
# SAMBANOVA_MODEL="Llama-3-70B-Instruct"
# YANDEX_MODEL="yandexgpt"

# --- Настройки прокси ---

# Глобально включает (True) или отключает (False) использование прокси.
USE_PROXY="False"

# Включает прокси только для определенных провайдеров (список через запятую).
# Имеет приоритет над USE_PROXY.
# Пример: PROXY_FOR_PROVIDERS="gemini,gigachat"
PROXY_FOR_PROVIDERS=""

# Ваш статический прокси-сервер. Если указан, автоматический поиск выполняться не будет.
# Пример: PROXY_SERVER="http://user:pass@host:port"
PROXY_SERVER=""

# Таймаут в секундах на весь процесс поиска прокси с помощью proxybroker.
PROXY_FIND_TIMEOUT="60"

# Таймаут в секундах на проверку одного прокси-сервера.
PROXY_TEST_TIMEOUT="10"

# Список стран (коды ISO 3166-1 alpha-2 через запятую) для поиска прокси.
PROXY_COUNTRIES="US,DE,FR"

# Включает (True) или отключает (False) логирование работы прокси-менеджера.
PROXY_LOG_ENABLED="True"

# Сколько дней хранить файлы логов прокси. Установите 0, чтобы не удалять старые логи.
PROXY_LOG_RETENTION_DAYS="30"

# --- Настройки для конкретных провайдеров ---

# OpenRouter: Показывать только бесплатные модели (True/False).
OPENROUTER_FREE_MODELS_ONLY="True"

3. Быстрый старт

Вот простой пример использования менеджера.

from ai_manager import AIManager
from dotenv import load_dotenv

# Загружаем переменные окружения (API-ключи) из .env файла
load_dotenv()

try:
    # 1. Инициализируем менеджер
    # Он автоматически найдет первого доступного провайдера
    ai = AIManager()
    print(f"✅ Успешно инициализирован провайдер: {ai.get_provider_name()}")

    # 2. Готовим сообщения для диалога
    messages = [
        {"role": "user", "content": "Привет! Расскажи интересный факт о космосе."}
    ]

    # 3. Отправляем запрос
    print("\nОтправляю запрос...")
    response = ai.chat(messages)

    # 4. Печатаем ответ
    print("\nОтвет модели:")
    print(response)

except (ValueError, RuntimeError) as e:
    print(f"❌ Произошла ошибка: {e}")

4. Справочник по API (API Reference)

AIManager()

Класс для управления AI-провайдерами.

from ai_manager import AIManager
ai = AIManager()

ai.chat(messages, provider_name=None, model=None, temperature=None, max_tokens=None)

Основной метод для отправки запроса к модели.

  • messages (list): Список словарей, описывающих диалог. Пример: [{"role": "user", "content": "Твой вопрос"}]
  • provider_name (str, optional): Позволяет выполнить этот конкретный запрос через другого провайдера, не меняя основного.
  • model (str, optional): Указать конкретную модель для этого запроса.
  • temperature (float, optional): Температура генерации для этого запроса (от 0.0 до 2.0).
  • max_tokens (int, optional): Максимальное количество токенов в ответе.

Пример:

# Простой запрос
response = ai.chat([{"role": "user", "content": "Как дела?"}])

# Запрос к другому провайдеру с указанием модели
response_groq = ai.chat(
    messages=[{"role": "user", "content": "Что такое Groq?"}],
    provider_name="groq",
    model="llama3-8b-8192"
)

Управление провайдерами

ai.get_provider_name()

Возвращает имя текущего активного провайдера.

ai.set_provider(provider_name)

Переключает активного провайдера.

ai.get_provider()

Возвращает текущий экземпляр класса провайдера.

print(f"Текущий провайдер: {ai.get_provider_name()}") # -> 'gigachat'
ai.set_provider("groq")
print(f"Новый провайдер: {ai.get_provider_name()}") # -> 'groq'

Управление параметрами по умолчанию

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

ai.set_default_model(model_name, provider_name=None)

Устанавливает модель по умолчанию для указанного (или текущего) провайдера.

# Установить модель по умолчанию для текущего провайдера
ai.set_default_model("llama3-70b-8192")

# Установить модель по умолчанию для другого провайдера
ai.set_default_model("GigaChat-Pro", provider_name="gigachat")

ai.set_default_temperature(temperature)

Устанавливает глобальную температуру.

ai.set_default_max_tokens(max_tokens)

Устанавливает глобальное ограничение на токены.

ai.reset_defaults()

Сбрасывает все настройки по умолчанию (модели, температура, токены) к исходным значениям.

ai.get_default_model(provider_name=None)

Возвращает модель по умолчанию для указанного (или текущего) провайдера.

ai.get_default_temperature()

Возвращает текущую температуру по умолчанию.

ai.get_default_max_tokens()

Возвращает текущее максимальное количество токенов по умолчанию.


Управление системным промптом

ai.set_system_prompt(file_path)

Загружает и устанавливает глобальный системный промпт из текстового файла.

# Создаем файл system.txt
with open("system.txt", "w", encoding="utf-8") as f:
    f.write("Ты — полезный ассистент, который говорит в стиле пирата.")

ai.set_system_prompt("system.txt")

# Теперь все ответы будут в пиратском стиле
response = ai.chat([{"role": "user", "content": "Какой сегодня день?"}])
print(response) # -> "Йо-хо-хо! Сегодняшний день..."

ai.get_system_prompt()

Возвращает текущий системный промпт.

ai.clear_system_prompt()

Удаляет глобальный системный промпт.


Управление моделями

ai.list_models()

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

ai.update_models_list(output_file="available_models.txt")

Проверяет доступные модели у всех провайдеров и сохраняет их в файл. Полезно, если вы не уверены, какие модели сейчас актуальны.

ai.get_current_model_name()

Возвращает имя модели, которая будет использована по умолчанию в следующем вызове chat().

Порядок определения модели следующий:

  1. Модель, установленная через set_default_model() для текущего провайдера.
  2. Модель, указанная в .env файле (например, GROQ_MODEL="ваша_модель").
  3. Модель по умолчанию, заданная в коде самого провайдера.

Управление прокси

ai.get_proxy_status()

Возвращает статус прокси-менеджера.

ai.set_proxy_enabled(enabled)

Включает (True) или отключает (False) использование прокси.

ai.refresh_proxy()

Принудительно запускает поиск нового рабочего прокси.

5. Лицензия

Проект распространяется под лицензией MIT.

About

Менеджер для работы с API различных AI-провайдеров

Resources

Stars

Watchers

Forks

Languages