@agentick/core 0.0.1 → 0.1.9
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/dist/.tsbuildinfo.build +1 -1
- package/package.json +8 -3
- package/dist/.tsbuildinfo +0 -1
- package/dist/agent.d.ts +0 -32
- package/dist/agent.d.ts.map +0 -1
- package/dist/agent.js +0 -26
- package/dist/agent.js.map +0 -1
- package/dist/aidk-instance.d.ts +0 -294
- package/dist/aidk-instance.d.ts.map +0 -1
- package/dist/aidk-instance.js +0 -340
- package/dist/aidk-instance.js.map +0 -1
- package/dist/compiler/content-block-registry.d.ts +0 -11
- package/dist/compiler/content-block-registry.d.ts.map +0 -1
- package/dist/compiler/content-block-registry.js +0 -312
- package/dist/compiler/content-block-registry.js.map +0 -1
- package/dist/compiler/extractors.d.ts +0 -68
- package/dist/compiler/extractors.d.ts.map +0 -1
- package/dist/compiler/extractors.js +0 -547
- package/dist/compiler/extractors.js.map +0 -1
- package/dist/compiler/fiber.d.ts +0 -61
- package/dist/compiler/fiber.d.ts.map +0 -1
- package/dist/compiler/fiber.js +0 -244
- package/dist/compiler/fiber.js.map +0 -1
- package/dist/component/tentickle-component.d.ts +0 -185
- package/dist/component/tentickle-component.d.ts.map +0 -1
- package/dist/component/tentickle-component.js +0 -182
- package/dist/component/tentickle-component.js.map +0 -1
- package/dist/core/channel-helpers.d.ts +0 -31
- package/dist/core/channel-helpers.d.ts.map +0 -1
- package/dist/core/channel-helpers.js +0 -62
- package/dist/core/channel-helpers.js.map +0 -1
- package/dist/core/channel.d.ts +0 -164
- package/dist/core/channel.d.ts.map +0 -1
- package/dist/core/channel.js +0 -199
- package/dist/core/channel.js.map +0 -1
- package/dist/core/context.d.ts +0 -412
- package/dist/core/context.d.ts.map +0 -1
- package/dist/core/context.js +0 -290
- package/dist/core/context.js.map +0 -1
- package/dist/core/event-buffer.d.ts +0 -212
- package/dist/core/event-buffer.d.ts.map +0 -1
- package/dist/core/event-buffer.js +0 -346
- package/dist/core/event-buffer.js.map +0 -1
- package/dist/core/execution-helpers.d.ts +0 -179
- package/dist/core/execution-helpers.d.ts.map +0 -1
- package/dist/core/execution-helpers.js +0 -212
- package/dist/core/execution-helpers.js.map +0 -1
- package/dist/core/execution-tracker.d.ts +0 -53
- package/dist/core/execution-tracker.d.ts.map +0 -1
- package/dist/core/execution-tracker.js +0 -309
- package/dist/core/execution-tracker.js.map +0 -1
- package/dist/core/index.d.ts +0 -58
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -58
- package/dist/core/index.js.map +0 -1
- package/dist/core/logger.d.ts +0 -341
- package/dist/core/logger.d.ts.map +0 -1
- package/dist/core/logger.js +0 -346
- package/dist/core/logger.js.map +0 -1
- package/dist/core/metrics-helpers.d.ts +0 -40
- package/dist/core/metrics-helpers.d.ts.map +0 -1
- package/dist/core/metrics-helpers.js +0 -72
- package/dist/core/metrics-helpers.js.map +0 -1
- package/dist/core/otel-provider.d.ts +0 -54
- package/dist/core/otel-provider.d.ts.map +0 -1
- package/dist/core/otel-provider.js +0 -107
- package/dist/core/otel-provider.js.map +0 -1
- package/dist/core/procedure-graph.d.ts +0 -136
- package/dist/core/procedure-graph.d.ts.map +0 -1
- package/dist/core/procedure-graph.js +0 -272
- package/dist/core/procedure-graph.js.map +0 -1
- package/dist/core/procedure.d.ts +0 -755
- package/dist/core/procedure.d.ts.map +0 -1
- package/dist/core/procedure.js +0 -899
- package/dist/core/procedure.js.map +0 -1
- package/dist/core/stream.d.ts +0 -106
- package/dist/core/stream.d.ts.map +0 -1
- package/dist/core/stream.js +0 -186
- package/dist/core/stream.js.map +0 -1
- package/dist/core/telemetry.d.ts +0 -182
- package/dist/core/telemetry.d.ts.map +0 -1
- package/dist/core/telemetry.js +0 -124
- package/dist/core/telemetry.js.map +0 -1
- package/dist/engine/execution-graph.d.ts +0 -104
- package/dist/engine/execution-graph.d.ts.map +0 -1
- package/dist/engine/execution-graph.js +0 -257
- package/dist/engine/execution-graph.js.map +0 -1
- package/dist/hooks/policy-context.d.ts.map +0 -1
- package/dist/jsx/components/agent.d.ts +0 -64
- package/dist/jsx/components/agent.d.ts.map +0 -1
- package/dist/jsx/components/agent.js +0 -80
- package/dist/jsx/components/agent.js.map +0 -1
- package/dist/model/simple-adapter.d.ts +0 -176
- package/dist/model/simple-adapter.d.ts.map +0 -1
- package/dist/model/simple-adapter.js +0 -264
- package/dist/model/simple-adapter.js.map +0 -1
- package/dist/state/boundary.d.ts +0 -347
- package/dist/state/boundary.d.ts.map +0 -1
- package/dist/state/boundary.js +0 -341
- package/dist/state/boundary.js.map +0 -1
- package/dist/state/context.d.ts +0 -138
- package/dist/state/context.d.ts.map +0 -1
- package/dist/state/context.js +0 -139
- package/dist/state/context.js.map +0 -1
- package/dist/state/hooks.d.ts +0 -798
- package/dist/state/hooks.d.ts.map +0 -1
- package/dist/state/hooks.js +0 -1437
- package/dist/state/hooks.js.map +0 -1
- package/dist/state/index.d.ts +0 -72
- package/dist/state/index.d.ts.map +0 -1
- package/dist/state/index.js +0 -73
- package/dist/state/index.js.map +0 -1
- package/dist/state/signal.d.ts +0 -223
- package/dist/state/signal.d.ts.map +0 -1
- package/dist/state/signal.js +0 -699
- package/dist/state/signal.js.map +0 -1
- package/dist/state/use-state.d.ts +0 -210
- package/dist/state/use-state.d.ts.map +0 -1
- package/dist/state/use-state.js +0 -327
- package/dist/state/use-state.js.map +0 -1
- package/dist/tentickle-instance.d.ts +0 -285
- package/dist/tentickle-instance.d.ts.map +0 -1
- package/dist/tentickle-instance.js +0 -700
- package/dist/tentickle-instance.js.map +0 -1
- package/dist/testing/test-model.d.ts +0 -132
- package/dist/testing/test-model.d.ts.map +0 -1
- package/dist/testing/test-model.js +0 -260
- package/dist/testing/test-model.js.map +0 -1
- package/dist/v2/reconciler/host-config.d.ts +0 -31
- package/dist/v2/reconciler/host-config.d.ts.map +0 -1
- package/dist/v2/reconciler/host-config.js +0 -197
- package/dist/v2/reconciler/host-config.js.map +0 -1
- package/dist/v2/reconciler/index.d.ts +0 -7
- package/dist/v2/reconciler/index.d.ts.map +0 -1
- package/dist/v2/reconciler/index.js +0 -7
- package/dist/v2/reconciler/index.js.map +0 -1
- package/dist/v2/reconciler/reconciler.d.ts +0 -39
- package/dist/v2/reconciler/reconciler.d.ts.map +0 -1
- package/dist/v2/reconciler/reconciler.js +0 -54
- package/dist/v2/reconciler/reconciler.js.map +0 -1
- package/dist/v2/reconciler/types.d.ts +0 -64
- package/dist/v2/reconciler/types.d.ts.map +0 -1
- package/dist/v2/reconciler/types.js +0 -20
- package/dist/v2/reconciler/types.js.map +0 -1
- package/dist/v2/renderers/index.d.ts +0 -7
- package/dist/v2/renderers/index.d.ts.map +0 -1
- package/dist/v2/renderers/index.js +0 -7
- package/dist/v2/renderers/index.js.map +0 -1
- package/dist/v2/renderers/markdown.d.ts +0 -16
- package/dist/v2/renderers/markdown.d.ts.map +0 -1
- package/dist/v2/renderers/markdown.js +0 -65
- package/dist/v2/renderers/markdown.js.map +0 -1
- package/dist/v2/renderers/types.d.ts +0 -26
- package/dist/v2/renderers/types.d.ts.map +0 -1
- package/dist/v2/renderers/types.js +0 -6
- package/dist/v2/renderers/types.js.map +0 -1
- package/dist/v2/renderers/xml.d.ts +0 -17
- package/dist/v2/renderers/xml.d.ts.map +0 -1
- package/dist/v2/renderers/xml.js +0 -73
- package/dist/v2/renderers/xml.js.map +0 -1
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Simple Adapter - Minimal API for creating model adapters
|
|
3
|
-
*
|
|
4
|
-
* This provides the simplest possible API for creating adapters.
|
|
5
|
-
* Adapters only need to implement:
|
|
6
|
-
* 1. prepareInput - convert engine input to provider format
|
|
7
|
-
* 2. mapChunk - convert provider chunk to AdapterDelta
|
|
8
|
-
* 3. execute/executeStream - call the provider
|
|
9
|
-
*
|
|
10
|
-
* The framework handles everything else (accumulation, events, etc.).
|
|
11
|
-
*
|
|
12
|
-
* @module tentickle/model/simple-adapter
|
|
13
|
-
*/
|
|
14
|
-
import type { COMInput } from "../com/types";
|
|
15
|
-
import type { EngineResponse } from "../engine/engine-response";
|
|
16
|
-
import type { EngineModel, ModelInput, ModelOutput, ModelMetadata } from "./model";
|
|
17
|
-
import { type AdapterDelta, type ChunkMapping } from "./stream-accumulator";
|
|
18
|
-
/**
|
|
19
|
-
* Options for createSimpleAdapter.
|
|
20
|
-
*
|
|
21
|
-
* This is the minimal interface for creating an adapter. Compare to the
|
|
22
|
-
* full createModel API which requires implementing transformers.processChunk,
|
|
23
|
-
* transformers.processOutput, transformers.processStream, etc.
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* const model = createSimpleAdapter({
|
|
28
|
-
* metadata: { id: 'openai:gpt-4', provider: 'openai', capabilities: [{ stream: true, toolCalls: true }] },
|
|
29
|
-
*
|
|
30
|
-
* prepareInput: (input) => ({
|
|
31
|
-
* model: 'gpt-4',
|
|
32
|
-
* messages: input.messages.map(toOpenAIMessage),
|
|
33
|
-
* tools: input.tools?.map(toOpenAITool),
|
|
34
|
-
* }),
|
|
35
|
-
*
|
|
36
|
-
* mapChunk: (chunk) => {
|
|
37
|
-
* if (chunk.choices?.[0]?.delta?.content) {
|
|
38
|
-
* return { type: 'text', delta: chunk.choices[0].delta.content };
|
|
39
|
-
* }
|
|
40
|
-
* return null;
|
|
41
|
-
* },
|
|
42
|
-
*
|
|
43
|
-
* execute: async (input) => openai.chat.completions.create(input),
|
|
44
|
-
* executeStream: (input) => openai.chat.completions.create({ ...input, stream: true }),
|
|
45
|
-
* });
|
|
46
|
-
* ```
|
|
47
|
-
*/
|
|
48
|
-
export interface SimpleAdapterOptions<TProviderInput, TProviderOutput, TChunk> {
|
|
49
|
-
/** Model metadata */
|
|
50
|
-
metadata: ModelMetadata;
|
|
51
|
-
/**
|
|
52
|
-
* Convert engine ModelInput to provider-specific input format.
|
|
53
|
-
* This is the only complex transformation you need to implement.
|
|
54
|
-
*/
|
|
55
|
-
prepareInput: (input: ModelInput) => TProviderInput | Promise<TProviderInput>;
|
|
56
|
-
/**
|
|
57
|
-
* Map a provider stream chunk to an AdapterDelta.
|
|
58
|
-
* Return null to skip/ignore the chunk.
|
|
59
|
-
*
|
|
60
|
-
* This replaces the 200+ line switch statement in typical adapters.
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* ```typescript
|
|
64
|
-
* mapChunk: (chunk) => {
|
|
65
|
-
* if (chunk.type === 'text-delta') return { type: 'text', delta: chunk.text };
|
|
66
|
-
* if (chunk.type === 'tool-call') return { type: 'tool_call', id: chunk.id, name: chunk.name, input: chunk.args };
|
|
67
|
-
* if (chunk.type === 'finish') return { type: 'message_end', stopReason: StopReason.STOP };
|
|
68
|
-
* return null;
|
|
69
|
-
* }
|
|
70
|
-
* ```
|
|
71
|
-
*/
|
|
72
|
-
mapChunk: (chunk: TChunk) => AdapterDelta | null;
|
|
73
|
-
/**
|
|
74
|
-
* Execute non-streaming generation.
|
|
75
|
-
*/
|
|
76
|
-
execute: (input: TProviderInput) => Promise<TProviderOutput>;
|
|
77
|
-
/**
|
|
78
|
-
* Execute streaming generation.
|
|
79
|
-
* Returns an async iterable of provider chunks.
|
|
80
|
-
*/
|
|
81
|
-
executeStream?: (input: TProviderInput) => AsyncIterable<TChunk>;
|
|
82
|
-
/**
|
|
83
|
-
* Convert non-streaming provider output to ModelOutput.
|
|
84
|
-
* Optional - if not provided, streaming will be used and accumulated.
|
|
85
|
-
*/
|
|
86
|
-
processOutput?: (output: TProviderOutput) => ModelOutput | Promise<ModelOutput>;
|
|
87
|
-
/**
|
|
88
|
-
* Custom fromEngineState (optional).
|
|
89
|
-
* Converts COMInput to ModelInput before prepareInput.
|
|
90
|
-
* Most adapters don't need this - the default handles standard transformations.
|
|
91
|
-
*/
|
|
92
|
-
fromEngineState?: (input: COMInput) => ModelInput | Promise<ModelInput>;
|
|
93
|
-
/**
|
|
94
|
-
* Custom toEngineState (optional).
|
|
95
|
-
* Converts ModelOutput to EngineResponse.
|
|
96
|
-
* Most adapters don't need this - the default handles standard transformations.
|
|
97
|
-
*/
|
|
98
|
-
toEngineState?: (output: ModelOutput) => EngineResponse | Promise<EngineResponse>;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Declarative options using ChunkMapping instead of mapChunk function.
|
|
102
|
-
*/
|
|
103
|
-
export interface DeclarativeAdapterOptions<TProviderInput, TProviderOutput, TChunk> extends Omit<SimpleAdapterOptions<TProviderInput, TProviderOutput, TChunk>, "mapChunk"> {
|
|
104
|
-
/**
|
|
105
|
-
* Declarative chunk mapping.
|
|
106
|
-
* Alternative to mapChunk for simple cases.
|
|
107
|
-
*/
|
|
108
|
-
chunkMapping: ChunkMapping<TChunk>;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Create an adapter with the simplest possible API.
|
|
112
|
-
*
|
|
113
|
-
* This wraps createLanguageModel with sensible defaults:
|
|
114
|
-
* - Uses StreamAccumulator for stream handling (no manual accumulation)
|
|
115
|
-
* - Uses default fromEngineState/toEngineState (standard transformations)
|
|
116
|
-
* - Automatically generates StreamEvents from AdapterDeltas
|
|
117
|
-
*
|
|
118
|
-
* @example
|
|
119
|
-
* ```typescript
|
|
120
|
-
* import { createSimpleAdapter, StopReason } from '@tentickle/core/model';
|
|
121
|
-
* import { openai } from '@ai-sdk/openai';
|
|
122
|
-
*
|
|
123
|
-
* const model = createSimpleAdapter({
|
|
124
|
-
* metadata: {
|
|
125
|
-
* id: 'ai-sdk:gpt-4',
|
|
126
|
-
* provider: 'ai-sdk',
|
|
127
|
-
* capabilities: [{ stream: true, toolCalls: true }],
|
|
128
|
-
* },
|
|
129
|
-
*
|
|
130
|
-
* prepareInput: (input) => ({
|
|
131
|
-
* model: openai('gpt-4'),
|
|
132
|
-
* messages: toAiSdkMessages(input.messages),
|
|
133
|
-
* tools: convertToolsToToolSet(input.tools),
|
|
134
|
-
* }),
|
|
135
|
-
*
|
|
136
|
-
* mapChunk: (chunk) => {
|
|
137
|
-
* switch (chunk.type) {
|
|
138
|
-
* case 'text-delta': return { type: 'text', delta: chunk.text };
|
|
139
|
-
* case 'reasoning-delta': return { type: 'reasoning', delta: chunk.text };
|
|
140
|
-
* case 'tool-call': return { type: 'tool_call', id: chunk.toolCallId, name: chunk.toolName, input: chunk.args };
|
|
141
|
-
* case 'finish': return { type: 'message_end', stopReason: StopReason.STOP, usage: chunk.totalUsage };
|
|
142
|
-
* default: return null;
|
|
143
|
-
* }
|
|
144
|
-
* },
|
|
145
|
-
*
|
|
146
|
-
* execute: (input) => generateText(input),
|
|
147
|
-
* executeStream: (input) => streamText(input).fullStream,
|
|
148
|
-
* });
|
|
149
|
-
* ```
|
|
150
|
-
*/
|
|
151
|
-
export declare function createSimpleAdapter<TProviderInput, TProviderOutput, TChunk>(options: SimpleAdapterOptions<TProviderInput, TProviderOutput, TChunk>): EngineModel<ModelInput, ModelOutput>;
|
|
152
|
-
/**
|
|
153
|
-
* Create an adapter using declarative chunk mapping.
|
|
154
|
-
*
|
|
155
|
-
* This is even simpler than createSimpleAdapter for cases where
|
|
156
|
-
* chunk mapping can be expressed declaratively.
|
|
157
|
-
*
|
|
158
|
-
* @example
|
|
159
|
-
* ```typescript
|
|
160
|
-
* const model = createDeclarativeAdapter({
|
|
161
|
-
* metadata: { id: 'my-model', ... },
|
|
162
|
-
* prepareInput: (input) => ({ ... }),
|
|
163
|
-
* execute: (input) => provider.call(input),
|
|
164
|
-
* executeStream: (input) => provider.stream(input),
|
|
165
|
-
* chunkMapping: {
|
|
166
|
-
* text: { type: 'text-delta', extract: (c) => c.text },
|
|
167
|
-
* toolCall: { type: 'tool-call', extract: (c) => ({ id: c.id, name: c.name, input: c.args }) },
|
|
168
|
-
* messageEnd: { type: 'finish', extract: (c) => ({ stopReason: StopReason.STOP }) },
|
|
169
|
-
* },
|
|
170
|
-
* });
|
|
171
|
-
* ```
|
|
172
|
-
*/
|
|
173
|
-
export declare function createDeclarativeAdapter<TProviderInput, TProviderOutput, TChunk extends {
|
|
174
|
-
type: string;
|
|
175
|
-
}>(options: DeclarativeAdapterOptions<TProviderInput, TProviderOutput, TChunk>): EngineModel<ModelInput, ModelOutput>;
|
|
176
|
-
//# sourceMappingURL=simple-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"simple-adapter.d.ts","sourceRoot":"","sources":["../../src/model/simple-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEnF,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAQ9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,WAAW,oBAAoB,CAAC,cAAc,EAAE,eAAe,EAAE,MAAM;IAC3E,qBAAqB;IACrB,QAAQ,EAAE,aAAa,CAAC;IAExB;;;OAGG;IACH,YAAY,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAE9E;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC;IAEjD;;OAEG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IAE7D;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC;IAEjE;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEhF;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAExE;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACnF;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB,CAAC,cAAc,EAAE,eAAe,EAAE,MAAM,CAAE,SAAQ,IAAI,CAC9F,oBAAoB,CAAC,cAAc,EAAE,eAAe,EAAE,MAAM,CAAC,EAC7D,UAAU,CACX;IACC;;;OAGG;IACH,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;CACpC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,eAAe,EAAE,MAAM,EACzE,OAAO,EAAE,oBAAoB,CAAC,cAAc,EAAE,eAAe,EAAE,MAAM,CAAC,GACrE,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAwGtC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,EACd,eAAe,EACf,MAAM,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAE/B,OAAO,EAAE,yBAAyB,CAAC,cAAc,EAAE,eAAe,EAAE,MAAM,CAAC,GAC1E,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAQtC"}
|
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Simple Adapter - Minimal API for creating model adapters
|
|
3
|
-
*
|
|
4
|
-
* This provides the simplest possible API for creating adapters.
|
|
5
|
-
* Adapters only need to implement:
|
|
6
|
-
* 1. prepareInput - convert engine input to provider format
|
|
7
|
-
* 2. mapChunk - convert provider chunk to AdapterDelta
|
|
8
|
-
* 3. execute/executeStream - call the provider
|
|
9
|
-
*
|
|
10
|
-
* The framework handles everything else (accumulation, events, etc.).
|
|
11
|
-
*
|
|
12
|
-
* @module tentickle/model/simple-adapter
|
|
13
|
-
*/
|
|
14
|
-
import { createLanguageModel } from "./model";
|
|
15
|
-
import { StreamAccumulator, createChunkMapper, } from "./stream-accumulator";
|
|
16
|
-
import { fromEngineState, toEngineState } from "./utils/language-model";
|
|
17
|
-
// ============================================================================
|
|
18
|
-
// Factory Functions
|
|
19
|
-
// ============================================================================
|
|
20
|
-
/**
|
|
21
|
-
* Create an adapter with the simplest possible API.
|
|
22
|
-
*
|
|
23
|
-
* This wraps createLanguageModel with sensible defaults:
|
|
24
|
-
* - Uses StreamAccumulator for stream handling (no manual accumulation)
|
|
25
|
-
* - Uses default fromEngineState/toEngineState (standard transformations)
|
|
26
|
-
* - Automatically generates StreamEvents from AdapterDeltas
|
|
27
|
-
*
|
|
28
|
-
* @example
|
|
29
|
-
* ```typescript
|
|
30
|
-
* import { createSimpleAdapter, StopReason } from '@tentickle/core/model';
|
|
31
|
-
* import { openai } from '@ai-sdk/openai';
|
|
32
|
-
*
|
|
33
|
-
* const model = createSimpleAdapter({
|
|
34
|
-
* metadata: {
|
|
35
|
-
* id: 'ai-sdk:gpt-4',
|
|
36
|
-
* provider: 'ai-sdk',
|
|
37
|
-
* capabilities: [{ stream: true, toolCalls: true }],
|
|
38
|
-
* },
|
|
39
|
-
*
|
|
40
|
-
* prepareInput: (input) => ({
|
|
41
|
-
* model: openai('gpt-4'),
|
|
42
|
-
* messages: toAiSdkMessages(input.messages),
|
|
43
|
-
* tools: convertToolsToToolSet(input.tools),
|
|
44
|
-
* }),
|
|
45
|
-
*
|
|
46
|
-
* mapChunk: (chunk) => {
|
|
47
|
-
* switch (chunk.type) {
|
|
48
|
-
* case 'text-delta': return { type: 'text', delta: chunk.text };
|
|
49
|
-
* case 'reasoning-delta': return { type: 'reasoning', delta: chunk.text };
|
|
50
|
-
* case 'tool-call': return { type: 'tool_call', id: chunk.toolCallId, name: chunk.toolName, input: chunk.args };
|
|
51
|
-
* case 'finish': return { type: 'message_end', stopReason: StopReason.STOP, usage: chunk.totalUsage };
|
|
52
|
-
* default: return null;
|
|
53
|
-
* }
|
|
54
|
-
* },
|
|
55
|
-
*
|
|
56
|
-
* execute: (input) => generateText(input),
|
|
57
|
-
* executeStream: (input) => streamText(input).fullStream,
|
|
58
|
-
* });
|
|
59
|
-
* ```
|
|
60
|
-
*/
|
|
61
|
-
export function createSimpleAdapter(options) {
|
|
62
|
-
const { metadata, prepareInput, mapChunk, execute, executeStream, processOutput } = options;
|
|
63
|
-
return createLanguageModel({
|
|
64
|
-
metadata,
|
|
65
|
-
transformers: {
|
|
66
|
-
prepareInput,
|
|
67
|
-
processOutput: processOutput
|
|
68
|
-
? processOutput
|
|
69
|
-
: // If no processOutput, we'll use streaming and accumulate
|
|
70
|
-
undefined,
|
|
71
|
-
processChunk: (chunk) => {
|
|
72
|
-
// This won't be called directly when using StreamAccumulator
|
|
73
|
-
// but createLanguageModel requires it for backward compatibility
|
|
74
|
-
const delta = mapChunk(chunk);
|
|
75
|
-
if (!delta) {
|
|
76
|
-
// Return a no-op event for ignored chunks
|
|
77
|
-
return {
|
|
78
|
-
type: "content_delta",
|
|
79
|
-
id: `ignored_${Date.now()}`,
|
|
80
|
-
tick: 1,
|
|
81
|
-
timestamp: new Date().toISOString(),
|
|
82
|
-
blockType: "text",
|
|
83
|
-
blockIndex: 0,
|
|
84
|
-
delta: "",
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
// For simple cases, create basic events
|
|
88
|
-
// The real work is done in the custom stream handler below
|
|
89
|
-
return createBasicEvent(delta);
|
|
90
|
-
},
|
|
91
|
-
// processStream aggregates events into ModelOutput (fallback path)
|
|
92
|
-
processStream: (async (events) => {
|
|
93
|
-
let text = "";
|
|
94
|
-
const toolCalls = [];
|
|
95
|
-
let stopReason = "unspecified";
|
|
96
|
-
const usage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
|
|
97
|
-
for (const event of events) {
|
|
98
|
-
if (event.type === "content_delta" && "delta" in event) {
|
|
99
|
-
text += event.delta;
|
|
100
|
-
}
|
|
101
|
-
if (event.type === "tool_call" && "callId" in event) {
|
|
102
|
-
const tc = event;
|
|
103
|
-
toolCalls.push({
|
|
104
|
-
id: tc.callId,
|
|
105
|
-
name: tc.name,
|
|
106
|
-
input: tc.input || {},
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
if (event.type === "message_end" && "usage" in event) {
|
|
110
|
-
const endEvent = event;
|
|
111
|
-
if (endEvent.usage) {
|
|
112
|
-
usage.inputTokens = endEvent.usage.inputTokens || 0;
|
|
113
|
-
usage.outputTokens = endEvent.usage.outputTokens || 0;
|
|
114
|
-
usage.totalTokens = endEvent.usage.totalTokens || 0;
|
|
115
|
-
}
|
|
116
|
-
stopReason = endEvent.stopReason;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return {
|
|
120
|
-
model: metadata.id,
|
|
121
|
-
createdAt: new Date().toISOString(),
|
|
122
|
-
message: { role: "assistant", content: [{ type: "text", text }] },
|
|
123
|
-
messages: [{ role: "assistant", content: [{ type: "text", text }] }],
|
|
124
|
-
usage,
|
|
125
|
-
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
126
|
-
stopReason,
|
|
127
|
-
raw: events,
|
|
128
|
-
};
|
|
129
|
-
}), // Cast needed due to TChunk generic
|
|
130
|
-
},
|
|
131
|
-
executors: {
|
|
132
|
-
execute: async (input) => {
|
|
133
|
-
const result = await execute(input);
|
|
134
|
-
return result;
|
|
135
|
-
},
|
|
136
|
-
// executeStream wraps provider stream with StreamAccumulator
|
|
137
|
-
executeStream: executeStream
|
|
138
|
-
? ((input) => {
|
|
139
|
-
return createAccumulatedStream(executeStream(input), mapChunk, metadata.id);
|
|
140
|
-
}) // Cast needed: we return StreamEvent, not TChunk
|
|
141
|
-
: undefined,
|
|
142
|
-
},
|
|
143
|
-
fromEngineState: options.fromEngineState
|
|
144
|
-
? async (input) => options.fromEngineState(input)
|
|
145
|
-
: async (input) => {
|
|
146
|
-
// Use default transformation with model metadata for config
|
|
147
|
-
const modelInstance = { metadata };
|
|
148
|
-
return fromEngineState(input, undefined, modelInstance);
|
|
149
|
-
},
|
|
150
|
-
toEngineState: options.toEngineState
|
|
151
|
-
? async (output) => options.toEngineState(output)
|
|
152
|
-
: (output) => toEngineState(output),
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Create an adapter using declarative chunk mapping.
|
|
157
|
-
*
|
|
158
|
-
* This is even simpler than createSimpleAdapter for cases where
|
|
159
|
-
* chunk mapping can be expressed declaratively.
|
|
160
|
-
*
|
|
161
|
-
* @example
|
|
162
|
-
* ```typescript
|
|
163
|
-
* const model = createDeclarativeAdapter({
|
|
164
|
-
* metadata: { id: 'my-model', ... },
|
|
165
|
-
* prepareInput: (input) => ({ ... }),
|
|
166
|
-
* execute: (input) => provider.call(input),
|
|
167
|
-
* executeStream: (input) => provider.stream(input),
|
|
168
|
-
* chunkMapping: {
|
|
169
|
-
* text: { type: 'text-delta', extract: (c) => c.text },
|
|
170
|
-
* toolCall: { type: 'tool-call', extract: (c) => ({ id: c.id, name: c.name, input: c.args }) },
|
|
171
|
-
* messageEnd: { type: 'finish', extract: (c) => ({ stopReason: StopReason.STOP }) },
|
|
172
|
-
* },
|
|
173
|
-
* });
|
|
174
|
-
* ```
|
|
175
|
-
*/
|
|
176
|
-
export function createDeclarativeAdapter(options) {
|
|
177
|
-
const { chunkMapping, ...rest } = options;
|
|
178
|
-
const mapChunk = createChunkMapper(chunkMapping);
|
|
179
|
-
return createSimpleAdapter({
|
|
180
|
-
...rest,
|
|
181
|
-
mapChunk,
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
// ============================================================================
|
|
185
|
-
// Internal Helpers
|
|
186
|
-
// ============================================================================
|
|
187
|
-
/**
|
|
188
|
-
* Create a basic StreamEvent from an AdapterDelta.
|
|
189
|
-
* Used for backward compatibility with createLanguageModel.
|
|
190
|
-
*/
|
|
191
|
-
function createBasicEvent(delta) {
|
|
192
|
-
const base = {
|
|
193
|
-
id: `evt_${Date.now()}`,
|
|
194
|
-
tick: 1,
|
|
195
|
-
timestamp: new Date().toISOString(),
|
|
196
|
-
};
|
|
197
|
-
switch (delta.type) {
|
|
198
|
-
case "text":
|
|
199
|
-
return {
|
|
200
|
-
type: "content_delta",
|
|
201
|
-
...base,
|
|
202
|
-
blockType: "text",
|
|
203
|
-
blockIndex: 0,
|
|
204
|
-
delta: delta.delta,
|
|
205
|
-
};
|
|
206
|
-
case "reasoning":
|
|
207
|
-
return { type: "reasoning_delta", ...base, blockIndex: 0, delta: delta.delta };
|
|
208
|
-
case "tool_call":
|
|
209
|
-
return {
|
|
210
|
-
type: "tool_call",
|
|
211
|
-
...base,
|
|
212
|
-
callId: delta.id,
|
|
213
|
-
name: delta.name,
|
|
214
|
-
input: delta.input,
|
|
215
|
-
blockIndex: 0,
|
|
216
|
-
startedAt: base.timestamp,
|
|
217
|
-
completedAt: base.timestamp,
|
|
218
|
-
};
|
|
219
|
-
case "message_start":
|
|
220
|
-
return { type: "message_start", ...base, role: "assistant" };
|
|
221
|
-
case "message_end":
|
|
222
|
-
return {
|
|
223
|
-
type: "message_end",
|
|
224
|
-
...base,
|
|
225
|
-
stopReason: delta.stopReason,
|
|
226
|
-
usage: delta.usage,
|
|
227
|
-
};
|
|
228
|
-
case "error":
|
|
229
|
-
return {
|
|
230
|
-
type: "error",
|
|
231
|
-
...base,
|
|
232
|
-
error: {
|
|
233
|
-
message: typeof delta.error === "string" ? delta.error : delta.error.message,
|
|
234
|
-
code: delta.code,
|
|
235
|
-
},
|
|
236
|
-
};
|
|
237
|
-
default:
|
|
238
|
-
return {
|
|
239
|
-
type: "content_delta",
|
|
240
|
-
...base,
|
|
241
|
-
blockType: "text",
|
|
242
|
-
blockIndex: 0,
|
|
243
|
-
delta: "",
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Create an async iterable that uses StreamAccumulator to process chunks.
|
|
249
|
-
*/
|
|
250
|
-
async function* createAccumulatedStream(providerStream, mapChunk, modelId) {
|
|
251
|
-
const accumulator = new StreamAccumulator({ modelId });
|
|
252
|
-
for await (const chunk of providerStream) {
|
|
253
|
-
const delta = mapChunk(chunk);
|
|
254
|
-
if (delta) {
|
|
255
|
-
const events = accumulator.push(delta);
|
|
256
|
-
for (const event of events) {
|
|
257
|
-
yield event;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
// If we never got a message_end, emit one now with accumulated content
|
|
262
|
-
// This handles providers that don't send explicit end events
|
|
263
|
-
}
|
|
264
|
-
//# sourceMappingURL=simple-adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"simple-adapter.js","sourceRoot":"","sources":["../../src/model/simple-adapter.ts"],"names":[],"mappings":"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"}
|