refactor(ai): replace OpenAI with DeepSeek API
- Update config.py with DEEPSEEK_API_KEY, DEEPSEEK_MODEL, DEEPSEEK_BASE_URL - Update ai.py to use DeepSeek endpoint (OpenAI-compatible) - Update docker-compose.yml environment variables
This commit is contained in:
@@ -92,8 +92,9 @@ services:
|
|||||||
REDIS_URL: redis://redis:6379
|
REDIS_URL: redis://redis:6379
|
||||||
API_GATEWAY_URL: http://api-gateway:8000
|
API_GATEWAY_URL: http://api-gateway:8000
|
||||||
WHATSAPP_CORE_URL: http://whatsapp-core:3001
|
WHATSAPP_CORE_URL: http://whatsapp-core:3001
|
||||||
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
|
DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}
|
||||||
OPENAI_MODEL: ${OPENAI_MODEL:-gpt-4o-mini}
|
DEEPSEEK_MODEL: ${DEEPSEEK_MODEL:-deepseek-chat}
|
||||||
|
DEEPSEEK_BASE_URL: ${DEEPSEEK_BASE_URL:-https://api.deepseek.com}
|
||||||
depends_on:
|
depends_on:
|
||||||
postgres:
|
postgres:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|||||||
@@ -6,9 +6,10 @@ class Settings(BaseSettings):
|
|||||||
DATABASE_URL: str = "postgresql://whatsapp_admin:password@localhost:5432/whatsapp_central"
|
DATABASE_URL: str = "postgresql://whatsapp_admin:password@localhost:5432/whatsapp_central"
|
||||||
REDIS_URL: str = "redis://localhost:6379"
|
REDIS_URL: str = "redis://localhost:6379"
|
||||||
|
|
||||||
# OpenAI
|
# DeepSeek AI (OpenAI-compatible API)
|
||||||
OPENAI_API_KEY: str = ""
|
DEEPSEEK_API_KEY: str = ""
|
||||||
OPENAI_MODEL: str = "gpt-3.5-turbo"
|
DEEPSEEK_MODEL: str = "deepseek-chat"
|
||||||
|
DEEPSEEK_BASE_URL: str = "https://api.deepseek.com"
|
||||||
|
|
||||||
API_GATEWAY_URL: str = "http://localhost:8000"
|
API_GATEWAY_URL: str = "http://localhost:8000"
|
||||||
WHATSAPP_CORE_URL: str = "http://localhost:3001"
|
WHATSAPP_CORE_URL: str = "http://localhost:3001"
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ settings = get_settings()
|
|||||||
|
|
||||||
|
|
||||||
class AIResponseExecutor(NodeExecutor):
|
class AIResponseExecutor(NodeExecutor):
|
||||||
"""Generate AI response using OpenAI"""
|
"""Generate AI response using DeepSeek API"""
|
||||||
|
|
||||||
async def execute(
|
async def execute(
|
||||||
self, config: dict, context: FlowContext, session: Any
|
self, config: dict, context: FlowContext, session: Any
|
||||||
@@ -21,8 +21,8 @@ class AIResponseExecutor(NodeExecutor):
|
|||||||
max_tokens = config.get("max_tokens", 500)
|
max_tokens = config.get("max_tokens", 500)
|
||||||
temperature = config.get("temperature", 0.7)
|
temperature = config.get("temperature", 0.7)
|
||||||
|
|
||||||
if not settings.OPENAI_API_KEY:
|
if not settings.DEEPSEEK_API_KEY:
|
||||||
context.set("_ai_error", "OpenAI API key not configured")
|
context.set("_ai_error", "DeepSeek API key not configured")
|
||||||
return "error"
|
return "error"
|
||||||
|
|
||||||
if not prompt:
|
if not prompt:
|
||||||
@@ -43,13 +43,13 @@ class AIResponseExecutor(NodeExecutor):
|
|||||||
|
|
||||||
async with httpx.AsyncClient() as client:
|
async with httpx.AsyncClient() as client:
|
||||||
response = await client.post(
|
response = await client.post(
|
||||||
"https://api.openai.com/v1/chat/completions",
|
f"{settings.DEEPSEEK_BASE_URL}/v1/chat/completions",
|
||||||
headers={
|
headers={
|
||||||
"Authorization": f"Bearer {settings.OPENAI_API_KEY}",
|
"Authorization": f"Bearer {settings.DEEPSEEK_API_KEY}",
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
},
|
},
|
||||||
json={
|
json={
|
||||||
"model": settings.OPENAI_MODEL,
|
"model": settings.DEEPSEEK_MODEL,
|
||||||
"messages": messages,
|
"messages": messages,
|
||||||
"max_tokens": max_tokens,
|
"max_tokens": max_tokens,
|
||||||
"temperature": temperature,
|
"temperature": temperature,
|
||||||
@@ -68,7 +68,7 @@ class AIResponseExecutor(NodeExecutor):
|
|||||||
|
|
||||||
|
|
||||||
class AISentimentExecutor(NodeExecutor):
|
class AISentimentExecutor(NodeExecutor):
|
||||||
"""Analyze sentiment of user message"""
|
"""Analyze sentiment of user message using DeepSeek"""
|
||||||
|
|
||||||
async def execute(
|
async def execute(
|
||||||
self, config: dict, context: FlowContext, session: Any
|
self, config: dict, context: FlowContext, session: Any
|
||||||
@@ -78,18 +78,18 @@ class AISentimentExecutor(NodeExecutor):
|
|||||||
)
|
)
|
||||||
output_variable = config.get("output_variable", "_sentiment")
|
output_variable = config.get("output_variable", "_sentiment")
|
||||||
|
|
||||||
if not settings.OPENAI_API_KEY or not text:
|
if not settings.DEEPSEEK_API_KEY or not text:
|
||||||
return "neutral"
|
return "neutral"
|
||||||
|
|
||||||
async with httpx.AsyncClient() as client:
|
async with httpx.AsyncClient() as client:
|
||||||
response = await client.post(
|
response = await client.post(
|
||||||
"https://api.openai.com/v1/chat/completions",
|
f"{settings.DEEPSEEK_BASE_URL}/v1/chat/completions",
|
||||||
headers={
|
headers={
|
||||||
"Authorization": f"Bearer {settings.OPENAI_API_KEY}",
|
"Authorization": f"Bearer {settings.DEEPSEEK_API_KEY}",
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
},
|
},
|
||||||
json={
|
json={
|
||||||
"model": "gpt-3.5-turbo",
|
"model": settings.DEEPSEEK_MODEL,
|
||||||
"messages": [
|
"messages": [
|
||||||
{
|
{
|
||||||
"role": "system",
|
"role": "system",
|
||||||
|
|||||||
Reference in New Issue
Block a user