@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.
- package/Chat/package.json +6 -0
- package/EmbeddingModel/package.json +6 -0
- package/IdGenerator/package.json +6 -0
- package/LanguageModel/package.json +6 -0
- package/Model/package.json +6 -0
- package/Prompt/package.json +6 -0
- package/Response/package.json +6 -0
- package/Telemetry/package.json +6 -0
- package/Tool/package.json +6 -0
- package/Toolkit/package.json +6 -0
- package/dist/cjs/AiError.js +575 -11
- package/dist/cjs/AiError.js.map +1 -1
- package/dist/cjs/Chat.js +302 -0
- package/dist/cjs/Chat.js.map +1 -0
- package/dist/cjs/EmbeddingModel.js +184 -0
- package/dist/cjs/EmbeddingModel.js.map +1 -0
- package/dist/cjs/IdGenerator.js +255 -0
- package/dist/cjs/IdGenerator.js.map +1 -0
- package/dist/cjs/LanguageModel.js +584 -0
- package/dist/cjs/LanguageModel.js.map +1 -0
- package/dist/cjs/McpServer.js +12 -4
- package/dist/cjs/McpServer.js.map +1 -1
- package/dist/cjs/Model.js +118 -0
- package/dist/cjs/Model.js.map +1 -0
- package/dist/cjs/Prompt.js +649 -0
- package/dist/cjs/Prompt.js.map +1 -0
- package/dist/cjs/Response.js +635 -0
- package/dist/cjs/Response.js.map +1 -0
- package/dist/cjs/Telemetry.js +176 -0
- package/dist/cjs/Telemetry.js.map +1 -0
- package/dist/cjs/Tokenizer.js +87 -8
- package/dist/cjs/Tokenizer.js.map +1 -1
- package/dist/cjs/Tool.js +556 -0
- package/dist/cjs/Tool.js.map +1 -0
- package/dist/cjs/Toolkit.js +279 -0
- package/dist/cjs/Toolkit.js.map +1 -0
- package/dist/cjs/index.js +21 -19
- package/dist/dts/AiError.d.ts +577 -9
- package/dist/dts/AiError.d.ts.map +1 -1
- package/dist/dts/Chat.d.ts +356 -0
- package/dist/dts/Chat.d.ts.map +1 -0
- package/dist/dts/EmbeddingModel.d.ts +153 -0
- package/dist/dts/EmbeddingModel.d.ts.map +1 -0
- package/dist/dts/IdGenerator.d.ts +272 -0
- package/dist/dts/IdGenerator.d.ts.map +1 -0
- package/dist/dts/LanguageModel.d.ts +458 -0
- package/dist/dts/LanguageModel.d.ts.map +1 -0
- package/dist/dts/McpSchema.d.ts +25 -25
- package/dist/dts/McpServer.d.ts +6 -4
- package/dist/dts/McpServer.d.ts.map +1 -1
- package/dist/dts/Model.d.ts +124 -0
- package/dist/dts/Model.d.ts.map +1 -0
- package/dist/dts/Prompt.d.ts +1119 -0
- package/dist/dts/Prompt.d.ts.map +1 -0
- package/dist/dts/Response.d.ts +1519 -0
- package/dist/dts/Response.d.ts.map +1 -0
- package/dist/dts/Telemetry.d.ts +520 -0
- package/dist/dts/Telemetry.d.ts.map +1 -0
- package/dist/dts/Tokenizer.d.ts +131 -13
- package/dist/dts/Tokenizer.d.ts.map +1 -1
- package/dist/dts/Tool.d.ts +876 -0
- package/dist/dts/Tool.d.ts.map +1 -0
- package/dist/dts/Toolkit.d.ts +310 -0
- package/dist/dts/Toolkit.d.ts.map +1 -0
- package/dist/dts/index.d.ts +498 -13
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/esm/AiError.js +570 -10
- package/dist/esm/AiError.js.map +1 -1
- package/dist/esm/Chat.js +291 -0
- package/dist/esm/Chat.js.map +1 -0
- package/dist/esm/EmbeddingModel.js +173 -0
- package/dist/esm/EmbeddingModel.js.map +1 -0
- package/dist/esm/IdGenerator.js +245 -0
- package/dist/esm/IdGenerator.js.map +1 -0
- package/dist/esm/LanguageModel.js +572 -0
- package/dist/esm/LanguageModel.js.map +1 -0
- package/dist/esm/McpServer.js +12 -4
- package/dist/esm/McpServer.js.map +1 -1
- package/dist/esm/Model.js +108 -0
- package/dist/esm/Model.js.map +1 -0
- package/dist/esm/Prompt.js +633 -0
- package/dist/esm/Prompt.js.map +1 -0
- package/dist/esm/Response.js +619 -0
- package/dist/esm/Response.js.map +1 -0
- package/dist/esm/Telemetry.js +166 -0
- package/dist/esm/Telemetry.js.map +1 -0
- package/dist/esm/Tokenizer.js +87 -8
- package/dist/esm/Tokenizer.js.map +1 -1
- package/dist/esm/Tool.js +534 -0
- package/dist/esm/Tool.js.map +1 -0
- package/dist/esm/Toolkit.js +269 -0
- package/dist/esm/Toolkit.js.map +1 -0
- package/dist/esm/index.js +498 -13
- package/dist/esm/index.js.map +1 -1
- package/package.json +76 -68
- package/src/AiError.ts +739 -9
- package/src/Chat.ts +546 -0
- package/src/EmbeddingModel.ts +311 -0
- package/src/IdGenerator.ts +320 -0
- package/src/LanguageModel.ts +1074 -0
- package/src/McpServer.ts +337 -194
- package/src/Model.ts +155 -0
- package/src/Prompt.ts +1616 -0
- package/src/Response.ts +2131 -0
- package/src/Telemetry.ts +655 -0
- package/src/Tokenizer.ts +145 -24
- package/src/Tool.ts +1267 -0
- package/src/Toolkit.ts +516 -0
- package/src/index.ts +499 -13
- package/AiChat/package.json +0 -6
- package/AiEmbeddingModel/package.json +0 -6
- package/AiInput/package.json +0 -6
- package/AiLanguageModel/package.json +0 -6
- package/AiModel/package.json +0 -6
- package/AiResponse/package.json +0 -6
- package/AiTelemetry/package.json +0 -6
- package/AiTool/package.json +0 -6
- package/AiToolkit/package.json +0 -6
- package/dist/cjs/AiChat.js +0 -122
- package/dist/cjs/AiChat.js.map +0 -1
- package/dist/cjs/AiEmbeddingModel.js +0 -109
- package/dist/cjs/AiEmbeddingModel.js.map +0 -1
- package/dist/cjs/AiInput.js +0 -458
- package/dist/cjs/AiInput.js.map +0 -1
- package/dist/cjs/AiLanguageModel.js +0 -351
- package/dist/cjs/AiLanguageModel.js.map +0 -1
- package/dist/cjs/AiModel.js +0 -37
- package/dist/cjs/AiModel.js.map +0 -1
- package/dist/cjs/AiResponse.js +0 -681
- package/dist/cjs/AiResponse.js.map +0 -1
- package/dist/cjs/AiTelemetry.js +0 -58
- package/dist/cjs/AiTelemetry.js.map +0 -1
- package/dist/cjs/AiTool.js +0 -150
- package/dist/cjs/AiTool.js.map +0 -1
- package/dist/cjs/AiToolkit.js +0 -157
- package/dist/cjs/AiToolkit.js.map +0 -1
- package/dist/cjs/internal/common.js +0 -21
- package/dist/cjs/internal/common.js.map +0 -1
- package/dist/dts/AiChat.d.ts +0 -101
- package/dist/dts/AiChat.d.ts.map +0 -1
- package/dist/dts/AiEmbeddingModel.d.ts +0 -65
- package/dist/dts/AiEmbeddingModel.d.ts.map +0 -1
- package/dist/dts/AiInput.d.ts +0 -590
- package/dist/dts/AiInput.d.ts.map +0 -1
- package/dist/dts/AiLanguageModel.d.ts +0 -302
- package/dist/dts/AiLanguageModel.d.ts.map +0 -1
- package/dist/dts/AiModel.d.ts +0 -25
- package/dist/dts/AiModel.d.ts.map +0 -1
- package/dist/dts/AiResponse.d.ts +0 -863
- package/dist/dts/AiResponse.d.ts.map +0 -1
- package/dist/dts/AiTelemetry.d.ts +0 -242
- package/dist/dts/AiTelemetry.d.ts.map +0 -1
- package/dist/dts/AiTool.d.ts +0 -334
- package/dist/dts/AiTool.d.ts.map +0 -1
- package/dist/dts/AiToolkit.d.ts +0 -96
- package/dist/dts/AiToolkit.d.ts.map +0 -1
- package/dist/dts/internal/common.d.ts +0 -2
- package/dist/dts/internal/common.d.ts.map +0 -1
- package/dist/esm/AiChat.js +0 -111
- package/dist/esm/AiChat.js.map +0 -1
- package/dist/esm/AiEmbeddingModel.js +0 -98
- package/dist/esm/AiEmbeddingModel.js.map +0 -1
- package/dist/esm/AiInput.js +0 -433
- package/dist/esm/AiInput.js.map +0 -1
- package/dist/esm/AiLanguageModel.js +0 -340
- package/dist/esm/AiLanguageModel.js.map +0 -1
- package/dist/esm/AiModel.js +0 -29
- package/dist/esm/AiModel.js.map +0 -1
- package/dist/esm/AiResponse.js +0 -657
- package/dist/esm/AiResponse.js.map +0 -1
- package/dist/esm/AiTelemetry.js +0 -48
- package/dist/esm/AiTelemetry.js.map +0 -1
- package/dist/esm/AiTool.js +0 -134
- package/dist/esm/AiTool.js.map +0 -1
- package/dist/esm/AiToolkit.js +0 -147
- package/dist/esm/AiToolkit.js.map +0 -1
- package/dist/esm/internal/common.js +0 -14
- package/dist/esm/internal/common.js.map +0 -1
- package/src/AiChat.ts +0 -251
- package/src/AiEmbeddingModel.ts +0 -169
- package/src/AiInput.ts +0 -602
- package/src/AiLanguageModel.ts +0 -685
- package/src/AiModel.ts +0 -53
- package/src/AiResponse.ts +0 -986
- package/src/AiTelemetry.ts +0 -333
- package/src/AiTool.ts +0 -579
- package/src/AiToolkit.ts +0 -265
- 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":[]}
|
package/dist/cjs/Tokenizer.js
CHANGED
|
@@ -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
|
|
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
|
|
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(
|
|
107
|
+
return options.tokenize(Prompt.make(input));
|
|
29
108
|
},
|
|
30
109
|
truncate(input, tokens) {
|
|
31
|
-
return truncate(
|
|
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.
|
|
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(
|
|
121
|
+
return Effect.succeed(Prompt.fromMessages(outputMessages));
|
|
43
122
|
}
|
|
44
123
|
inputMessages = inputMessages.slice(0, inputMessages.length - 1);
|
|
45
|
-
return Effect.flatMap(tokenize(
|
|
124
|
+
return Effect.flatMap(tokenize(Prompt.fromMessages([message])), tokens => {
|
|
46
125
|
count += tokens.length;
|
|
47
126
|
if (count > maxTokens) {
|
|
48
|
-
return Effect.succeed(
|
|
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","
|
|
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":[]}
|