@zhivex-ai/core 0.7.0 → 0.8.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.
Files changed (77) hide show
  1. package/README.md +5 -0
  2. package/dist/advanced-tool-registry.d.ts +112 -0
  3. package/dist/advanced-tool-registry.d.ts.map +1 -0
  4. package/dist/advanced-tool-registry.js +407 -0
  5. package/dist/advanced-tool-registry.js.map +1 -0
  6. package/dist/agent-evaluation.d.ts +176 -0
  7. package/dist/agent-evaluation.d.ts.map +1 -0
  8. package/dist/agent-evaluation.js +334 -0
  9. package/dist/agent-evaluation.js.map +1 -0
  10. package/dist/agent-store.d.ts.map +1 -1
  11. package/dist/agent-store.js +226 -8
  12. package/dist/agent-store.js.map +1 -1
  13. package/dist/agent-trace.d.ts +127 -0
  14. package/dist/agent-trace.d.ts.map +1 -0
  15. package/dist/agent-trace.js +331 -0
  16. package/dist/agent-trace.js.map +1 -0
  17. package/dist/agent.d.ts +12 -1
  18. package/dist/agent.d.ts.map +1 -1
  19. package/dist/agent.js +469 -36
  20. package/dist/agent.js.map +1 -1
  21. package/dist/api-stability.d.ts +9 -0
  22. package/dist/api-stability.d.ts.map +1 -0
  23. package/dist/api-stability.js +261 -0
  24. package/dist/api-stability.js.map +1 -0
  25. package/dist/artifact.d.ts +165 -0
  26. package/dist/artifact.d.ts.map +1 -0
  27. package/dist/artifact.js +994 -0
  28. package/dist/artifact.js.map +1 -0
  29. package/dist/errors.d.ts +2 -0
  30. package/dist/errors.d.ts.map +1 -1
  31. package/dist/errors.js +2 -0
  32. package/dist/errors.js.map +1 -1
  33. package/dist/generate-text.d.ts.map +1 -1
  34. package/dist/generate-text.js +6 -2
  35. package/dist/generate-text.js.map +1 -1
  36. package/dist/index.d.ts +27 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +14 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/live-agent.d.ts.map +1 -1
  41. package/dist/live-agent.js +7 -1
  42. package/dist/live-agent.js.map +1 -1
  43. package/dist/provider-parity.d.ts +63 -0
  44. package/dist/provider-parity.d.ts.map +1 -0
  45. package/dist/provider-parity.js +175 -0
  46. package/dist/provider-parity.js.map +1 -0
  47. package/dist/runner.d.ts +111 -0
  48. package/dist/runner.d.ts.map +1 -0
  49. package/dist/runner.js +635 -0
  50. package/dist/runner.js.map +1 -0
  51. package/dist/safety-policy.d.ts +65 -0
  52. package/dist/safety-policy.d.ts.map +1 -0
  53. package/dist/safety-policy.js +308 -0
  54. package/dist/safety-policy.js.map +1 -0
  55. package/dist/types.d.ts +119 -3
  56. package/dist/types.d.ts.map +1 -1
  57. package/dist/workflow-artifacts.d.ts +28 -0
  58. package/dist/workflow-artifacts.d.ts.map +1 -0
  59. package/dist/workflow-artifacts.js +86 -0
  60. package/dist/workflow-artifacts.js.map +1 -0
  61. package/dist/workflow-evaluation-diff.d.ts +51 -0
  62. package/dist/workflow-evaluation-diff.d.ts.map +1 -0
  63. package/dist/workflow-evaluation-diff.js +141 -0
  64. package/dist/workflow-evaluation-diff.js.map +1 -0
  65. package/dist/workflow-evaluation.d.ts +94 -0
  66. package/dist/workflow-evaluation.d.ts.map +1 -0
  67. package/dist/workflow-evaluation.js +210 -0
  68. package/dist/workflow-evaluation.js.map +1 -0
  69. package/dist/workflow-state-service.d.ts +67 -0
  70. package/dist/workflow-state-service.d.ts.map +1 -0
  71. package/dist/workflow-state-service.js +498 -0
  72. package/dist/workflow-state-service.js.map +1 -0
  73. package/dist/workflow.d.ts +206 -0
  74. package/dist/workflow.d.ts.map +1 -0
  75. package/dist/workflow.js +727 -0
  76. package/dist/workflow.js.map +1 -0
  77. package/package.json +1 -1
