@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,633 @@
1
+ /**
2
+ * The `Prompt` module provides several data structures to simplify creating and
3
+ * combining prompts.
4
+ *
5
+ * This module defines the complete structure of a conversation with a large
6
+ * language model, including messages, content parts, and provider-specific
7
+ * options. It supports rich content types like text, files, tool calls, and
8
+ * reasoning.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { Prompt } from "@effect/ai"
13
+ *
14
+ * // Create a structured conversation
15
+ * const conversation = Prompt.make([
16
+ * {
17
+ * role: "system",
18
+ * content: "You are a helpful assistant specialized in mathematics."
19
+ * },
20
+ * {
21
+ * role: "user",
22
+ * content: [{
23
+ * type: "text",
24
+ * text: "What is the derivative of x²?"
25
+ * }]
26
+ * },
27
+ * {
28
+ * role: "assistant",
29
+ * content: [{
30
+ * type: "text",
31
+ * text: "The derivative of x² is 2x."
32
+ * }]
33
+ * }
34
+ * ])
35
+ * ```
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * import { Prompt } from "@effect/ai"
40
+ *
41
+ * // Merge multiple prompts
42
+ * const systemPrompt = Prompt.make([{
43
+ * role: "system",
44
+ * content: "You are a coding assistant."
45
+ * }])
46
+ *
47
+ * const userPrompt = Prompt.make("Help me write a function")
48
+ *
49
+ * const combined = Prompt.merge(systemPrompt, userPrompt)
50
+ * ```
51
+ *
52
+ * @since 1.0.0
53
+ */
54
+ import { constFalse, dual } from "effect/Function";
55
+ import * as Predicate from "effect/Predicate";
56
+ import * as Schema from "effect/Schema";
57
+ const constEmptyObject = () => ({});
58
+ // =============================================================================
59
+ // Options
60
+ // =============================================================================
61
+ /**
62
+ * Schema for provider-specific options which can be attached to both content
63
+ * parts and messages, enabling provider-specific behavior.
64
+ *
65
+ * Provider-specific options are namespaced by provider and have the structure:
66
+ *
67
+ * ```
68
+ * {
69
+ * "<provider-specific-key>": {
70
+ * // Provider-specific options
71
+ * }
72
+ * }
73
+ * ```
74
+ *
75
+ * @since 1.0.0
76
+ * @category Models
77
+ */
78
+ export const ProviderOptions = /*#__PURE__*/Schema.Record({
79
+ key: Schema.String,
80
+ value: /*#__PURE__*/Schema.Record({
81
+ key: Schema.String,
82
+ value: Schema.Unknown
83
+ })
84
+ });
85
+ // =============================================================================
86
+ // Base Part
87
+ // =============================================================================
88
+ /**
89
+ * Unique identifier for Part instances.
90
+ *
91
+ * @since 1.0.0
92
+ * @category Type Ids
93
+ */
94
+ export const PartTypeId = "~effect/ai/Prompt/Part";
95
+ /**
96
+ * Type guard to check if a value is a Part.
97
+ *
98
+ * @since 1.0.0
99
+ * @category Guards
100
+ */
101
+ export const isPart = u => Predicate.hasProperty(u, PartTypeId);
102
+ /**
103
+ * Creates a new content part of the specified type.
104
+ *
105
+ * @example
106
+ * ```ts
107
+ * import { Prompt } from "@effect/ai"
108
+ *
109
+ * const textPart = Prompt.makePart("text", {
110
+ * text: "Hello, world!"
111
+ * })
112
+ *
113
+ * const filePart = Prompt.makePart("file", {
114
+ * mediaType: "image/png",
115
+ * fileName: "screenshot.png",
116
+ * data: new Uint8Array([1, 2, 3])
117
+ * })
118
+ * ```
119
+ *
120
+ * @since 1.0.0
121
+ * @category Constructors
122
+ */
123
+ export const makePart = (
124
+ /**
125
+ * The type of part to create.
126
+ */
127
+ type,
128
+ /**
129
+ * Parameters specific to the part type being created.
130
+ */
131
+ params) => ({
132
+ ...params,
133
+ [PartTypeId]: PartTypeId,
134
+ type,
135
+ options: params.options ?? {}
136
+ });
137
+ /**
138
+ * Schema for validation and encoding of text parts.
139
+ *
140
+ * @since 1.0.0
141
+ * @category Schemas
142
+ */
143
+ export const TextPart = /*#__PURE__*/Schema.Struct({
144
+ type: Schema.Literal("text"),
145
+ text: Schema.String,
146
+ options: Schema.optionalWith(ProviderOptions, {
147
+ default: constEmptyObject
148
+ })
149
+ }).pipe(/*#__PURE__*/Schema.attachPropertySignature(PartTypeId, PartTypeId), /*#__PURE__*/Schema.annotations({
150
+ identifier: "TextPart"
151
+ }));
152
+ /**
153
+ * Schema for validation and encoding of reasoning parts.
154
+ *
155
+ * @since 1.0.0
156
+ * @category Schemas
157
+ */
158
+ export const ReasoningPart = /*#__PURE__*/Schema.Struct({
159
+ type: Schema.Literal("reasoning"),
160
+ text: Schema.String,
161
+ options: Schema.optionalWith(ProviderOptions, {
162
+ default: constEmptyObject
163
+ })
164
+ }).pipe(/*#__PURE__*/Schema.attachPropertySignature(PartTypeId, PartTypeId), /*#__PURE__*/Schema.annotations({
165
+ identifier: "ReasoningPart"
166
+ }));
167
+ /**
168
+ * Schema for validation and encoding of file parts.
169
+ *
170
+ * @since 1.0.0
171
+ * @category Schemas
172
+ */
173
+ export const FilePart = /*#__PURE__*/Schema.Struct({
174
+ type: Schema.Literal("file"),
175
+ mediaType: Schema.String,
176
+ fileName: Schema.optional(Schema.String),
177
+ data: Schema.Union(Schema.String, Schema.Uint8ArrayFromSelf, Schema.URLFromSelf),
178
+ options: Schema.optionalWith(ProviderOptions, {
179
+ default: constEmptyObject
180
+ })
181
+ }).pipe(/*#__PURE__*/Schema.attachPropertySignature(PartTypeId, PartTypeId), /*#__PURE__*/Schema.annotations({
182
+ identifier: "FilePart"
183
+ }));
184
+ /**
185
+ * Schema for validation and encoding of tool call parts.
186
+ *
187
+ * @since 1.0.0
188
+ * @category Schemas
189
+ */
190
+ export const ToolCallPart = /*#__PURE__*/Schema.Struct({
191
+ type: Schema.Literal("tool-call"),
192
+ id: Schema.String,
193
+ name: Schema.String,
194
+ params: Schema.Unknown,
195
+ providerExecuted: Schema.optionalWith(Schema.Boolean, {
196
+ default: constFalse
197
+ }),
198
+ options: Schema.optionalWith(ProviderOptions, {
199
+ default: constEmptyObject
200
+ })
201
+ }).pipe(/*#__PURE__*/Schema.attachPropertySignature(PartTypeId, PartTypeId), /*#__PURE__*/Schema.annotations({
202
+ identifier: "ToolCallPart"
203
+ }));
204
+ /**
205
+ * Schema for validation and encoding of tool result parts.
206
+ *
207
+ * @since 1.0.0
208
+ * @category Schemas
209
+ */
210
+ export const ToolResultPart = /*#__PURE__*/Schema.Struct({
211
+ type: Schema.Literal("tool-result"),
212
+ id: Schema.String,
213
+ name: Schema.String,
214
+ result: Schema.Unknown,
215
+ options: Schema.optionalWith(ProviderOptions, {
216
+ default: constEmptyObject
217
+ })
218
+ }).pipe(/*#__PURE__*/Schema.attachPropertySignature(PartTypeId, PartTypeId), /*#__PURE__*/Schema.annotations({
219
+ identifier: "ToolResultPart"
220
+ }));
221
+ // =============================================================================
222
+ // Base Message
223
+ // =============================================================================
224
+ /**
225
+ * Unique identifier for Message instances.
226
+ *
227
+ * @since 1.0.0
228
+ * @category Type Ids
229
+ */
230
+ export const MessageTypeId = "~effect/ai/Prompt/Message";
231
+ /**
232
+ * Type guard to check if a value is a Message.
233
+ *
234
+ * @since 1.0.0
235
+ * @category Guards
236
+ */
237
+ export const isMessage = u => Predicate.hasProperty(u, MessageTypeId);
238
+ /**
239
+ * Creates a new message with the specified role.
240
+ *
241
+ * @example
242
+ * ```ts
243
+ * import { Prompt } from "@effect/ai"
244
+ *
245
+ * const textPart = Prompt.makePart("text", {
246
+ * text: "Hello, world!"
247
+ * })
248
+ *
249
+ * const filePart = Prompt.makeMessage("user", {
250
+ * content: [textPart]
251
+ * })
252
+ * ```
253
+ *
254
+ * @since 1.0.0
255
+ * @category Constructors
256
+ */
257
+ export const makeMessage = (role, params) => ({
258
+ ...params,
259
+ [MessageTypeId]: MessageTypeId,
260
+ role,
261
+ options: params.options ?? {}
262
+ });
263
+ /**
264
+ * Schema for validation and encoding of system messages.
265
+ *
266
+ * @since 1.0.0
267
+ * @category Schemas
268
+ */
269
+ export const SystemMessage = /*#__PURE__*/Schema.Struct({
270
+ role: Schema.Literal("system"),
271
+ content: Schema.String,
272
+ options: Schema.optionalWith(ProviderOptions, {
273
+ default: constEmptyObject
274
+ })
275
+ }).pipe(/*#__PURE__*/Schema.attachPropertySignature(MessageTypeId, MessageTypeId), /*#__PURE__*/Schema.annotations({
276
+ identifier: "SystemMessage"
277
+ }));
278
+ /**
279
+ * Schema for validation and encoding of user messages.
280
+ *
281
+ * @since 1.0.0
282
+ * @category Schemas
283
+ */
284
+ export const UserMessage = /*#__PURE__*/Schema.Struct({
285
+ role: Schema.Literal("user"),
286
+ content: Schema.Array(Schema.Union(TextPart, FilePart)),
287
+ options: Schema.optionalWith(ProviderOptions, {
288
+ default: constEmptyObject
289
+ })
290
+ }).pipe(/*#__PURE__*/Schema.attachPropertySignature(MessageTypeId, MessageTypeId), /*#__PURE__*/Schema.annotations({
291
+ identifier: "UserMessage"
292
+ }));
293
+ /**
294
+ * Schema for validation and encoding of assistant messages.
295
+ *
296
+ * @since 1.0.0
297
+ * @category Schemas
298
+ */
299
+ export const AssistantMessage = /*#__PURE__*/Schema.Struct({
300
+ role: Schema.Literal("assistant"),
301
+ content: Schema.Array(Schema.Union(TextPart, FilePart, ReasoningPart, ToolCallPart, ToolResultPart)),
302
+ options: Schema.optionalWith(ProviderOptions, {
303
+ default: constEmptyObject
304
+ })
305
+ }).pipe(/*#__PURE__*/Schema.attachPropertySignature(MessageTypeId, MessageTypeId), /*#__PURE__*/Schema.annotations({
306
+ identifier: "AssistantMessage"
307
+ }));
308
+ /**
309
+ * Schema for validation and encoding of tool messages.
310
+ *
311
+ * @since 1.0.0
312
+ * @category Schemas
313
+ */
314
+ export const ToolMessage = /*#__PURE__*/Schema.Struct({
315
+ role: Schema.Literal("tool"),
316
+ content: Schema.Array(ToolResultPart),
317
+ options: Schema.optionalWith(ProviderOptions, {
318
+ default: constEmptyObject
319
+ })
320
+ }).pipe(/*#__PURE__*/Schema.attachPropertySignature(MessageTypeId, MessageTypeId), /*#__PURE__*/Schema.annotations({
321
+ identifier: "ToolMessage"
322
+ }));
323
+ /**
324
+ * Schema for validation and encoding of messages.
325
+ *
326
+ * @since 1.0.0
327
+ * @category Schemas
328
+ */
329
+ export const Message = /*#__PURE__*/Schema.Union(SystemMessage, UserMessage, AssistantMessage, ToolMessage);
330
+ // =============================================================================
331
+ // Prompt
332
+ // =============================================================================
333
+ /**
334
+ * Unique identifier for Prompt instances.
335
+ *
336
+ * @since 1.0.0
337
+ * @category Type Ids
338
+ */
339
+ export const TypeId = "~@effect/ai/Prompt";
340
+ /**
341
+ * Type guard to check if a value is a Prompt.
342
+ *
343
+ * @since 1.0.0
344
+ * @category Guards
345
+ */
346
+ export const isPrompt = u => Predicate.hasProperty(u, TypeId);
347
+ /**
348
+ * Schema for validation and encoding of prompts.
349
+ *
350
+ * @since 1.0.0
351
+ * @category Schemas
352
+ */
353
+ export const Prompt = /*#__PURE__*/Schema.Struct({
354
+ content: Schema.Array(Message)
355
+ }).pipe(/*#__PURE__*/Schema.attachPropertySignature(TypeId, TypeId), /*#__PURE__*/Schema.annotations({
356
+ identifier: "Prompt"
357
+ }));
358
+ /**
359
+ * Schema for parsing a Prompt from JSON strings.
360
+ *
361
+ * @since 1.0.0
362
+ * @category Schemas
363
+ */
364
+ export const FromJson = /*#__PURE__*/Schema.parseJson(Prompt);
365
+ const makePrompt = content => ({
366
+ [TypeId]: TypeId,
367
+ content
368
+ });
369
+ const decodeMessagesSync = /*#__PURE__*/Schema.decodeSync(/*#__PURE__*/Schema.Array(Message));
370
+ /**
371
+ * An empty prompt with no messages.
372
+ *
373
+ * @example
374
+ * ```ts
375
+ * import { Prompt } from "@effect/ai"
376
+ *
377
+ * const emptyPrompt = Prompt.empty
378
+ * console.log(emptyPrompt.content) // []
379
+ * ```
380
+ *
381
+ * @since 1.0.0
382
+ * @category Constructors
383
+ */
384
+ export const empty = /*#__PURE__*/makePrompt([]);
385
+ /**
386
+ * Creates a Prompt from an input.
387
+ *
388
+ * This is the primary constructor for creating prompts, supporting multiple
389
+ * input formats for convenience and flexibility.
390
+ *
391
+ * @example
392
+ * ```ts
393
+ * import { Prompt } from "@effect/ai"
394
+ *
395
+ * // From string - creates a user message
396
+ * const textPrompt = Prompt.make("Hello, how are you?")
397
+ *
398
+ * // From messages array
399
+ * const structuredPrompt = Prompt.make([
400
+ * { role: "system", content: "You are a helpful assistant." },
401
+ * { role: "user", content: [{ type: "text", text: "Hi!" }] }
402
+ * ])
403
+ *
404
+ * // From existing prompt
405
+ * declare const existingPrompt: Prompt.Prompt
406
+ * const copiedPrompt = Prompt.make(existingPrompt)
407
+ * ```
408
+ *
409
+ * @since 1.0.0
410
+ * @category Constructors
411
+ */
412
+ export const make = input => {
413
+ if (Predicate.isString(input)) {
414
+ const part = makePart("text", {
415
+ text: input
416
+ });
417
+ const message = makeMessage("user", {
418
+ content: [part]
419
+ });
420
+ return makePrompt([message]);
421
+ }
422
+ if (Predicate.isIterable(input)) {
423
+ return makePrompt(decodeMessagesSync(Array.from(input), {
424
+ errors: "all"
425
+ }));
426
+ }
427
+ return input;
428
+ };
429
+ /**
430
+ * Creates a Prompt from an array of messages.
431
+ *
432
+ * @example
433
+ * ```ts
434
+ * import { Prompt } from "@effect/ai"
435
+ *
436
+ * const messages: ReadonlyArray<Prompt.Message> = [
437
+ * Prompt.makeMessage("system", {
438
+ * content: "You are a coding assistant."
439
+ * }),
440
+ * Prompt.makeMessage("user", {
441
+ * content: [Prompt.makePart("text", { text: "Help me with TypeScript" })]
442
+ * })
443
+ * ]
444
+ *
445
+ * const prompt = Prompt.fromMessages(messages)
446
+ * ```
447
+ *
448
+ * @since 1.0.0
449
+ * @category Constructors
450
+ */
451
+ export const fromMessages = messages => makePrompt(messages);
452
+ const VALID_RESPONSE_PART_MAP = {
453
+ "response-metadata": false,
454
+ "text": true,
455
+ "text-start": false,
456
+ "text-delta": true,
457
+ "text-end": false,
458
+ "reasoning": true,
459
+ "reasoning-start": false,
460
+ "reasoning-delta": true,
461
+ "reasoning-end": false,
462
+ "file": false,
463
+ "source": false,
464
+ "tool-params-start": false,
465
+ "tool-params-delta": false,
466
+ "tool-params-end": false,
467
+ "tool-call": true,
468
+ "tool-result": true,
469
+ "finish": false,
470
+ "error": false
471
+ };
472
+ const isValidPart = part => {
473
+ return VALID_RESPONSE_PART_MAP[part.type];
474
+ };
475
+ /**
476
+ * Creates a Prompt from the response parts of a previous interaction with a
477
+ * large language model.
478
+ *
479
+ * Converts streaming or non-streaming AI response parts into a structured
480
+ * prompt, typically for use in conversation history or further processing.
481
+ *
482
+ * @example
483
+ * ```ts
484
+ * import { Prompt, Response } from "@effect/ai"
485
+ *
486
+ * const responseParts: ReadonlyArray<Response.AnyPart> = [
487
+ * Response.makePart("text", {
488
+ * text: "Hello there!"
489
+ * }),
490
+ * Response.makePart("tool-call", {
491
+ * id: "call_1",
492
+ * name: "get_time",
493
+ * params: {},
494
+ * providerExecuted: false
495
+ * }),
496
+ * Response.makePart("tool-result", {
497
+ * id: "call_1",
498
+ * name: "get_time",
499
+ * result: "10:30 AM",
500
+ * encodedResult: "10:30 AM",
501
+ * providerExecuted: false
502
+ * })
503
+ * ]
504
+ *
505
+ * const prompt = Prompt.fromResponseParts(responseParts)
506
+ * // Creates an assistant message with the response content
507
+ * ```
508
+ *
509
+ * @since 1.0.0
510
+ * @category Constructors
511
+ */
512
+ export const fromResponseParts = parts => {
513
+ if (parts.length === 0) {
514
+ return empty;
515
+ }
516
+ const content = [];
517
+ const textDeltas = [];
518
+ function flushTextDeltas() {
519
+ if (textDeltas.length > 0) {
520
+ const text = textDeltas.join("");
521
+ if (text.length > 0) {
522
+ content.push(makePart("text", {
523
+ text
524
+ }));
525
+ }
526
+ textDeltas.length = 0;
527
+ }
528
+ }
529
+ const reasoningDeltas = [];
530
+ function flushReasoningDeltas() {
531
+ if (reasoningDeltas.length > 0) {
532
+ const text = reasoningDeltas.join("");
533
+ if (text.length > 0) {
534
+ content.push(makePart("reasoning", {
535
+ text
536
+ }));
537
+ }
538
+ reasoningDeltas.length = 0;
539
+ }
540
+ }
541
+ function flushDeltas() {
542
+ flushTextDeltas();
543
+ flushReasoningDeltas();
544
+ }
545
+ for (const part of parts) {
546
+ if (isValidPart(part)) {
547
+ switch (part.type) {
548
+ case "text":
549
+ {
550
+ flushDeltas();
551
+ content.push(makePart("text", {
552
+ text: part.text
553
+ }));
554
+ break;
555
+ }
556
+ case "text-delta":
557
+ {
558
+ flushReasoningDeltas();
559
+ textDeltas.push(part.delta);
560
+ break;
561
+ }
562
+ case "reasoning":
563
+ {
564
+ flushDeltas();
565
+ content.push(makePart("reasoning", {
566
+ text: part.text
567
+ }));
568
+ break;
569
+ }
570
+ case "reasoning-delta":
571
+ {
572
+ flushTextDeltas();
573
+ reasoningDeltas.push(part.delta);
574
+ break;
575
+ }
576
+ case "tool-call":
577
+ {
578
+ flushDeltas();
579
+ content.push(makePart("tool-call", {
580
+ id: part.id,
581
+ name: part.providerName ?? part.name,
582
+ params: part.params,
583
+ providerExecuted: part.providerExecuted ?? false
584
+ }));
585
+ break;
586
+ }
587
+ case "tool-result":
588
+ {
589
+ flushDeltas();
590
+ content.push(makePart("tool-result", {
591
+ id: part.id,
592
+ name: part.providerName ?? part.name,
593
+ result: part.encodedResult
594
+ }));
595
+ break;
596
+ }
597
+ }
598
+ }
599
+ }
600
+ flushDeltas();
601
+ const message = makeMessage("assistant", {
602
+ content
603
+ });
604
+ return makePrompt([message]);
605
+ };
606
+ // =============================================================================
607
+ // Merging Prompts
608
+ // =============================================================================
609
+ /**
610
+ * Merges two prompts by concatenating their messages.
611
+ *
612
+ * Creates a new prompt containing all messages from both prompts, maintaining
613
+ * the order of messages within each prompt.
614
+ *
615
+ * @example
616
+ * ```ts
617
+ * import { Prompt } from "@effect/ai"
618
+ *
619
+ * const systemPrompt = Prompt.make([{
620
+ * role: "system",
621
+ * content: "You are a helpful assistant."
622
+ * }])
623
+ *
624
+ * const userPrompt = Prompt.make("Hello, world!")
625
+ *
626
+ * const merged = Prompt.merge(systemPrompt, userPrompt)
627
+ * ```
628
+ *
629
+ * @since 1.0.0
630
+ * @category Combinators
631
+ */
632
+ export const merge = /*#__PURE__*/dual(2, (self, other) => fromMessages([...self.content, ...other.content]));
633
+ //# sourceMappingURL=Prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Prompt.js","names":["constFalse","dual","Predicate","Schema","constEmptyObject","ProviderOptions","Record","key","String","value","Unknown","PartTypeId","isPart","u","hasProperty","makePart","type","params","options","TextPart","Struct","Literal","text","optionalWith","default","pipe","attachPropertySignature","annotations","identifier","ReasoningPart","FilePart","mediaType","fileName","optional","data","Union","Uint8ArrayFromSelf","URLFromSelf","ToolCallPart","id","name","providerExecuted","Boolean","ToolResultPart","result","MessageTypeId","isMessage","makeMessage","role","SystemMessage","content","UserMessage","Array","AssistantMessage","ToolMessage","Message","TypeId","isPrompt","Prompt","FromJson","parseJson","makePrompt","decodeMessagesSync","decodeSync","empty","make","input","isString","part","message","isIterable","from","errors","fromMessages","messages","VALID_RESPONSE_PART_MAP","isValidPart","fromResponseParts","parts","length","textDeltas","flushTextDeltas","join","push","reasoningDeltas","flushReasoningDeltas","flushDeltas","delta","providerName","encodedResult","merge","self","other"],"sources":["../../src/Prompt.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}