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