MandAPI
Español ▾
Flujos de aplicación

Crea una interfaz de terminal para tu agente

Muestra progreso, consultas de referencias y pasos reanudables con una terminal portátil en Python.

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

Leer las instrucciones
Añade una interfaz de terminal con biblioteca estándar al ejecutor sin interfaz de MandAPI. Reutiliza load_state y step; no dupliques el ciclo. Incluye /next para admitir una solicitud, /status y /quit; muestra intentos y eventos de herramientas de lectura. Conserva identidad y límites del punto de control. Elimina caracteres de control al visualizar la salida. No añadas comandos, lector arbitrario de archivos, acciones externas ni afirmes que existe un agente alojado. Ofrece --demo y pruebas locales con entrada simulada: un comando desconocido o salir no llama al modelo; dos next terminan la demostración; abrir un archivo terminado tampoco llama. Las solicitudes reales que el usuario active después usarán MANDAPI_API_KEY y MANDAPI_MODEL_ID en https://api.mandapi.com/v1/chat/completions. No ejecutes solicitudes de pago ni despliegues.
TXT

Añade una interfaz de terminal al mismo ejecutor

La terminal debe mostrar qué hace tu aplicación: qué paso ejecutó, qué referencia consultó y si terminó la tarea. Reutiliza mandapi_worker.py de la guía sin interfaz. Esta interfaz portátil utiliza entrada y salida normales de Python, sin otro SDK de agentes.

Guarda el código como agent_tui.py junto a ese módulo. /next admite un paso, /status muestra el progreso y /quit deja disponible el último punto de control. Solo está habilitada la consulta de referencias fijas. La interfaz no concede acceso a comandos ni crea un agente alojado por MandAPI.

Añade la interfaz

python
import argparse
import os
from pathlib import Path
from mandapi_worker import load_state, step, chat, demo, MAX_STEPS


def safe(text):
    return "".join(c for c in str(text) if c.isprintable() or c == "\n")


def show_event(event):
    if event["event"] == "read":
        print("  reference:", safe(event["name"]))
    elif event["event"] == "done":
        print("  answer:", safe(event["answer"]))
    else:
        print("  status:", safe(event["event"]))


def run_ui(state, checkpoint, ask, read=input):
    while state["status"] == "ready":
        print("\n+--- MandAPI demo assistant ---+")
        print("attempts:", state["attempts"], "/", MAX_STEPS)
        print("/next = one step | /status | /quit")
        command = read("> ").strip()
        if command == "/quit":
            return state
        if command == "/status":
            print("status:", safe(state["status"]))
        elif command == "/next":
            print("working...", flush=True)
            step(state, checkpoint, ask, show_event)
        else:
            print("Unknown command")
    print("status:", safe(state["status"]))
    if state["result"]:
        print(safe(state["result"]))
    return state


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("job")
    parser.add_argument("--checkpoint", type=Path, default=Path("tui-run.json"))
    parser.add_argument("--demo", action="store_true")
    args = parser.parse_args()
    model = "offline-demo" if args.demo else os.environ["MANDAPI_MODEL_ID"]
    state = load_state(args.checkpoint, args.job, model)
    try:
        run_ui(state, args.checkpoint, demo if args.demo else chat)
    except (EOFError, KeyboardInterrupt):
        print("\nStopped; the last saved checkpoint remains available.")
    except (OSError, ValueError, KeyError, TypeError, IndexError) as error:
        print("Stopped:", type(error).__name__)
        raise SystemExit(1)

Prueba la interacción

Ejecuta python agent_tui.py "How long does demo shipping take?" --demo --checkpoint tui-demo.json. Introduce /status y después /next dos veces. Debes ver el nombre de una referencia y una respuesta. Repite el comando con la misma tarea y archivo para consultar el resultado terminado sin llamar otra vez al modelo.

Para usar chat real, configura MANDAPI_API_KEY y un MANDAPI_MODEL_ID adecuado, omite --demo y elige otro archivo. El ejecutor realiza solicitudes normales a https://api.mandapi.com/v1/chat/completions; cada paso real puede consumir saldo. Muestra una espera y después el paso terminado, sin transmisión token a token.

Verifica los controles

Prueba un comando desconocido y confirma que no envía solicitudes. Sal antes de /next y confirma que no hubo llamadas. Simula una acción inválida del modelo y comprueba que se rechaza. La visualización elimina caracteres de control; no imprimas directamente secuencias de escape generadas por el modelo.

Salir de la interfaz no cancela una solicitud remota ya aceptada. El intento fallido o interrumpido sigue contado. Para ejecutar sin supervisión, conserva el mismo módulo y sigue la guía de tareas reanudables.

Referencias

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