veryfront 0.1.876 → 0.1.877

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 (68) hide show
  1. package/esm/deno.d.ts +3 -2
  2. package/esm/deno.js +4 -3
  3. package/esm/src/eval/agent-service.d.ts +88 -0
  4. package/esm/src/eval/agent-service.d.ts.map +1 -0
  5. package/esm/src/eval/agent-service.js +274 -0
  6. package/esm/src/eval/index.d.ts +22 -0
  7. package/esm/src/eval/index.d.ts.map +1 -1
  8. package/esm/src/eval/index.js +22 -0
  9. package/esm/src/utils/version-constant.d.ts +1 -1
  10. package/esm/src/utils/version-constant.js +1 -1
  11. package/package.json +5 -5
  12. package/esm/src/agent/testing/agent-tester.d.ts +0 -53
  13. package/esm/src/agent/testing/agent-tester.d.ts.map +0 -1
  14. package/esm/src/agent/testing/agent-tester.js +0 -132
  15. package/esm/src/agent/testing/durable-run-canaries/cli-runner.d.ts +0 -21
  16. package/esm/src/agent/testing/durable-run-canaries/cli-runner.d.ts.map +0 -1
  17. package/esm/src/agent/testing/durable-run-canaries/cli-runner.js +0 -66
  18. package/esm/src/agent/testing/durable-run-canaries/environment.d.ts +0 -14
  19. package/esm/src/agent/testing/durable-run-canaries/environment.d.ts.map +0 -1
  20. package/esm/src/agent/testing/durable-run-canaries/environment.js +0 -15
  21. package/esm/src/agent/testing/durable-run-canaries/index.d.ts +0 -5
  22. package/esm/src/agent/testing/durable-run-canaries/index.d.ts.map +0 -1
  23. package/esm/src/agent/testing/durable-run-canaries/index.js +0 -4
  24. package/esm/src/agent/testing/durable-run-canaries/runner.d.ts +0 -118
  25. package/esm/src/agent/testing/durable-run-canaries/runner.d.ts.map +0 -1
  26. package/esm/src/agent/testing/durable-run-canaries/runner.js +0 -391
  27. package/esm/src/agent/testing/durable-run-canaries/validation.d.ts +0 -12
  28. package/esm/src/agent/testing/durable-run-canaries/validation.d.ts.map +0 -1
  29. package/esm/src/agent/testing/durable-run-canaries/validation.js +0 -71
  30. package/esm/src/agent/testing/index.d.ts +0 -10
  31. package/esm/src/agent/testing/index.d.ts.map +0 -1
  32. package/esm/src/agent/testing/index.js +0 -9
  33. package/esm/src/agent/testing/live-evals/api-client.d.ts +0 -102
  34. package/esm/src/agent/testing/live-evals/api-client.d.ts.map +0 -1
  35. package/esm/src/agent/testing/live-evals/api-client.js +0 -313
  36. package/esm/src/agent/testing/live-evals/cli-runner.d.ts +0 -40
  37. package/esm/src/agent/testing/live-evals/cli-runner.d.ts.map +0 -1
  38. package/esm/src/agent/testing/live-evals/cli-runner.js +0 -144
  39. package/esm/src/agent/testing/live-evals/environment.d.ts +0 -15
  40. package/esm/src/agent/testing/live-evals/environment.d.ts.map +0 -1
  41. package/esm/src/agent/testing/live-evals/environment.js +0 -20
  42. package/esm/src/agent/testing/live-evals/formatting.d.ts +0 -15
  43. package/esm/src/agent/testing/live-evals/formatting.d.ts.map +0 -1
  44. package/esm/src/agent/testing/live-evals/formatting.js +0 -75
  45. package/esm/src/agent/testing/live-evals/index.d.ts +0 -12
  46. package/esm/src/agent/testing/live-evals/index.d.ts.map +0 -1
  47. package/esm/src/agent/testing/live-evals/index.js +0 -11
  48. package/esm/src/agent/testing/live-evals/metadata.d.ts +0 -34
  49. package/esm/src/agent/testing/live-evals/metadata.d.ts.map +0 -1
  50. package/esm/src/agent/testing/live-evals/metadata.js +0 -116
  51. package/esm/src/agent/testing/live-evals/performance.d.ts +0 -19
  52. package/esm/src/agent/testing/live-evals/performance.d.ts.map +0 -1
  53. package/esm/src/agent/testing/live-evals/performance.js +0 -22
  54. package/esm/src/agent/testing/live-evals/preflight.d.ts +0 -12
  55. package/esm/src/agent/testing/live-evals/preflight.d.ts.map +0 -1
  56. package/esm/src/agent/testing/live-evals/preflight.js +0 -27
  57. package/esm/src/agent/testing/live-evals/report.d.ts +0 -55
  58. package/esm/src/agent/testing/live-evals/report.d.ts.map +0 -1
  59. package/esm/src/agent/testing/live-evals/report.js +0 -79
  60. package/esm/src/agent/testing/live-evals/request.d.ts +0 -31
  61. package/esm/src/agent/testing/live-evals/request.d.ts.map +0 -1
  62. package/esm/src/agent/testing/live-evals/request.js +0 -48
  63. package/esm/src/agent/testing/live-evals/result.d.ts +0 -56
  64. package/esm/src/agent/testing/live-evals/result.d.ts.map +0 -1
  65. package/esm/src/agent/testing/live-evals/result.js +0 -36
  66. package/esm/src/agent/testing/live-evals/runner.d.ts +0 -135
  67. package/esm/src/agent/testing/live-evals/runner.d.ts.map +0 -1
  68. package/esm/src/agent/testing/live-evals/runner.js +0 -396
