Spaces:
Sleeping
Sleeping
import os | |
import time | |
import requests | |
from typing import List, Dict, Optional | |
from config import Config | |
from openai import OpenAI | |
class DeepseekClient(OpenAI): | |
def __init__(self, api_key=None, **kwargs): | |
super().__init__(api_key=api_key or Config.get_deepseek_key(), **kwargs) | |
if not self.api_key: | |
raise ValueError("Deepseek API key is not set") | |
self.base_url = Config.DEEPSEEK_API_BASE | |
self.max_retries = 3 | |
self.retry_delay = 2 # Initial delay in seconds | |
# Debug info | |
print(f"Initializing DeepseekClient with:") | |
print(f" api_key: {'*' * 8}{self.api_key[-4:]}" if self.api_key else " api_key: None") | |
print(f" base_url: {self.base_url}") | |
def create(self, messages: List[Dict[str, str]], model: str = None, response_format: Optional[Dict] = None, **kwargs) -> str: | |
if not self.api_key: | |
raise ValueError("Deepseek API key is not set") | |
# Debug info | |
print("\n[DeepseekClient] Starting create request") | |
print(f" Using model: {model or Config.DEEPSEEK_MODEL}") | |
print(f" Messages count: {len(messages)}") | |
if messages: | |
print(f" First message: {messages[0]['content'][:50]}...") | |
retries = 0 | |
last_error = None | |
while retries < self.max_retries: | |
try: | |
print(f"[DeepseekClient] Attempting API request (retry {retries + 1}/{self.max_retries})") | |
response = self.chat.completions.create( | |
model=model or Config.DEEPSEEK_MODEL, | |
messages=messages, | |
temperature=0.7, | |
max_tokens=1000, | |
response_format=response_format, | |
**kwargs | |
) | |
response_data = response.model_dump() | |
if "error" in response_data: | |
raise ValueError(f"Deepseek API returned error: {response_data['error']}") | |
if not response_data.get('choices'): | |
raise ValueError("No choices in Deepseek API response") | |
if not response_data['choices'][0].get('message'): | |
raise ValueError("No message in Deepseek API response choice") | |
content = response_data['choices'][0]['message']['content'] | |
print("[DeepseekClient] API request successful") | |
print(f"[DeepseekClient] Received response content (length: {len(content)})") | |
return content | |
except requests.exceptions.RequestException as e: | |
print(f"[DeepseekClient] Request failed: {str(e)}") | |
print(f"Deepseek Request Error: {str(e)}") | |
last_error = e | |
retries += 1 | |
if retries < self.max_retries: | |
time.sleep(self.retry_delay * (2 ** retries)) | |
except ValueError as e: | |
print(f"[DeepseekClient] Value error occurred: {str(e)}") | |
print(f"Deepseek Value Error: {str(e)}") | |
last_error = e | |
break | |
except Exception as e: | |
print(f"[DeepseekClient] Unexpected error occurred: {str(e)}") | |
print(f"Deepseek Unexpected Error: {str(e)}") | |
last_error = e | |
break | |
# If all retries failed or other error occurred | |
error_msg = str(last_error) if last_error else "Maximum retries exceeded" | |
if "Rate limit exceeded" in error_msg: | |
raise Exception(f"Deepseek rate limit exceeded. Please try again later or switch to a different model.") | |
raise Exception(f"Deepseek API error: {error_msg}") | |