koura718 commited on
Commit
af01c91
·
1 Parent(s): a885379

Add DeepSeek

Browse files
config.py CHANGED
@@ -31,8 +31,8 @@ class Config:
31
  ]
32
 
33
  # DeepSeek model configuration
34
- DEEPSEEK_MODEL = "deepseek-chat"
35
- DEEPSEEK_API_BASE = "https://api.deepseek.com/v1"
36
 
37
  # Chat context settings
38
  MAX_HISTORY_CHATS = 10
 
31
  ]
32
 
33
  # DeepSeek model configuration
34
+ DEEPSEEK_MODEL = "deepseek-chat-1.3"
35
+ DEEPSEEK_API_BASE = "https://api.deepseek.com"
36
 
37
  # Chat context settings
38
  MAX_HISTORY_CHATS = 10
deepseek_client.py CHANGED
@@ -3,67 +3,49 @@ import time
3
  import requests
4
  from typing import List, Dict, Optional
5
  from config import Config
 
6
 
7
- class DeepseekClient:
8
- def __init__(self):
9
- self.api_key = Config.get_deepseek_key()
10
  if not self.api_key:
11
  raise ValueError("Deepseek API key is not set")
12
  self.base_url = Config.DEEPSEEK_API_BASE
13
  self.max_retries = 3
14
  self.retry_delay = 2 # Initial delay in seconds
15
 
16
- def create(self, messages: List[Dict[str, str]], model: str = None, response_format: Optional[Dict] = None) -> str:
 
 
 
 
 
17
  if not self.api_key:
18
  raise ValueError("Deepseek API key is not set")
19
 
 
 
 
 
 
 
 
20
  retries = 0
21
  last_error = None
22
 
23
  while retries < self.max_retries:
24
  try:
25
- headers = {
26
- "Authorization": f"Bearer {self.api_key}",
27
- "HTTP-Referer": "https://replit.com",
28
- "X-Title": "MyChatMe",
29
- "Content-Type": "application/json"
30
- }
31
-
32
- data = {
33
- "model": model or Config.AUTO_MODEL,
34
- "messages": messages,
35
- "temperature": 0.7,
36
- "max_tokens": 1000
37
- }
38
-
39
- if response_format:
40
- data["response_format"] = response_format
41
-
42
- response = requests.post(
43
- f"{self.base_url}/chat/completions",
44
- headers=headers,
45
- json=data,
46
- timeout=30 # Added timeout
47
  )
48
 
49
- if response.status_code == 429:
50
- error_data = response.json()
51
- error_message = error_data.get('error', {}).get('message', 'Rate limit exceeded')
52
- print(f"Rate limit error: {error_message}")
53
-
54
- # Check if it's a provider-specific rate limit
55
- if 'metadata' in error_data.get('error', {}):
56
- provider = error_data['error']['metadata'].get('provider_name', 'Unknown')
57
- raise Exception(f"Rate limit exceeded for provider: {provider}")
58
-
59
- wait_time = self.retry_delay * (2 ** retries)
60
- print(f"Rate limit exceeded. Waiting {wait_time} seconds before retry...")
61
- time.sleep(wait_time)
62
- retries += 1
63
- continue
64
-
65
- response.raise_for_status()
66
- response_data = response.json()
67
 
68
  if "error" in response_data:
69
  raise ValueError(f"Deepseek API returned error: {response_data['error']}")
@@ -74,19 +56,25 @@ class DeepseekClient:
74
  if not response_data['choices'][0].get('message'):
75
  raise ValueError("No message in Deepseek API response choice")
76
 
77
- return response_data['choices'][0]['message']['content']
 
 
 
78
 
79
  except requests.exceptions.RequestException as e:
 
80
  print(f"Deepseek Request Error: {str(e)}")
81
  last_error = e
82
  retries += 1
83
  if retries < self.max_retries:
84
  time.sleep(self.retry_delay * (2 ** retries))
85
  except ValueError as e:
 
86
  print(f"Deepseek Value Error: {str(e)}")
87
  last_error = e
88
  break
89
  except Exception as e:
 
90
  print(f"Deepseek Unexpected Error: {str(e)}")
91
  last_error = e
92
  break
 
3
  import requests
4
  from typing import List, Dict, Optional
5
  from config import Config
6
+ from openai import OpenAI
7
 
