ai-functions 2.1.3 → 2.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 +1 -1
- package/CHANGELOG.md +90 -1
- package/README.md +38 -0
- package/dist/ai-promise.d.ts +3 -3
- package/dist/ai-promise.d.ts.map +1 -1
- package/dist/ai-promise.js +135 -64
- package/dist/ai-promise.js.map +1 -1
- package/dist/ai-schemas.d.ts +56 -0
- package/dist/ai-schemas.d.ts.map +1 -0
- package/dist/ai-schemas.js +53 -0
- package/dist/ai-schemas.js.map +1 -0
- package/dist/ai.d.ts +16 -242
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +51 -858
- package/dist/ai.js.map +1 -1
- package/dist/batch/anthropic.d.ts +6 -4
- package/dist/batch/anthropic.d.ts.map +1 -1
- package/dist/batch/anthropic.js +83 -145
- package/dist/batch/anthropic.js.map +1 -1
- package/dist/batch/bedrock.d.ts +8 -30
- package/dist/batch/bedrock.d.ts.map +1 -1
- package/dist/batch/bedrock.js +155 -338
- package/dist/batch/bedrock.js.map +1 -1
- package/dist/batch/cloudflare.d.ts +8 -20
- package/dist/batch/cloudflare.d.ts.map +1 -1
- package/dist/batch/cloudflare.js +68 -189
- package/dist/batch/cloudflare.js.map +1 -1
- package/dist/batch/google.d.ts +6 -20
- package/dist/batch/google.d.ts.map +1 -1
- package/dist/batch/google.js +70 -238
- package/dist/batch/google.js.map +1 -1
- package/dist/batch/index.d.ts +4 -1
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/batch/index.js +4 -1
- package/dist/batch/index.js.map +1 -1
- package/dist/batch/memory.d.ts +1 -1
- package/dist/batch/memory.d.ts.map +1 -1
- package/dist/batch/memory.js +14 -10
- package/dist/batch/memory.js.map +1 -1
- package/dist/batch/openai.d.ts +11 -14
- package/dist/batch/openai.d.ts.map +1 -1
- package/dist/batch/openai.js +52 -156
- package/dist/batch/openai.js.map +1 -1
- package/dist/batch/provider.d.ts +111 -0
- package/dist/batch/provider.d.ts.map +1 -0
- package/dist/batch/provider.js +233 -0
- package/dist/batch/provider.js.map +1 -0
- package/dist/batch-map.d.ts.map +1 -1
- package/dist/batch-map.js +23 -17
- package/dist/batch-map.js.map +1 -1
- package/dist/batch-queue.d.ts +65 -0
- package/dist/batch-queue.d.ts.map +1 -1
- package/dist/batch-queue.js +169 -14
- package/dist/batch-queue.js.map +1 -1
- package/dist/budget.d.ts.map +1 -1
- package/dist/budget.js +27 -14
- package/dist/budget.js.map +1 -1
- package/dist/cache.d.ts +23 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +36 -15
- package/dist/cache.js.map +1 -1
- package/dist/context.d.ts +26 -8
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +64 -62
- package/dist/context.js.map +1 -1
- package/dist/digital-objects-registry.d.ts +229 -0
- package/dist/digital-objects-registry.d.ts.map +1 -0
- package/dist/digital-objects-registry.js +617 -0
- package/dist/digital-objects-registry.js.map +1 -0
- package/dist/embeddings.d.ts +2 -2
- package/dist/embeddings.d.ts.map +1 -1
- package/dist/errors.d.ts +22 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +35 -0
- package/dist/errors.js.map +1 -0
- package/dist/eval/runner.d.ts +8 -0
- package/dist/eval/runner.d.ts.map +1 -1
- package/dist/eval/runner.js +41 -35
- package/dist/eval/runner.js.map +1 -1
- package/dist/eval-log/in-memory.d.ts +34 -0
- package/dist/eval-log/in-memory.d.ts.map +1 -0
- package/dist/eval-log/in-memory.js +84 -0
- package/dist/eval-log/in-memory.js.map +1 -0
- package/dist/eval-log/index.d.ts +29 -0
- package/dist/eval-log/index.d.ts.map +1 -0
- package/dist/eval-log/index.js +39 -0
- package/dist/eval-log/index.js.map +1 -0
- package/dist/eval-log/types.d.ts +101 -0
- package/dist/eval-log/types.d.ts.map +1 -0
- package/dist/eval-log/types.js +16 -0
- package/dist/eval-log/types.js.map +1 -0
- package/dist/function-registry.d.ts +176 -0
- package/dist/function-registry.d.ts.map +1 -0
- package/dist/function-registry.js +685 -0
- package/dist/function-registry.js.map +1 -0
- package/dist/generate.d.ts +9 -3
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +18 -18
- package/dist/generate.js.map +1 -1
- package/dist/index.d.ts +18 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -18
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +118 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +187 -0
- package/dist/logger.js.map +1 -0
- package/dist/middleware/budget.d.ts +84 -0
- package/dist/middleware/budget.d.ts.map +1 -0
- package/dist/middleware/budget.js +110 -0
- package/dist/middleware/budget.js.map +1 -0
- package/dist/middleware/cache.d.ts +103 -0
- package/dist/middleware/cache.d.ts.map +1 -0
- package/dist/middleware/cache.js +228 -0
- package/dist/middleware/cache.js.map +1 -0
- package/dist/middleware/embed-cache.d.ts +99 -0
- package/dist/middleware/embed-cache.d.ts.map +1 -0
- package/dist/middleware/embed-cache.js +128 -0
- package/dist/middleware/embed-cache.js.map +1 -0
- package/dist/middleware/index.d.ts +11 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +11 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/trace.d.ts +103 -0
- package/dist/middleware/trace.d.ts.map +1 -0
- package/dist/middleware/trace.js +176 -0
- package/dist/middleware/trace.js.map +1 -0
- package/dist/primitives.d.ts +120 -1
- package/dist/primitives.d.ts.map +1 -1
- package/dist/primitives.js +398 -26
- package/dist/primitives.js.map +1 -1
- package/dist/retry.d.ts +66 -1
- package/dist/retry.d.ts.map +1 -1
- package/dist/retry.js +115 -8
- package/dist/retry.js.map +1 -1
- package/dist/sandbox.d.ts +36 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +44 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/schema.js +2 -2
- package/dist/schema.js.map +1 -1
- package/dist/telemetry.d.ts +128 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +285 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/template.d.ts.map +1 -1
- package/dist/template.js +6 -1
- package/dist/template.js.map +1 -1
- package/dist/tool-orchestration.d.ts +66 -4
- package/dist/tool-orchestration.d.ts.map +1 -1
- package/dist/tool-orchestration.js +123 -23
- package/dist/tool-orchestration.js.map +1 -1
- package/dist/type-guards.d.ts +28 -0
- package/dist/type-guards.d.ts.map +1 -0
- package/dist/type-guards.js +29 -0
- package/dist/type-guards.js.map +1 -0
- package/dist/types.d.ts +155 -19
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +36 -1
- package/dist/types.js.map +1 -1
- package/dist/wrap-for-v3.d.ts +80 -0
- package/dist/wrap-for-v3.d.ts.map +1 -0
- package/dist/wrap-for-v3.js +89 -0
- package/dist/wrap-for-v3.js.map +1 -0
- package/examples/00-quickstart.ts +232 -0
- package/examples/01-rag-chatbot.ts +212 -0
- package/examples/02-multi-agent-research.ts +290 -0
- package/examples/03-email-classification.ts +379 -0
- package/examples/04-content-moderation.ts +400 -0
- package/examples/05-document-extraction.ts +455 -0
- package/examples/06-streaming-chat-nextjs.ts +437 -0
- package/examples/07-cloudflare-worker.ts +483 -0
- package/examples/08-batch-processing.ts +491 -0
- package/examples/09-budget-constrained.ts +527 -0
- package/examples/10-tool-orchestration.ts +565 -0
- package/examples/11-retry-resilience.ts +403 -0
- package/examples/12-caching-strategies.ts +422 -0
- package/examples/README.md +145 -0
- package/package.json +29 -25
- package/src/ai-promise.ts +226 -140
- package/src/ai-schemas.ts +122 -0
- package/src/ai.ts +71 -1176
- package/src/batch/anthropic.ts +96 -161
- package/src/batch/bedrock.ts +203 -454
- package/src/batch/cloudflare.ts +99 -282
- package/src/batch/google.ts +91 -297
- package/src/batch/index.ts +4 -1
- package/src/batch/memory.ts +15 -10
- package/src/batch/openai.ts +65 -193
- package/src/batch/provider.ts +336 -0
- package/src/batch-map.ts +29 -24
- package/src/batch-queue.ts +200 -11
- package/src/budget.ts +31 -18
- package/src/cache.ts +45 -17
- package/src/context.ts +106 -77
- package/src/digital-objects-registry.ts +750 -0
- package/src/errors.ts +37 -0
- package/src/eval/runner.ts +60 -36
- package/src/eval-log/in-memory.ts +90 -0
- package/src/eval-log/index.ts +46 -0
- package/src/eval-log/types.ts +110 -0
- package/src/function-registry.ts +874 -0
- package/src/generate.ts +33 -28
- package/src/index.ts +122 -21
- package/src/logger.ts +232 -0
- package/src/middleware/budget.ts +171 -0
- package/src/middleware/cache.ts +299 -0
- package/src/middleware/embed-cache.ts +195 -0
- package/src/middleware/index.ts +23 -0
- package/src/middleware/trace.ts +248 -0
- package/src/primitives.ts +589 -62
- package/src/retry.ts +144 -18
- package/src/sandbox.ts +52 -0
- package/src/schema.ts +8 -8
- package/src/telemetry.ts +403 -0
- package/src/template.ts +8 -4
- package/src/tool-orchestration.ts +213 -48
- package/src/type-guards.ts +31 -0
- package/src/types.ts +186 -27
- package/src/wrap-for-v3.ts +105 -0
- package/test/ai-promise.test.ts +1080 -0
- package/test/ai-proxy.test.ts +1 -1
- package/test/batch-autosubmit-errors.test.ts +49 -37
- package/test/batch-blog-posts.test.ts +87 -129
- package/test/core-functions.test.ts +183 -579
- package/test/decide.test.ts +154 -322
- package/test/define.test.ts +211 -8
- package/test/digital-objects-registry.test.ts +760 -0
- package/test/embedding-cache-middleware.test.ts +140 -0
- package/test/fill-template.test.ts +89 -0
- package/test/generate-core.test.ts +140 -229
- package/test/implicit-batch.test.ts +22 -65
- package/test/retry-policy-integration.test.ts +117 -0
- package/test/sandbox-execution.test.ts +155 -0
- package/test/schema.test.ts +55 -19
- package/test/template.test.ts +1164 -0
- package/test/tool-orchestration.test.ts +270 -0
- package/test/wrap-for-v3.test.ts +612 -0
- package/vitest.config.js +6 -0
- package/vitest.config.ts +20 -0
- package/LICENSE +0 -21
- package/dist/rpc/auth.d.ts +0 -69
- package/dist/rpc/auth.d.ts.map +0 -1
- package/dist/rpc/auth.js +0 -136
- package/dist/rpc/auth.js.map +0 -1
- package/dist/rpc/client.d.ts +0 -62
- package/dist/rpc/client.d.ts.map +0 -1
- package/dist/rpc/client.js +0 -103
- package/dist/rpc/client.js.map +0 -1
- package/dist/rpc/deferred.d.ts +0 -60
- package/dist/rpc/deferred.d.ts.map +0 -1
- package/dist/rpc/deferred.js +0 -96
- package/dist/rpc/deferred.js.map +0 -1
- package/dist/rpc/index.d.ts +0 -22
- package/dist/rpc/index.d.ts.map +0 -1
- package/dist/rpc/index.js +0 -38
- package/dist/rpc/index.js.map +0 -1
- package/dist/rpc/local.d.ts +0 -42
- package/dist/rpc/local.d.ts.map +0 -1
- package/dist/rpc/local.js +0 -50
- package/dist/rpc/local.js.map +0 -1
- package/dist/rpc/server.d.ts +0 -165
- package/dist/rpc/server.d.ts.map +0 -1
- package/dist/rpc/server.js +0 -405
- package/dist/rpc/server.js.map +0 -1
- package/dist/rpc/session.d.ts +0 -32
- package/dist/rpc/session.d.ts.map +0 -1
- package/dist/rpc/session.js +0 -43
- package/dist/rpc/session.js.map +0 -1
- package/dist/rpc/transport.d.ts +0 -306
- package/dist/rpc/transport.d.ts.map +0 -1
- package/dist/rpc/transport.js +0 -731
- package/dist/rpc/transport.js.map +0 -1
- package/src/batch/anthropic.js +0 -256
- package/src/batch/bedrock.js +0 -584
- package/src/batch/cloudflare.js +0 -287
- package/src/batch/google.js +0 -359
- package/src/batch/index.js +0 -30
- package/src/batch/memory.js +0 -187
- package/src/batch/openai.js +0 -402
- package/src/eval/index.js +0 -7
- package/src/eval/models.js +0 -119
- package/src/eval/runner.js +0 -147
- package/test/schema.test.js +0 -96
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Core types for AI functions
|
|
3
3
|
*/
|
|
4
|
-
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Human Function Pending Types
|
|
6
|
+
// ============================================================================
|
|
7
|
+
/**
|
|
8
|
+
* Symbol used to identify pending human function results
|
|
9
|
+
*/
|
|
10
|
+
export const PENDING_HUMAN_RESULT_SYMBOL = Symbol.for('HumanFunctionPending');
|
|
11
|
+
/**
|
|
12
|
+
* Type guard to check if a result is a pending human function result.
|
|
13
|
+
*
|
|
14
|
+
* Use this to safely handle cases where human input is not yet available.
|
|
15
|
+
*
|
|
16
|
+
* @param value - The value to check
|
|
17
|
+
* @returns True if the value is a HumanFunctionPending object
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* const result = await reviewDocument({ docId: '123' })
|
|
22
|
+
*
|
|
23
|
+
* if (isPendingHumanResult(result)) {
|
|
24
|
+
* // result is HumanFunctionPending - human input needed
|
|
25
|
+
* console.warn('Human review pending:', result.channel)
|
|
26
|
+
* return { status: 'pending', channel: result.channel }
|
|
27
|
+
* }
|
|
28
|
+
*
|
|
29
|
+
* // result is ReviewResult - actual human response
|
|
30
|
+
* return { status: 'reviewed', approved: result.approved }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function isPendingHumanResult(value) {
|
|
34
|
+
return (value !== null &&
|
|
35
|
+
typeof value === 'object' &&
|
|
36
|
+
'_pending' in value &&
|
|
37
|
+
value._pending === true &&
|
|
38
|
+
PENDING_HUMAN_RESULT_SYMBOL in value);
|
|
39
|
+
}
|
|
5
40
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,+EAA+E;AAC/E,+BAA+B;AAC/B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;AAgD7E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAA+B;IAE/B,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,UAAU,IAAI,KAAK;QACnB,KAAK,CAAC,QAAQ,KAAK,IAAI;QACvB,2BAA2B,IAAI,KAAK,CACrC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wrapForV3 — convenience composer for the v3 cascade-walker / evaluator-panel
|
|
3
|
+
* use case.
|
|
4
|
+
*
|
|
5
|
+
* Composes `cacheMiddleware`, `budgetMiddleware`, and `traceMiddleware` in a
|
|
6
|
+
* single `wrapLanguageModel` call so callers in services-as-software (round
|
|
7
|
+
* 15+ swap) can replace their existing post-hoc duck-typing in
|
|
8
|
+
* `cost-estimate.ts` with a single wrap call:
|
|
9
|
+
*
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { wrapForV3, BudgetTracker, getEvalLogStore } from 'ai-functions'
|
|
12
|
+
*
|
|
13
|
+
* const tracker = new BudgetTracker({ maxCost: 1.0 })
|
|
14
|
+
* const store = getEvalLogStore()
|
|
15
|
+
*
|
|
16
|
+
* const wrapped = wrapForV3(openai('gpt-4o'), {
|
|
17
|
+
* cache: { store: 'disk', ttlMs: 86_400_000 },
|
|
18
|
+
* budget: { tracker },
|
|
19
|
+
* trace: { emit: (e) => store.record({ ...e, costUsd: e.costUsd ?? 0 }) },
|
|
20
|
+
* })
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* **Composition order:**
|
|
24
|
+
* 1. **cache** — first so cache hits skip budget+trace network cost. The
|
|
25
|
+
* cached payload's usage still flows downstream so budget records the
|
|
26
|
+
* cost on hits AND misses.
|
|
27
|
+
* 2. **budget** — second so it sees the wrapped result regardless of
|
|
28
|
+
* cache hit/miss; tracker.recordUsage fires either way.
|
|
29
|
+
* 3. **trace** — last so the event sees the final outcome (post-cache,
|
|
30
|
+
* post-budget). Errors from `emit` are swallowed.
|
|
31
|
+
*
|
|
32
|
+
* AI SDK 6 ordering semantics (per the wrapLanguageModel JSDoc): "the first
|
|
33
|
+
* middleware will transform the input first, and the last middleware will
|
|
34
|
+
* be wrapped directly around the model." So when we hand the array
|
|
35
|
+
* `[cache, budget, trace]`, the runtime call order is
|
|
36
|
+
* `cache → budget → trace → model` on the way in, and the reverse on the
|
|
37
|
+
* way out. Cache sees the call first; if it has a hit, downstream layers
|
|
38
|
+
* never run their `wrapGenerate` body for that call. Budget and trace each
|
|
39
|
+
* get their own post-completion hook on the result the layer below them
|
|
40
|
+
* returned — so on a cache hit, neither budget nor trace runs (because
|
|
41
|
+
* cache short-circuits via `return cached`). To get budget + trace on
|
|
42
|
+
* cache hits, the budgetMiddleware/traceMiddleware would need to wrap the
|
|
43
|
+
* cache middleware (i.e. install AFTER it in the chain). Per the spec
|
|
44
|
+
* above, "later in the array = closer to the model" → install order
|
|
45
|
+
* matters: callers who want cache-hit cost recording should pass
|
|
46
|
+
* `[budget, trace, cache]`. We use `[cache, budget, trace]` as the default
|
|
47
|
+
* because the eval-fixture use case wants the 5x verify-time win and is
|
|
48
|
+
* happy to skip the cost record on the hit path (the original miss already
|
|
49
|
+
* recorded it).
|
|
50
|
+
*
|
|
51
|
+
* @packageDocumentation
|
|
52
|
+
*/
|
|
53
|
+
import { type LanguageModel } from 'ai';
|
|
54
|
+
import { type CacheMiddlewareOptions } from './middleware/cache.js';
|
|
55
|
+
import { type BudgetMiddlewareOptions } from './middleware/budget.js';
|
|
56
|
+
import { type TraceMiddlewareOptions } from './middleware/trace.js';
|
|
57
|
+
/**
|
|
58
|
+
* Options for {@link wrapForV3}. All three middleware sections are
|
|
59
|
+
* optional — pass only what you need.
|
|
60
|
+
*/
|
|
61
|
+
export interface WrapForV3Options {
|
|
62
|
+
/** Cache config (see {@link CacheMiddlewareOptions}). */
|
|
63
|
+
cache?: CacheMiddlewareOptions;
|
|
64
|
+
/** Budget tracking config (see {@link BudgetMiddlewareOptions}). */
|
|
65
|
+
budget?: BudgetMiddlewareOptions;
|
|
66
|
+
/** Trace emission config (see {@link TraceMiddlewareOptions}). */
|
|
67
|
+
trace?: TraceMiddlewareOptions;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Wrap a {@link LanguageModel} with the v3-cascade middleware stack
|
|
71
|
+
* (cache → budget → trace, in install order).
|
|
72
|
+
*
|
|
73
|
+
* Returns the wrapped model with the same shape as the input; downstream
|
|
74
|
+
* `generateText` / `generateObject` / `streamText` calls treat it as a
|
|
75
|
+
* regular model.
|
|
76
|
+
*
|
|
77
|
+
* @see WrapForV3Options for partial-config behaviour
|
|
78
|
+
*/
|
|
79
|
+
export declare function wrapForV3(model: LanguageModel, opts?: WrapForV3Options): LanguageModel;
|
|
80
|
+
//# sourceMappingURL=wrap-for-v3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrap-for-v3.d.ts","sourceRoot":"","sources":["../src/wrap-for-v3.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,IAAI,CAAA;AAE1D,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AACpF,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAMpF;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,KAAK,CAAC,EAAE,sBAAsB,CAAA;IAC9B,oEAAoE;IACpE,MAAM,CAAC,EAAE,uBAAuB,CAAA;IAChC,kEAAkE;IAClE,KAAK,CAAC,EAAE,sBAAsB,CAAA;CAC/B;AAMD;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,GAAE,gBAAqB,GAAG,aAAa,CAc1F"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wrapForV3 — convenience composer for the v3 cascade-walker / evaluator-panel
|
|
3
|
+
* use case.
|
|
4
|
+
*
|
|
5
|
+
* Composes `cacheMiddleware`, `budgetMiddleware`, and `traceMiddleware` in a
|
|
6
|
+
* single `wrapLanguageModel` call so callers in services-as-software (round
|
|
7
|
+
* 15+ swap) can replace their existing post-hoc duck-typing in
|
|
8
|
+
* `cost-estimate.ts` with a single wrap call:
|
|
9
|
+
*
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { wrapForV3, BudgetTracker, getEvalLogStore } from 'ai-functions'
|
|
12
|
+
*
|
|
13
|
+
* const tracker = new BudgetTracker({ maxCost: 1.0 })
|
|
14
|
+
* const store = getEvalLogStore()
|
|
15
|
+
*
|
|
16
|
+
* const wrapped = wrapForV3(openai('gpt-4o'), {
|
|
17
|
+
* cache: { store: 'disk', ttlMs: 86_400_000 },
|
|
18
|
+
* budget: { tracker },
|
|
19
|
+
* trace: { emit: (e) => store.record({ ...e, costUsd: e.costUsd ?? 0 }) },
|
|
20
|
+
* })
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* **Composition order:**
|
|
24
|
+
* 1. **cache** — first so cache hits skip budget+trace network cost. The
|
|
25
|
+
* cached payload's usage still flows downstream so budget records the
|
|
26
|
+
* cost on hits AND misses.
|
|
27
|
+
* 2. **budget** — second so it sees the wrapped result regardless of
|
|
28
|
+
* cache hit/miss; tracker.recordUsage fires either way.
|
|
29
|
+
* 3. **trace** — last so the event sees the final outcome (post-cache,
|
|
30
|
+
* post-budget). Errors from `emit` are swallowed.
|
|
31
|
+
*
|
|
32
|
+
* AI SDK 6 ordering semantics (per the wrapLanguageModel JSDoc): "the first
|
|
33
|
+
* middleware will transform the input first, and the last middleware will
|
|
34
|
+
* be wrapped directly around the model." So when we hand the array
|
|
35
|
+
* `[cache, budget, trace]`, the runtime call order is
|
|
36
|
+
* `cache → budget → trace → model` on the way in, and the reverse on the
|
|
37
|
+
* way out. Cache sees the call first; if it has a hit, downstream layers
|
|
38
|
+
* never run their `wrapGenerate` body for that call. Budget and trace each
|
|
39
|
+
* get their own post-completion hook on the result the layer below them
|
|
40
|
+
* returned — so on a cache hit, neither budget nor trace runs (because
|
|
41
|
+
* cache short-circuits via `return cached`). To get budget + trace on
|
|
42
|
+
* cache hits, the budgetMiddleware/traceMiddleware would need to wrap the
|
|
43
|
+
* cache middleware (i.e. install AFTER it in the chain). Per the spec
|
|
44
|
+
* above, "later in the array = closer to the model" → install order
|
|
45
|
+
* matters: callers who want cache-hit cost recording should pass
|
|
46
|
+
* `[budget, trace, cache]`. We use `[cache, budget, trace]` as the default
|
|
47
|
+
* because the eval-fixture use case wants the 5x verify-time win and is
|
|
48
|
+
* happy to skip the cost record on the hit path (the original miss already
|
|
49
|
+
* recorded it).
|
|
50
|
+
*
|
|
51
|
+
* @packageDocumentation
|
|
52
|
+
*/
|
|
53
|
+
import { wrapLanguageModel } from 'ai';
|
|
54
|
+
import { cacheMiddleware } from './middleware/cache.js';
|
|
55
|
+
import { budgetMiddleware } from './middleware/budget.js';
|
|
56
|
+
import { traceMiddleware } from './middleware/trace.js';
|
|
57
|
+
// ============================================================================
|
|
58
|
+
// Composer
|
|
59
|
+
// ============================================================================
|
|
60
|
+
/**
|
|
61
|
+
* Wrap a {@link LanguageModel} with the v3-cascade middleware stack
|
|
62
|
+
* (cache → budget → trace, in install order).
|
|
63
|
+
*
|
|
64
|
+
* Returns the wrapped model with the same shape as the input; downstream
|
|
65
|
+
* `generateText` / `generateObject` / `streamText` calls treat it as a
|
|
66
|
+
* regular model.
|
|
67
|
+
*
|
|
68
|
+
* @see WrapForV3Options for partial-config behaviour
|
|
69
|
+
*/
|
|
70
|
+
export function wrapForV3(model, opts = {}) {
|
|
71
|
+
const middleware = [];
|
|
72
|
+
if (opts.cache)
|
|
73
|
+
middleware.push(cacheMiddleware(opts.cache));
|
|
74
|
+
if (opts.budget)
|
|
75
|
+
middleware.push(budgetMiddleware(opts.budget));
|
|
76
|
+
if (opts.trace)
|
|
77
|
+
middleware.push(traceMiddleware(opts.trace));
|
|
78
|
+
if (middleware.length === 0)
|
|
79
|
+
return model;
|
|
80
|
+
// wrapLanguageModel currently accepts LanguageModelV3 — at the AI SDK 6
|
|
81
|
+
// surface, `LanguageModel` is the wider union. The runtime is V3
|
|
82
|
+
// everywhere in the published providers; the cast is the same one the
|
|
83
|
+
// wrapLanguageModel cookbook uses.
|
|
84
|
+
return wrapLanguageModel({
|
|
85
|
+
model: model,
|
|
86
|
+
middleware,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=wrap-for-v3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrap-for-v3.js","sourceRoot":"","sources":["../src/wrap-for-v3.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,OAAO,EAAE,iBAAiB,EAAsB,MAAM,IAAI,CAAA;AAE1D,OAAO,EAAE,eAAe,EAA+B,MAAM,uBAAuB,CAAA;AACpF,OAAO,EAAE,gBAAgB,EAAgC,MAAM,wBAAwB,CAAA;AACvF,OAAO,EAAE,eAAe,EAA+B,MAAM,uBAAuB,CAAA;AAmBpF,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,KAAoB,EAAE,OAAyB,EAAE;IACzE,MAAM,UAAU,GAAgC,EAAE,CAAA;IAClD,IAAI,IAAI,CAAC,KAAK;QAAE,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC5D,IAAI,IAAI,CAAC,MAAM;QAAE,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IAC/D,IAAI,IAAI,CAAC,KAAK;QAAE,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC5D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACzC,wEAAwE;IACxE,iEAAiE;IACjE,sEAAsE;IACtE,mCAAmC;IACnC,OAAO,iBAAiB,CAAC;QACvB,KAAK,EAAE,KAAwB;QAC/B,UAAU;KACX,CAAkB,CAAA;AACrB,CAAC"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quickstart Example
|
|
3
|
+
*
|
|
4
|
+
* This example demonstrates the core primitives of ai-functions in a simple,
|
|
5
|
+
* easy-to-follow format. It covers:
|
|
6
|
+
* - Basic text generation with `write`
|
|
7
|
+
* - List generation with `list`
|
|
8
|
+
* - Boolean checks with `is`
|
|
9
|
+
* - Structured output with `ai`
|
|
10
|
+
* - Configuration options
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```bash
|
|
14
|
+
* ANTHROPIC_API_KEY=sk-... npx tsx examples/00-quickstart.ts
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { ai, write, list, is, extract, configure, withContext } from '../src/index.js'
|
|
19
|
+
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Setup
|
|
22
|
+
// ============================================================================
|
|
23
|
+
|
|
24
|
+
// Configure the AI provider (optional - will use env vars by default)
|
|
25
|
+
configure({
|
|
26
|
+
model: 'sonnet', // or 'gpt-4o', 'claude-3-5-haiku-latest', etc.
|
|
27
|
+
provider: 'anthropic', // or 'openai'
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
// ============================================================================
|
|
31
|
+
// Text Generation
|
|
32
|
+
// ============================================================================
|
|
33
|
+
|
|
34
|
+
async function textGenerationExamples() {
|
|
35
|
+
console.log('\n=== Text Generation ===\n')
|
|
36
|
+
|
|
37
|
+
// Simple text generation
|
|
38
|
+
const haiku = await write`a haiku about TypeScript`
|
|
39
|
+
console.log('Haiku:', haiku)
|
|
40
|
+
|
|
41
|
+
// With more context
|
|
42
|
+
const email = await write`a professional email declining a meeting invitation.
|
|
43
|
+
Keep it brief and polite.`
|
|
44
|
+
console.log('\nEmail:', email)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// ============================================================================
|
|
48
|
+
// List Generation
|
|
49
|
+
// ============================================================================
|
|
50
|
+
|
|
51
|
+
async function listGenerationExamples() {
|
|
52
|
+
console.log('\n=== List Generation ===\n')
|
|
53
|
+
|
|
54
|
+
// Generate a simple list
|
|
55
|
+
const ideas = await list`5 startup ideas in the AI space`
|
|
56
|
+
console.log('Startup Ideas:')
|
|
57
|
+
ideas.forEach((idea, i) => console.log(` ${i + 1}. ${idea}`))
|
|
58
|
+
|
|
59
|
+
// Using map for processing (batched automatically)
|
|
60
|
+
console.log('\nProcessing ideas with map...')
|
|
61
|
+
const evaluated = await Promise.all(
|
|
62
|
+
ideas.slice(0, 3).map(async (idea) => ({
|
|
63
|
+
idea,
|
|
64
|
+
feasible: await is`"${idea}" is technically feasible with current technology`,
|
|
65
|
+
}))
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
console.log('\nFeasibility Check:')
|
|
69
|
+
evaluated.forEach((e) => {
|
|
70
|
+
console.log(` ${e.feasible ? '✓' : '✗'} ${e.idea}`)
|
|
71
|
+
})
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// ============================================================================
|
|
75
|
+
// Boolean Checks
|
|
76
|
+
// ============================================================================
|
|
77
|
+
|
|
78
|
+
async function booleanCheckExamples() {
|
|
79
|
+
console.log('\n=== Boolean Checks ===\n')
|
|
80
|
+
|
|
81
|
+
// Simple true/false questions
|
|
82
|
+
const checks = [
|
|
83
|
+
await is`"TypeScript" is a programming language`,
|
|
84
|
+
await is`42 is a prime number`,
|
|
85
|
+
await is`Paris is the capital of France`,
|
|
86
|
+
await is`HTML is a programming language`,
|
|
87
|
+
]
|
|
88
|
+
|
|
89
|
+
console.log('Boolean Checks:')
|
|
90
|
+
console.log(` TypeScript is a programming language: ${checks[0]}`)
|
|
91
|
+
console.log(` 42 is a prime number: ${checks[1]}`)
|
|
92
|
+
console.log(` Paris is capital of France: ${checks[2]}`)
|
|
93
|
+
console.log(` HTML is a programming language: ${checks[3]}`)
|
|
94
|
+
|
|
95
|
+
// Content validation example
|
|
96
|
+
const userInput = 'Buy our amazing product at discount.com!!!'
|
|
97
|
+
const isSpam = await is`This text is spam or promotional: "${userInput}"`
|
|
98
|
+
console.log(`\n "${userInput}" is spam: ${isSpam}`)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// ============================================================================
|
|
102
|
+
// Structured Output
|
|
103
|
+
// ============================================================================
|
|
104
|
+
|
|
105
|
+
async function structuredOutputExamples() {
|
|
106
|
+
console.log('\n=== Structured Output ===\n')
|
|
107
|
+
|
|
108
|
+
// Extract structured data from text
|
|
109
|
+
const article = `
|
|
110
|
+
Apple Inc. announced today that CEO Tim Cook will be presenting
|
|
111
|
+
the new iPhone 16 at the September 2024 event in Cupertino, California.
|
|
112
|
+
The device is expected to feature AI capabilities and cost around $999.
|
|
113
|
+
`
|
|
114
|
+
|
|
115
|
+
// Using destructuring to define the schema
|
|
116
|
+
const { company, product, person, location, price, date } = await ai`
|
|
117
|
+
Extract key information from this article:
|
|
118
|
+
${article}
|
|
119
|
+
|
|
120
|
+
Provide:
|
|
121
|
+
- company: company name
|
|
122
|
+
- product: product mentioned
|
|
123
|
+
- person: person mentioned
|
|
124
|
+
- location: location mentioned
|
|
125
|
+
- price: price if mentioned
|
|
126
|
+
- date: date or time mentioned
|
|
127
|
+
`
|
|
128
|
+
|
|
129
|
+
console.log('Extracted Information:')
|
|
130
|
+
console.log(` Company: ${company}`)
|
|
131
|
+
console.log(` Product: ${product}`)
|
|
132
|
+
console.log(` Person: ${person}`)
|
|
133
|
+
console.log(` Location: ${location}`)
|
|
134
|
+
console.log(` Price: ${price}`)
|
|
135
|
+
console.log(` Date: ${date}`)
|
|
136
|
+
|
|
137
|
+
// Generate structured content
|
|
138
|
+
const { title, description, tags } = await ai`
|
|
139
|
+
Create a blog post metadata for a post about "Getting Started with AI Functions":
|
|
140
|
+
- title: engaging blog post title
|
|
141
|
+
- description: SEO description (under 160 chars)
|
|
142
|
+
- tags: array of 5 relevant tags
|
|
143
|
+
`
|
|
144
|
+
|
|
145
|
+
console.log('\nGenerated Blog Metadata:')
|
|
146
|
+
console.log(` Title: ${title}`)
|
|
147
|
+
console.log(` Description: ${description}`)
|
|
148
|
+
console.log(` Tags: ${(tags as string[]).join(', ')}`)
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// ============================================================================
|
|
152
|
+
// Data Extraction
|
|
153
|
+
// ============================================================================
|
|
154
|
+
|
|
155
|
+
async function extractionExamples() {
|
|
156
|
+
console.log('\n=== Data Extraction ===\n')
|
|
157
|
+
|
|
158
|
+
const text = `
|
|
159
|
+
Contact us at support@example.com or sales@company.io.
|
|
160
|
+
Call John at 555-123-4567 or reach Sarah at 555-987-6543.
|
|
161
|
+
Meeting scheduled for March 15, 2024 and follow-up on April 1st.
|
|
162
|
+
`
|
|
163
|
+
|
|
164
|
+
const emails = await extract`all email addresses from: ${text}`
|
|
165
|
+
console.log('Emails:', emails)
|
|
166
|
+
|
|
167
|
+
const phones = await extract`all phone numbers from: ${text}`
|
|
168
|
+
console.log('Phone Numbers:', phones)
|
|
169
|
+
|
|
170
|
+
const dates = await extract`all dates from: ${text}`
|
|
171
|
+
console.log('Dates:', dates)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// ============================================================================
|
|
175
|
+
// Scoped Configuration
|
|
176
|
+
// ============================================================================
|
|
177
|
+
|
|
178
|
+
async function scopedConfigExamples() {
|
|
179
|
+
console.log('\n=== Scoped Configuration ===\n')
|
|
180
|
+
|
|
181
|
+
// Use different settings for specific operations
|
|
182
|
+
const result = await withContext(
|
|
183
|
+
{
|
|
184
|
+
model: 'claude-3-5-haiku-latest', // Use faster model
|
|
185
|
+
temperature: 0.1, // More deterministic
|
|
186
|
+
},
|
|
187
|
+
async () => {
|
|
188
|
+
console.log(' Using Haiku model with low temperature...')
|
|
189
|
+
return write`What is 2+2? Answer with just the number.`
|
|
190
|
+
}
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
console.log(` Result: ${result}`)
|
|
194
|
+
|
|
195
|
+
// Back to default configuration
|
|
196
|
+
const creative = await write`Give a creative name for a cat`
|
|
197
|
+
console.log(` Creative cat name: ${creative}`)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// ============================================================================
|
|
201
|
+
// Main
|
|
202
|
+
// ============================================================================
|
|
203
|
+
|
|
204
|
+
async function main() {
|
|
205
|
+
console.log('\n========================================')
|
|
206
|
+
console.log(' ai-functions Quickstart')
|
|
207
|
+
console.log('========================================')
|
|
208
|
+
|
|
209
|
+
await textGenerationExamples()
|
|
210
|
+
await listGenerationExamples()
|
|
211
|
+
await booleanCheckExamples()
|
|
212
|
+
await structuredOutputExamples()
|
|
213
|
+
await extractionExamples()
|
|
214
|
+
await scopedConfigExamples()
|
|
215
|
+
|
|
216
|
+
console.log('\n========================================')
|
|
217
|
+
console.log(' Quickstart Complete!')
|
|
218
|
+
console.log('========================================')
|
|
219
|
+
console.log(`
|
|
220
|
+
Next steps:
|
|
221
|
+
- Try the other examples in this directory
|
|
222
|
+
- Read the README.md for the full API reference
|
|
223
|
+
- Check out test/ for more usage patterns
|
|
224
|
+
`)
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
main()
|
|
228
|
+
.then(() => process.exit(0))
|
|
229
|
+
.catch((error) => {
|
|
230
|
+
console.error('\nError:', error.message)
|
|
231
|
+
process.exit(1)
|
|
232
|
+
})
|