@luketandjung/ariadne 2.0.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/AgentRunner.d.ts +164 -0
  2. package/dist/AgentRunner.d.ts.map +1 -0
  3. package/dist/AgentRunner.js +262 -0
  4. package/dist/AgentRunner.js.map +1 -0
  5. package/dist/AiError.d.ts +606 -0
  6. package/dist/AiError.d.ts.map +1 -0
  7. package/dist/AiError.js +601 -0
  8. package/dist/AiError.js.map +1 -0
  9. package/dist/Chat.d.ts +509 -0
  10. package/dist/Chat.d.ts.map +1 -0
  11. package/dist/Chat.js +426 -0
  12. package/dist/Chat.js.map +1 -0
  13. package/dist/EmbeddingModel.d.ts +153 -0
  14. package/dist/EmbeddingModel.d.ts.map +1 -0
  15. package/dist/EmbeddingModel.js +164 -0
  16. package/dist/EmbeddingModel.js.map +1 -0
  17. package/dist/IdGenerator.d.ts +272 -0
  18. package/dist/IdGenerator.d.ts.map +1 -0
  19. package/dist/IdGenerator.js +229 -0
  20. package/dist/IdGenerator.js.map +1 -0
  21. package/dist/LanguageModel.d.ts +531 -0
  22. package/dist/LanguageModel.d.ts.map +1 -0
  23. package/dist/LanguageModel.js +735 -0
  24. package/dist/LanguageModel.js.map +1 -0
  25. package/dist/McpRegistry.d.ts +164 -0
  26. package/dist/McpRegistry.d.ts.map +1 -0
  27. package/dist/McpRegistry.js +127 -0
  28. package/dist/McpRegistry.js.map +1 -0
  29. package/dist/McpSchema.d.ts +2832 -0
  30. package/dist/McpSchema.d.ts.map +1 -0
  31. package/dist/McpSchema.js +1678 -0
  32. package/dist/McpSchema.js.map +1 -0
  33. package/dist/McpServer.d.ts +368 -0
  34. package/dist/McpServer.d.ts.map +1 -0
  35. package/dist/McpServer.js +789 -0
  36. package/dist/McpServer.js.map +1 -0
  37. package/dist/Model.d.ts +124 -0
  38. package/dist/Model.d.ts.map +1 -0
  39. package/dist/Model.js +107 -0
  40. package/dist/Model.js.map +1 -0
  41. package/dist/Prompt.d.ts +1308 -0
  42. package/dist/Prompt.d.ts.map +1 -0
  43. package/dist/Prompt.js +837 -0
  44. package/dist/Prompt.js.map +1 -0
  45. package/dist/Response.d.ts +1869 -0
  46. package/dist/Response.d.ts.map +1 -0
  47. package/dist/Response.js +714 -0
  48. package/dist/Response.js.map +1 -0
  49. package/dist/Telemetry.d.ts +464 -0
  50. package/dist/Telemetry.d.ts.map +1 -0
  51. package/dist/Telemetry.js +170 -0
  52. package/dist/Telemetry.js.map +1 -0
  53. package/dist/Tokenizer.d.ts +154 -0
  54. package/dist/Tokenizer.d.ts.map +1 -0
  55. package/dist/Tokenizer.js +126 -0
  56. package/dist/Tokenizer.js.map +1 -0
  57. package/dist/Tool.d.ts +967 -0
  58. package/dist/Tool.d.ts.map +1 -0
  59. package/dist/Tool.js +615 -0
  60. package/dist/Tool.js.map +1 -0
  61. package/dist/Toolkit.d.ts +314 -0
  62. package/dist/Toolkit.d.ts.map +1 -0
  63. package/dist/Toolkit.js +277 -0
  64. package/dist/Toolkit.js.map +1 -0
  65. package/dist/index.d.ts +584 -10009
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +585 -3638
  68. package/dist/index.js.map +1 -0
  69. package/package.json +16 -16
  70. package/dist/index.cjs +0 -3672
  71. package/dist/index.d.cts +0 -10010
