evals: ConversationTurn rejects extra fields from run_inference API response and missing turn_index
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 55/100
Línea de trabajo
Comienza con _process_multi_turn_agent_response en _evals_common.py y la definición de ConversationTurn en vertexai/_genai/types/evals.py; compara los diccionarios de turnos sin procesar de run_inference con el modelo AgentData. Reproduce el flujo generate_conversation_scenarios → run_inference → evaluate y verifica después que los campos de respuesta adicionales se gestionen correctamente y que cada turno tenga un turn_index para que la evaluación se complete correctamente.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Environment
google-cloud-aiplatform: 1.152.0google-genai: 1.75.0google-adk: 1.33.0- Python: 3.12
- Region: us-central1
Description
When using the simulated evaluation pipeline (generate_conversation_scenarios → run_inference → evaluate), two bugs prevent end-to-end execution:
Bug 1: ConversationTurn rejects extra fields from API response
run_inference() returns agent turn data with fields (model_version, content, id, timestamp, author, actions, invocation_id, long_running_tool_ids, finish_reason, usage_metadata, avg_logprobs) that are not defined in ConversationTurn (which only has turn_index, turn_id, events).
Since google.genai._common.BaseModel sets extra='forbid', pydantic rejects these:
pydantic_core._pydantic_core.ValidationError: 44 validation errors for AgentData
turns.0.model_version
Extra inputs are not permitted
turns.0.content
Extra inputs are not permitted
...
The error originates at _evals_common.py:1880 in _process_multi_turn_agent_response:
return types.evals.AgentData(
turns=resp_item,
agents=agent_data_agents,
).model_dump(exclude_unset=True)
Note: The SDK has _remove_extra_fields() in google/genai/_common.py:317 that handles this for _from_response() calls, but _process_multi_turn_agent_response uses direct construction instead.
Bug 2: turn_index not populated by run_inference
The raw turn dicts from the agent engine response don't include turn_index. _process_multi_turn_agent_response passes them directly to AgentData(turns=...) without adding turn_index. When the resulting data is sent to the evaluate API, it fails:
400 INVALID_ARGUMENT: Field: instance.agent_eval_data.turns[0].turn_index; Message: Required field is not set.
Workaround
We patched both issues in our eval script:
# Bug 1: Set ConversationTurn to ignore unknown fields
ct = evals_types.ConversationTurn
ct.model_config["extra"] = "ignore"
ct.__pydantic_complete__ = False
ct.model_rebuild(force=True)
evals_types.AgentData.__pydantic_complete__ = False
evals_types.AgentData.model_rebuild(force=True)
# Bug 2: Inject turn_index based on position
_orig_process = _evals_common._process_multi_turn_agent_response
def _patched_process(resp_item, agent_data_agents):
if isinstance(resp_item, list):
for i, turn in enumerate(resp_item):
if isinstance(turn, dict) and "turn_index" not in turn:
turn["turn_index"] = i
return _orig_process(resp_item, agent_data_agents)
_evals_common._process_multi_turn_agent_response = _patched_process
Steps to Reproduce
import vertexai
from vertexai import Client, types
vertexai.init(project="PROJECT", location="us-central1")
client = Client(project="PROJECT", location="us-central1")
# Generate scenarios
eval_dataset = client.evals.generate_conversation_scenarios(
agent_info=agent_info,
config={"count": 1, "generation_instruction": "Search for hotels"},
allow_cross_region_model=True,
)
# This fails with Bug 1
eval_dataset_with_traces = client.evals.run_inference(
agent="projects/PROJECT_NUM/locations/us-central1/reasoningEngines/ENGINE_ID",
src=eval_dataset,
config={"user_simulator_config": {"max_turn": 3, "model_name": "gemini-2.5-flash"}},
)
# If Bug 1 is patched, this fails with Bug 2
eval_result = client.evals.evaluate(
dataset=eval_dataset_with_traces,
metrics=[types.RubricMetric.FINAL_RESPONSE_QUALITY],
)
Suggested Fix
- Add the missing fields to
ConversationTurninvertexai/_genai/types/evals.py, or setextra='ignore'on the model - In
_process_multi_turn_agent_response, addturn["turn_index"] = ifor each turn before constructingAgentData
- Lenguaje dominante
- Python
- Estrellas
- 907
- Forks
- 467
- Merge medio
- 1 d 11 h
- PR fusionados (30 d)
- 38
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de googleapis/python-aiplatform
-
Protobuf 7.35.1+ support Abiertoapi: vertex-ai
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
googleapis/python-aiplatform#7132 ·
-
api: vertex-ai
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
googleapis/python-aiplatform#7097 ·
-
CustomContainerTrainingJob.run drops max_wait_duration=0 instead of requesting indefinite DWS wait Abiertoapi: vertex-ai
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
googleapis/python-aiplatform#7067 · 1 comentario ·
-
api: vertex-ai
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
googleapis/python-aiplatform#6877 ·
-
api: vertex-ai
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
googleapis/python-aiplatform#6865 · 1 comentario ·
Todos los issues de googleapis/python-aiplatform
Issues similares
-
bug priority:low
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
CyberAgent/psd2svg#436 ·
-
area/install-update comp/cli comp/desktop P3 sweeper:risk-compatibility type/bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
NousResearch/hermes-agent#122386 · 1 comentario ·
-
ai-generated
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
vllm-project/production-stack#1105 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100