@evalstudio/core 0.2.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 (69) hide show
  1. package/dist/connector.d.ts +101 -0
  2. package/dist/connector.d.ts.map +1 -0
  3. package/dist/connector.js +477 -0
  4. package/dist/connector.js.map +1 -0
  5. package/dist/eval.d.ts +66 -0
  6. package/dist/eval.d.ts.map +1 -0
  7. package/dist/eval.js +188 -0
  8. package/dist/eval.js.map +1 -0
  9. package/dist/evaluator.d.ts +37 -0
  10. package/dist/evaluator.d.ts.map +1 -0
  11. package/dist/evaluator.js +121 -0
  12. package/dist/evaluator.js.map +1 -0
  13. package/dist/execution.d.ts +29 -0
  14. package/dist/execution.d.ts.map +1 -0
  15. package/dist/execution.js +94 -0
  16. package/dist/execution.js.map +1 -0
  17. package/dist/index.d.ts +17 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +16 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/llm-client.d.ts +31 -0
  22. package/dist/llm-client.d.ts.map +1 -0
  23. package/dist/llm-client.js +121 -0
  24. package/dist/llm-client.js.map +1 -0
  25. package/dist/llm-provider.d.ts +46 -0
  26. package/dist/llm-provider.d.ts.map +1 -0
  27. package/dist/llm-provider.js +199 -0
  28. package/dist/llm-provider.js.map +1 -0
  29. package/dist/persona-generator.d.ts +34 -0
  30. package/dist/persona-generator.d.ts.map +1 -0
  31. package/dist/persona-generator.js +99 -0
  32. package/dist/persona-generator.js.map +1 -0
  33. package/dist/persona.d.ts +28 -0
  34. package/dist/persona.d.ts.map +1 -0
  35. package/dist/persona.js +100 -0
  36. package/dist/persona.js.map +1 -0
  37. package/dist/project.d.ts +43 -0
  38. package/dist/project.d.ts.map +1 -0
  39. package/dist/project.js +114 -0
  40. package/dist/project.js.map +1 -0
  41. package/dist/prompt.d.ts +31 -0
  42. package/dist/prompt.d.ts.map +1 -0
  43. package/dist/prompt.js +73 -0
  44. package/dist/prompt.js.map +1 -0
  45. package/dist/run-processor.d.ts +127 -0
  46. package/dist/run-processor.d.ts.map +1 -0
  47. package/dist/run-processor.js +495 -0
  48. package/dist/run-processor.js.map +1 -0
  49. package/dist/run.d.ts +101 -0
  50. package/dist/run.d.ts.map +1 -0
  51. package/dist/run.js +279 -0
  52. package/dist/run.js.map +1 -0
  53. package/dist/scenario.d.ts +66 -0
  54. package/dist/scenario.d.ts.map +1 -0
  55. package/dist/scenario.js +110 -0
  56. package/dist/scenario.js.map +1 -0
  57. package/dist/status.d.ts +10 -0
  58. package/dist/status.d.ts.map +1 -0
  59. package/dist/status.js +15 -0
  60. package/dist/status.js.map +1 -0
  61. package/dist/storage.d.ts +11 -0
  62. package/dist/storage.d.ts.map +1 -0
  63. package/dist/storage.js +57 -0
  64. package/dist/storage.js.map +1 -0
  65. package/dist/types.d.ts +46 -0
  66. package/dist/types.d.ts.map +1 -0
  67. package/dist/types.js +26 -0
  68. package/dist/types.js.map +1 -0
  69. package/package.json +51 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../src/eval.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,YAAY,EAAE,OAAO,EAAE,CAAC;AAExB,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI;IAC7C,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAoBD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CA+CvD;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAGpD;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,IAAI,GAAG,SAAS,CAKlB;AAED,wBAAgB,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CAMpD;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,MAAM,GACT,iBAAiB,GAAG,SAAS,CA8C/B;AAED,wBAAgB,UAAU,CACxB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,eAAe,GACrB,IAAI,GAAG,SAAS,CAkDlB;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAe9C;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAU9D"}
