@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/index.ts CHANGED
@@ -1,64 +1,550 @@
1
1
  /**
2
+ * The `AiError` module provides comprehensive error handling for AI operations.
3
+ *
4
+ * This module defines a hierarchy of error types that can occur when working
5
+ * with AI services, including HTTP request/response errors, input/output
6
+ * validation errors, and general runtime errors. All errors follow Effect's
7
+ * structured error patterns and provide detailed context for debugging.
8
+ *
9
+ * ## Error Types
10
+ *
11
+ * - **HttpRequestError**: Errors occurring during HTTP request processing
12
+ * - **HttpResponseError**: Errors occurring during HTTP response processing
13
+ * - **MalformedInput**: Errors when input data doesn't match expected format
14
+ * - **MalformedOutput**: Errors when output data can't be parsed or validated
15
+ * - **UnknownError**: Catch-all for unexpected runtime errors
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * import { AiError } from "@effect/ai"
20
+ * import { Effect, Match } from "effect"
21
+ *
22
+ * const handleAiError = Match.type<AiError.AiError>().pipe(
23
+ * Match.tag("HttpRequestError", (err) =>
24
+ * Effect.logError(`Request failed: ${err.message}`)
25
+ * ),
26
+ * Match.tag("HttpResponseError", (err) =>
27
+ * Effect.logError(`Response error (${err.response.status}): ${err.message}`)
28
+ * ),
29
+ * Match.tag("MalformedInput", (err) =>
30
+ * Effect.logError(`Invalid input: ${err.message}`)
31
+ * ),
32
+ * Match.tag("MalformedOutput", (err) =>
33
+ * Effect.logError(`Invalid output: ${err.message}`)
34
+ * ),
35
+ * Match.orElse((err) =>
36
+ * Effect.logError(`Unknown error: ${err.message}`)
37
+ * )
38
+ * )
39
+ * ```
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * import { AiError } from "@effect/ai"
44
+ * import { Effect, Option } from "effect"
45
+ *
46
+ * const aiOperation = Effect.gen(function* () {
47
+ * // Some AI operation that might fail
48
+ * return yield* new AiError.HttpRequestError({
49
+ * module: "OpenAI",
50
+ * method: "completion",
51
+ * reason: "Transport",
52
+ * request: {
53
+ * method: "POST",
54
+ * url: "https://api.openai.com/v1/completions",
55
+ * urlParams: [],
56
+ * hash: Option.none(),
57
+ * headers: { "Authorization": "Bearer ***" }
58
+ * }
59
+ * })
60
+ * })
61
+ *
62
+ * const program = aiOperation.pipe(
63
+ * Effect.catchTag("HttpRequestError", (error) => {
64
+ * console.log("Request failed:", error.message)
65
+ * return Effect.succeed("fallback response")
66
+ * })
67
+ * )
68
+ * ```
69
+ *
2
70
  * @since 1.0.0
3
71
  */
4
- export * as AiChat from "./AiChat.js"
72
+ export * as AiError from "./AiError.js"
5
73
 
6
74
  /**
75
+ * The `Chat` module provides a stateful conversation interface for AI language
76
+ * models.
77
+ *
78
+ * This module enables persistent chat sessions that maintain conversation
79
+ * history, support tool calling, and offer both streaming and non-streaming
80
+ * text generation. It integrates seamlessly with the Effect AI ecosystem,
81
+ * providing type-safe conversational AI capabilities.
82
+ *
83
+ * @example
84
+ * ```ts
85
+ * import { Chat, LanguageModel } from "@effect/ai"
86
+ * import { Effect, Layer } from "effect"
87
+ *
88
+ * // Create a new chat session
89
+ * const program = Effect.gen(function* () {
90
+ * const chat = yield* Chat.empty
91
+ *
92
+ * // Send a message and get response
93
+ * const response = yield* chat.generateText({
94
+ * prompt: "Hello! What can you help me with?"
95
+ * })
96
+ *
97
+ * console.log(response.content)
98
+ *
99
+ * return response
100
+ * })
101
+ * ```
102
+ *
103
+ * @example
104
+ * ```ts
105
+ * import { Chat, LanguageModel } from "@effect/ai"
106
+ * import { Effect, Stream } from "effect"
107
+ *
108
+ * // Streaming chat with tool support
109
+ * const streamingChat = Effect.gen(function* () {
110
+ * const chat = yield* Chat.empty
111
+ *
112
+ * yield* chat.streamText({
113
+ * prompt: "Generate a creative story"
114
+ * }).pipe(Stream.runForEach((part) =>
115
+ * Effect.sync(() => console.log(part))
116
+ * ))
117
+ * })
118
+ * ```
119
+ *
7
120
  * @since 1.0.0
8
121
  */
