@elizaos/plugin-training 2.0.3-beta.6 → 2.0.3-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backends/native.d.ts +96 -0
- package/dist/backends/native.d.ts.map +1 -0
- package/dist/backends/native.js +308 -0
- package/dist/backends/native.js.map +1 -0
- package/dist/cli/train.d.ts +22 -0
- package/dist/cli/train.d.ts.map +1 -0
- package/dist/cli/train.js +219 -0
- package/dist/cli/train.js.map +1 -0
- package/dist/core/action-benchmark-runner.d.ts +55 -0
- package/dist/core/action-benchmark-runner.d.ts.map +1 -0
- package/dist/core/action-benchmark-runner.js +341 -0
- package/dist/core/action-benchmark-runner.js.map +1 -0
- package/dist/core/artifact-store.d.ts +72 -0
- package/dist/core/artifact-store.d.ts.map +1 -0
- package/dist/core/artifact-store.js +50 -0
- package/dist/core/artifact-store.js.map +1 -0
- package/dist/core/benchmark-matrix-artifact.d.ts +102 -0
- package/dist/core/benchmark-matrix-artifact.d.ts.map +1 -0
- package/dist/core/benchmark-matrix-artifact.js +381 -0
- package/dist/core/benchmark-matrix-artifact.js.map +1 -0
- package/dist/core/benchmark-vs-cerebras-runner.d.ts +37 -0
- package/dist/core/benchmark-vs-cerebras-runner.d.ts.map +1 -0
- package/dist/core/benchmark-vs-cerebras-runner.js +151 -0
- package/dist/core/benchmark-vs-cerebras-runner.js.map +1 -0
- package/dist/core/cerebras-eval-model.d.ts +54 -0
- package/dist/core/cerebras-eval-model.d.ts.map +1 -0
- package/dist/core/cerebras-eval-model.js +249 -0
- package/dist/core/cerebras-eval-model.js.map +1 -0
- package/dist/core/cli.d.ts +15 -0
- package/dist/core/cli.d.ts.map +1 -0
- package/dist/core/cli.js +1003 -0
- package/dist/core/cli.js.map +1 -0
- package/dist/core/context-audit.d.ts +51 -0
- package/dist/core/context-audit.d.ts.map +1 -0
- package/dist/core/context-audit.js +166 -0
- package/dist/core/context-audit.js.map +1 -0
- package/dist/core/context-catalog.d.ts +47 -0
- package/dist/core/context-catalog.d.ts.map +1 -0
- package/dist/core/context-catalog.js +269 -0
- package/dist/core/context-catalog.js.map +1 -0
- package/dist/core/context-types.d.ts +3 -0
- package/dist/core/context-types.d.ts.map +1 -0
- package/dist/core/context-types.js +18 -0
- package/dist/core/context-types.js.map +1 -0
- package/dist/core/dataset-generator.d.ts +135 -0
- package/dist/core/dataset-generator.d.ts.map +1 -0
- package/dist/core/dataset-generator.js +895 -0
- package/dist/core/dataset-generator.js.map +1 -0
- package/dist/core/eliza1-benchmark-recipe.d.ts +18 -0
- package/dist/core/eliza1-benchmark-recipe.d.ts.map +1 -0
- package/dist/core/eliza1-benchmark-recipe.js +64 -0
- package/dist/core/eliza1-benchmark-recipe.js.map +1 -0
- package/dist/core/eliza1-bundle-stager.d.ts +57 -0
- package/dist/core/eliza1-bundle-stager.d.ts.map +1 -0
- package/dist/core/eliza1-bundle-stager.js +149 -0
- package/dist/core/eliza1-bundle-stager.js.map +1 -0
- package/dist/core/ensure-cron-job.d.ts +53 -0
- package/dist/core/ensure-cron-job.d.ts.map +1 -0
- package/dist/core/ensure-cron-job.js +51 -0
- package/dist/core/ensure-cron-job.js.map +1 -0
- package/dist/core/eval-comparison-artifact.d.ts +72 -0
- package/dist/core/eval-comparison-artifact.d.ts.map +1 -0
- package/dist/core/eval-comparison-artifact.js +281 -0
- package/dist/core/eval-comparison-artifact.js.map +1 -0
- package/dist/core/feed-generation-runner.d.ts +37 -0
- package/dist/core/feed-generation-runner.d.ts.map +1 -0
- package/dist/core/feed-generation-runner.js +232 -0
- package/dist/core/feed-generation-runner.js.map +1 -0
- package/dist/core/html-escape.d.ts +5 -0
- package/dist/core/html-escape.d.ts.map +1 -0
- package/dist/core/html-escape.js +11 -0
- package/dist/core/html-escape.js.map +1 -0
- package/dist/core/huggingface-dataset-ingest.d.ts +52 -0
- package/dist/core/huggingface-dataset-ingest.d.ts.map +1 -0
- package/dist/core/huggingface-dataset-ingest.js +134 -0
- package/dist/core/huggingface-dataset-ingest.js.map +1 -0
- package/dist/core/index.d.ts +29 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +204 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/privacy-filter.d.ts +95 -0
- package/dist/core/privacy-filter.d.ts.map +1 -0
- package/dist/core/privacy-filter.js +324 -0
- package/dist/core/privacy-filter.js.map +1 -0
- package/dist/core/promotion-gate.d.ts +117 -0
- package/dist/core/promotion-gate.d.ts.map +1 -0
- package/dist/core/promotion-gate.js +85 -0
- package/dist/core/promotion-gate.js.map +1 -0
- package/dist/core/promotion-persist.d.ts +116 -0
- package/dist/core/promotion-persist.d.ts.map +1 -0
- package/dist/core/promotion-persist.js +93 -0
- package/dist/core/promotion-persist.js.map +1 -0
- package/dist/core/prompt-compare.d.ts +99 -0
- package/dist/core/prompt-compare.d.ts.map +1 -0
- package/dist/core/prompt-compare.js +210 -0
- package/dist/core/prompt-compare.js.map +1 -0
- package/dist/core/replay-validator.d.ts +136 -0
- package/dist/core/replay-validator.d.ts.map +1 -0
- package/dist/core/replay-validator.js +312 -0
- package/dist/core/replay-validator.js.map +1 -0
- package/dist/core/roleplay-executor.d.ts +123 -0
- package/dist/core/roleplay-executor.d.ts.map +1 -0
- package/dist/core/roleplay-executor.js +675 -0
- package/dist/core/roleplay-executor.js.map +1 -0
- package/dist/core/roleplay-trajectories.d.ts +54 -0
- package/dist/core/roleplay-trajectories.d.ts.map +1 -0
- package/dist/core/roleplay-trajectories.js +88 -0
- package/dist/core/roleplay-trajectories.js.map +1 -0
- package/dist/core/scenario-blueprints.d.ts +62 -0
- package/dist/core/scenario-blueprints.d.ts.map +1 -0
- package/dist/core/scenario-blueprints.js +850 -0
- package/dist/core/scenario-blueprints.js.map +1 -0
- package/dist/core/scenario-runner.d.ts +36 -0
- package/dist/core/scenario-runner.d.ts.map +1 -0
- package/dist/core/scenario-runner.js +216 -0
- package/dist/core/scenario-runner.js.map +1 -0
- package/dist/core/skill-scoring-cron.d.ts +57 -0
- package/dist/core/skill-scoring-cron.d.ts.map +1 -0
- package/dist/core/skill-scoring-cron.js +180 -0
- package/dist/core/skill-scoring-cron.js.map +1 -0
- package/dist/core/test-trajectory-collector.d.ts +37 -0
- package/dist/core/test-trajectory-collector.d.ts.map +1 -0
- package/dist/core/test-trajectory-collector.js +225 -0
- package/dist/core/test-trajectory-collector.js.map +1 -0
- package/dist/core/track-c-queue-task.d.ts +37 -0
- package/dist/core/track-c-queue-task.d.ts.map +1 -0
- package/dist/core/track-c-queue-task.js +104 -0
- package/dist/core/track-c-queue-task.js.map +1 -0
- package/dist/core/training-analysis-index.d.ts +104 -0
- package/dist/core/training-analysis-index.d.ts.map +1 -0
- package/dist/core/training-analysis-index.js +3297 -0
- package/dist/core/training-analysis-index.js.map +1 -0
- package/dist/core/training-collection-runner.d.ts +508 -0
- package/dist/core/training-collection-runner.d.ts.map +1 -0
- package/dist/core/training-collection-runner.js +2299 -0
- package/dist/core/training-collection-runner.js.map +1 -0
- package/dist/core/training-config.d.ts +52 -0
- package/dist/core/training-config.d.ts.map +1 -0
- package/dist/core/training-config.js +117 -0
- package/dist/core/training-config.js.map +1 -0
- package/dist/core/training-orchestrator.d.ts +112 -0
- package/dist/core/training-orchestrator.d.ts.map +1 -0
- package/dist/core/training-orchestrator.js +729 -0
- package/dist/core/training-orchestrator.js.map +1 -0
- package/dist/core/training-readiness-report.d.ts +52 -0
- package/dist/core/training-readiness-report.d.ts.map +1 -0
- package/dist/core/training-readiness-report.js +765 -0
- package/dist/core/training-readiness-report.js.map +1 -0
- package/dist/core/trajectory-consumer.d.ts +15 -0
- package/dist/core/trajectory-consumer.d.ts.map +1 -0
- package/dist/core/trajectory-consumer.js +61 -0
- package/dist/core/trajectory-consumer.js.map +1 -0
- package/dist/core/trajectory-export-bundle.d.ts +95 -0
- package/dist/core/trajectory-export-bundle.d.ts.map +1 -0
- package/dist/core/trajectory-export-bundle.js +561 -0
- package/dist/core/trajectory-export-bundle.js.map +1 -0
- package/dist/core/trajectory-export-cron.d.ts +57 -0
- package/dist/core/trajectory-export-cron.d.ts.map +1 -0
- package/dist/core/trajectory-export-cron.js +170 -0
- package/dist/core/trajectory-export-cron.js.map +1 -0
- package/dist/core/trajectory-hf-upload.d.ts +50 -0
- package/dist/core/trajectory-hf-upload.d.ts.map +1 -0
- package/dist/core/trajectory-hf-upload.js +111 -0
- package/dist/core/trajectory-hf-upload.js.map +1 -0
- package/dist/core/trajectory-task-datasets.d.ts +62 -0
- package/dist/core/trajectory-task-datasets.d.ts.map +1 -0
- package/dist/core/trajectory-task-datasets.js +427 -0
- package/dist/core/trajectory-task-datasets.js.map +1 -0
- package/dist/core/wait-for-service.d.ts +25 -0
- package/dist/core/wait-for-service.d.ts.map +1 -0
- package/dist/core/wait-for-service.js +19 -0
- package/dist/core/wait-for-service.js.map +1 -0
- package/dist/core/workspace-runtime.d.ts +4 -0
- package/dist/core/workspace-runtime.d.ts.map +1 -0
- package/dist/core/workspace-runtime.js +25 -0
- package/dist/core/workspace-runtime.js.map +1 -0
- package/dist/dspy/artifact.d.ts +54 -0
- package/dist/dspy/artifact.d.ts.map +1 -0
- package/dist/dspy/artifact.js +61 -0
- package/dist/dspy/artifact.js.map +1 -0
- package/dist/dspy/chain-of-thought.d.ts +27 -0
- package/dist/dspy/chain-of-thought.d.ts.map +1 -0
- package/dist/dspy/chain-of-thought.js +43 -0
- package/dist/dspy/chain-of-thought.js.map +1 -0
- package/dist/dspy/examples.d.ts +72 -0
- package/dist/dspy/examples.d.ts.map +1 -0
- package/dist/dspy/examples.js +105 -0
- package/dist/dspy/examples.js.map +1 -0
- package/dist/dspy/index.d.ts +15 -0
- package/dist/dspy/index.d.ts.map +1 -0
- package/dist/dspy/index.js +40 -0
- package/dist/dspy/index.js.map +1 -0
- package/dist/dspy/lm-adapter.d.ts +100 -0
- package/dist/dspy/lm-adapter.d.ts.map +1 -0
- package/dist/dspy/lm-adapter.js +81 -0
- package/dist/dspy/lm-adapter.js.map +1 -0
- package/dist/dspy/optimizers/dspy-bootstrap-fewshot.d.ts +23 -0
- package/dist/dspy/optimizers/dspy-bootstrap-fewshot.d.ts.map +1 -0
- package/dist/dspy/optimizers/dspy-bootstrap-fewshot.js +85 -0
- package/dist/dspy/optimizers/dspy-bootstrap-fewshot.js.map +1 -0
- package/dist/dspy/optimizers/dspy-copro.d.ts +29 -0
- package/dist/dspy/optimizers/dspy-copro.d.ts.map +1 -0
- package/dist/dspy/optimizers/dspy-copro.js +141 -0
- package/dist/dspy/optimizers/dspy-copro.js.map +1 -0
- package/dist/dspy/optimizers/dspy-mipro.d.ts +37 -0
- package/dist/dspy/optimizers/dspy-mipro.d.ts.map +1 -0
- package/dist/dspy/optimizers/dspy-mipro.js +194 -0
- package/dist/dspy/optimizers/dspy-mipro.js.map +1 -0
- package/dist/dspy/optimizers/index.d.ts +5 -0
- package/dist/dspy/optimizers/index.d.ts.map +1 -0
- package/dist/dspy/optimizers/index.js +11 -0
- package/dist/dspy/optimizers/index.js.map +1 -0
- package/dist/dspy/optimizers/types.d.ts +39 -0
- package/dist/dspy/optimizers/types.d.ts.map +1 -0
- package/dist/dspy/optimizers/types.js +1 -0
- package/dist/dspy/optimizers/types.js.map +1 -0
- package/dist/dspy/predict.d.ts +49 -0
- package/dist/dspy/predict.d.ts.map +1 -0
- package/dist/dspy/predict.js +73 -0
- package/dist/dspy/predict.js.map +1 -0
- package/dist/dspy/signature.d.ts +88 -0
- package/dist/dspy/signature.d.ts.map +1 -0
- package/dist/dspy/signature.js +205 -0
- package/dist/dspy/signature.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/optimizers/bootstrap-fewshot.d.ts +42 -0
- package/dist/optimizers/bootstrap-fewshot.d.ts.map +1 -0
- package/dist/optimizers/bootstrap-fewshot.js +92 -0
- package/dist/optimizers/bootstrap-fewshot.js.map +1 -0
- package/dist/optimizers/gepa.d.ts +63 -0
- package/dist/optimizers/gepa.d.ts.map +1 -0
- package/dist/optimizers/gepa.js +232 -0
- package/dist/optimizers/gepa.js.map +1 -0
- package/dist/optimizers/index.d.ts +7 -0
- package/dist/optimizers/index.d.ts.map +1 -0
- package/dist/optimizers/index.js +51 -0
- package/dist/optimizers/index.js.map +1 -0
- package/dist/optimizers/instruction-search.d.ts +39 -0
- package/dist/optimizers/instruction-search.d.ts.map +1 -0
- package/dist/optimizers/instruction-search.js +108 -0
- package/dist/optimizers/instruction-search.js.map +1 -0
- package/dist/optimizers/prompt-evolution.d.ts +39 -0
- package/dist/optimizers/prompt-evolution.d.ts.map +1 -0
- package/dist/optimizers/prompt-evolution.js +101 -0
- package/dist/optimizers/prompt-evolution.js.map +1 -0
- package/dist/optimizers/scoring.d.ts +139 -0
- package/dist/optimizers/scoring.d.ts.map +1 -0
- package/dist/optimizers/scoring.js +299 -0
- package/dist/optimizers/scoring.js.map +1 -0
- package/dist/optimizers/types.d.ts +105 -0
- package/dist/optimizers/types.d.ts.map +1 -0
- package/dist/optimizers/types.js +1 -0
- package/dist/optimizers/types.js.map +1 -0
- package/dist/register-runtime.d.ts +3 -0
- package/dist/register-runtime.d.ts.map +1 -0
- package/dist/register-runtime.js +60 -0
- package/dist/register-runtime.js.map +1 -0
- package/dist/register-terminal-view.d.ts +15 -0
- package/dist/register-terminal-view.d.ts.map +1 -0
- package/dist/register-terminal-view.js +31 -0
- package/dist/register-terminal-view.js.map +1 -0
- package/dist/routes/experience-routes.d.ts +21 -0
- package/dist/routes/experience-routes.d.ts.map +1 -0
- package/dist/routes/experience-routes.js +513 -0
- package/dist/routes/experience-routes.js.map +1 -0
- package/dist/routes/index.d.ts +5 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +17 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/training-routes.d.ts +10 -0
- package/dist/routes/training-routes.d.ts.map +1 -0
- package/dist/routes/training-routes.js +1239 -0
- package/dist/routes/training-routes.js.map +1 -0
- package/dist/routes/training-vast-routes.d.ts +35 -0
- package/dist/routes/training-vast-routes.d.ts.map +1 -0
- package/dist/routes/training-vast-routes.js +249 -0
- package/dist/routes/training-vast-routes.js.map +1 -0
- package/dist/routes/trajectory-routes.d.ts +19 -0
- package/dist/routes/trajectory-routes.d.ts.map +1 -0
- package/dist/routes/trajectory-routes.js +1122 -0
- package/dist/routes/trajectory-routes.js.map +1 -0
- package/dist/services/index.d.ts +9 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +63 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/training-backend-check.d.ts +8 -0
- package/dist/services/training-backend-check.d.ts.map +1 -0
- package/dist/services/training-backend-check.js +31 -0
- package/dist/services/training-backend-check.js.map +1 -0
- package/dist/services/training-service-like.d.ts +40 -0
- package/dist/services/training-service-like.d.ts.map +1 -0
- package/dist/services/training-service-like.js +1 -0
- package/dist/services/training-service-like.js.map +1 -0
- package/dist/services/training-service-registry.d.ts +4 -0
- package/dist/services/training-service-registry.d.ts.map +1 -0
- package/dist/services/training-service-registry.js +12 -0
- package/dist/services/training-service-registry.js.map +1 -0
- package/dist/services/training-service.d.ts +59 -0
- package/dist/services/training-service.d.ts.map +1 -0
- package/dist/services/training-service.js +154 -0
- package/dist/services/training-service.js.map +1 -0
- package/dist/services/training-trigger.d.ts +177 -0
- package/dist/services/training-trigger.d.ts.map +1 -0
- package/dist/services/training-trigger.js +300 -0
- package/dist/services/training-trigger.js.map +1 -0
- package/dist/services/training-vast-service.d.ts +149 -0
- package/dist/services/training-vast-service.d.ts.map +1 -0
- package/dist/services/training-vast-service.js +648 -0
- package/dist/services/training-vast-service.js.map +1 -0
- package/dist/services/vast-inference-stats.d.ts +37 -0
- package/dist/services/vast-inference-stats.d.ts.map +1 -0
- package/dist/services/vast-inference-stats.js +81 -0
- package/dist/services/vast-inference-stats.js.map +1 -0
- package/dist/services/vast-job-store.d.ts +74 -0
- package/dist/services/vast-job-store.d.ts.map +1 -0
- package/dist/services/vast-job-store.js +194 -0
- package/dist/services/vast-job-store.js.map +1 -0
- package/dist/services/vast-subprocess.d.ts +27 -0
- package/dist/services/vast-subprocess.d.ts.map +1 -0
- package/dist/services/vast-subprocess.js +78 -0
- package/dist/services/vast-subprocess.js.map +1 -0
- package/dist/setup-routes.d.ts +17 -0
- package/dist/setup-routes.d.ts.map +1 -0
- package/dist/setup-routes.js +319 -0
- package/dist/setup-routes.js.map +1 -0
- package/dist/ui/FineTuningSpatialView.d.ts +49 -0
- package/dist/ui/FineTuningSpatialView.d.ts.map +1 -0
- package/dist/ui/FineTuningSpatialView.js +154 -0
- package/dist/ui/FineTuningSpatialView.js.map +1 -0
- package/dist/ui/FineTuningView.d.ts +7 -0
- package/dist/ui/FineTuningView.d.ts.map +1 -0
- package/dist/ui/FineTuningView.helpers.d.ts +17 -0
- package/dist/ui/FineTuningView.helpers.d.ts.map +1 -0
- package/dist/ui/FineTuningView.helpers.js +30 -0
- package/dist/ui/FineTuningView.helpers.js.map +1 -0
- package/dist/ui/FineTuningView.interact.d.ts +2 -0
- package/dist/ui/FineTuningView.interact.d.ts.map +1 -0
- package/dist/ui/FineTuningView.interact.js +300 -0
- package/dist/ui/FineTuningView.interact.js.map +1 -0
- package/dist/ui/FineTuningView.js +4653 -0
- package/dist/ui/FineTuningView.js.map +1 -0
- package/dist/ui/fine-tuning-panels.d.ts +100 -0
- package/dist/ui/fine-tuning-panels.d.ts.map +1 -0
- package/dist/ui/fine-tuning-panels.helpers.d.ts +19 -0
- package/dist/ui/fine-tuning-panels.helpers.d.ts.map +1 -0
- package/dist/ui/fine-tuning-panels.helpers.js +77 -0
- package/dist/ui/fine-tuning-panels.helpers.js.map +1 -0
- package/dist/ui/fine-tuning-panels.js +928 -0
- package/dist/ui/fine-tuning-panels.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +5 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/training-view-bundle.d.ts +3 -0
- package/dist/ui/training-view-bundle.d.ts.map +1 -0
- package/dist/ui/training-view-bundle.js +7 -0
- package/dist/ui/training-view-bundle.js.map +1 -0
- package/dist/views/bundle.js +5312 -0
- package/dist/views/bundle.js.map +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/training-orchestrator.ts"],"sourcesContent":["/**\n * training-trigger orchestrator.\n *\n * Single entry point for all paths that kick off a training run:\n * - threshold: TrainingTriggerService fires when the per-task counter passes\n * the configured threshold.\n * - cron: Scheduled job (e.g. nightly trajectory-export cron) calls\n * with `source: 'cron'`.\n * - manual: UI / CLI / API caller asks for an immediate run.\n *\n * Pipeline:\n * 1. Fetch the most recent matching trajectories from the runtime's\n * trajectory service.\n * 2. Run them through the privacy filter (REQUIRED — never bypass).\n * 3. Bucket trajectories into per-task JSONL files via dataset-generator\n * (`exportTrajectoryTaskDatasets`). When `task` is supplied, only that\n * bucket is forwarded to the backend.\n * 4. Dispatch the chosen task's dataset to the configured backend\n * (`native`).\n * 5. Persist a run record at `<state>/training/runs/<runId>.json`.\n */\n\nimport { existsSync } from \"node:fs\";\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { Trajectory } from \"@elizaos/agent\";\nimport {\n type AnonymizerLookup,\n applyPrivacyFilter,\n type FilterableTrajectory,\n} from \"./privacy-filter.js\";\nimport {\n gatedPersistNativeResult,\n type PromotionServiceLike,\n} from \"./promotion-persist.js\";\nimport {\n ALL_TRAINING_TASKS,\n loadTrainingConfig,\n resolveTaskPolicy,\n type TrainingBackend,\n type TrainingConfig,\n trainingStateRoot,\n} from \"./training-config.js\";\nimport {\n exportTrajectoryTaskDatasets,\n type TrajectoryTaskDatasetExport,\n type TrajectoryTrainingTask,\n} from \"./trajectory-task-datasets.js\";\n\ninterface MinimalLogger {\n info: (message: string) => void;\n warn: (message: string) => void;\n error: (message: string) => void;\n}\n\ninterface RuntimeLike {\n getService: (name: string) => unknown;\n logger?: MinimalLogger;\n}\n\ninterface TrajectoryServiceLike {\n listTrajectories: (options: {\n limit?: number;\n }) => Promise<{ trajectories: Array<{ id: string }> }>;\n getTrajectoryDetail: (id: string) => Promise<ExportableTrajectory | null>;\n}\n\ntype ExportableTrajectory = Trajectory & FilterableTrajectory;\n\nexport type TriggerSource = \"threshold\" | \"cron\" | \"manual\";\n\nexport type TrainingRunStatus =\n | \"queued\"\n | \"running\"\n | \"succeeded\"\n | \"failed\"\n | \"skipped\";\n\nexport interface TriggerTrainingOptions {\n task?: TrajectoryTrainingTask;\n backend?: TrainingBackend;\n source: TriggerSource;\n /** When true, run the full pipeline up to dispatch but do not invoke the backend. */\n dryRun?: boolean;\n /** Maximum trajectories pulled from the trajectory service. */\n trajectoryLimit?: number;\n /** Optional anonymizer for the privacy filter. */\n anonymizer?: AnonymizerLookup;\n /**\n * Backend dispatcher override — primarily for tests. Production callers\n * should leave this undefined and let the orchestrator route by name.\n */\n dispatcher?: BackendDispatcher;\n /** Override the loaded config (tests). */\n config?: TrainingConfig;\n}\n\nexport interface TriggerTrainingResult {\n runId: string;\n status: TrainingRunStatus;\n reason?: string;\n task: TrajectoryTrainingTask | null;\n backend: TrainingBackend | null;\n source: TriggerSource;\n datasetSize: number;\n startedAt: string;\n finishedAt: string;\n artifactPath?: string;\n}\n\nexport interface TrainingRunRecord extends TriggerTrainingResult {\n pulledTrajectories: number;\n filteredTrajectories: number;\n redactionCount: number;\n anonymizationCount: number;\n datasetPaths?: TrajectoryTaskDatasetExport[\"paths\"];\n perTaskCounts?: TrajectoryTaskDatasetExport[\"counts\"];\n dryRun: boolean;\n notes?: string[];\n}\n\nexport interface BackendDispatchInput {\n task: TrajectoryTrainingTask;\n backend: TrainingBackend;\n datasetPath: string;\n runId: string;\n outputDir: string;\n /**\n * Runtime forwarded to backends that need an LLM (currently only `native`).\n * Other backends ignore it.\n */\n runtime: RuntimeLike;\n}\n\nexport interface BackendDispatchResult {\n invoked: boolean;\n artifactPath?: string;\n notes?: string[];\n}\n\nexport type BackendDispatcher = (\n input: BackendDispatchInput,\n) => Promise<BackendDispatchResult>;\n\nfunction runsDir(): string {\n return join(trainingStateRoot(), \"runs\");\n}\n\nfunction newRunId(): string {\n return `run-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nconst PLANNER_BASELINE = `task: Plan the next native tool calls for the current ContextObject.\n\ncontext_object:\n{{contextObject}}\n\ntrajectory:\n{{trajectory}}\n\nrules:\n- use only tools exposed in the current context object\n- plan the smallest grounded queue of useful tool calls\n- include arguments only when grounded in the user request or prior tool results\n- if the task is complete or the only next step is speaking to the user, return no toolCalls and set messageToUser\n- do not invent tool names, connector names, providers, ids, or benchmark ids\n\nreturn:\nJSON object only. No markdown, no prose, no XML, no legacy formats.`;\n\nconst SHOULD_RESPOND_BASELINE = `task: Decide whether the agent should respond to the current conversation turn.\n\ncontext_object:\n{{contextObject}}\n\ntrajectory:\n{{trajectory}}\n\nrules:\n- choose respond when the user directly addresses the agent, asks for help, or the agent has a useful next action\n- choose ignore for ambient chatter, messages clearly meant for someone else, or turns where responding would add noise\n- choose stop when the conversation is complete or the user asks the agent to stop\n- ground the decision in the provided context and trajectory only\n\nreturn:\nJSON object only with decision (\"respond\" | \"ignore\" | \"stop\") and concise reasoning.`;\n\nconst CONTEXT_ROUTING_BASELINE = `task: Route the current turn to the smallest useful execution context.\n\ncontext_object:\n{{contextObject}}\n\ntrajectory:\n{{trajectory}}\n\nrules:\n- classify whether the turn needs ordinary reply generation, tool planning, memory/context lookup, media analysis, or no action\n- prefer the narrowest context that can satisfy the user request\n- do not invent capabilities that are absent from the context object\n- if the current context is sufficient for a direct answer, keep routing simple\n\nreturn:\nJSON object only with context, requiresTool, candidateAction when grounded, and concise reasoning.`;\n\nconst RESPONSE_BASELINE = `task: Write the final user-facing response for the current turn.\n\ncontext_object:\n{{contextObject}}\n\ntrajectory:\n{{trajectory}}\n\nrules:\n- answer directly using the available trajectory and context\n- include relevant tool outputs or results instead of describing that tools were run\n- be concise, concrete, and honest about any missing or failed evidence\n- do not promise background work after this response\n- do not include private chain-of-thought or implementation-only notes\n\nreturn:\nNatural language response text only.`;\n\nconst MEDIA_DESCRIPTION_BASELINE = `task: Describe the supplied media for downstream agent reasoning.\n\ncontext_object:\n{{contextObject}}\n\ntrajectory:\n{{trajectory}}\n\nrules:\n- identify visible subjects, text, layout, actions, and notable details\n- separate direct observations from uncertain inferences\n- mention safety-relevant, UI-relevant, or task-relevant details when present\n- avoid guessing identities or hidden intent without evidence\n\nreturn:\nJSON object only with summary, observations, text, uncertainty, and taskRelevantDetails.`;\n\nconst VIEW_CONTEXT_BASELINE = `task: Infer which app view fits the user's current situation when they did not name one.\n\ncontext_object:\n{{contextObject}}\n\ntrajectory:\n{{trajectory}}\n\nrules:\n- only choose a view when the message clearly implies an activity that maps to one (e.g. coding work → task-coordinator, scheduling → calendar, spending → finances)\n- return \"none\" when the message names a view directly (the navigation action handles those) or implies no specific surface\n- never guess; ambiguous or chit-chat turns return \"none\"\n\nreturn:\nJSON object only with viewId (a registered view id or \"none\") and an optional reason.`;\n\n// -----------------------------------------------------------------------------\n// LifeOps per-capability fallback baselines (#8795). The optimizer prefers the\n// live exported prompt template from the owning plugin via `loadBaselineForTask`\n// below; these strings remain as last-resort fallbacks for stripped-down\n// training installs where the LifeOps plugins are unavailable.\n// -----------------------------------------------------------------------------\n\nconst CALENDAR_EXTRACT_BASELINE = `task: Extract a structured calendar event from a natural-language request.\n\nrequest:\n{{request}}\n\nrules:\n- resolve relative dates/times against the owner's current local time\n- infer end time from a stated duration; default to a 30-minute event when none is given\n- only include attendees explicitly named in the request\n\nreturn:\nJSON object only: { title, start (ISO 8601), end (ISO 8601), recurrence (RRULE or null), attendees (array), location (string or null) }.`;\n\nconst SCHEDULE_PLAN_BASELINE = `task: Order the owner's pending commitments into a concrete plan for the available time.\n\ncommitments:\n{{commitments}}\n\nfree_slots:\n{{freeSlots}}\n\nrules:\n- never double-book a slot; respect hard deadlines and fixed-time events first\n- keep travel/buffer time between location-bound items\n- surface anything that does not fit rather than silently dropping it\n\nreturn:\nJSON object only: { schedule: [{ itemId, start, end }], unplaced: [itemId], notes }.`;\n\nconst REMINDER_DISPATCH_BASELINE = `task: Decide whether to fire a reminder now and compose its message.\n\nreminder:\n{{reminder}}\n\ncontext:\n{{context}}\n\nrules:\n- only fire when the trigger condition is met; otherwise return shouldFire false\n- write a short, specific message in the owner's voice; no filler\n- escalate channel only when the reminder is overdue or marked urgent\n\nreturn:\nJSON object only: { shouldFire (boolean), channel, message }.`;\n\nconst INBOX_TRIAGE_BASELINE = `task: Classify one inbox message for the owner.\n\nmessage:\n{{message}}\n\nrules:\n- category must be one of ignore, info, notify, needs_reply, urgent\n- urgency must be low, medium, or high\n- use needs_reply when someone asks a question or expects a response\n- use urgent only for time-sensitive or critical owner attention\n\nreturn:\nJSON object only: { category, urgency, confidence, reasoning, suggestedResponse }.`;\n\nconst MEETING_PREP_BASELINE = `task: Produce a concise prebrief for an upcoming meeting.\n\nmeeting:\n{{meeting}}\n\ncontext:\n{{context}}\n\nrules:\n- lead with the meeting's purpose and the owner's desired outcome\n- include only attendees and prior-thread facts that matter for this meeting\n- keep talking points actionable; no generic advice\n\nreturn:\nJSON object only: { purpose, attendees: [{ name, note }], agenda: [string], talkingPoints: [string] }.`;\n\nconst MORNING_BRIEF_BASELINE = `task: Compose the owner's morning brief.\n\ncalendar:\n{{calendar}}\n\ntasks:\n{{tasks}}\n\ninbox:\n{{inbox}}\n\nrules:\n- lead with the single most important thing for the day\n- group by calendar, then must-do tasks, then inbox items needing a reply\n- be brief and scannable; no greetings or filler\n\nreturn:\nMarkdown brief only.`;\n\nconst HEALTH_CHECKIN_BASELINE = `task: Generate a health/sleep check-in for the owner.\n\nsignals:\n{{signals}}\n\nrules:\n- ground every observation in a provided signal; never fabricate metrics\n- ask at most one follow-up question, and only when a signal is missing or anomalous\n- keep an encouraging, non-clinical tone\n\nreturn:\nJSON object only: { observation, question (string or null), suggestion }.`;\n\nconst SCREENTIME_RECAP_BASELINE = `task: Summarize the owner's screen-time and propose a focus adjustment.\n\nusage:\n{{usage}}\n\nrules:\n- highlight the largest changes vs. the prior period, not raw totals alone\n- tie any suggestion to an actual usage pattern in the data\n- propose at most one concrete blocker/focus change\n\nreturn:\nJSON object only: { recap, topApps: [{ app, minutes }], suggestion }.`;\n\nfunction defaultBaselineForTask(task: TrajectoryTrainingTask): string {\n switch (task) {\n case \"should_respond\":\n return SHOULD_RESPOND_BASELINE;\n case \"context_routing\":\n return CONTEXT_ROUTING_BASELINE;\n case \"action_planner\":\n return PLANNER_BASELINE;\n case \"response\":\n return RESPONSE_BASELINE;\n case \"media_description\":\n return MEDIA_DESCRIPTION_BASELINE;\n case \"view_context\":\n return VIEW_CONTEXT_BASELINE;\n case \"calendar_extract\":\n return CALENDAR_EXTRACT_BASELINE;\n case \"schedule_plan\":\n return SCHEDULE_PLAN_BASELINE;\n case \"reminder_dispatch\":\n return REMINDER_DISPATCH_BASELINE;\n case \"inbox_triage\":\n return INBOX_TRIAGE_BASELINE;\n case \"meeting_prep\":\n return MEETING_PREP_BASELINE;\n case \"morning_brief\":\n return MORNING_BRIEF_BASELINE;\n case \"health_checkin\":\n return HEALTH_CHECKIN_BASELINE;\n case \"screentime_recap\":\n return SCREENTIME_RECAP_BASELINE;\n }\n}\n\nfunction firstStringExport(\n promptModule: Record<string, unknown>,\n names: readonly string[],\n): string | null {\n for (const name of names) {\n const value = promptModule[name];\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value;\n }\n if (\n Array.isArray(value) &&\n value.every((entry) => typeof entry === \"string\")\n ) {\n const joined = value.join(\"\\n\").trim();\n if (joined.length > 0) {\n return joined;\n }\n }\n }\n return null;\n}\n\nasync function importOptionalModule(\n specifier: string,\n): Promise<Record<string, unknown> | null> {\n try {\n const imported = await import(specifier);\n return imported as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\nasync function loadFirstStringExport(\n specifier: string,\n names: readonly string[],\n sourceSpecifier?: string,\n): Promise<string | null> {\n if (sourceSpecifier) {\n const sourceUrl = new URL(sourceSpecifier, import.meta.url);\n const sourceModule = await importOptionalModule(sourceUrl.href);\n const sourceExported = sourceModule\n ? firstStringExport(sourceModule, names)\n : null;\n if (sourceExported) {\n return sourceExported;\n }\n }\n const promptModule = await importOptionalModule(specifier);\n return promptModule ? firstStringExport(promptModule, names) : null;\n}\n\nasync function loadLiveLifeOpsBaseline(\n task: TrajectoryTrainingTask,\n): Promise<string | null> {\n switch (task) {\n case \"calendar_extract\":\n return loadFirstStringExport(\n \"@elizaos/plugin-calendar/actions/optimized-prompt-instructions\",\n [\"CALENDAR_PLAN_INSTRUCTIONS\"],\n \"../../../plugin-calendar/src/actions/optimized-prompt-instructions.ts\",\n );\n case \"schedule_plan\":\n return loadFirstStringExport(\n \"@elizaos/plugin-personal-assistant/lifeops/optimized-prompt-instructions\",\n [\"SCHEDULE_PLAN_INSTRUCTIONS\"],\n \"../../../plugin-personal-assistant/src/lifeops/optimized-prompt-instructions.ts\",\n );\n case \"reminder_dispatch\":\n return loadFirstStringExport(\n \"@elizaos/plugin-personal-assistant/lifeops/optimized-prompt-instructions\",\n [\"REMINDER_DISPATCH_INSTRUCTIONS\"],\n \"../../../plugin-personal-assistant/src/lifeops/optimized-prompt-instructions.ts\",\n );\n case \"inbox_triage\":\n return loadFirstStringExport(\n \"@elizaos/plugin-inbox/inbox/triage-classifier\",\n [\"INBOX_TRIAGE_INSTRUCTIONS\"],\n \"../../../plugin-inbox/src/inbox/triage-classifier.ts\",\n );\n case \"meeting_prep\":\n return loadFirstStringExport(\n \"@elizaos/plugin-personal-assistant/lifeops/optimized-prompt-instructions\",\n [\"MEETING_PREP_INSTRUCTIONS\"],\n \"../../../plugin-personal-assistant/src/lifeops/optimized-prompt-instructions.ts\",\n );\n case \"morning_brief\":\n return loadFirstStringExport(\n \"@elizaos/plugin-personal-assistant/lifeops/optimized-prompt-instructions\",\n [\"BRIEF_NARRATIVE_INSTRUCTIONS\"],\n \"../../../plugin-personal-assistant/src/lifeops/optimized-prompt-instructions.ts\",\n );\n case \"health_checkin\":\n return loadFirstStringExport(\n \"@elizaos/plugin-health/actions/optimized-prompt-instructions\",\n [\"HEALTH_PLAN_INSTRUCTIONS\"],\n \"../../../plugin-health/src/actions/optimized-prompt-instructions.ts\",\n );\n case \"screentime_recap\":\n return loadFirstStringExport(\n \"@elizaos/plugin-health/actions/optimized-prompt-instructions\",\n [\"SCREENTIME_RECAP_INSTRUCTIONS\"],\n \"../../../plugin-health/src/actions/optimized-prompt-instructions.ts\",\n );\n default:\n return null;\n }\n}\n\nfunction pathForTask(\n paths: TrajectoryTaskDatasetExport[\"paths\"],\n task: TrajectoryTrainingTask,\n): string {\n switch (task) {\n case \"should_respond\":\n return paths.shouldRespondPath;\n case \"context_routing\":\n return paths.contextRoutingPath;\n case \"action_planner\":\n return paths.actionPlannerPath;\n case \"response\":\n return paths.responsePath;\n case \"media_description\":\n return paths.mediaDescriptionPath;\n case \"view_context\":\n return paths.viewContextPath;\n case \"calendar_extract\":\n return paths.calendarExtractPath;\n case \"schedule_plan\":\n return paths.schedulePlanPath;\n case \"reminder_dispatch\":\n return paths.reminderDispatchPath;\n case \"inbox_triage\":\n return paths.inboxTriagePath;\n case \"meeting_prep\":\n return paths.meetingPrepPath;\n case \"morning_brief\":\n return paths.morningBriefPath;\n case \"health_checkin\":\n return paths.healthCheckinPath;\n case \"screentime_recap\":\n return paths.screentimeRecapPath;\n }\n}\n\nfunction selectTask(\n config: TrainingConfig,\n explicit: TrajectoryTrainingTask | undefined,\n counts: TrajectoryTaskDatasetExport[\"counts\"],\n): TrajectoryTrainingTask | null {\n if (explicit) return explicit;\n let bestTask: TrajectoryTrainingTask | null = null;\n let bestCount = 0;\n for (const task of ALL_TRAINING_TASKS) {\n const policy = resolveTaskPolicy(config, task);\n const count = counts[task];\n if (count > bestCount && count >= policy.threshold) {\n bestCount = count;\n bestTask = task;\n }\n }\n return bestTask;\n}\n\nasync function defaultDispatcher(\n input: BackendDispatchInput,\n): Promise<BackendDispatchResult> {\n switch (input.backend) {\n case \"native\": {\n const { runNativeBackend } = await import(\"../backends/native.js\");\n const useModelHandler = await extractUseModel(input.runtime);\n if (!useModelHandler) {\n return {\n invoked: false,\n notes: [\n \"native backend requires a runtime exposing useModel; skipped\",\n ],\n };\n }\n const baselinePrompt = await loadBaselineForTask(input.task);\n const optimizerName = process.env.TRAIN_OPTIMIZER?.trim() ?? \"gepa\";\n const result = await runNativeBackend({\n datasetPath: input.datasetPath,\n task: input.task,\n optimizer:\n optimizerName as import(\"../optimizers/types.js\").OptimizerName,\n baselinePrompt,\n runtime: { useModel: useModelHandler },\n });\n const notes = [...result.notes];\n if (!result.invoked) {\n return { invoked: false, notes };\n }\n\n const service = getOptimizedPromptService(input.runtime);\n if (!service) {\n notes.push(\n \"OptimizedPromptService unavailable; artifact not persisted\",\n );\n return { invoked: true, notes };\n }\n\n return await gatedPersistNativeResult({\n task: input.task,\n datasetPath: input.datasetPath,\n runId: input.runId,\n baselinePrompt,\n result,\n service,\n notesPrefix: notes,\n });\n }\n }\n}\n\ntype UseModelLike = (input: {\n prompt: string;\n temperature?: number;\n maxTokens?: number;\n}) => Promise<string | object | undefined>;\n\ninterface UseModelRuntime {\n useModel?: (\n modelType: string,\n input: { prompt: string; temperature?: number; maxTokens?: number },\n ) => Promise<string | object | undefined>;\n}\n\nasync function extractUseModel(\n runtime: RuntimeLike,\n): Promise<UseModelLike | null> {\n // Standing direction: training optimizer / variant generation runs on\n // Cerebras gpt-oss-120b, NOT through the agent's primary provider.\n const trainProvider =\n process.env.TRAIN_MODEL_PROVIDER?.trim() ??\n process.env.TRAINING_PROVIDER?.trim();\n if (trainProvider === \"cerebras\") {\n const { getTrainingUseModelAdapter } = await import(\n \"./cerebras-eval-model.js\"\n );\n return getTrainingUseModelAdapter();\n }\n\n const candidate = runtime as RuntimeLike & UseModelRuntime;\n if (typeof candidate.useModel !== \"function\") return null;\n return async (input) => {\n return await candidate.useModel?.(\"TEXT_LARGE\", input);\n };\n}\n\nfunction getOptimizedPromptService(\n runtime: RuntimeLike,\n): PromotionServiceLike | null {\n const service = runtime.getService(\n \"optimized_prompt\",\n ) as PromotionServiceLike | null;\n if (!service || typeof service.setPrompt !== \"function\") return null;\n return service;\n}\n\n/**\n * Pull the live runtime template for the task. Falls back to concrete bundled\n * task baselines when the runtime cannot expose its template.\n */\nexport async function loadBaselineForTask(\n task: TrajectoryTrainingTask,\n): Promise<string> {\n const prompts = await import(\"@elizaos/core\").catch(() => null);\n if (!prompts) {\n return defaultBaselineForTask(task);\n }\n const promptModule = prompts as Record<string, unknown>;\n switch (task) {\n case \"should_respond\":\n return (\n firstStringExport(promptModule, [\n \"shouldRespondTemplate\",\n \"messageHandlerTemplate\",\n ]) ?? defaultBaselineForTask(task)\n );\n case \"context_routing\":\n return (\n firstStringExport(promptModule, [\n \"messageHandlerTemplate\",\n \"shouldRespondTemplate\",\n ]) ?? defaultBaselineForTask(task)\n );\n case \"response\":\n return (\n firstStringExport(promptModule, [\n \"messageHandlerTemplate\",\n \"replyTemplate\",\n ]) ?? defaultBaselineForTask(task)\n );\n case \"action_planner\":\n return (\n firstStringExport(promptModule, [\n \"plannerTemplate\",\n \"PLANNER_TEMPLATE\",\n ]) ?? PLANNER_BASELINE\n );\n case \"media_description\":\n return (\n firstStringExport(promptModule, [\n \"imageDescriptionTemplate\",\n \"IMAGE_DESCRIPTION_TEMPLATE\",\n ]) ?? defaultBaselineForTask(task)\n );\n case \"view_context\":\n // The runtime exposes no core template for the contextual view evaluator;\n // its baseline lives in @elizaos/plugin-app-control. Use the bundled\n // baseline so the optimizer always has a concrete starting prompt.\n return defaultBaselineForTask(task);\n case \"calendar_extract\":\n case \"schedule_plan\":\n case \"reminder_dispatch\":\n case \"inbox_triage\":\n case \"meeting_prep\":\n case \"morning_brief\":\n case \"health_checkin\":\n case \"screentime_recap\": {\n const liveBaseline = await loadLiveLifeOpsBaseline(task);\n return liveBaseline ?? defaultBaselineForTask(task);\n }\n }\n}\n\nexport async function recordRun(record: TrainingRunRecord): Promise<string> {\n const dir = runsDir();\n await mkdir(dir, { recursive: true });\n const path = join(dir, `${record.runId}.json`);\n await writeFile(path, `${JSON.stringify(record, null, 2)}\\n`, \"utf-8\");\n return path;\n}\n\nexport async function loadRun(\n runId: string,\n): Promise<TrainingRunRecord | null> {\n const path = join(runsDir(), `${runId}.json`);\n if (!existsSync(path)) return null;\n const raw = await readFile(path, \"utf-8\");\n return JSON.parse(raw) as TrainingRunRecord;\n}\n\nexport async function listRuns(limit = 20): Promise<TrainingRunRecord[]> {\n const dir = runsDir();\n if (!existsSync(dir)) return [];\n const entries = await readdir(dir);\n const runFiles = entries.filter((name) => name.endsWith(\".json\"));\n // Filenames embed the timestamp prefix `run-<ms>-...` so a reverse\n // lexicographic sort yields newest-first without a stat call.\n runFiles.sort((a, b) => (a < b ? 1 : -1));\n const sliced = runFiles.slice(0, Math.max(0, limit));\n const records: TrainingRunRecord[] = [];\n for (const file of sliced) {\n const raw = await readFile(join(dir, file), \"utf-8\");\n records.push(JSON.parse(raw) as TrainingRunRecord);\n }\n return records;\n}\n\n/**\n * Single entry point for kicking off a training run from any caller.\n *\n * Returns a record describing what happened, including `status: \"skipped\"`\n * when the pipeline ran but the configured backend declined to invoke (no\n * data, no backend configured, unavailable optimizer backend, etc.). Errors are\n * surfaced as `status: \"failed\"` with `reason`; never swallowed.\n */\nexport async function triggerTraining(\n runtime: RuntimeLike,\n options: TriggerTrainingOptions,\n): Promise<TrainingRunRecord> {\n const runId = newRunId();\n const startedAt = nowIso();\n const log: MinimalLogger = runtime.logger ?? {\n info: () => {},\n warn: () => {},\n error: () => {},\n };\n const config = options.config ?? loadTrainingConfig();\n\n const trajectoryService = runtime.getService(\n \"trajectories\",\n ) as TrajectoryServiceLike | null;\n if (\n !trajectoryService ||\n typeof trajectoryService.listTrajectories !== \"function\" ||\n typeof trajectoryService.getTrajectoryDetail !== \"function\"\n ) {\n const finishedAt = nowIso();\n const record: TrainingRunRecord = {\n runId,\n status: \"skipped\",\n reason: \"trajectories service unavailable\",\n task: options.task ?? null,\n backend: options.backend ?? null,\n source: options.source,\n datasetSize: 0,\n startedAt,\n finishedAt,\n pulledTrajectories: 0,\n filteredTrajectories: 0,\n redactionCount: 0,\n anonymizationCount: 0,\n dryRun: options.dryRun ?? false,\n };\n await recordRun(record);\n log.warn(\n `[TrainingOrchestrator] ${runId} skipped: trajectories service unavailable`,\n );\n return record;\n }\n\n const limit = options.trajectoryLimit ?? 500;\n const list = await trajectoryService.listTrajectories({ limit });\n const trajectories: ExportableTrajectory[] = [];\n for (const item of list.trajectories) {\n const detail = await trajectoryService.getTrajectoryDetail(item.id);\n if (detail) trajectories.push(detail);\n }\n\n // Privacy filter is REQUIRED here — the downstream export writes JSONL to\n // disk, and those files must never contain raw user secrets or un-anonymized\n // handles. Filtering happens before any write path below runs.\n const filtered = applyPrivacyFilter(trajectories, {\n anonymizer: options.anonymizer,\n });\n\n const outputDir = join(trainingStateRoot(), \"runs\", runId, \"datasets\");\n await mkdir(outputDir, { recursive: true });\n // privacy filter applied above\n const dataset = await exportTrajectoryTaskDatasets(\n filtered.trajectories as Parameters<typeof exportTrajectoryTaskDatasets>[0],\n outputDir,\n );\n\n const task = selectTask(config, options.task, dataset.counts);\n if (!task) {\n const finishedAt = nowIso();\n const record: TrainingRunRecord = {\n runId,\n status: \"skipped\",\n reason:\n \"no task reached its trigger threshold and none was specified explicitly\",\n task: null,\n backend: options.backend ?? null,\n source: options.source,\n datasetSize: 0,\n startedAt,\n finishedAt,\n pulledTrajectories: trajectories.length,\n filteredTrajectories: filtered.trajectories.length,\n redactionCount: filtered.redactionCount,\n anonymizationCount: filtered.anonymizationCount,\n datasetPaths: dataset.paths,\n perTaskCounts: dataset.counts,\n dryRun: options.dryRun ?? false,\n };\n await recordRun(record);\n log.info(\n `[TrainingOrchestrator] ${runId} skipped: no task selected (counts=${JSON.stringify(dataset.counts)})`,\n );\n return record;\n }\n\n const policy = resolveTaskPolicy(config, task);\n const backend = options.backend ?? policy.backend;\n const datasetPath = pathForTask(dataset.paths, task);\n const datasetSize = dataset.counts[task];\n\n if (!backend) {\n const finishedAt = nowIso();\n const record: TrainingRunRecord = {\n runId,\n status: \"skipped\",\n reason: \"no backend configured\",\n task,\n backend: null,\n source: options.source,\n datasetSize,\n startedAt,\n finishedAt,\n pulledTrajectories: trajectories.length,\n filteredTrajectories: filtered.trajectories.length,\n redactionCount: filtered.redactionCount,\n anonymizationCount: filtered.anonymizationCount,\n datasetPaths: dataset.paths,\n perTaskCounts: dataset.counts,\n dryRun: options.dryRun ?? false,\n notes: [\n \"Set training.backends in <state>/training/config.json to enable dispatch.\",\n ],\n };\n await recordRun(record);\n log.info(\n `[TrainingOrchestrator] ${runId} skipped: no backend configured for task=${task}`,\n );\n return record;\n }\n\n if (options.dryRun) {\n const finishedAt = nowIso();\n const record: TrainingRunRecord = {\n runId,\n status: \"succeeded\",\n reason: \"dry run\",\n task,\n backend,\n source: options.source,\n datasetSize,\n startedAt,\n finishedAt,\n pulledTrajectories: trajectories.length,\n filteredTrajectories: filtered.trajectories.length,\n redactionCount: filtered.redactionCount,\n anonymizationCount: filtered.anonymizationCount,\n datasetPaths: dataset.paths,\n perTaskCounts: dataset.counts,\n dryRun: true,\n notes: [`dry run; would dispatch ${datasetPath} to backend=${backend}`],\n };\n await recordRun(record);\n log.info(\n `[TrainingOrchestrator] ${runId} dry-run task=${task} backend=${backend} datasetSize=${datasetSize}`,\n );\n return record;\n }\n\n const dispatcher = options.dispatcher ?? defaultDispatcher;\n const dispatchResult = await dispatcher({\n task,\n backend,\n datasetPath,\n runId,\n outputDir,\n runtime,\n });\n\n const finishedAt = nowIso();\n const status: TrainingRunStatus = dispatchResult.invoked\n ? \"succeeded\"\n : \"skipped\";\n const record: TrainingRunRecord = {\n runId,\n status,\n reason: dispatchResult.invoked ? undefined : \"backend declined to invoke\",\n task,\n backend,\n source: options.source,\n datasetSize,\n startedAt,\n finishedAt,\n pulledTrajectories: trajectories.length,\n filteredTrajectories: filtered.trajectories.length,\n redactionCount: filtered.redactionCount,\n anonymizationCount: filtered.anonymizationCount,\n datasetPaths: dataset.paths,\n perTaskCounts: dataset.counts,\n artifactPath: dispatchResult.artifactPath,\n dryRun: false,\n notes: dispatchResult.notes,\n };\n await recordRun(record);\n log.info(\n `[TrainingOrchestrator] ${runId} ${status} task=${task} backend=${backend} datasetSize=${datasetSize}`,\n );\n return record;\n}\n"],"mappings":"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","names":["finishedAt","record"]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { TrainingAnalysisIndex } from "./training-analysis-index.js";
|
|
2
|
+
export declare const TRAINING_READINESS_REPORT_SCHEMA = "eliza_training_readiness_report";
|
|
3
|
+
export declare const TRAINING_READINESS_REPORT_VERSION = 1;
|
|
4
|
+
export type TrainingReadinessStatus = "ready" | "partial" | "missing";
|
|
5
|
+
export interface TrainingReadinessCheck {
|
|
6
|
+
id: string;
|
|
7
|
+
label: string;
|
|
8
|
+
status: TrainingReadinessStatus;
|
|
9
|
+
artifactCount: number;
|
|
10
|
+
artifactPaths: string[];
|
|
11
|
+
note: string;
|
|
12
|
+
recommendedAction: TrainingReadinessAction | null;
|
|
13
|
+
}
|
|
14
|
+
export interface TrainingReadinessAction {
|
|
15
|
+
label: string;
|
|
16
|
+
capability: string;
|
|
17
|
+
params: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
export interface TrainingReadinessReport {
|
|
20
|
+
schema: typeof TRAINING_READINESS_REPORT_SCHEMA;
|
|
21
|
+
schemaVersion: typeof TRAINING_READINESS_REPORT_VERSION;
|
|
22
|
+
generatedAt: string;
|
|
23
|
+
outputDir: string;
|
|
24
|
+
reportPath: string;
|
|
25
|
+
analysisManifestPath: string;
|
|
26
|
+
analysisIndexHtmlPath: string;
|
|
27
|
+
status: TrainingReadinessStatus;
|
|
28
|
+
counts: {
|
|
29
|
+
checks: number;
|
|
30
|
+
ready: number;
|
|
31
|
+
partial: number;
|
|
32
|
+
missing: number;
|
|
33
|
+
artifacts: number;
|
|
34
|
+
};
|
|
35
|
+
checks: TrainingReadinessCheck[];
|
|
36
|
+
}
|
|
37
|
+
export interface TrainingReadinessReportResult {
|
|
38
|
+
outputDir: string;
|
|
39
|
+
reportPath: string;
|
|
40
|
+
report: TrainingReadinessReport;
|
|
41
|
+
}
|
|
42
|
+
export declare function buildTrainingReadinessReportPayload(analysis: TrainingAnalysisIndex, options?: {
|
|
43
|
+
generatedAt?: string;
|
|
44
|
+
outputDir?: string;
|
|
45
|
+
reportPath?: string;
|
|
46
|
+
}): TrainingReadinessReport;
|
|
47
|
+
export declare function writeTrainingReadinessReport(analysis: TrainingAnalysisIndex, options?: {
|
|
48
|
+
outputDir?: string;
|
|
49
|
+
reportPath?: string;
|
|
50
|
+
generatedAt?: string;
|
|
51
|
+
}): Promise<TrainingReadinessReportResult>;
|
|
52
|
+
//# sourceMappingURL=training-readiness-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"training-readiness-report.d.ts","sourceRoot":"","sources":["../../src/core/training-readiness-report.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAGV,qBAAqB,EACtB,MAAM,8BAA8B,CAAC;AAEtC,eAAO,MAAM,gCAAgC,oCACV,CAAC;AACpC,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAInD,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtE,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,uBAAuB,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,uBAAuB,GAAG,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,gCAAgC,CAAC;IAChD,aAAa,EAAE,OAAO,iCAAiC,CAAC;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,uBAAuB,CAAC;IAChC,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE,sBAAsB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,uBAAuB,CAAC;CACjC;AA4uBD,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CAChB,GACL,uBAAuB,CA4YzB;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,OAAO,CAAC,6BAA6B,CAAC,CAaxC"}
|