mirror of
https://github.com/browser-use/browser-use
synced 2026-05-13 17:56:35 +02:00
Remove stripping of required fields from gemini optimized schema
This commit is contained in:
@@ -164,27 +164,13 @@ class SchemaOptimizer:
|
||||
@staticmethod
|
||||
def create_gemini_optimized_schema(model: type[BaseModel]) -> dict[str, Any]:
|
||||
"""
|
||||
Create Gemini-optimized schema that removes 'required' arrays to save tokens.
|
||||
Gemini can infer required fields from context since all fields are required.
|
||||
Create Gemini-optimized schema, preserving explicit `required` arrays so Gemini
|
||||
respects mandatory fields defined by the caller.
|
||||
|
||||
Args:
|
||||
model: The Pydantic model to optimize
|
||||
|
||||
Returns:
|
||||
Optimized schema without required arrays
|
||||
Optimized schema suitable for Gemini structured output
|
||||
"""
|
||||
# Start with standard optimized schema
|
||||
schema = SchemaOptimizer.create_optimized_json_schema(model)
|
||||
|
||||
def remove_required_arrays(obj: Any) -> Any:
|
||||
"""Recursively remove 'required' arrays"""
|
||||
if isinstance(obj, dict):
|
||||
# Remove 'required' key
|
||||
result = {k: v for k, v in obj.items() if k != 'required'}
|
||||
# Recursively process nested structures
|
||||
return {k: remove_required_arrays(v) for k, v in result.items()}
|
||||
elif isinstance(obj, list):
|
||||
return [remove_required_arrays(item) for item in obj]
|
||||
return obj
|
||||
|
||||
return remove_required_arrays(schema)
|
||||
return SchemaOptimizer.create_optimized_json_schema(model)
|
||||
|
||||
@@ -64,3 +64,13 @@ def test_optimizer_preserves_all_fields_in_structured_done_action():
|
||||
f'Missing from optimized: {original_fields - optimized_fields}\n'
|
||||
f'Unexpected in optimized: {optimized_fields - original_fields}'
|
||||
)
|
||||
|
||||
|
||||
def test_gemini_schema_retains_required_fields():
|
||||
"""Gemini schema should keep explicit required arrays for mandatory fields."""
|
||||
schema = SchemaOptimizer.create_gemini_optimized_schema(ProductInfo)
|
||||
|
||||
assert 'required' in schema, 'Gemini schema removed required fields.'
|
||||
|
||||
required_fields = set(schema['required'])
|
||||
assert {'price', 'title'}.issubset(required_fields), 'Mandatory fields must stay required for Gemini.'
|
||||
|
||||
Reference in New Issue
Block a user