9
- export * as AiEmbeddingModel from "./AiEmbeddingModel.js"
122
+ export * as Chat from "./Chat.js"
10
123
 
11
124
  /**
125
+ * The `EmbeddingModel` module provides vector embeddings for text using AI
126
+ * models.
127
+ *
128
+ * This module enables efficient conversion of text into high-dimensional vector
129
+ * representations that capture semantic meaning. It supports batching, caching,
130
+ * and request optimization for production use cases like semantic search,
131
+ * document similarity, and clustering.
132
+ *
133
+ * @example
134
+ * ```ts
135
+ * import { EmbeddingModel } from "@effect/ai"
136
+ * import { Effect } from "effect"
137
+ *
138
+ * // Basic embedding usage
139
+ * const program = Effect.gen(function* () {
140
+ * const embedding = yield* EmbeddingModel.EmbeddingModel
141
+ *
142
+ * const vector = yield* embedding.embed("Hello world!")
143
+ * console.log(vector) // [0.123, -0.456, 0.789, ...]
144
+ *
145
+ * return vector
146
+ * })
147
+ * ```
148
+ *
149
+ * @example
150
+ * ```ts
151
+ * import { EmbeddingModel } from "@effect/ai"
152
+ * import { Effect, Duration } from "effect"
153
+ *
154
+ * declare const generateVectorFor: (text: string) => Array<number>
155
+ *
156
+ * // Create embedding service with batching and caching
157
+ * const embeddingService = EmbeddingModel.make({
158
+ * embedMany: (texts) => Effect.succeed(
159
+ * texts.map((text, index) => ({
160
+ * index,
161
+ * embeddings: generateVectorFor(text)
162
+ * }))
163
+ * ),
164
+ * maxBatchSize: 50,
165
+ * cache: {
166
+ * capacity: 1000,
167
+ * timeToLive: Duration.minutes(30)
168
+ * }
169
+ * })
170
+ * ```
171
+ *
12
172
  * @since 1.0.0
13
173
  */
14
- export * as AiError from "./AiError.js"
174
+ export * as EmbeddingModel from "./EmbeddingModel.js"
15
175
 
16
176
  /**
177
+ * The `IdGenerator` module provides a pluggable system for generating unique identifiers
178
+ * for tool calls and other items in the Effect AI SDKs.
179
+ *
180
+ * This module offers a flexible and configurable approach to ID generation, supporting
181
+ * custom alphabets, prefixes, separators, and sizes.
182
+ *
183
+ * @example
184
+ * ```ts
185
+ * import { IdGenerator } from "@effect/ai"
186
+ * import { Effect, Layer } from "effect"
187
+ *
188
+ * // Using the default ID generator
189
+ * const program = Effect.gen(function* () {
190
+ * const idGen = yield* IdGenerator.IdGenerator
191
+ * const toolCallId = yield* idGen.generateId()
192
+ * console.log(toolCallId) // "id_A7xK9mP2qR5tY8uV"
193
+ * return toolCallId
194
+ * }).pipe(
195
+ * Effect.provide(Layer.succeed(
196
+ * IdGenerator.IdGenerator,
197
+ * IdGenerator.defaultIdGenerator
198
+ * ))
199
+ * )
200
+ * ```
201
+ *
202
+ * @example
203
+ * ```ts
204
+ * import { IdGenerator } from "@effect/ai"
205
+ * import { Effect, Layer } from "effect"
206
+ *
207
+ * // Creating a custom ID generator for AI tool calls
208
+ * const customLayer = IdGenerator.layer({
209
+ * alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
210
+ * prefix: "tool_call",
211
+ * separator: "-",
212
+ * size: 12
213
+ * })
214
+ *
215
+ * const program = Effect.gen(function* () {
216
+ * const idGen = yield* IdGenerator.IdGenerator
217
+ * const id = yield* idGen.generateId()
218
+ * console.log(id) // "tool_call-A7XK9MP2QR5T"
219
+ * return id
220
+ * }).pipe(
221
+ * Effect.provide(customLayer)
222
+ * )
223
+ * ```
224
+ *
17
225
  * @since 1.0.0
18
226
  */
