Spaces:
Paused
Paused
| """ | |
| DeepSeek API ํ ์คํธ ๋ฐ ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฅ | |
| """ | |
| import os | |
| import logging | |
| import requests | |
| import json | |
| from typing import Dict, Any, Optional | |
| # ๋ก๊น ์ค์ | |
| logger = logging.getLogger("DeepSeekUtils") | |
| class DeepSeekError(Exception): | |
| """DeepSeek API ๊ด๋ จ ์ค๋ฅ""" | |
| pass | |
| def test_deepseek_api(api_key: str, endpoint: str, model: str) -> Dict[str, Any]: | |
| """ | |
| DeepSeek API ์ฐ๊ฒฐ ํ ์คํธ | |
| Args: | |
| api_key: DeepSeek API ํค | |
| endpoint: DeepSeek API ์๋ํฌ์ธํธ | |
| model: ์ฌ์ฉํ ๋ชจ๋ธ๋ช | |
| Returns: | |
| ํ ์คํธ ๊ฒฐ๊ณผ ๋์ ๋๋ฆฌ (์ฑ๊ณต ์ฌ๋ถ ๋ฐ ๋ฉ์์ง) | |
| """ | |
| if not api_key: | |
| logger.error("DeepSeek API ํค๊ฐ ์ ๊ณต๋์ง ์์์ต๋๋ค.") | |
| return { | |
| "success": False, | |
| "message": "API ํค๊ฐ ์ ๊ณต๋์ง ์์์ต๋๋ค.", | |
| "status_code": None, | |
| "response": None | |
| } | |
| try: | |
| logger.info(f"DeepSeek API ์ฐ๊ฒฐ ํ ์คํธ ์์: {endpoint}, ๋ชจ๋ธ: {model}") | |
| # ํ ์คํธ์ฉ ๊ฐ๋จํ ํ๋กฌํํธ | |
| test_prompt = "Hello, please respond with a short greeting." | |
| # API ์์ฒญ ํค๋ ๋ฐ ๋ฐ์ดํฐ | |
| headers = { | |
| "Content-Type": "application/json", | |
| "Authorization": f"Bearer {api_key}" | |
| } | |
| payload = { | |
| "model": model, | |
| "messages": [{"role": "user", "content": test_prompt}], | |
| "temperature": 0.7, | |
| "max_tokens": 50 | |
| } | |
| # API ์์ฒญ ์ ์ก | |
| response = requests.post( | |
| endpoint, | |
| headers=headers, | |
| data=json.dumps(payload), | |
| timeout=10 # 10์ด ํ์์์ | |
| ) | |
| # ์๋ต ํ์ธ | |
| if response.status_code == 200: | |
| logger.info("DeepSeek API ์ฐ๊ฒฐ ์ฑ๊ณต") | |
| response_data = response.json() | |
| # ์๋ต ๋ด์ฉ ํ์ธ | |
| if "choices" in response_data and len(response_data["choices"]) > 0: | |
| message_content = response_data["choices"][0].get("message", {}).get("content", "") | |
| return { | |
| "success": True, | |
| "message": "API ์ฐ๊ฒฐ ์ฑ๊ณต", | |
| "status_code": response.status_code, | |
| "response": message_content[:100] + "..." if len(message_content) > 100 else message_content | |
| } | |
| else: | |
| return { | |
| "success": True, | |
| "message": "API ์ฐ๊ฒฐ ์ฑ๊ณตํ์ผ๋ ์๋ต ํ์์ด ์์๊ณผ ๋ค๋ฆ ๋๋ค.", | |
| "status_code": response.status_code, | |
| "response": response_data | |
| } | |
| else: | |
| logger.error(f"DeepSeek API ์ค๋ฅ: ์ํ ์ฝ๋ {response.status_code}") | |
| error_message = "" | |
| try: | |
| error_data = response.json() | |
| error_message = error_data.get("error", {}).get("message", str(error_data)) | |
| except: | |
| error_message = response.text | |
| return { | |
| "success": False, | |
| "message": f"API ์ค๋ฅ: {error_message}", | |
| "status_code": response.status_code, | |
| "response": error_message | |
| } | |
| except requests.exceptions.Timeout: | |
| logger.error("DeepSeek API ์์ฒญ ์๊ฐ ์ด๊ณผ") | |
| return { | |
| "success": False, | |
| "message": "API ์์ฒญ ์๊ฐ ์ด๊ณผ", | |
| "status_code": None, | |
| "response": None | |
| } | |
| except requests.exceptions.ConnectionError: | |
| logger.error("DeepSeek API ์ฐ๊ฒฐ ์คํจ") | |
| return { | |
| "success": False, | |
| "message": "API ์๋ฒ ์ฐ๊ฒฐ ์คํจ", | |
| "status_code": None, | |
| "response": None | |
| } | |
| except Exception as e: | |
| logger.error(f"DeepSeek API ํ ์คํธ ์ค ์์์น ๋ชปํ ์ค๋ฅ: {e}", exc_info=True) | |
| return { | |
| "success": False, | |
| "message": f"์์์น ๋ชปํ ์ค๋ฅ: {str(e)}", | |
| "status_code": None, | |
| "response": None | |
| } | |
| def create_deepseek_client(api_key: str, endpoint: str, model: str): | |
| """ | |
| DeepSeek ํด๋ผ์ด์ธํธ ์์ฑ (LangChain ํธํ) | |
| Args: | |
| api_key: DeepSeek API ํค | |
| endpoint: DeepSeek API ์๋ํฌ์ธํธ | |
| model: ์ฌ์ฉํ ๋ชจ๋ธ๋ช | |
| Returns: | |
| DeepSeek ํด๋ผ์ด์ธํธ ๊ฐ์ฒด ๋๋ None | |
| """ | |
| # LangChain๊ณผ DeepSeek ํตํฉ ์๋ | |
| try: | |
| from langchain_openai import ChatOpenAI | |
| # API ์ฐ๊ฒฐ ํ ์คํธ ๋จผ์ ์ํ | |
| test_result = test_deepseek_api(api_key, endpoint, model) | |
| if not test_result["success"]: | |
| logger.error(f"DeepSeek API ์ฐ๊ฒฐ ํ ์คํธ ์คํจ: {test_result['message']}") | |
| return None | |
| # ์ ์ ์ฐ๊ฒฐ ์ ํด๋ผ์ด์ธํธ ์์ฑ | |
| # DeepSeek๋ OpenAI ํธํ API๋ฅผ ์ ๊ณตํ๋ฏ๋ก ChatOpenAI๋ฅผ ์ฌ์ฉ | |
| client = ChatOpenAI( | |
| model=model, | |
| temperature=0.2, | |
| api_key=api_key, | |
| base_url=endpoint.rstrip("/v1/chat/completions"), # OpenAI ํธํ ๋ฒ ์ด์ค URL | |
| ) | |
| logger.info(f"DeepSeek ํด๋ผ์ด์ธํธ ์์ฑ ์ฑ๊ณต: {model}") | |
| return client | |
| except ImportError as e: | |
| logger.error(f"ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ ์คํจ: {e}") | |
| return None | |
| except Exception as e: | |
| logger.error(f"DeepSeek ํด๋ผ์ด์ธํธ ์์ฑ ์ค ์ค๋ฅ: {e}", exc_info=True) | |
| return None |