stageflow 0.40.0 → 0.44.0
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/README.md +15 -4
- package/dist/agent/activity.d.ts +18 -0
- package/dist/agent/claudeAdapter.js +7 -0
- package/dist/agent/claudeTools.d.ts +27 -18
- package/dist/agent/claudeTools.js +54 -15
- package/dist/agent/compactionEvents.d.ts +34 -0
- package/dist/agent/compactionEvents.js +37 -0
- package/dist/agent/openRouterRouting.d.ts +7 -0
- package/dist/agent/openRouterRouting.js +23 -0
- package/dist/agent/piAdapter.d.ts +6 -0
- package/dist/agent/piAdapter.js +128 -27
- package/dist/agent/piSettings.d.ts +7 -0
- package/dist/agent/piSettings.js +9 -0
- package/dist/agent/sandboxPiTools.d.ts +3 -1
- package/dist/agent/sandboxPiTools.js +8 -2
- package/dist/agent/stageTurnDriver.d.ts +11 -2
- package/dist/agent/stageTurnDriver.js +45 -4
- package/dist/agent/toolOutputBudget.d.ts +15 -1
- package/dist/agent/toolOutputBudget.js +18 -0
- package/dist/agent/toolOutputBudgetExtension.d.ts +2 -0
- package/dist/agent/toolOutputBudgetExtension.js +40 -3
- package/dist/agents/authorChat.d.ts +5 -0
- package/dist/agents/authorChat.js +120 -12
- package/dist/agents/authorSessionStore.d.ts +38 -0
- package/dist/agents/authorSessionStore.js +167 -0
- package/dist/agents/chatTurn.d.ts +2 -0
- package/dist/agents/chatTurn.js +17 -1
- package/dist/agents/errors.d.ts +1 -1
- package/dist/agents/errors.js +1 -0
- package/dist/agents/evalGate.d.ts +61 -0
- package/dist/agents/evalGate.js +103 -0
- package/dist/agents/evalSession.d.ts +26 -0
- package/dist/agents/evalSession.js +29 -0
- package/dist/agents/hostContext.d.ts +4 -1
- package/dist/agents/hostContext.js +4 -1
- package/dist/agents/runtime/piRuntime.d.ts +6 -2
- package/dist/agents/runtime/piRuntime.js +50 -16
- package/dist/agents/runtime/types.d.ts +3 -1
- package/dist/agents/service.d.ts +27 -2
- package/dist/agents/service.js +91 -15
- package/dist/agents/sessions.d.ts +8 -0
- package/dist/agents/sessions.js +53 -11
- package/dist/agents/store.d.ts +14 -3
- package/dist/agents/store.js +45 -7
- package/dist/agents/toolRisk.d.ts +21 -0
- package/dist/agents/toolRisk.js +50 -0
- package/dist/cli/doctorCommand.js +26 -0
- package/dist/cli/evalCommand.d.ts +20 -0
- package/dist/cli/evalCommand.js +720 -0
- package/dist/cli/exportAllCommand.js +1 -1
- package/dist/cli/hostClient.d.ts +60 -0
- package/dist/cli/hostClient.js +71 -0
- package/dist/cli/validateOutput.d.ts +2 -2
- package/dist/cli/validateOutput.js +2 -2
- package/dist/cli.js +10 -0
- package/dist/compaction/directives.d.ts +18 -0
- package/dist/compaction/directives.js +119 -0
- package/dist/compaction/extension.d.ts +20 -0
- package/dist/compaction/extension.js +78 -0
- package/dist/compaction/mask.d.ts +18 -0
- package/dist/compaction/mask.js +155 -0
- package/dist/compaction/pin.d.ts +21 -0
- package/dist/compaction/pin.js +270 -0
- package/dist/compaction/scrub.d.ts +7 -0
- package/dist/compaction/scrub.js +26 -0
- package/dist/compaction/sessionWiring.d.ts +22 -0
- package/dist/compaction/sessionWiring.js +26 -0
- package/dist/compaction/summarize.d.ts +79 -0
- package/dist/compaction/summarize.js +171 -0
- package/dist/compaction/toolPolicy.d.ts +3 -0
- package/dist/compaction/toolPolicy.js +33 -0
- package/dist/compaction/types.d.ts +45 -0
- package/dist/compaction/types.js +7 -0
- package/dist/compaction/workingState.d.ts +56 -0
- package/dist/compaction/workingState.js +198 -0
- package/dist/config/atomicWrite.d.ts +15 -0
- package/dist/config/atomicWrite.js +43 -0
- package/dist/config/browseCatalog.d.ts +2 -0
- package/dist/config/browseCatalog.js +4 -2
- package/dist/config/createPipeline.js +2 -0
- package/dist/config/createTrigger.js +7 -1
- package/dist/config/csv.d.ts +9 -0
- package/dist/config/csv.js +81 -0
- package/dist/config/datasetAgentCheck.d.ts +18 -0
- package/dist/config/datasetAgentCheck.js +109 -0
- package/dist/config/datasetCandidates.d.ts +22 -0
- package/dist/config/datasetCandidates.js +86 -0
- package/dist/config/datasetFromSessions.d.ts +34 -0
- package/dist/config/datasetFromSessions.js +105 -0
- package/dist/config/datasetHash.d.ts +1 -0
- package/dist/config/datasetHash.js +4 -0
- package/dist/config/datasetImport.d.ts +21 -0
- package/dist/config/datasetImport.js +120 -0
- package/dist/config/datasetStageCheck.d.ts +9 -0
- package/dist/config/datasetStageCheck.js +17 -0
- package/dist/config/datasetTypes.d.ts +27 -0
- package/dist/config/datasetTypes.js +1 -0
- package/dist/config/ensureCatalogScanRoot.d.ts +4 -1
- package/dist/config/ensureCatalogScanRoot.js +8 -6
- package/dist/config/evalCatalog.d.ts +22 -0
- package/dist/config/evalCatalog.js +95 -0
- package/dist/config/evalWriteRoots.d.ts +17 -0
- package/dist/config/evalWriteRoots.js +109 -0
- package/dist/config/githubTriggerAction.d.ts +8 -0
- package/dist/config/githubTriggerAction.js +29 -0
- package/dist/config/hostConfig.js +3 -0
- package/dist/config/installEvalSample.d.ts +34 -0
- package/dist/config/installEvalSample.js +182 -0
- package/dist/config/loadDataset.d.ts +16 -0
- package/dist/config/loadDataset.js +318 -0
- package/dist/config/loadEval.d.ts +32 -0
- package/dist/config/loadEval.js +1103 -0
- package/dist/config/loadOutcome.d.ts +5 -0
- package/dist/config/loadStageflowManifest.js +64 -0
- package/dist/config/pipelineNeeds.d.ts +2 -0
- package/dist/config/pipelineNeeds.js +16 -3
- package/dist/config/pipelineRoute.js +5 -4
- package/dist/config/resolveAgentTarget.d.ts +32 -0
- package/dist/config/resolveAgentTarget.js +118 -0
- package/dist/config/resolveEvalTarget.d.ts +21 -0
- package/dist/config/resolveEvalTarget.js +89 -0
- package/dist/config/scanCatalogPaths.d.ts +1 -1
- package/dist/config/scanCatalogPaths.js +17 -5
- package/dist/config/validateCatalog.d.ts +2 -2
- package/dist/config/validateCatalog.js +21 -1
- package/dist/config/validateEval.d.ts +36 -0
- package/dist/config/validateEval.js +446 -0
- package/dist/config/writeDataset.d.ts +54 -0
- package/dist/config/writeDataset.js +186 -0
- package/dist/config/writeEval.d.ts +25 -0
- package/dist/config/writeEval.js +398 -0
- package/dist/diagnostics/checks.js +1 -1
- package/dist/envelope/assertEmittedArtifacts.d.ts +12 -0
- package/dist/envelope/assertEmittedArtifacts.js +43 -0
- package/dist/envelope/preEmitChecks.d.ts +3 -0
- package/dist/evals/agentDiff.d.ts +13 -0
- package/dist/evals/agentDiff.js +11 -0
- package/dist/evals/canonical.d.ts +3 -0
- package/dist/evals/canonical.js +24 -0
- package/dist/evals/caseTask.d.ts +3 -0
- package/dist/evals/caseTask.js +9 -0
- package/dist/evals/compare.d.ts +94 -0
- package/dist/evals/compare.js +201 -0
- package/dist/evals/constants.d.ts +62 -0
- package/dist/evals/constants.js +97 -0
- package/dist/evals/engine/FakeEngine.d.ts +33 -0
- package/dist/evals/engine/FakeEngine.js +177 -0
- package/dist/evals/engine/index.d.ts +9 -0
- package/dist/evals/engine/index.js +19 -0
- package/dist/evals/engine/promptfoo/PromptfooEngine.d.ts +52 -0
- package/dist/evals/engine/promptfoo/PromptfooEngine.js +312 -0
- package/dist/evals/engine/promptfoo/errors.d.ts +5 -0
- package/dist/evals/engine/promptfoo/errors.js +8 -0
- package/dist/evals/engine/promptfoo/generate.d.ts +30 -0
- package/dist/evals/engine/promptfoo/generate.js +345 -0
- package/dist/evals/engine/promptfoo/guard.d.ts +10 -0
- package/dist/evals/engine/promptfoo/guard.js +116 -0
- package/dist/evals/engine/promptfoo/install.d.ts +17 -0
- package/dist/evals/engine/promptfoo/install.js +73 -0
- package/dist/evals/engine/promptfoo/judgeProviders.d.ts +2 -0
- package/dist/evals/engine/promptfoo/judgeProviders.js +9 -0
- package/dist/evals/engine/promptfoo/judgeServices.d.ts +6 -0
- package/dist/evals/engine/promptfoo/judgeServices.js +41 -0
- package/dist/evals/engine/promptfoo/locate.d.ts +21 -0
- package/dist/evals/engine/promptfoo/locate.js +68 -0
- package/dist/evals/engine/promptfoo/nodeVersion.d.ts +7 -0
- package/dist/evals/engine/promptfoo/nodeVersion.js +14 -0
- package/dist/evals/engine/promptfoo/normalize.d.ts +66 -0
- package/dist/evals/engine/promptfoo/normalize.js +261 -0
- package/dist/evals/engine/promptfoo/pinned.d.ts +5 -0
- package/dist/evals/engine/promptfoo/pinned.js +5 -0
- package/dist/evals/engine/promptfoo/rubricPrompt.d.ts +14 -0
- package/dist/evals/engine/promptfoo/rubricPrompt.js +105 -0
- package/dist/evals/engine/promptfoo/runTokens.d.ts +18 -0
- package/dist/evals/engine/promptfoo/runTokens.js +31 -0
- package/dist/evals/engine/promptfoo/status.d.ts +13 -0
- package/dist/evals/engine/promptfoo/status.js +16 -0
- package/dist/evals/estimate.d.ts +56 -0
- package/dist/evals/estimate.js +66 -0
- package/dist/evals/graders/codeGrader.d.ts +6 -0
- package/dist/evals/graders/codeGrader.js +85 -0
- package/dist/evals/graders/conversationCheckGrader.d.ts +6 -0
- package/dist/evals/graders/conversationCheckGrader.js +62 -0
- package/dist/evals/graders/fieldGrader.d.ts +11 -0
- package/dist/evals/graders/fieldGrader.js +117 -0
- package/dist/evals/graders/goal.d.ts +3 -0
- package/dist/evals/graders/goal.js +14 -0
- package/dist/evals/graders/index.d.ts +18 -0
- package/dist/evals/graders/index.js +34 -0
- package/dist/evals/graders/notApplicable.d.ts +5 -0
- package/dist/evals/graders/notApplicable.js +9 -0
- package/dist/evals/graders/path.d.ts +26 -0
- package/dist/evals/graders/path.js +75 -0
- package/dist/evals/graders/referenceGrader.d.ts +5 -0
- package/dist/evals/graders/referenceGrader.js +59 -0
- package/dist/evals/graders/schemaGrader.d.ts +5 -0
- package/dist/evals/graders/schemaGrader.js +29 -0
- package/dist/evals/graders/subject.d.ts +6 -0
- package/dist/evals/graders/subject.js +33 -0
- package/dist/evals/graders/toolCallsGrader.d.ts +6 -0
- package/dist/evals/graders/toolCallsGrader.js +100 -0
- package/dist/evals/graders/transcript.d.ts +12 -0
- package/dist/evals/graders/transcript.js +57 -0
- package/dist/evals/graders/types.d.ts +20 -0
- package/dist/evals/graders/types.js +1 -0
- package/dist/evals/judgeProviders.d.ts +16 -0
- package/dist/evals/judgeProviders.js +27 -0
- package/dist/evals/lineDiff.d.ts +5 -0
- package/dist/evals/lineDiff.js +34 -0
- package/dist/evals/listStatus.d.ts +31 -0
- package/dist/evals/listStatus.js +48 -0
- package/dist/evals/manager.d.ts +187 -0
- package/dist/evals/manager.js +795 -0
- package/dist/evals/plan.d.ts +65 -0
- package/dist/evals/plan.js +621 -0
- package/dist/evals/planInternalAgent.d.ts +19 -0
- package/dist/evals/planInternalAgent.js +205 -0
- package/dist/evals/providerKeys.d.ts +1 -0
- package/dist/evals/providerKeys.js +21 -0
- package/dist/evals/read/agentTargets.d.ts +37 -0
- package/dist/evals/read/agentTargets.js +101 -0
- package/dist/evals/read/api.d.ts +208 -0
- package/dist/evals/read/api.js +363 -0
- package/dist/evals/read/compare.d.ts +4 -0
- package/dist/evals/read/compare.js +39 -0
- package/dist/evals/read/datasets.d.ts +105 -0
- package/dist/evals/read/datasets.js +318 -0
- package/dist/evals/read/list.d.ts +66 -0
- package/dist/evals/read/list.js +182 -0
- package/dist/evals/read/results.d.ts +46 -0
- package/dist/evals/read/results.js +107 -0
- package/dist/evals/read/runs.d.ts +154 -0
- package/dist/evals/read/runs.js +295 -0
- package/dist/evals/read/suggestions.d.ts +43 -0
- package/dist/evals/read/suggestions.js +73 -0
- package/dist/evals/runner/FakeAgentBackend.d.ts +40 -0
- package/dist/evals/runner/FakeAgentBackend.js +82 -0
- package/dist/evals/runner/agentCaseRunner.d.ts +24 -0
- package/dist/evals/runner/agentCaseRunner.js +388 -0
- package/dist/evals/runner/caseRunner.d.ts +8 -0
- package/dist/evals/runner/caseRunner.js +28 -0
- package/dist/evals/runner/conversationSubject.d.ts +18 -0
- package/dist/evals/runner/conversationSubject.js +123 -0
- package/dist/evals/runner/internalAgentCaseRunner.d.ts +6 -0
- package/dist/evals/runner/internalAgentCaseRunner.js +250 -0
- package/dist/evals/runner/simulatorModel.d.ts +51 -0
- package/dist/evals/runner/simulatorModel.js +58 -0
- package/dist/evals/runner/simulatorPrompt.d.ts +29 -0
- package/dist/evals/runner/simulatorPrompt.js +59 -0
- package/dist/evals/runner/stageCaseRunner.d.ts +30 -0
- package/dist/evals/runner/stageCaseRunner.js +279 -0
- package/dist/evals/runner/userDriver.d.ts +71 -0
- package/dist/evals/runner/userDriver.js +104 -0
- package/dist/evals/scoring.d.ts +34 -0
- package/dist/evals/scoring.js +67 -0
- package/dist/evals/snapshot.d.ts +191 -0
- package/dist/evals/snapshot.js +70 -0
- package/dist/evals/stageDiff.d.ts +8 -0
- package/dist/evals/stageDiff.js +48 -0
- package/dist/evals/stats.d.ts +95 -0
- package/dist/evals/stats.js +220 -0
- package/dist/evals/statsAdapter.d.ts +4 -0
- package/dist/evals/statsAdapter.js +30 -0
- package/dist/evals/statsTypes.d.ts +51 -0
- package/dist/evals/statsTypes.js +18 -0
- package/dist/evals/storeError.d.ts +5 -0
- package/dist/evals/storeError.js +8 -0
- package/dist/evals/storeTypes.d.ts +207 -0
- package/dist/evals/storeTypes.js +1 -0
- package/dist/evals/tTable.d.ts +3 -0
- package/dist/evals/tTable.js +15 -0
- package/dist/evals/triage/constants.d.ts +26 -0
- package/dist/evals/triage/constants.js +33 -0
- package/dist/evals/triage/credentials.d.ts +13 -0
- package/dist/evals/triage/credentials.js +20 -0
- package/dist/evals/triage/jevClassifier.d.ts +14 -0
- package/dist/evals/triage/jevClassifier.js +124 -0
- package/dist/evals/triage/judgeClassifier.d.ts +10 -0
- package/dist/evals/triage/judgeClassifier.js +76 -0
- package/dist/evals/triage/prompts.d.ts +16 -0
- package/dist/evals/triage/prompts.js +64 -0
- package/dist/evals/triage/service.d.ts +79 -0
- package/dist/evals/triage/service.js +217 -0
- package/dist/evals/triage/stateBuilder.d.ts +19 -0
- package/dist/evals/triage/stateBuilder.js +125 -0
- package/dist/evals/triage/types.d.ts +60 -0
- package/dist/evals/triage/types.js +8 -0
- package/dist/evals/types.d.ts +357 -0
- package/dist/evals/types.js +4 -0
- package/dist/guide/cardContract.d.ts +133 -0
- package/dist/guide/cardContract.js +156 -0
- package/dist/guide/chat.d.ts +45 -0
- package/dist/guide/chat.js +378 -0
- package/dist/guide/knowledge/index.d.ts +14 -0
- package/dist/guide/knowledge/index.js +109 -0
- package/dist/guide/knowledge/topics/agents.d.ts +2 -0
- package/dist/guide/knowledge/topics/agents.js +58 -0
- package/dist/guide/knowledge/topics/bestPractices.d.ts +2 -0
- package/dist/guide/knowledge/topics/bestPractices.js +67 -0
- package/dist/guide/knowledge/topics/connections.d.ts +2 -0
- package/dist/guide/knowledge/topics/connections.js +66 -0
- package/dist/guide/knowledge/topics/consoleMap.d.ts +2 -0
- package/dist/guide/knowledge/topics/consoleMap.js +55 -0
- package/dist/guide/knowledge/topics/evals.d.ts +2 -0
- package/dist/guide/knowledge/topics/evals.js +72 -0
- package/dist/guide/knowledge/topics/limitations.d.ts +2 -0
- package/dist/guide/knowledge/topics/limitations.js +84 -0
- package/dist/guide/knowledge/topics/mcpSkillsBrowser.d.ts +2 -0
- package/dist/guide/knowledge/topics/mcpSkillsBrowser.js +57 -0
- package/dist/guide/knowledge/topics/memories.d.ts +2 -0
- package/dist/guide/knowledge/topics/memories.js +63 -0
- package/dist/guide/knowledge/topics/modelsAndProviders.d.ts +2 -0
- package/dist/guide/knowledge/topics/modelsAndProviders.js +56 -0
- package/dist/guide/knowledge/topics/overview.d.ts +2 -0
- package/dist/guide/knowledge/topics/overview.js +56 -0
- package/dist/guide/knowledge/topics/pipelines.d.ts +2 -0
- package/dist/guide/knowledge/topics/pipelines.js +93 -0
- package/dist/guide/knowledge/topics/stages.d.ts +2 -0
- package/dist/guide/knowledge/topics/stages.js +54 -0
- package/dist/guide/knowledge/topics/tasks.d.ts +2 -0
- package/dist/guide/knowledge/topics/tasks.js +52 -0
- package/dist/guide/knowledge/topics/triggers.d.ts +2 -0
- package/dist/guide/knowledge/topics/triggers.js +68 -0
- package/dist/guide/knowledge/topics/troubleshooting.d.ts +2 -0
- package/dist/guide/knowledge/topics/troubleshooting.js +85 -0
- package/dist/guide/knowledgeTools.d.ts +2 -0
- package/dist/guide/knowledgeTools.js +56 -0
- package/dist/guide/showUi.d.ts +6 -0
- package/dist/guide/showUi.js +546 -0
- package/dist/guide/threadStore.d.ts +48 -0
- package/dist/guide/threadStore.js +189 -0
- package/dist/guide/writeRoot.d.ts +11 -0
- package/dist/guide/writeRoot.js +70 -0
- package/dist/hosted/translate.js +2 -0
- package/dist/mcp/agentTools.js +12 -0
- package/dist/mcp/catalogTools.js +18 -20
- package/dist/mcp/catalogWriteTools.d.ts +8 -0
- package/dist/mcp/catalogWriteTools.js +225 -0
- package/dist/mcp/connectionTools.d.ts +3 -0
- package/dist/mcp/connectionTools.js +85 -0
- package/dist/mcp/controlTools.js +34 -1
- package/dist/mcp/deps.d.ts +16 -0
- package/dist/mcp/evalTools.d.ts +3 -0
- package/dist/mcp/evalTools.js +943 -0
- package/dist/mcp/memoryHostTools.d.ts +3 -0
- package/dist/mcp/memoryHostTools.js +72 -0
- package/dist/mcp/pipelineAuthorTools.js +14 -1
- package/dist/mcp/server.js +6 -0
- package/dist/mcp/tools.js +8 -0
- package/dist/mcp/triggerTools.js +77 -31
- package/dist/models/response.d.ts +7 -2
- package/dist/models/response.js +6 -1
- package/dist/operatorAgent/agentAuthorContext.d.ts +1 -1
- package/dist/operatorAgent/agentAuthorContext.js +1 -1
- package/dist/operatorAgent/evalGate.d.ts +22 -0
- package/dist/operatorAgent/evalGate.js +77 -0
- package/dist/operatorAgent/fakeHost.js +10 -2
- package/dist/operatorAgent/host.js +18 -2
- package/dist/operatorAgent/index.d.ts +1 -0
- package/dist/operatorAgent/index.js +1 -0
- package/dist/operatorAgent/internalAgents.d.ts +11 -0
- package/dist/operatorAgent/internalAgents.js +13 -0
- package/dist/operatorAgent/piModel.d.ts +5 -1
- package/dist/operatorAgent/piModel.js +32 -14
- package/dist/operatorAgent/profiles/agentAuthor.d.ts +3 -1
- package/dist/operatorAgent/profiles/agentAuthor.js +201 -32
- package/dist/operatorAgent/profiles/agentAuthorPlaybook.d.ts +1 -1
- package/dist/operatorAgent/profiles/agentAuthorPlaybook.js +48 -15
- package/dist/operatorAgent/profiles/authorReadable.d.ts +2 -0
- package/dist/operatorAgent/profiles/authorReadable.js +26 -0
- package/dist/operatorAgent/profiles/guideConfirm.d.ts +21 -0
- package/dist/operatorAgent/profiles/guideConfirm.js +100 -0
- package/dist/operatorAgent/profiles/guideTools.d.ts +7 -0
- package/dist/operatorAgent/profiles/guideTools.js +123 -0
- package/dist/operatorAgent/profiles/stageflowGuide.d.ts +7 -0
- package/dist/operatorAgent/profiles/stageflowGuide.js +132 -0
- package/dist/operatorAgent/profiles/workshopAuthor.js +23 -0
- package/dist/operatorAgent/profiles/workshopAuthorPlaybook.d.ts +1 -1
- package/dist/operatorAgent/profiles/workshopAuthorPlaybook.js +9 -1
- package/dist/operatorAgent/profiles/workshopAuthorTools.d.ts +2 -0
- package/dist/operatorAgent/profiles/workshopAuthorTools.js +197 -9
- package/dist/operatorAgent/types.d.ts +23 -0
- package/dist/package-meta.d.ts +1 -1
- package/dist/package-meta.js +1 -1
- package/dist/runstore/port.d.ts +43 -0
- package/dist/runstore/retention.d.ts +2 -1
- package/dist/runstore/retention.js +3 -7
- package/dist/runstore/runStatusClock.d.ts +17 -0
- package/dist/runstore/runStatusClock.js +19 -0
- package/dist/runstore/sqlite/SqliteRunStore.d.ts +29 -0
- package/dist/runstore/sqlite/SqliteRunStore.js +144 -50
- package/dist/runstore/sqlite/evalStore.d.ts +20 -0
- package/dist/runstore/sqlite/evalStore.js +541 -0
- package/dist/runstore/sqlite/migrations/015-evals.d.ts +12 -0
- package/dist/runstore/sqlite/migrations/015-evals.js +157 -0
- package/dist/runstore/sqlite/migrations/016-eval-subject-ref.d.ts +12 -0
- package/dist/runstore/sqlite/migrations/016-eval-subject-ref.js +20 -0
- package/dist/runstore/sqlite/migrations/017-eval-result-suggestions.d.ts +11 -0
- package/dist/runstore/sqlite/migrations/017-eval-result-suggestions.js +36 -0
- package/dist/runstore/sqlite/migrations/index.js +6 -0
- package/dist/runstore/sqlite/suggestionStore.d.ts +14 -0
- package/dist/runstore/sqlite/suggestionStore.js +132 -0
- package/dist/runstore/workspaceLayout.js +6 -1
- package/dist/runtime/artifactDiskInspect.d.ts +14 -0
- package/dist/runtime/artifactDiskInspect.js +52 -0
- package/dist/runtime/artifactPath.d.ts +24 -0
- package/dist/runtime/artifactPath.js +84 -0
- package/dist/runtime/completionCheckRunner.js +15 -43
- package/dist/runtime/githubPollSource.d.ts +22 -4
- package/dist/runtime/githubPollSource.js +93 -8
- package/dist/runtime/pipelineRunner.d.ts +2 -1
- package/dist/runtime/pipelineRunner.js +2 -0
- package/dist/runtime/priorArtifactGrants.d.ts +8 -0
- package/dist/runtime/priorArtifactGrants.js +105 -0
- package/dist/runtime/runActionEligibility.d.ts +46 -0
- package/dist/runtime/runActionEligibility.js +123 -0
- package/dist/runtime/runManager.d.ts +6 -2
- package/dist/runtime/runManager.js +60 -16
- package/dist/runtime/runRetentionSweep.js +2 -2
- package/dist/runtime/runRetryCoordinator.d.ts +2 -14
- package/dist/runtime/runRetryCoordinator.js +3 -67
- package/dist/runtime/sandboxContainer.d.ts +7 -0
- package/dist/runtime/sandboxContainer.js +48 -6
- package/dist/runtime/sandboxDesk.d.ts +2 -1
- package/dist/runtime/sandboxDesk.js +11 -12
- package/dist/runtime/stageEnvironment.js +1 -0
- package/dist/runtime/stageRoots.d.ts +12 -0
- package/dist/runtime/stageSandbox.d.ts +2 -1
- package/dist/runtime/stageSandbox.js +18 -2
- package/dist/runtime/stageWorker.js +20 -0
- package/dist/server/agentAuthorRoutes.js +59 -1
- package/dist/server/bootstrap.d.ts +13 -0
- package/dist/server/bootstrap.js +69 -0
- package/dist/server/controlToken.js +3 -0
- package/dist/server/evalInternalRoutes.d.ts +14 -0
- package/dist/server/evalInternalRoutes.js +87 -0
- package/dist/server/evalRouteContext.d.ts +46 -0
- package/dist/server/evalRouteContext.js +43 -0
- package/dist/server/evalRoutes.d.ts +5 -0
- package/dist/server/evalRoutes.js +1456 -0
- package/dist/server/evalTriageRoutes.d.ts +2 -0
- package/dist/server/evalTriageRoutes.js +95 -0
- package/dist/server/guideRoutes.d.ts +5 -0
- package/dist/server/guideRoutes.js +166 -0
- package/dist/server/http.d.ts +15 -0
- package/dist/server/http.js +67 -3
- package/dist/server/internalAgentRoutes.d.ts +6 -0
- package/dist/server/internalAgentRoutes.js +12 -0
- package/dist/server/mcpHost.js +5 -0
- package/dist/toolkit/meta.d.ts +1 -1
- package/dist/toolkit/meta.js +53 -0
- package/dist/toolkit/profiles.d.ts +5 -0
- package/dist/toolkit/profiles.js +13 -1
- package/dist/tools/askOperator.js +2 -1
- package/dist/tools/emitStageEnvelope.d.ts +17 -16
- package/dist/tools/emitStageEnvelope.js +46 -32
- package/dist/tools/stageToolNames.d.ts +4 -0
- package/dist/tools/stageToolNames.js +4 -0
- package/dist/tools/workingState.d.ts +40 -0
- package/dist/tools/workingState.js +108 -0
- package/dist/tools/writeStageArtifact.d.ts +0 -9
- package/dist/tools/writeStageArtifact.js +2 -1
- package/dist/types/stageflowManifest.d.ts +6 -0
- package/dist/ui/assets/{MarkdownText-D7tYaIFO.js → MarkdownText-S5C_vemc.js} +2 -2
- package/dist/ui/assets/adapters-C0l4ruiR.js +17 -0
- package/dist/ui/assets/chat-CjnsmvqR.js +2 -0
- package/dist/ui/assets/chat-DFDd4UjS.css +2 -0
- package/dist/ui/assets/{main-BFo79krC.css → main-Del1GeLf.css} +1 -1
- package/dist/ui/assets/main-_yXVqcW9.js +277 -0
- package/dist/ui/chat.html +3 -4
- package/dist/ui/index.html +3 -4
- package/dist/workshop/chatTurn.js +1 -1
- package/dist/workshop/workshopPin.d.ts +3 -3
- package/dist/workshop/workshopPin.js +16 -15
- package/examples/README.md +2 -0
- package/examples/compaction-stress/README.md +30 -0
- package/examples/compaction-stress/check-run.mjs +53 -0
- package/examples/compaction-stress/collect-evidence.yaml +60 -0
- package/examples/compaction-stress/compaction-stress.pipeline.yaml +141 -0
- package/examples/compaction-stress/compaction-stress.task.yaml +15 -0
- package/examples/compaction-stress/generate-evidence.mjs +110 -0
- package/examples/compaction-stress/root-cause.yaml +26 -0
- package/examples/compaction-stress/stageflow.yaml +9 -0
- package/examples/compaction-stress/write-postmortem.yaml +40 -0
- package/examples/document-policy-review/README.md +35 -0
- package/examples/document-policy-review/agents/compliance.agent.yaml +42 -0
- package/examples/document-policy-review/documents/acme-vendor-sow.md +15 -0
- package/examples/document-policy-review/documents/support-runbook.md +13 -0
- package/examples/document-policy-review/policies/acceptable-use.md +13 -0
- package/examples/document-policy-review/policies/data-handling.md +17 -0
- package/examples/document-policy-review/policies/vendor-security.md +17 -0
- package/examples/evals/README.md +141 -0
- package/examples/evals/critique-sample.dataset.jsonl +8 -0
- package/examples/evals/critique-sample.eval.yaml +34 -0
- package/examples/evals/critique-sample.task.yaml +4 -0
- package/examples/evals/eval-sample.pipeline.yaml +35 -0
- package/examples/evals/guide-behavior.dataset.jsonl +15 -0
- package/examples/evals/guide-behavior.eval.yaml +35 -0
- package/examples/evals/guide-depth.dataset.jsonl +35 -0
- package/examples/evals/guide-depth.eval.yaml +169 -0
- package/examples/evals/support-sample.agent.yaml +20 -0
- package/examples/evals/support-sample.dataset.jsonl +6 -0
- package/examples/evals/support-sample.eval.yaml +38 -0
- package/examples/memory/evals/guide-behavior.dataset.jsonl +15 -0
- package/examples/memory/evals/guide-behavior.eval.yaml +35 -0
- package/examples/memory/evals/guide-depth.dataset.jsonl +35 -0
- package/examples/memory/evals/guide-depth.eval.yaml +169 -0
- package/examples/stageflow.yaml +6 -0
- package/package.json +1 -1
- package/skills/stageflow/SKILL.md +5 -2
- package/skills/stageflow/references/control-surface.md +4 -2
- package/skills/stageflow/references/evals.md +68 -0
- package/skills/stageflow-author/SKILL.md +4 -0
- package/skills/stageflow-run/SKILL.md +4 -0
- package/dist/ui/assets/AssistantRuntimeProvider-CsiPFhCT.js +0 -9
- package/dist/ui/assets/ReadonlyStore-BfXqHykm.js +0 -6
- package/dist/ui/assets/chat-BbLukq9W.js +0 -5
- package/dist/ui/assets/chat-zIZU_bP1.css +0 -2
- package/dist/ui/assets/main-CijYMeM0.js +0 -259
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { buildCaseStats, clusteredCi, computeStats, mean, sampleSd } from "./stats.js";
|
|
2
|
+
import { agentDiff } from "./agentDiff.js";
|
|
3
|
+
import { stageDiff } from "./stageDiff.js";
|
|
4
|
+
import { EVAL_COMPARE_MISMATCH, EXECUTED_RESULT_STATUSES, resultKey, } from "./statsTypes.js";
|
|
5
|
+
export class CompareMismatchError extends Error {
|
|
6
|
+
code = EVAL_COMPARE_MISMATCH;
|
|
7
|
+
constructor(a, b, what = "different evals") {
|
|
8
|
+
super(`Cannot compare runs of ${what} (${a} vs ${b})`);
|
|
9
|
+
this.name = "CompareMismatchError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function canonical(value) {
|
|
13
|
+
return JSON.stringify(sortKeys(value));
|
|
14
|
+
}
|
|
15
|
+
function sortKeys(value) {
|
|
16
|
+
if (Array.isArray(value))
|
|
17
|
+
return value.map(sortKeys);
|
|
18
|
+
if (value && typeof value === "object") {
|
|
19
|
+
const obj = value;
|
|
20
|
+
return Object.fromEntries(Object.keys(obj)
|
|
21
|
+
.sort()
|
|
22
|
+
.map((k) => [k, sortKeys(obj[k])]));
|
|
23
|
+
}
|
|
24
|
+
return value ?? null;
|
|
25
|
+
}
|
|
26
|
+
function delta(a, b) {
|
|
27
|
+
return {
|
|
28
|
+
a,
|
|
29
|
+
b,
|
|
30
|
+
delta: a !== null && b !== null ? b - a : null,
|
|
31
|
+
percent_change: a !== null && b !== null && a !== 0 ? ((b - a) / a) * 100 : null,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function passRateOver(grades, graderId, cases) {
|
|
35
|
+
const graded = grades.filter((g) => g.graderId === graderId && g.status === "graded" && cases.has(g.caseId));
|
|
36
|
+
if (graded.length === 0)
|
|
37
|
+
return null;
|
|
38
|
+
return graded.filter((g) => g.passed === 1).length / graded.length;
|
|
39
|
+
}
|
|
40
|
+
function passedRepeatsByGrader(grades, executedKeys, caseId) {
|
|
41
|
+
const out = new Map();
|
|
42
|
+
for (const g of grades) {
|
|
43
|
+
if (g.caseId !== caseId || !executedKeys.has(resultKey(g.caseId, g.repeatIndex)))
|
|
44
|
+
continue;
|
|
45
|
+
out.set(g.graderId, (out.get(g.graderId) ?? 0) + (g.passed === 1 ? 1 : 0));
|
|
46
|
+
}
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
function executedKeysOf(results) {
|
|
50
|
+
return new Set(results
|
|
51
|
+
.filter((r) => EXECUTED_RESULT_STATUSES.includes(r.status))
|
|
52
|
+
.map((r) => resultKey(r.caseId, r.repeatIndex)));
|
|
53
|
+
}
|
|
54
|
+
export function compareRuns(a, b) {
|
|
55
|
+
if (a.evalId !== b.evalId)
|
|
56
|
+
throw new CompareMismatchError(a.evalId, b.evalId);
|
|
57
|
+
const kindA = a.targetKind ?? "stage";
|
|
58
|
+
const kindB = b.targetKind ?? "stage";
|
|
59
|
+
if (kindA !== kindB || (kindA === "agent" && (a.agentId ?? null) !== (b.agentId ?? null))) {
|
|
60
|
+
throw new CompareMismatchError(a.evalId, b.evalId, "different targets");
|
|
61
|
+
}
|
|
62
|
+
const isAgent = kindA === "agent";
|
|
63
|
+
const statsA = computeStats(a);
|
|
64
|
+
const statsB = computeStats(b);
|
|
65
|
+
const casesA = new Map(buildCaseStats(a.results).map((c) => [c.caseId, c]));
|
|
66
|
+
const casesB = new Map(buildCaseStats(b.results).map((c) => [c.caseId, c]));
|
|
67
|
+
const sharedIds = [...casesA.keys()].filter((id) => casesB.has(id)).sort();
|
|
68
|
+
const m = sharedIds.length;
|
|
69
|
+
const shared = new Set(sharedIds);
|
|
70
|
+
const diffs = sharedIds.map((id) => (casesB.get(id)?.p ?? 0) - (casesA.get(id)?.p ?? 0));
|
|
71
|
+
const dBar = mean(diffs);
|
|
72
|
+
const ci = dBar === null ? null : clusteredCi(dBar, diffs, -1, 1);
|
|
73
|
+
const sdD = sampleSd(diffs);
|
|
74
|
+
const casesNeeded = sdD === null ? null : Math.ceil(Math.round((1.96 * sdD / 0.05) ** 2 * 1e9) / 1e9);
|
|
75
|
+
let verdict = "no_clear_difference";
|
|
76
|
+
if (m < 5 || ci === null)
|
|
77
|
+
verdict = "insufficient_data";
|
|
78
|
+
else if (ci.low > 0)
|
|
79
|
+
verdict = "improved";
|
|
80
|
+
else if (ci.high < 0)
|
|
81
|
+
verdict = "regressed";
|
|
82
|
+
const keysA = executedKeysOf(a.results);
|
|
83
|
+
const keysB = executedKeysOf(b.results);
|
|
84
|
+
const cases = sharedIds.map((id) => {
|
|
85
|
+
const ca = casesA.get(id);
|
|
86
|
+
const cb = casesB.get(id);
|
|
87
|
+
const d = cb.p - ca.p;
|
|
88
|
+
const pa = passedRepeatsByGrader(a.grades, keysA, id);
|
|
89
|
+
const pb = passedRepeatsByGrader(b.grades, keysB, id);
|
|
90
|
+
const graderIds = [...new Set([...pa.keys(), ...pb.keys()])].sort();
|
|
91
|
+
return {
|
|
92
|
+
case_id: id,
|
|
93
|
+
change: d > 0 ? "improved" : d < 0 ? "regressed" : "same",
|
|
94
|
+
p_a: ca.p,
|
|
95
|
+
p_b: cb.p,
|
|
96
|
+
d,
|
|
97
|
+
passes_a: ca.flags,
|
|
98
|
+
passes_b: cb.flags,
|
|
99
|
+
mean_score_a: ca.meanScore,
|
|
100
|
+
mean_score_b: cb.meanScore,
|
|
101
|
+
graders_changed: graderIds.filter((g) => (pa.get(g) ?? 0) !== (pb.get(g) ?? 0)),
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
const rank = { regressed: 0, improved: 1, same: 2 };
|
|
105
|
+
cases.sort((x, y) => rank[x.change] - rank[y.change] ||
|
|
106
|
+
(x.change === "improved" ? y.d - x.d : x.d - y.d) ||
|
|
107
|
+
(x.case_id < y.case_id ? -1 : x.case_id > y.case_id ? 1 : 0));
|
|
108
|
+
const hashA = new Map(a.graders.map((g) => [g.id, g.hash]));
|
|
109
|
+
const hashB = new Map(b.graders.map((g) => [g.id, g.hash]));
|
|
110
|
+
const graderIds = [...new Set([...hashA.keys(), ...hashB.keys()])];
|
|
111
|
+
const graders = graderIds.map((id) => {
|
|
112
|
+
if (!hashB.has(id)) {
|
|
113
|
+
return { grader_id: id, status: "removed", pass_rate_a: null, pass_rate_b: null, delta: null };
|
|
114
|
+
}
|
|
115
|
+
if (!hashA.has(id)) {
|
|
116
|
+
return { grader_id: id, status: "added", pass_rate_a: null, pass_rate_b: null, delta: null };
|
|
117
|
+
}
|
|
118
|
+
if (hashA.get(id) !== hashB.get(id)) {
|
|
119
|
+
return { grader_id: id, status: "changed", pass_rate_a: null, pass_rate_b: null, delta: null };
|
|
120
|
+
}
|
|
121
|
+
const ra = passRateOver(a.grades, id, shared);
|
|
122
|
+
const rb = passRateOver(b.grades, id, shared);
|
|
123
|
+
return {
|
|
124
|
+
grader_id: id,
|
|
125
|
+
status: "compared",
|
|
126
|
+
pass_rate_a: ra,
|
|
127
|
+
pass_rate_b: rb,
|
|
128
|
+
delta: ra !== null && rb !== null ? (rb - ra) * 100 : null,
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
const componentKeys = [
|
|
132
|
+
...new Set([...Object.keys(a.configComponents), ...Object.keys(b.configComponents)]),
|
|
133
|
+
];
|
|
134
|
+
const components = componentKeys.map((key) => ({
|
|
135
|
+
key,
|
|
136
|
+
status: canonical(a.configComponents[key]) === canonical(b.configComponents[key]) ? "same" : "changed",
|
|
137
|
+
a: a.configComponents[key] ?? null,
|
|
138
|
+
b: b.configComponents[key] ?? null,
|
|
139
|
+
}));
|
|
140
|
+
const warnings = [];
|
|
141
|
+
if (a.datasetHash !== b.datasetHash) {
|
|
142
|
+
warnings.push({
|
|
143
|
+
code: "dataset_differs",
|
|
144
|
+
shared_cases: m,
|
|
145
|
+
cases_a: casesA.size,
|
|
146
|
+
cases_b: casesB.size,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
if (graders.some((g) => g.status !== "compared"))
|
|
150
|
+
warnings.push({ code: "graders_differ" });
|
|
151
|
+
if (components.find((c) => c.key === "engine")?.status === "changed") {
|
|
152
|
+
warnings.push({ code: "engine_differs" });
|
|
153
|
+
}
|
|
154
|
+
if (m < 5)
|
|
155
|
+
warnings.push({ code: "few_shared_cases", shared_cases: m });
|
|
156
|
+
const stage = !isAgent &&
|
|
157
|
+
a.stageVersionHash !== b.stageVersionHash && a.stageDefinition && b.stageDefinition
|
|
158
|
+
? stageDiff(a.stageDefinition, b.stageDefinition)
|
|
159
|
+
: null;
|
|
160
|
+
return {
|
|
161
|
+
shared_cases: m,
|
|
162
|
+
cases_a: casesA.size,
|
|
163
|
+
cases_b: casesB.size,
|
|
164
|
+
mean_difference: dBar,
|
|
165
|
+
ci,
|
|
166
|
+
verdict,
|
|
167
|
+
cases,
|
|
168
|
+
graders,
|
|
169
|
+
deltas: {
|
|
170
|
+
cost_per_result: delta(statsA.cost_per_result, statsB.cost_per_result),
|
|
171
|
+
latency_p50: delta(statsA.latency_p50, statsB.latency_p50),
|
|
172
|
+
latency_p95: delta(statsA.latency_p95, statsB.latency_p95),
|
|
173
|
+
flaky_cases: delta(statsA.flaky_cases.length, statsB.flaky_cases.length),
|
|
174
|
+
mean_score: delta(statsA.mean_score, statsB.mean_score),
|
|
175
|
+
...(isAgent
|
|
176
|
+
? {
|
|
177
|
+
mean_turns: delta(statsA.mean_turns ?? null, statsB.mean_turns ?? null),
|
|
178
|
+
mean_tool_calls: delta(statsA.mean_tool_calls ?? null, statsB.mean_tool_calls ?? null),
|
|
179
|
+
}
|
|
180
|
+
: {}),
|
|
181
|
+
},
|
|
182
|
+
stage_diff: stage,
|
|
183
|
+
...(isAgent
|
|
184
|
+
? {
|
|
185
|
+
agent_diff: a.stageVersionHash !== b.stageVersionHash && a.agentDefinition && b.agentDefinition
|
|
186
|
+
? agentDiff(a.agentDefinition, b.agentDefinition, {
|
|
187
|
+
a: a.agentRevision ?? null,
|
|
188
|
+
b: b.agentRevision ?? null,
|
|
189
|
+
})
|
|
190
|
+
: null,
|
|
191
|
+
}
|
|
192
|
+
: {}),
|
|
193
|
+
components,
|
|
194
|
+
same_config: components.every((c) => c.status === "same"),
|
|
195
|
+
warnings,
|
|
196
|
+
sd_d: sdD,
|
|
197
|
+
cases_needed_5pts: casesNeeded,
|
|
198
|
+
stats_a: statsA,
|
|
199
|
+
stats_b: statsB,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/** Consecutive empty-reply or backend-failed agent cases after which a run stops early. */
|
|
2
|
+
export declare const EVAL_MAX_CONSECUTIVE_PROVIDER_FAILURES = 5;
|
|
3
|
+
export declare const EVAL_RUN_STATUSES: readonly ["queued", "running", "completed", "failed", "cancelled", "budget_stopped"];
|
|
4
|
+
export type EvalRunStatus = (typeof EVAL_RUN_STATUSES)[number];
|
|
5
|
+
export declare const EVAL_RESULT_STATUSES: readonly ["completed", "stage_failed", "needs_input", "error", "skipped_budget", "cancelled"];
|
|
6
|
+
export type EvalResultStatus = (typeof EVAL_RESULT_STATUSES)[number];
|
|
7
|
+
export declare const EVAL_EXECUTED_RESULT_STATUSES: readonly ["completed", "stage_failed", "needs_input", "error"];
|
|
8
|
+
export declare const EVAL_GRADE_STATUSES: readonly ["graded", "error"];
|
|
9
|
+
export type EvalGradeStatus = (typeof EVAL_GRADE_STATUSES)[number];
|
|
10
|
+
export declare const EVAL_TARGET_KINDS: readonly ["stage", "agent"];
|
|
11
|
+
export type EvalTargetKind = (typeof EVAL_TARGET_KINDS)[number];
|
|
12
|
+
export declare const EVAL_STARTED_VIA: readonly ["console", "cli", "mcp"];
|
|
13
|
+
export type EvalStartedVia = (typeof EVAL_STARTED_VIA)[number];
|
|
14
|
+
export declare const EVAL_REVIEW_LABELS: readonly ["pass", "fail"];
|
|
15
|
+
export type EvalReviewLabel = (typeof EVAL_REVIEW_LABELS)[number];
|
|
16
|
+
export declare const EVAL_BUDGET_WARNINGS: readonly ["latency", "cost"];
|
|
17
|
+
export type EvalBudgetWarning = (typeof EVAL_BUDGET_WARNINGS)[number];
|
|
18
|
+
export declare const EVAL_RESULT_ERROR_CODES: readonly ["EVAL_STAGE_FAILED", "EVAL_STAGE_NEEDS_INPUT", "EVAL_STAGE_TIMEOUT", "EVAL_ENGINE_ERROR", "EVAL_BUDGET_EXCEEDED", "EVAL_CANCELLED", "EVAL_JUDGE_ERROR", "EVAL_GRADER_CODE_ERROR", "EVAL_CASE_MISSING_EXPECTED", "EVAL_AGENT_FAILED", "EVAL_AGENT_EMPTY_REPLY", "EVAL_AGENT_TIMEOUT", "EVAL_SIMULATOR_ERROR", "EVAL_GRADER_NOT_APPLICABLE"];
|
|
19
|
+
export declare const EVAL_REQUEST_ERROR_CODES: readonly ["EVAL_INVALID", "EVAL_RUN_ACTIVE", "EVAL_ENGINE_UNAVAILABLE", "EVAL_NODE_TOO_OLD", "FILE_CHANGED", "EVAL_NOT_FOUND", "DATASET_NOT_FOUND", "EVAL_RUN_NOT_FOUND", "EVAL_TAGS_ON_PASSED_RESULT", "EVAL_REAL_TOOLS_NOT_CONFIRMED", "EVAL_CLASSIFIER_UNAVAILABLE"];
|
|
20
|
+
export declare const EVAL_ERROR_CODES: readonly ["EVAL_STAGE_FAILED", "EVAL_STAGE_NEEDS_INPUT", "EVAL_STAGE_TIMEOUT", "EVAL_ENGINE_ERROR", "EVAL_BUDGET_EXCEEDED", "EVAL_CANCELLED", "EVAL_JUDGE_ERROR", "EVAL_GRADER_CODE_ERROR", "EVAL_CASE_MISSING_EXPECTED", "EVAL_AGENT_FAILED", "EVAL_AGENT_EMPTY_REPLY", "EVAL_AGENT_TIMEOUT", "EVAL_SIMULATOR_ERROR", "EVAL_GRADER_NOT_APPLICABLE", "EVAL_INVALID", "EVAL_RUN_ACTIVE", "EVAL_ENGINE_UNAVAILABLE", "EVAL_NODE_TOO_OLD", "FILE_CHANGED", "EVAL_NOT_FOUND", "DATASET_NOT_FOUND", "EVAL_RUN_NOT_FOUND", "EVAL_TAGS_ON_PASSED_RESULT", "EVAL_REAL_TOOLS_NOT_CONFIRMED", "EVAL_CLASSIFIER_UNAVAILABLE"];
|
|
21
|
+
export type EvalErrorCode = (typeof EVAL_ERROR_CODES)[number];
|
|
22
|
+
export declare const EVAL_LIMITS: {
|
|
23
|
+
readonly maxCasesPerDataset: 5000;
|
|
24
|
+
readonly maxCaseBytes: 1000000;
|
|
25
|
+
readonly maxUploadBytes: 50000000;
|
|
26
|
+
readonly maxResultsPerRun: 5000;
|
|
27
|
+
readonly repeats: {
|
|
28
|
+
readonly min: 1;
|
|
29
|
+
readonly max: 10;
|
|
30
|
+
};
|
|
31
|
+
readonly concurrency: {
|
|
32
|
+
readonly min: 1;
|
|
33
|
+
readonly max: 8;
|
|
34
|
+
};
|
|
35
|
+
readonly labelMaxChars: 80;
|
|
36
|
+
readonly failureTypeNameMaxChars: 60;
|
|
37
|
+
readonly reviewNoteMaxChars: 500;
|
|
38
|
+
};
|
|
39
|
+
export declare const EVAL_RUN_ID_PREFIX = "er_";
|
|
40
|
+
export declare const RUBRIC_PROMPT_VERSION = 1;
|
|
41
|
+
export declare const CONFIG_SNAPSHOT_VERSION = 1;
|
|
42
|
+
export declare const SIMULATOR_PROMPT_VERSION = 1;
|
|
43
|
+
export declare const CONVERSATION_RUBRIC_PROMPT_VERSION = 2;
|
|
44
|
+
/** Room for reasoning judges, whose hidden thinking counts against the output cap. */
|
|
45
|
+
export declare const JUDGE_MAX_OUTPUT_TOKENS = 8192;
|
|
46
|
+
/** Bump when the failure-sorting questions, bucket criteria or judge prompt text change. */
|
|
47
|
+
export declare const TRIAGE_PROMPT_VERSION = 1;
|
|
48
|
+
export declare const EVAL_CONVERSATION_LIMITS: {
|
|
49
|
+
readonly maxMessageChars: 4000;
|
|
50
|
+
readonly maxResultSummaryChars: 1000;
|
|
51
|
+
readonly maxArgsChars: 2000;
|
|
52
|
+
readonly maxMessages: 80;
|
|
53
|
+
readonly keepFirstMessages: 4;
|
|
54
|
+
readonly maxToolCalls: 200;
|
|
55
|
+
readonly maxSubjectBytes: number;
|
|
56
|
+
};
|
|
57
|
+
export declare const JUDGE_TRANSCRIPT_LIMITS: {
|
|
58
|
+
readonly turns: 30;
|
|
59
|
+
readonly messageChars: 2000;
|
|
60
|
+
readonly toolArgsChars: 500;
|
|
61
|
+
readonly toolResultChars: 500;
|
|
62
|
+
};
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/** Consecutive empty-reply or backend-failed agent cases after which a run stops early. */
|
|
2
|
+
export const EVAL_MAX_CONSECUTIVE_PROVIDER_FAILURES = 5;
|
|
3
|
+
export const EVAL_RUN_STATUSES = [
|
|
4
|
+
"queued",
|
|
5
|
+
"running",
|
|
6
|
+
"completed",
|
|
7
|
+
"failed",
|
|
8
|
+
"cancelled",
|
|
9
|
+
"budget_stopped",
|
|
10
|
+
];
|
|
11
|
+
export const EVAL_RESULT_STATUSES = [
|
|
12
|
+
"completed",
|
|
13
|
+
"stage_failed",
|
|
14
|
+
"needs_input",
|
|
15
|
+
"error",
|
|
16
|
+
"skipped_budget",
|
|
17
|
+
"cancelled",
|
|
18
|
+
];
|
|
19
|
+
export const EVAL_EXECUTED_RESULT_STATUSES = [
|
|
20
|
+
"completed",
|
|
21
|
+
"stage_failed",
|
|
22
|
+
"needs_input",
|
|
23
|
+
"error",
|
|
24
|
+
];
|
|
25
|
+
export const EVAL_GRADE_STATUSES = ["graded", "error"];
|
|
26
|
+
export const EVAL_TARGET_KINDS = ["stage", "agent"];
|
|
27
|
+
export const EVAL_STARTED_VIA = ["console", "cli", "mcp"];
|
|
28
|
+
export const EVAL_REVIEW_LABELS = ["pass", "fail"];
|
|
29
|
+
export const EVAL_BUDGET_WARNINGS = ["latency", "cost"];
|
|
30
|
+
export const EVAL_RESULT_ERROR_CODES = [
|
|
31
|
+
"EVAL_STAGE_FAILED",
|
|
32
|
+
"EVAL_STAGE_NEEDS_INPUT",
|
|
33
|
+
"EVAL_STAGE_TIMEOUT",
|
|
34
|
+
"EVAL_ENGINE_ERROR",
|
|
35
|
+
"EVAL_BUDGET_EXCEEDED",
|
|
36
|
+
"EVAL_CANCELLED",
|
|
37
|
+
"EVAL_JUDGE_ERROR",
|
|
38
|
+
"EVAL_GRADER_CODE_ERROR",
|
|
39
|
+
"EVAL_CASE_MISSING_EXPECTED",
|
|
40
|
+
"EVAL_AGENT_FAILED",
|
|
41
|
+
"EVAL_AGENT_EMPTY_REPLY",
|
|
42
|
+
"EVAL_AGENT_TIMEOUT",
|
|
43
|
+
"EVAL_SIMULATOR_ERROR",
|
|
44
|
+
"EVAL_GRADER_NOT_APPLICABLE",
|
|
45
|
+
];
|
|
46
|
+
export const EVAL_REQUEST_ERROR_CODES = [
|
|
47
|
+
"EVAL_INVALID",
|
|
48
|
+
"EVAL_RUN_ACTIVE",
|
|
49
|
+
"EVAL_ENGINE_UNAVAILABLE",
|
|
50
|
+
"EVAL_NODE_TOO_OLD",
|
|
51
|
+
"FILE_CHANGED",
|
|
52
|
+
"EVAL_NOT_FOUND",
|
|
53
|
+
"DATASET_NOT_FOUND",
|
|
54
|
+
"EVAL_RUN_NOT_FOUND",
|
|
55
|
+
"EVAL_TAGS_ON_PASSED_RESULT",
|
|
56
|
+
"EVAL_REAL_TOOLS_NOT_CONFIRMED",
|
|
57
|
+
"EVAL_CLASSIFIER_UNAVAILABLE",
|
|
58
|
+
];
|
|
59
|
+
export const EVAL_ERROR_CODES = [
|
|
60
|
+
...EVAL_RESULT_ERROR_CODES,
|
|
61
|
+
...EVAL_REQUEST_ERROR_CODES,
|
|
62
|
+
];
|
|
63
|
+
export const EVAL_LIMITS = {
|
|
64
|
+
maxCasesPerDataset: 5_000,
|
|
65
|
+
maxCaseBytes: 1_000_000,
|
|
66
|
+
maxUploadBytes: 50_000_000,
|
|
67
|
+
maxResultsPerRun: 5_000,
|
|
68
|
+
repeats: { min: 1, max: 10 },
|
|
69
|
+
concurrency: { min: 1, max: 8 },
|
|
70
|
+
labelMaxChars: 80,
|
|
71
|
+
failureTypeNameMaxChars: 60,
|
|
72
|
+
reviewNoteMaxChars: 500,
|
|
73
|
+
};
|
|
74
|
+
export const EVAL_RUN_ID_PREFIX = "er_";
|
|
75
|
+
export const RUBRIC_PROMPT_VERSION = 1;
|
|
76
|
+
export const CONFIG_SNAPSHOT_VERSION = 1;
|
|
77
|
+
export const SIMULATOR_PROMPT_VERSION = 1;
|
|
78
|
+
export const CONVERSATION_RUBRIC_PROMPT_VERSION = 2;
|
|
79
|
+
/** Room for reasoning judges, whose hidden thinking counts against the output cap. */
|
|
80
|
+
export const JUDGE_MAX_OUTPUT_TOKENS = 8_192;
|
|
81
|
+
/** Bump when the failure-sorting questions, bucket criteria or judge prompt text change. */
|
|
82
|
+
export const TRIAGE_PROMPT_VERSION = 1;
|
|
83
|
+
export const EVAL_CONVERSATION_LIMITS = {
|
|
84
|
+
maxMessageChars: 4_000,
|
|
85
|
+
maxResultSummaryChars: 1_000,
|
|
86
|
+
maxArgsChars: 2_000,
|
|
87
|
+
maxMessages: 80,
|
|
88
|
+
keepFirstMessages: 4,
|
|
89
|
+
maxToolCalls: 200,
|
|
90
|
+
maxSubjectBytes: 256 * 1024,
|
|
91
|
+
};
|
|
92
|
+
export const JUDGE_TRANSCRIPT_LIMITS = {
|
|
93
|
+
turns: 30,
|
|
94
|
+
messageChars: 2_000,
|
|
95
|
+
toolArgsChars: 500,
|
|
96
|
+
toolResultChars: 500,
|
|
97
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type CaseOutput, type EngineIo, type EvalEngine, type EvalPlan, type PlanCase, type ResolvedGrader } from "../types.js";
|
|
2
|
+
export type FakeJudgeReply = ({
|
|
3
|
+
verdict: "pass" | "fail";
|
|
4
|
+
} | {
|
|
5
|
+
score: number;
|
|
6
|
+
}) & {
|
|
7
|
+
reason?: string;
|
|
8
|
+
};
|
|
9
|
+
export type FakeEnginePhase = "stage_running" | "agent_running" | "grading" | "done";
|
|
10
|
+
export type FakeEngineOptions = {
|
|
11
|
+
judge?: (grader: Extract<ResolvedGrader, {
|
|
12
|
+
type: "rubric";
|
|
13
|
+
}>, testCase: PlanCase, output: CaseOutput) => FakeJudgeReply;
|
|
14
|
+
judgeCostUsd?: number;
|
|
15
|
+
order?: "sequential" | "shuffled";
|
|
16
|
+
seed?: number;
|
|
17
|
+
delayMs?: Partial<Record<FakeEnginePhase, number>>;
|
|
18
|
+
failEngineAfter?: number;
|
|
19
|
+
codeTimeoutMs?: number;
|
|
20
|
+
version?: string;
|
|
21
|
+
};
|
|
22
|
+
export declare class FakeEngineError extends Error {
|
|
23
|
+
readonly code = "EVAL_ENGINE_ERROR";
|
|
24
|
+
constructor(message: string);
|
|
25
|
+
}
|
|
26
|
+
export declare class FakeEngine implements EvalEngine {
|
|
27
|
+
private readonly options;
|
|
28
|
+
readonly name = "fake";
|
|
29
|
+
constructor(options?: FakeEngineOptions);
|
|
30
|
+
version(): Promise<string>;
|
|
31
|
+
run(plan: EvalPlan, io: EngineIo, signal: AbortSignal): Promise<void>;
|
|
32
|
+
private gradeRubric;
|
|
33
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { caseGoal, goalRubricText, gradeDeterministic, isDeterministicGrader } from "../graders/index.js";
|
|
2
|
+
import { isConversationTarget, } from "../types.js";
|
|
3
|
+
export class FakeEngineError extends Error {
|
|
4
|
+
code = "EVAL_ENGINE_ERROR";
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "FakeEngineError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
function mulberry32(seed) {
|
|
11
|
+
let a = seed >>> 0;
|
|
12
|
+
return () => {
|
|
13
|
+
a = (a + 0x6d2b79f5) >>> 0;
|
|
14
|
+
let t = a;
|
|
15
|
+
t = Math.imul(t ^ (t >>> 15), t | 1);
|
|
16
|
+
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
|
|
17
|
+
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function sleep(ms) {
|
|
21
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
22
|
+
}
|
|
23
|
+
function toSubject(output) {
|
|
24
|
+
if (output.kind === "conversation") {
|
|
25
|
+
const { transcript: _transport, ...subject } = output;
|
|
26
|
+
return subject;
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
status: output.status,
|
|
30
|
+
summary: output.summary,
|
|
31
|
+
...(output.payload !== undefined ? { payload: output.payload } : {}),
|
|
32
|
+
artifacts: output.artifacts,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export class FakeEngine {
|
|
36
|
+
options;
|
|
37
|
+
name = "fake";
|
|
38
|
+
constructor(options = {}) {
|
|
39
|
+
this.options = options;
|
|
40
|
+
}
|
|
41
|
+
async version() {
|
|
42
|
+
return this.options.version ?? "fake";
|
|
43
|
+
}
|
|
44
|
+
async run(plan, io, signal) {
|
|
45
|
+
const opts = this.options;
|
|
46
|
+
const items = [];
|
|
47
|
+
for (const testCase of plan.cases) {
|
|
48
|
+
for (let repeatIndex = 0; repeatIndex < plan.repeats; repeatIndex++) {
|
|
49
|
+
items.push({ testCase, repeatIndex });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (opts.order === "shuffled") {
|
|
53
|
+
const rand = mulberry32(opts.seed ?? 1);
|
|
54
|
+
for (let i = items.length - 1; i > 0; i--) {
|
|
55
|
+
const j = Math.floor(rand() * (i + 1));
|
|
56
|
+
[items[i], items[j]] = [items[j], items[i]];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
let next = 0;
|
|
60
|
+
let emitted = 0;
|
|
61
|
+
let stop = false;
|
|
62
|
+
let failure;
|
|
63
|
+
const phase = async (testCase, repeatIndex, p) => {
|
|
64
|
+
io.onPhase(testCase.id, repeatIndex, p);
|
|
65
|
+
const delay = opts.delayMs?.[p];
|
|
66
|
+
if (delay)
|
|
67
|
+
await sleep(delay);
|
|
68
|
+
};
|
|
69
|
+
const worker = async () => {
|
|
70
|
+
while (!stop && !signal.aborted && next < items.length) {
|
|
71
|
+
if (opts.failEngineAfter !== undefined && emitted >= opts.failEngineAfter) {
|
|
72
|
+
throw new FakeEngineError(`fake engine failed after ${emitted} results`);
|
|
73
|
+
}
|
|
74
|
+
const { testCase, repeatIndex } = items[next++];
|
|
75
|
+
await phase(testCase, repeatIndex, isConversationTarget(plan.target.kind) ? "agent_running" : "stage_running");
|
|
76
|
+
const run = await io.runCase({ evalRunId: plan.evalRunId, caseId: testCase.id, repeatIndex });
|
|
77
|
+
const grades = [];
|
|
78
|
+
if (run.ok) {
|
|
79
|
+
io.onPhase(testCase.id, repeatIndex, "grading");
|
|
80
|
+
if (opts.delayMs?.grading)
|
|
81
|
+
await sleep(opts.delayMs.grading);
|
|
82
|
+
const ctx = {
|
|
83
|
+
evalId: plan.evalId,
|
|
84
|
+
runId: plan.evalRunId,
|
|
85
|
+
repeat: repeatIndex,
|
|
86
|
+
passThreshold: plan.passThreshold,
|
|
87
|
+
outputSchema: plan.outputSchema,
|
|
88
|
+
...(opts.codeTimeoutMs !== undefined ? { codeTimeoutMs: opts.codeTimeoutMs } : {}),
|
|
89
|
+
};
|
|
90
|
+
for (const grader of plan.graders) {
|
|
91
|
+
if (grader.type === "rubric") {
|
|
92
|
+
grades.push(this.gradeRubric(grader, testCase, run.output, io));
|
|
93
|
+
}
|
|
94
|
+
else if (grader.type === "goal_reached") {
|
|
95
|
+
const goal = caseGoal(testCase);
|
|
96
|
+
grades.push(goal === undefined
|
|
97
|
+
? {
|
|
98
|
+
graderId: grader.id,
|
|
99
|
+
graderType: "goal_reached",
|
|
100
|
+
status: "error",
|
|
101
|
+
errorCode: "EVAL_CASE_MISSING_EXPECTED",
|
|
102
|
+
reason: "case has no input.goal or expected.outcome",
|
|
103
|
+
}
|
|
104
|
+
: {
|
|
105
|
+
...this.gradeRubric({
|
|
106
|
+
...grader,
|
|
107
|
+
type: "rubric",
|
|
108
|
+
rubric: goalRubricText(goal, grader.guidance),
|
|
109
|
+
scale: "pass_fail",
|
|
110
|
+
passAt: 1,
|
|
111
|
+
examples: [],
|
|
112
|
+
}, testCase, run.output, io),
|
|
113
|
+
graderType: "goal_reached",
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
else if (isDeterministicGrader(grader)) {
|
|
117
|
+
grades.push(gradeDeterministic(grader, toSubject(run.output), testCase, ctx));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else if (run.code === "EVAL_BUDGET_EXCEEDED") {
|
|
122
|
+
stop = true;
|
|
123
|
+
}
|
|
124
|
+
const result = { caseId: testCase.id, repeatIndex, run, grades };
|
|
125
|
+
io.onResult(result);
|
|
126
|
+
emitted++;
|
|
127
|
+
await phase(testCase, repeatIndex, "done");
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
const workers = Array.from({ length: Math.max(1, plan.concurrency) }, () => worker().catch((error) => {
|
|
131
|
+
stop = true;
|
|
132
|
+
failure ??= error;
|
|
133
|
+
}));
|
|
134
|
+
await Promise.all(workers);
|
|
135
|
+
if (failure !== undefined)
|
|
136
|
+
throw failure;
|
|
137
|
+
}
|
|
138
|
+
gradeRubric(grader, testCase, output, io) {
|
|
139
|
+
const base = { graderId: grader.id, graderType: "rubric", judgeModel: grader.judge };
|
|
140
|
+
const reply = this.options.judge?.(grader, testCase, output) ??
|
|
141
|
+
(grader.scale === "1_to_5" ? { score: 5 } : { verdict: "pass" });
|
|
142
|
+
const cost = this.options.judgeCostUsd ?? 0;
|
|
143
|
+
io.reportJudgeCost(cost);
|
|
144
|
+
const judged = { ...base, judgeCostUsd: cost };
|
|
145
|
+
const reason = reply.reason;
|
|
146
|
+
const bad = (why) => ({
|
|
147
|
+
...judged,
|
|
148
|
+
status: "error",
|
|
149
|
+
errorCode: "EVAL_JUDGE_ERROR",
|
|
150
|
+
reason: why,
|
|
151
|
+
});
|
|
152
|
+
if (grader.scale === "1_to_5") {
|
|
153
|
+
if (!("score" in reply) || !Number.isFinite(reply.score) || reply.score < 1 || reply.score > 5) {
|
|
154
|
+
return bad("judge reply is not a score from 1 to 5");
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
...judged,
|
|
158
|
+
status: "graded",
|
|
159
|
+
rawValue: reply.score,
|
|
160
|
+
score: (reply.score - 1) / 4,
|
|
161
|
+
passed: reply.score >= grader.passAt,
|
|
162
|
+
...(reason !== undefined ? { reason } : {}),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
if (!("verdict" in reply))
|
|
166
|
+
return bad("judge reply is not a pass or fail verdict");
|
|
167
|
+
const passed = reply.verdict === "pass";
|
|
168
|
+
return {
|
|
169
|
+
...judged,
|
|
170
|
+
status: "graded",
|
|
171
|
+
rawValue: passed ? 1 : 0,
|
|
172
|
+
score: passed ? 1 : 0,
|
|
173
|
+
passed,
|
|
174
|
+
...(reason !== undefined ? { reason } : {}),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EvalEngine } from "../types.js";
|
|
2
|
+
export { FakeEngine, FakeEngineError } from "./FakeEngine.js";
|
|
3
|
+
export type { FakeEngineOptions, FakeJudgeReply } from "./FakeEngine.js";
|
|
4
|
+
export { PromptfooEngine } from "./promptfoo/PromptfooEngine.js";
|
|
5
|
+
export type { PromptfooEngineOptions } from "./promptfoo/PromptfooEngine.js";
|
|
6
|
+
export { RunTokenRegistry } from "./promptfoo/runTokens.js";
|
|
7
|
+
export { judgeCapableModels, mapJudge } from "../judgeProviders.js";
|
|
8
|
+
export declare function registerEngine(name: string, factory: (options?: unknown) => EvalEngine): void;
|
|
9
|
+
export declare function getEngine(name: string, options?: unknown): EvalEngine;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { FakeEngine } from "./FakeEngine.js";
|
|
2
|
+
import { PromptfooEngine } from "./promptfoo/PromptfooEngine.js";
|
|
3
|
+
export { FakeEngine, FakeEngineError } from "./FakeEngine.js";
|
|
4
|
+
export { PromptfooEngine } from "./promptfoo/PromptfooEngine.js";
|
|
5
|
+
export { RunTokenRegistry } from "./promptfoo/runTokens.js";
|
|
6
|
+
export { judgeCapableModels, mapJudge } from "../judgeProviders.js";
|
|
7
|
+
const factories = new Map([
|
|
8
|
+
["fake", (options) => new FakeEngine(options)],
|
|
9
|
+
["promptfoo", (options) => new PromptfooEngine(options)],
|
|
10
|
+
]);
|
|
11
|
+
export function registerEngine(name, factory) {
|
|
12
|
+
factories.set(name, factory);
|
|
13
|
+
}
|
|
14
|
+
export function getEngine(name, options) {
|
|
15
|
+
const factory = factories.get(name);
|
|
16
|
+
if (!factory)
|
|
17
|
+
throw new Error(`Unknown eval engine: ${name}`);
|
|
18
|
+
return factory(options);
|
|
19
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type ChildProcess, type SpawnOptions } from "node:child_process";
|
|
2
|
+
import { type EngineIo, type EvalEngine, type EvalPlan } from "../../types.js";
|
|
3
|
+
import { type JudgeKeyResolver, type JudgePriceLoader } from "./judgeServices.js";
|
|
4
|
+
import type { RunTokenRegistry } from "./runTokens.js";
|
|
5
|
+
export declare const PROMPTFOO_KILL_GRACE_MS = 5000;
|
|
6
|
+
export declare const PROMPTFOO_STREAM_POLL_MS = 100;
|
|
7
|
+
export declare const STDERR_TAIL_BYTES = 2048;
|
|
8
|
+
export declare const KEEP_WORKDIR_ENV = "STAGEFLOW_EVALS_KEEP_WORKDIR";
|
|
9
|
+
export declare const DISABLE_FLAGS: {
|
|
10
|
+
readonly PROMPTFOO_DISABLE_TELEMETRY: "1";
|
|
11
|
+
readonly PROMPTFOO_DISABLE_UPDATE: "1";
|
|
12
|
+
readonly PROMPTFOO_DISABLE_SHARING: "1";
|
|
13
|
+
readonly PROMPTFOO_DISABLE_REMOTE_GENERATION: "true";
|
|
14
|
+
};
|
|
15
|
+
export type SpawnFn = (command: string, args: string[], options: SpawnOptions) => ChildProcess;
|
|
16
|
+
export type PromptfooEngineOptions = {
|
|
17
|
+
tokens: RunTokenRegistry;
|
|
18
|
+
callbackUrl: string | (() => string);
|
|
19
|
+
home?: string;
|
|
20
|
+
spawn?: SpawnFn;
|
|
21
|
+
resolveJudgeKey?: JudgeKeyResolver;
|
|
22
|
+
loadJudgePrices?: JudgePriceLoader;
|
|
23
|
+
graderModuleUrl?: string;
|
|
24
|
+
judgeProviderConfig?: Record<string, unknown>;
|
|
25
|
+
extraEnv?: Record<string, string>;
|
|
26
|
+
killGraceMs?: number;
|
|
27
|
+
streamPollMs?: number;
|
|
28
|
+
keepWorkDir?: boolean;
|
|
29
|
+
nodeVersion?: string;
|
|
30
|
+
binPath?: string;
|
|
31
|
+
};
|
|
32
|
+
export declare function quoteNodeOption(file: string): string;
|
|
33
|
+
export declare function buildChildEnv(input: {
|
|
34
|
+
workDir: string;
|
|
35
|
+
guardPath: string;
|
|
36
|
+
callbackUrl: string;
|
|
37
|
+
token: string;
|
|
38
|
+
judgeEnv: Record<string, string>;
|
|
39
|
+
extraEnv?: Record<string, string>;
|
|
40
|
+
path?: string;
|
|
41
|
+
}): Record<string, string>;
|
|
42
|
+
export declare function buildPromptfooArgs(binPath: string, plan: Pick<EvalPlan, "repeats" | "concurrency">): string[];
|
|
43
|
+
export declare function resolveGraderModuleUrl(): string;
|
|
44
|
+
export declare class PromptfooEngine implements EvalEngine {
|
|
45
|
+
private readonly options;
|
|
46
|
+
readonly name = "promptfoo";
|
|
47
|
+
constructor(options: PromptfooEngineOptions);
|
|
48
|
+
private home;
|
|
49
|
+
version(): Promise<string>;
|
|
50
|
+
validatePlan(plan: EvalPlan): void;
|
|
51
|
+
run(plan: EvalPlan, io: EngineIo, signal: AbortSignal): Promise<void>;
|
|
52
|
+
}
|