@effect/ai 0.26.0 → 0.27.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.
Files changed (188) hide show
  1. package/Chat/package.json +6 -0
  2. package/EmbeddingModel/package.json +6 -0
  3. package/IdGenerator/package.json +6 -0
  4. package/LanguageModel/package.json +6 -0
  5. package/Model/package.json +6 -0
  6. package/Prompt/package.json +6 -0
  7. package/Response/package.json +6 -0
  8. package/Telemetry/package.json +6 -0
  9. package/Tool/package.json +6 -0
  10. package/Toolkit/package.json +6 -0
  11. package/dist/cjs/AiError.js +575 -11
  12. package/dist/cjs/AiError.js.map +1 -1
  13. package/dist/cjs/Chat.js +302 -0
  14. package/dist/cjs/Chat.js.map +1 -0
  15. package/dist/cjs/EmbeddingModel.js +184 -0
  16. package/dist/cjs/EmbeddingModel.js.map +1 -0
  17. package/dist/cjs/IdGenerator.js +255 -0
  18. package/dist/cjs/IdGenerator.js.map +1 -0
  19. package/dist/cjs/LanguageModel.js +584 -0
  20. package/dist/cjs/LanguageModel.js.map +1 -0
  21. package/dist/cjs/McpServer.js +12 -4
  22. package/dist/cjs/McpServer.js.map +1 -1
  23. package/dist/cjs/Model.js +118 -0
  24. package/dist/cjs/Model.js.map +1 -0
  25. package/dist/cjs/Prompt.js +649 -0
  26. package/dist/cjs/Prompt.js.map +1 -0
  27. package/dist/cjs/Response.js +635 -0
  28. package/dist/cjs/Response.js.map +1 -0
  29. package/dist/cjs/Telemetry.js +176 -0
  30. package/dist/cjs/Telemetry.js.map +1 -0
  31. package/dist/cjs/Tokenizer.js +87 -8
  32. package/dist/cjs/Tokenizer.js.map +1 -1
  33. package/dist/cjs/Tool.js +556 -0
  34. package/dist/cjs/Tool.js.map +1 -0
  35. package/dist/cjs/Toolkit.js +279 -0
  36. package/dist/cjs/Toolkit.js.map +1 -0
  37. package/dist/cjs/index.js +21 -19
  38. package/dist/dts/AiError.d.ts +577 -9
  39. package/dist/dts/AiError.d.ts.map +1 -1
  40. package/dist/dts/Chat.d.ts +356 -0
  41. package/dist/dts/Chat.d.ts.map +1 -0
  42. package/dist/dts/EmbeddingModel.d.ts +153 -0
  43. package/dist/dts/EmbeddingModel.d.ts.map +1 -0
  44. package/dist/dts/IdGenerator.d.ts +272 -0
  45. package/dist/dts/IdGenerator.d.ts.map +1 -0
  46. package/dist/dts/LanguageModel.d.ts +458 -0
  47. package/dist/dts/LanguageModel.d.ts.map +1 -0
  48. package/dist/dts/McpSchema.d.ts +25 -25
  49. package/dist/dts/McpServer.d.ts +6 -4
  50. package/dist/dts/McpServer.d.ts.map +1 -1
  51. package/dist/dts/Model.d.ts +124 -0
  52. package/dist/dts/Model.d.ts.map +1 -0
  53. package/dist/dts/Prompt.d.ts +1119 -0
  54. package/dist/dts/Prompt.d.ts.map +1 -0
  55. package/dist/dts/Response.d.ts +1519 -0
  56. package/dist/dts/Response.d.ts.map +1 -0
  57. package/dist/dts/Telemetry.d.ts +520 -0
  58. package/dist/dts/Telemetry.d.ts.map +1 -0
  59. package/dist/dts/Tokenizer.d.ts +131 -13
  60. package/dist/dts/Tokenizer.d.ts.map +1 -1
  61. package/dist/dts/Tool.d.ts +876 -0
  62. package/dist/dts/Tool.d.ts.map +1 -0
  63. package/dist/dts/Toolkit.d.ts +310 -0
  64. package/dist/dts/Toolkit.d.ts.map +1 -0
  65. package/dist/dts/index.d.ts +498 -13
  66. package/dist/dts/index.d.ts.map +1 -1
  67. package/dist/esm/AiError.js +570 -10
  68. package/dist/esm/AiError.js.map +1 -1
  69. package/dist/esm/Chat.js +291 -0
  70. package/dist/esm/Chat.js.map +1 -0
  71. package/dist/esm/EmbeddingModel.js +173 -0
  72. package/dist/esm/EmbeddingModel.js.map +1 -0
  73. package/dist/esm/IdGenerator.js +245 -0
  74. package/dist/esm/IdGenerator.js.map +1 -0
  75. package/dist/esm/LanguageModel.js +572 -0
  76. package/dist/esm/LanguageModel.js.map +1 -0
  77. package/dist/esm/McpServer.js +12 -4
  78. package/dist/esm/McpServer.js.map +1 -1
  79. package/dist/esm/Model.js +108 -0
  80. package/dist/esm/Model.js.map +1 -0
  81. package/dist/esm/Prompt.js +633 -0
  82. package/dist/esm/Prompt.js.map +1 -0
  83. package/dist/esm/Response.js +619 -0
  84. package/dist/esm/Response.js.map +1 -0
  85. package/dist/esm/Telemetry.js +166 -0
  86. package/dist/esm/Telemetry.js.map +1 -0
  87. package/dist/esm/Tokenizer.js +87 -8
  88. package/dist/esm/Tokenizer.js.map +1 -1
  89. package/dist/esm/Tool.js +534 -0
  90. package/dist/esm/Tool.js.map +1 -0
  91. package/dist/esm/Toolkit.js +269 -0
  92. package/dist/esm/Toolkit.js.map +1 -0
  93. package/dist/esm/index.js +498 -13
  94. package/dist/esm/index.js.map +1 -1
  95. package/package.json +76 -68
  96. package/src/AiError.ts +739 -9
  97. package/src/Chat.ts +546 -0
  98. package/src/EmbeddingModel.ts +311 -0
  99. package/src/IdGenerator.ts +320 -0
  100. package/src/LanguageModel.ts +1074 -0
  101. package/src/McpServer.ts +337 -194
  102. package/src/Model.ts +155 -0
  103. package/src/Prompt.ts +1616 -0
  104. package/src/Response.ts +2131 -0
  105. package/src/Telemetry.ts +655 -0
  106. package/src/Tokenizer.ts +145 -24
  107. package/src/Tool.ts +1267 -0
  108. package/src/Toolkit.ts +516 -0
  109. package/src/index.ts +499 -13
  110. package/AiChat/package.json +0 -6
  111. package/AiEmbeddingModel/package.json +0 -6
  112. package/AiInput/package.json +0 -6
  113. package/AiLanguageModel/package.json +0 -6
  114. package/AiModel/package.json +0 -6
  115. package/AiResponse/package.json +0 -6
  116. package/AiTelemetry/package.json +0 -6
  117. package/AiTool/package.json +0 -6
  118. package/AiToolkit/package.json +0 -6
  119. package/dist/cjs/AiChat.js +0 -122
  120. package/dist/cjs/AiChat.js.map +0 -1
  121. package/dist/cjs/AiEmbeddingModel.js +0 -109
  122. package/dist/cjs/AiEmbeddingModel.js.map +0 -1
  123. package/dist/cjs/AiInput.js +0 -458
  124. package/dist/cjs/AiInput.js.map +0 -1
  125. package/dist/cjs/AiLanguageModel.js +0 -351
  126. package/dist/cjs/AiLanguageModel.js.map +0 -1
  127. package/dist/cjs/AiModel.js +0 -37
  128. package/dist/cjs/AiModel.js.map +0 -1
  129. package/dist/cjs/AiResponse.js +0 -681
  130. package/dist/cjs/AiResponse.js.map +0 -1
  131. package/dist/cjs/AiTelemetry.js +0 -58
  132. package/dist/cjs/AiTelemetry.js.map +0 -1
  133. package/dist/cjs/AiTool.js +0 -150
  134. package/dist/cjs/AiTool.js.map +0 -1
  135. package/dist/cjs/AiToolkit.js +0 -157
  136. package/dist/cjs/AiToolkit.js.map +0 -1
  137. package/dist/cjs/internal/common.js +0 -21
  138. package/dist/cjs/internal/common.js.map +0 -1
  139. package/dist/dts/AiChat.d.ts +0 -101
  140. package/dist/dts/AiChat.d.ts.map +0 -1
  141. package/dist/dts/AiEmbeddingModel.d.ts +0 -65
  142. package/dist/dts/AiEmbeddingModel.d.ts.map +0 -1
  143. package/dist/dts/AiInput.d.ts +0 -590
  144. package/dist/dts/AiInput.d.ts.map +0 -1
  145. package/dist/dts/AiLanguageModel.d.ts +0 -302
  146. package/dist/dts/AiLanguageModel.d.ts.map +0 -1
  147. package/dist/dts/AiModel.d.ts +0 -25
  148. package/dist/dts/AiModel.d.ts.map +0 -1
  149. package/dist/dts/AiResponse.d.ts +0 -863
  150. package/dist/dts/AiResponse.d.ts.map +0 -1
  151. package/dist/dts/AiTelemetry.d.ts +0 -242
  152. package/dist/dts/AiTelemetry.d.ts.map +0 -1
  153. package/dist/dts/AiTool.d.ts +0 -334
  154. package/dist/dts/AiTool.d.ts.map +0 -1
  155. package/dist/dts/AiToolkit.d.ts +0 -96
  156. package/dist/dts/AiToolkit.d.ts.map +0 -1
  157. package/dist/dts/internal/common.d.ts +0 -2
  158. package/dist/dts/internal/common.d.ts.map +0 -1
  159. package/dist/esm/AiChat.js +0 -111
  160. package/dist/esm/AiChat.js.map +0 -1
  161. package/dist/esm/AiEmbeddingModel.js +0 -98
  162. package/dist/esm/AiEmbeddingModel.js.map +0 -1
  163. package/dist/esm/AiInput.js +0 -433
  164. package/dist/esm/AiInput.js.map +0 -1
  165. package/dist/esm/AiLanguageModel.js +0 -340
  166. package/dist/esm/AiLanguageModel.js.map +0 -1
  167. package/dist/esm/AiModel.js +0 -29
  168. package/dist/esm/AiModel.js.map +0 -1
  169. package/dist/esm/AiResponse.js +0 -657
  170. package/dist/esm/AiResponse.js.map +0 -1
  171. package/dist/esm/AiTelemetry.js +0 -48
  172. package/dist/esm/AiTelemetry.js.map +0 -1
  173. package/dist/esm/AiTool.js +0 -134
  174. package/dist/esm/AiTool.js.map +0 -1
  175. package/dist/esm/AiToolkit.js +0 -147
  176. package/dist/esm/AiToolkit.js.map +0 -1
  177. package/dist/esm/internal/common.js +0 -14
  178. package/dist/esm/internal/common.js.map +0 -1
  179. package/src/AiChat.ts +0 -251
  180. package/src/AiEmbeddingModel.ts +0 -169
  181. package/src/AiInput.ts +0 -602
  182. package/src/AiLanguageModel.ts +0 -685
  183. package/src/AiModel.ts +0 -53
  184. package/src/AiResponse.ts +0 -986
  185. package/src/AiTelemetry.ts +0 -333
  186. package/src/AiTool.ts +0 -579
  187. package/src/AiToolkit.ts +0 -265
  188. package/src/internal/common.ts +0 -12