19
- export * as AiInput from "./AiInput.js"
227
+ export * as IdGenerator from "./IdGenerator.js"
20
228
 
21
229
  /**
230
+ * The `LanguageModel` module provides AI text generation capabilities with tool
231
+ * calling support.
232
+ *
233
+ * This module offers a comprehensive interface for interacting with large
234
+ * language models, supporting both streaming and non-streaming text generation,
235
+ * structured output generation, and tool calling functionality. It provides a
236
+ * unified API that can be implemented by different AI providers while
237
+ * maintaining type safety and effect management.
238
+ *
239
+ * @example
240
+ * ```ts
241
+ * import { LanguageModel } from "@effect/ai"
242
+ * import { Effect } from "effect"
243
+ *
244
+ * // Basic text generation
245
+ * const program = Effect.gen(function* () {
246
+ * const response = yield* LanguageModel.generateText({
247
+ * prompt: "Explain quantum computing"
248
+ * })
249
+ *
250
+ * console.log(response.text)
251
+ *
252
+ * return response
253
+ * })
254
+ * ```
255
+ *
256
+ * @example
257
+ * ```ts
258
+ * import { LanguageModel } from "@effect/ai"
259
+ * import { Effect, Schema } from "effect"
260
+ *
261
+ * // Structured output generation
262
+ * const ContactSchema = Schema.Struct({
263
+ * name: Schema.String,
264
+ * email: Schema.String
265
+ * })
266
+ *
267
+ * const extractContact = Effect.gen(function* () {
268
+ * const response = yield* LanguageModel.generateObject({
269
+ * prompt: "Extract contact: John Doe, john@example.com",
270
+ * schema: ContactSchema
271
+ * })
272
+ *
273
+ * return response.value
274
+ * })
275
+ * ```
276
+ *
22
277
  * @since 1.0.0
23
278
  */
24
- export * as AiLanguageModel from "./AiLanguageModel.js"
279
+ export * as LanguageModel from "./LanguageModel.js"
25
280
 
26
281
  /**
27
282
  * @since 1.0.0
28
283
  */
29
- export * as AiModel from "./AiModel.js"
284
+ export * as McpSchema from "./McpSchema.js"
30
285
 
31
286
  /**
32
287
  * @since 1.0.0
33
288
  */
34
- export * as AiResponse from "./AiResponse.js"
289
+ export * as McpServer from "./McpServer.js"
35
290
 
36
291
  /**
292
+ * The `Model` module provides a unified interface for AI service providers.
293
+ *
294
+ * This module enables creation of provider-specific AI models that can be used
295
+ * interchangeably within the Effect AI ecosystem. It combines Layer
296
+ * functionality with provider identification, allowing for seamless switching
297
+ * between different AI service providers while maintaining type safety.
298
+ *
299
+ * @example
300
+ * ```ts
301
+ * import { Model, LanguageModel } from "@effect/ai"
302
+ * import { Effect, Layer } from "effect"
303
+ *
304
+ * declare const myAnthropicLayer: Layer.Layer<LanguageModel.LanguageModel>
305
+ *
306
+ * const anthropicModel = Model.make("anthropic", myAnthropicLayer)
307
+ *
308
+ * const program = Effect.gen(function* () {
309
+ * const response = yield* LanguageModel.generateText({
310
+ * prompt: "Hello, world!"
311
+ * })
312
+ * return response.text
313
+ * }).pipe(
314
+ * Effect.provide(anthropicModel)
315
+ * )
316
+ * ```
317
+ *
37
318
  * @since 1.0.0
38
319
  */
