@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
package/src/AiToolkit.ts DELETED
@@ -1,265 +0,0 @@
1
- /**
2
- * @since 1.0.0
3
- */
4
- import * as Context from "effect/Context"
5
- import * as Effect from "effect/Effect"
6
- import { CommitPrototype } from "effect/Effectable"
7
- import { identity } from "effect/Function"
8
- import type { Inspectable } from "effect/Inspectable"
9
- import { BaseProto as InspectableProto } from "effect/Inspectable"
10
- import * as Layer from "effect/Layer"
11
- import type { ParseError } from "effect/ParseResult"
12
- import type { Pipeable } from "effect/Pipeable"
13
- import { pipeArguments } from "effect/Pipeable"
14
- import * as Predicate from "effect/Predicate"
15
- import * as Schema from "effect/Schema"
16
- import type * as Scope from "effect/Scope"
17
- import { AiError } from "./AiError.js"
18
- import * as AiTool from "./AiTool.js"
19
-
20
- /**
21
- * @since 1.0.0
22
- * @category Type Ids
23
- */
24
- export const TypeId: unique symbol = Symbol.for("@effect/ai/AiToolkit")
25
-
26
- /**
27
- * @since 1.0.0
28
- * @category Type Ids
29
- */
30
- export type TypeId = typeof TypeId
31
-
32
- /**
33
- * An `AiToolkit` represents a set of tools that a large language model can
34
- * use to augment its response.
35
- *
36
- * @since 1.0.0
37
- * @category Models
38
- */
39
- export interface AiToolkit<in out Tools extends AiTool.Any>
40
- extends Effect.Effect<ToHandler<Tools>, never, AiTool.ToHandler<Tools>>, Inspectable, Pipeable
41
- {
42
- new(_: never): {}
43
-
44
- readonly [TypeId]: TypeId
45
-
46
- /**
47
- * A map containing the tools that are part of this toolkit.
48
- */
49
- readonly tools: AiTool.ByName<Tools>
50
-
51
- /**
52
- * Converts this toolkit into a `Context` object containing the handlers for
53
- * all tools in the toolkit.
54
- */
55
- toContext<Handlers extends HandlersFrom<Tools>, EX = never, RX = never>(
56
- build: Handlers | Effect.Effect<Handlers, EX, RX>
57
- ): Effect.Effect<Context.Context<AiTool.ToHandler<Tools>>, EX, RX>
58
-
59
- /**
60
- * Converts this toolkit into a `Layer` containing the handlers for all tools
61
- * in the toolkit.
62
- */
63
- toLayer<Handlers extends HandlersFrom<Tools>, EX = never, RX = never>(
64
- build: Handlers | Effect.Effect<Handlers, EX, RX>
65
- ): Layer.Layer<AiTool.ToHandler<Tools>, EX, Exclude<RX, Scope.Scope>>
66
-
67
- of<Handlers extends HandlersFrom<Tools>>(handlers: Handlers): Handlers
68
- }
69
-
70
- /**
71
- * @since 1.0.0
72
- * @category Models
73
- */
74
- export interface Any {
75
- readonly [TypeId]: TypeId
76
- readonly tools: Record<string, AiTool.Any>
77
- }
78
-
79
- /**
80
- * Represents an `AiToolkit` which has been augmented with a handler function
81
- * for resolving tool call requests.
82
- *
83
- * @since 1.0.0
84
- * @category Models
85
- */
86
- export interface ToHandler<in out Tool extends AiTool.Any> {
87
- readonly tools: ReadonlyArray<Tool>
88
- readonly handle: (toolName: AiTool.Name<Tool>, toolParams: AiTool.Parameters<Tool>) => AiTool.HandlerEffect<Tool>
89
- }
90
-
91
- /**
92
- * A utility mapped type which associates tool names with their handlers.
93
- *
94
- * @since 1.0.0
95
- * @category Utility Types
96
- */
97
- export type HandlersFrom<Tools extends AiTool.Any> = {
98
- [Tool in Tools as Tool["name"]]: (params: AiTool.Parameters<Tool>) => AiTool.HandlerEffect<Tool>
99
- }
100
-
101
- /**
102
- * A utility type which returns the tools in an `AiToolkit`.
103
- *
104
- * @since 1.0.0
105
- * @category Utility Types
106
- */
107
- export type Tools<Toolkit> = Toolkit extends AiToolkit<infer Tool> ? string extends Tool["name"] ? never : Tool : never
108
-
109
- const Proto = {
110
- ...CommitPrototype,
111
- ...InspectableProto,
112
- [TypeId]: TypeId,
113
- toContext(this: AiToolkit<any>, build: Effect.Effect<Record<string, (params: any) => any>>) {
114
- return Effect.gen(this, function*() {
115
- const context = yield* Effect.context<never>()
116
- const handlers = Effect.isEffect(build) ? yield* build : build
117
- const contextMap = new Map<string, unknown>()
118
- for (const [name, handler] of Object.entries(handlers)) {
119
- const tool = this.tools[name]!
120
- contextMap.set(tool.key, { handler, context })
121
- }
122
- return Context.unsafeMake(contextMap)
123
- })
124
- },
125
- toLayer(this: AiToolkit<any>, build: Effect.Effect<Record<string, (params: any) => any>>) {
126
- return Layer.scopedContext(this.toContext(build))
127
- },
128
- of: identity,
129
- commit(this: AiToolkit<AiTool.AnyWithProtocol>) {
130
- return Effect.gen(this, function*() {
131
- const context = yield* Effect.context<never>()
132
- const tools = this.tools
133
- const schemasCache = new WeakMap<any, {
134
- readonly context: Context.Context<never>
135
- readonly handler: (params: any) => Effect.Effect<any, any>
136
- readonly encodeSuccess: (u: unknown) => Effect.Effect<unknown, ParseError>
137
- readonly decodeFailure: (u: unknown) => Effect.Effect<AiTool.Failure<any>, ParseError>
138
- readonly decodeParameters: (u: unknown) => Effect.Effect<AiTool.Parameters<any>, ParseError>
139
- }>()
140
- const getSchemas = (tool: AiTool.AnyWithProtocol) => {
141
- let schemas = schemasCache.get(tool)
142
- if (Predicate.isUndefined(schemas)) {
143
- const handler = context.unsafeMap.get(tool.key)! as AiTool.Handler<any>
144
- const encodeSuccess = Schema.encodeUnknown(tool.successSchema) as any
145
- const decodeFailure = Schema.decodeUnknown(tool.failureSchema as any) as any
146
- const decodeParameters = Schema.decodeUnknown(tool.parametersSchema) as any
147
- schemas = {
148
- context: handler.context,
149
- handler: handler.handler,
150
- encodeSuccess,
151
- decodeFailure,
152
- decodeParameters
153
- }
154
- schemasCache.set(tool, schemas)
155
- }
156
- return schemas
157
- }
158
- const handle = Effect.fn("AiToolkit.handler", { captureStackTrace: false })(
159
- function*(toolName: string, toolParams: unknown) {
160
- yield* Effect.annotateCurrentSpan({
161
- tool: toolName,
162
- parameters: toolParams
163
- })
164
- const tool = tools[toolName]!
165
- const schemas = getSchemas(tool)
166
- const decodedParams = yield* Effect.mapError(
167
- schemas.decodeParameters(toolParams),
168
- (cause) =>
169
- new AiError({
170
- module: "AiToolkit",
171
- method: `${toolName}.handle`,
172
- description: `Failed to decode tool call parameters for tool '${toolName}' from '${toolParams}'`,
173
- cause
174
- })
175
- )
176
- const result = yield* schemas.handler(decodedParams).pipe(
177
- Effect.mapInputContext((input) => Context.merge(schemas.context, input)),
178
- Effect.catchAll((error) =>
179
- schemas.decodeFailure(error).pipe(
180
- Effect.mapError((cause) =>
181
- new AiError({
182
- module: "AiToolkit",
183
- method: `${toolName}.handle`,
184
- description: `Failed to decode tool call failure for tool '${toolName}'`,
185
- cause
186
- })
187
- ),
188
- Effect.flatMap(Effect.fail)
189
- )
190
- )
191
- )
192
- const encodedResult = yield* Effect.mapError(
193
- schemas.encodeSuccess(result),
194
- (cause) =>
195
- new AiError({
196
- module: "AiToolkit",
197
- method: `${toolName}.handle`,
198
- description: `Failed to encode tool call result for tool '${toolName}'`,
199
- cause
200
- })
201
- )
202
- return {
203
- result,
204
- encodedResult
205
- } satisfies AiTool.HandlerResult<any>
206
- }
207
- )
208
- return {
209
- tools: Array.from(Object.values(tools)),
210
- handle
211
- }
212
- })
213
- },
214
- toJSON(this: AiToolkit<any>): unknown {
215
- return {
216
- _id: "@effect/ai/AiToolkit",
217
- tools: Array.from(Object.values(this.tools)).map((tool) => tool.name)
218
- }
219
- },
220
- pipe() {
221
- return pipeArguments(this, arguments)
222
- }
223
- }
224
-
225
- const makeProto = <Tools extends AiTool.Any>(tools: Record<string, Tools>): AiToolkit<Tools> =>
226
- Object.assign(function() {}, Proto, { tools }) as any
227
-
228
- const resolveInput = <Tools extends ReadonlyArray<AiTool.Any>>(
229
- ...tools: Tools
230
- ): Record<string, Tools[number]> => {
231
- const output = {} as Record<string, Tools[number]>
232
- for (const tool of tools) {
233
- const value = (Schema.isSchema(tool) ? AiTool.fromTaggedRequest(tool as any) : tool) as any
234
- output[tool.name] = value
235
- }
236
- return output
237
- }
238
-
239
- /**
240
- * Constructs a new `AiToolkit` from the specified tools.
241
- *
242
- * @since 1.0.0
243
- * @category Constructors
244
- */
245
- export const make = <const Tools extends ReadonlyArray<AiTool.Any>>(
246
- ...tools: Tools
247
- ): AiToolkit<Tools[number]> => makeProto(resolveInput(...tools))
248
-
249
- /**
250
- * Merges this toolkit with one or more other toolkits.
251
- *
252
- * @since 1.0.0
253
- * @category Merging
254
- */
255
- export const merge = <const Toolkits extends ReadonlyArray<Any>>(
256
- ...toolkits: Toolkits
257
- ): AiToolkit<Tools<Toolkits[number]>> => {
258
- const tools = {} as Record<string, any>
259
- for (const toolkit of toolkits) {
260
- for (const [name, tool] of Object.entries(toolkit.tools)) {
261
- tools[name] = tool
262
- }
263
- }
264
- return makeProto(tools) as any
265
- }
@@ -1,12 +0,0 @@
1
- import * as Schema from "effect/Schema"
2
-
3
- /** @internal */
4
- export const ToolCallId = Schema.String.pipe(
5
- Schema.brand("@effect/ai/ToolCallId")
6
- )
7
-
8
- /** @internal */
9
- export const ProviderMetadata = Schema.Record({
10
- key: Schema.String,
11
- value: Schema.Record({ key: Schema.String, value: Schema.Unknown })
12
- }).annotations({ identifier: "@effect/ai/ProviderMetadata" })