[BUG]: ensure_type_in_schemas incorrectly forces empty schemas {} to {"type": "object"} in anyOf/oneOf
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 76/100
Direzione di ricerca
Inizia da lib/crewai/src/crewai/utilities/pydantic_schema_utils.py e analizza ensure_type_in_schemas() in relazione alla gestione degli schemi vuoti descritta nell’issue. Verifica come la funzione gestisce anyOf e oneOf, quindi controlla i test esistenti per questi schemi. Il risultato atteso è che {} mantenga il suo significato di JSON Schema senza vincoli e che venga preservato il comportamento previsto della modalità strict.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
In lib/crewai/src/crewai/utilities/pydantic_schema_utils.py, ensure_type_in_schemas() converts empty schemas {} inside anyOf / oneOf into {"type": "object"}:
# lib/crewai/src/crewai/utilities/pydantic_schema_utils.py (lines 290-292)
for i, schema in enumerate(schema_list):
if isinstance(schema, dict) and schema == {}:
schema_list[i] = {"type": "object"}
In JSON Schema specification, {} represents an unconstrained schema (accepting any value, including primitives such as strings, numbers, and booleans). Converting {} to {"type": "object"} corrupts schema semantics:
- When a tool has a parameter typed as
AnyorOptional[Any], Pydantic generates{"anyOf": [{}, {"type": "null"}]}. ensure_type_in_schemastransforms this into{"anyOf": [{"type": "object"}, {"type": "null"}]}.- As a result, the tool parameter is restricted to dictionaries/objects only. If an LLM returns a valid scalar (e.g.
42or"ok"), validation fails or the LLM is forced to return{}instead of the requested scalar.
Steps to Reproduce
from copy import deepcopy
from crewai.utilities.pydantic_schema_utils import ensure_type_in_schemas
schema = {"anyOf": [{}, {"type": "null"}]}
result = ensure_type_in_schemas(deepcopy(schema))
print(result)
# Observed:
# {'anyOf': [{'type': 'object'}, {'type': 'null'}]}
Expected Behavior
Empty schemas {} (representing Any) should not be unconditionally converted to {"type": "object"}. If OpenAI strict mode requires an explicit type, converting {} to an object restricts valid scalar arguments. The conversion should either preserve {} when not enforcing strict object constraints or avoid coercing unconstrained types to object.
Additional Context
- Python environment: Python 3.10+ / Pydantic v2
- File:
lib/crewai/src/crewai/utilities/pydantic_schema_utils.py
- Lingua principale
- Python
- Stelle
- 60.1k
- Fork
- 8.9k
- Merge medio
- 1g 7h
- PR unite (30g)
- 184
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di crewAIInc/crewAI
-
[BUG] OpenAI-compatible embedding model alias breaks embedder constructionForse già presa @gokay-ai l’ha presa 1 giorno fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
crewAIInc/crewAI#8761 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[FEATURE] Add api_base_url to TavilySearchTool and TavilyExtractorToolForse già presa @jayfeng7 l’ha presa 3 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
crewAIInc/crewAI#8635 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
crewai-community feature-request vendor-pitch
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno
-
crewai-community vendor-pitch
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
vendor-pitch
Difficoltà 2/5 1-3 ore Idoneità per principianti 87/100
crewAIInc/crewAI#8271 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di crewAIInc/crewAI
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
vllm-project/vllm#64845 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
dekobon/big-code-analysis#1729 ·
I maintainer di solito rispondono entro 1 giorno
-
Add `openai_safety_identifier`, the replacement for the `user` field that `openai_user` sendsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
pydantic/pydantic-ai#12091 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100