@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,176 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.addSpanAttributes = exports.addGenAIAnnotations = exports.CurrentSpanTransformer = void 0;
7
+ var Context = _interopRequireWildcard(require("effect/Context"));
8
+ var _Function = require("effect/Function");
9
+ var Predicate = _interopRequireWildcard(require("effect/Predicate"));
10
+ var String = _interopRequireWildcard(require("effect/String"));
11
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
+ /**
13
+ * The `Telemetry` module provides OpenTelemetry integration for operations
14
+ * performed against a large language model provider by defining telemetry
15
+ * attributes and utilities that follow the OpenTelemetry GenAI semantic
16
+ * conventions.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * import { Telemetry } from "@effect/ai"
21
+ * import { Effect } from "effect"
22
+ *
23
+ * // Add telemetry attributes to a span
24
+ * const addTelemetry = Effect.gen(function* () {
25
+ * const span = yield* Effect.currentSpan
26
+ *
27
+ * Telemetry.addGenAIAnnotations(span, {
28
+ * system: "openai",
29
+ * operation: { name: "chat" },
30
+ * request: {
31
+ * model: "gpt-4",
32
+ * temperature: 0.7,
33
+ * maxTokens: 1000
34
+ * },
35
+ * usage: {
36
+ * inputTokens: 100,
37
+ * outputTokens: 50
38
+ * }
39
+ * })
40
+ * })
41
+ * ```
42
+ *
43
+ * @since 1.0.0
44
+ */
45
+
46
+ /**
47
+ * Creates a function to add attributes to a span with a given prefix and key transformation.
48
+ *
49
+ * This utility function is used internally to create specialized functions for adding
50
+ * different types of telemetry attributes to OpenTelemetry spans.
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * import { Telemetry } from "@effect/ai"
55
+ * import { String, Tracer } from "effect"
56
+ *
57
+ * const addCustomAttributes = Telemetry.addSpanAttributes(
58
+ * "custom.ai",
59
+ * String.camelToSnake
60
+ * )
61
+ *
62
+ * // Usage with a span
63
+ * declare const span: Tracer.Span
64
+ * addCustomAttributes(span, {
65
+ * modelName: "gpt-4",
66
+ * maxTokens: 1000
67
+ * })
68
+ * // Results in attributes: "custom.ai.model_name" and "custom.ai.max_tokens"
69
+ * ```
70
+ *
71
+ * @since 1.0.0
72
+ * @category Utilities
73
+ */
74
+ const addSpanAttributes = (
75
+ /**
76
+ * The prefix to add to all attribute keys.
77
+ */
78
+ keyPrefix,
79
+ /**
80
+ * Function to transform attribute keys (e.g., camelCase to snake_case).
81
+ */
82
+ transformKey) => (
83
+ /**
84
+ * The OpenTelemetry span to add attributes to.
85
+ */
86
+ span,
87
+ /**
88
+ * The attributes to add to the span.
89
+ */
90
+ attributes) => {
91
+ for (const [key, value] of Object.entries(attributes)) {
92
+ if (Predicate.isNotNullable(value)) {
93
+ span.attribute(`${keyPrefix}.${transformKey(key)}`, value);
94
+ }
95
+ }
96
+ };
97
+ exports.addSpanAttributes = addSpanAttributes;
98
+ const addSpanBaseAttributes = /*#__PURE__*/addSpanAttributes("gen_ai", String.camelToSnake);
99
+ const addSpanOperationAttributes = /*#__PURE__*/addSpanAttributes("gen_ai.operation", String.camelToSnake);
100
+ const addSpanRequestAttributes = /*#__PURE__*/addSpanAttributes("gen_ai.request", String.camelToSnake);
101
+ const addSpanResponseAttributes = /*#__PURE__*/addSpanAttributes("gen_ai.response", String.camelToSnake);
102
+ const addSpanTokenAttributes = /*#__PURE__*/addSpanAttributes("gen_ai.token", String.camelToSnake);
103
+ const addSpanUsageAttributes = /*#__PURE__*/addSpanAttributes("gen_ai.usage", String.camelToSnake);
104
+ /**
105
+ * Applies GenAI telemetry attributes to an OpenTelemetry span.
106
+ *
107
+ * This function adds standardized GenAI attributes to a span following OpenTelemetry
108
+ * semantic conventions. It supports both curried and direct application patterns.
109
+ *
110
+ * **Note**: This function mutates the provided span in-place.
111
+ *
112
+ * @example
113
+ * ```ts
114
+ * import { Telemetry } from "@effect/ai"
115
+ * import { Effect } from "effect"
116
+ *
117
+ * const directUsage = Effect.gen(function* () {
118
+ * const span = yield* Effect.currentSpan
119
+ *
120
+ * Telemetry.addGenAIAnnotations(span, {
121
+ * system: "openai",
122
+ * request: { model: "gpt-4", temperature: 0.7 },
123
+ * usage: { inputTokens: 100, outputTokens: 50 }
124
+ * })
125
+ * })
126
+ * ```
127
+ *
128
+ * @since 1.0.0
129
+ * @category Utilities
130
+ */
131
+ const addGenAIAnnotations = exports.addGenAIAnnotations = /*#__PURE__*/(0, _Function.dual)(2, (span, options) => {
132
+ addSpanBaseAttributes(span, {
133
+ system: options.system
134
+ });
135
+ if (Predicate.isNotNullable(options.operation)) addSpanOperationAttributes(span, options.operation);
136
+ if (Predicate.isNotNullable(options.request)) addSpanRequestAttributes(span, options.request);
137
+ if (Predicate.isNotNullable(options.response)) addSpanResponseAttributes(span, options.response);
138
+ if (Predicate.isNotNullable(options.token)) addSpanTokenAttributes(span, options.token);
139
+ if (Predicate.isNotNullable(options.usage)) addSpanUsageAttributes(span, options.usage);
140
+ });
141
+ /**
142
+ * Context tag for providing a span transformer to large langauge model
143
+ * operations.
144
+ *
145
+ * The CurrentSpanTransformer allows you to inject custom span transformation
146
+ * logic into AI operations, enabling application-specific telemetry and
147
+ * observability patterns.
148
+ *
149
+ * @example
150
+ * ```ts
151
+ * import { Telemetry } from "@effect/ai"
152
+ * import { Context, Effect } from "effect"
153
+ *
154
+ * // Create a custom span transformer
155
+ * const loggingTransformer: Telemetry.SpanTransformer = (options) => {
156
+ * console.log(`AI request completed: ${options.model}`)
157
+ * options.response.forEach((part, index) => {
158
+ * console.log(`Part ${index}: ${part.type}`)
159
+ * })
160
+ * }
161
+ *
162
+ * // Provide the transformer to your AI operations
163
+ * const program = myAIOperation.pipe(
164
+ * Effect.provideService(
165
+ * Telemetry.CurrentSpanTransformer,
166
+ * Telemetry.CurrentSpanTransformer.of(loggingTransformer)
167
+ * )
168
+ * )
169
+ * ```
170
+ *
171
+ * @since 1.0.0
172
+ * @category Context
173
+ */
174
+ class CurrentSpanTransformer extends /*#__PURE__*/Context.Tag("@effect/ai/Telemetry/CurrentSpanTransformer")() {}
175
+ exports.CurrentSpanTransformer = CurrentSpanTransformer;
176
+ //# sourceMappingURL=Telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Telemetry.js","names":["Context","_interopRequireWildcard","require","_Function","Predicate","String","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","addSpanAttributes","keyPrefix","transformKey","span","attributes","key","value","entries","isNotNullable","attribute","exports","addSpanBaseAttributes","camelToSnake","addSpanOperationAttributes","addSpanRequestAttributes","addSpanResponseAttributes","addSpanTokenAttributes","addSpanUsageAttributes","addGenAIAnnotations","dual","options","system","operation","request","response","token","usage","CurrentSpanTransformer","Tag"],"sources":["../../src/Telemetry.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -7,45 +7,124 @@ exports.make = exports.Tokenizer = void 0;
7
7
  var Context = _interopRequireWildcard(require("effect/Context"));
