"""Конфигурация приложения и DNS resolver""" import os import json import urllib.request import socket # === ENVIRONMENT CONFIG === PORT = 7860 TOKEN = os.environ.get("TELEGRAM_BOT_TOKEN", "").strip() ALLOWED_USER = os.environ.get("TELEGRAM_ALLOWED_USERS", "").strip() CF_URL = os.environ.get("CF_WORKER_URL", "").rstrip('/') # NVIDIA API API_KEY = os.environ.get("NVIDIA_API_KEY", os.environ.get("OPENAI_API_KEY", "")).strip() API_BASE = os.environ.get("NVIDIA_API_BASE", os.environ.get("OPENAI_API_BASE", "")).strip().rstrip('/') if API_BASE and not API_BASE.endswith("/v1"): API_BASE += "/v1" HF_TOKEN = os.environ.get("HF_TOKEN", "").strip() HF_FALLBACK_MODEL = "Qwen/Qwen2.5-72B-Instruct" # === FILE PATHS === ROLES_FILE = "prompts/roles.json" MODELS_FILE = "prompts/models.json" CONDUCTORS_FILE = "prompts/conductors.json" HISTORY_FILE = "prompts/history.json" BUILD_MODES_FILE = "prompts/build_modes.json" # === CUSTOM DNS RESOLVER === HF_DOMAIN = "api-inference.huggingface.co" resolved_hf_ip = None def get_hf_ip_via_google(): global resolved_hf_ip if resolved_hf_ip: return resolved_hf_ip try: req = urllib.request.Request(f"https://dns.google/resolve?name={HF_DOMAIN}&type=A") with urllib.request.urlopen(req, timeout=5) as response: data = json.loads(response.read().decode('utf-8')) for answer in data.get("Answer", []): if answer.get("type") == 1: resolved_hf_ip = answer.get("data") print(f"[DNS] Got HF IP via Google: {resolved_hf_ip}") return resolved_hf_ip except Exception as e: print(f"[DNS] Google DoH failed: {e}") return None original_getaddrinfo = socket.getaddrinfo def custom_getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): if host == HF_DOMAIN: ip = get_hf_ip_via_google() if ip: return [(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP, '', (ip, port))] return original_getaddrinfo(host, port, family, type, proto, flags) socket.getaddrinfo = custom_getaddrinfo # === FOLDERS === def ensure_folders(): for folder in ["skills", "projects", "downloads", "prompts", "build_modes"]: os.makedirs(folder, exist_ok=True)