11from  fastapi  import  APIRouter 
22from  pydantic  import  BaseModel , Field 
33from  app .component .model_validation  import  create_agent 
4+ from  camel .types  import  ModelType 
5+ from  app .component .error_format  import  normalize_error_to_openai_format 
46
57
68router  =  APIRouter (tags = ["model" ])
@@ -18,12 +20,48 @@ class ValidateModelRequest(BaseModel):
1820class  ValidateModelResponse (BaseModel ):
1921    is_valid : bool  =  Field (..., description = "Is valid" )
2022    is_tool_calls : bool  =  Field (..., description = "Is tool call used" )
23+     error_code : str  |  None  =  Field (None , description = "Error code" )
24+     error : dict  |  None  =  Field (None , description = "OpenAI-style error object" )
2125    message : str  =  Field (..., description = "Message" )
2226
2327
2428@router .post ("/model/validate" ) 
2529async  def  validate_model (request : ValidateModelRequest ):
2630    try :
31+         # 1) API key validation 
32+         if  request .api_key  is  not   None  and  str (request .api_key ).strip () ==  "" :
33+             return  ValidateModelResponse (
34+                 is_valid = False ,
35+                 is_tool_calls = False ,
36+                 message = "Invalid key. Validation failed." ,
37+                 error_code = "invalid_api_key" ,
38+                 error = {
39+                     "message" : "Invalid key. Validation failed." ,
40+                     "type" : "invalid_request_error" ,
41+                     "param" : None ,
42+                     "code" : "invalid_api_key" ,
43+                 },
44+             )
45+ 
46+         # 2) Model name validation 
47+         if  request .model_type :
48+             try :
49+                 # Will raise if not a valid enum name 
50+                 _  =  ModelType .from_name (request .model_type )
51+             except  Exception  as  e :
52+                 return  ValidateModelResponse (
53+                     is_valid = False ,
54+                     is_tool_calls = False ,
55+                     message = "Invalid model name. Validation failed." ,
56+                     error_code = f"model_not_found : { e }  " ,
57+                     error = {
58+                         "message" : "Invalid model name. Validation failed." ,
59+                         "type" : "invalid_request_error" ,
60+                         "param" : None ,
61+                         "code" : "model_not_found" ,
62+                     },
63+                 )
64+ 
2765        extra  =  request .extra_params  or  {}
2866
2967        agent  =  create_agent (
@@ -43,17 +81,33 @@ async def validate_model(request: ValidateModelRequest):
4381            """ 
4482        )
4583    except  Exception  as  e :
46-         return  ValidateModelResponse (is_valid = False , is_tool_calls = False , message = str (e ))
84+         # Normalize error to OpenAI-style error structure 
85+         message , error_code , error_obj  =  normalize_error_to_openai_format (e )
86+ 
87+         return  ValidateModelResponse (
88+             is_valid = False ,
89+             is_tool_calls = False ,
90+             message = message ,
91+             error_code = error_code ,
92+             error = error_obj ,
93+         )
4794    is_valid  =  bool (response )
4895    is_tool_calls  =  False 
49-      
50-     if  response  and  hasattr (response , ' info'  ) and  response .info :
96+ 
97+     if  response  and  hasattr (response , " info"  ) and  response .info :
5198        tool_calls  =  response .info .get ("tool_calls" , [])
5299        if  tool_calls  and  len (tool_calls ) >  0 :
53-             is_tool_calls  =  tool_calls [0 ].result  ==  "Tool execution completed successfully for https://www.camel-ai.org, Website Content: Welcome to CAMEL AI!" 
54-     
100+             is_tool_calls  =  (
101+                 tool_calls [0 ].result 
102+                 ==  "Tool execution completed successfully for https://www.camel-ai.org, Website Content: Welcome to CAMEL AI!" 
103+             )
104+ 
55105    return  ValidateModelResponse (
56106        is_valid = is_valid ,
57107        is_tool_calls = is_tool_calls ,
58-         message = "" ,
108+         message = "Validation Success" 
109+         if  is_tool_calls 
110+         else  "This model doesn't support tool calls. please try with another model." ,
111+         error_code = None ,
112+         error = None ,
59113    )
0 commit comments