8
8
  var Effect = _interopRequireWildcard(require("effect/Effect"));
9
9
  var Predicate = _interopRequireWildcard(require("effect/Predicate"));
10
- var AiInput = _interopRequireWildcard(require("./AiInput.js"));
10
+ var Prompt = _interopRequireWildcard(require("./Prompt.js"));
11
11
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
12
  /**
13
+ * The `Tokenizer` module provides tokenization and text truncation capabilities
14
+ * for large language model text processing workflows.
15
+ *
16
+ * This module offers services for converting text into tokens and truncating
17
+ * prompts based on token limits, essential for managing context length
18
+ * constraints in large language models.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * import { Tokenizer, Prompt } from "@effect/ai"
23
+ * import { Effect } from "effect"
24
+ *
25
+ * const tokenizeText = Effect.gen(function* () {
26
+ * const tokenizer = yield* Tokenizer.Tokenizer
27
+ * const tokens = yield* tokenizer.tokenize("Hello, world!")
28
+ * console.log(`Token count: ${tokens.length}`)
29
+ * return tokens
30
+ * })
31
+ * ```
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * import { Tokenizer, Prompt } from "@effect/ai"
36
+ * import { Effect } from "effect"
37
+ *
38
+ * // Truncate a prompt to fit within token limits
39
+ * const truncatePrompt = Effect.gen(function* () {
40
+ * const tokenizer = yield* Tokenizer.Tokenizer
41
+ * const longPrompt = "This is a very long prompt..."
42
+ * const truncated = yield* tokenizer.truncate(longPrompt, 100)
43
+ * return truncated
44
+ * })
45
+ * ```
46
+ *
13
47
  * @since 1.0.0
14
48
  */
