rdune71's picture
Update app.py imports and send button logic, enhance config detection for HF Spaces, improve HF token validation
86b116d
raw
history blame
2.65 kB
import openai
import requests
import time
from typing import List, Dict, Optional
from utils.config import config
class LLMProvider:
def __init__(self, model_name: str, timeout: int = 30, retries: int = 3):
self.model_name = model_name
self.timeout = timeout
self.retries = retries
class OllamaProvider(LLMProvider):
def generate_response(self, prompt: str, conversation_history: List[Dict]) -> Optional[str]:
url = f"{config.ollama_host}/api/chat"
messages = conversation_history
payload = {
"model": self.model_name,
"messages": messages,
"stream": False
}
for attempt in range(self.retries):
try:
response = requests.post(url, json=payload, timeout=self.timeout)
response.raise_for_status()
return response.json()["message"]["content"]
except Exception as e:
if attempt == self.retries - 1:
print(f"Error after {self.retries} attempts: {e}")
return None
time.sleep(2 ** attempt) # Exponential backoff
return None
class HuggingFaceProvider(LLMProvider):
def __init__(self, model_name: str, timeout: int = 30, retries: int = 3):
super().__init__(model_name, timeout, retries)
if not config.hf_token:
raise ValueError("HF_TOKEN not set - required for Hugging Face provider")
self.client = openai.OpenAI(
base_url=config.hf_api_url,
api_key=config.hf_token
)
def generate_response(self, prompt: str, conversation_history: List[Dict]) -> Optional[str]:
try:
response = self.client.chat.completions.create(
model=self.model_name,
messages=conversation_history,
max_tokens=500,
temperature=0.7
)
return response.choices[0].message.content
except Exception as e:
print(f"Hugging Face API error: {e}")
return None
def send_to_ollama(prompt: str, conversation_history: List[Dict], ollama_url: str, model: str) -> Optional[str]:
config.ollama_host = ollama_url
provider = OllamaProvider(model)
return provider.generate_response(prompt, conversation_history)
def send_to_hf(prompt: str, conversation_history: List[Dict]) -> Optional[str]:
# Using a common model that works well for coaching
provider = HuggingFaceProvider("meta-llama/Llama-2-7b-chat-hf")
return provider.generate_response(prompt, conversation_history)