diff --git a/AppImage/scripts/ai_providers/base.py b/AppImage/scripts/ai_providers/base.py index 1f6e1a60..296814e1 100644 --- a/AppImage/scripts/ai_providers/base.py +++ b/AppImage/scripts/ai_providers/base.py @@ -152,6 +152,10 @@ class AIProvider(ABC): import urllib.request import urllib.error + # Ensure User-Agent is set (Cloudflare blocks requests without it - error 1010) + if 'User-Agent' not in headers: + headers['User-Agent'] = 'ProxMenux/1.0' + data = json.dumps(payload).encode('utf-8') req = urllib.request.Request(url, data=data, headers=headers, method='POST') diff --git a/AppImage/scripts/ai_providers/gemini_provider.py b/AppImage/scripts/ai_providers/gemini_provider.py index 1d157a86..49224fb6 100644 --- a/AppImage/scripts/ai_providers/gemini_provider.py +++ b/AppImage/scripts/ai_providers/gemini_provider.py @@ -48,7 +48,7 @@ class GeminiProvider(AIProvider): try: url = f"{self.API_BASE}?key={self.api_key}" - req = urllib.request.Request(url, method='GET') + req = urllib.request.Request(url, method='GET', headers={'User-Agent': 'ProxMenux/1.0'}) with urllib.request.urlopen(req, timeout=10) as resp: data = json.loads(resp.read().decode('utf-8')) diff --git a/AppImage/scripts/ai_providers/groq_provider.py b/AppImage/scripts/ai_providers/groq_provider.py index fada9f15..7c07e29b 100644 --- a/AppImage/scripts/ai_providers/groq_provider.py +++ b/AppImage/scripts/ai_providers/groq_provider.py @@ -38,7 +38,10 @@ class GroqProvider(AIProvider): try: req = urllib.request.Request( self.MODELS_URL, - headers={'Authorization': f'Bearer {self.api_key}'}, + headers={ + 'Authorization': f'Bearer {self.api_key}', + 'User-Agent': 'ProxMenux/1.0' # Cloudflare blocks requests without User-Agent + }, method='GET' ) diff --git a/AppImage/scripts/ai_providers/ollama_provider.py b/AppImage/scripts/ai_providers/ollama_provider.py index e17bcb08..de6f62ad 100644 --- a/AppImage/scripts/ai_providers/ollama_provider.py +++ b/AppImage/scripts/ai_providers/ollama_provider.py @@ -96,7 +96,7 @@ class OllamaProvider(AIProvider): # First check if server is running try: url = f"{self.base_url.rstrip('/')}/api/tags" - req = urllib.request.Request(url, method='GET') + req = urllib.request.Request(url, method='GET', headers={'User-Agent': 'ProxMenux/1.0'}) with urllib.request.urlopen(req, timeout=5) as resp: data = json.loads(resp.read().decode('utf-8'))