@@ -132,7 +132,7 @@ def _wrap_in_fastapi(
132
132
class InvokeResponse (BaseModel ):
133
133
usage : list [UsageData ]
134
134
status_code : int
135
- filedata_meta : filedata_meta_model
135
+ filedata_meta : Optional [ filedata_meta_model ]
136
136
status_code_text : Optional [str ] = None
137
137
output : Optional [response_type ] = None
138
138
@@ -156,16 +156,24 @@ async def wrap_fn(func: Callable, kwargs: Optional[dict[str, Any]] = None) -> Re
156
156
try :
157
157
if inspect .isasyncgenfunction (func ):
158
158
# Stream response if function is an async generator
159
-
160
159
async def _stream_response ():
161
- async for output in func (** (request_dict or {})):
160
+ try :
161
+ async for output in func (** (request_dict or {})):
162
+ yield InvokeResponse (
163
+ usage = usage ,
164
+ filedata_meta = filedata_meta_model .model_validate (
165
+ filedata_meta .model_dump ()
166
+ ),
167
+ status_code = status .HTTP_200_OK ,
168
+ output = output ,
169
+ ).model_dump_json () + "\n "
170
+ except Exception as e :
171
+ logger .error (f"Failure streaming response: { e } " , exc_info = True )
162
172
yield InvokeResponse (
163
173
usage = usage ,
164
- filedata_meta = filedata_meta_model .model_validate (
165
- filedata_meta .model_dump ()
166
- ),
167
- status_code = status .HTTP_200_OK ,
168
- output = output ,
174
+ filedata_meta = None ,
175
+ status_code = status .HTTP_500_INTERNAL_SERVER_ERROR ,
176
+ status_code_text = f"[{ e .__class__ .__name__ } ] { e } " ,
169
177
).model_dump_json () + "\n "
170
178
171
179
return StreamingResponse (_stream_response (), media_type = "application/x-ndjson" )
0 commit comments