@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,101 @@
1
+ import type { Message } from "./types.js";
2
+ export type ConnectorType = "http" | "langgraph";
3
+ export type AuthType = "none" | "api-key" | "bearer" | "basic";
4
+ /**
5
+ * Configuration for LangGraph Dev API connectors
6
+ */
7
+ export interface LangGraphConnectorConfig {
8
+ /** The assistant ID to use when invoking the LangGraph agent (required) */
9
+ assistantId: string;
10
+ /** The graph ID to use (optional, defaults to assistant's graph) */
11
+ graphId?: string;
12
+ /** Additional metadata to pass to the agent */
13
+ metadata?: Record<string, unknown>;
14
+ }
15
+ /**
16
+ * Configuration for generic HTTP/REST API connectors
17
+ */
18
+ export interface HttpConnectorConfig {
19
+ /** HTTP method to use (defaults to POST) */
20
+ method?: "GET" | "POST" | "PUT" | "PATCH";
21
+ /** Additional headers to include in requests */
22
+ headers?: Record<string, string>;
23
+ /** Request timeout in milliseconds */
24
+ timeout?: number;
25
+ /** Path to append to base URL for requests */
26
+ path?: string;
27
+ }
28
+ /** Union type for all connector configurations */
29
+ export type ConnectorConfig = LangGraphConnectorConfig | HttpConnectorConfig;
30
+ export interface Connector {
31
+ id: string;
32
+ projectId: string;
33
+ name: string;
34
+ type: ConnectorType;
35
+ baseUrl: string;
36
+ authType?: AuthType;
37
+ authValue?: string;
38
+ config?: ConnectorConfig;
39
+ createdAt: string;
40
+ updatedAt: string;
41
+ }
42
+ export interface CreateConnectorInput {
43
+ projectId: string;
44
+ name: string;
45
+ type: ConnectorType;
46
+ baseUrl: string;
47
+ authType?: AuthType;
48
+ authValue?: string;
49
+ config?: ConnectorConfig;
50
+ }
51
+ export interface UpdateConnectorInput {
52
+ name?: string;
53
+ type?: ConnectorType;
54
+ baseUrl?: string;
55
+ authType?: AuthType;
56
+ authValue?: string;
57
+ config?: ConnectorConfig;
58
+ }
59
+ export declare function createConnector(input: CreateConnectorInput): Connector;
60
+ export declare function getConnector(id: string): Connector | undefined;
61
+ export declare function getConnectorByName(projectId: string, name: string): Connector | undefined;
62
+ export declare function listConnectors(projectId?: string): Connector[];
63
+ export declare function updateConnector(id: string, input: UpdateConnectorInput): Connector | undefined;
64
+ export declare function deleteConnector(id: string): boolean;
65
+ export declare function deleteConnectorsByProject(projectId: string): number;
66
+ /**
67
+ * Returns the supported connector types with their descriptions
68
+ */
69
+ export declare function getConnectorTypes(): Record<ConnectorType, string>;
70
+ export interface ConnectorTestResult {
71
+ success: boolean;
72
+ latencyMs: number;
73
+ response?: string;
74
+ error?: string;
75
+ }
76
+ export interface ConnectorInvokeInput {
77
+ messages: Message[];
78
+ /** Optional run ID to use as thread_id for LangGraph connectors */
79
+ runId?: string;
80
+ /** Number of messages already in the thread (for LangGraph continuations) */
81
+ threadMessageCount?: number;
82
+ }
83
+ export interface ConnectorInvokeResult {
84
+ success: boolean;
85
+ latencyMs: number;
86
+ /** All new messages from the connector (may include tool calls, tool results, and assistant messages) */
87
+ messages?: Message[];
88
+ rawResponse?: string;
89
+ error?: string;
90
+ }
91
+ /**
92
+ * Tests a connector by sending a "hello" message and checking the response.
93
+ * Returns the test result with success status, latency, and response or error.
94
+ */
95
+ export declare function testConnector(id: string): Promise<ConnectorTestResult>;
96
+ /**
97
+ * Invokes a connector by sending messages and returning the assistant's response.
98
+ * Returns the result with success status, latency, response message, or error.
99
+ */
100
+ export declare function invokeConnector(id: string, input: ConnectorInvokeInput): Promise<ConnectorInvokeResult>;
101
+ //# sourceMappingURL=connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;AAEjD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4CAA4C;IAC5C,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;IAC1C,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,kDAAkD;AAClD,MAAM,MAAM,eAAe,GAAG,wBAAwB,GAAG,mBAAmB,CAAC;AAE7E,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAoBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,CAoCtE;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAG9D;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,SAAS,GAAG,SAAS,CAGvB;AAED,wBAAgB,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAM9D;AAED,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,oBAAoB,GAC1B,SAAS,GAAG,SAAS,CA8CvB;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAYnD;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAUnE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAKjE;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,yGAAyG;IACzG,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA0SD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA+C5E;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CA0DhC"}
@@ -0,0 +1,477 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { getProject } from "./project.js";
5
+ import { getStorageDir } from "./storage.js";
6
+ function getStoragePath() {
7
+ return join(getStorageDir(), "connectors.json");
8
+ }
9
+ function loadConnectors() {
10
+ const path = getStoragePath();
11
+ if (!existsSync(path)) {
12
+ return [];
13
+ }
14
+ const data = readFileSync(path, "utf-8");
15
+ return JSON.parse(data);
16
+ }
17
+ function saveConnectors(connectors) {
18
+ const path = getStoragePath();
19
+ writeFileSync(path, JSON.stringify(connectors, null, 2));
20
+ }
21
+ export function createConnector(input) {
22
+ const project = getProject(input.projectId);
23
+ if (!project) {
24
+ throw new Error(`Project with id "${input.projectId}" not found`);
25
+ }
26
+ const connectors = loadConnectors();
27
+ if (connectors.some((c) => c.projectId === input.projectId && c.name === input.name)) {
28
+ throw new Error(`Connector with name "${input.name}" already exists in this project`);
29
+ }
30
+ const now = new Date().toISOString();
31
+ const connector = {
32
+ id: randomUUID(),
33
+ projectId: input.projectId,
34
+ name: input.name,
35
+ type: input.type,
36
+ baseUrl: input.baseUrl,
37
+ authType: input.authType,
38
+ authValue: input.authValue,
39
+ config: input.config,
40
+ createdAt: now,
41
+ updatedAt: now,
42
+ };
43
+ connectors.push(connector);
44
+ saveConnectors(connectors);
45
+ return connector;
46
+ }
47
+ export function getConnector(id) {
48
+ const connectors = loadConnectors();
49
+ return connectors.find((c) => c.id === id);
50
+ }
51
+ export function getConnectorByName(projectId, name) {
52
+ const connectors = loadConnectors();
53
+ return connectors.find((c) => c.projectId === projectId && c.name === name);
54
+ }
55
+ export function listConnectors(projectId) {
56
+ const connectors = loadConnectors();
57
+ if (projectId) {
58
+ return connectors.filter((c) => c.projectId === projectId);
59
+ }
60
+ return connectors;
61
+ }
62
+ export function updateConnector(id, input) {
63
+ const connectors = loadConnectors();
64
+ const index = connectors.findIndex((c) => c.id === id);
65
+ if (index === -1) {
66
+ return undefined;
67
+ }
68
+ const connector = connectors[index];
69
+ if (input.name &&
70
+ connectors.some((c) => c.projectId === connector.projectId && c.name === input.name && c.id !== id)) {
71
+ throw new Error(`Connector with name "${input.name}" already exists in this project`);
72
+ }
73
+ // Determine the new authType
74
+ const newAuthType = input.authType ?? connector.authType;
75
+ // Clear authValue if authType is being set to "none"
76
+ const newAuthValue = newAuthType === "none"
77
+ ? undefined
78
+ : input.authValue ?? connector.authValue;
79
+ const updated = {
80
+ ...connector,
81
+ name: input.name ?? connector.name,
82
+ type: input.type ?? connector.type,
83
+ baseUrl: input.baseUrl ?? connector.baseUrl,
84
+ authType: newAuthType,
85
+ authValue: newAuthValue,
86
+ config: input.config ?? connector.config,
87
+ updatedAt: new Date().toISOString(),
88
+ };
89
+ connectors[index] = updated;
90
+ saveConnectors(connectors);
91
+ return updated;
92
+ }
93
+ export function deleteConnector(id) {
94
+ const connectors = loadConnectors();
95
+ const index = connectors.findIndex((c) => c.id === id);
96
+ if (index === -1) {
97
+ return false;
98
+ }
99
+ connectors.splice(index, 1);
100
+ saveConnectors(connectors);
101
+ return true;
102
+ }
103
+ export function deleteConnectorsByProject(projectId) {
104
+ const connectors = loadConnectors();
105
+ const filtered = connectors.filter((c) => c.projectId !== projectId);
106
+ const deletedCount = connectors.length - filtered.length;
107
+ if (deletedCount > 0) {
108
+ saveConnectors(filtered);
109
+ }
110
+ return deletedCount;
111
+ }
112
+ /**
113
+ * Returns the supported connector types with their descriptions
114
+ */
115
+ export function getConnectorTypes() {
116
+ return {
117
+ http: "Generic HTTP/REST API connector",
118
+ langgraph: "LangGraph Dev API connector for langgraph-backed agents",
119
+ };
120
+ }
121
+ // ============================================================================
122
+ // Shared Utilities
123
+ // ============================================================================
124
+ function buildAuthHeaders(connector) {
125
+ const headers = {
126
+ "Content-Type": "application/json",
127
+ };
128
+ if (connector.authType === "api-key" && connector.authValue) {
129
+ headers["X-API-Key"] = connector.authValue;
130
+ }
131
+ else if (connector.authType === "bearer" && connector.authValue) {
132
+ headers["Authorization"] = `Bearer ${connector.authValue}`;
133
+ }
134
+ else if (connector.authType === "basic" && connector.authValue) {
135
+ headers["Authorization"] = `Basic ${connector.authValue}`;
136
+ }
137
+ return headers;
138
+ }
139
+ async function withTiming(fn) {
140
+ const startTime = Date.now();
141
+ const result = await fn();
142
+ return { result, latencyMs: Date.now() - startTime };
143
+ }
144
+ // ============================================================================
145
+ // LangGraph Strategy
146
+ // ============================================================================
147
+ const langGraphStrategy = {
148
+ buildTestRequest(connector) {
149
+ const lgConfig = connector.config;
150
+ const assistantId = lgConfig?.assistantId || "default";
151
+ return {
152
+ url: `${connector.baseUrl}/runs/wait`,
153
+ method: "POST",
154
+ headers: buildAuthHeaders(connector),
155
+ body: JSON.stringify({
156
+ assistant_id: assistantId,
157
+ input: {
158
+ messages: [{ role: "user", content: "hello" }],
159
+ },
160
+ config: {},
161
+ }),
162
+ };
163
+ },
164
+ buildInvokeRequest(connector, input) {
165
+ const lgConfig = connector.config;
166
+ const assistantId = lgConfig?.assistantId || "default";
167
+ // Use thread-scoped endpoint if runId is provided for better organization in LangSmith
168
+ const url = input.runId
169
+ ? `${connector.baseUrl}/threads/${input.runId}/runs/wait`
170
+ : `${connector.baseUrl}/runs/wait`;
171
+ // For thread continuations, only send NEW messages (thread already has the history)
172
+ // threadMessageCount is the number of messages already in the thread state
173
+ const messagesToSend = input.threadMessageCount !== undefined && input.threadMessageCount > 0
174
+ ? input.messages.slice(input.threadMessageCount)
175
+ : input.messages;
176
+ return {
177
+ url,
178
+ method: "POST",
179
+ headers: buildAuthHeaders(connector),
180
+ body: JSON.stringify({
181
+ assistant_id: assistantId,
182
+ input: {
183
+ messages: messagesToSend,
184
+ },
185
+ // Queue subsequent runs on the same thread instead of rejecting
186
+ multitask_strategy: "enqueue",
187
+ // Auto-create thread if it doesn't exist (avoids separate API call)
188
+ if_not_exists: "create",
189
+ }),
190
+ };
191
+ },
192
+ parseTestResponse(responseText) {
193
+ try {
194
+ const data = JSON.parse(responseText);
195
+ if (data.messages && Array.isArray(data.messages)) {
196
+ const lastMessage = data.messages[data.messages.length - 1];
197
+ if (lastMessage?.content) {
198
+ return typeof lastMessage.content === "string"
199
+ ? lastMessage.content
200
+ : JSON.stringify(lastMessage.content);
201
+ }
202
+ }
203
+ }
204
+ catch {
205
+ // Keep original response text if parsing fails
206
+ }
207
+ return responseText;
208
+ },
209
+ parseInvokeResponse(responseText, inputMessageCount) {
210
+ try {
211
+ const data = JSON.parse(responseText);
212
+ if (data.messages && Array.isArray(data.messages)) {
213
+ // LangGraph returns all messages including input - extract only the new ones
214
+ const newMessages = data.messages.slice(inputMessageCount);
215
+ return newMessages.map((msg) => {
216
+ // Determine role from LangGraph message type
217
+ let role = "assistant";
218
+ if (msg.type === "human" || msg.role === "user") {
219
+ role = "user";
220
+ }
221
+ else if (msg.type === "tool" || msg.role === "tool") {
222
+ role = "tool";
223
+ }
224
+ else if (msg.type === "system" || msg.role === "system") {
225
+ role = "system";
226
+ }
227
+ const message = {
228
+ role,
229
+ content: msg.content ?? "",
230
+ };
231
+ // Include optional LangGraph message fields if present
232
+ if (Array.isArray(msg.tool_calls)) {
233
+ message.tool_calls = msg.tool_calls;
234
+ }
235
+ if (typeof msg.tool_call_id === "string") {
236
+ message.tool_call_id = msg.tool_call_id;
237
+ }
238
+ if (typeof msg.name === "string") {
239
+ message.name = msg.name;
240
+ }
241
+ if (msg.additional_kwargs && typeof msg.additional_kwargs === "object") {
242
+ message.additional_kwargs = msg.additional_kwargs;
243
+ }
244
+ if (msg.response_metadata && typeof msg.response_metadata === "object") {
245
+ message.response_metadata = msg.response_metadata;
246
+ }
247
+ if (typeof msg.id === "string") {
248
+ message.id = msg.id;
249
+ }
250
+ return message;
251
+ });
252
+ }
253
+ }
254
+ catch {
255
+ // Parsing failed
256
+ }
257
+ return [];
258
+ },
259
+ };
260
+ // ============================================================================
261
+ // HTTP Strategy
262
+ // ============================================================================
263
+ const httpStrategy = {
264
+ buildTestRequest(connector) {
265
+ return {
266
+ url: connector.baseUrl,
267
+ method: "POST",
268
+ headers: buildAuthHeaders(connector),
269
+ body: JSON.stringify({
270
+ message: "hello",
271
+ messages: [{ role: "user", content: "hello" }],
272
+ }),
273
+ };
274
+ },
275
+ buildInvokeRequest(connector, input) {
276
+ const httpConfig = connector.config;
277
+ const method = httpConfig?.method || "POST";
278
+ const path = httpConfig?.path || "";
279
+ return {
280
+ url: connector.baseUrl + path,
281
+ method,
282
+ headers: { ...buildAuthHeaders(connector), ...httpConfig?.headers },
283
+ body: JSON.stringify({
284
+ messages: input.messages,
285
+ }),
286
+ };
287
+ },
288
+ parseTestResponse(responseText) {
289
+ try {
290
+ const data = JSON.parse(responseText);
291
+ if (data.content) {
292
+ return data.content;
293
+ }
294
+ else if (data.message) {
295
+ return data.message;
296
+ }
297
+ else if (data.response) {
298
+ return data.response;
299
+ }
300
+ }
301
+ catch {
302
+ // Keep original response text if parsing fails
303
+ }
304
+ return responseText;
305
+ },
306
+ parseInvokeResponse(responseText, inputMessageCount) {
307
+ try {
308
+ const data = JSON.parse(responseText);
309
+ // Support various response formats
310
+ if (data.message?.content) {
311
+ return [{
312
+ role: "assistant",
313
+ content: data.message.content,
314
+ }];
315
+ }
316
+ else if (data.content) {
317
+ return [{
318
+ role: "assistant",
319
+ content: data.content,
320
+ }];
321
+ }
322
+ else if (data.response) {
323
+ return [{
324
+ role: "assistant",
325
+ content: data.response,
326
+ }];
327
+ }
328
+ else if (data.messages && Array.isArray(data.messages)) {
329
+ // Return all new messages after the input
330
+ const newMessages = data.messages.slice(inputMessageCount);
331
+ return newMessages
332
+ .filter((msg) => msg?.role && msg?.content !== undefined)
333
+ .map((msg) => ({
334
+ role: msg.role,
335
+ content: msg.content || "",
336
+ }));
337
+ }
338
+ else if (typeof data === "string") {
339
+ return [{
340
+ role: "assistant",
341
+ content: data,
342
+ }];
343
+ }
344
+ }
345
+ catch {
346
+ // If parsing fails and response is plain text, use it as content
347
+ if (responseText.trim()) {
348
+ return [{
349
+ role: "assistant",
350
+ content: responseText,
351
+ }];
352
+ }
353
+ }
354
+ return [];
355
+ },
356
+ };
357
+ // ============================================================================
358
+ // Strategy Registry
359
+ // ============================================================================
360
+ const connectorStrategies = {
361
+ langgraph: langGraphStrategy,
362
+ http: httpStrategy,
363
+ };
364
+ function getStrategy(type) {
365
+ const strategy = connectorStrategies[type];
366
+ if (!strategy) {
367
+ throw new Error(`Unknown connector type: ${type}`);
368
+ }
369
+ return strategy;
370
+ }
371
+ /**
372
+ * Tests a connector by sending a "hello" message and checking the response.
373
+ * Returns the test result with success status, latency, and response or error.
374
+ */
375
+ export async function testConnector(id) {
376
+ const connector = getConnector(id);
377
+ if (!connector) {
378
+ return {
379
+ success: false,
380
+ latencyMs: 0,
381
+ error: `Connector with id "${id}" not found`,
382
+ };
383
+ }
384
+ const strategy = getStrategy(connector.type);
385
+ const requestConfig = strategy.buildTestRequest(connector);
386
+ try {
387
+ const { result, latencyMs } = await withTiming(async () => {
388
+ const response = await fetch(requestConfig.url, {
389
+ method: requestConfig.method,
390
+ headers: requestConfig.headers,
391
+ body: requestConfig.body,
392
+ });
393
+ const responseText = await response.text();
394
+ return { response, responseText };
395
+ });
396
+ const { response, responseText } = result;
397
+ const parsedResponse = strategy.parseTestResponse(responseText);
398
+ if (!response.ok) {
399
+ return {
400
+ success: false,
401
+ latencyMs,
402
+ error: `HTTP ${response.status}: ${parsedResponse.slice(0, 200)}`,
403
+ };
404
+ }
405
+ return {
406
+ success: true,
407
+ latencyMs,
408
+ response: parsedResponse.slice(0, 500),
409
+ };
410
+ }
411
+ catch (error) {
412
+ return {
413
+ success: false,
414
+ latencyMs: 0,
415
+ error: error instanceof Error ? error.message : "Unknown error",
416
+ };
417
+ }
418
+ }
419
+ /**
420
+ * Invokes a connector by sending messages and returning the assistant's response.
421
+ * Returns the result with success status, latency, response message, or error.
422
+ */
423
+ export async function invokeConnector(id, input) {
424
+ const connector = getConnector(id);
425
+ if (!connector) {
426
+ return {
427
+ success: false,
428
+ latencyMs: 0,
429
+ error: `Connector with id "${id}" not found`,
430
+ };
431
+ }
432
+ if (!input.messages || input.messages.length === 0) {
433
+ return {
434
+ success: false,
435
+ latencyMs: 0,
436
+ error: "No messages provided",
437
+ };
438
+ }
439
+ const strategy = getStrategy(connector.type);
440
+ const requestConfig = strategy.buildInvokeRequest(connector, input);
441
+ const inputMessageCount = input.messages.length;
442
+ try {
443
+ const { result, latencyMs } = await withTiming(async () => {
444
+ const response = await fetch(requestConfig.url, {
445
+ method: requestConfig.method,
446
+ headers: requestConfig.headers,
447
+ body: requestConfig.body,
448
+ });
449
+ const responseText = await response.text();
450
+ return { response, responseText };
451
+ });
452
+ const { response, responseText } = result;
453
+ const newMessages = strategy.parseInvokeResponse(responseText, inputMessageCount);
454
+ if (!response.ok) {
455
+ return {
456
+ success: false,
457
+ latencyMs,
458
+ rawResponse: responseText.slice(0, 500),
459
+ error: `HTTP ${response.status}: ${responseText.slice(0, 200)}`,
460
+ };
461
+ }
462
+ return {
463
+ success: true,
464
+ latencyMs,
465
+ messages: newMessages,
466
+ rawResponse: responseText.slice(0, 2000),
467
+ };
468
+ }
469
+ catch (error) {
470
+ return {
471
+ success: false,
472
+ latencyMs: 0,
473
+ error: error instanceof Error ? error.message : "Unknown error",
474
+ };
475
+ }
476
+ }
477
+ //# sourceMappingURL=connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector.js","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"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"}
package/dist/eval.d.ts ADDED
@@ -0,0 +1,66 @@
1
+ import type { Message } from "./types.js";
2
+ import type { FailureCriteriaMode } from "./scenario.js";
3
+ export type { Message };
4
+ export interface Eval {
5
+ id: string;
6
+ projectId: string;
7
+ /** Display name for the eval */
8
+ name: string;
9
+ /** Input messages for the eval */
10
+ input: Message[];
11
+ /** Required: Scenarios define the test contexts and evaluation criteria */
12
+ scenarioIds: string[];
13
+ /** The connector to use for running this eval (required) */
14
+ connectorId: string;
15
+ createdAt: string;
16
+ updatedAt: string;
17
+ }
18
+ export interface CreateEvalInput {
19
+ projectId: string;
20
+ /** Display name for the eval */
21
+ name: string;
22
+ /** Initial input messages */
23
+ input?: Message[];
24
+ /** Required: Scenarios define the test contexts and evaluation criteria */
25
+ scenarioIds: string[];
26
+ /** The connector to use for running this eval (required) */
27
+ connectorId: string;
28
+ }
29
+ export interface UpdateEvalInput {
30
+ /** Display name for the eval */
31
+ name?: string;
32
+ /** Input messages */
33
+ input?: Message[];
34
+ /** Scenarios define the test contexts and evaluation criteria */
35
+ scenarioIds?: string[];
36
+ /** The connector to use for running this eval */
37
+ connectorId?: string;
38
+ }
39
+ export interface ScenarioSummary {
40
+ id: string;
41
+ name: string;
42
+ instructions?: string;
43
+ messages?: Message[];
44
+ maxMessages?: number;
45
+ successCriteria?: string;
46
+ failureCriteria?: string;
47
+ failureCriteriaMode?: FailureCriteriaMode;
48
+ }
49
+ export interface EvalWithRelations extends Eval {
50
+ scenarios: ScenarioSummary[];
51
+ connector?: {
52
+ id: string;
53
+ name: string;
54
+ type: string;
55
+ baseUrl: string;
56
+ };
57
+ }
58
+ export declare function createEval(input: CreateEvalInput): Eval;
59
+ export declare function getEval(id: string): Eval | undefined;
60
+ export declare function getEvalByScenario(projectId: string, scenarioId: string): Eval | undefined;
61
+ export declare function listEvals(projectId?: string): Eval[];
62
+ export declare function getEvalWithRelations(id: string): EvalWithRelations | undefined;
63
+ export declare function updateEval(id: string, input: UpdateEvalInput): Eval | undefined;
64
+ export declare function deleteEval(id: string): boolean;
65
+ export declare function deleteEvalsByProject(projectId: string): number;
66
+ //# sourceMappingURL=eval.d.ts.map