Update environment variables, Docker configuration, and dependencies; refactor token management and chat agent logic. Added FastAPI server setup and improved message handling in GigaChat client.

This commit is contained in:
12 changed files with 348 additions and 50 deletions

View File

@@ -23,7 +23,8 @@ class GigaChatClient:
async def _get_session(self) -> aiohttp.ClientSession:
"""Получить HTTP сессию (lazy initialization)."""
if self._session is None or self._session.closed:
self._session = aiohttp.ClientSession()
connector = aiohttp.TCPConnector(ssl=False)
self._session = aiohttp.ClientSession(connector=connector)
return self._session
async def chat(
@@ -73,7 +74,7 @@ class GigaChatClient:
Args:
message: Текст сообщения
context: История сообщений
context: История сообщений (уже должна содержать системное сообщение первым)
model: Модель GigaChat
temperature: Температура генерации
max_tokens: Максимальное количество токенов
@@ -81,8 +82,22 @@ class GigaChatClient:
Returns:
Полный ответ от API
"""
messages = context or []
messages.append(GigaChatMessage(role="user", content=message))
# Создаем копию списка, чтобы не изменять оригинал
messages = list(context) if context else []
# Убеждаемся, что системное сообщение первое
system_messages = [msg for msg in messages if msg.role == "system"]
non_system_messages = [msg for msg in messages if msg.role != "system"]
# Если есть системные сообщения, берем первое, иначе оставляем список пустым
if system_messages:
messages = [system_messages[0]] + non_system_messages
else:
messages = non_system_messages
# Добавляем текущее сообщение пользователя только если его еще нет в конце
if not messages or messages[-1].role != "user" or messages[-1].content != message:
messages.append(GigaChatMessage(role="user", content=message))
request = GigaChatRequest(
model=model,