# -*- coding: utf-8 -*- """DokoGen — настройки API для внешних сервисов проверки. Хранятся в JSON рядом с программой (api_settings.json). Поля: - dadata_token — API-ключ DaData (проверка организации по ИНН) - ai_api_key — API-ключ ИИ (OpenAI-совместимый: DeepSeek, ChatGPT и др.) - ai_model — модель ИИ (deepseek-chat, gpt-4o-mini, gpt-4o и т.п.) - ai_base_url — адрес API ИИ (по умолчанию DeepSeek) """ import os import sys import json DEFAULT_SETTINGS = { 'dadata_token': '431aa11706bf83f571cef0319259289aa750bcb1', 'ai_api_key': 'sk-3c7e6673f245412697d0e14b6096435f', 'ai_model': 'deepseek-chat', 'ai_base_url': 'https://api.deepseek.com', } # Старые ключи (для совместимости со старым файлом api_settings.json) _LEGACY_KEYS = { 'deepseek_api_key': 'ai_api_key', 'deepseek_model': 'ai_model', } def default_api_settings_path(): """Путь к файлу настроек: рядом с exe (frozen) или рядом с модулем.""" if getattr(sys, 'frozen', False): base = os.path.dirname(sys.executable) else: base = os.path.dirname(os.path.abspath(__file__)) return os.path.join(base, 'api_settings.json') def load_api_settings(path=None): """Загрузка настроек API из JSON-файла. Если файла нет — дефолт.""" if path is None: path = default_api_settings_path() if not path or not os.path.exists(path): return dict(DEFAULT_SETTINGS) try: with open(path, encoding='utf-8-sig') as f: loaded = json.load(f) merged = dict(DEFAULT_SETTINGS) for k, v in loaded.items(): # переносим старые ключи в новые if k in _LEGACY_KEYS and not loaded.get(_LEGACY_KEYS[k]): merged[_LEGACY_KEYS[k]] = v elif k in merged: merged[k] = v return merged except Exception: return dict(DEFAULT_SETTINGS) def save_api_settings(settings, path=None): """Сохранение настроек API. Возвращает True/False.""" if path is None: path = default_api_settings_path() try: os.makedirs(os.path.dirname(path), exist_ok=True) with open(path, 'w', encoding='utf-8') as f: json.dump(settings, f, ensure_ascii=False, indent=2) return True except Exception: return False