from dataclasses import dataclass, field from ai.mcp_client import InProcessMCPClientCustomTools from ai.mcp_tools import MCPServerTools from auth.auth_manager import AuthManager from components.admin.constants import ADMIN_SETTINGS_ENTRY from config import OLLAMA_HOST from core.settings_management import SettingsManager, NestedSettingsManager from core.utils import split_host_port @dataclass class AiBuddySettingsEntry: ollama_ip: str = "" ollama_port: int = 11434 ollama_model: str = "mistral" llm_mode: str = InProcessMCPClientCustomTools.ID available_tools: list = field(default_factory=MCPServerTools.list_tools) def __post_init__(self): host, port = split_host_port(OLLAMA_HOST) self.ollama_ip = host self.ollama_port = port @dataclass() class JiraSettingsEntry: user_name: str = "" api_token: str = "" @dataclass class AdminSettings: ai_buddy: AiBuddySettingsEntry = field(default_factory=AiBuddySettingsEntry) jira: JiraSettingsEntry = field(default_factory=JiraSettingsEntry) class AdminDbManager: def __init__(self, session: dict, settings_manager: SettingsManager): self._session = session self._settings_manager = settings_manager self.ai_buddy = NestedSettingsManager(AuthManager.admin_session(), settings_manager, ADMIN_SETTINGS_ENTRY, AdminSettings, "ai_buddy") self.jira = NestedSettingsManager(session, settings_manager, ADMIN_SETTINGS_ENTRY, AdminSettings, "jira")