@goreal-ai/echo-pdk 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/README.md +1 -1
  2. package/dist/ai-judge/index.d.ts +11 -21
  3. package/dist/ai-judge/index.d.ts.map +1 -1
  4. package/dist/ai-judge/index.js +36 -90
  5. package/dist/ai-judge/index.js.map +1 -1
  6. package/dist/embeddings/cosine.d.ts +15 -0
  7. package/dist/embeddings/cosine.d.ts.map +1 -0
  8. package/dist/embeddings/cosine.js +37 -0
  9. package/dist/embeddings/cosine.js.map +1 -0
  10. package/dist/embeddings/index.d.ts +9 -0
  11. package/dist/embeddings/index.d.ts.map +1 -0
  12. package/dist/embeddings/index.js +11 -0
  13. package/dist/embeddings/index.js.map +1 -0
  14. package/dist/embeddings/openai.d.ts +11 -0
  15. package/dist/embeddings/openai.d.ts.map +1 -0
  16. package/dist/embeddings/openai.js +38 -0
  17. package/dist/embeddings/openai.js.map +1 -0
  18. package/dist/embeddings/registry.d.ts +13 -0
  19. package/dist/embeddings/registry.d.ts.map +1 -0
  20. package/dist/embeddings/registry.js +29 -0
  21. package/dist/embeddings/registry.js.map +1 -0
  22. package/dist/embeddings/types.d.ts +35 -0
  23. package/dist/embeddings/types.d.ts.map +1 -0
  24. package/dist/embeddings/types.js +8 -0
  25. package/dist/embeddings/types.js.map +1 -0
  26. package/dist/embeddings/voyage.d.ts +12 -0
  27. package/dist/embeddings/voyage.d.ts.map +1 -0
  28. package/dist/embeddings/voyage.js +39 -0
  29. package/dist/embeddings/voyage.js.map +1 -0
  30. package/dist/eval/assertions.d.ts +35 -0
  31. package/dist/eval/assertions.d.ts.map +1 -0
  32. package/dist/eval/assertions.js +349 -0
  33. package/dist/eval/assertions.js.map +1 -0
  34. package/dist/eval/dataset.d.ts +42 -0
  35. package/dist/eval/dataset.d.ts.map +1 -0
  36. package/dist/eval/dataset.js +101 -0
  37. package/dist/eval/dataset.js.map +1 -0
  38. package/dist/eval/index.d.ts +14 -0
  39. package/dist/eval/index.d.ts.map +1 -0
  40. package/dist/eval/index.js +17 -0
  41. package/dist/eval/index.js.map +1 -0
  42. package/dist/eval/loader.d.ts +30 -0
  43. package/dist/eval/loader.d.ts.map +1 -0
  44. package/dist/eval/loader.js +170 -0
  45. package/dist/eval/loader.js.map +1 -0
  46. package/dist/eval/reporter.d.ts +26 -0
  47. package/dist/eval/reporter.d.ts.map +1 -0
  48. package/dist/eval/reporter.js +164 -0
  49. package/dist/eval/reporter.js.map +1 -0
  50. package/dist/eval/runner.d.ts +28 -0
  51. package/dist/eval/runner.d.ts.map +1 -0
  52. package/dist/eval/runner.js +232 -0
  53. package/dist/eval/runner.js.map +1 -0
  54. package/dist/eval/types.d.ts +257 -0
  55. package/dist/eval/types.d.ts.map +1 -0
  56. package/dist/eval/types.js +11 -0
  57. package/dist/eval/types.js.map +1 -0
  58. package/dist/evaluator/evaluator.d.ts +2 -2
  59. package/dist/evaluator/evaluator.js +5 -5
  60. package/dist/evaluator/evaluator.js.map +1 -1
  61. package/dist/evaluator/index.d.ts +1 -1
  62. package/dist/evaluator/index.d.ts.map +1 -1
  63. package/dist/evaluator/index.js +1 -1
  64. package/dist/evaluator/index.js.map +1 -1
  65. package/dist/evaluator/operators.d.ts +9 -5
  66. package/dist/evaluator/operators.d.ts.map +1 -1
  67. package/dist/evaluator/operators.js +26 -33
  68. package/dist/evaluator/operators.js.map +1 -1
  69. package/dist/index.d.ts +8 -2
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +38 -20
  72. package/dist/index.js.map +1 -1
  73. package/dist/parser/ast.js +1 -1
  74. package/dist/parser/ast.js.map +1 -1
  75. package/dist/parser/lexer.d.ts +1 -1
  76. package/dist/parser/lexer.js +1 -1
  77. package/dist/project/index.d.ts.map +1 -1
  78. package/dist/project/index.js +10 -3
  79. package/dist/project/index.js.map +1 -1
  80. package/dist/project/types.d.ts +19 -4
  81. package/dist/project/types.d.ts.map +1 -1
  82. package/dist/project/types.js +3 -0
  83. package/dist/project/types.js.map +1 -1
  84. package/dist/providers/anthropic.d.ts +18 -0
  85. package/dist/providers/anthropic.d.ts.map +1 -0
  86. package/dist/providers/anthropic.js +123 -0
  87. package/dist/providers/anthropic.js.map +1 -0
  88. package/dist/providers/base.d.ts +45 -0
  89. package/dist/providers/base.d.ts.map +1 -0
  90. package/dist/providers/base.js +107 -0
  91. package/dist/providers/base.js.map +1 -0
  92. package/dist/providers/index.d.ts +14 -0
  93. package/dist/providers/index.d.ts.map +1 -0
  94. package/dist/providers/index.js +16 -0
  95. package/dist/providers/index.js.map +1 -0
  96. package/dist/providers/openai.d.ts +18 -0
  97. package/dist/providers/openai.d.ts.map +1 -0
  98. package/dist/providers/openai.js +106 -0
  99. package/dist/providers/openai.js.map +1 -0
  100. package/dist/providers/registry.d.ts +80 -0
  101. package/dist/providers/registry.d.ts.map +1 -0
  102. package/dist/providers/registry.js +118 -0
  103. package/dist/providers/registry.js.map +1 -0
  104. package/dist/providers/run-prompt.d.ts +69 -0
  105. package/dist/providers/run-prompt.d.ts.map +1 -0
  106. package/dist/providers/run-prompt.js +79 -0
  107. package/dist/providers/run-prompt.js.map +1 -0
  108. package/dist/providers/types.d.ts +123 -0
  109. package/dist/providers/types.d.ts.map +1 -0
  110. package/dist/providers/types.js +9 -0
  111. package/dist/providers/types.js.map +1 -0
  112. package/dist/types.d.ts +5 -5
  113. package/dist/types.d.ts.map +1 -1
  114. package/dist/utils/file-utils.d.ts.map +1 -1
  115. package/dist/utils/file-utils.js +9 -2
  116. package/dist/utils/file-utils.js.map +1 -1
  117. package/package.json +12 -6
  118. package/scripts/bundle-for-graaljs.mjs +220 -0
  119. package/scripts/stubs/crypto.mjs +12 -0
