Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

iot__find_assets_by_sensors: unreachable error guard returns an opaque schema failure

Abierto Apto para principiantes
#645 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
76/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python
Área
api, backend

Línea de trabajo

Lee src/servers/iot/main.py en torno a find_assets_by_sensors en las líneas 502 y 535; después, compara su firma con history() en la línea 729. Comprueba cómo gestionan el esquema MCP y la validación existente un valor de sensors omitido. La tarea está completada cuando la llamada devuelve el error específico “provide at least one sensor name” en lugar del error genérico del esquema, mientras el docstring sigue indicando que sensors es obligatorio.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

What happens

A model that calls iot__find_assets_by_sensors without the sensors argument
gets back:

╭─ ✗ ToolResult │ assetops │ iot__find_assets_by_sensors ──╮
│ Tool arguments are not valid                             │
╰──────────────────────────────────────────────────────────╯

No field name, no hint at what was wrong. With nothing to act on, the model
retries the same call.

Why

src/servers/iot/main.py:502 declares sensors as required:

def find_assets_by_sensors(
    site_name: str,
    sensors: List[str],          # no default, so required
    match: str = "all",
    ...

Thirty-three lines below, at :535, the function already contains the right
response for an omitted value:

if not sensors:
    return ErrorResult(error="provide at least one sensor name")

That line can never run. Because sensors is required, pydantic rejects the
call during schema validation, before the function body executes, so the
framework's generic message is returned instead of the specific one the author
wrote.

Evidence

From a 315-trial TSFM sweep (7 models, 2 independently built runtime images,
15 scenarios, k=3): 155 calls to this tool supplied sensors and 5 omitted it.
Those 5 omissions produced 16 hard failures, because a model that receives
no usable message retries. Across all nine runs on the aa_v1 and TSFM
leaderboards this tool accounts for 17 of 48 occurrences of
Tool arguments are not valid, the largest single share of any tool.

No other tool on any server hard-failed in that sweep apart from two
iot__assets calls, which have a different and still undiagnosed cause.

Proposed fix

Two lines. Give sensors a default so the call reaches the body and the
existing guard fires:

    sensors: Optional[List[str]] = None,

and mark it required in the docstring, since the JSON schema loses that signal:

        sensors: Required. Sensor names, or fragments when `substring` is true.

Optional is already imported at :4, and history() at :729 in the same
file already uses exactly sensors: Optional[List[str]] = None, so this matches
local precedent.

Tradeoff

sensors leaves the schema's required array, so a well-behaved model loses
that cue and the docstring word carries it instead. The alternative, leaving the
signature alone and having the MCP layer append pydantic's validation detail to
its own message, is a wider change in the agent harness rather than two lines in
one server.

Lenguaje dominante
Python
Estrellas
2.4k
Forks
351
Merge medio
8 h 7 min
PR fusionados (30 d)
34

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de IBM/AssetOpsBench

Todos los issues de IBM/AssetOpsBench

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.