38 lines
1.6 KiB
Python
38 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
||
"""Модели состояния пользователя."""
|
||
|
||
from typing import Dict, List, Optional, Any
|
||
from dataclasses import dataclass, field
|
||
|
||
|
||
@dataclass
|
||
class UserState:
|
||
"""Состояние пользователя в диалоге."""
|
||
current_menu: str = "main"
|
||
waiting_for_input: bool = False
|
||
input_type: Optional[str] = None # "name", "host", "port", "user", "tags", "server_action"
|
||
parent_menu: Optional[str] = None
|
||
context: Dict[str, Any] = field(default_factory=dict)
|
||
working_directory: Optional[str] = None
|
||
current_server: str = "local" # Имя текущего сервера
|
||
editing_server: Optional[str] = None # Имя сервера, который редактируем
|
||
ai_chat_mode: bool = True # Режим чата с ИИ агентом (включен по умолчанию)
|
||
ai_chat_history: List[str] = field(default_factory=list) # История диалога с ИИ
|
||
messages_since_fact_extract: int = 0 # Счётчик для извлечения фактов
|
||
current_ai_provider: str = "qwen" # Текущий AI-провайдер: "qwen" или "gigachat"
|
||
|
||
|
||
class StateManager:
|
||
"""Управление состояниями пользователей."""
|
||
|
||
def __init__(self):
|
||
self._states: Dict[int, UserState] = {}
|
||
|
||
def get(self, user_id: int) -> UserState:
|
||
if user_id not in self._states:
|
||
self._states[user_id] = UserState()
|
||
return self._states[user_id]
|
||
|
||
def reset(self, user_id: int):
|
||
self._states[user_id] = UserState()
|