ai-functions 0.3.0 → 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.
- package/.turbo/turbo-build.log +5 -0
- package/.turbo/turbo-test.log +105 -0
- package/README.md +190 -86
- package/TODO.md +138 -0
- package/dist/ai-promise.d.ts +219 -0
- package/dist/ai-promise.d.ts.map +1 -0
- package/dist/ai-promise.js +610 -0
- package/dist/ai-promise.js.map +1 -0
- package/dist/ai.d.ts +285 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +842 -0
- package/dist/ai.js.map +1 -0
- package/dist/batch/anthropic.d.ts +23 -0
- package/dist/batch/anthropic.d.ts.map +1 -0
- package/dist/batch/anthropic.js +257 -0
- package/dist/batch/anthropic.js.map +1 -0
- package/dist/batch/bedrock.d.ts +64 -0
- package/dist/batch/bedrock.d.ts.map +1 -0
- package/dist/batch/bedrock.js +586 -0
- package/dist/batch/bedrock.js.map +1 -0
- package/dist/batch/cloudflare.d.ts +37 -0
- package/dist/batch/cloudflare.d.ts.map +1 -0
- package/dist/batch/cloudflare.js +289 -0
- package/dist/batch/cloudflare.js.map +1 -0
- package/dist/batch/google.d.ts +41 -0
- package/dist/batch/google.d.ts.map +1 -0
- package/dist/batch/google.js +360 -0
- package/dist/batch/google.js.map +1 -0
- package/dist/batch/index.d.ts +31 -0
- package/dist/batch/index.d.ts.map +1 -0
- package/dist/batch/index.js +31 -0
- package/dist/batch/index.js.map +1 -0
- package/dist/batch/memory.d.ts +44 -0
- package/dist/batch/memory.d.ts.map +1 -0
- package/dist/batch/memory.js +188 -0
- package/dist/batch/memory.js.map +1 -0
- package/dist/batch/openai.d.ts +37 -0
- package/dist/batch/openai.d.ts.map +1 -0
- package/dist/batch/openai.js +403 -0
- package/dist/batch/openai.js.map +1 -0
- package/dist/batch-map.d.ts +125 -0
- package/dist/batch-map.d.ts.map +1 -0
- package/dist/batch-map.js +406 -0
- package/dist/batch-map.js.map +1 -0
- package/dist/batch-queue.d.ts +273 -0
- package/dist/batch-queue.d.ts.map +1 -0
- package/dist/batch-queue.js +271 -0
- package/dist/batch-queue.js.map +1 -0
- package/dist/context.d.ts +133 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +267 -0
- package/dist/context.js.map +1 -0
- package/dist/embeddings.d.ts +123 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +170 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/eval/index.d.ts +8 -0
- package/dist/eval/index.d.ts.map +1 -0
- package/dist/eval/index.js +8 -0
- package/dist/eval/index.js.map +1 -0
- package/dist/eval/models.d.ts +66 -0
- package/dist/eval/models.d.ts.map +1 -0
- package/dist/eval/models.js +120 -0
- package/dist/eval/models.js.map +1 -0
- package/dist/eval/runner.d.ts +64 -0
- package/dist/eval/runner.d.ts.map +1 -0
- package/dist/eval/runner.js +148 -0
- package/dist/eval/runner.js.map +1 -0
- package/dist/generate.d.ts +168 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +174 -0
- package/dist/generate.js.map +1 -0
- package/dist/index.d.ts +29 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -52
- package/dist/index.js.map +1 -1
- package/dist/primitives.d.ts +292 -0
- package/dist/primitives.d.ts.map +1 -0
- package/dist/primitives.js +471 -0
- package/dist/primitives.js.map +1 -0
- package/dist/providers/cloudflare.d.ts +9 -0
- package/dist/providers/cloudflare.d.ts.map +1 -0
- package/dist/providers/cloudflare.js +9 -0
- package/dist/providers/cloudflare.js.map +1 -0
- package/dist/providers/index.d.ts +9 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +9 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/schema.d.ts +54 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +109 -0
- package/dist/schema.js.map +1 -0
- package/dist/template.d.ts +73 -0
- package/dist/template.d.ts.map +1 -0
- package/dist/template.js +129 -0
- package/dist/template.js.map +1 -0
- package/dist/types.d.ts +474 -106
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -8
- package/dist/types.js.map +1 -1
- package/evalite.config.ts +19 -0
- package/evals/README.md +212 -0
- package/evals/classification.eval.ts +108 -0
- package/evals/marketing.eval.ts +370 -0
- package/evals/math.eval.ts +94 -0
- package/evals/run-evals.ts +166 -0
- package/evals/structured-output.eval.ts +143 -0
- package/evals/writing.eval.ts +117 -0
- package/examples/batch-blog-posts.ts +160 -0
- package/package.json +57 -57
- package/src/ai-promise.ts +784 -0
- package/src/ai.ts +1183 -0
- package/src/batch/anthropic.ts +375 -0
- package/src/batch/bedrock.ts +801 -0
- package/src/batch/cloudflare.ts +421 -0
- package/src/batch/google.ts +491 -0
- package/src/batch/index.ts +31 -0
- package/src/batch/memory.ts +253 -0
- package/src/batch/openai.ts +557 -0
- package/src/batch-map.ts +534 -0
- package/src/batch-queue.ts +493 -0
- package/src/context.ts +332 -0
- package/src/embeddings.ts +244 -0
- package/src/eval/index.ts +8 -0
- package/src/eval/models.ts +158 -0
- package/src/eval/runner.ts +217 -0
- package/src/generate.ts +245 -0
- package/src/index.ts +154 -0
- package/src/primitives.ts +612 -0
- package/src/providers/cloudflare.ts +15 -0
- package/src/providers/index.ts +14 -0
- package/src/schema.ts +147 -0
- package/src/template.ts +209 -0
- package/src/types.ts +540 -0
- package/test/README.md +105 -0
- package/test/ai-proxy.test.ts +192 -0
- package/test/async-iterators.test.ts +327 -0
- package/test/batch-background.test.ts +482 -0
- package/test/batch-blog-posts.test.ts +387 -0
- package/test/blog-generation.test.ts +510 -0
- package/test/browse-read.test.ts +611 -0
- package/test/core-functions.test.ts +694 -0
- package/test/decide.test.ts +393 -0
- package/test/define.test.ts +274 -0
- package/test/e2e-bedrock-manual.ts +163 -0
- package/test/e2e-bedrock.test.ts +191 -0
- package/test/e2e-flex-gateway.ts +157 -0
- package/test/e2e-flex-manual.ts +183 -0
- package/test/e2e-flex.test.ts +209 -0
- package/test/e2e-google-manual.ts +178 -0
- package/test/e2e-google.test.ts +216 -0
- package/test/embeddings.test.ts +284 -0
- package/test/evals/define-function.eval.test.ts +379 -0
- package/test/evals/primitives.eval.test.ts +384 -0
- package/test/function-types.test.ts +492 -0
- package/test/generate-core.test.ts +319 -0
- package/test/generate.test.ts +163 -0
- package/test/implicit-batch.test.ts +422 -0
- package/test/schema.test.ts +109 -0
- package/test/tagged-templates.test.ts +302 -0
- package/tsconfig.json +10 -0
- package/vitest.config.ts +42 -0
- package/LICENSE +0 -21
- package/bin/cli.js +0 -5
- package/dist/cli/index.d.ts +0 -10
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -38
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/index.test.d.ts +0 -2
- package/dist/cli/index.test.d.ts.map +0 -1
- package/dist/cli/index.test.js +0 -35
- package/dist/cli/index.test.js.map +0 -1
- package/dist/constants/models.d.ts +0 -10
- package/dist/constants/models.d.ts.map +0 -1
- package/dist/constants/models.js +0 -12
- package/dist/constants/models.js.map +0 -1
- package/dist/converters/index.d.ts +0 -3
- package/dist/converters/index.d.ts.map +0 -1
- package/dist/converters/index.js +0 -3
- package/dist/converters/index.js.map +0 -1
- package/dist/converters/model.d.ts +0 -4
- package/dist/converters/model.d.ts.map +0 -1
- package/dist/converters/model.js +0 -19
- package/dist/converters/model.js.map +0 -1
- package/dist/converters/schema.d.ts +0 -4
- package/dist/converters/schema.d.ts.map +0 -1
- package/dist/converters/schema.js +0 -25
- package/dist/converters/schema.js.map +0 -1
- package/dist/core/responses.d.ts +0 -5
- package/dist/core/responses.d.ts.map +0 -1
- package/dist/core/responses.js +0 -16
- package/dist/core/responses.js.map +0 -1
- package/dist/core/responses.test.d.ts +0 -2
- package/dist/core/responses.test.d.ts.map +0 -1
- package/dist/core/responses.test.js +0 -31
- package/dist/core/responses.test.js.map +0 -1
- package/dist/errors.d.ts +0 -6
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -9
- package/dist/errors.js.map +0 -1
- package/dist/examples/streaming.test.d.ts +0 -2
- package/dist/examples/streaming.test.d.ts.map +0 -1
- package/dist/examples/streaming.test.js +0 -176
- package/dist/examples/streaming.test.js.map +0 -1
- package/dist/factory/__tests__/index.test.d.ts +0 -2
- package/dist/factory/__tests__/index.test.d.ts.map +0 -1
- package/dist/factory/__tests__/index.test.js +0 -430
- package/dist/factory/__tests__/index.test.js.map +0 -1
- package/dist/factory/__tests__/list.test.d.ts +0 -2
- package/dist/factory/__tests__/list.test.d.ts.map +0 -1
- package/dist/factory/__tests__/list.test.js +0 -92
- package/dist/factory/__tests__/list.test.js.map +0 -1
- package/dist/factory/index.d.ts +0 -20
- package/dist/factory/index.d.ts.map +0 -1
- package/dist/factory/index.js +0 -287
- package/dist/factory/index.js.map +0 -1
- package/dist/factory/index.test.d.ts +0 -2
- package/dist/factory/index.test.d.ts.map +0 -1
- package/dist/factory/index.test.js +0 -287
- package/dist/factory/index.test.js.map +0 -1
- package/dist/factory/list.d.ts +0 -3
- package/dist/factory/list.d.ts.map +0 -1
- package/dist/factory/list.js +0 -221
- package/dist/factory/list.js.map +0 -1
- package/dist/factory/list.test.d.ts +0 -2
- package/dist/factory/list.test.d.ts.map +0 -1
- package/dist/factory/list.test.js +0 -84
- package/dist/factory/list.test.js.map +0 -1
- package/dist/generate/index.d.ts +0 -5
- package/dist/generate/index.d.ts.map +0 -1
- package/dist/generate/index.js +0 -17
- package/dist/generate/index.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -59
- package/dist/index.test.js.map +0 -1
- package/dist/list/await.d.ts +0 -3
- package/dist/list/await.d.ts.map +0 -1
- package/dist/list/await.js +0 -28
- package/dist/list/await.js.map +0 -1
- package/dist/list/constants.d.ts +0 -4
- package/dist/list/constants.d.ts.map +0 -1
- package/dist/list/constants.js +0 -5
- package/dist/list/constants.js.map +0 -1
- package/dist/list/create-function.d.ts +0 -3
- package/dist/list/create-function.d.ts.map +0 -1
- package/dist/list/create-function.js +0 -11
- package/dist/list/create-function.js.map +0 -1
- package/dist/list/index.d.ts +0 -4
- package/dist/list/index.d.ts.map +0 -1
- package/dist/list/index.js +0 -5
- package/dist/list/index.js.map +0 -1
- package/dist/list/prompt.d.ts +0 -3
- package/dist/list/prompt.d.ts.map +0 -1
- package/dist/list/prompt.js +0 -6
- package/dist/list/prompt.js.map +0 -1
- package/dist/list/schemas.d.ts +0 -4
- package/dist/list/schemas.d.ts.map +0 -1
- package/dist/list/schemas.js +0 -8
- package/dist/list/schemas.js.map +0 -1
- package/dist/list/stream.d.ts +0 -3
- package/dist/list/stream.d.ts.map +0 -1
- package/dist/list/stream.js +0 -33
- package/dist/list/stream.js.map +0 -1
- package/dist/list/types.d.ts +0 -11
- package/dist/list/types.d.ts.map +0 -1
- package/dist/list/types.js +0 -2
- package/dist/list/types.js.map +0 -1
- package/dist/list/validation.d.ts +0 -3
- package/dist/list/validation.d.ts.map +0 -1
- package/dist/list/validation.js +0 -12
- package/dist/list/validation.js.map +0 -1
- package/dist/providers/config.d.ts +0 -4
- package/dist/providers/config.d.ts.map +0 -1
- package/dist/providers/config.js +0 -21
- package/dist/providers/config.js.map +0 -1
- package/dist/providers/config.test.d.ts +0 -2
- package/dist/providers/config.test.d.ts.map +0 -1
- package/dist/providers/config.test.js +0 -37
- package/dist/providers/config.test.js.map +0 -1
- package/dist/proxy/constants.d.ts +0 -4
- package/dist/proxy/constants.d.ts.map +0 -1
- package/dist/proxy/constants.js +0 -5
- package/dist/proxy/constants.js.map +0 -1
- package/dist/proxy/create-function.d.ts +0 -4
- package/dist/proxy/create-function.d.ts.map +0 -1
- package/dist/proxy/create-function.js +0 -24
- package/dist/proxy/create-function.js.map +0 -1
- package/dist/proxy/create-proxy.d.ts +0 -2
- package/dist/proxy/create-proxy.d.ts.map +0 -1
- package/dist/proxy/create-proxy.js +0 -11
- package/dist/proxy/create-proxy.js.map +0 -1
- package/dist/proxy/function-generator.d.ts +0 -9
- package/dist/proxy/function-generator.d.ts.map +0 -1
- package/dist/proxy/function-generator.js +0 -29
- package/dist/proxy/function-generator.js.map +0 -1
- package/dist/proxy/index.d.ts +0 -4
- package/dist/proxy/index.d.ts.map +0 -1
- package/dist/proxy/index.js +0 -4
- package/dist/proxy/index.js.map +0 -1
- package/dist/proxy/prompt.d.ts +0 -2
- package/dist/proxy/prompt.d.ts.map +0 -1
- package/dist/proxy/prompt.js +0 -6
- package/dist/proxy/prompt.js.map +0 -1
- package/dist/proxy/types.d.ts +0 -7
- package/dist/proxy/types.d.ts.map +0 -1
- package/dist/proxy/types.js +0 -2
- package/dist/proxy/types.js.map +0 -1
- package/dist/queue/manager.d.ts +0 -5
- package/dist/queue/manager.d.ts.map +0 -1
- package/dist/queue/manager.js +0 -37
- package/dist/queue/manager.js.map +0 -1
- package/dist/queue/manager.test.d.ts +0 -2
- package/dist/queue/manager.test.d.ts.map +0 -1
- package/dist/queue/manager.test.js +0 -52
- package/dist/queue/manager.test.js.map +0 -1
- package/dist/schema-converter.d.ts +0 -4
- package/dist/schema-converter.d.ts.map +0 -1
- package/dist/schema-converter.js +0 -30
- package/dist/schema-converter.js.map +0 -1
- package/dist/stream/index.d.ts +0 -7
- package/dist/stream/index.d.ts.map +0 -1
- package/dist/stream/index.js +0 -23
- package/dist/stream/index.js.map +0 -1
- package/dist/streaming/utils.d.ts +0 -4
- package/dist/streaming/utils.d.ts.map +0 -1
- package/dist/streaming/utils.js +0 -131
- package/dist/streaming/utils.js.map +0 -1
- package/dist/streaming/utils.test.d.ts +0 -2
- package/dist/streaming/utils.test.d.ts.map +0 -1
- package/dist/streaming/utils.test.js +0 -84
- package/dist/streaming/utils.test.js.map +0 -1
- package/dist/templates/result.d.ts +0 -7
- package/dist/templates/result.d.ts.map +0 -1
- package/dist/templates/result.js +0 -40
- package/dist/templates/result.js.map +0 -1
- package/dist/templates/result.test.d.ts +0 -2
- package/dist/templates/result.test.d.ts.map +0 -1
- package/dist/templates/result.test.js +0 -75
- package/dist/templates/result.test.js.map +0 -1
- package/dist/test/setup.d.ts +0 -2
- package/dist/test/setup.d.ts.map +0 -1
- package/dist/test/setup.js +0 -21
- package/dist/test/setup.js.map +0 -1
- package/dist/test-types.d.ts +0 -13
- package/dist/test-types.d.ts.map +0 -1
- package/dist/test-types.js +0 -55
- package/dist/test-types.js.map +0 -1
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -4
- package/dist/types/index.js.map +0 -1
- package/dist/types/list.d.ts +0 -10
- package/dist/types/list.d.ts.map +0 -1
- package/dist/types/list.js +0 -2
- package/dist/types/list.js.map +0 -1
- package/dist/types/model.d.ts +0 -7
- package/dist/types/model.d.ts.map +0 -1
- package/dist/types/model.js +0 -2
- package/dist/types/model.js.map +0 -1
- package/dist/types/options.d.ts +0 -25
- package/dist/types/options.d.ts.map +0 -1
- package/dist/types/options.js +0 -2
- package/dist/types/options.js.map +0 -1
- package/dist/types/schema.d.ts +0 -5
- package/dist/types/schema.d.ts.map +0 -1
- package/dist/types/schema.js +0 -2
- package/dist/types/schema.js.map +0 -1
- package/dist/utils/__tests__/request-handler.test.d.ts +0 -2
- package/dist/utils/__tests__/request-handler.test.d.ts.map +0 -1
- package/dist/utils/__tests__/request-handler.test.js +0 -134
- package/dist/utils/__tests__/request-handler.test.js.map +0 -1
- package/dist/utils/__tests__/schema.test.d.ts +0 -2
- package/dist/utils/__tests__/schema.test.d.ts.map +0 -1
- package/dist/utils/__tests__/schema.test.js +0 -49
- package/dist/utils/__tests__/schema.test.js.map +0 -1
- package/dist/utils/__tests__/stream-progress.test.d.ts +0 -2
- package/dist/utils/__tests__/stream-progress.test.d.ts.map +0 -1
- package/dist/utils/__tests__/stream-progress.test.js +0 -85
- package/dist/utils/__tests__/stream-progress.test.js.map +0 -1
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -2
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/request-handler.d.ts +0 -17
- package/dist/utils/request-handler.d.ts.map +0 -1
- package/dist/utils/request-handler.js +0 -105
- package/dist/utils/request-handler.js.map +0 -1
- package/dist/utils/schema.d.ts +0 -11
- package/dist/utils/schema.d.ts.map +0 -1
- package/dist/utils/schema.js +0 -51
- package/dist/utils/schema.js.map +0 -1
- package/dist/utils/stream-progress.d.ts +0 -17
- package/dist/utils/stream-progress.d.ts.map +0 -1
- package/dist/utils/stream-progress.js +0 -86
- package/dist/utils/stream-progress.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -3
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -30
- package/dist/utils/validation.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAMrD,2BAA2B;AAC3B,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,WAAW,GACX,MAAM,GACN,UAAU,CAAA;AAEd,sCAAsC;AACtC,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAQD;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,gBAAgB,CAEnD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAuCD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,CAS7C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,OAAO,EAAE,gBAAgB,EACzB,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAehB;AAwDD;;GAEG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAGjC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,aAAa,CAG3C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAGxC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAGzC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED,oCAAoC;AACpC,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAwBjE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC"}
|
package/dist/context.js
ADDED
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execution Context for AI Functions
|
|
3
|
+
*
|
|
4
|
+
* Provides configuration without polluting function signatures.
|
|
5
|
+
* Settings flow from environment → global context → local context.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* // Set global defaults (from environment or initialization)
|
|
10
|
+
* configure({
|
|
11
|
+
* provider: 'anthropic',
|
|
12
|
+
* model: 'claude-sonnet-4-20250514',
|
|
13
|
+
* batchMode: 'auto', // 'auto' | 'immediate' | 'deferred'
|
|
14
|
+
* })
|
|
15
|
+
*
|
|
16
|
+
* // Or use execution context for specific operations
|
|
17
|
+
* await withContext({ provider: 'openai', model: 'gpt-4o' }, async () => {
|
|
18
|
+
* const titles = await list`10 blog titles`
|
|
19
|
+
* return titles.map(title => write`blog post: ${title}`)
|
|
20
|
+
* })
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @packageDocumentation
|
|
24
|
+
*/
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Global Context
|
|
27
|
+
// ============================================================================
|
|
28
|
+
let globalContext = {};
|
|
29
|
+
/**
|
|
30
|
+
* Configure global defaults for AI functions
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* configure({
|
|
35
|
+
* model: 'claude-sonnet-4-20250514',
|
|
36
|
+
* provider: 'anthropic',
|
|
37
|
+
* batchMode: 'auto',
|
|
38
|
+
* batchThreshold: 5,
|
|
39
|
+
* })
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export function configure(context) {
|
|
43
|
+
globalContext = { ...globalContext, ...context };
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get the current global context
|
|
47
|
+
*/
|
|
48
|
+
export function getGlobalContext() {
|
|
49
|
+
return { ...globalContext };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Reset global context to defaults
|
|
53
|
+
*/
|
|
54
|
+
export function resetContext() {
|
|
55
|
+
globalContext = {};
|
|
56
|
+
}
|
|
57
|
+
// ============================================================================
|
|
58
|
+
// Async Local Storage for Execution Context
|
|
59
|
+
// ============================================================================
|
|
60
|
+
// Use AsyncLocalStorage if available (Node.js), otherwise fallback to global
|
|
61
|
+
let asyncLocalStorage = null;
|
|
62
|
+
// Lazy initialization of AsyncLocalStorage
|
|
63
|
+
let asyncLocalStorageInitialized = false;
|
|
64
|
+
async function initAsyncLocalStorage() {
|
|
65
|
+
if (asyncLocalStorageInitialized)
|
|
66
|
+
return;
|
|
67
|
+
asyncLocalStorageInitialized = true;
|
|
68
|
+
try {
|
|
69
|
+
const { AsyncLocalStorage } = await import('async_hooks');
|
|
70
|
+
asyncLocalStorage = new AsyncLocalStorage();
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Not in Node.js environment, use global context only
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Initialize synchronously if possible (for Node.js environments)
|
|
77
|
+
if (typeof process !== 'undefined' && process.versions?.node) {
|
|
78
|
+
import('async_hooks')
|
|
79
|
+
.then(({ AsyncLocalStorage }) => {
|
|
80
|
+
asyncLocalStorage = new AsyncLocalStorage();
|
|
81
|
+
asyncLocalStorageInitialized = true;
|
|
82
|
+
})
|
|
83
|
+
.catch(() => {
|
|
84
|
+
asyncLocalStorageInitialized = true;
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get the current execution context
|
|
89
|
+
* Merges: environment defaults → global context → local context
|
|
90
|
+
*/
|
|
91
|
+
export function getContext() {
|
|
92
|
+
const envContext = getEnvContext();
|
|
93
|
+
const localContext = asyncLocalStorage?.getStore();
|
|
94
|
+
return {
|
|
95
|
+
...envContext,
|
|
96
|
+
...globalContext,
|
|
97
|
+
...localContext,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Run a function with a specific execution context
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```ts
|
|
105
|
+
* const posts = await withContext({ provider: 'openai', batchMode: 'deferred' }, async () => {
|
|
106
|
+
* const titles = await list`10 blog titles`
|
|
107
|
+
* return titles.map(title => write`blog post: ${title}`)
|
|
108
|
+
* })
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export function withContext(context, fn) {
|
|
112
|
+
const mergedContext = { ...getContext(), ...context };
|
|
113
|
+
if (asyncLocalStorage) {
|
|
114
|
+
return asyncLocalStorage.run(mergedContext, fn);
|
|
115
|
+
}
|
|
116
|
+
// Fallback: temporarily modify global context
|
|
117
|
+
const previousContext = globalContext;
|
|
118
|
+
globalContext = mergedContext;
|
|
119
|
+
try {
|
|
120
|
+
return fn();
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
globalContext = previousContext;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// ============================================================================
|
|
127
|
+
// Environment Defaults
|
|
128
|
+
// ============================================================================
|
|
129
|
+
function getEnvContext() {
|
|
130
|
+
if (typeof process === 'undefined')
|
|
131
|
+
return {};
|
|
132
|
+
const context = {};
|
|
133
|
+
// Model defaults
|
|
134
|
+
if (process.env.AI_MODEL) {
|
|
135
|
+
context.model = process.env.AI_MODEL;
|
|
136
|
+
}
|
|
137
|
+
// Provider defaults
|
|
138
|
+
if (process.env.AI_PROVIDER) {
|
|
139
|
+
context.provider = process.env.AI_PROVIDER;
|
|
140
|
+
}
|
|
141
|
+
else if (process.env.ANTHROPIC_API_KEY && !process.env.OPENAI_API_KEY) {
|
|
142
|
+
context.provider = 'anthropic';
|
|
143
|
+
}
|
|
144
|
+
else if (process.env.OPENAI_API_KEY) {
|
|
145
|
+
context.provider = 'openai';
|
|
146
|
+
}
|
|
147
|
+
else if (process.env.CLOUDFLARE_API_TOKEN) {
|
|
148
|
+
context.provider = 'cloudflare';
|
|
149
|
+
}
|
|
150
|
+
else if (process.env.AWS_ACCESS_KEY_ID) {
|
|
151
|
+
context.provider = 'bedrock';
|
|
152
|
+
}
|
|
153
|
+
// Batch mode
|
|
154
|
+
if (process.env.AI_BATCH_MODE) {
|
|
155
|
+
context.batchMode = process.env.AI_BATCH_MODE;
|
|
156
|
+
}
|
|
157
|
+
// Flex threshold (when to start using flex processing)
|
|
158
|
+
if (process.env.AI_FLEX_THRESHOLD) {
|
|
159
|
+
context.flexThreshold = parseInt(process.env.AI_FLEX_THRESHOLD, 10);
|
|
160
|
+
}
|
|
161
|
+
// Batch threshold (when to switch from flex to full batch)
|
|
162
|
+
if (process.env.AI_BATCH_THRESHOLD) {
|
|
163
|
+
context.batchThreshold = parseInt(process.env.AI_BATCH_THRESHOLD, 10);
|
|
164
|
+
}
|
|
165
|
+
// Webhook URL
|
|
166
|
+
if (process.env.AI_BATCH_WEBHOOK_URL) {
|
|
167
|
+
context.webhookUrl = process.env.AI_BATCH_WEBHOOK_URL;
|
|
168
|
+
}
|
|
169
|
+
return context;
|
|
170
|
+
}
|
|
171
|
+
// ============================================================================
|
|
172
|
+
// Context Helpers
|
|
173
|
+
// ============================================================================
|
|
174
|
+
/**
|
|
175
|
+
* Get the effective model from context
|
|
176
|
+
*/
|
|
177
|
+
export function getModel() {
|
|
178
|
+
const ctx = getContext();
|
|
179
|
+
return ctx.model || 'sonnet';
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get the effective provider from context
|
|
183
|
+
*/
|
|
184
|
+
export function getProvider() {
|
|
185
|
+
const ctx = getContext();
|
|
186
|
+
return ctx.provider || 'openai';
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Get the effective batch mode from context
|
|
190
|
+
*/
|
|
191
|
+
export function getBatchMode() {
|
|
192
|
+
const ctx = getContext();
|
|
193
|
+
return ctx.batchMode || 'auto';
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Get the flex threshold from context (minimum items to use flex)
|
|
197
|
+
* Default: 5 items
|
|
198
|
+
*/
|
|
199
|
+
export function getFlexThreshold() {
|
|
200
|
+
const ctx = getContext();
|
|
201
|
+
return ctx.flexThreshold || 5;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get the batch threshold from context (minimum items to use full batch)
|
|
205
|
+
* Default: 500 items
|
|
206
|
+
*/
|
|
207
|
+
export function getBatchThreshold() {
|
|
208
|
+
const ctx = getContext();
|
|
209
|
+
return ctx.batchThreshold || 500;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Determine the execution tier for a given number of items
|
|
213
|
+
*
|
|
214
|
+
* Auto mode tiers:
|
|
215
|
+
* - immediate: < flexThreshold (default 5) - concurrent requests, full price
|
|
216
|
+
* - flex: flexThreshold to batchThreshold (5-500) - ~50% discount, minutes
|
|
217
|
+
* - batch: >= batchThreshold (500+) - 50% discount, up to 24hr
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* ```ts
|
|
221
|
+
* getExecutionTier(3) // 'immediate' (< 5)
|
|
222
|
+
* getExecutionTier(50) // 'flex' (5-500)
|
|
223
|
+
* getExecutionTier(1000) // 'batch' (500+)
|
|
224
|
+
* ```
|
|
225
|
+
*/
|
|
226
|
+
export function getExecutionTier(itemCount) {
|
|
227
|
+
const mode = getBatchMode();
|
|
228
|
+
switch (mode) {
|
|
229
|
+
case 'immediate':
|
|
230
|
+
return 'immediate';
|
|
231
|
+
case 'flex':
|
|
232
|
+
return 'flex';
|
|
233
|
+
case 'deferred':
|
|
234
|
+
return 'batch';
|
|
235
|
+
case 'auto':
|
|
236
|
+
default: {
|
|
237
|
+
const flexThreshold = getFlexThreshold();
|
|
238
|
+
const batchThreshold = getBatchThreshold();
|
|
239
|
+
if (itemCount < flexThreshold) {
|
|
240
|
+
return 'immediate';
|
|
241
|
+
}
|
|
242
|
+
else if (itemCount < batchThreshold) {
|
|
243
|
+
return 'flex';
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
return 'batch';
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Check if we should use the batch API for a given number of items
|
|
253
|
+
* @deprecated Use getExecutionTier() instead for more granular control
|
|
254
|
+
*/
|
|
255
|
+
export function shouldUseBatchAPI(itemCount) {
|
|
256
|
+
const tier = getExecutionTier(itemCount);
|
|
257
|
+
return tier === 'flex' || tier === 'batch';
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Check if flex processing is available for the current provider
|
|
261
|
+
* Only OpenAI and AWS Bedrock support flex processing currently
|
|
262
|
+
*/
|
|
263
|
+
export function isFlexAvailable() {
|
|
264
|
+
const provider = getProvider();
|
|
265
|
+
return provider === 'openai' || provider === 'bedrock' || provider === 'google';
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding utilities from AI SDK
|
|
3
|
+
*
|
|
4
|
+
* Re-exports embed, embedMany, and cosineSimilarity from the Vercel AI SDK
|
|
5
|
+
* with additional convenience wrappers.
|
|
6
|
+
*
|
|
7
|
+
* Default model: Cloudflare Workers AI @cf/baai/bge-m3
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
export { embed, embedMany, cosineSimilarity } from 'ai';
|
|
12
|
+
export type { EmbeddingModel, Embedding } from 'ai';
|
|
13
|
+
export { cloudflare, cloudflareEmbedding, DEFAULT_CF_EMBEDDING_MODEL } from 'ai-providers/cloudflare';
|
|
14
|
+
/**
|
|
15
|
+
* Get the default embedding model (Cloudflare @cf/baai/bge-m3)
|
|
16
|
+
*/
|
|
17
|
+
export declare function getDefaultEmbeddingModel(): import("ai").EmbeddingModel<string>;
|
|
18
|
+
/**
|
|
19
|
+
* Embed a single value using the default Cloudflare model
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { embedText } from 'ai-functions'
|
|
24
|
+
*
|
|
25
|
+
* const { embedding } = await embedText('hello world')
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function embedText(value: string): Promise<import("ai").EmbedResult<string>>;
|
|
29
|
+
/**
|
|
30
|
+
* Embed multiple values using the default Cloudflare model
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* import { embedTexts } from 'ai-functions'
|
|
35
|
+
*
|
|
36
|
+
* const { embeddings } = await embedTexts(['doc1', 'doc2', 'doc3'])
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function embedTexts(values: string[]): Promise<import("ai").EmbedManyResult<string>>;
|
|
40
|
+
/**
|
|
41
|
+
* Result of an embed operation
|
|
42
|
+
*/
|
|
43
|
+
export interface EmbedResult<T = string> {
|
|
44
|
+
/** The original input value */
|
|
45
|
+
value: T;
|
|
46
|
+
/** The generated embedding vector */
|
|
47
|
+
embedding: number[];
|
|
48
|
+
/** Token usage */
|
|
49
|
+
usage: {
|
|
50
|
+
tokens: number;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Result of an embedMany operation
|
|
55
|
+
*/
|
|
56
|
+
export interface EmbedManyResult<T = string> {
|
|
57
|
+
/** The original input values */
|
|
58
|
+
values: T[];
|
|
59
|
+
/** The generated embedding vectors */
|
|
60
|
+
embeddings: number[][];
|
|
61
|
+
/** Token usage */
|
|
62
|
+
usage: {
|
|
63
|
+
tokens: number;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Find the most similar items to a query embedding
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* import { embed, embedMany, findSimilar } from 'ai-functions'
|
|
72
|
+
*
|
|
73
|
+
* const documents = ['doc1', 'doc2', 'doc3']
|
|
74
|
+
* const { embeddings } = await embedMany({ model, values: documents })
|
|
75
|
+
* const { embedding: queryEmbedding } = await embed({ model, value: 'search query' })
|
|
76
|
+
*
|
|
77
|
+
* const results = findSimilar(queryEmbedding, embeddings, documents, { topK: 2 })
|
|
78
|
+
* // [{ item: 'doc1', score: 0.95, index: 0 }, { item: 'doc2', score: 0.82, index: 1 }]
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare function findSimilar<T>(queryEmbedding: number[], embeddings: number[][], items: T[], options?: {
|
|
82
|
+
/** Number of results to return (default: 10) */
|
|
83
|
+
topK?: number;
|
|
84
|
+
/** Minimum similarity score (default: 0) */
|
|
85
|
+
minScore?: number;
|
|
86
|
+
}): Array<{
|
|
87
|
+
item: T;
|
|
88
|
+
score: number;
|
|
89
|
+
index: number;
|
|
90
|
+
}>;
|
|
91
|
+
/**
|
|
92
|
+
* Calculate pairwise similarities between all embeddings
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```ts
|
|
96
|
+
* const matrix = pairwiseSimilarity(embeddings)
|
|
97
|
+
* // matrix[i][j] = similarity between embeddings[i] and embeddings[j]
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export declare function pairwiseSimilarity(embeddings: number[][]): number[][];
|
|
101
|
+
/**
|
|
102
|
+
* Cluster embeddings by similarity using a simple threshold-based approach
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```ts
|
|
106
|
+
* const clusters = clusterBySimilarity(embeddings, items, { threshold: 0.8 })
|
|
107
|
+
* // [[item1, item2], [item3], [item4, item5, item6]]
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export declare function clusterBySimilarity<T>(embeddings: number[][], items: T[], options?: {
|
|
111
|
+
/** Similarity threshold for clustering (default: 0.8) */
|
|
112
|
+
threshold?: number;
|
|
113
|
+
}): T[][];
|
|
114
|
+
/**
|
|
115
|
+
* Average multiple embeddings into a single embedding
|
|
116
|
+
* Useful for creating document embeddings from chunk embeddings
|
|
117
|
+
*/
|
|
118
|
+
export declare function averageEmbeddings(embeddings: number[][]): number[];
|
|
119
|
+
/**
|
|
120
|
+
* Normalize an embedding to unit length
|
|
121
|
+
*/
|
|
122
|
+
export declare function normalizeEmbedding(embedding: number[]): number[];
|
|
123
|
+
//# sourceMappingURL=embeddings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAA;AAGvD,YAAY,EACV,cAAc,EACd,SAAS,EACV,MAAM,IAAI,CAAA;AAGX,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AAKrG;;GAEG;AACH,wBAAgB,wBAAwB,wCAEvC;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,6CAK5C;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,iDAKhD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,MAAM;IACrC,+BAA+B;IAC/B,KAAK,EAAE,CAAC,CAAA;IACR,qCAAqC;IACrC,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,kBAAkB;IAClB,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,MAAM;IACzC,gCAAgC;IAChC,MAAM,EAAE,CAAC,EAAE,CAAA;IACX,sCAAsC;IACtC,UAAU,EAAE,MAAM,EAAE,EAAE,CAAA;IACtB,kBAAkB;IAClB,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,cAAc,EAAE,MAAM,EAAE,EACxB,UAAU,EAAE,MAAM,EAAE,EAAE,EACtB,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,GAAE;IACP,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAA;CACb,GACL,KAAK,CAAC;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBlD;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAgBrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,UAAU,EAAE,MAAM,EAAE,EAAE,EACtB,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,GAAE;IACP,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAA;CACd,GACL,CAAC,EAAE,EAAE,CA4BP;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAkBlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAIhE"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding utilities from AI SDK
|
|
3
|
+
*
|
|
4
|
+
* Re-exports embed, embedMany, and cosineSimilarity from the Vercel AI SDK
|
|
5
|
+
* with additional convenience wrappers.
|
|
6
|
+
*
|
|
7
|
+
* Default model: Cloudflare Workers AI @cf/baai/bge-m3
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
// Re-export core embedding functions from AI SDK
|
|
12
|
+
export { embed, embedMany, cosineSimilarity } from 'ai';
|
|
13
|
+
// Re-export Cloudflare provider from ai-providers
|
|
14
|
+
export { cloudflare, cloudflareEmbedding, DEFAULT_CF_EMBEDDING_MODEL } from 'ai-providers/cloudflare';
|
|
15
|
+
import { embed as aiEmbed, embedMany as aiEmbedMany } from 'ai';
|
|
16
|
+
import { cloudflareEmbedding, DEFAULT_CF_EMBEDDING_MODEL } from 'ai-providers/cloudflare';
|
|
17
|
+
/**
|
|
18
|
+
* Get the default embedding model (Cloudflare @cf/baai/bge-m3)
|
|
19
|
+
*/
|
|
20
|
+
export function getDefaultEmbeddingModel() {
|
|
21
|
+
return cloudflareEmbedding(DEFAULT_CF_EMBEDDING_MODEL);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Embed a single value using the default Cloudflare model
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* import { embedText } from 'ai-functions'
|
|
29
|
+
*
|
|
30
|
+
* const { embedding } = await embedText('hello world')
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export async function embedText(value) {
|
|
34
|
+
return aiEmbed({
|
|
35
|
+
model: getDefaultEmbeddingModel(),
|
|
36
|
+
value
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Embed multiple values using the default Cloudflare model
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* import { embedTexts } from 'ai-functions'
|
|
45
|
+
*
|
|
46
|
+
* const { embeddings } = await embedTexts(['doc1', 'doc2', 'doc3'])
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export async function embedTexts(values) {
|
|
50
|
+
return aiEmbedMany({
|
|
51
|
+
model: getDefaultEmbeddingModel(),
|
|
52
|
+
values
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Find the most similar items to a query embedding
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```ts
|
|
60
|
+
* import { embed, embedMany, findSimilar } from 'ai-functions'
|
|
61
|
+
*
|
|
62
|
+
* const documents = ['doc1', 'doc2', 'doc3']
|
|
63
|
+
* const { embeddings } = await embedMany({ model, values: documents })
|
|
64
|
+
* const { embedding: queryEmbedding } = await embed({ model, value: 'search query' })
|
|
65
|
+
*
|
|
66
|
+
* const results = findSimilar(queryEmbedding, embeddings, documents, { topK: 2 })
|
|
67
|
+
* // [{ item: 'doc1', score: 0.95, index: 0 }, { item: 'doc2', score: 0.82, index: 1 }]
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export function findSimilar(queryEmbedding, embeddings, items, options = {}) {
|
|
71
|
+
const { topK = 10, minScore = 0 } = options;
|
|
72
|
+
// Import cosineSimilarity dynamically to avoid issues if ai isn't installed
|
|
73
|
+
const { cosineSimilarity } = require('ai');
|
|
74
|
+
const scored = embeddings
|
|
75
|
+
.map((embedding, index) => ({
|
|
76
|
+
item: items[index],
|
|
77
|
+
score: cosineSimilarity(queryEmbedding, embedding),
|
|
78
|
+
index
|
|
79
|
+
}))
|
|
80
|
+
.filter(result => result.score >= minScore)
|
|
81
|
+
.sort((a, b) => b.score - a.score)
|
|
82
|
+
.slice(0, topK);
|
|
83
|
+
return scored;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Calculate pairwise similarities between all embeddings
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```ts
|
|
90
|
+
* const matrix = pairwiseSimilarity(embeddings)
|
|
91
|
+
* // matrix[i][j] = similarity between embeddings[i] and embeddings[j]
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export function pairwiseSimilarity(embeddings) {
|
|
95
|
+
const { cosineSimilarity } = require('ai');
|
|
96
|
+
const n = embeddings.length;
|
|
97
|
+
const matrix = Array(n).fill(null).map(() => Array(n).fill(0));
|
|
98
|
+
for (let i = 0; i < n; i++) {
|
|
99
|
+
matrix[i][i] = 1; // Self-similarity is always 1
|
|
100
|
+
for (let j = i + 1; j < n; j++) {
|
|
101
|
+
const sim = cosineSimilarity(embeddings[i], embeddings[j]);
|
|
102
|
+
matrix[i][j] = sim;
|
|
103
|
+
matrix[j][i] = sim;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return matrix;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Cluster embeddings by similarity using a simple threshold-based approach
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```ts
|
|
113
|
+
* const clusters = clusterBySimilarity(embeddings, items, { threshold: 0.8 })
|
|
114
|
+
* // [[item1, item2], [item3], [item4, item5, item6]]
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export function clusterBySimilarity(embeddings, items, options = {}) {
|
|
118
|
+
const { threshold = 0.8 } = options;
|
|
119
|
+
const { cosineSimilarity } = require('ai');
|
|
120
|
+
const n = embeddings.length;
|
|
121
|
+
const assigned = new Set();
|
|
122
|
+
const clusters = [];
|
|
123
|
+
for (let i = 0; i < n; i++) {
|
|
124
|
+
if (assigned.has(i))
|
|
125
|
+
continue;
|
|
126
|
+
const cluster = [items[i]];
|
|
127
|
+
assigned.add(i);
|
|
128
|
+
for (let j = i + 1; j < n; j++) {
|
|
129
|
+
if (assigned.has(j))
|
|
130
|
+
continue;
|
|
131
|
+
const sim = cosineSimilarity(embeddings[i], embeddings[j]);
|
|
132
|
+
if (sim >= threshold) {
|
|
133
|
+
cluster.push(items[j]);
|
|
134
|
+
assigned.add(j);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
clusters.push(cluster);
|
|
138
|
+
}
|
|
139
|
+
return clusters;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Average multiple embeddings into a single embedding
|
|
143
|
+
* Useful for creating document embeddings from chunk embeddings
|
|
144
|
+
*/
|
|
145
|
+
export function averageEmbeddings(embeddings) {
|
|
146
|
+
if (embeddings.length === 0)
|
|
147
|
+
return [];
|
|
148
|
+
const dim = embeddings[0].length;
|
|
149
|
+
const result = new Array(dim).fill(0);
|
|
150
|
+
for (const embedding of embeddings) {
|
|
151
|
+
for (let i = 0; i < dim; i++) {
|
|
152
|
+
result[i] += embedding[i];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const n = embeddings.length;
|
|
156
|
+
for (let i = 0; i < dim; i++) {
|
|
157
|
+
result[i] /= n;
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Normalize an embedding to unit length
|
|
163
|
+
*/
|
|
164
|
+
export function normalizeEmbedding(embedding) {
|
|
165
|
+
const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));
|
|
166
|
+
if (magnitude === 0)
|
|
167
|
+
return embedding;
|
|
168
|
+
return embedding.map(val => val / magnitude);
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=embeddings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eval/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eval/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
|
|
@@ -0,0 +1,66 @@
|
|
|
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 { type ModelInfo } from 'language-models';
|
|
10
|
+
export type ModelTier = 'best' | 'fast' | 'cheap';
|
|
11
|
+
export interface EvalModel {
|
|
12
|
+
/** Alias or full model ID */
|
|
13
|
+
id: string;
|
|
14
|
+
/** Human-readable name */
|
|
15
|
+
name: string;
|
|
16
|
+
/** Provider slug */
|
|
17
|
+
provider: string;
|
|
18
|
+
/** Capability tier */
|
|
19
|
+
tier: ModelTier;
|
|
20
|
+
/** Optional notes */
|
|
21
|
+
notes?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Core models to test - one per tier per major provider
|
|
25
|
+
* These resolve via ai-providers to OpenRouter or direct SDKs
|
|
26
|
+
*
|
|
27
|
+
* Updated: December 2025
|
|
28
|
+
*
|
|
29
|
+
* Note: Some models use OpenRouter format (provider/model) to avoid
|
|
30
|
+
* resolution issues with provider_model_id mismatches.
|
|
31
|
+
*/
|
|
32
|
+
export declare const EVAL_MODELS: EvalModel[];
|
|
33
|
+
/**
|
|
34
|
+
* Get models by tier
|
|
35
|
+
*/
|
|
36
|
+
export declare function getModelsByTier(tier: ModelTier): EvalModel[];
|
|
37
|
+
/**
|
|
38
|
+
* Get models by provider
|
|
39
|
+
*/
|
|
40
|
+
export declare function getModelsByProvider(provider: string): EvalModel[];
|
|
41
|
+
/**
|
|
42
|
+
* Get model info from language-models package (includes pricing)
|
|
43
|
+
*/
|
|
44
|
+
export declare function getModelInfo(id: string): ModelInfo | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Get pricing for a model (from OpenRouter data)
|
|
47
|
+
*/
|
|
48
|
+
export declare function getModelPricing(id: string): {
|
|
49
|
+
prompt: number;
|
|
50
|
+
completion: number;
|
|
51
|
+
} | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Create evalite variants for model testing
|
|
54
|
+
*/
|
|
55
|
+
export declare function createModelVariants(opts?: {
|
|
56
|
+
tiers?: ModelTier[];
|
|
57
|
+
providers?: string[];
|
|
58
|
+
}): Array<{
|
|
59
|
+
name: string;
|
|
60
|
+
input: EvalModel;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* Get a representative model from each provider for a given tier
|
|
64
|
+
*/
|
|
65
|
+
export declare function getRepresentativeModels(tier: ModelTier): EvalModel[];
|
|
66
|
+
//# sourceMappingURL=models.d.ts.map
|