MandAPI
Español ▾
Flujos de aplicación

Reanuda tareas largas desde puntos de control locales

Conserva el progreso entre ejecuciones sin reiniciar límites ni convertir texto guardado en instrucciones de sistema.

Usa esta guía con tu asistente de programación

Leer las instrucciones
Amplía el ejemplo Python sin interfaz de MandAPI con resume_once, que admite como máximo un intento de modelo por invocación. Reutiliza step con herramientas de lectura y conserva identidad de tarea/modelo, conversación, estado e intentos totales. Rechaza archivos dañados o incompatibles sin reiniciar silenciosamente. Conserva instrucciones de sistema confiables en el código. No reinicies el límite al reanudar; cuenta cada solicitud antes de la red. Demuestra dos invocaciones sin conexión y un timeout simulado; verifica que la segunda lee el contador previo. Explica que el punto de control no garantiza cobro único y que el contenido final necesita revisión. Usa MANDAPI_API_KEY, MANDAPI_MODEL_ID y https://api.mandapi.com/v1/chat/completions solo si después el usuario activa llamadas reales; no realices solicitudes de pago ahora.
TXT

Divide una tarea larga en partes recuperables

Una tarea que continúa durante varias sesiones necesita progreso persistente. Reutiliza mandapi_worker.py de la guía del agente sin interfaz. El archivo de tu aplicación conserva tarea, modelo, conversación, contador de intentos, estado y respuesta. La instrucción de sistema permanece en el código.

Trata el punto de control como datos privados. Usa un solo proceso escritor, conserva la misma tarea y el mismo modelo al reanudar y muestra los errores de archivos dañados o incompatibles. Un archivo nuevo reinicia la asignación; un planificador debe mantener uno estable por tarea.

Reanuda un paso

Guarda este código junto al ejecutor como resume_task.py. La prueba simula dos invocaciones independientes sin contactar MandAPI. La primera consulta una referencia; la segunda recupera la conversación y genera la respuesta.

python
from pathlib import Path
from tempfile import TemporaryDirectory
from mandapi_worker import load_state, step, demo, MAX_STEPS


def resume_once(job, checkpoint, ask, model):
    state = load_state(checkpoint, job, model)
    events = []
    step(state, checkpoint, ask, events.append)
    return state, events


if __name__ == "__main__":
    with TemporaryDirectory() as folder:
        checkpoint = Path(folder) / "demo-run.json"
        job = "How long does shipping take at the demo shop?"
        first, _ = resume_once(job, checkpoint, demo, "offline-demo")
        assert first["attempts"] == 1 and first["status"] == "ready"
        resumed, events = resume_once(job, checkpoint, demo, "offline-demo")
        assert resumed["attempts"] == 2 and resumed["status"] == "done"
        assert resumed["attempts"] <= MAX_STEPS
        print(events)

Ejecuta una parte acotada

Ejecuta python resume_task.py para comprobar la recuperación local. Con el ejecutor real, python mandapi_worker.py "TU TAREA" --once --checkpoint task-run.json admite como máximo una solicitud de chat. Configura primero MANDAPI_API_KEY y MANDAPI_MODEL_ID. Repetir el comando continúa la tarea; el límite persistente de cuatro intentos no se reinicia. El endpoint normal es https://api.mandapi.com/v1/chat/completions.

Prueba interrupciones y revisa

Sustituye ask por una función que lance TimeoutError. Vuelve a cargar el archivo y confirma que el contador aumentó antes del fallo. Así evitas reintentos ilimitados tras reinicios, aunque no puedes saber si una solicitud remota interrumpida generó cobro. No hay reintentos automáticos ni garantía de gasto exacto.

Mantén las herramientas en modo de lectura durante las pruebas. Añade revisión humana antes de introducir acciones externas. Para conversaciones extensas, utiliza compactación del contexto conservando mensajes recientes e identificadores; verifica que la respuesta reanudada siga usando la evidencia correcta.

Referencias

Temas inspirados en documentación pública; instrucciones y ejemplos adaptados para MandAPI.