Spaces:
Running
Running
Update chat_handler.py
Browse files- chat_handler.py +45 -4
chat_handler.py
CHANGED
@@ -3,6 +3,7 @@ Flare β Chat Handler (v1.7 Β· parameter parsing dΓΌzeltmesi)
|
|
3 |
==========================================
|
4 |
"""
|
5 |
|
|
|
6 |
import re, json, sys, httpx
|
7 |
from datetime import datetime
|
8 |
from typing import Dict, List, Optional
|
@@ -52,6 +53,20 @@ SPARK_URL = str(cfg.global_config.spark_endpoint).rstrip("/")
|
|
52 |
ALLOWED_INTENTS = {"flight-booking", "flight-info", "booking-cancel"}
|
53 |
|
54 |
# βββββββββββββββββββββββββ SPARK βββββββββββββββββββββββββ #
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
async def spark_generate(s: Session, prompt: str, user_msg: str) -> str:
|
56 |
"""Call Spark with proper error handling"""
|
57 |
try:
|
@@ -63,24 +78,50 @@ async def spark_generate(s: Session, prompt: str, user_msg: str) -> str:
|
|
63 |
if not version:
|
64 |
raise ValueError("No published version found")
|
65 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
payload = {
|
67 |
"project_name": s.project_name,
|
|
|
68 |
"user_input": user_msg,
|
69 |
-
"context": s.chat_history[-10:]
|
70 |
-
"system_prompt": prompt
|
71 |
}
|
72 |
|
73 |
log(f"π Calling Spark for session {s.session_id[:8]}...")
|
74 |
log(f"π Prompt preview (first 200 chars): {prompt[:200]}...")
|
75 |
|
|
|
|
|
|
|
|
|
76 |
async with httpx.AsyncClient(timeout=60) as client:
|
77 |
-
response = await client.post(
|
78 |
response.raise_for_status()
|
79 |
data = response.json()
|
80 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
log(f"πͺ Spark raw: {raw[:120]!r}")
|
82 |
return raw
|
83 |
|
|
|
|
|
|
|
84 |
except httpx.TimeoutException:
|
85 |
log(f"β±οΈ Spark timeout for session {s.session_id[:8]}")
|
86 |
raise
|
|
|
3 |
==========================================
|
4 |
"""
|
5 |
|
6 |
+
import os
|
7 |
import re, json, sys, httpx
|
8 |
from datetime import datetime
|
9 |
from typing import Dict, List, Optional
|
|
|
53 |
ALLOWED_INTENTS = {"flight-booking", "flight-info", "booking-cancel"}
|
54 |
|
55 |
# βββββββββββββββββββββββββ SPARK βββββββββββββββββββββββββ #
|
56 |
+
def _get_spark_token() -> Optional[str]:
|
57 |
+
"""Get Spark token based on work_mode"""
|
58 |
+
if cfg.global_config.is_cloud_mode():
|
59 |
+
# Cloud mode - use HuggingFace Secrets
|
60 |
+
token = os.getenv("SPARK_TOKEN")
|
61 |
+
if not token:
|
62 |
+
log("β SPARK_TOKEN not found in HuggingFace Secrets!")
|
63 |
+
return token
|
64 |
+
else:
|
65 |
+
# On-premise mode - use .env file
|
66 |
+
from dotenv import load_dotenv
|
67 |
+
load_dotenv()
|
68 |
+
return os.getenv("SPARK_TOKEN")
|
69 |
+
|
70 |
async def spark_generate(s: Session, prompt: str, user_msg: str) -> str:
|
71 |
"""Call Spark with proper error handling"""
|
72 |
try:
|
|
|
78 |
if not version:
|
79 |
raise ValueError("No published version found")
|
80 |
|
81 |
+
# Get Spark token
|
82 |
+
spark_token = _get_spark_token()
|
83 |
+
if not spark_token:
|
84 |
+
log("β SPARK_TOKEN not configured!")
|
85 |
+
raise ValueError("Spark authentication token not configured")
|
86 |
+
|
87 |
+
# Prepare headers with authorization
|
88 |
+
headers = {
|
89 |
+
"Authorization": f"Bearer {spark_token}",
|
90 |
+
"Content-Type": "application/json"
|
91 |
+
}
|
92 |
+
|
93 |
+
# Spark'a gΓΆnderilecek payload'Δ± hazΔ±rla
|
94 |
payload = {
|
95 |
"project_name": s.project_name,
|
96 |
+
"system_prompt": prompt,
|
97 |
"user_input": user_msg,
|
98 |
+
"context": s.chat_history[-10:]
|
|
|
99 |
}
|
100 |
|
101 |
log(f"π Calling Spark for session {s.session_id[:8]}...")
|
102 |
log(f"π Prompt preview (first 200 chars): {prompt[:200]}...")
|
103 |
|
104 |
+
# DoΔru endpoint'e istek at
|
105 |
+
spark_url = SPARK_URL + "/generate"
|
106 |
+
log(f"π Spark URL: {spark_url}")
|
107 |
+
|
108 |
async with httpx.AsyncClient(timeout=60) as client:
|
109 |
+
response = await client.post(spark_url, json=payload, headers=headers)
|
110 |
response.raise_for_status()
|
111 |
data = response.json()
|
112 |
+
|
113 |
+
# Spark'tan gelen yanΔ±tΔ± parse et
|
114 |
+
raw = data.get("model_answer", "").strip()
|
115 |
+
if not raw:
|
116 |
+
# Fallback to other possible fields
|
117 |
+
raw = (data.get("assistant") or data.get("text", "")).strip()
|
118 |
+
|
119 |
log(f"πͺ Spark raw: {raw[:120]!r}")
|
120 |
return raw
|
121 |
|
122 |
+
except httpx.HTTPStatusError as e:
|
123 |
+
log(f"β Spark HTTP error: {e.response.status_code} - {e.response.text}")
|
124 |
+
raise
|
125 |
except httpx.TimeoutException:
|
126 |
log(f"β±οΈ Spark timeout for session {s.session_id[:8]}")
|
127 |
raise
|