This commit is contained in:
2025-11-10 19:13:33 +01:00
commit ac5738c29d
64 changed files with 9445 additions and 0 deletions

View File

@@ -0,0 +1,96 @@
import requests
from config import Config
def list_ollama_models():
"""List available models on Ollama server"""
if not Config.OLLAMA_ENABLED:
return None, "Ollama is not enabled"
try:
url = f"{Config.OLLAMA_BASE_URL}/api/tags"
headers = {}
if Config.OLLAMA_API_KEY:
headers["Authorization"] = f"Bearer {Config.OLLAMA_API_KEY}"
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
result = response.json()
models = result.get('models', [])
model_names = [model.get('name', '') for model in models]
return model_names, None
except requests.exceptions.RequestException as e:
return None, f"Error listing models: {str(e)}"
except Exception as e:
return None, f"Unexpected error: {str(e)}"
def call_ollama(prompt, system_prompt=None):
"""Call Ollama API to generate text"""
if not Config.OLLAMA_ENABLED:
return None, "Ollama is not enabled"
try:
url = f"{Config.OLLAMA_BASE_URL}/api/generate"
payload = {
"model": Config.OLLAMA_MODEL,
"prompt": prompt,
"stream": False
}
if system_prompt:
payload["system"] = system_prompt
headers = {}
if Config.OLLAMA_API_KEY:
headers["Authorization"] = f"Bearer {Config.OLLAMA_API_KEY}"
print(f"Calling Ollama at {url} with model {Config.OLLAMA_MODEL}")
response = requests.post(url, json=payload, headers=headers, timeout=30)
response.raise_for_status()
result = response.json()
response_text = result.get('response', '').strip()
if not response_text:
return None, "Ollama returned empty response"
return response_text, None
except requests.exceptions.ConnectionError as e:
error_msg = f"Cannot connect to Ollama server at {Config.OLLAMA_BASE_URL}. Is Ollama running?"
print(f"Connection error: {error_msg}")
return None, error_msg
except requests.exceptions.Timeout:
error_msg = "Request to Ollama timed out after 30 seconds"
print(f"Timeout error: {error_msg}")
return None, error_msg
except requests.exceptions.HTTPError as e:
# Check if it's a model not found error
if e.response.status_code == 404:
try:
error_data = e.response.json()
if 'model' in error_data.get('error', '').lower() and 'not found' in error_data.get('error', '').lower():
# Try to get available models
available_models, _ = list_ollama_models()
if available_models:
error_msg = f"Model '{Config.OLLAMA_MODEL}' not found. Available models: {', '.join(available_models)}"
else:
error_msg = f"Model '{Config.OLLAMA_MODEL}' not found. Use 'ollama list' on the server to see available models."
else:
error_msg = f"HTTP error from Ollama: {e.response.status_code} - {e.response.text}"
except (ValueError, KeyError):
error_msg = f"HTTP error from Ollama: {e.response.status_code} - {e.response.text}"
else:
error_msg = f"HTTP error from Ollama: {e.response.status_code} - {e.response.text}"
print(f"HTTP error: {error_msg}")
return None, error_msg
except requests.exceptions.RequestException as e:
error_msg = f"Request error: {str(e)}"
print(f"Request error: {error_msg}")
return None, error_msg
except Exception as e:
error_msg = f"Unexpected error: {str(e)}"
print(f"Unexpected error: {error_msg}")
return None, error_msg