# AI Provider Switching ## Обзор Бот поддерживает переключение между AI-провайдерами: - **Qwen Code** — основной провайдер (Alibaba) - **GigaChat** — альтернативный провайдер (Sber) ## Использование ### Через команду `/ai` **Просмотр текущего статуса:** ``` /ai ``` Покажет текущего провайдера и доступные опции. **Переключение на Qwen:** ``` /ai qwen ``` **Переключение на GigaChat:** ``` /ai gigachat ``` ### Через меню 1. Нажмите `/settings` или кнопку "⚙️ Настройки бота" 2. Выберите "🤖 AI-провайдер" 3. Доступные опции: - "🔄 Переключить AI-провайдер" — переключает на альтернативный провайдер - "ℹ️ Информация о провайдерах" — подробная информация о каждом провайдере ## Архитектура ### Новые файлы - `bot/ai_provider_manager.py` — менеджер управления провайдерами - `bot/models/user_state.py` — добавлено поле `current_ai_provider` ### Изменённые файлы - `bot.py` — модифицирован `handle_ai_task()` для использования текущего провайдера - `bot/handlers/commands.py` — добавлена команда `/ai` - `bot/handlers/callbacks.py` — добавлены обработчики меню AI-провайдера - `bot/keyboards/menus.py` — добавлено меню "🤖 AI-провайдер" ## Как это работает 1. **Хранение состояния**: Каждый пользователь имеет своё предпочтение провайдера в `UserState.current_ai_provider` 2. **Обработка запросов**: При получении AI-запроса `handle_ai_task()` проверяет текущего провайдера и использует соответствующий API: - **Qwen**: Потоковый вывод с `on_chunk` callback - **GigaChat**: Ответ целиком 3. **Переключение**: При переключении провайдера обновляется состояние пользователя, новый запрос сразу идёт через выбранного провайдера ## Настройка GigaChat Для использования GigaChat добавьте в `.env`: ```env # GigaChat API (Сбер) GIGACHAT_CLIENT_ID=ваш-client-id-uuid GIGACHAT_CLIENT_SECRET=ваш-client-secret GIGACHAT_SCOPE=GIGACHAT_API_PERS GIGACHAT_AUTH_URL=https://ngw.devices.sberbank.ru:9443/api/v2/oauth GIGACHAT_MODEL=GigaChat-Pro ``` ## Отображение в ответе В конце каждого AI-ответа указывается используемый провайдер: ``` 📊 Контекст: 0.5% 🤖 AI: Qwen Code ``` или ``` 📊 Контекст: 0.5% 🤖 AI: GigaChat ``` ## Приоритеты провайдеров - **По умолчанию**: Qwen Code - **Если GigaChat не настроен**: Переключение недоступно (показывается ошибка) - **Инструменты**: Доступны только с Qwen (GigaChat используется только для чата) ## Будущие улучшения - [ ] Умное переключение (автоматический выбор провайдера по типу задачи) - [ ] Поддержка инструментов для GigaChat - [ ] Статистика использования провайдеров - [ ] Настройка провайдера по умолчанию