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
package/dist/factory/index.js
DELETED
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
import { generateText, generateObject, Output } from 'ai';
|
|
2
|
-
import { openai } from '@ai-sdk/openai';
|
|
3
|
-
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
|
|
4
|
-
import { Response } from 'undici';
|
|
5
|
-
import { z } from 'zod';
|
|
6
|
-
import PQueue from 'p-queue';
|
|
7
|
-
import { createRequestHandler } from '../utils/request-handler';
|
|
8
|
-
import { StreamProgressTracker } from '../utils/stream-progress';
|
|
9
|
-
import { AIRequestError } from '../errors';
|
|
10
|
-
// Add this at the top of the file, before any other code
|
|
11
|
-
function isTemplateStringsArray(value) {
|
|
12
|
-
return Array.isArray(value) && 'raw' in value;
|
|
13
|
-
}
|
|
14
|
-
export function isStreamingResult(result) {
|
|
15
|
-
return (result !== null &&
|
|
16
|
-
typeof result === 'object' &&
|
|
17
|
-
'experimental_stream' in result &&
|
|
18
|
-
typeof result.experimental_stream === 'object' &&
|
|
19
|
-
Symbol.asyncIterator in result.experimental_stream);
|
|
20
|
-
}
|
|
21
|
-
export function isJsonResult(result) {
|
|
22
|
-
return 'object' in result && 'toJsonResponse' in result;
|
|
23
|
-
}
|
|
24
|
-
// PLACEHOLDER: response creation functions
|
|
25
|
-
export function createAIFunction(schema) {
|
|
26
|
-
const fn = async (args, options = {}) => {
|
|
27
|
-
if (!args) {
|
|
28
|
-
return { schema };
|
|
29
|
-
}
|
|
30
|
-
const requestHandler = createRequestHandler({ requestHandling: options.requestHandling });
|
|
31
|
-
const result = await requestHandler.execute(async () => {
|
|
32
|
-
return generateText({
|
|
33
|
-
model: options.model || getProvider()('gpt-4o-mini'),
|
|
34
|
-
prompt: options.prompt || '',
|
|
35
|
-
maxRetries: 2,
|
|
36
|
-
experimental_output: Output.object({ schema: schema }),
|
|
37
|
-
system: options.system,
|
|
38
|
-
temperature: options.temperature,
|
|
39
|
-
maxTokens: options.maxTokens,
|
|
40
|
-
topP: options.topP,
|
|
41
|
-
frequencyPenalty: options.frequencyPenalty,
|
|
42
|
-
presencePenalty: options.presencePenalty,
|
|
43
|
-
stopSequences: options.stop ? Array.isArray(options.stop) ? options.stop : [options.stop] : undefined,
|
|
44
|
-
seed: options.seed,
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
if (!result.experimental_output) {
|
|
48
|
-
throw new Error('No output received from model');
|
|
49
|
-
}
|
|
50
|
-
return result.experimental_output;
|
|
51
|
-
};
|
|
52
|
-
fn.schema = schema;
|
|
53
|
-
return fn;
|
|
54
|
-
}
|
|
55
|
-
// PLACEHOLDER: createTemplateFunction implementation
|
|
56
|
-
function getProvider() {
|
|
57
|
-
const gateway = process.env.AI_GATEWAY;
|
|
58
|
-
const apiKey = process.env.OPENAI_API_KEY;
|
|
59
|
-
if (!apiKey) {
|
|
60
|
-
throw new Error('OPENAI_API_KEY environment variable is required');
|
|
61
|
-
}
|
|
62
|
-
return gateway
|
|
63
|
-
? createOpenAICompatible({
|
|
64
|
-
baseURL: gateway,
|
|
65
|
-
name: 'openai',
|
|
66
|
-
headers: {
|
|
67
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
68
|
-
'Content-Type': 'application/json'
|
|
69
|
-
}
|
|
70
|
-
})
|
|
71
|
-
: openai;
|
|
72
|
-
}
|
|
73
|
-
export function createJsonResponse(result) {
|
|
74
|
-
return result.toJsonResponse();
|
|
75
|
-
}
|
|
76
|
-
export function createStreamResponse(result) {
|
|
77
|
-
return new Response(result.experimental_stream, {
|
|
78
|
-
headers: { 'Content-Type': 'text/plain' },
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
export function createTextResponse(result) {
|
|
82
|
-
return new Response(result.text, {
|
|
83
|
-
headers: { 'Content-Type': 'text/plain' },
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
export function createTemplateFunction(defaultOptions = {}) {
|
|
87
|
-
let currentPrompt;
|
|
88
|
-
let queue;
|
|
89
|
-
const initQueue = (options) => {
|
|
90
|
-
if (!queue && options.concurrency) {
|
|
91
|
-
queue = new PQueue({ concurrency: options.concurrency });
|
|
92
|
-
}
|
|
93
|
-
return queue;
|
|
94
|
-
};
|
|
95
|
-
const templateFn = async (prompt, options = defaultOptions) => {
|
|
96
|
-
currentPrompt = prompt;
|
|
97
|
-
const modelParams = {
|
|
98
|
-
temperature: options.temperature,
|
|
99
|
-
maxTokens: options.maxTokens,
|
|
100
|
-
topP: options.topP,
|
|
101
|
-
frequencyPenalty: options.frequencyPenalty,
|
|
102
|
-
presencePenalty: options.presencePenalty,
|
|
103
|
-
stopSequences: options.stop ? Array.isArray(options.stop) ? options.stop : [options.stop] : undefined,
|
|
104
|
-
seed: options.seed,
|
|
105
|
-
system: options.system,
|
|
106
|
-
};
|
|
107
|
-
const executeRequest = async () => {
|
|
108
|
-
try {
|
|
109
|
-
if (options.outputFormat === 'json') {
|
|
110
|
-
try {
|
|
111
|
-
const model = options.model || openai(process.env.OPENAI_DEFAULT_MODEL || 'gpt-4o', { structuredOutputs: true });
|
|
112
|
-
if (options.schema) {
|
|
113
|
-
const schema = options.schema instanceof z.ZodType
|
|
114
|
-
? options.schema
|
|
115
|
-
: z.object(Object.fromEntries(Object.entries(options.schema).map(([key, type]) => [
|
|
116
|
-
key,
|
|
117
|
-
type === 'string' ? z.string() :
|
|
118
|
-
type === 'number' ? z.number() :
|
|
119
|
-
type === 'boolean' ? z.boolean() :
|
|
120
|
-
type === 'array' ? z.array(z.unknown()) :
|
|
121
|
-
type === 'object' ? z.record(z.string(), z.unknown()) :
|
|
122
|
-
z.unknown()
|
|
123
|
-
])));
|
|
124
|
-
const result = await generateObject({
|
|
125
|
-
model,
|
|
126
|
-
schema,
|
|
127
|
-
prompt,
|
|
128
|
-
...modelParams,
|
|
129
|
-
});
|
|
130
|
-
return JSON.stringify(result.object);
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
const result = await generateObject({
|
|
134
|
-
model,
|
|
135
|
-
output: 'no-schema',
|
|
136
|
-
prompt,
|
|
137
|
-
...modelParams,
|
|
138
|
-
});
|
|
139
|
-
return JSON.stringify(result.object);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
if (error instanceof Error) {
|
|
144
|
-
throw new AIRequestError(`Invalid JSON format: ${error.message}`, error, false);
|
|
145
|
-
}
|
|
146
|
-
throw new AIRequestError('Invalid JSON format', error, false);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
const result = (await generateText({
|
|
150
|
-
model: options.model || openai('gpt-4o-mini'),
|
|
151
|
-
prompt,
|
|
152
|
-
...modelParams,
|
|
153
|
-
...options,
|
|
154
|
-
}));
|
|
155
|
-
if (!result) {
|
|
156
|
-
throw new AIRequestError('No result received from model', undefined, false);
|
|
157
|
-
}
|
|
158
|
-
return result.text;
|
|
159
|
-
}
|
|
160
|
-
catch (error) {
|
|
161
|
-
if (error instanceof Error) {
|
|
162
|
-
throw error;
|
|
163
|
-
}
|
|
164
|
-
throw new AIRequestError('Failed to generate text', error, false);
|
|
165
|
-
}
|
|
166
|
-
};
|
|
167
|
-
try {
|
|
168
|
-
const currentQueue = initQueue(options);
|
|
169
|
-
if (!currentQueue) {
|
|
170
|
-
return executeRequest();
|
|
171
|
-
}
|
|
172
|
-
return currentQueue.add(executeRequest);
|
|
173
|
-
}
|
|
174
|
-
catch (error) {
|
|
175
|
-
if (error instanceof Error) {
|
|
176
|
-
throw error;
|
|
177
|
-
}
|
|
178
|
-
throw new AIRequestError('Failed to generate text', error, false);
|
|
179
|
-
}
|
|
180
|
-
};
|
|
181
|
-
const asyncIterator = async function* () {
|
|
182
|
-
if (!currentPrompt) {
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
const options = defaultOptions;
|
|
186
|
-
const modelParams = {
|
|
187
|
-
temperature: options.temperature,
|
|
188
|
-
maxTokens: options.maxTokens,
|
|
189
|
-
topP: options.topP,
|
|
190
|
-
frequencyPenalty: options.frequencyPenalty,
|
|
191
|
-
presencePenalty: options.presencePenalty,
|
|
192
|
-
stopSequences: options.stop ? Array.isArray(options.stop) ? options.stop : [options.stop] : undefined,
|
|
193
|
-
seed: options.seed,
|
|
194
|
-
system: options.system,
|
|
195
|
-
};
|
|
196
|
-
const progressTracker = options.streaming ?
|
|
197
|
-
new StreamProgressTracker(options.streaming) : undefined;
|
|
198
|
-
const executeRequest = async () => {
|
|
199
|
-
const result = (await generateText({
|
|
200
|
-
model: options.model || openai('gpt-4o-mini'),
|
|
201
|
-
prompt: currentPrompt,
|
|
202
|
-
maxRetries: 2,
|
|
203
|
-
...modelParams,
|
|
204
|
-
...options,
|
|
205
|
-
}));
|
|
206
|
-
if (!result) {
|
|
207
|
-
throw new Error('No result received from model');
|
|
208
|
-
}
|
|
209
|
-
return result;
|
|
210
|
-
};
|
|
211
|
-
try {
|
|
212
|
-
const currentQueue = initQueue(options);
|
|
213
|
-
const result = currentQueue
|
|
214
|
-
? await currentQueue.add(executeRequest)
|
|
215
|
-
: await executeRequest();
|
|
216
|
-
if (isStreamingResult(result)) {
|
|
217
|
-
for await (const chunk of result.experimental_stream) {
|
|
218
|
-
if (progressTracker) {
|
|
219
|
-
progressTracker.onChunk(chunk);
|
|
220
|
-
}
|
|
221
|
-
yield chunk;
|
|
222
|
-
}
|
|
223
|
-
progressTracker?.onComplete();
|
|
224
|
-
}
|
|
225
|
-
else if (result) {
|
|
226
|
-
if (progressTracker) {
|
|
227
|
-
progressTracker.onChunk(result.text);
|
|
228
|
-
progressTracker.onComplete();
|
|
229
|
-
}
|
|
230
|
-
yield result.text;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
catch (error) {
|
|
234
|
-
const errorMessage = error instanceof Error ? error.message : 'Failed to generate text';
|
|
235
|
-
progressTracker?.onChunk(errorMessage);
|
|
236
|
-
progressTracker?.onComplete();
|
|
237
|
-
console.error('Error in asyncIterator:', error);
|
|
238
|
-
yield errorMessage;
|
|
239
|
-
}
|
|
240
|
-
};
|
|
241
|
-
const createAsyncIterablePromise = (promise, prompt, options = defaultOptions) => {
|
|
242
|
-
const asyncIterable = {
|
|
243
|
-
[Symbol.asyncIterator]: asyncIterator
|
|
244
|
-
};
|
|
245
|
-
const callablePromise = Object.assign(async (opts) => {
|
|
246
|
-
if (!opts)
|
|
247
|
-
return promise;
|
|
248
|
-
return templateFn(prompt, { ...options, ...opts });
|
|
249
|
-
}, {
|
|
250
|
-
then: (onfulfilled, onrejected) => promise.then(onfulfilled, onrejected),
|
|
251
|
-
catch: (onrejected) => promise.catch(onrejected),
|
|
252
|
-
finally: (onfinally) => promise.finally(onfinally),
|
|
253
|
-
[Symbol.asyncIterator]: asyncIterable[Symbol.asyncIterator]
|
|
254
|
-
});
|
|
255
|
-
return callablePromise;
|
|
256
|
-
};
|
|
257
|
-
const baseFn = Object.assign((stringsOrOptions, ...values) => {
|
|
258
|
-
if (!stringsOrOptions) {
|
|
259
|
-
return createAsyncIterablePromise(templateFn('', defaultOptions), '', defaultOptions);
|
|
260
|
-
}
|
|
261
|
-
if (isTemplateStringsArray(stringsOrOptions)) {
|
|
262
|
-
const strings = stringsOrOptions;
|
|
263
|
-
if (strings.length - 1 !== values.length) {
|
|
264
|
-
throw new Error('Template literal slots must match provided values');
|
|
265
|
-
}
|
|
266
|
-
const lastValue = values[values.length - 1];
|
|
267
|
-
const options = typeof lastValue === 'object' && !Array.isArray(lastValue) && lastValue !== null
|
|
268
|
-
? { ...defaultOptions, ...lastValue }
|
|
269
|
-
: defaultOptions;
|
|
270
|
-
const actualValues = typeof lastValue === 'object' && !Array.isArray(lastValue) && lastValue !== null
|
|
271
|
-
? values.slice(0, -1)
|
|
272
|
-
: values;
|
|
273
|
-
const prompt = strings.reduce((acc, str, i) => acc + str + (actualValues[i] || ''), '');
|
|
274
|
-
return createAsyncIterablePromise(templateFn(prompt, options), prompt, options);
|
|
275
|
-
}
|
|
276
|
-
return createAsyncIterablePromise(templateFn('', { ...defaultOptions, ...stringsOrOptions }), '', { ...defaultOptions, ...stringsOrOptions });
|
|
277
|
-
}, {
|
|
278
|
-
withOptions: (opts = {}) => {
|
|
279
|
-
const prompt = opts.prompt || currentPrompt || '';
|
|
280
|
-
return templateFn(prompt, { ...defaultOptions, ...opts });
|
|
281
|
-
},
|
|
282
|
-
[Symbol.asyncIterator]: asyncIterator,
|
|
283
|
-
queue
|
|
284
|
-
});
|
|
285
|
-
return baseFn;
|
|
286
|
-
}
|
|
287
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/factory/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, beforeEach } from 'vitest';
|
|
2
|
-
import { createTemplateFunction } from './index';
|
|
3
|
-
import { openai } from '@ai-sdk/openai';
|
|
4
|
-
// import { anthropic } from '@ai-sdk/anthropic' // Commented out as it's just for test demonstration
|
|
5
|
-
describe('Template Function', () => {
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
process.env.OPENAI_API_KEY = process.env.OPENAI_API_KEY || 'test-key';
|
|
8
|
-
});
|
|
9
|
-
const model = openai('gpt-4o-mini');
|
|
10
|
-
describe('Template Literals', () => {
|
|
11
|
-
it('should support markdown generation', async () => {
|
|
12
|
-
const ai = createTemplateFunction();
|
|
13
|
-
const title = 'AI Functions';
|
|
14
|
-
const result = await ai `write a blog post in markdown starting with "# ${title}"`({ model });
|
|
15
|
-
expect(result).toMatch(/^# AI Functions/);
|
|
16
|
-
expect(result).toContain('# ');
|
|
17
|
-
expect(result).toContain('\n');
|
|
18
|
-
}, 30000);
|
|
19
|
-
// it('should support complex object summarization', async () => {
|
|
20
|
-
// const ai = createTemplateFunction()
|
|
21
|
-
// const itinerary = {
|
|
22
|
-
// dates: ['2024-01-01', '2024-01-02'],
|
|
23
|
-
// location: 'Miami Beach',
|
|
24
|
-
// activities: ['Swimming', 'Surfing']
|
|
25
|
-
// }
|
|
26
|
-
// const result = await ai`Summarize the itinerary: ${JSON.stringify(itinerary)}`({ model })
|
|
27
|
-
// expect(result).toContain('Miami Beach')
|
|
28
|
-
// expect(result).toMatch(/[Ss]wimming/)
|
|
29
|
-
// })
|
|
30
|
-
it('should support multiple interpolated values', async () => {
|
|
31
|
-
const ai = createTemplateFunction();
|
|
32
|
-
const city = 'Paris';
|
|
33
|
-
const days = 3;
|
|
34
|
-
const interests = ['art', 'food'];
|
|
35
|
-
const result = await ai `Create an itinerary for ${days} days in ${city} focusing on ${interests.join(' and ')}`({ model });
|
|
36
|
-
expect(result).toContain('Paris');
|
|
37
|
-
expect(result).toContain('art');
|
|
38
|
-
expect(result).toContain('food');
|
|
39
|
-
}, 30000);
|
|
40
|
-
});
|
|
41
|
-
// describe('Structured Outputs', () => {
|
|
42
|
-
// it('should support getting and using schema functions', async () => {
|
|
43
|
-
// const ai = new Proxy(createTemplateFunction(), {
|
|
44
|
-
// get: (target, prop) => {
|
|
45
|
-
// if (prop === 'categorizeProduct') {
|
|
46
|
-
// return createAIFunction(z.object({
|
|
47
|
-
// productType: z.enum(['App', 'API', 'Marketplace', 'Platform', 'Service', 'Website']),
|
|
48
|
-
// customer: z.string().describe('ideal customer profile'),
|
|
49
|
-
// solution: z.string().describe('describe the offer'),
|
|
50
|
-
// description: z.string().describe('website meta description')
|
|
51
|
-
// }))
|
|
52
|
-
// }
|
|
53
|
-
// return target[prop]
|
|
54
|
-
// }
|
|
55
|
-
// })
|
|
56
|
-
// // Get the function and use it later
|
|
57
|
-
// const categorizeProduct = ai.categorizeProduct
|
|
58
|
-
// const result1 = await categorizeProduct({ domain: 'stripe.com' }, { model })
|
|
59
|
-
// expect(result1).toHaveProperty('productType')
|
|
60
|
-
// expect(result1).toHaveProperty('customer')
|
|
61
|
-
// expect(result1).toHaveProperty('solution')
|
|
62
|
-
// expect(result1).toHaveProperty('description')
|
|
63
|
-
// expect(['App', 'API', 'Marketplace', 'Platform', 'Service', 'Website']).toContain(result1.productType)
|
|
64
|
-
// // Immediate invocation pattern
|
|
65
|
-
// const result2 = await ai.categorizeProduct({
|
|
66
|
-
// productType: 'App | API | Marketplace | Platform | Service | Website',
|
|
67
|
-
// customer: 'ideal customer profile',
|
|
68
|
-
// solution: 'describe the offer',
|
|
69
|
-
// description: 'website meta description',
|
|
70
|
-
// })({ name: 'drively AI' }, { model })
|
|
71
|
-
// expect(result2).toHaveProperty('productType')
|
|
72
|
-
// expect(result2).toHaveProperty('customer')
|
|
73
|
-
// expect(result2).toHaveProperty('solution')
|
|
74
|
-
// expect(result2).toHaveProperty('description')
|
|
75
|
-
// expect(['App', 'API', 'Marketplace', 'Platform', 'Service', 'Website']).toContain(result2.productType)
|
|
76
|
-
// }, 30000)
|
|
77
|
-
// it('should support enum output format', async () => {
|
|
78
|
-
// const ai = new Proxy(createTemplateFunction(), {
|
|
79
|
-
// get: (target, prop) => {
|
|
80
|
-
// if (prop === 'classifyMovie') {
|
|
81
|
-
// return createAIFunction(z.enum(['action', 'comedy', 'drama', 'horror', 'sci-fi']))
|
|
82
|
-
// }
|
|
83
|
-
// return target[prop]
|
|
84
|
-
// }
|
|
85
|
-
// })
|
|
86
|
-
// // Get the function and use it later
|
|
87
|
-
// const classifyMovie = ai.classifyMovie
|
|
88
|
-
// const result1 = await classifyMovie({
|
|
89
|
-
// plot: 'A group of astronauts travel through a wormhole in search of a new habitable planet for humanity.'
|
|
90
|
-
// }, { model })
|
|
91
|
-
// expect(['action', 'comedy', 'drama', 'horror', 'sci-fi']).toContain(result1)
|
|
92
|
-
// // Immediate invocation pattern
|
|
93
|
-
// const result2 = await ai.classifyMovie({
|
|
94
|
-
// genre: ['action', 'comedy', 'drama', 'horror', 'sci-fi']
|
|
95
|
-
// })({
|
|
96
|
-
// plot: 'A detective investigates a series of mysterious disappearances in a small town.'
|
|
97
|
-
// }, { model })
|
|
98
|
-
// expect(['action', 'comedy', 'drama', 'horror', 'sci-fi']).toContain(result2)
|
|
99
|
-
// }, 30000)
|
|
100
|
-
// })
|
|
101
|
-
describe('Configuration', () => {
|
|
102
|
-
it('should support model specification', async () => {
|
|
103
|
-
const ai = createTemplateFunction();
|
|
104
|
-
const result = await ai `Hello`({ model: openai('gpt-4o-mini') });
|
|
105
|
-
expect(result).toBeDefined();
|
|
106
|
-
});
|
|
107
|
-
it('should support system prompts', async () => {
|
|
108
|
-
const ai = createTemplateFunction();
|
|
109
|
-
const result = await ai `List fun activities`({
|
|
110
|
-
model,
|
|
111
|
-
system: 'You are an expert tour guide',
|
|
112
|
-
temperature: 0.2
|
|
113
|
-
});
|
|
114
|
-
expect(result).toBeDefined();
|
|
115
|
-
});
|
|
116
|
-
it('should support concurrency limits', async () => {
|
|
117
|
-
const ai = createTemplateFunction();
|
|
118
|
-
const startTime = Date.now();
|
|
119
|
-
const results = await Promise.all([
|
|
120
|
-
ai `task 1`({ model, concurrency: 2 }),
|
|
121
|
-
ai `task 2`({ model, concurrency: 2 }),
|
|
122
|
-
ai `task 3`({ model, concurrency: 2 })
|
|
123
|
-
]);
|
|
124
|
-
const endTime = Date.now();
|
|
125
|
-
expect(results).toHaveLength(3);
|
|
126
|
-
// With concurrency of 2, it should take at least 2 batches
|
|
127
|
-
expect(endTime - startTime).toBeGreaterThan(100);
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
// describe('Composable Functions & Workflows', () => {
|
|
131
|
-
// it('should support function composition', async () => {
|
|
132
|
-
// const ai = createTemplateFunction()
|
|
133
|
-
// const list = createTemplateFunction()
|
|
134
|
-
// const listBlogPosts = (count: number, topic: string) =>
|
|
135
|
-
// list`${count} blog post titles about ${topic}`({ model })
|
|
136
|
-
// const writeBlogPost = (title: string) =>
|
|
137
|
-
// ai`write a blog post in markdown starting with "# ${title}"`({ model })
|
|
138
|
-
// async function* writeBlog(count: number, topic: string) {
|
|
139
|
-
// for await (const title of await listBlogPosts(count, topic)) {
|
|
140
|
-
// const content = await writeBlogPost(title)
|
|
141
|
-
// yield { title, content }
|
|
142
|
-
// }
|
|
143
|
-
// }
|
|
144
|
-
// const posts = []
|
|
145
|
-
// for await (const post of writeBlog(2, 'future of car sales')) {
|
|
146
|
-
// posts.push(post)
|
|
147
|
-
// }
|
|
148
|
-
// expect(posts).toHaveLength(2)
|
|
149
|
-
// posts.forEach(post => {
|
|
150
|
-
// expect(post).toHaveProperty('title')
|
|
151
|
-
// expect(post).toHaveProperty('content')
|
|
152
|
-
// expect(post.content).toMatch(new RegExp(`^# ${post.title}`))
|
|
153
|
-
// })
|
|
154
|
-
// })
|
|
155
|
-
// it('should support nested template functions', async () => {
|
|
156
|
-
// const ai = createTemplateFunction()
|
|
157
|
-
// const generateName = (type: string) => ai`generate a name for a ${type}`({ model })
|
|
158
|
-
// const generateFunction = (name: string) =>
|
|
159
|
-
// ai`write a function in TypeScript called ${name}`({ model })
|
|
160
|
-
// const name = await generateName('utility function')
|
|
161
|
-
// const result = await generateFunction(name)
|
|
162
|
-
// expect(result).toContain('function')
|
|
163
|
-
// expect(result).toContain(name)
|
|
164
|
-
// expect(result).toContain('export')
|
|
165
|
-
// })
|
|
166
|
-
// })
|
|
167
|
-
// describe('Alternative Providers', () => {
|
|
168
|
-
// it('should support OpenAI provider', async () => {
|
|
169
|
-
// const ai = createTemplateFunction()
|
|
170
|
-
// const result = await ai`Hello`({ model: openai('gpt-4o-mini') })
|
|
171
|
-
// expect(result).toBeDefined()
|
|
172
|
-
// })
|
|
173
|
-
// // This test is commented out as we don't want to actually import anthropic
|
|
174
|
-
// // but it demonstrates how the test would look
|
|
175
|
-
// /*
|
|
176
|
-
// it('should support Anthropic provider', async () => {
|
|
177
|
-
// const ai = createTemplateFunction()
|
|
178
|
-
// const result = await ai`write a function in TypeScript called ${name}`({
|
|
179
|
-
// model: anthropic('claude-3-5-sonnet-20241022')
|
|
180
|
-
// })
|
|
181
|
-
// expect(result).toContain('function')
|
|
182
|
-
// expect(result).toContain('export')
|
|
183
|
-
// })
|
|
184
|
-
// */
|
|
185
|
-
// it('should support custom provider configuration', async () => {
|
|
186
|
-
// const ai = createTemplateFunction()
|
|
187
|
-
// const result = await ai`Hello`({
|
|
188
|
-
// model: openai('gpt-4o-mini', { structuredOutputs: true })
|
|
189
|
-
// })
|
|
190
|
-
// expect(result).toBeDefined()
|
|
191
|
-
// })
|
|
192
|
-
// })
|
|
193
|
-
// describe('Advanced Features', () => {
|
|
194
|
-
// it('should support streaming with onChunk callback', async () => {
|
|
195
|
-
// const ai = createTemplateFunction()
|
|
196
|
-
// const chunks: string[] = []
|
|
197
|
-
// const result = await ai`Write a short story`({
|
|
198
|
-
// model,
|
|
199
|
-
// streaming: {
|
|
200
|
-
// onProgress: (chunk) => chunks.push(chunk)
|
|
201
|
-
// }
|
|
202
|
-
// })
|
|
203
|
-
// expect(result).toBeDefined()
|
|
204
|
-
// expect(chunks.length).toBeGreaterThan(0)
|
|
205
|
-
// expect(chunks.join('')).toBe(result)
|
|
206
|
-
// })
|
|
207
|
-
// it('should support structured outputs with OpenAI', async () => {
|
|
208
|
-
// const schema = z.object({
|
|
209
|
-
// name: z.string(),
|
|
210
|
-
// ingredients: z.array(z.object({
|
|
211
|
-
// name: z.string(),
|
|
212
|
-
// amount: z.string().nullable() // Note: using nullable instead of optional
|
|
213
|
-
// })),
|
|
214
|
-
// steps: z.array(z.string())
|
|
215
|
-
// })
|
|
216
|
-
// const ai = createTemplateFunction()
|
|
217
|
-
// const result = await ai`Generate a recipe`({
|
|
218
|
-
// model: openai('gpt-4o-mini', { structuredOutputs: true }),
|
|
219
|
-
// outputFormat: 'object',
|
|
220
|
-
// schema,
|
|
221
|
-
// schemaName: 'recipe',
|
|
222
|
-
// schemaDescription: 'A cooking recipe with ingredients and steps.'
|
|
223
|
-
// })
|
|
224
|
-
// const parsed = JSON.parse(result)
|
|
225
|
-
// expect(() => schema.parse(parsed)).not.toThrow()
|
|
226
|
-
// })
|
|
227
|
-
// it('should support long text generation', async () => {
|
|
228
|
-
// const ai = createTemplateFunction()
|
|
229
|
-
// const result = await ai`Write a detailed essay about the history of Rome`({
|
|
230
|
-
// model,
|
|
231
|
-
// maxSteps: 3,
|
|
232
|
-
// experimental_continueSteps: true,
|
|
233
|
-
// system: 'Stop when sufficient information was provided.'
|
|
234
|
-
// })
|
|
235
|
-
// expect(result.length).toBeGreaterThan(1000) // Assuming it generates substantial content
|
|
236
|
-
// expect(result).toContain('Rome')
|
|
237
|
-
// })
|
|
238
|
-
// it('should support predicted outputs', async () => {
|
|
239
|
-
// const ai = createTemplateFunction()
|
|
240
|
-
// const existingCode = `interface User {
|
|
241
|
-
// Username: string;
|
|
242
|
-
// Age: number;
|
|
243
|
-
// }`
|
|
244
|
-
// const result = await ai`Replace the Username property with an Email property`({
|
|
245
|
-
// model,
|
|
246
|
-
// experimental_providerMetadata: {
|
|
247
|
-
// openai: {
|
|
248
|
-
// prediction: {
|
|
249
|
-
// type: 'content',
|
|
250
|
-
// content: existingCode
|
|
251
|
-
// }
|
|
252
|
-
// }
|
|
253
|
-
// }
|
|
254
|
-
// })
|
|
255
|
-
// expect(result).toContain('interface User')
|
|
256
|
-
// expect(result).toContain('Email: string')
|
|
257
|
-
// expect(result).not.toContain('Username')
|
|
258
|
-
// })
|
|
259
|
-
// it('should support streaming with tool calls', async () => {
|
|
260
|
-
// const ai = createTemplateFunction()
|
|
261
|
-
// const toolCalls: any[] = []
|
|
262
|
-
// const toolResults: any[] = []
|
|
263
|
-
// await ai`What are some San Francisco tourist attractions?`({
|
|
264
|
-
// model,
|
|
265
|
-
// tools: {
|
|
266
|
-
// cityAttractions: {
|
|
267
|
-
// parameters: z.object({ city: z.string() }),
|
|
268
|
-
// execute: async ({ city }) => ({
|
|
269
|
-
// attractions: ['Alcatraz', 'Golden Gate Bridge', 'Fisherman\'s Wharf']
|
|
270
|
-
// })
|
|
271
|
-
// }
|
|
272
|
-
// },
|
|
273
|
-
// streaming: {
|
|
274
|
-
// onProgress: (chunk) => {
|
|
275
|
-
// if (chunk.type === 'tool-call') toolCalls.push(chunk)
|
|
276
|
-
// if (chunk.type === 'tool-result') toolResults.push(chunk)
|
|
277
|
-
// }
|
|
278
|
-
// }
|
|
279
|
-
// })
|
|
280
|
-
// expect(toolCalls.length).toBeGreaterThan(0)
|
|
281
|
-
// expect(toolResults.length).toBeGreaterThan(0)
|
|
282
|
-
// expect(toolCalls[0].toolName).toBe('cityAttractions')
|
|
283
|
-
// })
|
|
284
|
-
// })
|
|
285
|
-
// })
|
|
286
|
-
});
|
|
287
|
-
//# sourceMappingURL=index.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/factory/index.test.ts"],"names":[],"mappings":"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"}
|
package/dist/factory/list.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/factory/list.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAyB,MAAM,UAAU,CAAA;AAc9F,wBAAgB,kBAAkB,CAAC,cAAc,GAAE,iBAAsB,GAAG,oBAAoB,CAwO/F"}
|