Spaces:
Runtime error
Runtime error
| """Конфигурация приложения и 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) | |