Local workers fail for non-coroutine awaitable run results

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

Los mantenedores suelen responder en 3 días

Nadie ha tomado este issue todavía.

  • #667 de @Elon-Jiang — cerrado sin fusionar

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

Línea de trabajo

Empieza en agentlightning/controller/local_reconciler.py, en _run_local_reconciler_worker, y revisa cómo gestiona los resultados de los métodos síncronos run(). Usa la reproducción de Deferred del issue y el punto de entrada del worker para comprobar el comportamiento. El trabajo estará terminado cuando los awaitables personalizados se completen correctamente y los resultados síncronos y de coroutine sigan funcionando.

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

Descripción

Problem

On Python 3.12, the local worker detects results with inspect.isawaitable, but passes them directly to asyncio.run. That entry point requires a coroutine on Python 3.12. A valid custom awaitable returned by an agent's synchronous run() therefore fails with ValueError: a coroutine was expected and the worker exits with code 1 without completing the task. Synchronous results and normal coroutine results work.

Minimal reproduction

Put this in an importable module awaitable_agent.py:

import asyncio

class Deferred:
    def __await__(self):
        async def complete():
            await asyncio.sleep(0)
            print("completed")
        return complete().__await__()

class Agent:
    def run(self):
        return Deferred()

Run the same worker entry point used by the local controller:

from agentlightning.controller.local_reconciler import _run_local_reconciler_worker
assert _run_local_reconciler_worker("awaitable_agent:Agent") == 0

On main 05c7fe133175653e48c990546a3509e52dc56512, the assertion fails; the worker prints the ValueError and returns 1. The awaitable is not executed.

A small coroutine wrapper can await the result before handing the wrapper to asyncio.run. I verified this with real importable agent classes and independent child processes: unchanged source exits 1 without the completion marker; the wrapper exits 0 with the marker. Regression controls cover synchronous and coroutine results. With the focused fix, all 159 CPU tests pass using the frozen dev/verl-cpu environment, whole-repository pyright reports 0 errors, and the lint, pre-commit, headers, strict docs and package checks pass. No browser, model inference, GPU training or cluster was used.

AI assistance: Codex investigated, prepared the fix and ran these checks.

Lenguaje dominante
Python
Estrellas
18.9k
Forks
1.7k
Merge medio
4 d 11 h
PR fusionados (30 d)
9

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

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 microsoft/agent-lightning

Todos los issues de microsoft/agent-lightning

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.