@gnsx/genesys.agent.eval 1.0.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 (72) hide show
  1. package/README.md +9 -0
  2. package/dist/src/adapters/anthropic-adapter.d.ts +24 -0
  3. package/dist/src/adapters/anthropic-adapter.d.ts.map +1 -0
  4. package/dist/src/adapters/anthropic-adapter.js +80 -0
  5. package/dist/src/adapters/anthropic-adapter.js.map +1 -0
  6. package/dist/src/adapters/gemini-adapter.d.ts +23 -0
  7. package/dist/src/adapters/gemini-adapter.d.ts.map +1 -0
  8. package/dist/src/adapters/gemini-adapter.js +79 -0
  9. package/dist/src/adapters/gemini-adapter.js.map +1 -0
  10. package/dist/src/adapters/ollama-adapter.d.ts +28 -0
  11. package/dist/src/adapters/ollama-adapter.d.ts.map +1 -0
  12. package/dist/src/adapters/ollama-adapter.js +54 -0
  13. package/dist/src/adapters/ollama-adapter.js.map +1 -0
  14. package/dist/src/adapters/openai-adapter.d.ts +24 -0
  15. package/dist/src/adapters/openai-adapter.d.ts.map +1 -0
  16. package/dist/src/adapters/openai-adapter.js +80 -0
  17. package/dist/src/adapters/openai-adapter.js.map +1 -0
  18. package/dist/src/adapters/pi-adapter.d.ts +27 -0
  19. package/dist/src/adapters/pi-adapter.d.ts.map +1 -0
  20. package/dist/src/adapters/pi-adapter.js +136 -0
  21. package/dist/src/adapters/pi-adapter.js.map +1 -0
  22. package/dist/src/agent-adapter.d.ts +130 -0
  23. package/dist/src/agent-adapter.d.ts.map +1 -0
  24. package/dist/src/agent-adapter.js +134 -0
  25. package/dist/src/agent-adapter.js.map +1 -0
  26. package/dist/src/args.d.ts +22 -0
  27. package/dist/src/args.d.ts.map +1 -0
  28. package/dist/src/args.js +224 -0
  29. package/dist/src/args.js.map +1 -0
  30. package/dist/src/cli-runner.d.ts +39 -0
  31. package/dist/src/cli-runner.d.ts.map +1 -0
  32. package/dist/src/cli-runner.js +105 -0
  33. package/dist/src/cli-runner.js.map +1 -0
  34. package/dist/src/embedding-judge.d.ts +93 -0
  35. package/dist/src/embedding-judge.d.ts.map +1 -0
  36. package/dist/src/embedding-judge.js +160 -0
  37. package/dist/src/embedding-judge.js.map +1 -0
  38. package/dist/src/index.d.ts +15 -0
  39. package/dist/src/index.d.ts.map +1 -0
  40. package/dist/src/index.js +20 -0
  41. package/dist/src/index.js.map +1 -0
  42. package/dist/src/judge.d.ts +95 -0
  43. package/dist/src/judge.d.ts.map +1 -0
  44. package/dist/src/judge.js +189 -0
  45. package/dist/src/judge.js.map +1 -0
  46. package/dist/src/launcher.d.ts +9 -0
  47. package/dist/src/launcher.d.ts.map +1 -0
  48. package/dist/src/launcher.js +129 -0
  49. package/dist/src/launcher.js.map +1 -0
  50. package/dist/src/reporter.d.ts +86 -0
  51. package/dist/src/reporter.d.ts.map +1 -0
  52. package/dist/src/reporter.js +384 -0
  53. package/dist/src/reporter.js.map +1 -0
  54. package/dist/src/runner.d.ts +75 -0
  55. package/dist/src/runner.d.ts.map +1 -0
  56. package/dist/src/runner.js +165 -0
  57. package/dist/src/runner.js.map +1 -0
  58. package/dist/src/test-loader.d.ts +66 -0
  59. package/dist/src/test-loader.d.ts.map +1 -0
  60. package/dist/src/test-loader.js +140 -0
  61. package/dist/src/test-loader.js.map +1 -0
  62. package/dist/src/types.d.ts +161 -0
  63. package/dist/src/types.d.ts.map +1 -0
  64. package/dist/src/types.js +7 -0
  65. package/dist/src/types.js.map +1 -0
  66. package/dist/src/utils/package.d.ts +16 -0
  67. package/dist/src/utils/package.d.ts.map +1 -0
  68. package/dist/src/utils/package.js +30 -0
  69. package/dist/src/utils/package.js.map +1 -0
  70. package/dist/tsconfig.tsbuildinfo +1 -0
  71. package/examples/basic-tests.yaml +22 -0
  72. package/package.json +41 -0
