Spaces:
Running
Running
refactor v0.3
Browse files- app/main.py +11 -10
app/main.py
CHANGED
@@ -133,12 +133,12 @@ def extract_user_query_fallback(data: Any) -> str:
|
|
133 |
# Streaming Handlers for LangServe
|
134 |
# βββββββββββββββββββββββββββββββββββββββββ
|
135 |
|
136 |
-
|
137 |
"""Streaming handler that yields individual tokens for LangServe"""
|
|
|
|
|
|
|
138 |
try:
|
139 |
-
logger.info(f"=== STREAMING HANDLER START ===")
|
140 |
-
logger.info(f"streaming_flexible_handler received: {data} (type: {type(data)})")
|
141 |
-
|
142 |
# Extract query using the same logic as flexible_handler
|
143 |
if hasattr(data, 'extract_query'):
|
144 |
query = data.extract_query()
|
@@ -161,7 +161,8 @@ async def streaming_flexible_handler(data):
|
|
161 |
|
162 |
if not query.strip():
|
163 |
# Yield error message as individual characters
|
164 |
-
error_msg = "No query found. Please provide text
|
|
|
165 |
for char in error_msg:
|
166 |
yield char
|
167 |
return
|
@@ -171,20 +172,18 @@ async def streaming_flexible_handler(data):
|
|
171 |
full_text = result.result
|
172 |
|
173 |
logger.info(f"Generated response: '{full_text}' (length: {len(full_text)})")
|
|
|
174 |
|
175 |
# Yield individual characters - this is what LangServe expects for streaming
|
176 |
for i, char in enumerate(full_text):
|
177 |
logger.debug(f"Yielding character {i}: '{char}'")
|
178 |
yield char
|
179 |
-
|
180 |
-
# Small delay to simulate realistic streaming
|
181 |
-
await asyncio.sleep(0.02)
|
182 |
|
183 |
logger.info("=== STREAMING HANDLER COMPLETE ===")
|
184 |
|
185 |
except Exception as e:
|
186 |
logger.error(f"Error in streaming_flexible_handler: {e}", exc_info=True)
|
187 |
-
error_msg = f"Error
|
188 |
for char in error_msg:
|
189 |
yield char
|
190 |
|
@@ -195,6 +194,7 @@ async def streaming_flexible_handler(data):
|
|
195 |
def flexible_handler(data) -> ChatFedOutput:
|
196 |
"""Primary handler for flexible input that accepts multiple formats"""
|
197 |
try:
|
|
|
198 |
logger.info(f"flexible_handler received: {data} (type: {type(data)})")
|
199 |
|
200 |
# Handle both Pydantic model and raw dict input
|
@@ -240,7 +240,8 @@ def flexible_handler(data) -> ChatFedOutput:
|
|
240 |
"extracted_query": query,
|
241 |
"input_method": "flexible_handler",
|
242 |
"input_type": str(type(data)),
|
243 |
-
"extracted_from": extracted_from
|
|
|
244 |
})
|
245 |
return result
|
246 |
|
|
|
133 |
# Streaming Handlers for LangServe
|
134 |
# βββββββββββββββββββββββββββββββββββββββββ
|
135 |
|
136 |
+
def streaming_flexible_handler(data):
|
137 |
"""Streaming handler that yields individual tokens for LangServe"""
|
138 |
+
logger.info(f"=== STREAMING HANDLER CALLED ===")
|
139 |
+
logger.info(f"streaming_flexible_handler received: {data} (type: {type(data)})")
|
140 |
+
|
141 |
try:
|
|
|
|
|
|
|
142 |
# Extract query using the same logic as flexible_handler
|
143 |
if hasattr(data, 'extract_query'):
|
144 |
query = data.extract_query()
|
|
|
161 |
|
162 |
if not query.strip():
|
163 |
# Yield error message as individual characters
|
164 |
+
error_msg = "No query found. Please provide text."
|
165 |
+
logger.info(f"No query found, yielding error: '{error_msg}'")
|
166 |
for char in error_msg:
|
167 |
yield char
|
168 |
return
|
|
|
172 |
full_text = result.result
|
173 |
|
174 |
logger.info(f"Generated response: '{full_text}' (length: {len(full_text)})")
|
175 |
+
logger.info("Starting to yield individual characters...")
|
176 |
|
177 |
# Yield individual characters - this is what LangServe expects for streaming
|
178 |
for i, char in enumerate(full_text):
|
179 |
logger.debug(f"Yielding character {i}: '{char}'")
|
180 |
yield char
|
|
|
|
|
|
|
181 |
|
182 |
logger.info("=== STREAMING HANDLER COMPLETE ===")
|
183 |
|
184 |
except Exception as e:
|
185 |
logger.error(f"Error in streaming_flexible_handler: {e}", exc_info=True)
|
186 |
+
error_msg = f"Error: {str(e)}"
|
187 |
for char in error_msg:
|
188 |
yield char
|
189 |
|
|
|
194 |
def flexible_handler(data) -> ChatFedOutput:
|
195 |
"""Primary handler for flexible input that accepts multiple formats"""
|
196 |
try:
|
197 |
+
logger.info(f"=== NON-STREAMING HANDLER CALLED ===")
|
198 |
logger.info(f"flexible_handler received: {data} (type: {type(data)})")
|
199 |
|
200 |
# Handle both Pydantic model and raw dict input
|
|
|
240 |
"extracted_query": query,
|
241 |
"input_method": "flexible_handler",
|
242 |
"input_type": str(type(data)),
|
243 |
+
"extracted_from": extracted_from,
|
244 |
+
"handler_type": "NON_STREAMING" # Added to identify which handler was used
|
245 |
})
|
246 |
return result
|
247 |
|