package/README.md CHANGED
@@ -79,7 +79,7 @@ console.log(result);
79
79
  | `#greater_than(n)` | `#gt` | Greater than |
80
80
  | `#less_than(n)` | `#lt` | Less than |
81
81
  | `#one_of(a,b,c)` | `#in` | Value in list |
82
- | `#ai_judge(question)` | - | LLM-evaluated condition |
82
+ | `#ai_gate(question)` | - | LLM-evaluated condition |
83
83
 
84
84
  ### Composition
85
85
  ```
@@ -1,8 +1,8 @@
1
1
  /**
2
- * @fileoverview AI Judge - LLM-based condition evaluation
2
+ * @fileoverview AI Gate - LLM-based condition evaluation
3
3
  *
4
- * This module handles the #ai_judge operator which queries an LLM
5
- * to evaluate boolean conditions.
4
+ * This module handles the #ai_gate operator (and deprecated #ai_judge alias)
5
+ * which queries an LLM to evaluate boolean conditions.
6
6
  *
7
7
  * FEATURES:
8
8
  * - Provider abstraction for different backends (OpenAI, Anthropic)
@@ -31,26 +31,13 @@ export interface AIProvider {
31
31
  evaluate(value: unknown, question: string): Promise<boolean>;
32
32
  }
33
33
  /**
34
- * Create an OpenAI-based AI provider.
34
+ * Create an AI provider for the AI Judge operator.
35
+ * Delegates to the unified provider system from providers/registry.
35
36
  *
36
37
  * @param config - Configuration with API key and model
37
- * @returns AIProvider using OpenAI
38
- *
39
- * @example
40
- * ```typescript
41
- * const provider = createOpenAIProvider({
42
- * type: 'openai',
43
- * apiKey: process.env.OPENAI_API_KEY,
44
- * model: 'gpt-4o-mini',
45
- * });
46
- *
47
- * const result = await provider.evaluate(
48
- * 'This is a family-friendly movie.',
49
- * 'Is this content appropriate for children?'
50
- * );
51
- * ```
38
+ * @returns AIProvider for boolean evaluation
52
39
  */
53
- export declare function createOpenAIProvider(config: AIProviderConfig): AIProvider;
40
+ export declare function createAIJudgeProvider(config: AIProviderConfig): AIProvider;
54
41
  /**
55
42
  * Build the prompt for the AI judge.
56
43
  *
@@ -160,7 +147,10 @@ export interface WithCacheOptions {
160
147
  *
161
148
  * @example
162
149
  * ```typescript