@@ -0,0 +1,164 @@
1
+ /**
2
+ * The `AgentRunner` module provides agentic loop capabilities for AI language
3
+ * models.
4
+ *
5
+ * This module enables multi-turn inference loops where the language model can
6
+ * iteratively call tools and receive results until it produces a final answer.
7
+ * It wraps the `LanguageModel` service to provide this functionality while
8
+ * maintaining full compatibility with the existing API surface.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { AgentRunner, LanguageModel, Toolkit, Tool } from "ariadne"
13
+ * import { Effect, Schema } from "effect"
14
+ *
15
+ * // Define tools
16
+ * const SearchTool = Tool.make("search", {
17
+ * description: "Search the web",
18
+ * parameters: { query: Schema.String },
19
+ * success: Schema.String,
20
+ * })
21
+ *
22
+ * const MyToolkit = Toolkit.make(SearchTool)
23
+ *
24
+ * // Use LanguageModel as usual
25
+ * const program = LanguageModel.generateText({
26
+ * prompt: "Research the latest AI developments",
27
+ * toolkit: MyToolkit,
28
+ * })
29
+ *
30
+ * // Add AgentRunner.ReAct to enable multi-turn loop
31
+ * program.pipe(
32
+ * Effect.provide(MyToolkitLive),
33
+ * Effect.provide(AgentRunner.ReAct),
34
+ * Effect.provide(AgentRunner.defaultConfig),
35
+ * Effect.provide(Gpt4oMini),
36
+ * Effect.provide(Dedalus),
37
+ * Effect.runPromise
38
+ * )
39
+ * ```
40
+ *
41
+ * @since 1.0.0
42
+ */
43
+ import * as Context from "effect/Context";
44
+ import * as Effect from "effect/Effect";
45
+ import * as Layer from "effect/Layer";
46
+ import * as LanguageModel from "./LanguageModel.js";
47
+ declare const Config_base: Context.TagClass<Config, "ariadne/AgentRunner/Config", Config.Service>;
48
+ /**
49
+ * The `Config` service tag for AgentRunner configuration.
50
+ *
51
+ * This tag provides access to runner configuration like maximum turns
52
+ * throughout your application.
53
+ *
54
+ * @example
55
+ * ```ts
56
+ * import { AgentRunner } from "ariadne"
57
+ * import { Effect } from "effect"
58
+ *
59
+ * // Use default config
60
+ * program.pipe(
61
+ * Effect.provide(AgentRunner.defaultConfig)
62
+ * )
63
+ *
64
+ * // Or provide custom config
65
+ * program.pipe(
66
+ * Effect.provide(Layer.succeed(AgentRunner.Config, { maxTurns: 20 }))
67
+ * )
68
+ * ```
69
+ *
70
+ * @since 1.0.0
71
+ * @category Context
72
+ */
73
+ export declare class Config extends Config_base {
74
+ /**
75
+ * Retrieves the config from context, or undefined if not present.
76
+ *
77
+ * @since 1.0.0
78
+ */
79
+ static readonly getOrUndefined: Effect.Effect<Config.Service | undefined>;
80
+ }
81
+ /**
82
+ * @since 1.0.0
83
+ */
84
+ export declare namespace Config {
85
+ /**
86
+ * Configuration options for the AgentRunner.
87
+ *
88
+ * @since 1.0.0
89
+ * @category Models
90
+ */
91
+ interface Service {
92
+ /**
93
+ * Maximum number of inference turns before stopping the loop.
94
+ * Each turn represents one call to the language model.
95
+ *
96
+ * @default 10
97
+ */
98
+ readonly maxTurns?: number | undefined;
99
+ }
100
+ }
101
+ /**
102
+ * Default configuration layer for AgentRunner.
103
+ *
104
+ * Provides sensible defaults:
105
+ * - `maxTurns`: 10
106
+ *
107
+ * @since 1.0.0
108
+ * @category Layers
109
+ */
110
+ export declare const defaultConfig: Layer.Layer<Config>;
111
+ /**
112
+ * ReAct (Reason + Act) loop layer that wraps LanguageModel.
113
+ *
114
+ * When provided, this layer intercepts LanguageModel calls and runs them
115
+ * in a loop until the model stops requesting tool calls. This enables
116
+ * multi-turn agentic behavior where the model can iteratively:
117
+ * 1. Analyze the current state
118
+ * 2. Decide to call tools (local or MCP server-side)
119
+ * 3. Receive tool results
120
+ * 4. Continue reasoning until producing a final answer
121
+ *
122
+ * The loop terminates when:
123
+ * - The model produces a response without tool calls (`finishReason === "stop"`)
124
+ * - The model hits a token limit (`finishReason === "length"`)
125
+ * - Content is filtered (`finishReason === "content-filter"`)
126
+ * - Maximum turns is reached (configured via `Config`)
127
+ *
128
+ * MCP tools are handled automatically - they execute server-side and their
129
+ * results are included in the response. The loop continues based on whether
130
+ * there are additional local tool calls to process.
131
+ *
132
+ * @example
133
+ * ```ts
134
+ * import { AgentRunner, LanguageModel } from "ariadne"
135
+ * import { Effect } from "effect"
136
+ *
137
+ * const program = LanguageModel.generateText({
138
+ * prompt: "Research and summarize AI trends",
139
+ * toolkit: MyToolkit,
140
+ * })
141
+ *
142
+ * // Single-step (without AgentRunner)
143
+ * program.pipe(
144
+ * Effect.provide(MyToolkitLive),
145
+ * Effect.provide(Gpt4oMini),
146
+ * Effect.provide(Dedalus),
147
+ * )
148
+ *
149
+ * // Multi-step loop (with AgentRunner)
150
+ * program.pipe(
151
+ * Effect.provide(MyToolkitLive),
152
+ * Effect.provide(AgentRunner.ReAct),
153
+ * Effect.provide(AgentRunner.defaultConfig),
154
+ * Effect.provide(Gpt4oMini),
155
+ * Effect.provide(Dedalus),
156
+ * )
157
+ * ```
158
+ *
159
+ * @since 1.0.0
160
+ * @category Layers
161
+ */
162
+ export declare const ReAct: Layer.Layer<LanguageModel.LanguageModel, never, LanguageModel.LanguageModel | Config>;
163
+ export {};
164
+ //# sourceMappingURL=AgentRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentRunner.d.ts","sourceRoot":"","sources":["../src/AgentRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAItC,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;;AASpD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,MAAO,SAAQ,WAGzB;IACC;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,CAGnE;CACT;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,UAAiB,OAAO;QACpB;;;;;WAKG;QACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC1C;CACJ;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAE5C,CAAC;AAMH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAC3B,aAAa,CAAC,aAAa,EAC3B,KAAK,EACL,aAAa,CAAC,aAAa,GAAG,MAAM,CA0OvC,CAAC"}
@@ -0,0 +1,262 @@
1
+ /**
2
+ * The `AgentRunner` module provides agentic loop capabilities for AI language
3
+ * models.
4
+ *
5
+ * This module enables multi-turn inference loops where the language model can
6
+ * iteratively call tools and receive results until it produces a final answer.
7
+ * It wraps the `LanguageModel` service to provide this functionality while
8
+ * maintaining full compatibility with the existing API surface.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { AgentRunner, LanguageModel, Toolkit, Tool } from "ariadne"
13
+ * import { Effect, Schema } from "effect"
14
+ *
15
+ * // Define tools
16
+ * const SearchTool = Tool.make("search", {
17
+ * description: "Search the web",
18
+ * parameters: { query: Schema.String },
19
+ * success: Schema.String,
20
+ * })
21
+ *
22
+ * const MyToolkit = Toolkit.make(SearchTool)
23
+ *
24
+ * // Use LanguageModel as usual
25
+ * const program = LanguageModel.generateText({
26
+ * prompt: "Research the latest AI developments",
27
+ * toolkit: MyToolkit,
28
+ * })
29
+ *
30
+ * // Add AgentRunner.ReAct to enable multi-turn loop
31
+ * program.pipe(
32
+ * Effect.provide(MyToolkitLive),
33
+ * Effect.provide(AgentRunner.ReAct),
34
+ * Effect.provide(AgentRunner.defaultConfig),
35
+ * Effect.provide(Gpt4oMini),
36
+ * Effect.provide(Dedalus),
37
+ * Effect.runPromise
38
+ * )
39
+ * ```
40
+ *
41
+ * @since 1.0.0
42
+ */
43
+ import * as Context from "effect/Context";
44
+ import * as Effect from "effect/Effect";
45
+ import * as Layer from "effect/Layer";
46
+ import * as Ref from "effect/Ref";
47
+ import * as Stream from "effect/Stream";
48
+ import * as LanguageModel from "./LanguageModel.js";
49
+ import * as Prompt from "./Prompt.js";
50
+ // =============================================================================
51
+ // Configuration
52
+ // =============================================================================
53
+ /**
54
+ * The `Config` service tag for AgentRunner configuration.
55
+ *
56
+ * This tag provides access to runner configuration like maximum turns
57
+ * throughout your application.
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * import { AgentRunner } from "ariadne"
62
+ * import { Effect } from "effect"
63
+ *
64
+ * // Use default config
65
+ * program.pipe(
66
+ * Effect.provide(AgentRunner.defaultConfig)
67
+ * )
68
+ *
69
+ * // Or provide custom config
70
+ * program.pipe(
71
+ * Effect.provide(Layer.succeed(AgentRunner.Config, { maxTurns: 20 }))
72
+ * )
73
+ * ```
74
+ *
75
+ * @since 1.0.0
76
+ * @category Context
77
+ */
78
+ export class Config extends Context.Tag("ariadne/AgentRunner/Config")() {
79
+ /**
80
+ * Retrieves the config from context, or undefined if not present.
81
+ *
82
+ * @since 1.0.0
83
+ */
84
+ static getOrUndefined = Effect.map(Effect.context(), (context) => context.unsafeMap.get(Config.key));
85
+ }
86
+ /**
87
+ * Default configuration layer for AgentRunner.
88
+ *
89
+ * Provides sensible defaults:
90
+ * - `maxTurns`: 10
91
+ *
92
+ * @since 1.0.0
93
+ * @category Layers
94
+ */
95
+ export const defaultConfig = Layer.succeed(Config, {
96
+ maxTurns: 10,
97
+ });
98
+ // =============================================================================
99
+ // ReAct Loop Implementation
100
+ // =============================================================================
101
+ /**
102
+ * ReAct (Reason + Act) loop layer that wraps LanguageModel.
103
+ *
104
+ * When provided, this layer intercepts LanguageModel calls and runs them
105
+ * in a loop until the model stops requesting tool calls. This enables
106
+ * multi-turn agentic behavior where the model can iteratively:
107
+ * 1. Analyze the current state
108
+ * 2. Decide to call tools (local or MCP server-side)
109
+ * 3. Receive tool results
110
+ * 4. Continue reasoning until producing a final answer
111
+ *
112
+ * The loop terminates when:
113
+ * - The model produces a response without tool calls (`finishReason === "stop"`)
114
+ * - The model hits a token limit (`finishReason === "length"`)
115
+ * - Content is filtered (`finishReason === "content-filter"`)
116
+ * - Maximum turns is reached (configured via `Config`)
117
+ *
118
+ * MCP tools are handled automatically - they execute server-side and their
119
+ * results are included in the response. The loop continues based on whether
120
+ * there are additional local tool calls to process.
121
+ *
122
+ * @example
123
+ * ```ts
124
+ * import { AgentRunner, LanguageModel } from "ariadne"
125
+ * import { Effect } from "effect"
126
+ *
127
+ * const program = LanguageModel.generateText({
128
+ * prompt: "Research and summarize AI trends",
129
+ * toolkit: MyToolkit,
130
+ * })
131
+ *
132
+ * // Single-step (without AgentRunner)
133
+ * program.pipe(
134
+ * Effect.provide(MyToolkitLive),
135
+ * Effect.provide(Gpt4oMini),
136
+ * Effect.provide(Dedalus),
137
+ * )
138
+ *
139
+ * // Multi-step loop (with AgentRunner)
140
+ * program.pipe(
141
+ * Effect.provide(MyToolkitLive),
142
+ * Effect.provide(AgentRunner.ReAct),
143
+ * Effect.provide(AgentRunner.defaultConfig),
144
+ * Effect.provide(Gpt4oMini),
145
+ * Effect.provide(Dedalus),
146
+ * )
147
+ * ```
148
+ *
149
+ * @since 1.0.0
150
+ * @category Layers
151
+ */
152
+ export const ReAct = Layer.effect(LanguageModel.LanguageModel, Effect.gen(function* () {
153
+ const underlying = yield* LanguageModel.LanguageModel;
154
+ const config = yield* Config.getOrUndefined;
155
+ const maxTurns = config?.maxTurns ?? 10;
156
+ const shouldTerminate = (finishReason) => finishReason === "stop" ||
157
+ finishReason === "length" ||
158
+ finishReason === "content-filter" ||
159
+ finishReason === "error" ||
160
+ finishReason === "unknown";
161
+ // Filter out finish parts from intermediate turns to ensure the final
162
+ // response's finishReason reflects the actual termination condition
163
+ const excludeFinishParts = (content) => content.filter((p) => p.type !== "finish");
164
+ const generateText = (options) => Effect.gen(function* () {
165
+ const history = yield* Ref.make(Prompt.make(options.prompt));
166
+ let turns = 0;
167
+ let allContent = [];
168
+ while (turns < maxTurns) {
169
+ turns++;
170
+ const currentPrompt = yield* Ref.get(history);
171
+ const response = yield* underlying.generateText({
172
+ ...options,
173
+ prompt: currentPrompt,
174
+ });
175
+ if (shouldTerminate(response.finishReason)) {
176
+ allContent = [...allContent, ...response.content];
177
+ return new LanguageModel.GenerateTextResponse(allContent);
178
+ }
179
+ allContent = [
180
+ ...allContent,
181
+ ...excludeFinishParts(response.content),
182
+ ];
183
+ const newPrompt = Prompt.merge(currentPrompt, Prompt.fromResponseParts(response.content));
184
+ yield* Ref.set(history, newPrompt);
185
+ }
186
+ return new LanguageModel.GenerateTextResponse(allContent);
187
+ });
188
+ const generateObject = (options) => Effect.gen(function* () {
189
+ const history = yield* Ref.make(Prompt.make(options.prompt));
190
+ let turns = 0;
191
+ let allContent = [];
192
+ let finalValue;
193
+ while (turns < maxTurns) {
194
+ turns++;
195
+ const currentPrompt = yield* Ref.get(history);
196
+ const response = yield* underlying.generateObject({
197
+ ...options,
198
+ prompt: currentPrompt,
199
+ });
200
+ finalValue = response.value;
201
+ if (shouldTerminate(response.finishReason)) {
202
+ allContent = [...allContent, ...response.content];
203
+ return new LanguageModel.GenerateObjectResponse(finalValue, allContent);
204
+ }
205
+ allContent = [
206
+ ...allContent,
207
+ ...excludeFinishParts(response.content),
208
+ ];
209
+ const newPrompt = Prompt.merge(currentPrompt, Prompt.fromResponseParts(response.content));
210
+ yield* Ref.set(history, newPrompt);
211
+ }
212
+ return new LanguageModel.GenerateObjectResponse(finalValue, allContent);
213
+ });
214
+ const streamText = (options) => {
215
+ const history = Ref.unsafeMake(Prompt.make(options.prompt));
216
+ let turns = 0;
217
+ const runTurn = () => Stream.unwrap(Effect.gen(function* () {
218
+ if (turns >= maxTurns) {
219
+ return Stream.empty;
220
+ }
221
+ turns++;
222
+ const currentPrompt = yield* Ref.get(history);
223
+ let accumulatedParts = [];
224
+ let finishReason = "unknown";
225
+ const innerStream = underlying
226
+ .streamText({
227
+ ...options,
228
+ prompt: currentPrompt,
229
+ })
230
+ .pipe(Stream.tap((part) => Effect.sync(() => {
231
+ accumulatedParts.push(part);
232
+ if (part.type === "finish") {
233
+ finishReason = part.reason;
234
+ }
235
+ })));
236
+ const continueOrEnd = Effect.gen(function* () {
237
+ if (!shouldTerminate(finishReason)) {
238
+ const currentPrompt = yield* Ref.get(history);
239
+ const newPrompt = Prompt.merge(currentPrompt, Prompt.fromResponseParts(accumulatedParts));
240
+ yield* Ref.set(history, newPrompt);
241
+ return runTurn();
242
+ }
243
+ return Stream.empty;
244
+ });
245
+ return Stream.concat(innerStream, Stream.unwrap(continueOrEnd));
246
+ }));
247
+ return runTurn();
248
+ };
249
+ const streamObject = (options) =>
250
+ // For streamObject, the loop behavior is less common since we're
251
+ // extracting a structured object. Delegate to underlying without
252
+ // looping - tool calls during object generation typically need
253
+ // different handling than iterative refinement.
254
+ underlying.streamObject(options);
255
+ return {
256
+ generateText,
257
+ generateObject,
258
+ streamText,
259
+ streamObject,
260
+ };
261
+ }));
262
+ //# sourceMappingURL=AgentRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentRunner.js","sourceRoot":"","sources":["../src/AgentRunner.ts"],"names":[],"mappings":"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"}