package/dist/eval.js ADDED
@@ -0,0 +1,188 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { getConnector } from "./connector.js";
5
+ import { getProject } from "./project.js";
6
+ import { deleteRunsByEval } from "./run.js";
7
+ import { getScenario } from "./scenario.js";
8
+ import { getStorageDir } from "./storage.js";
9
+ function getStoragePath() {
10
+ return join(getStorageDir(), "evals.json");
11
+ }
12
+ function loadEvals() {
13
+ const path = getStoragePath();
14
+ if (!existsSync(path)) {
15
+ return [];
16
+ }
17
+ const data = readFileSync(path, "utf-8");
18
+ return JSON.parse(data);
19
+ }
20
+ function saveEvals(evals) {
21
+ const path = getStoragePath();
22
+ writeFileSync(path, JSON.stringify(evals, null, 2));
23
+ }
24
+ export function createEval(input) {
25
+ const project = getProject(input.projectId);
26
+ if (!project) {
27
+ throw new Error(`Project with id "${input.projectId}" not found`);
28
+ }
29
+ // Validate connector (required)
30
+ const connector = getConnector(input.connectorId);
31
+ if (!connector) {
32
+ throw new Error(`Connector with id "${input.connectorId}" not found`);
33
+ }
34
+ if (connector.projectId !== input.projectId) {
35
+ throw new Error("Connector does not belong to the specified project");
36
+ }
37
+ // Validate scenarios (required, at least one)
38
+ if (!input.scenarioIds || input.scenarioIds.length === 0) {
39
+ throw new Error("At least one scenario is required");
40
+ }
41
+ for (const scenarioId of input.scenarioIds) {
42
+ const scenario = getScenario(scenarioId);
43
+ if (!scenario) {
44
+ throw new Error(`Scenario with id "${scenarioId}" not found`);
45
+ }
46
+ if (scenario.projectId !== input.projectId) {
47
+ throw new Error("Scenario does not belong to the specified project");
48
+ }
49
+ }
50
+ const evals = loadEvals();
51
+ const now = new Date().toISOString();
52
+ const evalItem = {
53
+ id: randomUUID(),
54
+ projectId: input.projectId,
55
+ name: input.name,
56
+ input: input.input ?? [],
57
+ scenarioIds: input.scenarioIds,
58
+ connectorId: input.connectorId,
59
+ createdAt: now,
60
+ updatedAt: now,
61
+ };
62
+ evals.push(evalItem);
63
+ saveEvals(evals);
64
+ return evalItem;
65
+ }
66
+ export function getEval(id) {
67
+ const evals = loadEvals();
68
+ return evals.find((e) => e.id === id);
69
+ }
70
+ export function getEvalByScenario(projectId, scenarioId) {
71
+ const evals = loadEvals();
72
+ return evals.find((e) => e.projectId === projectId && e.scenarioIds.includes(scenarioId));
73
+ }
74
+ export function listEvals(projectId) {
75
+ const evals = loadEvals();
76
+ if (projectId) {
77
+ return evals.filter((e) => e.projectId === projectId);
78
+ }
79
+ return evals;
80
+ }
81
+ export function getEvalWithRelations(id) {
82
+ const evalItem = getEval(id);
83
+ if (!evalItem) {
84
+ return undefined;
85
+ }
86
+ // Fetch all scenarios (at least one is required)
87
+ const scenarios = [];
88
+ for (const scenarioId of evalItem.scenarioIds) {
89
+ const scenario = getScenario(scenarioId);
90
+ if (!scenario) {
91
+ continue; // Skip missing scenarios (shouldn't happen in normal operation)
92
+ }
93
+ scenarios.push({
94
+ id: scenario.id,
95
+ name: scenario.name,
96
+ instructions: scenario.instructions,
97
+ messages: scenario.messages,
98
+ maxMessages: scenario.maxMessages,
99
+ successCriteria: scenario.successCriteria,
100
+ failureCriteria: scenario.failureCriteria,
101
+ failureCriteriaMode: scenario.failureCriteriaMode,
102
+ });
103
+ }
104
+ if (scenarios.length === 0) {
105
+ return undefined; // At least one scenario must exist for a valid eval
106
+ }
107
+ const result = {
108
+ ...evalItem,
109
+ scenarios,
110
+ };
111
+ // Always populate connector (it's required on Eval)
112
+ const connector = getConnector(evalItem.connectorId);
113
+ if (connector) {
114
+ result.connector = {
115
+ id: connector.id,
116
+ name: connector.name,
117
+ type: connector.type,
118
+ baseUrl: connector.baseUrl,
119
+ };
120
+ }
121
+ return result;
122
+ }
123
+ export function updateEval(id, input) {
124
+ const evals = loadEvals();
125
+ const index = evals.findIndex((e) => e.id === id);
126
+ if (index === -1) {
127
+ return undefined;
128
+ }
129
+ const evalItem = evals[index];
130
+ // Validate connector if being updated
131
+ if (input.connectorId) {
132
+ const connector = getConnector(input.connectorId);
133
+ if (!connector) {
134
+ throw new Error(`Connector with id "${input.connectorId}" not found`);
135
+ }
136
+ if (connector.projectId !== evalItem.projectId) {
137
+ throw new Error("Connector does not belong to the specified project");
138
+ }
139
+ }
140
+ // Validate scenarios if being updated
141
+ if (input.scenarioIds) {
142
+ if (input.scenarioIds.length === 0) {
143
+ throw new Error("At least one scenario is required");
144
+ }
145
+ for (const scenarioId of input.scenarioIds) {
146
+ const scenario = getScenario(scenarioId);
147
+ if (!scenario) {
148
+ throw new Error(`Scenario with id "${scenarioId}" not found`);
149
+ }
150
+ if (scenario.projectId !== evalItem.projectId) {
151
+ throw new Error("Scenario does not belong to the specified project");
152
+ }
153
+ }
154
+ }
155
+ const updated = {
156
+ ...evalItem,
157
+ name: input.name ?? evalItem.name,
158
+ input: input.input ?? evalItem.input,
159
+ scenarioIds: input.scenarioIds ?? evalItem.scenarioIds,
160
+ connectorId: input.connectorId ?? evalItem.connectorId,
161
+ updatedAt: new Date().toISOString(),
162
+ };
163
+ evals[index] = updated;
164
+ saveEvals(evals);
165
+ return updated;
166
+ }
167
+ export function deleteEval(id) {
168
+ const evals = loadEvals();
169
+ const index = evals.findIndex((e) => e.id === id);
170
+ if (index === -1) {
171
+ return false;
172
+ }
173
+ // Delete associated runs first
174
+ deleteRunsByEval(id);
175
+ evals.splice(index, 1);
176
+ saveEvals(evals);
177
+ return true;
178
+ }
179
+ export function deleteEvalsByProject(projectId) {
180
+ const evals = loadEvals();
181
+ const filtered = evals.filter((e) => e.projectId !== projectId);
182
+ const deletedCount = evals.length - filtered.length;
183
+ if (deletedCount > 0) {
184
+ saveEvals(filtered);
185
+ }
186
+ return deletedCount;
187
+ }
188
+ //# sourceMappingURL=eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../src/eval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { Message } from "./types.js";
2
+ /**
3
+ * Result of evaluating conversation against success/failure criteria
4
+ */
5
+ export interface CriteriaEvaluationResult {
6
+ /** Whether the success criteria has been met */
7
+ successMet: boolean;
8
+ /** Whether the failure criteria has been met */
9
+ failureMet: boolean;
10
+ /** Confidence score (0-1) for the evaluation decision */
11
+ confidence: number;
12
+ /** Reasoning for the evaluation decision */
13
+ reasoning: string;
14
+ /** Raw response from the LLM evaluator */
15
+ rawResponse?: string;
16
+ }
17
+ /**
18
+ * Input for criteria evaluation
19
+ */
20
+ export interface EvaluateCriteriaInput {
21
+ /** The conversation history to evaluate */
22
+ messages: Message[];
23
+ /** Success criteria to check against */
24
+ successCriteria?: string;
25
+ /** Failure criteria to check against */
26
+ failureCriteria?: string;
27
+ /** LLM provider ID to use for evaluation */
28
+ llmProviderId: string;
29
+ /** Model to use (optional, defaults based on provider) */
30
+ model?: string;
31
+ }
32
+ /**
33
+ * Evaluates conversation against success/failure criteria using an LLM judge.
34
+ * Returns the evaluation result indicating whether criteria have been met.
35
+ */
36
+ export declare function evaluateCriteria(input: EvaluateCriteriaInput): Promise<CriteriaEvaluationResult>;
37
+ //# sourceMappingURL=evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../src/evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,gDAAgD;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAmED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,wBAAwB,CAAC,CA6DnC"}
@@ -0,0 +1,121 @@
1
+ import { getLLMProvider } from "./llm-provider.js";
2
+ import { chatCompletion } from "./llm-client.js";
3
+ /**
4
+ * Validates and extracts the evaluation result from parsed JSON
5
+ */
6
+ function validateEvaluationResult(parsed) {
7
+ if (typeof parsed !== "object" || parsed === null ||
8
+ typeof parsed.successMet !== "boolean" ||
9
+ typeof parsed.failureMet !== "boolean" ||
10
+ typeof parsed.confidence !== "number" ||
11
+ parsed.confidence < 0 ||
12
+ parsed.confidence > 1 ||
13
+ typeof parsed.reasoning !== "string") {
14
+ throw new Error("Invalid evaluation result shape");
15
+ }
16
+ const p = parsed;
17
+ return {
18
+ successMet: p.successMet,
19
+ failureMet: p.failureMet,
20
+ confidence: p.confidence,
21
+ reasoning: p.reasoning,
22
+ };
23
+ }
24
+ /**
25
+ * Formats conversation messages for evaluation
26
+ */
27
+ function formatConversation(messages) {
28
+ return messages
29
+ .filter((m) => m.role !== "system")
30
+ .map((m) => {
31
+ const role = m.role === "assistant" ? "Agent" : "User";
32
+ const content = typeof m.content === "string" ? m.content : JSON.stringify(m.content);
33
+ return `${role}: ${content}`;
34
+ })
35
+ .join("\n\n");
36
+ }
37
+ /**
38
+ * Parses the LLM response into a CriteriaEvaluationResult
39
+ */
40
+ function parseEvaluationResponse(response) {
41
+ try {
42
+ // Try to extract JSON from the response
43
+ const jsonMatch = response.match(/\{[\s\S]*\}/);
44
+ if (!jsonMatch) {
45
+ throw new Error("No JSON found in response");
46
+ }
47
+ const parsed = JSON.parse(jsonMatch[0]);
48
+ const validated = validateEvaluationResult(parsed);
49
+ return validated;
50
+ }
51
+ catch {
52
+ // Default to inconclusive if parsing fails
53
+ return {
54
+ successMet: false,
55
+ failureMet: false,
56
+ confidence: 0,
57
+ reasoning: `Failed to parse evaluation response: ${response.slice(0, 200)}`,
58
+ };
59
+ }
60
+ }
61
+ /**
62
+ * Evaluates conversation against success/failure criteria using an LLM judge.
63
+ * Returns the evaluation result indicating whether criteria have been met.
64
+ */
65
+ export async function evaluateCriteria(input) {
66
+ const { messages, successCriteria, failureCriteria, llmProviderId, model } = input;
67
+ // If no criteria defined, return inconclusive
68
+ if (!successCriteria && !failureCriteria) {
69
+ return {
70
+ successMet: false,
71
+ failureMet: false,
72
+ confidence: 1,
73
+ reasoning: "No evaluation criteria defined",
74
+ };
75
+ }
76
+ // Get the LLM provider
77
+ const llmProvider = getLLMProvider(llmProviderId);
78
+ if (!llmProvider) {
79
+ throw new Error(`LLM Provider with id "${llmProviderId}" not found`);
80
+ }
81
+ // Format conversation and build messages
82
+ const conversation = formatConversation(messages);
83
+ const chatMessages = [
84
+ {
85
+ role: "system",
86
+ content: `You are an evaluation judge. Analyze conversations between a User and an Agent to determine if specific criteria have been met.
87
+
88
+ You must respond with a JSON object containing:
89
+ - successMet: boolean - whether the success criteria has been met
90
+ - failureMet: boolean - whether the failure criteria has been met
91
+ - confidence: number - your confidence level from 0.0 to 1.0
92
+ - reasoning: string - brief explanation of your evaluation decision
93
+
94
+ Respond ONLY with the JSON object, no additional text.`,
95
+ },
96
+ {
97
+ role: "user",
98
+ content: `## Conversation
99
+ ${conversation}
100
+
101
+ ## Evaluation Criteria
102
+
103
+ ### Success Criteria
104
+ ${successCriteria || "No success criteria defined."}
105
+
106
+ ### Failure Criteria
107
+ ${failureCriteria || "No failure criteria defined."}
108
+
109
+ Analyze the conversation and determine if the criteria have been met.`,
110
+ },
111
+ ];
112
+ // Invoke the LLM
113
+ const response = await chatCompletion(llmProvider, chatMessages, { model });
114
+ // Parse and return result
115
+ const result = parseEvaluationResponse(response.content);
116
+ return {
117
+ ...result,
118
+ rawResponse: response.content,
119
+ };
120
+ }
121
+ //# sourceMappingURL=evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../src/evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Execution represents a batch of runs created together from a single eval run.
3
+ * Each execution groups all runs (scenario/persona combinations) created at the same time.
4
+ */
5
+ export interface Execution {
6
+ /** Auto-increment integer ID (1, 2, 3, ...) */
7
+ id: number;
8
+ /** The project this execution belongs to */
9
+ projectId: string;
10
+ /** The eval that triggered this execution */
11
+ evalId: string;
12
+ /** When this execution was created */
13
+ createdAt: string;
14
+ }
15
+ export interface CreateExecutionInput {
16
+ projectId: string;
17
+ evalId: string;
18
+ }
19
+ /**
20
+ * Creates a new execution for a batch of runs.
21
+ */
22
+ export declare function createExecution(input: CreateExecutionInput): Execution;
23
+ export declare function getExecution(id: number): Execution | undefined;
24
+ export declare function listExecutions(evalId?: string): Execution[];
25
+ export declare function listExecutionsByProject(projectId: string): Execution[];
26
+ export declare function deleteExecution(id: number): boolean;
27
+ export declare function deleteExecutionsByEval(evalId: string): number;
28
+ export declare function deleteExecutionsByProject(projectId: string): number;
29
+ //# sourceMappingURL=execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAiCD;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,CAetE;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAG9D;AAED,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAQ3D;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,CAKtE;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAYnD;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAU7D;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAUnE"}
@@ -0,0 +1,94 @@
1
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { getStorageDir } from "./storage.js";
4
+ function getStoragePath() {
5
+ return join(getStorageDir(), "executions.json");
6
+ }
7
+ function loadExecutions() {
8
+ const path = getStoragePath();
9
+ if (!existsSync(path)) {
10
+ return [];
11
+ }
12
+ const data = readFileSync(path, "utf-8");
13
+ return JSON.parse(data);
14
+ }
15
+ function saveExecutions(executions) {
16
+ const path = getStoragePath();
17
+ writeFileSync(path, JSON.stringify(executions, null, 2));
18
+ }
19
+ /**
20
+ * Get the next auto-increment ID for executions within a project.
21
+ * Finds the maximum existing ID for the project and returns max + 1.
22
+ */
23
+ function getNextId(executions, projectId) {
24
+ const projectExecutions = executions.filter((e) => e.projectId === projectId);
25
+ if (projectExecutions.length === 0) {
26
+ return 1;
27
+ }
28
+ const maxId = Math.max(...projectExecutions.map((e) => e.id));
29
+ return maxId + 1;
30
+ }
31
+ /**
32
+ * Creates a new execution for a batch of runs.
33
+ */
34
+ export function createExecution(input) {
35
+ const executions = loadExecutions();
36
+ const now = new Date().toISOString();
37
+ const execution = {
38
+ id: getNextId(executions, input.projectId),
39
+ projectId: input.projectId,
40
+ evalId: input.evalId,
41
+ createdAt: now,
42
+ };
43
+ executions.push(execution);
44
+ saveExecutions(executions);
45
+ return execution;
46
+ }
47
+ export function getExecution(id) {
48
+ const executions = loadExecutions();
49
+ return executions.find((e) => e.id === id);
50
+ }
51
+ export function listExecutions(evalId) {
52
+ const executions = loadExecutions();
53
+ if (evalId) {
54
+ return executions
55
+ .filter((e) => e.evalId === evalId)
56
+ .sort((a, b) => b.id - a.id);
57
+ }
58
+ return executions.sort((a, b) => b.id - a.id);
59
+ }
60
+ export function listExecutionsByProject(projectId) {
61
+ const executions = loadExecutions();
62
+ return executions
63
+ .filter((e) => e.projectId === projectId)
64
+ .sort((a, b) => b.id - a.id);
65
+ }
66
+ export function deleteExecution(id) {
67
+ const executions = loadExecutions();
68
+ const index = executions.findIndex((e) => e.id === id);
69
+ if (index === -1) {
70
+ return false;
71
+ }
72
+ executions.splice(index, 1);
73
+ saveExecutions(executions);
74
+ return true;
75
+ }
76
+ export function deleteExecutionsByEval(evalId) {
77
+ const executions = loadExecutions();
78
+ const filtered = executions.filter((e) => e.evalId !== evalId);
79
+ const deletedCount = executions.length - filtered.length;
80
+ if (deletedCount > 0) {
81
+ saveExecutions(filtered);
82
+ }
83
+ return deletedCount;
84
+ }
85
+ export function deleteExecutionsByProject(projectId) {
86
+ const executions = loadExecutions();
87
+ const filtered = executions.filter((e) => e.projectId !== projectId);
88
+ const deletedCount = executions.length - filtered.length;
89
+ if (deletedCount > 0) {
90
+ saveExecutions(filtered);
91
+ }
92
+ return deletedCount;
93
+ }
94
+ //# sourceMappingURL=execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export { getStatus, type Status } from "./status.js";
2
+ export type { Message } from "./types.js";
3
+ export { getStorageDir, setStorageDir, resetStorageDir, initLocalProject, CONFIG_FILENAME, type InitLocalProjectResult, } from "./storage.js";
4
+ export { createProject, deleteProject, getProject, getProjectByName, listProjects, updateProject, type CreateProjectInput, type LLMUseCaseSettings, type Project, type ProjectLLMSettings, type UpdateProjectInput, } from "./project.js";
5
+ export { createPersona, deletePersona, deletePersonasByProject, getPersona, getPersonaByName, listPersonas, updatePersona, type CreatePersonaInput, type Persona, type UpdatePersonaInput, } from "./persona.js";
6
+ export { createScenario, deleteScenario, deleteScenariosByProject, getScenario, getScenarioByName, listScenarios, updateScenario, type CreateScenarioInput, type FailureCriteriaMode, type Scenario, type UpdateScenarioInput, } from "./scenario.js";
7
+ export { createEval, deleteEval, deleteEvalsByProject, getEval, getEvalByScenario, getEvalWithRelations, listEvals, updateEval, type CreateEvalInput, type Eval, type EvalWithRelations, type UpdateEvalInput, } from "./eval.js";
8
+ export { createLLMProvider, deleteLLMProvider, deleteLLMProvidersByProject, fetchProviderModels, getDefaultModels, getLLMProvider, getLLMProviderByName, listLLMProviders, updateLLMProvider, type CreateLLMProviderInput, type LLMProvider, type LLMProviderConfig, type ProviderType, type UpdateLLMProviderInput, } from "./llm-provider.js";
9
+ export { createConnector, deleteConnector, deleteConnectorsByProject, getConnector, getConnectorByName, getConnectorTypes, invokeConnector, listConnectors, testConnector, updateConnector, type AuthType, type Connector, type ConnectorConfig, type ConnectorInvokeInput, type ConnectorInvokeResult, type ConnectorTestResult, type ConnectorType, type CreateConnectorInput, type HttpConnectorConfig, type LangGraphConnectorConfig, type UpdateConnectorInput, } from "./connector.js";
10
+ export { createPlaygroundRun, createRun, createRuns, deleteRun, deleteRunsByEval, deleteRunsByProject, getRun, listRuns, listRunsByEval, listRunsByScenario, listRunsByPersona, retryRun, updateRun, type CreatePlaygroundRunInput, type CreateRunInput, type ListRunsOptions, type Run, type RunMetadata, type RunResult, type RunStatus, type UpdateRunInput, } from "./run.js";
11
+ export { createExecution, deleteExecution, deleteExecutionsByEval, deleteExecutionsByProject, getExecution, listExecutions, listExecutionsByProject, type CreateExecutionInput, type Execution, } from "./execution.js";
12
+ export { buildTestAgentSystemPrompt, buildTestAgentMessages, type BuildTestAgentPromptInput, } from "./prompt.js";
13
+ export { RunProcessor, type RunProcessorOptions } from "./run-processor.js";
14
+ export { evaluateCriteria, type CriteriaEvaluationResult, type EvaluateCriteriaInput, } from "./evaluator.js";
15
+ export { generatePersonaMessage, type GeneratePersonaMessageInput, type GeneratePersonaMessageResult, } from "./persona-generator.js";
16
+ export { chatCompletion, getDefaultModelForProvider, type ChatCompletionMessage, type ChatCompletionOptions, type ChatCompletionResult, } from "./llm-client.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ export { getStatus } from "./status.js";
2
+ export { getStorageDir, setStorageDir, resetStorageDir, initLocalProject, CONFIG_FILENAME, } from "./storage.js";
3
+ export { createProject, deleteProject, getProject, getProjectByName, listProjects, updateProject, } from "./project.js";
4
+ export { createPersona, deletePersona, deletePersonasByProject, getPersona, getPersonaByName, listPersonas, updatePersona, } from "./persona.js";
5
+ export { createScenario, deleteScenario, deleteScenariosByProject, getScenario, getScenarioByName, listScenarios, updateScenario, } from "./scenario.js";
6
+ export { createEval, deleteEval, deleteEvalsByProject, getEval, getEvalByScenario, getEvalWithRelations, listEvals, updateEval, } from "./eval.js";
7
+ export { createLLMProvider, deleteLLMProvider, deleteLLMProvidersByProject, fetchProviderModels, getDefaultModels, getLLMProvider, getLLMProviderByName, listLLMProviders, updateLLMProvider, } from "./llm-provider.js";
8
+ export { createConnector, deleteConnector, deleteConnectorsByProject, getConnector, getConnectorByName, getConnectorTypes, invokeConnector, listConnectors, testConnector, updateConnector, } from "./connector.js";
9
+ export { createPlaygroundRun, createRun, createRuns, deleteRun, deleteRunsByEval, deleteRunsByProject, getRun, listRuns, listRunsByEval, listRunsByScenario, listRunsByPersona, retryRun, updateRun, } from "./run.js";
10
+ export { createExecution, deleteExecution, deleteExecutionsByEval, deleteExecutionsByProject, getExecution, listExecutions, listExecutionsByProject, } from "./execution.js";
11
+ export { buildTestAgentSystemPrompt, buildTestAgentMessages, } from "./prompt.js";
12
+ export { RunProcessor } from "./run-processor.js";
13
+ export { evaluateCriteria, } from "./evaluator.js";
14
+ export { generatePersonaMessage, } from "./persona-generator.js";
15
+ export { chatCompletion, getDefaultModelForProvider, } from "./llm-client.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,aAAa,CAAC;AAErD,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,eAAe,GAEhB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,GAMd,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,aAAa,EACb,uBAAuB,EACvB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,GAId,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,cAAc,EACd,wBAAwB,EACxB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,cAAc,GAKf,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,OAAO,EACP,iBAAiB,EACjB,oBAAoB,EACpB,SAAS,EACT,UAAU,GAKX,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,GAMlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,GAYhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,MAAM,EACN,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,EACR,SAAS,GASV,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,yBAAyB,EACzB,YAAY,EACZ,cAAc,EACd,uBAAuB,GAGxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,GAEvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAA4B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,gBAAgB,GAGjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,GAGvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,cAAc,EACd,0BAA0B,GAI3B,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { LLMProvider, ProviderType } from "./llm-provider.js";
2
+ /**
3
+ * A message in the standard chat completion format.
4
+ */
5
+ export interface ChatCompletionMessage {
6
+ role: "system" | "user" | "assistant";
7
+ content: string;
8
+ }
9
+ /**
10
+ * The result of a chat completion call.
11
+ */
12
+ export interface ChatCompletionResult {
13
+ content: string;
14
+ }
15
+ /**
16
+ * Options for the chat completion call.
17
+ */
18
+ export interface ChatCompletionOptions {
19
+ model?: string;
20
+ temperature?: number;
21
+ }
22
+ /**
23
+ * Returns the default model for a given provider type.
24
+ */
25
+ export declare function getDefaultModelForProvider(providerType: ProviderType): string;
26
+ /**
27
+ * Sends a chat completion request to the appropriate provider API.
28
+ * Supports OpenAI and Anthropic via native fetch().
29
+ */
30
+ export declare function chatCompletion(provider: LLMProvider, messages: ChatCompletionMessage[], options?: ChatCompletionOptions): Promise<ChatCompletionResult>;
31
+ //# sourceMappingURL=llm-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../src/llm-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,CAS7E;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,qBAAqB,EAAE,EACjC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,CAAC,CAW/B"}