163
- * const provider = createOpenAIProvider(config);
150
+ * const provider = createAIJudge({
151
+ * type: 'openai',
152
+ * apiKey: process.env.OPENAI_API_KEY!,
153
+ * });
164
154
  * const cachedProvider = withCache(provider, {
165
155
  * providerType: 'openai',
166
156
  * model: 'gpt-4o-mini',
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-judge/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMpD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D;AAiCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CA0DzE;AAyCD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUpE;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAclE;AAYD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,KAAK,EAAE,OAAO,CAAC;IACf,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAI/D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAW1D;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAK3D;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,GAAG,UAAU,CA2BrF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-judge/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D;AAcD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAgD1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUpE;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAElE;AAYD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,KAAK,EAAE,OAAO,CAAC;IACf,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAI/D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAW1D;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAK3D;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,GAAG,UAAU,CA2BrF"}
@@ -1,8 +1,8 @@
1
1
  /**
2
- * @fileoverview AI Judge - LLM-based condition evaluation
2
+ * @fileoverview AI Gate - LLM-based condition evaluation
3
3
  *
4
- * This module handles the #ai_judge operator which queries an LLM
5
- * to evaluate boolean conditions.
4
+ * This module handles the #ai_gate operator (and deprecated #ai_judge alias)
5
+ * which queries an LLM to evaluate boolean conditions.
6
6
  *
7
7
  * FEATURES:
8
8
  * - Provider abstraction for different backends (OpenAI, Anthropic)
@@ -17,71 +17,53 @@
17
17
  * 3. Config file: echo.config.yaml (aiProvider.apiKey)
18
18
  */
19
19
  import { createHash } from 'crypto';
20
+ import { createProvider } from '../providers/registry.js';
20
21
  // =============================================================================
21
- // OPENAI PROVIDER
22
+ // AI JUDGE PROVIDER (delegates to unified provider system)
22
23
  // =============================================================================
23
24
  /**
24
- * Create an OpenAI-based AI provider.
25
+ * Create an AI provider for the AI Judge operator.
26
+ * Delegates to the unified provider system from providers/registry.
25
27
  *
26
28
  * @param config - Configuration with API key and model
27
- * @returns AIProvider using OpenAI
28
- *
29
- * @example
30
- * ```typescript
31
- * const provider = createOpenAIProvider({
32
- * type: 'openai',
33
- * apiKey: process.env.OPENAI_API_KEY,
34
- * model: 'gpt-4o-mini',
35
- * });
36
- *
37
- * const result = await provider.evaluate(
38
- * 'This is a family-friendly movie.',
39
- * 'Is this content appropriate for children?'
40
- * );
41
- * ```
29
+ * @returns AIProvider for boolean evaluation
42
30
  */
43
- export function createOpenAIProvider(config) {
44
- const apiKey = config.apiKey;
31
+ export function createAIJudgeProvider(config) {
32
+ const providerType = config.type ?? 'openai';
45
33
  const model = config.model ?? 'gpt-4o-mini';
46
- const timeout = config.timeout ?? 30000;
47
- if (!apiKey) {
48
- throw new Error('OpenAI API key is required. Set OPENAI_API_KEY environment variable or pass it in config.');
49
- }
34
+ const instance = createProvider({
35
+ type: providerType,
36
+ apiKey: config.apiKey,
37
+ model,
38
+ timeout: config.timeout,
39
+ });
50
40
  return {
51
41
  async evaluate(value, question) {
52
42
  const prompt = buildPrompt(value, question);
53
- const messages = [
54
- {
55
- role: 'system',
56
- content: 'You are a precise yes/no evaluator. Answer ONLY with "yes" or "no" (lowercase, no punctuation). Do not explain or elaborate.',
57
- },
58
- {
59
- role: 'user',
60
- content: prompt,
61
- },
62
- ];
63
43
  try {
64
- const response = await callOpenAI(apiKey, model, messages, timeout);
65
- const answer = response.choices[0]?.message?.content?.trim().toLowerCase();
66
- if (answer === 'yes') {
44
+ const response = await instance.complete([
45
+ {
46
+ role: 'system',
47
+ content: 'You are a precise yes/no evaluator. Answer ONLY with "yes" or "no" (lowercase, no punctuation). Do not explain or elaborate.',
48
+ },
49
+ {
50
+ role: 'user',
51
+ content: prompt,
52
+ },
53
+ ], { model, temperature: 0, maxTokens: 10 });
54
+ const answer = response.text.trim().toLowerCase();
55
+ if (answer === 'yes')
67
56
  return true;
68
- }
69
- if (answer === 'no') {
57
+ if (answer === 'no')
70
58
  return false;
71
- }
72
- // Unexpected response - try to interpret
73
- if (answer?.includes('yes')) {
59
+ if (answer.includes('yes'))
74
60
  return true;
75
- }
76
- if (answer?.includes('no')) {
61
+ if (answer.includes('no'))
77
62
  return false;
78
- }
79
- // Default to false for ambiguous responses
80
63
  console.warn(`AI Judge returned unexpected response: "${answer}". Defaulting to false.`);
81
64
  return false;
82
65
  }
83
66
  catch (error) {
84
- // Re-throw with more context
85
67
  if (error instanceof Error) {
86
68
  throw new Error(`AI Judge evaluation failed: ${error.message}`);
87
69
  }
@@ -90,37 +72,6 @@ export function createOpenAIProvider(config) {
90
72
  },
91
73
  };
92
74
  }
93
- /**
94
- * Call the OpenAI Chat Completions API.
95
- */
96
- async function callOpenAI(apiKey, model, messages, timeout) {
97
- const controller = new AbortController();
98
- const timeoutId = setTimeout(() => controller.abort(), timeout);
99
- try {
100
- const response = await fetch('https://api.openai.com/v1/chat/completions', {
101
- method: 'POST',
102
- headers: {
103
- 'Content-Type': 'application/json',
104
- Authorization: `Bearer ${apiKey}`,
105
- },
106
- body: JSON.stringify({
107
- model,
108
- messages,
109
- max_tokens: 10,
110
- temperature: 0, // Deterministic responses
111
- }),
112
- signal: controller.signal,
113
- });
114
- if (!response.ok) {
115
- const errorBody = await response.text();
116
- throw new Error(`OpenAI API error (${response.status}): ${errorBody}`);
117
- }
118
- return (await response.json());
119
- }
120
- finally {
121
- clearTimeout(timeoutId);
122
- }
123
- }
124
75
  /**
125
76
  * Build the prompt for the AI judge.
126
77
  *
@@ -160,15 +111,7 @@ ${question}`;
160
111
  * ```
161
112
  */
162
113
  export function createAIJudge(config) {
163
- switch (config.type) {
164
- case 'openai':
165
- return createOpenAIProvider(config);
166
- case 'anthropic':
167
- // TODO: Implement Anthropic provider
168
- throw new Error('Anthropic provider not yet implemented. Use OpenAI for now.');
169
- default:
170
- throw new Error(`Unknown AI provider type: ${config.type}`);
171
- }
114
+ return createAIJudgeProvider(config);
172
115
  }
173
116
  // =============================================================================
174
117
  // CACHING
@@ -260,7 +203,10 @@ export function getCacheSize() {
260
203
  *
261
204
  * @example
262
205
  * ```typescript
263
- * const provider = createOpenAIProvider(config);
206
+ * const provider = createAIJudge({
207
+ * type: 'openai',
208
+ * apiKey: process.env.OPENAI_API_KEY!,
209
+ * });
264
210
  * const cachedProvider = withCache(provider, {
265
211
  * providerType: 'openai',
266
212
  * model: 'gpt-4o-mini',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai-judge/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai-judge/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AA4B1D,gFAAgF;AAChF,2DAA2D;AAC3D,gFAAgF;AAEhF;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAwB;IAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC;IAE5C,MAAM,QAAQ,GAAG,cAAc,CAAC;QAC9B,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,KAAc,EAAE,QAAgB;YAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAE5C,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,CACtC;oBACE;wBACE,IAAI,EAAE,QAAQ;wBACd,OAAO,EACL,8HAA8H;qBACjI;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,MAAM;qBAChB;iBACF,EACD,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CACzC,CAAC;gBAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAElD,IAAI,MAAM,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAC;gBAClC,IAAI,MAAM,KAAK,IAAI;oBAAE,OAAO,KAAK,CAAC;gBAClC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC;gBACxC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAExC,OAAO,CAAC,IAAI,CAAC,2CAA2C,MAAM,yBAAyB,CAAC,CAAC;gBACzF,OAAO,KAAK,CAAC;YACf,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClE,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,QAAgB;IAC1D,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEpF,OAAO;;EAEP,QAAQ;;;;EAIR,QAAQ,EAAE,CAAC;AACb,CAAC;AAED,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAAC,MAAwB;IACpD,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,8CAA8C;AAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;AAE5C,4CAA4C;AAC5C,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAgBhC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,cAAc,CAAC,OAAwB;IACrD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,mBAAmB;IACnB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;QAC7C,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,MAAe;IACnD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;QACb,MAAM;QACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC;AAYD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,SAAS,CAAC,QAAoB,EAAE,OAAyB;IACvE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAExC,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,KAAc,EAAE,QAAgB;YAC7C,MAAM,GAAG,GAAG,cAAc,CAAC;gBACzB,KAAK;gBACL,QAAQ;gBACR,QAAQ,EAAE,YAAY;gBACtB,KAAK;aACN,CAAC,CAAC;YAEH,oBAAoB;YACpB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,oBAAoB;YACpB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAExD,mBAAmB;YACnB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAEtB,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @fileoverview Cosine similarity — pure math, no dependencies.
3
+ */
4
+ /**
5
+ * Compute cosine similarity between two vectors.
6
+ *
7
+ * Returns a value in [-1, 1]:
8
+ * 1.0 = identical direction
9
+ * 0.0 = orthogonal
10
+ * -1.0 = opposite direction
11
+ *
12
+ * @throws Error if vectors have different dimensions or are zero-length.
13
+ */
14
+ export declare function cosineSimilarity(a: number[], b: number[]): number;
15
+ //# sourceMappingURL=cosine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosine.d.ts","sourceRoot":"","sources":["../../src/embeddings/cosine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CA4BjE"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @fileoverview Cosine similarity — pure math, no dependencies.
3
+ */
4
+ /**
5
+ * Compute cosine similarity between two vectors.
6
+ *
7
+ * Returns a value in [-1, 1]:
8
+ * 1.0 = identical direction
9
+ * 0.0 = orthogonal
10
+ * -1.0 = opposite direction
11
+ *
12
+ * @throws Error if vectors have different dimensions or are zero-length.
13
+ */
14
+ export function cosineSimilarity(a, b) {
15
+ if (a.length !== b.length) {
16
+ throw new Error(`Dimension mismatch: vector A has ${a.length} dimensions, vector B has ${b.length}`);
17
+ }
18
+ if (a.length === 0) {
19
+ throw new Error('Cannot compute cosine similarity of zero-length vectors');
20
+ }
21
+ let dot = 0;
22
+ let magA = 0;
23
+ let magB = 0;
24
+ for (let i = 0; i < a.length; i++) {
25
+ const ai = a[i];
26
+ const bi = b[i];
27
+ dot += ai * bi;
28
+ magA += ai * ai;
29
+ magB += bi * bi;
30
+ }
31
+ const magnitude = Math.sqrt(magA) * Math.sqrt(magB);
32
+ if (magnitude === 0) {
33
+ return 0;
34
+ }
35
+ return dot / magnitude;
36
+ }
37
+ //# sourceMappingURL=cosine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosine.js","sourceRoot":"","sources":["../../src/embeddings/cosine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAW,EAAE,CAAW;IACvD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,oCAAoC,CAAC,CAAC,MAAM,6BAA6B,CAAC,CAAC,MAAM,EAAE,CACpF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACjB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACjB,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;QACf,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,GAAG,GAAG,SAAS,CAAC;AACzB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Embeddings module — barrel exports
3
+ */
4
+ export type { EmbeddingProviderType, EmbeddingConfig, EmbeddingProvider, } from './types.js';
5
+ export { cosineSimilarity } from './cosine.js';
6
+ export { createOpenAIEmbeddingProvider } from './openai.js';
7
+ export { createVoyageEmbeddingProvider } from './voyage.js';
8
+ export { createEmbeddingProvider, isEmbeddingProviderType } from './registry.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAG5D,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @fileoverview Embeddings module — barrel exports
3
+ */
4
+ // Pure math
5
+ export { cosineSimilarity } from './cosine.js';
6
+ // Provider factories
7
+ export { createOpenAIEmbeddingProvider } from './openai.js';
8
+ export { createVoyageEmbeddingProvider } from './voyage.js';
9
+ // Registry
10
+ export { createEmbeddingProvider, isEmbeddingProviderType } from './registry.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,qBAAqB;AACrB,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAE5D,WAAW;AACX,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @fileoverview OpenAI embedding provider
3
+ *
4
+ * Uses the POST /v1/embeddings endpoint with text-embedding-3-small by default.
5
+ */
6
+ import type { EmbeddingConfig, EmbeddingProvider } from './types.js';
7
+ /**
8
+ * Create an OpenAI embedding provider.
9
+ */
10
+ export declare function createOpenAIEmbeddingProvider(config: EmbeddingConfig): EmbeddingProvider;
11
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/embeddings/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAUrE;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,eAAe,GACtB,iBAAiB,CAiCnB"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @fileoverview OpenAI embedding provider
3
+ *
4
+ * Uses the POST /v1/embeddings endpoint with text-embedding-3-small by default.
5
+ */
6
+ import { fetchWithTimeout, extractApiError } from '../providers/base.js';
7
+ const DEFAULT_MODEL = 'text-embedding-3-small';
8
+ const DEFAULT_BASE_URL = 'https://api.openai.com';
9
+ const DEFAULT_TIMEOUT = 30_000;
10
+ /**
11
+ * Create an OpenAI embedding provider.
12
+ */
13
+ export function createOpenAIEmbeddingProvider(config) {
14
+ const model = config.model ?? DEFAULT_MODEL;
15
+ const baseUrl = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/, '');
16
+ const timeout = config.timeout ?? DEFAULT_TIMEOUT;
17
+ return {
18
+ type: 'openai',
19
+ async embed(texts) {
20
+ const response = await fetchWithTimeout(`${baseUrl}/v1/embeddings`, {
21
+ method: 'POST',
22
+ headers: {
23
+ 'Content-Type': 'application/json',
24
+ Authorization: `Bearer ${config.apiKey}`,
25
+ },
26
+ body: JSON.stringify({ input: texts, model }),
27
+ }, timeout);
28
+ if (!response.ok) {
29
+ throw new Error(await extractApiError(response, 'OpenAI Embeddings'));
30
+ }
31
+ const body = (await response.json());
32
+ // API may return embeddings out of order — sort by index
33
+ const sorted = body.data.sort((a, b) => a.index - b.index);
34
+ return sorted.map((d) => d.embedding);
35
+ },
36
+ };
37
+ }
38
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/embeddings/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGzE,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAC/C,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAClD,MAAM,eAAe,GAAG,MAAM,CAAC;AAM/B;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAC3C,MAAuB;IAEvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC;IAC5C,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC;IAElD,OAAO;QACL,IAAI,EAAE,QAAQ;QAEd,KAAK,CAAC,KAAK,CAAC,KAAe;YACzB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CACrC,GAAG,OAAO,gBAAgB,EAC1B;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;iBACzC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;aAC9C,EACD,OAAO,CACR,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,MAAM,eAAe,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC;YACxE,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;YAEhE,yDAAyD;YACzD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAC3D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @fileoverview Embedding provider registry — dispatcher + type guard.
3
+ */
4
+ import type { EmbeddingConfig, EmbeddingProvider, EmbeddingProviderType } from './types.js';
5
+ /**
6
+ * Type guard for embedding provider types.
7
+ */
8
+ export declare function isEmbeddingProviderType(value: string): value is EmbeddingProviderType;
9
+ /**
10
+ * Create an embedding provider from config.
11
+ */
12
+ export declare function createEmbeddingProvider(config: EmbeddingConfig): EmbeddingProvider;
13
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/embeddings/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAS5F;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,GACZ,KAAK,IAAI,qBAAqB,CAEhC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,eAAe,GACtB,iBAAiB,CASnB"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @fileoverview Embedding provider registry — dispatcher + type guard.
3
+ */
4
+ import { createOpenAIEmbeddingProvider } from './openai.js';
5
+ import { createVoyageEmbeddingProvider } from './voyage.js';
6
+ const VALID_TYPES = new Set([
7
+ 'openai',
8
+ 'voyage',
9
+ ]);
10
+ /**
11
+ * Type guard for embedding provider types.
12
+ */
13
+ export function isEmbeddingProviderType(value) {
14
+ return VALID_TYPES.has(value);
15
+ }
16
+ /**
17
+ * Create an embedding provider from config.
18
+ */
19
+ export function createEmbeddingProvider(config) {
20
+ switch (config.type) {
21
+ case 'openai':
22
+ return createOpenAIEmbeddingProvider(config);
23
+ case 'voyage':
24
+ return createVoyageEmbeddingProvider(config);
25
+ default:
26
+ throw new Error(`Unknown embedding provider type: ${config.type}`);
27
+ }
28
+ }
29
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/embeddings/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,WAAW,GAAwB,IAAI,GAAG,CAAwB;IACtE,QAAQ;IACR,QAAQ;CACT,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAa;IAEb,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAuB;IAEvB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,6BAA6B,CAAC,MAAM,CAAC,CAAC;QAC/C,KAAK,QAAQ;YACX,OAAO,6BAA6B,CAAC,MAAM,CAAC,CAAC;QAC/C;YACE,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,IAAc,EAAE,CAAC,CAAC;IACjF,CAAC;AACH,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @fileoverview Embedding provider types
3
+ *
4
+ * Separate from AIProviderInstance because embedding-only providers
5
+ * (like Voyage AI) can't implement completions/judge/listModels.
6
+ */
7
+ /**
8
+ * Supported embedding provider types.
9
+ */
10
+ export type EmbeddingProviderType = 'openai' | 'voyage';
11
+ /**
12
+ * Configuration for creating an embedding provider.
13
+ */
14
+ export interface EmbeddingConfig {
15
+ /** Provider type */
16
+ type: EmbeddingProviderType;
17
+ /** API key */
18
+ apiKey: string;
19
+ /** Model override (defaults: 'text-embedding-3-small' / 'voyage-3-lite') */
20
+ model?: string;
21
+ /** Custom base URL */
22
+ baseUrl?: string;
23
+ /** Request timeout in milliseconds (default: 30000) */
24
+ timeout?: number;
25
+ }
26
+ /**
27
+ * Lightweight embedding provider — compute vectors, nothing else.
28
+ */
29
+ export interface EmbeddingProvider {
30
+ /** Provider type */
31
+ readonly type: EmbeddingProviderType;
32
+ /** Embed one or more texts, returns one vector per input text. */
33
+ embed(texts: string[]): Promise<number[][]>;
34
+ }
35
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAMxD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oBAAoB;IACpB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,oBAAoB;IACpB,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,kEAAkE;IAClE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;CAC7C"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @fileoverview Embedding provider types
3
+ *
4
+ * Separate from AIProviderInstance because embedding-only providers
5
+ * (like Voyage AI) can't implement completions/judge/listModels.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @fileoverview Voyage AI embedding provider
3
+ *
4
+ * Voyage AI (for Anthropic users without OpenAI keys).
5
+ * Uses POST /v1/embeddings with voyage-3-lite by default.
6
+ */
7
+ import type { EmbeddingConfig, EmbeddingProvider } from './types.js';
8
+ /**
9
+ * Create a Voyage AI embedding provider.
10
+ */
11
+ export declare function createVoyageEmbeddingProvider(config: EmbeddingConfig): EmbeddingProvider;
12
+ //# sourceMappingURL=voyage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voyage.d.ts","sourceRoot":"","sources":["../../src/embeddings/voyage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAUrE;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,eAAe,GACtB,iBAAiB,CAiCnB"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @fileoverview Voyage AI embedding provider
3
+ *
4
+ * Voyage AI (for Anthropic users without OpenAI keys).
5
+ * Uses POST /v1/embeddings with voyage-3-lite by default.
6
+ */
7
+ import { fetchWithTimeout, extractApiError } from '../providers/base.js';
8
+ const DEFAULT_MODEL = 'voyage-3-lite';
9
+ const DEFAULT_BASE_URL = 'https://api.voyageai.com';
10
+ const DEFAULT_TIMEOUT = 30_000;
11
+ /**
12
+ * Create a Voyage AI embedding provider.
13
+ */
14
+ export function createVoyageEmbeddingProvider(config) {
15
+ const model = config.model ?? DEFAULT_MODEL;
16
+ const baseUrl = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/, '');
17
+ const timeout = config.timeout ?? DEFAULT_TIMEOUT;
18
+ return {
19
+ type: 'voyage',
20
+ async embed(texts) {
21
+ const response = await fetchWithTimeout(`${baseUrl}/v1/embeddings`, {
22
+ method: 'POST',
23
+ headers: {
24
+ 'Content-Type': 'application/json',
25
+ Authorization: `Bearer ${config.apiKey}`,
26
+ },
27
+ body: JSON.stringify({ input: texts, model }),
28
+ }, timeout);
29
+ if (!response.ok) {
30
+ throw new Error(await extractApiError(response, 'Voyage AI Embeddings'));
31
+ }
32
+ const body = (await response.json());
33
+ // Sort by index to guarantee correct ordering
34
+ const sorted = body.data.sort((a, b) => a.index - b.index);
35
+ return sorted.map((d) => d.embedding);
36
+ },
37
+ };
38
+ }
39
+ //# sourceMappingURL=voyage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voyage.js","sourceRoot":"","sources":["../../src/embeddings/voyage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGzE,MAAM,aAAa,GAAG,eAAe,CAAC;AACtC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AACpD,MAAM,eAAe,GAAG,MAAM,CAAC;AAM/B;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAC3C,MAAuB;IAEvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC;IAC5C,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC;IAElD,OAAO;QACL,IAAI,EAAE,QAAQ;QAEd,KAAK,CAAC,KAAK,CAAC,KAAe;YACzB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CACrC,GAAG,OAAO,gBAAgB,EAC1B;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;iBACzC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;aAC9C,EACD,OAAO,CACR,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,MAAM,eAAe,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC;YAC3E,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;YAEhE,8CAA8C;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAC3D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @fileoverview Assertion implementations for eval tests
3
+ *
4
+ * Each assertion takes a text output and returns a pass/fail result.
5
+ * Assertions are organized by category:
6
+ * - Text assertions (contains, equals, matches, etc.)
7
+ * - Structural assertions (json_valid, json_schema)
8
+ * - AI/Semantic assertions (llm_judge, similar_to, sentiment)
9
+ * - Performance assertions (latency, token_count, cost)
10
+ */
11
+ import type { Assertion, AssertionResult, LLMProvider, LLMResponse } from './types.js';
12
+ /**
13
+ * Context passed to assertion handlers.
14
+ */
15
+ export interface AssertionContext {
16
+ /** The text to assert against */
17
+ text: string;
18
+ /** LLM response metadata (for performance assertions) */
19
+ llmResponse?: LLMResponse;
20
+ /** LLM provider for AI assertions */
21
+ llmProvider?: LLMProvider;
22
+ /** Function to load a dataset's golden response */
23
+ loadGolden?: (datasetName: string) => Promise<string | undefined>;
24
+ /** Embeddings-based similarity function (preferred over LLM when available) */
25
+ embeddingSimilarity?: (textA: string, textB: string) => Promise<number>;
26
+ }
27
+ /**
28
+ * Run a single assertion against the given context.
29
+ */
30
+ export declare function runAssertion(assertion: Assertion, ctx: AssertionContext): Promise<AssertionResult>;
31
+ /**
32
+ * Run multiple assertions against the given context.
33
+ */
34
+ export declare function runAssertions(assertions: Assertion[], ctx: AssertionContext): Promise<AssertionResult[]>;
35
+ //# sourceMappingURL=assertions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../src/eval/assertions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMvF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,qCAAqC;IACrC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,mDAAmD;IACnD,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAClE,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACzE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,eAAe,CAAC,CA2B1B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,SAAS,EAAE,EACvB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,eAAe,EAAE,CAAC,CAM5B"}