@@ -0,0 +1,269 @@
1
+ /**
2
+ * The `Toolkit` module allows for creating and implementing a collection of
3
+ * `Tool`s which can be used to enhance the capabilities of a large language
4
+ * model beyond simple text generation.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { Toolkit, Tool } from "@effect/ai"
9
+ * import { Effect, Schema } from "effect"
10
+ *
11
+ * // Create individual tools
12
+ * const GetCurrentTime = Tool.make("GetCurrentTime", {
13
+ * description: "Get the current timestamp",
14
+ * success: Schema.Number
15
+ * })
16
+ *
17
+ * const GetWeather = Tool.make("GetWeather", {
18
+ * description: "Get weather for a location",
19
+ * parameters: { location: Schema.String },
20
+ * success: Schema.Struct({
21
+ * temperature: Schema.Number,
22
+ * condition: Schema.String
23
+ * })
24
+ * })
25
+ *
26
+ * // Create a toolkit with multiple tools
27
+ * const MyToolkit = Toolkit.make(GetCurrentTime, GetWeather)
28
+ *
29
+ * const MyToolkitLayer = MyToolkit.toLayer({
30
+ * GetCurrentTime: () => Effect.succeed(Date.now()),
31
+ * GetWeather: ({ location }) => Effect.succeed({
32
+ * temperature: 72,
33
+ * condition: "sunny"
34
+ * })
35
+ * })
36
+ * ```
37
+ *
38
+ * @since 1.0.0
39
+ */
40
+ import * as Context from "effect/Context";
41
+ import * as Effect from "effect/Effect";
42
+ import { CommitPrototype } from "effect/Effectable";
43
+ import { identity } from "effect/Function";
44
+ import { BaseProto as InspectableProto } from "effect/Inspectable";
45
+ import * as Layer from "effect/Layer";
46
+ import { pipeArguments } from "effect/Pipeable";
47
+ import * as Predicate from "effect/Predicate";
48
+ import * as Schema from "effect/Schema";
49
+ import * as AiError from "./AiError.js";
50
+ import * as Tool from "./Tool.js";
51
+ /**
52
+ * Unique identifier for toolkit instances.
53
+ *
54
+ * @since 1.0.0
55
+ * @category Type Ids
56
+ */
57
+ export const TypeId = "~@effect/ai/Toolkit";
58
+ const Proto = {
59
+ ...CommitPrototype,
60
+ ...InspectableProto,
61
+ of: identity,
62
+ toContext(build) {
63
+ return Effect.gen(this, function* () {
64
+ const context = yield* Effect.context();
65
+ const handlers = Effect.isEffect(build) ? yield* build : build;
66
+ const contextMap = new Map();
67
+ for (const [name, handler] of Object.entries(handlers)) {
68
+ const tool = this.tools[name];
69
+ contextMap.set(tool.id, {
70
+ handler,
71
+ context
72
+ });
73
+ }
74
+ return Context.unsafeMake(contextMap);
75
+ });
76
+ },
77
+ toLayer(build) {
78
+ return Layer.scopedContext(this.toContext(build));
79
+ },
80
+ commit() {
81
+ return Effect.gen(this, function* () {
82
+ const tools = this.tools;
83
+ const context = yield* Effect.context();
84
+ const schemasCache = new WeakMap();
85
+ const getSchemas = tool => {
86
+ let schemas = schemasCache.get(tool);
87
+ if (Predicate.isUndefined(schemas)) {
88
+ const handler = context.unsafeMap.get(tool.id);
89
+ const encodeSuccess = Schema.encodeUnknown(tool.successSchema);
90
+ const encodeFailure = Schema.encodeUnknown(tool.failureSchema);
91
+ const decodeFailure = Schema.decodeUnknown(tool.failureSchema);
92
+ const decodeParameters = Schema.decodeUnknown(tool.parametersSchema);
93
+ schemas = {
94
+ context: handler.context,
95
+ handler: handler.handler,
96
+ encodeSuccess,
97
+ encodeFailure,
98
+ decodeFailure,
99
+ decodeParameters
100
+ };
101
+ schemasCache.set(tool, schemas);
102
+ }
103
+ return schemas;
104
+ };
105
+ const handle = Effect.fn("Toolkit.handle", {
106
+ captureStackTrace: false
107
+ })(function* (name, params) {
108
+ yield* Effect.annotateCurrentSpan({
109
+ tool: name,
110
+ parameters: params
111
+ });
112
+ const tool = tools[name];
113
+ if (Predicate.isUndefined(tool)) {
114
+ const toolNames = Object.keys(tools).join(",");
115
+ return yield* new AiError.MalformedOutput({
116
+ module: "Toolkit",
117
+ method: `${name}.handle`,
118
+ description: `Failed to find tool with name '${name}' in toolkit - available tools: ${toolNames}`
119
+ });
120
+ }
121
+ const schemas = getSchemas(tool);
122
+ const decodedParams = yield* Effect.mapError(schemas.decodeParameters(params), cause => new AiError.MalformedOutput({
123
+ module: "Toolkit",
124
+ method: `${name}.handle`,
125
+ description: `Failed to decode tool call parameters for tool '${name}' from:\n'${JSON.stringify(params, undefined, 2)}'`,
126
+ cause
127
+ }));
128
+ const result = yield* schemas.handler(decodedParams).pipe(Effect.mapInputContext(input => Context.merge(schemas.context, input)), Effect.catchAll(error => schemas.decodeFailure(error).pipe(Effect.mapError(cause => new AiError.MalformedInput({
129
+ module: "Toolkit",
130
+ method: `${name}.handle`,
131
+ description: `Failed to decode tool call failure for tool '${name}'`,
132
+ cause
133
+ })), Effect.flatMap(Effect.fail))));
134
+ const encodedResult = yield* Effect.mapError(schemas.encodeSuccess(result), cause => new AiError.MalformedInput({
135
+ module: "Toolkit",
136
+ method: `${name}.handle`,
137
+ description: `Failed to encode tool call result for tool '${name}'`,
138
+ cause
139
+ }));
140
+ return {
141
+ result,
142
+ encodedResult
143
+ };
144
+ });
145
+ return {
146
+ tools,
147
+ handle
148
+ };
149
+ });
150
+ },
151
+ toJSON() {
152
+ return {
153
+ _id: "@effect/ai/Toolkit",
154
+ tools: Array.from(Object.values(this.tools)).map(tool => tool.name)
155
+ };
156
+ },
157
+ pipe() {
158
+ return pipeArguments(this, arguments);
159
+ }
160
+ };
161
+ const makeProto = tools => Object.assign(function () {}, Proto, {
162
+ tools
163
+ });
164
+ const resolveInput = (...tools) => {
165
+ const output = {};
166
+ for (const tool of tools) {
167
+ const value = Schema.isSchema(tool) ? Tool.fromTaggedRequest(tool) : tool;
168
+ output[tool.name] = value;
169
+ }
170
+ return output;
171
+ };
172
+ /**
173
+ * An empty toolkit with no tools.
174
+ *
175
+ * Useful as a starting point for building toolkits or as a default value. Can
176
+ * be extended using the merge function to add tools.
177
+ *
178
+ * @since 1.0.0
179
+ * @category Constructors
180
+ */
181
+ export const empty = /*#__PURE__*/makeProto({});
182
+ /**
183
+ * Creates a new toolkit from the specified tools.
184
+ *
185
+ * This is the primary constructor for creating toolkits. It accepts multiple tools
186
+ * and organizes them into a toolkit that can be provided to AI language models.
187
+ * Tools can be either Tool instances or TaggedRequest schemas.
188
+ *
189
+ * @example
190
+ * ```ts
191
+ * import { Toolkit, Tool } from "@effect/ai"
192
+ * import { Schema } from "effect"
193
+ *
194
+ * const GetCurrentTime = Tool.make("GetCurrentTime", {
195
+ * description: "Get the current timestamp",
196
+ * success: Schema.Number
197
+ * })
198
+ *
199
+ * const GetWeather = Tool.make("get_weather", {
200
+ * description: "Get weather information",
201
+ * parameters: { location: Schema.String },
202
+ * success: Schema.Struct({
203
+ * temperature: Schema.Number,
204
+ * condition: Schema.String
205
+ * })
206
+ * })
207
+ *
208
+ * const toolkit = Toolkit.make(GetCurrentTime, GetWeather)
209
+ * ```
210
+ *
211
+ * @since 1.0.0
212
+ * @category Constructors
213
+ */
214
+ export const make = (...tools) => makeProto(resolveInput(...tools));
215
+ /**
216
+ * Merges multiple toolkits into a single toolkit.
217
+ *
218
+ * Combines all tools from the provided toolkits into one unified toolkit.
219
+ * If there are naming conflicts, tools from later toolkits will override
220
+ * tools from earlier ones.
221
+ *
222
+ * @example
223
+ * ```ts
224
+ * import { Toolkit, Tool } from "@effect/ai"
225
+ *
226
+ * const mathToolkit = Toolkit.make(
227
+ * Tool.make("add"),
228
+ * Tool.make("subtract")
229
+ * )
230
+ *
231
+ * const utilityToolkit = Toolkit.make(
232
+ * Tool.make("get_time"),
233
+ * Tool.make("get_weather")
234
+ * )
235
+ *
236
+ * const combined = Toolkit.merge(mathToolkit, utilityToolkit)
237
+ * // combined now has: add, subtract, get_time, get_weather
238
+ * ```
239
+ *
240
+ * @example
241
+ * ```ts
242
+ * import { Toolkit, Tool } from "@effect/ai"
243
+ *
244
+ * // Incremental toolkit building
245
+ * const baseToolkit = Toolkit.make(Tool.make("base_tool"))
246
+ * const extendedToolkit = Toolkit.merge(
247
+ * baseToolkit,
248
+ * Toolkit.make(Tool.make("additional_tool")),
249
+ * Toolkit.make(Tool.make("another_tool"))
250
+ * )
251
+ * ```
252
+ *
253
+ * @since 1.0.0
254
+ * @category Constructors
255
+ */
256
+ export const merge = (
257
+ /**
258
+ * The toolkits to merge together.
259
+ */
260
+ ...toolkits) => {
261
+ const tools = {};
262
+ for (const toolkit of toolkits) {
263
+ for (const [name, tool] of Object.entries(toolkit.tools)) {
264
+ tools[name] = tool;
265
+ }
266
+ }
267
+ return makeProto(tools);
268
+ };
269
+ //# sourceMappingURL=Toolkit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toolkit.js","names":["Context","Effect","CommitPrototype","identity","BaseProto","InspectableProto","Layer","pipeArguments","Predicate","Schema","AiError","Tool","TypeId","Proto","of","toContext","build","gen","context","handlers","isEffect","contextMap","Map","name","handler","Object","entries","tool","tools","set","id","unsafeMake","toLayer","scopedContext","commit","schemasCache","WeakMap","getSchemas","schemas","get","isUndefined","unsafeMap","encodeSuccess","encodeUnknown","successSchema","encodeFailure","failureSchema","decodeFailure","decodeUnknown","decodeParameters","parametersSchema","handle","fn","captureStackTrace","params","annotateCurrentSpan","parameters","toolNames","keys","join","MalformedOutput","module","method","description","decodedParams","mapError","cause","JSON","stringify","undefined","result","pipe","mapInputContext","input","merge","catchAll","error","MalformedInput","flatMap","fail","encodedResult","toJSON","_id","Array","from","values","map","arguments","makeProto","assign","resolveInput","output","value","isSchema","fromTaggedRequest","empty","make","toolkits","toolkit"],"sources":["../../src/Toolkit.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}