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

@@ -21,7 +21,7 @@ class ChatAgent:
user_id: UUID,
message: str,
conversation_id: Optional[str] = None,
model: str = "GigaChat-2-Lite",
model: str = "GigaChat-2",
) -> tuple[str, int]:
"""
Отправить сообщение и получить ответ.
@@ -39,22 +39,25 @@ class ChatAgent:
context_messages = []
if conversation_id:
cached_context = await self.cache.get_context(str(conversation_id))
# Фильтруем системные сообщения из кэша - они не должны там храниться
context_messages = [
GigaChatMessage(role=msg["role"], content=msg["content"])
for msg in cached_context
if msg["role"] != "system"
]
# Добавляем системный промпт в начало
# Системное сообщение ВСЕГДА должно быть первым
system_message = GigaChatMessage(role="system", content=EARTH_PERSONA)
if not context_messages or context_messages[0].role != "system":
context_messages.insert(0, system_message)
# Убеждаемся, что системное сообщение первое (удаляем все системные сообщения и добавляем одно в начало)
context_messages = [msg for msg in context_messages if msg.role != "system"]
context_messages.insert(0, system_message)
# Добавляем текущее сообщение пользователя
context_messages.append(GigaChatMessage(role="user", content=message))
# Отправляем запрос
# Отправляем запрос (не передаем message отдельно, т.к. оно уже в context_messages)
response = await self.gigachat.chat_with_response(
message=message,
message="", # Пустое, т.к. сообщение уже добавлено в context_messages
context=context_messages,
model=model,
temperature=0.7,
@@ -76,7 +79,7 @@ class ChatAgent:
user_id: UUID,
message: str,
context: Optional[List[dict]] = None,
model: str = "GigaChat-2-Lite",
model: str = "GigaChat-2",
) -> tuple[str, int]:
"""
Отправить сообщение с явным контекстом.
@@ -100,8 +103,9 @@ class ChatAgent:
context_messages.append(GigaChatMessage(role="user", content=message))
# Отправляем запрос (не передаем message отдельно, т.к. оно уже в context_messages)
response = await self.gigachat.chat_with_response(
message=message,
message="", # Пустое, т.к. сообщение уже добавлено в context_messages
context=context_messages,
model=model,
temperature=0.7,