15
49
 
16
50
  /**
51
+ * The `Tokenizer` service tag for dependency injection.
52
+ *
53
+ * This tag provides access to tokenization functionality throughout your
54
+ * application, enabling token counting and prompt truncation capabilities.
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * import { Tokenizer } from "@effect/ai"
59
+ * import { Effect } from "effect"
60
+ *
61
+ * const useTokenizer = Effect.gen(function* () {
62
+ * const tokenizer = yield* Tokenizer.Tokenizer
63
+ * const tokens = yield* tokenizer.tokenize("Hello, world!")
64
+ * return tokens.length
65
+ * })
66
+ * ```
67
+ *
17
68
  * @since 1.0.0
18
- * @category Tags
69
+ * @category Context
19
70
  */
20
71
  class Tokenizer extends /*#__PURE__*/Context.Tag("@effect/ai/Tokenizer")() {}
21
72
  /**
73
+ * Creates a Tokenizer service implementation from tokenization options.
74
+ *
75
+ * This function constructs a complete Tokenizer service by providing a
76
+ * tokenization function. The service handles both tokenization and
77
+ * truncation operations using the provided tokenizer.
78
+ *
79
+ * @example
80
+ * ```ts
81
+ * import { Tokenizer, Prompt } from "@effect/ai"
82
+ * import { Effect } from "effect"
83
+ *
84
+ * // Simple word-based tokenizer
85
+ * const wordTokenizer = Tokenizer.make({
86
+ * tokenize: (prompt) =>
87
+ * Effect.succeed(
88
+ * prompt.content
89
+ * .flatMap(msg =>
90
+ * typeof msg.content === "string"
91
+ * ? msg.content.split(' ')
92
+ * : msg.content.flatMap(part =>
93
+ * part.type === "text" ? part.text.split(' ') : []
94
+ * )
95
+ * )
96
+ * .map((_, index) => index)
97
+ * )
98
+ * })
99
+ * ```
100
+ *
22
101
  * @since 1.0.0
23
102
  * @category Constructors
24
103
  */
25
104
  exports.Tokenizer = Tokenizer;
26
105
  const make = options => Tokenizer.of({
27
106
  tokenize(input) {
28
- return options.tokenize(AiInput.make(input));
107
+ return options.tokenize(Prompt.make(input));
29
108
  },
30
109
  truncate(input, tokens) {
31
- return truncate(AiInput.make(input), options.tokenize, tokens);
110
+ return truncate(Prompt.make(input), options.tokenize, tokens);
32
111
  }
33
112
  });
34
113
  exports.make = make;
35
114
  const truncate = (self, tokenize, maxTokens) => Effect.suspend(() => {
36
115
  let count = 0;
37
- let inputMessages = self.messages;
116
+ let inputMessages = self.content;
38
117
  let outputMessages = [];
39
118
  const loop = Effect.suspend(() => {
40
119
  const message = inputMessages[inputMessages.length - 1];
41
120
  if (Predicate.isUndefined(message)) {
42
- return Effect.succeed(AiInput.make(outputMessages));
121
+ return Effect.succeed(Prompt.fromMessages(outputMessages));
43
122
  }
44
123
  inputMessages = inputMessages.slice(0, inputMessages.length - 1);
45
- return Effect.flatMap(tokenize(AiInput.make(message)), tokens => {
124
+ return Effect.flatMap(tokenize(Prompt.fromMessages([message])), tokens => {
46
125
  count += tokens.length;
47
126
  if (count > maxTokens) {
48
- return Effect.succeed(AiInput.make(outputMessages));
127
+ return Effect.succeed(Prompt.fromMessages(outputMessages));
49
128
  }
50
129
  outputMessages = [message, ...outputMessages];
51
130
  return loop;
@@ -1 +1 @@
1
- {"version":3,"file":"Tokenizer.js","names":["Context","_interopRequireWildcard","require","Effect","Predicate","AiInput","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Tokenizer","Tag","exports","make","options","of","tokenize","input","truncate","tokens","self","maxTokens","suspend","count","inputMessages","messages","outputMessages","loop","message","length","isUndefined","succeed","slice","flatMap"],"sources":["../../src/Tokenizer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Tokenizer.js","names":["Context","_interopRequireWildcard","require","Effect","Predicate","Prompt","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Tokenizer","Tag","exports","make","options","of","tokenize","input","truncate","tokens","self","maxTokens","suspend","count","inputMessages","content","outputMessages","loop","message","length","isUndefined","succeed","fromMessages","slice","flatMap"],"sources":["../../src/Tokenizer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}