Spaces:
Runtime error
Runtime error
File size: 3,554 Bytes
564172d d4fff65 564172d d4fff65 564172d d4fff65 564172d d4fff65 564172d d4fff65 564172d d4fff65 564172d d4fff65 564172d d4fff65 564172d d4fff65 564172d d4fff65 564172d d4fff65 564172d d4fff65 564172d d4fff65 564172d d4fff65 564172d d4fff65 564172d d4fff65 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
import openai
import requests
import logging
import os
from typing import Optional, Dict, Any
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class APIAgent:
def __init__(self):
self.config = {}
def set_config(self, config: Dict[str, Any]):
"""Configura las claves API desde Gradio"""
self.config = config or {}
def call_openai(self, prompt: str, is_code: bool = False) -> Optional[str]:
"""Intenta llamar a OpenAI API"""
api_key = self.config.get('openai_api_key')
if not api_key:
return None
try:
openai.api_key = api_key
model = 'gpt-3.5-turbo'
max_tokens = self.config.get('max_tokens', 400)
temperature = self.config.get('temperature', 0.7)
response = openai.ChatCompletion.create(
model=model,
messages=[{'role': 'user', 'content': prompt}],
max_tokens=max_tokens,
temperature=temperature,
timeout=15
)
return response.choices[0].message.content.strip()
except Exception as e:
logger.error(f'Error llamando a OpenAI: {e}')
return None
def call_deepseek(self, prompt: str, is_code: bool = False) -> Optional[str]:
"""Intenta llamar a DeepSeek API"""
api_key = self.config.get('deepseek_api_key')
if not api_key:
return None
try:
url = 'https://api.deepseek.com/v1/chat/completions'
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {api_key}'
}
max_tokens = self.config.get('max_tokens', 400)
temperature = self.config.get('temperature', 0.7)
data = {
'model': 'deepseek-chat',
'messages': [{'role': 'user', 'content': prompt}],
'max_tokens': max_tokens,
'temperature': temperature,
'stream': False
}
response = requests.post(url, json=data, headers=headers, timeout=20)
response.raise_for_status()
result = response.json()
return result['choices'][0]['message']['content'].strip()
except Exception as e:
logger.error(f'Error llamando a DeepSeek: {e}')
return None
def generate_response(self, prompt: str, is_code: bool = False) -> Dict[str, Any]:
"""
Intenta generar respuesta usando APIs en orden de preferencia
Returns: dict con response y source
"""
# Verificar si hay claves configuradas
has_deepseek = bool(self.config.get('deepseek_api_key'))
has_openai = bool(self.config.get('openai_api_key'))
if has_deepseek:
deepseek_response = self.call_deepseek(prompt, is_code)
if deepseek_response:
return {'response': deepseek_response, 'source': 'deepseek'}
if has_openai:
openai_response = self.call_openai(prompt, is_code)
if openai_response:
return {'response': openai_response, 'source': 'openai'}
# Si no hay APIs disponibles o fallan, retornar None para usar modelo local
return {'response': None, 'source': 'none'} |