39
- export * as AiTelemetry from "./AiTelemetry.js"
320
+ export * as Model from "./Model.js"
40
321
 
41
322
  /**
323
+ * The `Prompt` module provides several data structures to simplify creating and
324
+ * combining prompts.
325
+ *
326
+ * This module defines the complete structure of a conversation with a large
327
+ * language model, including messages, content parts, and provider-specific
328
+ * options. It supports rich content types like text, files, tool calls, and
329
+ * reasoning.
330
+ *
331
+ * @example
332
+ * ```ts
333
+ * import { Prompt } from "@effect/ai"
334
+ *
335
+ * // Create a structured conversation
336
+ * const conversation = Prompt.make([
337
+ * {
338
+ * role: "system",
339
+ * content: "You are a helpful assistant specialized in mathematics."
340
+ * },
341
+ * {
342
+ * role: "user",
343
+ * content: [{
344
+ * type: "text",
345
+ * text: "What is the derivative of x²?"
346
+ * }]
347
+ * },
348
+ * {
349
+ * role: "assistant",
350
+ * content: [{
351
+ * type: "text",
352
+ * text: "The derivative of x² is 2x."
353
+ * }]
354
+ * }
355
+ * ])
356
+ * ```
357
+ *
358
+ * @example
359
+ * ```ts
360
+ * import { Prompt } from "@effect/ai"
361
+ *
362
+ * // Merge multiple prompts
363
+ * const systemPrompt = Prompt.make([{
364
+ * role: "system",
365
+ * content: "You are a coding assistant."
366
+ * }])
367
+ *
368
+ * const userPrompt = Prompt.make("Help me write a function")
369
+ *
370
+ * const combined = Prompt.merge(systemPrompt, userPrompt)
371
+ * ```
372
+ *
42
373
  * @since 1.0.0
43
374
  */
44
- export * as AiTool from "./AiTool.js"
375
+ export * as Prompt from "./Prompt.js"
45
376
 
46
377
  /**
378
+ * The `Response` module provides data structures to represent responses from
379
+ * large language models.
380
+ *
381
+ * This module defines the complete structure of AI model responses, including
382
+ * various content parts for text, reasoning, tool calls, files, and metadata,
383
+ * supporting both streaming and non-streaming responses.
384
+ *
385
+ * @example
386
+ * ```ts
387
+ * import { Response } from "@effect/ai"
388
+ *
389
+ * // Create a simple text response part
390
+ * const textResponse = Response.makePart("text", {
391
+ * text: "The weather is sunny today!"
392
+ * })
393
+ *
394
+ * // Create a tool call response part
395
+ * const toolCallResponse = Response.makePart("tool-call", {
396
+ * id: "call_123",
397
+ * name: "get_weather",
398
+ * params: { city: "San Francisco" },
399
+ * providerExecuted: false
400
+ * })
401
+ * ```
402
+ *
47
403
  * @since 1.0.0
48
404
  */
49
- export * as AiToolkit from "./AiToolkit.js"
405
+ export * as Response from "./Response.js"
50
406
 
