mirror of
				https://github.com/open-webui/mcpo
				synced 2025-06-26 18:26:58 +00:00 
			
		
		
		
	feat: Support mixed types
This commit is contained in:
		
							parent
							
								
									64e41d1058
								
							
						
					
					
						commit
						ec4524ee22
					
				| @ -224,3 +224,22 @@ def test_model_caching(): | ||||
|     ) | ||||
|     assert result_type3 == result_type1  # Should be the same cached object | ||||
|     assert len(_model_cache) == 2  # Only two unique models created | ||||
| 
 | ||||
| 
 | ||||
| def test_multi_type_property(): | ||||
|     schema = {"type": ["string", "number"], "description": "A property with multiple types"} | ||||
|     expected_field = Field(default=..., description="A property with multiple types") | ||||
|     result_type, result_field = _process_schema_property( | ||||
|         _model_cache, schema, "test", "multi_type", True | ||||
|     ) | ||||
| 
 | ||||
|     # Check if the resulting type is a Union | ||||
|     assert str(result_type).startswith("typing.Union[") | ||||
| 
 | ||||
|     # Check if both types are in the Union | ||||
|     assert str in result_type.__args__ | ||||
|     assert float in result_type.__args__ | ||||
| 
 | ||||
|     # Check field properties | ||||
|     assert result_field.default == expected_field.default | ||||
|     assert result_field.description == expected_field.description | ||||
|  | ||||
| @ -58,6 +58,22 @@ def _process_schema_property( | ||||
|     default_value = ... if is_required else prop_schema.get("default", None) | ||||
|     pydantic_field = Field(default=default_value, description=prop_desc) | ||||
| 
 | ||||
|     # Handle the case where prop_type is a list of types, e.g. ['string', 'number'] | ||||
|     if isinstance(prop_type, list): | ||||
|         # Create a Union of all the types | ||||
|         type_hints = [] | ||||
|         for type_option in prop_type: | ||||
|             # Create a temporary schema with the single type and process it | ||||
|             temp_schema = dict(prop_schema) | ||||
|             temp_schema["type"] = type_option | ||||
|             type_hint, _ = _process_schema_property( | ||||
|                 _model_cache, temp_schema, model_name_prefix, prop_name, False | ||||
|             ) | ||||
|             type_hints.append(type_hint) | ||||
| 
 | ||||
|         # Return a Union of all possible types | ||||
|         return Union[tuple(type_hints)], pydantic_field | ||||
| 
 | ||||
|     if prop_type == "object": | ||||
|         nested_properties = prop_schema.get("properties", {}) | ||||
|         nested_required = prop_schema.get("required", []) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user