/
dsboikov
/
aiBoardRoom
Обзор
Документация
Войти
/
dsboikov
/
aiBoardRoom
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/config.py
192 строки
6 KB
Денис
GigaChat and YandexGPT added
04 авг 2026, 09:00
04 авг 2026, 09:00
6d6fee5
Код
Авторство
О чём код?
"""Application configuration and defaults.""" from __future__ import annotations from pathlib import Path APP_NAME = "Совет директоров ИИ" APP_VERSION = "0.1.0" APP_ORG = "AIBoardRoom" DATA_DIR = Path.home() / ".ai-board-room" DATA_DIR.mkdir(parents=True, exist_ok=True) SQLITE_PATH = DATA_DIR / "metadata.db" CHROMA_PATH = DATA_DIR / "chroma_db" CACHE_PATH = DATA_DIR / "cache" LOGS_PATH = DATA_DIR / "logs" EXPORTS_PATH = DATA_DIR / "exports" for _path in (CHROMA_PATH, CACHE_PATH, LOGS_PATH, EXPORTS_PATH): _path.mkdir(parents=True, exist_ok=True) # Networking HTTP_TIMEOUT = 120.0 HTTP_CONNECT_TIMEOUT = 15.0 HTTP_MAX_RETRIES = 3 HTTP_RETRY_BACKOFF = 1.5 # Pre-ETL (Mode 0) ETL_MAX_TOKENS = 1200 ETL_TOP_K = 8 # Soft per-request input caps (free tiers / TPM ceilings). Leave headroom for prompts. PROVIDER_MAX_INPUT_TOKENS: dict[str, int] = { "chatgpt": 80_000, "claude": 80_000, "deepseek": 24_000, "gigachat": 24_000, "grok": 24_000, "groq": 4_000, "ollama": 8_000, "yandexgpt": 24_000, } # Orchestration CRITIQUE_MAX_ROUNDS = 3 DEFAULT_TEMPERATURE = 0.7 # Logging LOG_LEVEL = "INFO" LOG_MAX_BYTES = 5 * 1024 * 1024 LOG_BACKUP_COUNT = 5 # Keyring KEYRING_SERVICE = "ai-board-room" KEYRING_MASTER_KEY = "master-fernet-key" # Provider ids (alphabetical by label; UI also re-sorts) PROVIDER_IDS: tuple[str, ...] = ( "chatgpt", "claude", "deepseek", "gigachat", "grok", "groq", "ollama", "yandexgpt", ) PROVIDER_LABELS: dict[str, str] = { "chatgpt": "ChatGPT", "claude": "Claude", "deepseek": "DeepSeek", "gigachat": "GigaChat", "grok": "Grok (xAI)", "groq": "Groq (бесплатный облачный)", "ollama": "Ollama (бесплатно, локально)", "yandexgpt": "YandexGPT", } # Providers that work without a real secret (local dummy key) OPTIONAL_API_KEY_PROVIDERS: frozenset[str] = frozenset({"ollama"}) DEFAULT_DUMMY_KEYS: dict[str, str] = {"ollama": "ollama"} # Default models per provider DEFAULT_MODELS: dict[str, list[str]] = { "chatgpt": ["gpt-4o", "gpt-4-turbo", "gpt-4o-mini", "gpt-3.5-turbo"], "claude": [ "claude-3-5-sonnet-20241022", "claude-3-opus-20240229", "claude-3-sonnet-20240229", "claude-3-haiku-20240307", ], "deepseek": ["deepseek-chat", "deepseek-coder", "deepseek-reasoner"], "gigachat": ["GigaChat", "GigaChat-Pro", "GigaChat-Max", "GigaChat-Plus"], "grok": ["grok-4", "grok-4-fast-reasoning", "grok-3", "grok-3-mini", "grok-2"], "groq": [ "llama-3.3-70b-versatile", "llama-3.1-8b-instant", "mixtral-8x7b-32768", "gemma2-9b-it", ], "ollama": ["llama3.2", "llama3.1", "mistral", "qwen2.5", "phi3"], "yandexgpt": ["yandexgpt-lite", "yandexgpt", "yandexgpt-32k"], } DEFAULT_PROVIDER_MODEL: dict[str, str] = { "chatgpt": "gpt-4o", "claude": "claude-3-5-sonnet-20241022", "deepseek": "deepseek-chat", "gigachat": "GigaChat", "grok": "grok-4", "groq": "llama-3.1-8b-instant", "ollama": "llama3.2", "yandexgpt": "yandexgpt-lite", } # USD per 1M tokens (approximate; used for cost preview) MODEL_PRICING: dict[str, dict[str, float]] = { "llama3.2": {"input": 0.0, "output": 0.0}, "llama3.1": {"input": 0.0, "output": 0.0}, "mistral": {"input": 0.0, "output": 0.0}, "qwen2.5": {"input": 0.0, "output": 0.0}, "phi3": {"input": 0.0, "output": 0.0}, "llama-3.3-70b-versatile": {"input": 0.0, "output": 0.0}, "llama-3.1-8b-instant": {"input": 0.0, "output": 0.0}, "mixtral-8x7b-32768": {"input": 0.0, "output": 0.0}, "gemma2-9b-it": {"input": 0.0, "output": 0.0}, "deepseek-chat": {"input": 0.14, "output": 0.28}, "deepseek-coder": {"input": 0.14, "output": 0.28}, "deepseek-reasoner": {"input": 0.55, "output": 2.19}, "claude-3-opus-20240229": {"input": 15.0, "output": 75.0}, "claude-3-sonnet-20240229": {"input": 3.0, "output": 15.0}, "claude-3-5-sonnet-20241022": {"input": 3.0, "output": 15.0}, "claude-3-haiku-20240307": {"input": 0.25, "output": 1.25}, "gpt-4o": {"input": 2.5, "output": 10.0}, "gpt-4-turbo": {"input": 10.0, "output": 30.0}, "gpt-4o-mini": {"input": 0.15, "output": 0.6}, "gpt-3.5-turbo": {"input": 0.5, "output": 1.5}, "grok-4": {"input": 3.0, "output": 15.0}, "grok-4-fast-reasoning": {"input": 0.2, "output": 0.5}, "grok-3": {"input": 3.0, "output": 15.0}, "grok-3-mini": {"input": 0.3, "output": 0.5}, "grok-2": {"input": 2.0, "output": 10.0}, "GigaChat": {"input": 0.5, "output": 0.5}, "GigaChat-Pro": {"input": 1.5, "output": 1.5}, "GigaChat-Max": {"input": 2.0, "output": 2.0}, "GigaChat-Plus": {"input": 1.0, "output": 1.0}, "yandexgpt-lite": {"input": 0.2, "output": 0.2}, "yandexgpt": {"input": 0.6, "output": 0.6}, "yandexgpt-32k": {"input": 1.0, "output": 1.0}, } # Default daily token limits (0 = unlimited) DEFAULT_DAILY_LIMITS: dict[str, int] = { "chatgpt": 200_000, "claude": 50_000, "deepseek": 100_000, "gigachat": 100_000, "grok": 100_000, "groq": 100_000, "ollama": 0, "yandexgpt": 100_000, } # Provider API base URLs PROVIDER_BASE_URLS: dict[str, str] = { "chatgpt": "https://api.openai.com/v1", "claude": "https://api.anthropic.com", "deepseek": "https://api.deepseek.com", # Target host since mid-2026; legacy: https://gigachat.devices.sberbank.ru/api/v1 "gigachat": "https://api.giga.chat/v1", "grok": "https://api.x.ai/v1", "groq": "https://api.groq.com/openai/v1", "ollama": "http://127.0.0.1:11434/v1", "yandexgpt": "https://llm.api.cloud.yandex.net", } # Room modes MODE_CRITIQUE = "critique" MODE_SEQUENTIAL = "sequential" MODE_JUDGE = "judge" ROOM_MODES = (MODE_CRITIQUE, MODE_SEQUENTIAL, MODE_JUDGE) # Whisper WHISPER_API_MODEL = "whisper-1" WHISPER_CPP_BIN_NAMES = ("whisper-cli", "whisper.cpp", "main") # Supported ingest extensions DOC_EXTENSIONS = {".pdf", ".docx", ".txt", ".md", ".markdown"} IMAGE_EXTENSIONS = {".png", ".jpg", ".jpeg", ".webp", ".gif"} AUDIO_EXTENSIONS = {".mp3", ".wav", ".m4a", ".ogg", ".flac", ".webm"}