Spaces:
Paused
Paused
| import requests | |
| import os | |
| from dotenv import load_dotenv | |
| # νκ²½ λ³μ λ‘λ | |
| load_dotenv() | |
| class DeepSeekLLM: | |
| """DeepSeek APIλ₯Ό μ¬μ©ν μΈμ΄ λͺ¨λΈ ν΄λμ€""" | |
| def __init__(self): | |
| """ | |
| DeepSeek API μ΄κΈ°ν | |
| νκ²½ λ³μμμ μ€μ μ κ°μ Έμ΄: | |
| - DEEPSEEK_API_KEY: API ν€ | |
| - DEEPSEEK_ENDPOINT: API μλν¬μΈνΈ URL | |
| - DEEPSEEK_MODEL: μ¬μ©ν λͺ¨λΈ μ΄λ¦ | |
| """ | |
| self.api_key = os.getenv("DEEPSEEK_API_KEY") | |
| self.endpoint = os.getenv("DEEPSEEK_ENDPOINT", "https://api.deepseek.com/v1/chat/completions") | |
| self.model = os.getenv("DEEPSEEK_MODEL", "deepseek-chat") | |
| if not self.api_key: | |
| raise ValueError("DEEPSEEK_API_KEY νκ²½ λ³μκ° μ€μ λμ΄ μμ§ μμ΅λλ€.") | |
| print(f"DeepSeek LLM μ΄κΈ°ν: λͺ¨λΈ={self.model}, μλν¬μΈνΈ={'μ€μ λ¨' if self.endpoint else 'κΈ°λ³Έκ°'}") | |
| def generate_response(self, query, temperature=0.7, max_tokens=500): | |
| """ | |
| λ¨μΌ μ§μμ λν μλ΅ μμ± | |
| Args: | |
| query: μ¬μ©μ μ§λ¬Έ | |
| temperature: μλ΅μ λ€μμ± (0.0-1.0) | |
| max_tokens: μ΅λ ν ν° μ | |
| Returns: | |
| str: μμ±λ μλ΅ | |
| """ | |
| # μμ€ν λ©μμ§: νμ μμ΄λ‘ μλ΅ | |
| system_message = "You are a helpful assistant. Always respond in English, regardless of the language used in the question. Keep your answers clear, concise, and helpful." | |
| # λ©μμ§ κ΅¬μ± | |
| messages = [ | |
| {"role": "system", "content": system_message}, | |
| {"role": "user", "content": query} | |
| ] | |
| # API μμ² | |
| return self._call_api(messages, temperature, max_tokens) | |
| def chat_completion(self, messages, temperature=0.7, max_tokens=500): | |
| """ | |
| λν μ΄λ ₯μ ν¬ν¨ν μλ΅ μμ± | |
| Args: | |
| messages: λ©μμ§ λͺ©λ‘ [{"role": "user", "content": "..."}, ...] | |
| temperature: μλ΅μ λ€μμ± (0.0-1.0) | |
| max_tokens: μ΅λ ν ν° μ | |
| Returns: | |
| str: μμ±λ μλ΅ | |
| """ | |
| # 첫 λ©μμ§κ° μμ€ν λ©μμ§κ° μλλ©΄ μΆκ° | |
| if not messages or messages[0]["role"] != "system": | |
| system_message = {"role": "system", | |
| "content": "You are a helpful assistant. Always respond in English, regardless of the language used in the question."} | |
| messages = [system_message] + messages | |
| # API μμ² | |
| return self._call_api(messages, temperature, max_tokens) | |
| def _call_api(self, messages, temperature, max_tokens): | |
| """ | |
| DeepSeek API νΈμΆ | |
| Args: | |
| messages: λ©μμ§ λͺ©λ‘ | |
| temperature: μλ΅μ λ€μμ± | |
| max_tokens: μ΅λ ν ν° μ | |
| Returns: | |
| str: μμ±λ μλ΅ | |
| """ | |
| headers = { | |
| "Content-Type": "application/json", | |
| "Authorization": f"Bearer {self.api_key}" | |
| } | |
| data = { | |
| "model": self.model, | |
| "messages": messages, | |
| "temperature": temperature, | |
| "max_tokens": max_tokens | |
| } | |
| try: | |
| print(f"DeepSeek API μμ²: λ©μμ§ μ={len(messages)}, μ¨λ={temperature}") | |
| response = requests.post(self.endpoint, headers=headers, json=data) | |
| # μλ΅ μ²λ¦¬ | |
| if response.status_code == 200: | |
| result = response.json() | |
| if (result.get('choices') and | |
| len(result['choices']) > 0 and | |
| result['choices'][0].get('message') and | |
| result['choices'][0]['message'].get('content')): | |
| content = result['choices'][0]['message']['content'].strip() | |
| print(f"DeepSeek API μλ΅ μ±κ³΅: {len(content)} μ") | |
| return content | |
| else: | |
| print(f"DeepSeek API μλ΅ νμ μ€λ₯: {result}") | |
| return "I couldn't generate a response. Please try again." | |
| else: | |
| print(f"DeepSeek API μ€λ₯: μν μ½λ {response.status_code}") | |
| print(f"μ€λ₯ μμΈ: {response.text}") | |
| return f"An error occurred (Status code: {response.status_code})" | |
| except Exception as e: | |
| print(f"DeepSeek API μμΈ λ°μ: {str(e)}") | |
| return f"An error occurred: {str(e)}" |