package/README.md ADDED
@@ -0,0 +1,9 @@
1
+ # Local Testing
2
+ ```
3
+ # Run in this folder in the monorepo
4
+ pnpm dev --tests ./examples/basic-tests.yaml -a "tsx ../cli/src/launcher.ts"
5
+ ```
6
+
7
+ # References:
8
+ - https://www.chanl.ai/blog/how-to-evaluate-ai-agents-build-eval-framework
9
+ - https://platform.claude.com/docs/en/test-and-evaluate/develop-tests
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Direct Anthropic API adapter using the Vercel AI SDK.
3
+ *
4
+ * @module adapters/anthropic-adapter
5
+ */
6
+ import { BaseAgentAdapter } from '../agent-adapter.js';
7
+ import type { AgentConfig, AgentResponse, TestCase } from '../types.js';
8
+ /**
9
+ * Agent adapter for direct Anthropic API access.
10
+ *
11
+ * Uses the Vercel AI SDK for clean integration with retry logic,
12
+ * streaming support, and proper error handling.
13
+ */
14
+ export declare class AnthropicAdapter extends BaseAgentAdapter {
15
+ readonly name = "anthropic";
16
+ private _model;
17
+ private _apiKey?;
18
+ constructor();
19
+ get model(): string;
20
+ initialize(config: AgentConfig): Promise<void>;
21
+ run(test: TestCase, suiteContext?: string): Promise<AgentResponse>;
22
+ dispose(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=anthropic-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/anthropic-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAEL,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,QAAQ,CAAC,IAAI,eAAe;IAE5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAC,CAAS;;IAOzB,IAAI,KAAK,IAAI,MAAM,CAElB;IAEK,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9C,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA4ClE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI/B"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Direct Anthropic API adapter using the Vercel AI SDK.
3
+ *
4
+ * @module adapters/anthropic-adapter
5
+ */
6
+ import { anthropic } from '@ai-sdk/anthropic';
7
+ import { generateText } from 'ai';
8
+ import { AdapterError, BaseAgentAdapter, registerAdapter, } from '../agent-adapter.js';
9
+ /**
10
+ * Agent adapter for direct Anthropic API access.
11
+ *
12
+ * Uses the Vercel AI SDK for clean integration with retry logic,
13
+ * streaming support, and proper error handling.
14
+ */
15
+ export class AnthropicAdapter extends BaseAgentAdapter {
16
+ name = 'anthropic';
17
+ _model;
18
+ _apiKey;
19
+ constructor() {
20
+ super();
21
+ this._model = 'claude-3-5-sonnet-20241022';
22
+ }
23
+ get model() {
24
+ return this._model;
25
+ }
26
+ async initialize(config) {
27
+ await super.initialize(config);
28
+ // Check for API key
29
+ this._apiKey = process.env.ANTHROPIC_API_KEY;
30
+ if (!this._apiKey) {
31
+ throw new AdapterError('ANTHROPIC_API_KEY environment variable is required', this.name);
32
+ }
33
+ // Set model if provided
34
+ if (config.model) {
35
+ this._model = config.model;
36
+ }
37
+ }
38
+ async run(test, suiteContext) {
39
+ this.assertInitialized();
40
+ const prompt = this.buildPrompt(test, suiteContext);
41
+ const startTime = Date.now();
42
+ try {
43
+ const result = await generateText({
44
+ model: anthropic(this._model),
45
+ messages: [
46
+ {
47
+ role: 'user',
48
+ content: prompt,
49
+ },
50
+ ],
51
+ });
52
+ const durationMs = Date.now() - startTime;
53
+ // Extract usage information safely
54
+ const usage = result.usage;
55
+ const tokensUsed = usage ? {
56
+ prompt: usage.promptTokens ?? 0,
57
+ completion: usage.completionTokens ?? 0,
58
+ total: usage.totalTokens ?? 0,
59
+ } : undefined;
60
+ return {
61
+ output: result.text,
62
+ metadata: {
63
+ model: `anthropic/${this._model}`,
64
+ tokensUsed,
65
+ durationMs,
66
+ },
67
+ };
68
+ }
69
+ catch (error) {
70
+ throw new AdapterError(`Anthropic API call failed: ${error instanceof Error ? error.message : String(error)}`, this.name, error);
71
+ }
72
+ }
73
+ async dispose() {
74
+ this._apiKey = undefined;
75
+ await super.dispose();
76
+ }
77
+ }
78
+ // Register the adapter
79
+ registerAdapter('anthropic', () => new AnthropicAdapter());
80
+ //# sourceMappingURL=anthropic-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-adapter.js","sourceRoot":"","sources":["../../../src/adapters/anthropic-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Google Gemini API adapter using the Vercel AI SDK.
3
+ *
4
+ * @module adapters/gemini-adapter
5
+ */
6
+ import { BaseAgentAdapter } from '../agent-adapter.js';
7
+ import type { AgentConfig, AgentResponse, TestCase } from '../types.js';
8
+ /**
9
+ * Agent adapter for Google Gemini API.
10
+ *
11
+ * Uses the Vercel AI SDK for clean integration with Google's Gemini models.
12
+ */
13
+ export declare class GeminiAdapter extends BaseAgentAdapter {
14
+ readonly name = "gemini";
15
+ private _model;
16
+ private _apiKey?;
17
+ constructor();
18
+ get model(): string;
19
+ initialize(config: AgentConfig): Promise<void>;
20
+ run(test: TestCase, suiteContext?: string): Promise<AgentResponse>;
21
+ dispose(): Promise<void>;
22
+ }
23
+ //# sourceMappingURL=gemini-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/gemini-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAEL,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExE;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,gBAAgB;IACjD,QAAQ,CAAC,IAAI,YAAY;IAEzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAC,CAAS;;IAOzB,IAAI,KAAK,IAAI,MAAM,CAElB;IAEK,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9C,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA4ClE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI/B"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Google Gemini API adapter using the Vercel AI SDK.
3
+ *
4
+ * @module adapters/gemini-adapter
5
+ */
6
+ import { google } from '@ai-sdk/google';
7
+ import { generateText } from 'ai';
8
+ import { AdapterError, BaseAgentAdapter, registerAdapter, } from '../agent-adapter.js';
9
+ /**
10
+ * Agent adapter for Google Gemini API.
11
+ *
12
+ * Uses the Vercel AI SDK for clean integration with Google's Gemini models.
13
+ */
14
+ export class GeminiAdapter extends BaseAgentAdapter {
15
+ name = 'gemini';
16
+ _model;
17
+ _apiKey;
18
+ constructor() {
19
+ super();
20
+ this._model = 'gemini-1.5-pro';
21
+ }
22
+ get model() {
23
+ return this._model;
24
+ }
25
+ async initialize(config) {
26
+ await super.initialize(config);
27
+ // Check for API key
28
+ this._apiKey = process.env.GOOGLE_GENERATIVE_AI_API_KEY;
29
+ if (!this._apiKey) {
30
+ throw new AdapterError('GOOGLE_GENERATIVE_AI_API_KEY environment variable is required', this.name);
31
+ }
32
+ // Set model if provided
33
+ if (config.model) {
34
+ this._model = config.model;
35
+ }
36
+ }
37
+ async run(test, suiteContext) {
38
+ this.assertInitialized();
39
+ const prompt = this.buildPrompt(test, suiteContext);
40
+ const startTime = Date.now();
41
+ try {
42
+ const result = await generateText({
43
+ model: google(this._model),
44
+ messages: [
45
+ {
46
+ role: 'user',
47
+ content: prompt,
48
+ },
49
+ ],
50
+ });
51
+ const durationMs = Date.now() - startTime;
52
+ // Extract usage information safely
53
+ const usage = result.usage;
54
+ const tokensUsed = usage ? {
55
+ prompt: usage.promptTokens ?? 0,
56
+ completion: usage.completionTokens ?? 0,
57
+ total: usage.totalTokens ?? 0,
58
+ } : undefined;
59
+ return {
60
+ output: result.text,
61
+ metadata: {
62
+ model: `google/${this._model}`,
63
+ tokensUsed,
64
+ durationMs,
65
+ },
66
+ };
67
+ }
68
+ catch (error) {
69
+ throw new AdapterError(`Gemini API call failed: ${error instanceof Error ? error.message : String(error)}`, this.name, error);
70
+ }
71
+ }
72
+ async dispose() {
73
+ this._apiKey = undefined;
74
+ await super.dispose();
75
+ }
76
+ }
77
+ // Register the adapter
78
+ registerAdapter('gemini', () => new GeminiAdapter());
79
+ //# sourceMappingURL=gemini-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-adapter.js","sourceRoot":"","sources":["../../../src/adapters/gemini-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Ollama local model adapter stub.
3
+ *
4
+ * @module adapters/ollama-adapter
5
+ *
6
+ * @remarks
7
+ * This is a stub implementation. The @ai-sdk/ollama package is not yet available.
8
+ * When it becomes available, this adapter should be updated to use it.
9
+ */
10
+ import { BaseAgentAdapter } from '../agent-adapter.js';
11
+ import type { AgentConfig, AgentResponse, TestCase } from '../types.js';
12
+ /**
13
+ * Agent adapter stub for Ollama local models.
14
+ *
15
+ * @remarks
16
+ * Not yet implemented - requires @ai-sdk/ollama package.
17
+ */
18
+ export declare class OllamaAdapter extends BaseAgentAdapter {
19
+ readonly name = "ollama";
20
+ private _model;
21
+ private _baseUrl;
22
+ constructor();
23
+ get model(): string;
24
+ initialize(config: AgentConfig): Promise<void>;
25
+ run(_test: TestCase, _suiteContext?: string): Promise<AgentResponse>;
26
+ dispose(): Promise<void>;
27
+ }
28
+ //# sourceMappingURL=ollama-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/ollama-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,gBAAgB;IACjD,QAAQ,CAAC,IAAI,YAAY;IAEzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;;IAQzB,IAAI,KAAK,IAAI,MAAM,CAElB;IAEK,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB9C,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAOpE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Ollama local model adapter stub.
3
+ *
4
+ * @module adapters/ollama-adapter
5
+ *
6
+ * @remarks
7
+ * This is a stub implementation. The @ai-sdk/ollama package is not yet available.
8
+ * When it becomes available, this adapter should be updated to use it.
9
+ */
10
+ import { AdapterError, BaseAgentAdapter, registerAdapter, } from '../agent-adapter.js';
11
+ /**
12
+ * Agent adapter stub for Ollama local models.
13
+ *
14
+ * @remarks
15
+ * Not yet implemented - requires @ai-sdk/ollama package.
16
+ */
17
+ export class OllamaAdapter extends BaseAgentAdapter {
18
+ name = 'ollama';
19
+ _model;
20
+ _baseUrl;
21
+ constructor() {
22
+ super();
23
+ this._model = 'llama3.1';
24
+ this._baseUrl = 'http://localhost:11434';
25
+ }
26
+ get model() {
27
+ return this._model;
28
+ }
29
+ async initialize(config) {
30
+ await super.initialize(config);
31
+ // Set model if provided
32
+ if (config.model) {
33
+ this._model = config.model;
34
+ }
35
+ // Allow custom base URL via options or env var
36
+ if (config.options?.baseUrl) {
37
+ this._baseUrl = config.options.baseUrl;
38
+ }
39
+ else if (process.env.OLLAMA_BASE_URL) {
40
+ this._baseUrl = process.env.OLLAMA_BASE_URL;
41
+ }
42
+ // Check if Ollama is available
43
+ throw new AdapterError('Ollama adapter is not yet implemented. The @ai-sdk/ollama package is required but not available.', this.name);
44
+ }
45
+ async run(_test, _suiteContext) {
46
+ throw new AdapterError('Ollama adapter is not yet implemented', this.name);
47
+ }
48
+ async dispose() {
49
+ await super.dispose();
50
+ }
51
+ }
52
+ // Register the adapter
53
+ registerAdapter('ollama', () => new OllamaAdapter());
54
+ //# sourceMappingURL=ollama-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama-adapter.js","sourceRoot":"","sources":["../../../src/adapters/ollama-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAG7B;;;;;GAKG;AACH,MAAM,OAAO,aAAc,SAAQ,gBAAgB;IACxC,IAAI,GAAG,QAAQ,CAAC;IAEjB,MAAM,CAAS;IACf,QAAQ,CAAS;IAEzB;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,wBAAwB,CAAC;IAC3C,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAmB;QAClC,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE/B,wBAAwB;QACxB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,CAAC;QAED,+CAA+C;QAC/C,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAiB,CAAC;QACnD,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YACvC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAC9C,CAAC;QAED,+BAA+B;QAC/B,MAAM,IAAI,YAAY,CACpB,kGAAkG,EAClG,IAAI,CAAC,IAAI,CACV,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAe,EAAE,aAAsB;QAC/C,MAAM,IAAI,YAAY,CACpB,uCAAuC,EACvC,IAAI,CAAC,IAAI,CACV,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;CACF;AAED,uBAAuB;AACvB,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Direct OpenAI API adapter using the Vercel AI SDK.
3
+ *
4
+ * @module adapters/openai-adapter
5
+ */
6
+ import { BaseAgentAdapter } from '../agent-adapter.js';
7
+ import type { AgentConfig, AgentResponse, TestCase } from '../types.js';
8
+ /**
9
+ * Agent adapter for direct OpenAI API access.
10
+ *
11
+ * Uses the Vercel AI SDK for clean integration with retry logic,
12
+ * streaming support, and proper error handling.
13
+ */
14
+ export declare class OpenAIAdapter extends BaseAgentAdapter {
15
+ readonly name = "openai";
16
+ private _model;
17
+ private _apiKey?;
18
+ constructor();
19
+ get model(): string;
20
+ initialize(config: AgentConfig): Promise<void>;
21
+ run(test: TestCase, suiteContext?: string): Promise<AgentResponse>;
22
+ dispose(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=openai-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/openai-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAEL,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,gBAAgB;IACjD,QAAQ,CAAC,IAAI,YAAY;IAEzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAC,CAAS;;IAOzB,IAAI,KAAK,IAAI,MAAM,CAElB;IAEK,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9C,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA4ClE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI/B"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Direct OpenAI API adapter using the Vercel AI SDK.
3
+ *
4
+ * @module adapters/openai-adapter
5
+ */
6
+ import { openai } from '@ai-sdk/openai';
7
+ import { generateText } from 'ai';
8
+ import { AdapterError, BaseAgentAdapter, registerAdapter, } from '../agent-adapter.js';
9
+ /**
10
+ * Agent adapter for direct OpenAI API access.
11
+ *
12
+ * Uses the Vercel AI SDK for clean integration with retry logic,
13
+ * streaming support, and proper error handling.
14
+ */
15
+ export class OpenAIAdapter extends BaseAgentAdapter {
16
+ name = 'openai';
17
+ _model;
18
+ _apiKey;
19
+ constructor() {
20
+ super();
21
+ this._model = 'gpt-4o';
22
+ }
23
+ get model() {
24
+ return this._model;
25
+ }
26
+ async initialize(config) {
27
+ await super.initialize(config);
28
+ // Check for API key
29
+ this._apiKey = process.env.OPENAI_API_KEY;
30
+ if (!this._apiKey) {
31
+ throw new AdapterError('OPENAI_API_KEY environment variable is required', this.name);
32
+ }
33
+ // Set model if provided
34
+ if (config.model) {
35
+ this._model = config.model;
36
+ }
37
+ }
38
+ async run(test, suiteContext) {
39
+ this.assertInitialized();
40
+ const prompt = this.buildPrompt(test, suiteContext);
41
+ const startTime = Date.now();
42
+ try {
43
+ const result = await generateText({
44
+ model: openai(this._model),
45
+ messages: [
46
+ {
47
+ role: 'user',
48
+ content: prompt,
49
+ },
50
+ ],
51
+ });
52
+ const durationMs = Date.now() - startTime;
53
+ // Extract usage information safely
54
+ const usage = result.usage;
55
+ const tokensUsed = usage ? {
56
+ prompt: usage.promptTokens ?? 0,
57
+ completion: usage.completionTokens ?? 0,
58
+ total: usage.totalTokens ?? 0,
59
+ } : undefined;
60
+ return {
61
+ output: result.text,
62
+ metadata: {
63
+ model: `openai/${this._model}`,
64
+ tokensUsed,
65
+ durationMs,
66
+ },
67
+ };
68
+ }
69
+ catch (error) {
70
+ throw new AdapterError(`OpenAI API call failed: ${error instanceof Error ? error.message : String(error)}`, this.name, error);
71
+ }
72
+ }
73
+ async dispose() {
74
+ this._apiKey = undefined;
75
+ await super.dispose();
76
+ }
77
+ }
78
+ // Register the adapter
79
+ registerAdapter('openai', () => new OpenAIAdapter());
80
+ //# sourceMappingURL=openai-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-adapter.js","sourceRoot":"","sources":["../../../src/adapters/openai-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAG7B;;;;;GAKG;AACH,MAAM,OAAO,aAAc,SAAQ,gBAAgB;IACxC,IAAI,GAAG,QAAQ,CAAC;IAEjB,MAAM,CAAS;IACf,OAAO,CAAU;IAEzB;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;IACzB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAmB;QAClC,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE/B,oBAAoB;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,YAAY,CACpB,iDAAiD,EACjD,IAAI,CAAC,IAAI,CACV,CAAC;QACJ,CAAC;QAED,wBAAwB;QACxB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAc,EAAE,YAAqB;QAC7C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBAChC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAA2D;gBACpF,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,MAAM;qBAChB;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAE1C,mCAAmC;YACnC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;gBACzB,MAAM,EAAG,KAAmC,CAAC,YAAY,IAAI,CAAC;gBAC9D,UAAU,EAAG,KAAuC,CAAC,gBAAgB,IAAI,CAAC;gBAC1E,KAAK,EAAG,KAAkC,CAAC,WAAW,IAAI,CAAC;aAC5D,CAAC,CAAC,CAAC,SAAS,CAAC;YAEd,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,QAAQ,EAAE;oBACR,KAAK,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;oBAC9B,UAAU;oBACV,UAAU;iBACX;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,YAAY,CACpB,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACnF,IAAI,CAAC,IAAI,EACT,KAAK,CACN,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;CACF;AAED,uBAAuB;AACvB,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Pi framework agent adapter.
3
+ *
4
+ * Uses the @mariozechner/pi-coding-agent package for running tests.
5
+ *
6
+ * @module adapters/pi-adapter
7
+ */
8
+ import { BaseAgentAdapter } from '../agent-adapter.js';
9
+ import type { AgentConfig, AgentResponse, TestCase } from '../types.js';
10
+ /**
11
+ * Agent adapter that uses the pi framework.
12
+ *
13
+ * This adapter creates a headless agent session and runs tests by sending
14
+ * prompts and collecting responses through the event stream.
15
+ */
16
+ export declare class PiAgentAdapter extends BaseAgentAdapter {
17
+ readonly name = "pi";
18
+ private _model;
19
+ private _session?;
20
+ private _resourceLoader?;
21
+ constructor();
22
+ get model(): string;
23
+ initialize(config: AgentConfig): Promise<void>;
24
+ run(test: TestCase, suiteContext?: string): Promise<AgentResponse>;
25
+ dispose(): Promise<void>;
26
+ }
27
+ //# sourceMappingURL=pi-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/pi-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,OAAO,EAEL,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,gBAAgB;IAClD,QAAQ,CAAC,IAAI,QAAQ;IAErB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,eAAe,CAAC,CAAwB;;IAUhD,IAAI,KAAK,IAAI,MAAM,CAElB;IAEK,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAoD9C,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAmElE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ/B"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Pi framework agent adapter.
3
+ *
4
+ * Uses the @mariozechner/pi-coding-agent package for running tests.
5
+ *
6
+ * @module adapters/pi-adapter
7
+ */
8
+ import { getModel, setBedrockProviderModule } from '@mariozechner/pi-ai';
9
+ import { bedrockProviderModule } from '@mariozechner/pi-ai/bedrock-provider';
10
+ import { createAgentSession, DefaultResourceLoader, getAgentDir, SessionManager, SettingsManager, } from '@mariozechner/pi-coding-agent';
11
+ import { AdapterError, BaseAgentAdapter, registerAdapter, } from '../agent-adapter.js';
12
+ /**
13
+ * Agent adapter that uses the pi framework.
14
+ *
15
+ * This adapter creates a headless agent session and runs tests by sending
16
+ * prompts and collecting responses through the event stream.
17
+ */
18
+ export class PiAgentAdapter extends BaseAgentAdapter {
19
+ name = 'pi';
20
+ _model;
21
+ _session;
22
+ _resourceLoader;
23
+ constructor() {
24
+ super();
25
+ this._model = 'default';
26
+ // Register Bedrock provider so AWS users can use it without extra setup
27
+ setBedrockProviderModule(bedrockProviderModule);
28
+ }
29
+ get model() {
30
+ return this._model;
31
+ }
32
+ async initialize(config) {
33
+ await super.initialize(config);
34
+ try {
35
+ const agentDir = getAgentDir();
36
+ const settingsManager = SettingsManager.create(config.cwd, agentDir);
37
+ // Create resource loader with minimal configuration
38
+ this._resourceLoader = new DefaultResourceLoader({
39
+ cwd: config.cwd,
40
+ agentDir,
41
+ settingsManager,
42
+ });
43
+ await this._resourceLoader.reload();
44
+ // Resolve model if specified
45
+ let model;
46
+ if (config.model) {
47
+ const provider = (config.provider ?? 'anthropic');
48
+ try {
49
+ model = getModel(provider, config.model);
50
+ this._model = `${provider}/${config.model}`;
51
+ }
52
+ catch {
53
+ console.warn(`Warning: unknown model "${provider}/${config.model}", falling back to default.`);
54
+ }
55
+ }
56
+ // Create in-memory session for evaluation (no persistence)
57
+ const sessionManager = SessionManager.inMemory();
58
+ const { session, modelFallbackMessage } = await createAgentSession({
59
+ cwd: config.cwd,
60
+ ...(model ? { model } : {}),
61
+ sessionManager,
62
+ settingsManager,
63
+ resourceLoader: this._resourceLoader,
64
+ });
65
+ if (modelFallbackMessage) {
66
+ console.warn(`Warning: ${modelFallbackMessage}`);
67
+ }
68
+ this._session = session;
69
+ }
70
+ catch (error) {
71
+ throw new AdapterError(`Failed to initialize pi agent: ${error instanceof Error ? error.message : String(error)}`, this.name, error);
72
+ }
73
+ }
74
+ async run(test, suiteContext) {
75
+ this.assertInitialized();
76
+ if (!this._session) {
77
+ throw new AdapterError('Session not initialized', this.name);
78
+ }
79
+ const prompt = this.buildPrompt(test, suiteContext);
80
+ const startTime = Date.now();
81
+ // Collect response text from events
82
+ let responseText = '';
83
+ let isComplete = false;
84
+ // Subscribe to events before sending the prompt
85
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
+ const unsubscribe = this._session.subscribe((event) => {
87
+ // Handle different event types - collect text content
88
+ if (event.type === 'message_update' && event.message?.content) {
89
+ const content = event.message.content;
90
+ if (typeof content === 'string') {
91
+ responseText = content;
92
+ }
93
+ }
94
+ // Check for completion
95
+ if (event.type === 'turn_end' || event.type === 'message_end') {
96
+ isComplete = true;
97
+ }
98
+ });
99
+ try {
100
+ // Send the prompt
101
+ await this._session.prompt(prompt, { source: 'rpc' });
102
+ // Wait for completion with timeout
103
+ const timeout = 120000; // 2 minutes
104
+ const pollInterval = 100; // 100ms
105
+ const startWait = Date.now();
106
+ while (!isComplete && Date.now() - startWait < timeout) {
107
+ await new Promise(resolve => setTimeout(resolve, pollInterval));
108
+ }
109
+ const durationMs = Date.now() - startTime;
110
+ return {
111
+ output: responseText,
112
+ metadata: {
113
+ model: this._model,
114
+ durationMs,
115
+ },
116
+ };
117
+ }
118
+ catch (error) {
119
+ throw new AdapterError(`Test execution failed: ${error instanceof Error ? error.message : String(error)}`, this.name, error);
120
+ }
121
+ finally {
122
+ unsubscribe();
123
+ }
124
+ }
125
+ async dispose() {
126
+ if (this._session) {
127
+ // Clean up session if needed
128
+ this._session = undefined;
129
+ }
130
+ this._resourceLoader = undefined;
131
+ await super.dispose();
132
+ }
133
+ }
134
+ // Register the adapter
135
+ registerAdapter('pi', () => new PiAgentAdapter());
136
+ //# sourceMappingURL=pi-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-adapter.js","sourceRoot":"","sources":["../../../src/adapters/pi-adapter.ts"],"names":[],"mappings":"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"}