51
407
  /**
408
+ * The `Telemetry` module provides OpenTelemetry integration for operations
409
+ * performed against a large language model provider by defining telemetry
410
+ * attributes and utilities that follow the OpenTelemetry GenAI semantic
411
+ * conventions.
412
+ *
413
+ * @example
414
+ * ```ts
415
+ * import { Telemetry } from "@effect/ai"
416
+ * import { Effect } from "effect"
417
+ *
418
+ * // Add telemetry attributes to a span
419
+ * const addTelemetry = Effect.gen(function* () {
420
+ * const span = yield* Effect.currentSpan
421
+ *
422
+ * Telemetry.addGenAIAnnotations(span, {
423
+ * system: "openai",
424
+ * operation: { name: "chat" },
425
+ * request: {
426
+ * model: "gpt-4",
427
+ * temperature: 0.7,
428
+ * maxTokens: 1000
429
+ * },
430
+ * usage: {
431
+ * inputTokens: 100,
432
+ * outputTokens: 50
433
+ * }
434
+ * })
435
+ * })
436
+ * ```
437
+ *
52
438
  * @since 1.0.0
53
439
  */
54
- export * as McpSchema from "./McpSchema.js"
440
+ export * as Telemetry from "./Telemetry.js"
55
441
 
56
442
  /**
443
+ * The `Tokenizer` module provides tokenization and text truncation capabilities
444
+ * for large language model text processing workflows.
445
+ *
446
+ * This module offers services for converting text into tokens and truncating
447
+ * prompts based on token limits, essential for managing context length
448
+ * constraints in large language models.
449
+ *
450
+ * @example
451
+ * ```ts
452
+ * import { Tokenizer, Prompt } from "@effect/ai"
453
+ * import { Effect } from "effect"
454
+ *
455
+ * const tokenizeText = Effect.gen(function* () {
456
+ * const tokenizer = yield* Tokenizer.Tokenizer
457
+ * const tokens = yield* tokenizer.tokenize("Hello, world!")
458
+ * console.log(`Token count: ${tokens.length}`)
459
+ * return tokens
460
+ * })
461
+ * ```
462
+ *
463
+ * @example
464
+ * ```ts
465
+ * import { Tokenizer, Prompt } from "@effect/ai"
466
+ * import { Effect } from "effect"
467
+ *
468
+ * // Truncate a prompt to fit within token limits
469
+ * const truncatePrompt = Effect.gen(function* () {
470
+ * const tokenizer = yield* Tokenizer.Tokenizer
471
+ * const longPrompt = "This is a very long prompt..."
472
+ * const truncated = yield* tokenizer.truncate(longPrompt, 100)
473
+ * return truncated
474
+ * })
475
+ * ```
476
+ *
57
477
  * @since 1.0.0
58
478
  */
59
- export * as McpServer from "./McpServer.js"
479
+ export * as Tokenizer from "./Tokenizer.js"
60
480
 
61
481
  /**
482
+ * The `Tool` module provides functionality for defining and managing tools
483
+ * that language models can call to augment their capabilities.
484
+ *
485
+ * This module enables creation of both user-defined and provider-defined tools,
486
+ * with full schema validation, type safety, and handler support. Tools allow
487
+ * AI models to perform actions like searching databases, calling APIs, or
488
+ * executing code within your application context.
489
+ *
490
+ * @example
491
+ * ```ts
492
+ * import { Tool } from "@effect/ai"
493
+ * import { Schema } from "effect"
494
+ *
495
+ * // Define a simple calculator tool
496
+ * const Calculator = Tool.make("Calculator", {
497
+ * description: "Performs basic arithmetic operations",
498
+ * parameters: {
499
+ * operation: Schema.Literal("add", "subtract", "multiply", "divide"),
500
+ * a: Schema.Number,
501
+ * b: Schema.Number
502
+ * },
503
+ * success: Schema.Number
504
+ * })
505
+ * ```
506
+ *
62
507
  * @since 1.0.0
63
508
  */
