ai-functions 0.2.19 → 0.4.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 (227) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/.turbo/turbo-test.log +105 -0
  3. package/README.md +232 -37
  4. package/TODO.md +138 -0
  5. package/dist/ai-promise.d.ts +219 -0
  6. package/dist/ai-promise.d.ts.map +1 -0
  7. package/dist/ai-promise.js +610 -0
  8. package/dist/ai-promise.js.map +1 -0
  9. package/dist/ai.d.ts +285 -0
  10. package/dist/ai.d.ts.map +1 -0
  11. package/dist/ai.js +842 -0
  12. package/dist/ai.js.map +1 -0
  13. package/dist/batch/anthropic.d.ts +23 -0
  14. package/dist/batch/anthropic.d.ts.map +1 -0
  15. package/dist/batch/anthropic.js +257 -0
  16. package/dist/batch/anthropic.js.map +1 -0
  17. package/dist/batch/bedrock.d.ts +64 -0
  18. package/dist/batch/bedrock.d.ts.map +1 -0
  19. package/dist/batch/bedrock.js +586 -0
  20. package/dist/batch/bedrock.js.map +1 -0
  21. package/dist/batch/cloudflare.d.ts +37 -0
  22. package/dist/batch/cloudflare.d.ts.map +1 -0
  23. package/dist/batch/cloudflare.js +289 -0
  24. package/dist/batch/cloudflare.js.map +1 -0
  25. package/dist/batch/google.d.ts +41 -0
  26. package/dist/batch/google.d.ts.map +1 -0
  27. package/dist/batch/google.js +360 -0
  28. package/dist/batch/google.js.map +1 -0
  29. package/dist/batch/index.d.ts +31 -0
  30. package/dist/batch/index.d.ts.map +1 -0
  31. package/dist/batch/index.js +31 -0
  32. package/dist/batch/index.js.map +1 -0
  33. package/dist/batch/memory.d.ts +44 -0
  34. package/dist/batch/memory.d.ts.map +1 -0
  35. package/dist/batch/memory.js +188 -0
  36. package/dist/batch/memory.js.map +1 -0
  37. package/dist/batch/openai.d.ts +37 -0
  38. package/dist/batch/openai.d.ts.map +1 -0
  39. package/dist/batch/openai.js +403 -0
  40. package/dist/batch/openai.js.map +1 -0
  41. package/dist/batch-map.d.ts +125 -0
  42. package/dist/batch-map.d.ts.map +1 -0
  43. package/dist/batch-map.js +406 -0
  44. package/dist/batch-map.js.map +1 -0
  45. package/dist/batch-queue.d.ts +273 -0
  46. package/dist/batch-queue.d.ts.map +1 -0
  47. package/dist/batch-queue.js +271 -0
  48. package/dist/batch-queue.js.map +1 -0
  49. package/dist/context.d.ts +133 -0
  50. package/dist/context.d.ts.map +1 -0
  51. package/dist/context.js +267 -0
  52. package/dist/context.js.map +1 -0
  53. package/dist/embeddings.d.ts +123 -0
  54. package/dist/embeddings.d.ts.map +1 -0
  55. package/dist/embeddings.js +170 -0
  56. package/dist/embeddings.js.map +1 -0
  57. package/dist/eval/index.d.ts +8 -0
  58. package/dist/eval/index.d.ts.map +1 -0
  59. package/dist/eval/index.js +8 -0
  60. package/dist/eval/index.js.map +1 -0
  61. package/dist/eval/models.d.ts +66 -0
  62. package/dist/eval/models.d.ts.map +1 -0
  63. package/dist/eval/models.js +120 -0
  64. package/dist/eval/models.js.map +1 -0
  65. package/dist/eval/runner.d.ts +64 -0
  66. package/dist/eval/runner.d.ts.map +1 -0
  67. package/dist/eval/runner.js +148 -0
  68. package/dist/eval/runner.js.map +1 -0
  69. package/dist/generate.d.ts +168 -0
  70. package/dist/generate.d.ts.map +1 -0
  71. package/dist/generate.js +174 -0
  72. package/dist/generate.js.map +1 -0
  73. package/dist/index.d.ts +30 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +54 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/primitives.d.ts +292 -0
  78. package/dist/primitives.d.ts.map +1 -0
  79. package/dist/primitives.js +471 -0
  80. package/dist/primitives.js.map +1 -0
  81. package/dist/providers/cloudflare.d.ts +9 -0
  82. package/dist/providers/cloudflare.d.ts.map +1 -0
  83. package/dist/providers/cloudflare.js +9 -0
  84. package/dist/providers/cloudflare.js.map +1 -0
  85. package/dist/providers/index.d.ts +9 -0
  86. package/dist/providers/index.d.ts.map +1 -0
  87. package/dist/providers/index.js +9 -0
  88. package/dist/providers/index.js.map +1 -0
  89. package/dist/schema.d.ts +54 -0
  90. package/dist/schema.d.ts.map +1 -0
  91. package/dist/schema.js +109 -0
  92. package/dist/schema.js.map +1 -0
  93. package/dist/template.d.ts +73 -0
  94. package/dist/template.d.ts.map +1 -0
  95. package/dist/template.js +129 -0
  96. package/dist/template.js.map +1 -0
  97. package/dist/types.d.ts +481 -0
  98. package/dist/types.d.ts.map +1 -0
  99. package/dist/types.js +5 -0
  100. package/dist/types.js.map +1 -0
  101. package/evalite.config.ts +19 -0
  102. package/evals/README.md +212 -0
  103. package/evals/classification.eval.ts +108 -0
  104. package/evals/marketing.eval.ts +370 -0
  105. package/evals/math.eval.ts +94 -0
  106. package/evals/run-evals.ts +166 -0
  107. package/evals/structured-output.eval.ts +143 -0
  108. package/evals/writing.eval.ts +117 -0
  109. package/examples/batch-blog-posts.ts +160 -0
  110. package/package.json +59 -43
  111. package/src/ai-promise.ts +784 -0
  112. package/src/ai.ts +1183 -0
  113. package/src/batch/anthropic.ts +375 -0
  114. package/src/batch/bedrock.ts +801 -0
  115. package/src/batch/cloudflare.ts +421 -0
  116. package/src/batch/google.ts +491 -0
  117. package/src/batch/index.ts +31 -0
  118. package/src/batch/memory.ts +253 -0
  119. package/src/batch/openai.ts +557 -0
  120. package/src/batch-map.ts +534 -0
  121. package/src/batch-queue.ts +493 -0
  122. package/src/context.ts +332 -0
  123. package/src/embeddings.ts +244 -0
  124. package/src/eval/index.ts +8 -0
  125. package/src/eval/models.ts +158 -0
  126. package/src/eval/runner.ts +217 -0
  127. package/src/generate.ts +245 -0
  128. package/src/index.ts +154 -0
  129. package/src/primitives.ts +612 -0
  130. package/src/providers/cloudflare.ts +15 -0
  131. package/src/providers/index.ts +14 -0
  132. package/src/schema.ts +147 -0
  133. package/src/template.ts +209 -0
  134. package/src/types.ts +540 -0
  135. package/test/README.md +105 -0
  136. package/test/ai-proxy.test.ts +192 -0
  137. package/test/async-iterators.test.ts +327 -0
  138. package/test/batch-background.test.ts +482 -0
  139. package/test/batch-blog-posts.test.ts +387 -0
  140. package/test/blog-generation.test.ts +510 -0
  141. package/test/browse-read.test.ts +611 -0
  142. package/test/core-functions.test.ts +694 -0
  143. package/test/decide.test.ts +393 -0
  144. package/test/define.test.ts +274 -0
  145. package/test/e2e-bedrock-manual.ts +163 -0
  146. package/test/e2e-bedrock.test.ts +191 -0
  147. package/test/e2e-flex-gateway.ts +157 -0
  148. package/test/e2e-flex-manual.ts +183 -0
  149. package/test/e2e-flex.test.ts +209 -0
  150. package/test/e2e-google-manual.ts +178 -0
  151. package/test/e2e-google.test.ts +216 -0
  152. package/test/embeddings.test.ts +284 -0
  153. package/test/evals/define-function.eval.test.ts +379 -0
  154. package/test/evals/primitives.eval.test.ts +384 -0
  155. package/test/function-types.test.ts +492 -0
  156. package/test/generate-core.test.ts +319 -0
  157. package/test/generate.test.ts +163 -0
  158. package/test/implicit-batch.test.ts +422 -0
  159. package/test/schema.test.ts +109 -0
  160. package/test/tagged-templates.test.ts +302 -0
  161. package/tsconfig.json +8 -6
  162. package/vitest.config.ts +42 -0
  163. package/LICENSE +0 -21
  164. package/db/cache.ts +0 -6
  165. package/db/mongo.ts +0 -75
  166. package/dist/mjs/db/cache.d.ts +0 -1
  167. package/dist/mjs/db/cache.js +0 -5
  168. package/dist/mjs/db/mongo.d.ts +0 -31
  169. package/dist/mjs/db/mongo.js +0 -48
  170. package/dist/mjs/examples/data.d.ts +0 -1105
  171. package/dist/mjs/examples/data.js +0 -1105
  172. package/dist/mjs/functions/ai.d.ts +0 -20
  173. package/dist/mjs/functions/ai.js +0 -83
  174. package/dist/mjs/functions/ai.test.d.ts +0 -1
  175. package/dist/mjs/functions/ai.test.js +0 -29
  176. package/dist/mjs/functions/gpt.d.ts +0 -4
  177. package/dist/mjs/functions/gpt.js +0 -10
  178. package/dist/mjs/functions/list.d.ts +0 -7
  179. package/dist/mjs/functions/list.js +0 -72
  180. package/dist/mjs/index.d.ts +0 -3
  181. package/dist/mjs/index.js +0 -3
  182. package/dist/mjs/queue/kafka.d.ts +0 -0
  183. package/dist/mjs/queue/kafka.js +0 -1
  184. package/dist/mjs/queue/memory.d.ts +0 -0
  185. package/dist/mjs/queue/memory.js +0 -1
  186. package/dist/mjs/queue/mongo.d.ts +0 -30
  187. package/dist/mjs/queue/mongo.js +0 -42
  188. package/dist/mjs/streams/kafka.d.ts +0 -0
  189. package/dist/mjs/streams/kafka.js +0 -1
  190. package/dist/mjs/streams/memory.d.ts +0 -0
  191. package/dist/mjs/streams/memory.js +0 -1
  192. package/dist/mjs/streams/mongo.d.ts +0 -0
  193. package/dist/mjs/streams/mongo.js +0 -1
  194. package/dist/mjs/streams/types.d.ts +0 -0
  195. package/dist/mjs/streams/types.js +0 -1
  196. package/dist/mjs/types.d.ts +0 -11
  197. package/dist/mjs/types.js +0 -1
  198. package/dist/mjs/utils/completion.d.ts +0 -9
  199. package/dist/mjs/utils/completion.js +0 -20
  200. package/dist/mjs/utils/schema.d.ts +0 -10
  201. package/dist/mjs/utils/schema.js +0 -72
  202. package/dist/mjs/utils/schema.test.d.ts +0 -1
  203. package/dist/mjs/utils/schema.test.js +0 -60
  204. package/dist/mjs/utils/state.d.ts +0 -1
  205. package/dist/mjs/utils/state.js +0 -19
  206. package/examples/data.ts +0 -1105
  207. package/fixup +0 -11
  208. package/functions/ai.test.ts +0 -41
  209. package/functions/ai.ts +0 -115
  210. package/functions/gpt.ts +0 -12
  211. package/functions/list.ts +0 -84
  212. package/index.ts +0 -3
  213. package/queue/kafka.ts +0 -0
  214. package/queue/memory.ts +0 -0
  215. package/queue/mongo.ts +0 -88
  216. package/streams/kafka.ts +0 -0
  217. package/streams/memory.ts +0 -0
  218. package/streams/mongo.ts +0 -0
  219. package/streams/types.ts +0 -0
  220. package/tsconfig-backup.json +0 -105
  221. package/tsconfig-base.json +0 -26
  222. package/tsconfig-cjs.json +0 -8
  223. package/types.ts +0 -12
  224. package/utils/completion.ts +0 -28
  225. package/utils/schema.test.ts +0 -69
  226. package/utils/schema.ts +0 -74
  227. package/utils/state.ts +0 -23
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/eval/models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEpE,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAEjD,MAAM,WAAW,SAAS;IACxB,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,sBAAsB;IACtB,IAAI,EAAE,SAAS,CAAA;IACf,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAMD;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,EA2ClC,CAAA;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,CAE5D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAEjE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAG9D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAQ9F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,CAAC,EAAE;IACzC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC,CAe5C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,CAYpE"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Model Registry for AI Functions Eval Suite
3
+ *
4
+ * Simple model list for running evals across providers.
5
+ * Uses ai-providers/language-models for resolution and pricing.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import { resolve, get, list } from 'language-models';
10
+ // ============================================================================
11
+ // Models to evaluate - using aliases from language-models
12
+ // ============================================================================
13
+ /**
14
+ * Core models to test - one per tier per major provider
15
+ * These resolve via ai-providers to OpenRouter or direct SDKs
16
+ *
17
+ * Updated: December 2025
18
+ *
19
+ * Note: Some models use OpenRouter format (provider/model) to avoid
20
+ * resolution issues with provider_model_id mismatches.
21
+ */
22
+ export const EVAL_MODELS = [
23
+ // Anthropic Claude 4.5 - via AWS Bedrock (uses AWS credits with bearer token auth)
24
+ // All Claude models should be 4.5 - older versions are deprecated
25
+ { id: 'bedrock:us.anthropic.claude-opus-4-5-20251101-v1:0', name: 'Claude Opus 4.5', provider: 'anthropic', tier: 'best', notes: 'Bedrock' },
26
+ { id: 'bedrock:us.anthropic.claude-sonnet-4-5-20250929-v1:0', name: 'Claude Sonnet 4.5', provider: 'anthropic', tier: 'fast', notes: 'Bedrock' },
27
+ { id: 'bedrock:us.anthropic.claude-haiku-4-5-20251001-v1:0', name: 'Claude Haiku 4.5', provider: 'anthropic', tier: 'cheap', notes: 'Bedrock' },
28
+ // OpenAI - GPT-5.1 variants + GPT-oss (open source)
29
+ { id: 'openai/o3', name: 'o3', provider: 'openai', tier: 'best' },
30
+ { id: 'openai/gpt-5.1', name: 'GPT-5.1', provider: 'openai', tier: 'best' },
31
+ { id: 'openai/gpt-5-mini', name: 'GPT-5 Mini', provider: 'openai', tier: 'fast' },
32
+ { id: 'openai/gpt-5-nano', name: 'GPT-5 Nano', provider: 'openai', tier: 'cheap' },
33
+ // GPT-oss 120B removed - times out frequently
34
+ { id: 'openai/gpt-oss-20b', name: 'GPT-oss 20B', provider: 'openai', tier: 'fast', notes: 'Open source' },
35
+ // Google - Gemini 3 (November 2025)
36
+ { id: 'google/gemini-3-pro-preview', name: 'Gemini 3 Pro', provider: 'google', tier: 'best', notes: '1M context, #1 LMArena' },
37
+ // Gemini 2.5 Pro removed - times out frequently
38
+ { id: 'flash', name: 'Gemini 2.5 Flash', provider: 'google', tier: 'fast' },
39
+ // Meta (via OpenRouter)
40
+ { id: 'meta-llama/llama-4-maverick', name: 'Llama 4 Maverick', provider: 'meta-llama', tier: 'best' },
41
+ { id: 'meta-llama/llama-3.3-70b-instruct', name: 'Llama 3.3 70B', provider: 'meta-llama', tier: 'fast' },
42
+ // DeepSeek - V3.2 (December 2025)
43
+ { id: 'deepseek/deepseek-v3.2', name: 'DeepSeek V3.2', provider: 'deepseek', tier: 'best', notes: 'GPT-5 class reasoning' },
44
+ // DeepSeek V3.2 Speciale removed - no tool use support on OpenRouter
45
+ { id: 'deepseek/deepseek-chat', name: 'DeepSeek Chat', provider: 'deepseek', tier: 'fast' },
46
+ // Mistral - Mistral 3 family (December 2025)
47
+ { id: 'mistralai/mistral-large-2512', name: 'Mistral Large 3', provider: 'mistralai', tier: 'best', notes: '675B MoE, 41B active' },
48
+ { id: 'mistralai/mistral-medium-3.1', name: 'Mistral Medium 3.1', provider: 'mistralai', tier: 'fast' },
49
+ // Ministral 3 14B removed - often fails structured output
50
+ // Qwen - Qwen3 family (2025)
51
+ { id: 'qwen/qwen3-coder', name: 'Qwen3 Coder 480B', provider: 'qwen', tier: 'best', notes: 'Agentic coding' },
52
+ { id: 'qwen/qwen3-30b-a3b', name: 'Qwen3 30B', provider: 'qwen', tier: 'fast', notes: 'MoE 30B/3B active' },
53
+ { id: 'qwen/qwen3-next-80b-a3b-instruct', name: 'Qwen3 Next 80B', provider: 'qwen', tier: 'best', notes: 'Ultra-long context' },
54
+ // xAI - Grok 4 family (December 2025)
55
+ { id: 'x-ai/grok-4', name: 'Grok 4', provider: 'x-ai', tier: 'best', notes: '256K context, reasoning' },
56
+ { id: 'x-ai/grok-4.1-fast', name: 'Grok 4.1 Fast', provider: 'x-ai', tier: 'fast', notes: '2M context, agentic' },
57
+ { id: 'x-ai/grok-4-fast', name: 'Grok 4 Fast', provider: 'x-ai', tier: 'fast', notes: '2M context' },
58
+ ];
59
+ /**
60
+ * Get models by tier
61
+ */
62
+ export function getModelsByTier(tier) {
63
+ return EVAL_MODELS.filter(m => m.tier === tier);
64
+ }
65
+ /**
66
+ * Get models by provider
67
+ */
68
+ export function getModelsByProvider(provider) {
69
+ return EVAL_MODELS.filter(m => m.provider === provider);
70
+ }
71
+ /**
72
+ * Get model info from language-models package (includes pricing)
73
+ */
74
+ export function getModelInfo(id) {
75
+ const resolved = resolve(id);
76
+ return get(resolved);
77
+ }
78
+ /**
79
+ * Get pricing for a model (from OpenRouter data)
80
+ */
81
+ export function getModelPricing(id) {
82
+ const info = getModelInfo(id);
83
+ if (!info?.pricing)
84
+ return undefined;
85
+ return {
86
+ prompt: parseFloat(info.pricing.prompt) * 1_000_000, // Convert to per-million
87
+ completion: parseFloat(info.pricing.completion) * 1_000_000,
88
+ };
89
+ }
90
+ /**
91
+ * Create evalite variants for model testing
92
+ */
93
+ export function createModelVariants(opts) {
94
+ let models = EVAL_MODELS;
95
+ if (opts?.tiers) {
96
+ models = models.filter(m => opts.tiers.includes(m.tier));
97
+ }
98
+ if (opts?.providers) {
99
+ models = models.filter(m => opts.providers.includes(m.provider));
100
+ }
101
+ return models.map(model => ({
102
+ name: `${model.provider}/${model.name}`,
103
+ input: model,
104
+ }));
105
+ }
106
+ /**
107
+ * Get a representative model from each provider for a given tier
108
+ */
109
+ export function getRepresentativeModels(tier) {
110
+ const seen = new Set();
111
+ const result = [];
112
+ for (const model of EVAL_MODELS) {
113
+ if (model.tier === tier && !seen.has(model.provider)) {
114
+ seen.add(model.provider);
115
+ result.push(model);
116
+ }
117
+ }
118
+ return result;
119
+ }
120
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/eval/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Simple eval runner for AI Functions
3
+ *
4
+ * Runs evals across multiple models and collects results.
5
+ * Does not depend on evalite - uses our own infrastructure.
6
+ */
7
+ import { generateObject, generateText } from '../generate.js';
8
+ import { schema } from '../schema.js';
9
+ import { type EvalModel, type ModelTier } from './models.js';
10
+ export interface EvalCase<TInput = unknown, TExpected = unknown> {
11
+ name: string;
12
+ input: TInput;
13
+ expected?: TExpected;
14
+ }
15
+ export interface EvalScore {
16
+ name: string;
17
+ score: number;
18
+ description?: string;
19
+ metadata?: unknown;
20
+ }
21
+ export interface EvalResult<TOutput = unknown> {
22
+ model: EvalModel;
23
+ case: EvalCase;
24
+ output: TOutput;
25
+ scores: EvalScore[];
26
+ latencyMs: number;
27
+ cost: number;
28
+ error?: string;
29
+ }
30
+ export interface EvalSummary {
31
+ name: string;
32
+ results: EvalResult[];
33
+ avgScore: number;
34
+ byModel: Record<string, {
35
+ avgScore: number;
36
+ count: number;
37
+ }>;
38
+ totalCost: number;
39
+ totalTime: number;
40
+ }
41
+ export interface RunEvalOptions<TInput, TOutput, TExpected> {
42
+ name: string;
43
+ cases: EvalCase<TInput, TExpected>[];
44
+ task: (input: TInput, model: EvalModel) => Promise<TOutput>;
45
+ scorers: Array<{
46
+ name: string;
47
+ description?: string;
48
+ scorer: (args: {
49
+ input: TInput;
50
+ output: TOutput;
51
+ expected?: TExpected;
52
+ }) => number | Promise<number>;
53
+ }>;
54
+ models?: EvalModel[];
55
+ tiers?: ModelTier[];
56
+ providers?: string[];
57
+ concurrency?: number;
58
+ }
59
+ /**
60
+ * Run an eval suite across models
61
+ */
62
+ export declare function runEval<TInput, TOutput, TExpected>(options: RunEvalOptions<TInput, TOutput, TExpected>): Promise<EvalSummary>;
63
+ export { generateObject, generateText, schema };
64
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/eval/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAwC,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AAElG,MAAM,WAAW,QAAQ,CAAC,MAAM,GAAG,OAAO,EAAE,SAAS,GAAG,OAAO;IAC7D,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,UAAU,CAAC,OAAO,GAAG,OAAO;IAC3C,KAAK,EAAE,SAAS,CAAA;IAChB,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC5D,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAA;IACpC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3D,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,MAAM,EAAE,CAAC,IAAI,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;SAAE,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;KACrG,CAAC,CAAA;IACF,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;IACpB,KAAK,CAAC,EAAE,SAAS,EAAE,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EACtD,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,GAClD,OAAO,CAAC,WAAW,CAAC,CAsJtB;AAGD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,CAAA"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Simple eval runner for AI Functions
3
+ *
4
+ * Runs evals across multiple models and collects results.
5
+ * Does not depend on evalite - uses our own infrastructure.
6
+ */
7
+ import { generateObject, generateText } from '../generate.js';
8
+ import { schema } from '../schema.js';
9
+ import { createModelVariants, getModelPricing } from './models.js';
10
+ /**
11
+ * Run an eval suite across models
12
+ */
13
+ export async function runEval(options) {
14
+ const { name, cases, task, scorers, concurrency = 3 } = options;
15
+ // Get models to test
16
+ const models = options.models ?? createModelVariants({
17
+ tiers: options.tiers,
18
+ providers: options.providers,
19
+ }).map(v => v.input);
20
+ const results = [];
21
+ const startTime = Date.now();
22
+ console.log(`\n🧪 Running eval: ${name}`);
23
+ console.log(` Models: ${models.map(m => m.name).join(', ')}`);
24
+ console.log(` Cases: ${cases.length}`);
25
+ console.log('');
26
+ // Run all model/case combinations
27
+ const jobs = [];
28
+ for (const model of models) {
29
+ for (const evalCase of cases) {
30
+ jobs.push({ model, case: evalCase });
31
+ }
32
+ }
33
+ // Process in batches with concurrency limit
34
+ for (let i = 0; i < jobs.length; i += concurrency) {
35
+ const batch = jobs.slice(i, i + concurrency);
36
+ const batchResults = await Promise.all(batch.map(async (job) => {
37
+ const caseStart = Date.now();
38
+ try {
39
+ // Run the task
40
+ const output = await task(job.case.input, job.model);
41
+ const latencyMs = Date.now() - caseStart;
42
+ // Run scorers
43
+ const scores = [];
44
+ for (const s of scorers) {
45
+ try {
46
+ const score = await s.scorer({
47
+ input: job.case.input,
48
+ output,
49
+ expected: job.case.expected,
50
+ });
51
+ scores.push({
52
+ name: s.name,
53
+ score: Math.max(0, Math.min(1, score)),
54
+ description: s.description,
55
+ });
56
+ }
57
+ catch (err) {
58
+ scores.push({
59
+ name: s.name,
60
+ score: 0,
61
+ description: s.description,
62
+ metadata: { error: String(err) },
63
+ });
64
+ }
65
+ }
66
+ // Calculate cost
67
+ const pricing = getModelPricing(job.model.id);
68
+ // Estimate tokens - rough approximation
69
+ const estimatedPromptTokens = 100;
70
+ const estimatedCompletionTokens = 200;
71
+ const cost = pricing
72
+ ? (estimatedPromptTokens * pricing.prompt + estimatedCompletionTokens * pricing.completion) / 1_000_000
73
+ : 0;
74
+ const avgScore = scores.length > 0
75
+ ? scores.reduce((sum, s) => sum + s.score, 0) / scores.length
76
+ : 0;
77
+ const symbol = avgScore >= 0.8 ? '✓' : avgScore >= 0.5 ? '~' : '✗';
78
+ console.log(` ${symbol} ${job.model.name} | ${job.case.name} | ${(avgScore * 100).toFixed(0)}% | ${latencyMs}ms`);
79
+ return {
80
+ model: job.model,
81
+ case: job.case,
82
+ output,
83
+ scores,
84
+ latencyMs,
85
+ cost,
86
+ };
87
+ }
88
+ catch (err) {
89
+ console.log(` ✗ ${job.model.name} | ${job.case.name} | ERROR: ${err}`);
90
+ return {
91
+ model: job.model,
92
+ case: job.case,
93
+ output: null,
94
+ scores: scorers.map(s => ({ name: s.name, score: 0 })),
95
+ latencyMs: Date.now() - caseStart,
96
+ cost: 0,
97
+ error: String(err),
98
+ };
99
+ }
100
+ }));
101
+ results.push(...batchResults);
102
+ }
103
+ // Calculate summary
104
+ const totalTime = Date.now() - startTime;
105
+ const totalCost = results.reduce((sum, r) => sum + r.cost, 0);
106
+ const allScores = results.flatMap(r => r.scores.map(s => s.score));
107
+ const avgScore = allScores.length > 0
108
+ ? allScores.reduce((a, b) => a + b, 0) / allScores.length
109
+ : 0;
110
+ // Group by model
111
+ const byModel = {};
112
+ for (const result of results) {
113
+ const modelKey = result.model.id;
114
+ if (!byModel[modelKey]) {
115
+ byModel[modelKey] = { avgScore: 0, count: 0 };
116
+ }
117
+ const resultAvg = result.scores.reduce((sum, s) => sum + s.score, 0) / result.scores.length;
118
+ byModel[modelKey].avgScore += resultAvg;
119
+ byModel[modelKey].count++;
120
+ }
121
+ for (const key of Object.keys(byModel)) {
122
+ const entry = byModel[key];
123
+ if (entry) {
124
+ entry.avgScore /= entry.count;
125
+ }
126
+ }
127
+ console.log('');
128
+ console.log(`📊 Results:`);
129
+ console.log(` Overall: ${(avgScore * 100).toFixed(1)}%`);
130
+ console.log(` Time: ${(totalTime / 1000).toFixed(1)}s`);
131
+ console.log(` Cost: $${totalCost.toFixed(4)}`);
132
+ console.log('');
133
+ console.log(' By Model:');
134
+ for (const [modelId, stats] of Object.entries(byModel)) {
135
+ console.log(` - ${modelId}: ${(stats.avgScore * 100).toFixed(1)}%`);
136
+ }
137
+ return {
138
+ name,
139
+ results,
140
+ avgScore,
141
+ byModel,
142
+ totalCost,
143
+ totalTime,
144
+ };
145
+ }
146
+ // Re-export helpers
147
+ export { generateObject, generateText, schema };
148
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/eval/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * AI Generation functions with automatic model resolution and routing
3
+ *
4
+ * Wraps AI SDK generateObject and generateText with smart model routing:
5
+ * - Simple aliases: 'opus', 'sonnet', 'gpt-4o'
6
+ * - Full IDs: 'anthropic/claude-sonnet-4.5'
7
+ * - Auto-routes to native SDKs for openai/anthropic/google
8
+ *
9
+ * @packageDocumentation
10
+ */
11
+ import { generateText as sdkGenerateText, streamText as sdkStreamText, type GenerateObjectResult, type StreamObjectResult, type LanguageModel } from 'ai';
12
+ type ModelArg = string | LanguageModel;
13
+ interface GenerateObjectOptions<T> {
14
+ model: ModelArg;
15
+ schema: T;
16
+ prompt?: string;
17
+ messages?: Array<{
18
+ role: 'user' | 'assistant' | 'system';
19
+ content: string;
20
+ }>;
21
+ system?: string;
22
+ mode?: 'auto' | 'json' | 'tool';
23
+ maxTokens?: number;
24
+ temperature?: number;
25
+ topP?: number;
26
+ topK?: number;
27
+ presencePenalty?: number;
28
+ frequencyPenalty?: number;
29
+ seed?: number;
30
+ maxRetries?: number;
31
+ abortSignal?: AbortSignal;
32
+ headers?: Record<string, string>;
33
+ experimental_telemetry?: {
34
+ isEnabled?: boolean;
35
+ functionId?: string;
36
+ metadata?: Record<string, string>;
37
+ };
38
+ }
39
+ interface GenerateTextOptions {
40
+ model: ModelArg;
41
+ prompt?: string;
42
+ messages?: Array<{
43
+ role: 'user' | 'assistant' | 'system';
44
+ content: string;
45
+ }>;
46
+ system?: string;
47
+ maxTokens?: number;
48
+ temperature?: number;
49
+ topP?: number;
50
+ topK?: number;
51
+ presencePenalty?: number;
52
+ frequencyPenalty?: number;
53
+ seed?: number;
54
+ maxRetries?: number;
55
+ abortSignal?: AbortSignal;
56
+ headers?: Record<string, string>;
57
+ tools?: Record<string, unknown>;
58
+ toolChoice?: 'auto' | 'none' | 'required' | {
59
+ type: 'tool';
60
+ toolName: string;
61
+ };
62
+ maxSteps?: number;
63
+ experimental_telemetry?: {
64
+ isEnabled?: boolean;
65
+ functionId?: string;
66
+ metadata?: Record<string, string>;
67
+ };
68
+ }
69
+ /**
70
+ * Generate a typed object from a prompt using AI
71
+ *
72
+ * Automatically resolves model aliases and routes to the best provider.
73
+ * Supports both Zod schemas and simplified schema syntax.
74
+ *
75
+ * @example
76
+ * ```ts
77
+ * import { generateObject } from 'ai-functions'
78
+ *
79
+ * // Simplified schema syntax
80
+ * const { object } = await generateObject({
81
+ * model: 'sonnet',
82
+ * schema: {
83
+ * recipe: {
84
+ * name: 'What is the recipe name?',
85
+ * type: 'food | drink | dessert',
86
+ * ingredients: ['List all ingredients'],
87
+ * steps: ['List all cooking steps'],
88
+ * },
89
+ * },
90
+ * prompt: 'Generate a lasagna recipe.',
91
+ * })
92
+ *
93
+ * // Zod schema also works
94
+ * import { z } from 'zod'
95
+ * const { object } = await generateObject({
96
+ * model: 'sonnet',
97
+ * schema: z.object({
98
+ * name: z.string(),
99
+ * ingredients: z.array(z.string()),
100
+ * }),
101
+ * prompt: 'Generate a lasagna recipe.',
102
+ * })
103
+ * ```
104
+ */
105
+ export declare function generateObject<T>(options: GenerateObjectOptions<T>): Promise<GenerateObjectResult<T>>;
106
+ /**
107
+ * Generate text from a prompt using AI
108
+ *
109
+ * Automatically resolves model aliases and routes to the best provider.
110
+ *
111
+ * @example
112
+ * ```ts
113
+ * import { generateText } from 'ai-functions'
114
+ *
115
+ * const { text } = await generateText({
116
+ * model: 'opus', // → anthropic/claude-opus-4.5
117
+ * prompt: 'Write a haiku about programming.',
118
+ * })
119
+ *
120
+ * // With tools
121
+ * const { text, toolResults } = await generateText({
122
+ * model: 'gpt-4o', // → openai/gpt-4o
123
+ * prompt: 'What is the weather in San Francisco?',
124
+ * tools: { ... },
125
+ * maxSteps: 5,
126
+ * })
127
+ * ```
128
+ */
129
+ export declare function generateText(options: GenerateTextOptions): Promise<Awaited<ReturnType<typeof sdkGenerateText>>>;
130
+ /**
131
+ * Stream a typed object from a prompt using AI
132
+ *
133
+ * @example
134
+ * ```ts
135
+ * import { streamObject } from 'ai-functions'
136
+ *
137
+ * const { partialObjectStream } = streamObject({
138
+ * model: 'sonnet',
139
+ * schema: { story: 'Write a creative story' },
140
+ * prompt: 'Write a short story.',
141
+ * })
142
+ *
143
+ * for await (const partial of partialObjectStream) {
144
+ * console.log(partial.story)
145
+ * }
146
+ * ```
147
+ */
148
+ export declare function streamObject<T>(options: GenerateObjectOptions<T>): Promise<StreamObjectResult<T, T, never>>;
149
+ /**
150
+ * Stream text from a prompt using AI
151
+ *
152
+ * @example
153
+ * ```ts
154
+ * import { streamText } from 'ai-functions'
155
+ *
156
+ * const { textStream } = streamText({
157
+ * model: 'gemini', // → google/gemini-2.5-flash
158
+ * prompt: 'Explain quantum computing.',
159
+ * })
160
+ *
161
+ * for await (const chunk of textStream) {
162
+ * process.stdout.write(chunk)
163
+ * }
164
+ * ```
165
+ */
166
+ export declare function streamText(options: GenerateTextOptions): Promise<ReturnType<typeof sdkStreamText>>;
167
+ export {};
168
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}