Перейти к содержимому

RunRecord

RunRecord собирает всё об одном выполнении — снимок цепочки, вход, (без потерь) результат и тайминги — в единую JSON-сериализуемую запись. Именно её MAESTRO хранит как историю прогонов и именно её читает обратно care replay.

from datetime import datetime, timezone
from mmar_carl import RunRecord
started = datetime.now(timezone.utc)
result = await chain.execute_async(context)
record = RunRecord.from_run(
chain=chain,
context=context,
result=result,
started_at=started,
chain_id="my-chain", # optional
chain_version="v3", # optional
)

from_run делает снимок chain.to_dict(), захватывает outer_context + память + метаданные контекста (отбрасывая внутренние для фреймворка ключи с префиксом __) и проставляет finished_at = now(), если вы не передали его.

ПолеЗначение
chain_id / chain_versionИдентичность выполненной цепочки (опционально).
chain_dictПолная сериализованная цепочка (долговечный снимок).
input{outer_context, memory}, с которых начался прогон.
resultРезультат ReasoningResult без потерь.
started_at / finished_atВременные метки.
runtime_infoВерсия библиотеки + информация об окружении.
record.save("runs/run-001.json")
loaded = RunRecord.load("runs/run-001.json")
d = record.to_dict(); RunRecord.from_dict(d)

Затем пройдите по нему с помощью care replay run-001.json.