package/esm/deno.d.ts CHANGED
@@ -24,8 +24,8 @@ declare namespace _default {
24
24
  "./mdx": string;
25
25
  "./agent": string;
26
26
  "./agent/identity": string;
27
- "./agent/testing": string;
28
27
  "./eval": string;
28
+ "./eval/agent-service": string;
29
29
  "./channels/control-plane": string;
30
30
  "./channels/invoke": string;
31
31
  "./tool": string;
@@ -93,6 +93,7 @@ declare namespace _default {
93
93
  "veryfront/embedding": string;
94
94
  "veryfront/runs": string;
95
95
  "veryfront/eval": string;
96
+ "veryfront/eval/agent-service": string;
96
97
  "veryfront/agent/identity": string;
97
98
  "veryfront/agent/react": string;
98
99
  "veryfront/agent/middleware": string;
@@ -138,7 +139,6 @@ declare namespace _default {
138
139
  "veryfront/provider/shared": string;
139
140
  "veryfront/tool/schema": string;
140
141
  "veryfront/agent/composition": string;
141
- "veryfront/agent/testing": string;
142
142
  "veryfront/extensions": string;
143
143
  "veryfront/testing": string;
144
144
  "veryfront/testing/assert": string;
@@ -173,6 +173,7 @@ declare namespace _default {
173
173
  "#veryfront/data": string;
174
174
  "#veryfront/errors": string;
175
175
  "#veryfront/eval": string;
176
+ "#veryfront/eval/agent-service": string;
176
177
  "#veryfront/html": string;
177
178
  "#veryfront/mcp": string;
178
179
  "#veryfront/middleware": string;
package/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.876",
3
+ "version": "0.1.877",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "minimumDependencyAge": {
@@ -79,8 +79,8 @@ export default {
79
79
  "./mdx": "./src/mdx/index.ts",
80
80
  "./agent": "./src/agent/index.ts",
81
81
  "./agent/identity": "./src/agent/identity-contracts.ts",
82
- "./agent/testing": "./src/agent/testing/index.ts",
83
82
  "./eval": "./src/eval/index.ts",
83
+ "./eval/agent-service": "./src/eval/agent-service.ts",
84
84
  "./channels/control-plane": "./src/channels/control-plane.ts",
85
85
  "./channels/invoke": "./src/channels/invoke.ts",
86
86
  "./tool": "./src/tool/index.ts",
@@ -148,6 +148,7 @@ export default {
148
148
  "veryfront/embedding": "./src/embedding/index.ts",
149
149
  "veryfront/runs": "./src/runs/index.ts",
150
150
  "veryfront/eval": "./src/eval/index.ts",
151
+ "veryfront/eval/agent-service": "./src/eval/agent-service.ts",
151
152
  "veryfront/agent/identity": "./src/agent/identity-contracts.ts",
152
153
  "veryfront/agent/react": "./src/agent/react/index.ts",
153
154
  "veryfront/agent/middleware": "./src/agent/middleware/index.ts",
@@ -193,7 +194,6 @@ export default {
193
194
  "veryfront/provider/shared": "./src/provider/shared/index.ts",
194
195
  "veryfront/tool/schema": "./src/tool/schema/index.ts",
195
196
  "veryfront/agent/composition": "./src/agent/composition/index.ts",
196
- "veryfront/agent/testing": "./src/agent/testing/index.ts",
197
197
  "veryfront/extensions": "./src/extensions/index.ts",
198
198
  "veryfront/testing": "./src/testing/index.ts",
199
199
  "veryfront/testing/assert": "./src/testing/assert.ts",
@@ -228,6 +228,7 @@ export default {
228
228
  "#veryfront/data": "./src/data/index.ts",
229
229
  "#veryfront/errors": "./src/errors/index.ts",
230
230
  "#veryfront/eval": "./src/eval/index.ts",
231
+ "#veryfront/eval/agent-service": "./src/eval/agent-service.ts",
231
232
  "#veryfront/html": "./src/html/index.ts",
232
233
  "#veryfront/mcp": "./src/mcp/index.ts",
233
234
  "#veryfront/middleware": "./src/middleware/index.ts",
@@ -0,0 +1,88 @@
1
+ import "../../_dnt.polyfills.js";
2
+ import { type AgUiSseProgressSnapshot } from "../agent/index.js";
3
+ import type { EvalAgentAdapter, EvalAgentAdapterContext } from "./types.js";
4
+ /** Default local AG-UI endpoint used by agent-service evals. */
5
+ export declare const DEFAULT_AGENT_SERVICE_EVAL_ENDPOINT = "http://127.0.0.1:3001/api/ag-ui";
6
+ /** Environment input accepted by agent-service eval helpers. */
7
+ export type AgentServiceEvalEnvironmentInput = Record<string, string | number | undefined>;
8
+ /** Resolved environment values for live agent-service evals. */
9
+ export interface AgentServiceEvalEnvironment {
10
+ endpoint: string;
11
+ authToken: string;
12
+ apiUrl: string;
13
+ projectId?: string;
14
+ branchId?: string;
15
+ model?: string;
16
+ }
17
+ /** Preflight result for a live agent-service eval environment. */
18
+ export interface AgentServiceEvalEnvironmentPreflightResult {
19
+ ok: boolean;
20
+ resolvedApiUrl: string;
21
+ messages: string[];
22
+ }
23
+ /** Veryfront forwarded props included in an AG-UI eval request. */
24
+ export interface AgentServiceEvalForwardedProps {
25
+ projectId?: string;
26
+ conversationId?: string;
27
+ branchId?: string;
28
+ model?: string;
29
+ runtimeOverrides?: {
30
+ allowedTools?: string[];
31
+ maxSteps?: number;
32
+ };
33
+ }
34
+ /** Input accepted by `buildAgentServiceEvalRequestBody`. */
35
+ export interface BuildAgentServiceEvalRequestBodyInput {
36
+ exampleId: string;
37
+ input: unknown;
38
+ metadata?: Record<string, unknown>;
39
+ projectId?: string | null;
40
+ conversationId?: string | null;
41
+ branchId?: string | null;
42
+ model?: string | null;
43
+ allowedTools?: string[];
44
+ forceRuntimeOverrides?: boolean;
45
+ maxSteps?: number;
46
+ }
47
+ /** AG-UI request body sent to an agent-service endpoint. */
48
+ export interface AgentServiceEvalRequestBody {
49
+ threadId: string;
50
+ runId: string;
51
+ state: Record<string, unknown>;
52
+ tools: [];
53
+ context: [];
54
+ forwardedProps?: {
55
+ veryfront: AgentServiceEvalForwardedProps;
56
+ };
57
+ messages: Array<{
58
+ id: string;
59
+ role: "user";
60
+ content: string;
61
+ }>;
62
+ }
63
+ /** Configuration for the live agent-service eval adapter. */
64
+ export interface AgentServiceEvalAdapterConfig {
65
+ endpoint?: string;
66
+ authToken: string;
67
+ projectId?: string | null;
68
+ conversationId?: string | null;
69
+ branchId?: string | null;
70
+ model?: string | null;
71
+ allowedTools?: string[];
72
+ forceRuntimeOverrides?: boolean;
73
+ maxSteps?: number;
74
+ requestTimeoutMs?: number;
75
+ progressThrottleMs?: number;
76
+ fetch?: (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
77
+ now?: () => number;
78
+ onProgress?: (snapshot: AgUiSseProgressSnapshot, context: EvalAgentAdapterContext) => void;
79
+ }
80
+ /** Resolve environment values for live agent-service eval execution. */
81
+ export declare function resolveAgentServiceEvalEnvironment(env?: AgentServiceEvalEnvironmentInput): AgentServiceEvalEnvironment;
82
+ /** Evaluate whether the required live agent-service eval environment is present. */
83
+ export declare function evaluateAgentServiceEvalEnvironment(env?: AgentServiceEvalEnvironmentInput, resolvedApiUrl?: string): AgentServiceEvalEnvironmentPreflightResult;
84
+ /** Build the AG-UI request body for a single eval example. */
85
+ export declare function buildAgentServiceEvalRequestBody(input: BuildAgentServiceEvalRequestBodyInput): AgentServiceEvalRequestBody;
86
+ /** Create an `EvalAgentAdapter` that executes examples against an AG-UI agent-service endpoint. */
87
+ export declare function createAgentServiceEvalAdapter(config: AgentServiceEvalAdapterConfig): EvalAgentAdapter;
88
+ //# sourceMappingURL=agent-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-service.d.ts","sourceRoot":"","sources":["../../../src/src/eval/agent-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,274 @@
1
+ import "../../_dnt.polyfills.js";
2
+ import * as dntShim from "../../_dnt.shims.js";
3
+ import { agUiSseEventTypes, getAgUiSseStringField, parseAgentServiceConfig, parseAgUiSseResponse, } from "../agent/index.js";
4
+ /** Default local AG-UI endpoint used by agent-service evals. */
5
+ export const DEFAULT_AGENT_SERVICE_EVAL_ENDPOINT = "http://127.0.0.1:3001/api/ag-ui";
6
+ function readString(value) {
7
+ return typeof value === "string" && value.length > 0 ? value : undefined;
8
+ }
9
+ function readNumber(value) {
10
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
11
+ }
12
+ function readStringArray(value) {
13
+ return Array.isArray(value) && value.every((entry) => typeof entry === "string")
14
+ ? [...value]
15
+ : undefined;
16
+ }
17
+ function isRecord(value) {
18
+ return value !== null && typeof value === "object" && !Array.isArray(value);
19
+ }
20
+ function stringifyPromptInput(input) {
21
+ if (typeof input === "string")
22
+ return input;
23
+ if (isRecord(input)) {
24
+ const prompt = readString(input.prompt) ?? readString(input.message) ?? readString(input.input);
25
+ if (prompt)
26
+ return prompt;
27
+ }
28
+ return JSON.stringify(input);
29
+ }
30
+ function getInputMetadata(input) {
31
+ if (!isRecord(input) || !isRecord(input.metadata))
32
+ return {};
33
+ return { ...input.metadata };
34
+ }
35
+ function getRequestOverrides(input) {
36
+ const record = isRecord(input.input) ? input.input : {};
37
+ return {
38
+ projectId: input.projectId ?? readString(record.projectId) ?? null,
39
+ conversationId: input.conversationId ?? readString(record.conversationId) ?? null,
40
+ branchId: input.branchId ?? readString(record.branchId) ?? null,
41
+ model: input.model ?? readString(record.model) ?? null,
42
+ allowedTools: input.allowedTools ?? readStringArray(record.allowedTools),
43
+ forceRuntimeOverrides: input.forceRuntimeOverrides ?? record.forceRuntimeOverrides === true,
44
+ maxSteps: input.maxSteps ?? readNumber(record.maxSteps),
45
+ };
46
+ }
47
+ function createVeryfrontForwardedProps(input) {
48
+ const overrides = getRequestOverrides(input);
49
+ const veryfront = {};
50
+ if (overrides.projectId)
51
+ veryfront.projectId = overrides.projectId;
52
+ if (overrides.conversationId)
53
+ veryfront.conversationId = overrides.conversationId;
54
+ if (overrides.branchId)
55
+ veryfront.branchId = overrides.branchId;
56
+ if (overrides.model)
57
+ veryfront.model = overrides.model;
58
+ const shouldForwardRuntimeOverrides = !!overrides.allowedTools ||
59
+ overrides.forceRuntimeOverrides ||
60
+ overrides.maxSteps !== undefined;
61
+ if (shouldForwardRuntimeOverrides) {
62
+ veryfront.runtimeOverrides = {
63
+ ...(overrides.allowedTools ? { allowedTools: overrides.allowedTools } : {}),
64
+ ...(overrides.maxSteps !== undefined ? { maxSteps: overrides.maxSteps } : {}),
65
+ };
66
+ }
67
+ return Object.keys(veryfront).length > 0 ? veryfront : null;
68
+ }
69
+ function createHeaders(authToken) {
70
+ return {
71
+ "Content-Type": "application/json",
72
+ Authorization: `Bearer ${authToken}`,
73
+ };
74
+ }
75
+ function getNow(config) {
76
+ return config.now?.() ?? Date.now();
77
+ }
78
+ function stringifyError(value) {
79
+ if (typeof value === "string" && value.length > 0)
80
+ return value;
81
+ if (isRecord(value)) {
82
+ const message = readString(value.message) ?? readString(value.error);
83
+ if (message)
84
+ return message;
85
+ }
86
+ try {
87
+ return JSON.stringify(value);
88
+ }
89
+ catch {
90
+ return String(value);
91
+ }
92
+ }
93
+ function getToolResultError(event) {
94
+ return stringifyError(event.result) ?? stringifyError(event.content) ?? "Tool call failed";
95
+ }
96
+ function createToolCalls(events) {
97
+ const toolCalls = new Map();
98
+ for (const [index, event] of events.entries()) {
99
+ const type = getAgUiSseStringField(event, "type");
100
+ if (type === agUiSseEventTypes.toolCallStart) {
101
+ const name = getAgUiSseStringField(event, "toolCallName");
102
+ if (!name)
103
+ continue;
104
+ const id = getAgUiSseStringField(event, "toolCallId");
105
+ const key = id ?? `name:${name}`;
106
+ const existing = toolCalls.get(key);
107
+ toolCalls.set(key, {
108
+ name,
109
+ status: existing?.status ?? "ok",
110
+ ...(existing?.error ? { error: existing.error } : {}),
111
+ ...(existing?.metadata ? { metadata: existing.metadata } : {}),
112
+ });
113
+ continue;
114
+ }
115
+ if (type === agUiSseEventTypes.toolCallResult) {
116
+ const id = getAgUiSseStringField(event, "toolCallId");
117
+ const toolName = getAgUiSseStringField(event, "toolCallName");
118
+ const key = id ?? (toolName ? `name:${toolName}` : `result:${index}`);
119
+ const existing = toolCalls.get(key);
120
+ const failed = event.isError === true;
121
+ toolCalls.set(key, {
122
+ name: existing?.name ?? toolName ?? "tool",
123
+ status: failed ? "error" : existing?.status ?? "ok",
124
+ ...(failed ? { error: getToolResultError(event) } : {}),
125
+ ...(existing?.metadata ? { metadata: existing.metadata } : {}),
126
+ });
127
+ }
128
+ }
129
+ return [...toolCalls.values()];
130
+ }
131
+ function createRunOutput(run) {
132
+ return {
133
+ text: run.text,
134
+ agUi: {
135
+ responseStatus: run.responseStatus,
136
+ eventTypes: run.eventTypes,
137
+ runError: run.runError,
138
+ },
139
+ };
140
+ }
141
+ function createRequestInit(config, body) {
142
+ return {
143
+ method: "POST",
144
+ headers: createHeaders(config.authToken),
145
+ body: JSON.stringify(body),
146
+ ...(config.requestTimeoutMs ? { signal: AbortSignal.timeout(config.requestTimeoutMs) } : {}),
147
+ };
148
+ }
149
+ /** Resolve environment values for live agent-service eval execution. */
150
+ export function resolveAgentServiceEvalEnvironment(env = {}) {
151
+ return {
152
+ endpoint: typeof env.AG_UI_EVAL_ENDPOINT === "string"
153
+ ? env.AG_UI_EVAL_ENDPOINT
154
+ : DEFAULT_AGENT_SERVICE_EVAL_ENDPOINT,
155
+ authToken: typeof env.VERYFRONT_TOKEN === "string" ? env.VERYFRONT_TOKEN : "",
156
+ apiUrl: typeof env.VERYFRONT_API_URL === "string"
157
+ ? env.VERYFRONT_API_URL
158
+ : parseAgentServiceConfig(env).VERYFRONT_API_URL,
159
+ ...(typeof env.AG_UI_EVAL_PROJECT_ID === "string"
160
+ ? { projectId: env.AG_UI_EVAL_PROJECT_ID }
161
+ : {}),
162
+ ...(typeof env.AG_UI_EVAL_BRANCH_ID === "string" ? { branchId: env.AG_UI_EVAL_BRANCH_ID } : {}),
163
+ ...(typeof env.AG_UI_EVAL_MODEL === "string" ? { model: env.AG_UI_EVAL_MODEL } : {}),
164
+ };
165
+ }
166
+ /** Evaluate whether the required live agent-service eval environment is present. */
167
+ export function evaluateAgentServiceEvalEnvironment(env = {}, resolvedApiUrl = parseAgentServiceConfig(env).VERYFRONT_API_URL) {
168
+ const messages = [`Resolved VERYFRONT_API_URL: ${resolvedApiUrl}`];
169
+ let hasBlockers = false;
170
+ if (typeof env.VERYFRONT_TOKEN !== "string" || env.VERYFRONT_TOKEN.length === 0) {
171
+ hasBlockers = true;
172
+ messages.push("BLOCKER: VERYFRONT_TOKEN is missing");
173
+ }
174
+ if (typeof env.AG_UI_EVAL_PROJECT_ID !== "string" || env.AG_UI_EVAL_PROJECT_ID.length === 0) {
175
+ hasBlockers = true;
176
+ messages.push("BLOCKER: AG_UI_EVAL_PROJECT_ID is missing");
177
+ }
178
+ messages.push(`Agent-service eval preflight: ${hasBlockers ? "FAIL" : "PASS"}`);
179
+ return { ok: !hasBlockers, resolvedApiUrl, messages };
180
+ }
181
+ /** Build the AG-UI request body for a single eval example. */
182
+ export function buildAgentServiceEvalRequestBody(input) {
183
+ const veryfront = createVeryfrontForwardedProps(input);
184
+ const metadata = {
185
+ ...getInputMetadata(input.input),
186
+ ...(input.metadata ?? {}),
187
+ };
188
+ return {
189
+ threadId: dntShim.crypto.randomUUID(),
190
+ runId: `eval-run-${dntShim.crypto.randomUUID()}`,
191
+ state: {
192
+ evalCase: input.exampleId,
193
+ ...metadata,
194
+ },
195
+ tools: [],
196
+ context: [],
197
+ ...(veryfront ? { forwardedProps: { veryfront } } : {}),
198
+ messages: [
199
+ {
200
+ id: dntShim.crypto.randomUUID(),
201
+ role: "user",
202
+ content: stringifyPromptInput(input.input),
203
+ },
204
+ ],
205
+ };
206
+ }
207
+ /** Create an `EvalAgentAdapter` that executes examples against an AG-UI agent-service endpoint. */
208
+ export function createAgentServiceEvalAdapter(config) {
209
+ const requestFetch = config.fetch ?? fetch;
210
+ const endpoint = config.endpoint ?? DEFAULT_AGENT_SERVICE_EVAL_ENDPOINT;
211
+ return async (context) => {
212
+ const started = getNow(config);
213
+ const body = buildAgentServiceEvalRequestBody({
214
+ exampleId: context.example.id,
215
+ input: context.example.input,
216
+ metadata: context.example.metadata,
217
+ projectId: config.projectId,
218
+ conversationId: config.conversationId,
219
+ branchId: config.branchId,
220
+ model: config.model,
221
+ allowedTools: config.allowedTools,
222
+ forceRuntimeOverrides: config.forceRuntimeOverrides,
223
+ maxSteps: config.maxSteps,
224
+ });
225
+ try {
226
+ const parseOptions = {
227
+ ...(config.progressThrottleMs !== undefined
228
+ ? { progressThrottleMs: config.progressThrottleMs }
229
+ : {}),
230
+ ...(config.onProgress
231
+ ? { onProgress: (snapshot) => config.onProgress?.(snapshot, context) }
232
+ : {}),
233
+ };
234
+ const response = await requestFetch(endpoint, createRequestInit(config, body));
235
+ const run = await parseAgUiSseResponse(response, parseOptions);
236
+ const completed = response.ok && run.runError === null &&
237
+ run.eventTypes.includes(agUiSseEventTypes.runFinished);
238
+ const output = createRunOutput(run);
239
+ return {
240
+ text: run.text,
241
+ output,
242
+ trace: {
243
+ events: run.events,
244
+ toolCalls: createToolCalls(run.events),
245
+ },
246
+ durationMs: getNow(config) - started,
247
+ completed,
248
+ ...(!completed
249
+ ? { error: run.runError ?? `AG-UI response failed with status ${response.status}` }
250
+ : {}),
251
+ };
252
+ }
253
+ catch (error) {
254
+ return {
255
+ text: "",
256
+ output: {
257
+ text: "",
258
+ agUi: {
259
+ responseStatus: 0,
260
+ eventTypes: [],
261
+ runError: error instanceof Error ? error.message : String(error),
262
+ },
263
+ },
264
+ trace: {
265
+ events: [],
266
+ toolCalls: [],
267
+ },
268
+ durationMs: getNow(config) - started,
269
+ completed: false,
270
+ error: error instanceof Error ? error.message : String(error),
271
+ };
272
+ }
273
+ };
274
+ }
@@ -18,6 +18,28 @@
18
18
  * ],
19
19
  * });
20
20
  * ```
21
+ *
22
+ * @example Live agent-service eval
23
+ * ```ts
24
+ * import { datasets, evalAgent, metrics, runEval } from "veryfront/eval";
25
+ * import { createAgentServiceEvalAdapter } from "veryfront/eval/agent-service";
26
+ *
27
+ * const definition = evalAgent({
28
+ * target: "agent:veryfront",
29
+ * dataset: datasets.inline([{ id: "smoke", input: "List project files." }]),
30
+ * metrics: [metrics.agent.noFailedTools().gate()],
31
+ * });
32
+ *
33
+ * const report = await runEval(definition, {
34
+ * adapters: {
35
+ * agent: createAgentServiceEvalAdapter({
36
+ * endpoint: "http://127.0.0.1:3001/api/ag-ui",
37
+ * authToken: "<TOKEN>",
38
+ * projectId: "<PROJECT_ID>",
39
+ * }),
40
+ * },
41
+ * });
42
+ * ```
21
43
  */
22
44
  import "../../_dnt.polyfills.js";
23
45
  export { datasets } from "./datasets.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/eval/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,yBAAyB,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,gBAAgB,EAChB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAChG,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,sBAAsB,EACtB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,SAAS,EACT,SAAS,EACT,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,+BAA+B,EAC/B,iBAAiB,EACjB,OAAO,EACP,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/eval/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,yBAAyB,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,gBAAgB,EAChB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAChG,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,sBAAsB,EACtB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,SAAS,EACT,SAAS,EACT,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,+BAA+B,EAC/B,iBAAiB,EACjB,OAAO,EACP,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
@@ -18,6 +18,28 @@
18
18
  * ],
19
19
  * });
20
20
  * ```
21
+ *
22
+ * @example Live agent-service eval
23
+ * ```ts
24
+ * import { datasets, evalAgent, metrics, runEval } from "veryfront/eval";
25
+ * import { createAgentServiceEvalAdapter } from "veryfront/eval/agent-service";
26
+ *
27
+ * const definition = evalAgent({
28
+ * target: "agent:veryfront",
29
+ * dataset: datasets.inline([{ id: "smoke", input: "List project files." }]),
30
+ * metrics: [metrics.agent.noFailedTools().gate()],
31
+ * });
32
+ *
33
+ * const report = await runEval(definition, {
34
+ * adapters: {
35
+ * agent: createAgentServiceEvalAdapter({
36
+ * endpoint: "http://127.0.0.1:3001/api/ag-ui",
37
+ * authToken: "<TOKEN>",
38
+ * projectId: "<PROJECT_ID>",
39
+ * }),
40
+ * },
41
+ * });
42
+ * ```
21
43
  */
22
44
  import "../../_dnt.polyfills.js";
23
45
  export { datasets } from "./datasets.js";
@@ -1,3 +1,3 @@
1
1
  /** Shared version value. */
2
- export declare const VERSION = "0.1.876";
2
+ export declare const VERSION = "0.1.877";
3
3
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
3
  /** Shared version value. */
4
- export const VERSION = "0.1.876";
4
+ export const VERSION = "0.1.877";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.876",
3
+ "version": "0.1.877",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",
@@ -77,14 +77,14 @@
77
77
  "import": "./esm/src/agent/identity-contracts.js",
78
78
  "types": "./esm/src/agent/identity-contracts.d.ts"
79
79
  },
80
- "./agent/testing": {
81
- "import": "./esm/src/agent/testing/index.js",
82
- "types": "./esm/src/agent/testing/index.d.ts"
83
- },
84
80
  "./eval": {
85
81
  "import": "./esm/src/eval/index.js",
86
82
  "types": "./esm/src/eval/index.d.ts"
87
83
  },
84
+ "./eval/agent-service": {
85
+ "import": "./esm/src/eval/agent-service.js",
86
+ "types": "./esm/src/eval/agent-service.d.ts"
87
+ },
88
88
  "./channels/control-plane": {
89
89
  "import": "./esm/src/channels/control-plane.js",
90
90
  "types": "./esm/src/channels/control-plane.d.ts"
@@ -1,53 +0,0 @@
1
- import type { Agent, AgentResponse, Message } from "../types.js";
2
- /** Public API contract for test case. */
3
- export interface TestCase {
4
- /** Test name */
5
- name: string;
6
- /** Input to agent */
7
- input: string | Message[];
8
- /** Expected output pattern (regex or string) */
9
- expected?: RegExp | string;
10
- /** Expected tool calls */
11
- expectToolCalls?: string[];
12
- /** Maximum execution time (ms) */
13
- timeout?: number;
14
- /** Custom validator */
15
- validate?: (response: AgentResponse) => boolean | Promise<boolean>;
16
- }
17
- /** Result returned from test. */
18
- export interface TestResult {
19
- /** Test case name */
20
- name: string;
21
- /** Pass/fail */
22
- passed: boolean;
23
- /** Response from agent */
24
- response?: AgentResponse;
25
- /** Error if test failed */
26
- error?: string;
27
- /** Execution time */
28
- executionTime: number;
29
- /** Tool calls made */
30
- toolCalls: string[];
31
- }
32
- /** Public API contract for test suite. */
33
- export interface TestSuite {
34
- /** Suite name */
35
- name: string;
36
- /** Test results */
37
- results: TestResult[];
38
- /** Overall pass/fail */
39
- passed: boolean;
40
- /** Total execution time */
41
- totalTime: number;
42
- }
43
- /** Test agent helper. */
44
- export declare function testAgent(agent: Agent, testCases: TestCase[]): Promise<TestSuite>;
45
- /** Print test results helper. */
46
- export declare function printTestResults(suite: TestSuite): void;
47
- /** Assert contains helper. */
48
- export declare function assertContains(response: AgentResponse, text: string): boolean;
49
- /** Assert tool called helper. */
50
- export declare function assertToolCalled(response: AgentResponse, toolName: string): boolean;
51
- /** Assert completed helper. */
52
- export declare function assertCompleted(response: AgentResponse): boolean;
53
- //# sourceMappingURL=agent-tester.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-tester.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/testing/agent-tester.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEjE,yCAAyC;AACzC,MAAM,WAAW,QAAQ;IACvB,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IAEb,qBAAqB;IACrB,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;IAE1B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE3B,0BAA0B;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpE;AAED,iCAAiC;AACjC,MAAM,WAAW,UAAU;IACzB,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IAEb,gBAAgB;IAChB,MAAM,EAAE,OAAO,CAAC;IAEhB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,aAAa,CAAC;IAEzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAC;IAEtB,sBAAsB;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,0CAA0C;AAC1C,MAAM,WAAW,SAAS;IACxB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IAEb,mBAAmB;IACnB,OAAO,EAAE,UAAU,EAAE,CAAC;IAEtB,wBAAwB;IACxB,MAAM,EAAE,OAAO,CAAC;IAEhB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yBAAyB;AACzB,wBAAsB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAWvF;AA6FD,iCAAiC;AACjC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAmBvD;AAED,8BAA8B;AAC9B,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED,iCAAiC;AACjC,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnF;AAED,+BAA+B;AAC/B,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAEhE"}