64
- export * as Tokenizer from "./Tokenizer.js"
509
+ export * as Tool from "./Tool.js"
510
+
511
+ /**
512
+ * The `Toolkit` module allows for creating and implementing a collection of
513
+ * `Tool`s which can be used to enhance the capabilities of a large language
514
+ * model beyond simple text generation.
515
+ *
516
+ * @example
517
+ * ```ts
518
+ * import { Toolkit, Tool } from "@effect/ai"
519
+ * import { Effect, Schema } from "effect"
520
+ *
521
+ * // Create individual tools
522
+ * const GetCurrentTime = Tool.make("GetCurrentTime", {
523
+ * description: "Get the current timestamp",
524
+ * success: Schema.Number
525
+ * })
526
+ *
527
+ * const GetWeather = Tool.make("GetWeather", {
528
+ * description: "Get weather for a location",
529
+ * parameters: { location: Schema.String },
530
+ * success: Schema.Struct({
531
+ * temperature: Schema.Number,
532
+ * condition: Schema.String
533
+ * })
534
+ * })
535
+ *
536
+ * // Create a toolkit with multiple tools
537
+ * const MyToolkit = Toolkit.make(GetCurrentTime, GetWeather)
538
+ *
539
+ * const MyToolkitLayer = MyToolkit.toLayer({
540
+ * GetCurrentTime: () => Effect.succeed(Date.now()),
541
+ * GetWeather: ({ location }) => Effect.succeed({
542
+ * temperature: 72,
543
+ * condition: "sunny"
544
+ * })
545
+ * })
546
+ * ```
547
+ *
548
+ * @since 1.0.0
549
+ */
550
+ export * as Toolkit from "./Toolkit.js"
@@ -1,6 +0,0 @@
1
- {
2
- "sideEffects": [],
3
- "main": "../dist/cjs/AiChat.js",
4
- "module": "../dist/esm/AiChat.js",
5
- "types": "../dist/dts/AiChat.d.ts"
6
- }
@@ -1,6 +0,0 @@
1
- {
2
- "sideEffects": [],
3
- "main": "../dist/cjs/AiEmbeddingModel.js",
4
- "module": "../dist/esm/AiEmbeddingModel.js",
5
- "types": "../dist/dts/AiEmbeddingModel.d.ts"
6
- }
@@ -1,6 +0,0 @@
1
- {
2
- "sideEffects": [],
3
- "main": "../dist/cjs/AiInput.js",
4
- "module": "../dist/esm/AiInput.js",
5
- "types": "../dist/dts/AiInput.d.ts"
6
- }
@@ -1,6 +0,0 @@
1
- {
2
- "sideEffects": [],
3
- "main": "../dist/cjs/AiLanguageModel.js",
4
- "module": "../dist/esm/AiLanguageModel.js",
5
- "types": "../dist/dts/AiLanguageModel.d.ts"
6
- }
@@ -1,6 +0,0 @@
1
- {
2
- "sideEffects": [],
3
- "main": "../dist/cjs/AiModel.js",
4
- "module": "../dist/esm/AiModel.js",
5
- "types": "../dist/dts/AiModel.d.ts"
6
- }
@@ -1,6 +0,0 @@
1
- {
2
- "sideEffects": [],
3
- "main": "../dist/cjs/AiResponse.js",
4
- "module": "../dist/esm/AiResponse.js",
5
- "types": "../dist/dts/AiResponse.d.ts"
6
- }
@@ -1,6 +0,0 @@
1
- {
2
- "sideEffects": [],
3
- "main": "../dist/cjs/AiTelemetry.js",
4
- "module": "../dist/esm/AiTelemetry.js",
5
- "types": "../dist/dts/AiTelemetry.d.ts"
6
- }
@@ -1,6 +0,0 @@
1
- {
2
- "sideEffects": [],
3
- "main": "../dist/cjs/AiTool.js",
4
- "module": "../dist/esm/AiTool.js",
5
- "types": "../dist/dts/AiTool.d.ts"
6
- }
@@ -1,6 +0,0 @@
1
- {
2
- "sideEffects": [],
3
- "main": "../dist/cjs/AiToolkit.js",
4
- "module": "../dist/esm/AiToolkit.js",
5
- "types": "../dist/dts/AiToolkit.d.ts"
6
- }