8
+ class DeepseekClient(OpenAI):
9
+ def __init__(self, api_key=None, **kwargs):
10
+ super().__init__(api_key=api_key or Config.get_deepseek_key(), **kwargs)
11
  if not self.api_key:
12
  raise ValueError("Deepseek API key is not set")
13
  self.base_url = Config.DEEPSEEK_API_BASE
14
  self.max_retries = 3
15
  self.retry_delay = 2 # Initial delay in seconds
16
 
17
+ # Debug info
18
+ print(f"Initializing DeepseekClient with:")
19
+ print(f" api_key: {'*' * 8}{self.api_key[-4:]}" if self.api_key else " api_key: None")
20
+ print(f" base_url: {self.base_url}")
21
+
22
+ def create(self, messages: List[Dict[str, str]], model: str = None, response_format: Optional[Dict] = None, **kwargs) -> str:
23
  if not self.api_key:
24
  raise ValueError("Deepseek API key is not set")
25
 
26
+ # Debug info
27
+ print("\n[DeepseekClient] Starting create request")
28
+ print(f" Using model: {model or Config.DEEPSEEK_MODEL}")
29
+ print(f" Messages count: {len(messages)}")
30
+ if messages:
31
+ print(f" First message: {messages[0]['content'][:50]}...")
32
+
33
  retries = 0
34
  last_error = None
35
 
36
  while retries < self.max_retries:
37
  try:
38
+ print(f"[DeepseekClient] Attempting API request (retry {retries + 1}/{self.max_retries})")
39
+ response = self.chat.completions.create(
40
+ model=model or Config.DEEPSEEK_MODEL,
41
+ messages=messages,
42
+ temperature=0.7,
43
+ max_tokens=1000,
44
+ response_format=response_format,
45
+ **kwargs
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  )
47
 
48
+ response_data = response.model_dump()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
 
50
  if "error" in response_data:
51
  raise ValueError(f"Deepseek API returned error: {response_data['error']}")
 
56
  if not response_data['choices'][0].get('message'):
57
  raise ValueError("No message in Deepseek API response choice")
58
 
59
+ content = response_data['choices'][0]['message']['content']
60
+ print("[DeepseekClient] API request successful")
61
+ print(f"[DeepseekClient] Received response content (length: {len(content)})")
62
+ return content
63
 
64
  except requests.exceptions.RequestException as e:
65
+ print(f"[DeepseekClient] Request failed: {str(e)}")
66
  print(f"Deepseek Request Error: {str(e)}")
67
  last_error = e
68
  retries += 1
69
  if retries < self.max_retries:
70
  time.sleep(self.retry_delay * (2 ** retries))
71
  except ValueError as e:
72
+ print(f"[DeepseekClient] Value error occurred: {str(e)}")
73
  print(f"Deepseek Value Error: {str(e)}")
74
  last_error = e
75
  break
76
  except Exception as e:
77
+ print(f"[DeepseekClient] Unexpected error occurred: {str(e)}")
78
  print(f"Deepseek Unexpected Error: {str(e)}")
79
  last_error = e
80
  break
llm_client.py CHANGED
@@ -25,7 +25,12 @@ class LLMClient:
25
  if openrouter_key:
26
  self.openrouter_client = OpenRouterClient()
27
  if deepseek_key:
28
- self.deepseek_client = DeepseekClient()
 
 
 
 
 
29
  except Exception as e:
30
  print(f"Error initializing API clients: {str(e)}")
31
 
 
25
  if openrouter_key:
26
  self.openrouter_client = OpenRouterClient()
27
  if deepseek_key:
28
+ try:
29
+ self.deepseek_client = DeepseekClient(api_key=deepseek_key)
30
+ except Exception as e:
31
+ print(f"Failed to initialize DeepseekClient: {str(e)}")
32
+ print("Check your Deepseek API key and endpoint configuration")
33
+ raise
34
  except Exception as e:
35
  print(f"Error initializing API clients: {str(e)}")
36
 
locales/en/translation.json CHANGED
@@ -12,12 +12,14 @@
12
  "timezone": "Timezone",
13
  "api_key_openai": "OpenAI API Key",
14
  "api_key_openrouter": "OpenRouter API Key",
 
15
  "save_settings": "Save Settings",
16
  "error_missing_key": "Please enter API key",
17
  "error_api_call": "Error calling API",
18
  "error_model_switch": "Failed to switch to the selected model",
19
  "error_model_switch_openai": "Failed to switch to GPT-4. Please check your OpenAI API key.",
