@@ -147,6 +147,9 @@ def from_exception(cls, exception: Exception,
147
147
def from_message (cls , message : str , status_code : int = HTTP_500_INTERNAL_SERVER_ERROR ):
148
148
return cls (format_exception (message ), status_code )
149
149
150
+ def render (self , content ) -> bytes :
151
+ return str (content ).encode (errors = "ignore" )
152
+
150
153
class AppConfig :
151
154
ignored_providers : Optional [list [str ]] = None
152
155
g4f_api_key : Optional [str ] = None
@@ -186,9 +189,9 @@ async def authorization(request: Request, call_next):
186
189
user_g4f_api_key = await self .get_g4f_api_key (request )
187
190
except HTTPException as e :
188
191
if e .status_code == 403 :
189
- return ErrorResponse ("G4F API key required" , HTTP_401_UNAUTHORIZED )
192
+ return ErrorResponse . from_message ("G4F API key required" , HTTP_401_UNAUTHORIZED )
190
193
if not secrets .compare_digest (self .g4f_api_key , user_g4f_api_key ):
191
- return ErrorResponse ("Invalid G4F API key" , HTTP_403_FORBIDDEN )
194
+ return ErrorResponse . from_message ("Invalid G4F API key" , HTTP_403_FORBIDDEN )
192
195
return await call_next (request )
193
196
194
197
def register_validation_exception_handler (self ):
@@ -249,7 +252,7 @@ async def model_info(model_name: str) -> ModelResponseModel:
249
252
'created' : 0 ,
250
253
'owned_by' : model_info .base_provider
251
254
})
252
- return ErrorResponse ("The model does not exist." , HTTP_404_NOT_FOUND )
255
+ return ErrorResponse . from_message ("The model does not exist." , HTTP_404_NOT_FOUND )
253
256
254
257
@self .app .post ("/v1/chat/completions" , responses = {
255
258
HTTP_200_OK : {"model" : ChatCompletion },
@@ -318,13 +321,13 @@ async def streaming():
318
321
319
322
except (ModelNotFoundError , ProviderNotFoundError ) as e :
320
323
logger .exception (e )
321
- return ErrorResponse ( e , HTTP_404_NOT_FOUND )
324
+ return ErrorResponse . from_exception ( e , config , HTTP_404_NOT_FOUND )
322
325
except MissingAuthError as e :
323
326
logger .exception (e )
324
- return ErrorResponse ( e , HTTP_401_UNAUTHORIZED )
327
+ return ErrorResponse . from_exception ( e , config , HTTP_401_UNAUTHORIZED )
325
328
except Exception as e :
326
329
logger .exception (e )
327
- return ErrorResponse ( e , HTTP_500_INTERNAL_SERVER_ERROR )
330
+ return ErrorResponse . from_exception ( e , config , HTTP_500_INTERNAL_SERVER_ERROR )
328
331
329
332
responses = {
330
333
HTTP_200_OK : {"model" : ImagesResponse },
@@ -359,13 +362,13 @@ async def generate_image(
359
362
return response
360
363
except (ModelNotFoundError , ProviderNotFoundError ) as e :
361
364
logger .exception (e )
362
- return ErrorResponse ( e , HTTP_404_NOT_FOUND )
365
+ return ErrorResponse . from_exception ( e , config , HTTP_404_NOT_FOUND )
363
366
except MissingAuthError as e :
364
367
logger .exception (e )
365
- return ErrorResponse ( e , HTTP_401_UNAUTHORIZED )
368
+ return ErrorResponse . from_exception ( e , config , HTTP_401_UNAUTHORIZED )
366
369
except Exception as e :
367
370
logger .exception (e )
368
- return ErrorResponse ( e , HTTP_500_INTERNAL_SERVER_ERROR )
371
+ return ErrorResponse . from_exception ( e , config , HTTP_500_INTERNAL_SERVER_ERROR )
369
372
370
373
@self .app .get ("/v1/providers" , responses = {
371
374
HTTP_200_OK : {"model" : List [ProviderResponseModel ]},
@@ -428,12 +431,12 @@ def upload_cookies(files: List[UploadFile]):
428
431
async def synthesize (request : Request , provider : str ):
429
432
try :
430
433
provider_handler = convert_to_provider (provider )
431
- except ProviderNotFoundError :
432
- return ErrorResponse ( "Provider not found" , HTTP_404_NOT_FOUND )
434
+ except ProviderNotFoundError as e :
435
+ return ErrorResponse . from_exception ( e , status_code = HTTP_404_NOT_FOUND )
433
436
if not hasattr (provider_handler , "synthesize" ):
434
- return ErrorResponse ("Provider doesn't support synthesize" , HTTP_404_NOT_FOUND )
437
+ return ErrorResponse . from_message ("Provider doesn't support synthesize" , HTTP_404_NOT_FOUND )
435
438
if len (request .query_params ) == 0 :
436
- return ErrorResponse ("Missing query params" , HTTP_422_UNPROCESSABLE_ENTITY )
439
+ return ErrorResponse . from_message ("Missing query params" , HTTP_422_UNPROCESSABLE_ENTITY )
437
440
response_data = provider_handler .synthesize ({** request .query_params })
438
441
content_type = getattr (provider_handler , "synthesize_content_type" , "application/octet-stream" )
439
442
return StreamingResponse (response_data , media_type = content_type )
0 commit comments