Spaces:
Building
Building
Update chat_handler.py
Browse files- chat_handler.py +27 -113
chat_handler.py
CHANGED
@@ -18,6 +18,7 @@ from validation_engine import validate
|
|
18 |
from session import session_store, Session
|
19 |
from llm_interface import LLMInterface, SparkLLM, GPT4oLLM
|
20 |
from config_provider import ConfigProvider
|
|
|
21 |
|
22 |
# βββββββββββββββββββββββββ CONFIG βββββββββββββββββββββββββ #
|
23 |
# Global config reference
|
@@ -66,129 +67,42 @@ def _safe_intent_parse(raw: str) -> tuple[str, str]:
|
|
66 |
|
67 |
# βββββββββββββββββββββββββ LLM SETUP βββββββββββββββββββββββββ #
|
68 |
def setup_llm_provider():
|
69 |
-
"""Initialize LLM provider based on
|
70 |
global llm_provider
|
71 |
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
log("
|
77 |
-
|
78 |
-
spark_token = _get_spark_token()
|
79 |
-
if not spark_token:
|
80 |
-
log("β SPARK_TOKEN not found")
|
81 |
-
raise ValueError("SPARK_TOKEN not configured")
|
82 |
-
|
83 |
-
spark_endpoint = str(cfg.global_config.spark_endpoint).rstrip("/")
|
84 |
-
work_mode = cfg.global_config.work_mode
|
85 |
-
|
86 |
-
log(f"π Initializing SparkLLM: {spark_endpoint}")
|
87 |
-
log(f"π§ Work mode: {work_mode}")
|
88 |
-
|
89 |
-
llm_provider = SparkLLM(
|
90 |
-
spark_endpoint=spark_endpoint,
|
91 |
-
spark_token=spark_token,
|
92 |
-
work_mode=work_mode
|
93 |
-
)
|
94 |
-
|
95 |
-
log("β
SparkLLM initialized")
|
96 |
-
return
|
97 |
-
|
98 |
-
# Check if it's a GPT-4o config
|
99 |
-
if internal_prompt.get("provider") == "gpt-4o":
|
100 |
-
api_key = internal_prompt.get("api_key")
|
101 |
-
if not api_key:
|
102 |
-
if cfg.global_config.is_cloud_mode():
|
103 |
-
api_key = os.environ.get("OPENAI_API_KEY")
|
104 |
-
else:
|
105 |
-
from dotenv import load_dotenv
|
106 |
-
load_dotenv()
|
107 |
-
api_key = os.getenv("OPENAI_API_KEY")
|
108 |
-
|
109 |
-
if not api_key:
|
110 |
-
raise ValueError("OpenAI API key not configured")
|
111 |
-
|
112 |
-
llm_provider = GPT4oLLM(
|
113 |
-
api_key=api_key,
|
114 |
-
model=internal_prompt.get("model", "gpt-4o"),
|
115 |
-
max_tokens=internal_prompt.get("max_tokens", 4096),
|
116 |
-
temperature=internal_prompt.get("temperature", 0.7)
|
117 |
-
)
|
118 |
-
log("β
GPT-4o LLM initialized")
|
119 |
-
else:
|
120 |
-
# Default to Spark
|
121 |
-
spark_token = _get_spark_token()
|
122 |
-
if not spark_token:
|
123 |
-
raise ValueError("SPARK_TOKEN not configured")
|
124 |
-
|
125 |
-
spark_endpoint = str(cfg.global_config.spark_endpoint).rstrip("/")
|
126 |
-
work_mode = cfg.global_config.work_mode
|
127 |
-
|
128 |
-
llm_provider = SparkLLM(
|
129 |
-
spark_endpoint=spark_endpoint,
|
130 |
-
spark_token=spark_token,
|
131 |
-
work_mode=work_mode
|
132 |
-
)
|
133 |
-
log("β
SparkLLM initialized (via internal_prompt)")
|
134 |
-
|
135 |
-
def _get_spark_token() -> Optional[str]:
|
136 |
-
"""Get Spark token based on work mode"""
|
137 |
-
cfg = ConfigProvider.get()
|
138 |
-
|
139 |
-
if cfg.global_config.is_cloud_mode():
|
140 |
-
# Cloud mode - use HuggingFace secrets
|
141 |
-
token = os.environ.get("SPARK_TOKEN")
|
142 |
-
if token:
|
143 |
-
log("π Using SPARK_TOKEN from environment")
|
144 |
-
return token
|
145 |
-
else:
|
146 |
-
# On-premise mode - use .env file
|
147 |
-
from dotenv import load_dotenv
|
148 |
-
load_dotenv()
|
149 |
-
return os.getenv("SPARK_TOKEN")
|
150 |
|
151 |
# βββββββββββββββββββββββββ SPARK/LLM CALL βββββββββββββββββββββββββ #
|
152 |
-
async def
|
153 |
-
"""Call LLM
|
154 |
-
global llm_provider
|
155 |
-
|
156 |
-
if llm_provider is None:
|
157 |
-
setup_llm_provider()
|
158 |
-
|
159 |
try:
|
160 |
-
# Get
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
if not version:
|
169 |
-
raise ValueError("No published version found")
|
170 |
-
|
171 |
-
log(f"π Calling LLM for session {s.session_id[:8]}...")
|
172 |
-
log(f"π Prompt preview (first 200 chars): {prompt[:200]}...")
|
173 |
-
|
174 |
-
# Call the configured LLM provider
|
175 |
-
raw = await llm_provider.generate(
|
176 |
-
project_name=s.project_name,
|
177 |
-
user_input=user_msg,
|
178 |
system_prompt=prompt,
|
179 |
-
|
180 |
-
|
181 |
)
|
182 |
|
183 |
-
log(f"
|
184 |
-
return
|
185 |
-
|
186 |
except httpx.TimeoutException:
|
187 |
-
log(
|
188 |
-
|
189 |
except Exception as e:
|
190 |
-
log(f"β LLM error: {e}")
|
191 |
-
|
192 |
|
193 |
# βββββββββββββββββββββββββ ALLOWED INTENTS βββββββββββββββββββββββββ #
|
194 |
ALLOWED_INTENTS = {"flight-booking", "flight-info", "booking-cancel"}
|
|
|
18 |
from session import session_store, Session
|
19 |
from llm_interface import LLMInterface, SparkLLM, GPT4oLLM
|
20 |
from config_provider import ConfigProvider
|
21 |
+
from llm_factory import LLMFactory
|
22 |
|
23 |
# βββββββββββββββββββββββββ CONFIG βββββββββββββββββββββββββ #
|
24 |
# Global config reference
|
|
|
67 |
|
68 |
# βββββββββββββββββββββββββ LLM SETUP βββββββββββββββββββββββββ #
|
69 |
def setup_llm_provider():
|
70 |
+
"""Initialize LLM provider based on config"""
|
71 |
global llm_provider
|
72 |
|
73 |
+
try:
|
74 |
+
llm_provider = LLMFactory.create_provider()
|
75 |
+
log("β
LLM provider initialized successfully")
|
76 |
+
except Exception as e:
|
77 |
+
log(f"β Failed to initialize LLM provider: {e}")
|
78 |
+
raise
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
|
80 |
# βββββββββββββββββββββββββ SPARK/LLM CALL βββββββββββββββββββββββββ #
|
81 |
+
async def llm_generate(s: Session, prompt: str, user_msg: str) -> str:
|
82 |
+
"""Call LLM provider with proper error handling"""
|
|
|
|
|
|
|
|
|
|
|
83 |
try:
|
84 |
+
# Get conversation context
|
85 |
+
context = [
|
86 |
+
{"role": msg["role"], "content": msg["content"]}
|
87 |
+
for msg in s.chat_history[-10:] # Last 10 messages
|
88 |
+
]
|
89 |
+
|
90 |
+
# Generate response
|
91 |
+
raw_response = await llm_provider.generate(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
system_prompt=prompt,
|
93 |
+
user_input=user_msg,
|
94 |
+
context=context
|
95 |
)
|
96 |
|
97 |
+
log(f"π₯ LLM response length: {len(raw_response)}")
|
98 |
+
return raw_response
|
99 |
+
|
100 |
except httpx.TimeoutException:
|
101 |
+
log("β±οΈ LLM timeout - returning fallback")
|
102 |
+
return "Δ°steΔiniz zaman aΕΔ±mΔ±na uΔradΔ±. LΓΌtfen tekrar deneyin."
|
103 |
except Exception as e:
|
104 |
+
log(f"β LLM error: {str(e)}")
|
105 |
+
return "Bir hata oluΕtu. LΓΌtfen daha sonra tekrar deneyin."
|
106 |
|
107 |
# βββββββββββββββββββββββββ ALLOWED INTENTS βββββββββββββββββββββββββ #
|
108 |
ALLOWED_INTENTS = {"flight-booking", "flight-info", "booking-cancel"}
|