ciyidogan commited on
Commit
b47d24c
Β·
verified Β·
1 Parent(s): 2d2ab61

Update chat_handler.py

Browse files
Files changed (1) hide show
  1. 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 internal_prompt config"""
70
  global llm_provider
71
 
72
- cfg = ConfigProvider.get()
73
- internal_prompt = cfg.global_config.internal_prompt
74
-
75
- if not internal_prompt:
76
- log("⚠️ No internal_prompt configured, using default Spark")
77
- # Get Spark token
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 spark_generate(s: Session, prompt: str, user_msg: str) -> str:
153
- """Call LLM (Spark or configured provider) with proper error handling"""
154
- global llm_provider
155
-
156
- if llm_provider is None:
157
- setup_llm_provider()
158
-
159
  try:
160
- # Get version config from session
161
- version = s.get_version_config()
162
- if not version:
163
- # Fallback: get from project config
164
- project = next((p for p in cfg.projects if p.name == s.project_name), None)
165
- if not project:
166
- raise ValueError(f"Project not found: {s.project_name}")
167
- version = next((v for v in project.versions if v.published), None)
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
- context=s.chat_history[-10:],
180
- version_config=version
181
  )
182
 
183
- log(f"πŸͺ„ LLM raw response: {raw[:120]!r}")
184
- return raw
185
-
186
  except httpx.TimeoutException:
187
- log(f"⏱️ LLM timeout for session {s.session_id[:8]}")
188
- raise
189
  except Exception as e:
190
- log(f"❌ LLM error: {e}")
191
- raise
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"}