Обновлены настройки для интеграции с AI-agent сервисом. Изменены переменные окружения в .env, добавлен путь к .env в конфигурации, обновлен GigaChatService для работы через AI-agent. Также исправлены запросы в ScheduleGenerator для корректной загрузки задач. Обновлен docker-compose для подключения к AI-agent сервису.
This commit is contained in:
@@ -7,19 +7,26 @@ import time
|
||||
from urllib.parse import urlencode
|
||||
from typing import Optional, List, Dict, Any
|
||||
|
||||
from dotenv import load_dotenv
|
||||
|
||||
from app.core.config import settings
|
||||
|
||||
load_dotenv()
|
||||
from app.services.ai_agent_client import ai_agent_client
|
||||
|
||||
class GigaChatService:
|
||||
"""
|
||||
Сервис для работы с GigaChat через внешний AI-agent сервис.
|
||||
Все запросы к GigaChat теперь проходят через внешний сервис.
|
||||
"""
|
||||
def __init__(self):
|
||||
self.access_token: Optional[str] = None
|
||||
self.token_expires_at: Optional[float] = None
|
||||
|
||||
async def _get_token(self) -> str:
|
||||
"""Получить OAuth токен"""
|
||||
"""
|
||||
Получить OAuth токен.
|
||||
|
||||
ВНИМАНИЕ: Этот метод больше не используется, так как все запросы
|
||||
к GigaChat теперь проходят через внешний AI-agent сервис.
|
||||
Метод оставлен для возможной обратной совместимости.
|
||||
"""
|
||||
# Проверяем, не истек ли токен (оставляем запас 60 секунд)
|
||||
if self.access_token and self.token_expires_at:
|
||||
if time.time() < (self.token_expires_at - 60):
|
||||
@@ -110,49 +117,59 @@ class GigaChatService:
|
||||
context: Optional[List[Dict[str, Any]]] = None,
|
||||
model: str = None
|
||||
) -> Dict[str, Any]:
|
||||
"""Отправить сообщение в GigaChat"""
|
||||
token = await self._get_token()
|
||||
model = model or settings.GIGACHAT_MODEL_CHAT or "GigaChat"
|
||||
|
||||
messages = context or []
|
||||
messages.append({"role": "user", "content": message})
|
||||
|
||||
headers = {
|
||||
"Authorization": f"Bearer {token}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
payload = {
|
||||
"model": model,
|
||||
"messages": messages,
|
||||
"temperature": 0.7,
|
||||
"max_tokens": 2000
|
||||
}
|
||||
|
||||
# Отключаем проверку SSL (только для разработки!)
|
||||
# Используем ssl=False для полного отключения проверки сертификата
|
||||
connector = aiohttp.TCPConnector(ssl=False)
|
||||
async with aiohttp.ClientSession(connector=connector) as session:
|
||||
async with session.post(
|
||||
f"{settings.GIGACHAT_BASE_URL}/chat/completions",
|
||||
headers=headers,
|
||||
json=payload
|
||||
) as response:
|
||||
if response.status != 200:
|
||||
error_text = await response.text()
|
||||
raise Exception(f"GigaChat API error: {response.status} - {error_text}")
|
||||
|
||||
result = await response.json()
|
||||
"""
|
||||
Отправить сообщение в GigaChat через внешний AI-agent сервис.
|
||||
Сохраняет обратную совместимость с форматом ответа GigaChat API.
|
||||
"""
|
||||
try:
|
||||
# Используем внешний AI-agent сервис
|
||||
result = await ai_agent_client.chat(
|
||||
message=message,
|
||||
conversation_id=None, # Если нужен conversation_id, его нужно передавать отдельно
|
||||
context=context
|
||||
)
|
||||
|
||||
# Преобразуем ответ AI-agent сервиса в формат, совместимый с GigaChat API
|
||||
# Предполагаем, что ai_agent_client возвращает структуру ChatResponse или аналогичную
|
||||
if "response" in result:
|
||||
# Если ответ в формате ChatResponse, преобразуем в формат GigaChat
|
||||
return {
|
||||
"model": result.get("model", model or settings.GIGACHAT_MODEL_CHAT or "GigaChat"),
|
||||
"choices": [{
|
||||
"message": {
|
||||
"role": "assistant",
|
||||
"content": result["response"]
|
||||
},
|
||||
"finish_reason": "stop"
|
||||
}],
|
||||
"usage": {
|
||||
"total_tokens": result.get("tokens_used", 0),
|
||||
"prompt_tokens": 0,
|
||||
"completion_tokens": result.get("tokens_used", 0)
|
||||
}
|
||||
}
|
||||
else:
|
||||
# Если ответ уже в формате GigaChat, возвращаем как есть
|
||||
return result
|
||||
except Exception as e:
|
||||
# Если внешний сервис недоступен, пробрасываем ошибку
|
||||
raise Exception(f"AI-agent service error: {str(e)}")
|
||||
|
||||
async def generate_text(
|
||||
self,
|
||||
prompt: str,
|
||||
model: str = None
|
||||
) -> str:
|
||||
"""Генерация текста по промпту"""
|
||||
result = await self.chat(prompt, model=model)
|
||||
return result.get("choices", [{}])[0].get("message", {}).get("content", "")
|
||||
"""
|
||||
Генерация текста по промпту через внешний AI-agent сервис.
|
||||
"""
|
||||
try:
|
||||
# Используем метод generate_text из ai_agent_client
|
||||
response_text = await ai_agent_client.generate_text(prompt=prompt, model=model)
|
||||
return response_text
|
||||
except Exception as e:
|
||||
# Если произошла ошибка, пробрасываем её
|
||||
raise Exception(f"AI-agent service error: {str(e)}")
|
||||
|
||||
|
||||
gigachat_service = GigaChatService()
|
||||
|
||||
Reference in New Issue
Block a user