@@ -0,0 +1,141 @@
1
+ const summarizeReport = (report) => ({
2
+ ok: report.ok,
3
+ total: report.total,
4
+ passed: report.passed,
5
+ failed: report.failed,
6
+ passRate: report.passRate
7
+ });
8
+ const failuresFor = (testCase) => new Set(testCase?.failures ?? []);
9
+ const difference = (left, right) => [...left].filter((value) => !right.has(value)).sort();
10
+ const reportCaseMap = (report) => new Map(report.cases.map((testCase) => [testCase.name, testCase]));
11
+ const caseChanged = (base, target, newFailures, resolvedFailures) => base.ok !== target.ok ||
12
+ base.status !== target.status ||
13
+ newFailures.length > 0 ||
14
+ resolvedFailures.length > 0;
15
+ export const compareWorkflowEvaluationReports = (base, target, options = {}) => {
16
+ const baseByName = reportCaseMap(base);
17
+ const targetByName = reportCaseMap(target);
18
+ const names = [...new Set([...baseByName.keys(), ...targetByName.keys()])].sort();
19
+ const cases = [];
20
+ const regressions = [];
21
+ const improvements = [];
22
+ if (target.passRate < base.passRate) {
23
+ regressions.push(`Pass rate decreased from ${base.passRate} to ${target.passRate}.`);
24
+ }
25
+ else if (target.passRate > base.passRate) {
26
+ improvements.push(`Pass rate increased from ${base.passRate} to ${target.passRate}.`);
27
+ }
28
+ if (target.ok !== base.ok) {
29
+ if (base.ok) {
30
+ regressions.push("Evaluation changed from passing to failing.");
31
+ }
32
+ else {
33
+ improvements.push("Evaluation changed from failing to passing.");
34
+ }
35
+ }
36
+ for (const name of names) {
37
+ const baseCase = baseByName.get(name);
38
+ const targetCase = targetByName.get(name);
39
+ const newFailures = difference(failuresFor(targetCase), failuresFor(baseCase));
40
+ const resolvedFailures = difference(failuresFor(baseCase), failuresFor(targetCase));
41
+ if (!baseCase && targetCase) {
42
+ cases.push({
43
+ name,
44
+ status: "added",
45
+ targetOk: targetCase.ok,
46
+ targetStatus: targetCase.status,
47
+ newFailures,
48
+ resolvedFailures
49
+ });
50
+ if (!targetCase.ok || newFailures.length > 0) {
51
+ regressions.push(`Failing case "${name}" was added.`);
52
+ }
53
+ continue;
54
+ }
55
+ if (baseCase && !targetCase) {
56
+ cases.push({
57
+ name,
58
+ status: "removed",
59
+ baseOk: baseCase.ok,
60
+ baseStatus: baseCase.status,
61
+ newFailures,
62
+ resolvedFailures
63
+ });
64
+ if (!baseCase.ok || resolvedFailures.length > 0) {
65
+ improvements.push(`Failing case "${name}" was removed.`);
66
+ }
67
+ continue;
68
+ }
69
+ if (!baseCase || !targetCase) {
70
+ continue;
71
+ }
72
+ const status = caseChanged(baseCase, targetCase, newFailures, resolvedFailures)
73
+ ? "changed"
74
+ : "unchanged";
75
+ cases.push({
76
+ name,
77
+ status,
78
+ baseOk: baseCase.ok,
79
+ targetOk: targetCase.ok,
80
+ baseStatus: baseCase.status,
81
+ targetStatus: targetCase.status,
82
+ newFailures,
83
+ resolvedFailures
84
+ });
85
+ if (baseCase.ok && !targetCase.ok) {
86
+ regressions.push(`Case "${name}" regressed.`);
87
+ }
88
+ else if (!baseCase.ok && targetCase.ok) {
89
+ improvements.push(`Case "${name}" recovered.`);
90
+ }
91
+ if (newFailures.length > 0) {
92
+ regressions.push(`Case "${name}" has ${newFailures.length} new failure(s).`);
93
+ }
94
+ if (resolvedFailures.length > 0) {
95
+ improvements.push(`Case "${name}" resolved ${resolvedFailures.length} failure(s).`);
96
+ }
97
+ if (baseCase.status !== targetCase.status) {
98
+ const message = `Case "${name}" status changed from "${baseCase.status}" to "${targetCase.status}".`;
99
+ if (targetCase.ok || !baseCase.ok) {
100
+ improvements.push(message);
101
+ }
102
+ else {
103
+ regressions.push(message);
104
+ }
105
+ }
106
+ }
107
+ return {
108
+ ok: regressions.length === 0,
109
+ base: summarizeReport(base),
110
+ target: summarizeReport(target),
111
+ delta: {
112
+ total: target.total - base.total,
113
+ passed: target.passed - base.passed,
114
+ failed: target.failed - base.failed,
115
+ passRate: target.passRate - base.passRate
116
+ },
117
+ regressions,
118
+ improvements,
119
+ cases,
120
+ metadata: options.metadata
121
+ };
122
+ };
123
+ export const createWorkflowEvaluationDiffReport = (diff) => ({
124
+ ...diff,
125
+ cases: diff.cases.map((testCase) => ({
126
+ ...testCase,
127
+ newFailures: [...testCase.newFailures],
128
+ resolvedFailures: [...testCase.resolvedFailures]
129
+ })),
130
+ regressions: [...diff.regressions],
131
+ improvements: [...diff.improvements],
132
+ summary: {
133
+ added: diff.cases.filter((testCase) => testCase.status === "added").length,
134
+ removed: diff.cases.filter((testCase) => testCase.status === "removed").length,
135
+ changed: diff.cases.filter((testCase) => testCase.status === "changed").length,
136
+ unchanged: diff.cases.filter((testCase) => testCase.status === "unchanged").length,
137
+ newFailures: diff.cases.reduce((total, testCase) => total + testCase.newFailures.length, 0),
138
+ resolvedFailures: diff.cases.reduce((total, testCase) => total + testCase.resolvedFailures.length, 0)
139
+ }
140
+ });
141
+ //# sourceMappingURL=workflow-evaluation-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-evaluation-diff.js","sourceRoot":"","sources":["../src/workflow-evaluation-diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import type { JsonValue, LanguageModel } from "./types.js";
2
+ import { type WorkflowDefinition, type WorkflowReplayTimelineEvent, type WorkflowRunInput, type WorkflowRunOutput, type WorkflowStatus, type WorkflowStepStatus } from "./workflow.js";
3
+ export interface WorkflowEvaluationExpectations {
4
+ status?: WorkflowStatus;
5
+ outputs?: Record<string, JsonValue>;
6
+ outputContains?: Record<string, string> | string[];
7
+ stepStatuses?: Record<string, WorkflowStepStatus>;
8
+ stepOutputContains?: Record<string, string>;
9
+ errorContains?: string;
10
+ timelineContains?: WorkflowReplayTimelineEvent["type"][];
11
+ }
12
+ export interface WorkflowEvaluationCase {
13
+ name: string;
14
+ input: WorkflowRunInput;
15
+ expectations?: WorkflowEvaluationExpectations;
16
+ metadata?: Record<string, JsonValue>;
17
+ }
18
+ export interface WorkflowEvaluationCaseResult {
19
+ name: string;
20
+ ok: boolean;
21
+ output: WorkflowRunOutput;
22
+ failures: string[];
23
+ metadata?: Record<string, JsonValue>;
24
+ }
25
+ export interface WorkflowEvaluationResult {
26
+ ok: boolean;
27
+ cases: WorkflowEvaluationCaseResult[];
28
+ }
29
+ export interface WorkflowEvaluationJudgeResult {
30
+ score: number;
31
+ feedback?: string;
32
+ metadata?: Record<string, JsonValue>;
33
+ }
34
+ export type WorkflowEvaluationJudge = ((result: WorkflowEvaluationResult) => WorkflowEvaluationJudgeResult | Promise<WorkflowEvaluationJudgeResult>) | {
35
+ model: LanguageModel;
36
+ prompt?: string;
37
+ };
38
+ export interface RunWorkflowEvaluationOptions {
39
+ workflow: WorkflowDefinition | ((testCase: WorkflowEvaluationCase) => WorkflowDefinition | Promise<WorkflowDefinition>);
40
+ }
41
+ export interface WorkflowEvaluationFixture {
42
+ name?: string;
43
+ dataset: WorkflowEvaluationCase[];
44
+ expectedOk?: boolean;
45
+ metadata?: Record<string, JsonValue>;
46
+ createdAt?: number;
47
+ }
48
+ export interface WorkflowEvaluationReportCase {
49
+ name: string;
50
+ ok: boolean;
51
+ status: WorkflowStatus;
52
+ failures: string[];
53
+ outputPreview: string;
54
+ outputKeys: string[];
55
+ stepCount: number;
56
+ stepStatusCounts: Record<string, number>;
57
+ timelineEventCounts: Record<string, number>;
58
+ durationMs?: number;
59
+ metadata?: Record<string, JsonValue>;
60
+ }
61
+ export interface WorkflowEvaluationReport {
62
+ ok: boolean;
63
+ total: number;
64
+ passed: number;
65
+ failed: number;
66
+ passRate: number;
67
+ statusCounts: Record<string, number>;
68
+ stepCount: number;
69
+ stepStatusCounts: Record<string, number>;
70
+ timelineEventCounts: Record<string, number>;
71
+ failures: Array<{
72
+ name: string;
73
+ failures: string[];
74
+ }>;
75
+ cases: WorkflowEvaluationReportCase[];
76
+ judge?: WorkflowEvaluationJudgeResult;
77
+ metadata?: Record<string, JsonValue>;
78
+ }
79
+ export declare const runWorkflowEvaluation: (dataset: WorkflowEvaluationCase[], options: RunWorkflowEvaluationOptions) => Promise<WorkflowEvaluationResult>;
80
+ export declare const createWorkflowEvaluationFixture: (options: {
81
+ name?: string;
82
+ dataset: WorkflowEvaluationCase[];
83
+ expectedOk?: boolean;
84
+ metadata?: Record<string, JsonValue>;
85
+ createdAt?: number;
86
+ }) => WorkflowEvaluationFixture;
87
+ export declare const runWorkflowEvaluationFixture: (fixture: WorkflowEvaluationFixture, options: RunWorkflowEvaluationOptions) => Promise<WorkflowEvaluationResult>;
88
+ export declare const createWorkflowEvaluationReport: (result: WorkflowEvaluationResult, options?: {
89
+ judge?: WorkflowEvaluationJudgeResult;
90
+ metadata?: Record<string, JsonValue>;
91
+ outputPreviewLength?: number;
92
+ }) => WorkflowEvaluationReport;
93
+ export declare const judgeWorkflowEvaluation: (result: WorkflowEvaluationResult, judge: WorkflowEvaluationJudge) => Promise<WorkflowEvaluationJudgeResult>;
94
+ //# sourceMappingURL=workflow-evaluation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-evaluation.d.ts","sourceRoot":"","sources":["../src/workflow-evaluation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ import { generateText } from "./generate-text.js";
2
+ import { createTextMessage, serializeJsonValue } from "./messages.js";
3
+ import { replayWorkflowRun, runWorkflow } from "./workflow.js";
4
+ const preview = (text, length) => text.length > length ? `${text.slice(0, Math.max(0, length))}...` : text;
5
+ const flattenStepResults = (steps) => steps.flatMap((step) => [step, ...flattenStepResults(step.children ?? [])]);
6
+ const createStepMap = (steps) => {
7
+ const map = new Map();
8
+ for (const step of flattenStepResults(steps)) {
9
+ map.set(step.id, [...(map.get(step.id) ?? []), step]);
10
+ }
11
+ return map;
12
+ };
13
+ const getLatestStep = (stepMap, stepId) => stepMap.get(stepId)?.at(-1);
14
+ const valueEquals = (left, right) => JSON.stringify(left) === JSON.stringify(right);
15
+ const evaluateExpectations = (output, expectations) => {
16
+ const failures = [];
17
+ if (!expectations) {
18
+ return failures;
19
+ }
20
+ if (expectations.status && output.status !== expectations.status) {
21
+ failures.push(`Expected status "${expectations.status}", received "${output.status}".`);
22
+ }
23
+ if (expectations.outputs) {
24
+ for (const [key, expected] of Object.entries(expectations.outputs)) {
25
+ if (!(key in output.outputs)) {
26
+ failures.push(`Expected output key "${key}".`);
27
+ continue;
28
+ }
29
+ if (!valueEquals(output.outputs[key], expected)) {
30
+ failures.push(`Expected output "${key}" to equal ${JSON.stringify(expected)}.`);
31
+ }
32
+ }
33
+ }
34
+ if (Array.isArray(expectations.outputContains)) {
35
+ const serializedOutputs = JSON.stringify(output.outputs);
36
+ for (const expectedText of expectations.outputContains) {
37
+ if (!serializedOutputs.includes(expectedText)) {
38
+ failures.push(`Expected serialized outputs to contain "${expectedText}".`);
39
+ }
40
+ }
41
+ }
42
+ else if (expectations.outputContains) {
43
+ for (const [key, expectedText] of Object.entries(expectations.outputContains)) {
44
+ const value = output.outputs[key];
45
+ if (value === undefined || !String(value).includes(expectedText)) {
46
+ failures.push(`Expected output "${key}" to contain "${expectedText}".`);
47
+ }
48
+ }
49
+ }
50
+ const stepMap = createStepMap(output.steps);
51
+ if (expectations.stepStatuses) {
52
+ for (const [stepId, expectedStatus] of Object.entries(expectations.stepStatuses)) {
53
+ const step = getLatestStep(stepMap, stepId);
54
+ if (!step) {
55
+ failures.push(`Expected step "${stepId}".`);
56
+ continue;
57
+ }
58
+ if (step.status !== expectedStatus) {
59
+ failures.push(`Expected step "${stepId}" status "${expectedStatus}", received "${step.status}".`);
60
+ }
61
+ }
62
+ }
63
+ if (expectations.stepOutputContains) {
64
+ for (const [stepId, expectedText] of Object.entries(expectations.stepOutputContains)) {
65
+ const step = getLatestStep(stepMap, stepId);
66
+ if (!step?.outputText?.includes(expectedText)) {
67
+ failures.push(`Expected step "${stepId}" output to contain "${expectedText}".`);
68
+ }
69
+ }
70
+ }
71
+ if (expectations.errorContains) {
72
+ const errors = flattenStepResults(output.steps).flatMap((step) => step.error?.message ? [step.error.message] : []);
73
+ if (!errors.some((message) => message.includes(expectations.errorContains))) {
74
+ failures.push(`Expected workflow error to contain "${expectations.errorContains}".`);
75
+ }
76
+ }
77
+ if (expectations.timelineContains?.length) {
78
+ const replay = replayWorkflowRun(output.state);
79
+ const eventTypes = new Set(replay.timeline.map((event) => event.type));
80
+ for (const eventType of expectations.timelineContains) {
81
+ if (!eventTypes.has(eventType)) {
82
+ failures.push(`Expected replay timeline event "${eventType}".`);
83
+ }
84
+ }
85
+ }
86
+ return failures;
87
+ };
88
+ export const runWorkflowEvaluation = async (dataset, options) => {
89
+ const cases = [];
90
+ for (const testCase of dataset) {
91
+ const workflow = typeof options.workflow === "function" ? await options.workflow(testCase) : options.workflow;
92
+ const output = await runWorkflow(workflow, testCase.input);
93
+ const failures = evaluateExpectations(output, testCase.expectations);
94
+ cases.push({
95
+ name: testCase.name,
96
+ ok: failures.length === 0,
97
+ output,
98
+ failures,
99
+ metadata: testCase.metadata
100
+ });
101
+ }
102
+ return {
103
+ ok: cases.every((testCase) => testCase.ok),
104
+ cases
105
+ };
106
+ };
107
+ export const createWorkflowEvaluationFixture = (options) => ({
108
+ name: options.name,
109
+ dataset: serializeJsonValue(options.dataset),
110
+ expectedOk: options.expectedOk,
111
+ metadata: options.metadata,
112
+ createdAt: options.createdAt ?? Date.now()
113
+ });
114
+ export const runWorkflowEvaluationFixture = async (fixture, options) => runWorkflowEvaluation(fixture.dataset, options);
115
+ const workflowDuration = (output) => output.state.createdAt !== undefined && output.state.updatedAt !== undefined
116
+ ? Math.max(0, output.state.updatedAt - output.state.createdAt)
117
+ : undefined;
118
+ const incrementCounts = (counts, key) => {
119
+ counts[key] = (counts[key] ?? 0) + 1;
120
+ };
121
+ export const createWorkflowEvaluationReport = (result, options = {}) => {
122
+ const outputPreviewLength = options.outputPreviewLength ?? 500;
123
+ const cases = result.cases.map((testCase) => {
124
+ const steps = flattenStepResults(testCase.output.steps);
125
+ const stepStatusCounts = {};
126
+ const timelineEventCounts = {};
127
+ const replay = replayWorkflowRun(testCase.output.state);
128
+ for (const step of steps) {
129
+ incrementCounts(stepStatusCounts, step.status);
130
+ }
131
+ for (const event of replay.timeline) {
132
+ incrementCounts(timelineEventCounts, event.type);
133
+ }
134
+ return {
135
+ name: testCase.name,
136
+ ok: testCase.ok,
137
+ status: testCase.output.status,
138
+ failures: [...testCase.failures],
139
+ outputPreview: preview(JSON.stringify(testCase.output.outputs), outputPreviewLength),
140
+ outputKeys: Object.keys(testCase.output.outputs),
141
+ stepCount: steps.length,
142
+ stepStatusCounts,
143
+ timelineEventCounts,
144
+ durationMs: workflowDuration(testCase.output),
145
+ metadata: testCase.metadata
146
+ };
147
+ });
148
+ const statusCounts = {};
149
+ const stepStatusCounts = {};
150
+ const timelineEventCounts = {};
151
+ for (const testCase of cases) {
152
+ incrementCounts(statusCounts, testCase.status);
153
+ for (const [status, count] of Object.entries(testCase.stepStatusCounts)) {
154
+ stepStatusCounts[status] = (stepStatusCounts[status] ?? 0) + count;
155
+ }
156
+ for (const [eventType, count] of Object.entries(testCase.timelineEventCounts)) {
157
+ timelineEventCounts[eventType] = (timelineEventCounts[eventType] ?? 0) + count;
158
+ }
159
+ }
160
+ const passed = cases.filter((testCase) => testCase.ok).length;
161
+ const failed = cases.length - passed;
162
+ return {
163
+ ok: result.ok,
164
+ total: cases.length,
165
+ passed,
166
+ failed,
167
+ passRate: cases.length ? passed / cases.length : 1,
168
+ statusCounts,
169
+ stepCount: cases.reduce((total, testCase) => total + testCase.stepCount, 0),
170
+ stepStatusCounts,
171
+ timelineEventCounts,
172
+ failures: cases.filter((testCase) => testCase.failures.length).map((testCase) => ({
173
+ name: testCase.name,
174
+ failures: testCase.failures
175
+ })),
176
+ cases,
177
+ judge: options.judge,
178
+ metadata: options.metadata
179
+ };
180
+ };
181
+ const parseJudgeResponse = (text) => {
182
+ try {
183
+ const parsed = JSON.parse(text);
184
+ return {
185
+ score: typeof parsed.score === "number" ? Math.max(0, Math.min(1, parsed.score)) : 0,
186
+ feedback: parsed.feedback
187
+ };
188
+ }
189
+ catch {
190
+ return {
191
+ score: 0,
192
+ feedback: text
193
+ };
194
+ }
195
+ };
196
+ export const judgeWorkflowEvaluation = async (result, judge) => {
197
+ if (typeof judge === "function") {
198
+ return judge(result);
199
+ }
200
+ const prompt = judge.prompt ??
201
+ "Score this workflow evaluation from 0 to 1. Return JSON with fields score and feedback.";
202
+ const response = await generateText({
203
+ model: judge.model,
204
+ messages: [
205
+ createTextMessage("user", `${prompt}\n\n${JSON.stringify(serializeJsonValue(result), null, 2)}`)
206
+ ]
207
+ });
208
+ return parseJudgeResponse(response.text);
209
+ };
210
+ //# sourceMappingURL=workflow-evaluation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-evaluation.js","sourceRoot":"","sources":["../src/workflow-evaluation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { PostgresClientLike, SqliteDatabaseLike } from "./types.js";
2
+ import { type PersistedWorkflowRunState, type WorkflowStatus } from "./workflow.js";
3
+ export declare const WORKFLOW_STATE_RECORD_SCHEMA_VERSION: 1;
4
+ export interface WorkflowStateLookup {
5
+ appName: string;
6
+ userId: string;
7
+ sessionId: string;
8
+ workflowKey: string;
9
+ }
10
+ export interface WorkflowStateListInput {
11
+ appName: string;
12
+ userId: string;
13
+ sessionId?: string;
14
+ workflowKey?: string;
15
+ status?: WorkflowStatus;
16
+ }
17
+ export interface WorkflowStateSaveInput extends WorkflowStateLookup {
18
+ state: PersistedWorkflowRunState;
19
+ expectedRevision?: number;
20
+ }
21
+ export interface WorkflowStateRecord extends WorkflowStateLookup {
22
+ schemaVersion: typeof WORKFLOW_STATE_RECORD_SCHEMA_VERSION;
23
+ revision: number;
24
+ state: PersistedWorkflowRunState;
25
+ status: WorkflowStatus;
26
+ runId: string;
27
+ createdAt: number;
28
+ updatedAt: number;
29
+ }
30
+ export interface WorkflowStateService {
31
+ saveWorkflowState(input: WorkflowStateSaveInput): Promise<WorkflowStateRecord> | WorkflowStateRecord;
32
+ loadWorkflowState(input: WorkflowStateLookup): Promise<WorkflowStateRecord | undefined> | WorkflowStateRecord | undefined;
33
+ listWorkflowStates(input: WorkflowStateListInput): Promise<WorkflowStateRecord[]> | WorkflowStateRecord[];
34
+ deleteWorkflowState(input: WorkflowStateLookup): Promise<void> | void;
35
+ }
36
+ export interface FileWorkflowStateServiceOptions {
37
+ directory: string;
38
+ }
39
+ export interface FileWorkflowStateStorePruneOptions extends FileWorkflowStateServiceOptions {
40
+ olderThanMs?: number;
41
+ keepLast?: number;
42
+ now?: number;
43
+ dryRun?: boolean;
44
+ }
45
+ export interface FileWorkflowStateStorePruneResult {
46
+ directory: string;
47
+ dryRun: boolean;
48
+ deletedWorkflowStateKeys: string[];
49
+ keptWorkflowStateKeys: string[];
50
+ }
51
+ export interface SqliteWorkflowStateServiceOptions {
52
+ db: SqliteDatabaseLike;
53
+ tableName?: string;
54
+ }
55
+ export interface PostgresWorkflowStateServiceOptions {
56
+ client: PostgresClientLike;
57
+ tableName?: string;
58
+ }
59
+ export type WorkflowStateRecordMigrationTarget = typeof WORKFLOW_STATE_RECORD_SCHEMA_VERSION;
60
+ export declare const normalizeWorkflowStateRecord: (value: unknown) => WorkflowStateRecord;
61
+ export declare const migrateWorkflowStateRecord: (value: unknown, targetVersion?: WorkflowStateRecordMigrationTarget) => WorkflowStateRecord;
62
+ export declare const createInMemoryWorkflowStateService: () => WorkflowStateService;
63
+ export declare const createFileWorkflowStateService: (options: FileWorkflowStateServiceOptions) => WorkflowStateService;
64
+ export declare const pruneFileWorkflowStateStore: (options: FileWorkflowStateStorePruneOptions) => Promise<FileWorkflowStateStorePruneResult>;
65
+ export declare const createSqliteWorkflowStateService: (options: SqliteWorkflowStateServiceOptions) => WorkflowStateService;
66
+ export declare const createPostgresWorkflowStateService: (options: PostgresWorkflowStateServiceOptions) => WorkflowStateService;
67
+ //# sourceMappingURL=workflow-state-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-state-service.d.ts","sourceRoot":"","sources":["../src/workflow-state-service.ts"],"names":[],"mappings":"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"}