20
  "error_model_switch_openrouter": "Failed to switch to model. Please check your OpenRouter API key.",
 
21
  "error_rate_limit": "Rate limit exceeded. Please try again later.",
22
  "error_network": "Network connection error. Please check your connection.",
23
  "default_system_prompt": "You are a helpful assistant. Please provide clear and concise responses.",
 
12
  "timezone": "Timezone",
13
  "api_key_openai": "OpenAI API Key",
14
  "api_key_openrouter": "OpenRouter API Key",
15
+ "api_key_deepseek": "DeepSeek API Key",
16
  "save_settings": "Save Settings",
17
  "error_missing_key": "Please enter API key",
18
  "error_api_call": "Error calling API",
19
  "error_model_switch": "Failed to switch to the selected model",
20
  "error_model_switch_openai": "Failed to switch to GPT-4. Please check your OpenAI API key.",
21
  "error_model_switch_openrouter": "Failed to switch to model. Please check your OpenRouter API key.",
22
+ "error_model_switch_deepseek": "Failed to switch to model. Please check your DeepSeek API key.",
23
  "error_rate_limit": "Rate limit exceeded. Please try again later.",
24
  "error_network": "Network connection error. Please check your connection.",
25
  "default_system_prompt": "You are a helpful assistant. Please provide clear and concise responses.",
locales/ja/translation.json CHANGED
@@ -12,12 +12,14 @@
12
  "timezone": "タイムゾーン",
13
  "api_key_openai": "OpenAI APIキー",
14
  "api_key_openrouter": "OpenRouter APIキー",
 
15
  "save_settings": "設定を保存",
16
  "error_missing_key": "APIキーを入力してください",
17
  "error_api_call": "APIの呼び出しでエラーが発生しました",
18
  "error_model_switch": "モデルの切り替えに失敗しました",
19
  "error_model_switch_openai": "GPT-4への切り替えに失敗しました。OpenAI APIキーを確認してください。",
20
  "error_model_switch_openrouter": "モデルの切り替えに失敗しました。OpenRouter APIキーを確認してください。",
 
21
  "error_rate_limit": "レート制限を超えました。しばらく待ってから再試行してください。",
22
  "error_network": "ネットワーク接続エラーが発生しました。接続を確認してください。",
23
  "default_system_prompt": "私は役立つアシスタントです。明確で簡潔な応答を提供します。",
 
12
  "timezone": "タイムゾーン",
13
  "api_key_openai": "OpenAI APIキー",
14
  "api_key_openrouter": "OpenRouter APIキー",
15
+ "api_key_deepseek": "DeepSeek APIキー",
16
  "save_settings": "設定を保存",
17
  "error_missing_key": "APIキーを入力してください",
18
  "error_api_call": "APIの呼び出しでエラーが発生しました",
19
  "error_model_switch": "モデルの切り替えに失敗しました",
20
  "error_model_switch_openai": "GPT-4への切り替えに失敗しました。OpenAI APIキーを確認してください。",
21
  "error_model_switch_openrouter": "モデルの切り替えに失敗しました。OpenRouter APIキーを確認してください。",
22
+ "error_model_switch_deepseek": "モデルの切り替えに失敗しました。DeepSeek APIキーを確認してください。",
23
  "error_rate_limit": "レート制限を超えました。しばらく待ってから再試行してください。",
24
  "error_network": "ネットワーク接続エラーが発生しました。接続を確認してください。",
25
  "default_system_prompt": "私は役立つアシスタントです。明確で簡潔な応答を提供します。",
ui_components.py CHANGED
@@ -52,7 +52,7 @@ def render_sidebar(i18n, chat_manager):
52
  # Model selection - デフォルトをOpenRouter-Autoに設定
53
  model = st.selectbox(
54
  i18n.get_text("model_selection"),
55
- ["OpenRouter-Auto", "OpenAI", "Claude-3.5", "Gemini-2.0", "DeepSeek-V3"],
56
  index=0,
57
  key="model_selection"
58
  )
 
52
  # Model selection - デフォルトをOpenRouter-Autoに設定
53
  model = st.selectbox(
54
  i18n.get_text("model_selection"),
55
+ ["OpenRouter-Auto", "OpenAI", "Claude-3.5", "Gemini-2.0", "deepseek-chat"],
56
  index=0,
57
  key="model_selection"
58
  )