@llm4ts/core 2.54.1 → 3.0.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 (142) hide show
  1. package/README.md +1 -1
  2. package/dist/Capability.d.ts +0 -9
  3. package/dist/Capability.d.ts.map +1 -1
  4. package/dist/Capability.js +0 -38
  5. package/dist/Capability.js.map +1 -1
  6. package/dist/Connector.d.ts +2 -3
  7. package/dist/Connector.d.ts.map +1 -1
  8. package/dist/Connector.js +0 -5
  9. package/dist/Connector.js.map +1 -1
  10. package/dist/ConnectorRegistry.d.ts +0 -3
  11. package/dist/ConnectorRegistry.d.ts.map +1 -1
  12. package/dist/ConnectorRegistry.js +0 -3
  13. package/dist/ConnectorRegistry.js.map +1 -1
  14. package/dist/HttpClient.d.ts +0 -2
  15. package/dist/HttpClient.d.ts.map +1 -1
  16. package/dist/HttpClient.js +0 -2
  17. package/dist/HttpClient.js.map +1 -1
  18. package/dist/LlmService.d.ts +1 -2
  19. package/dist/LlmService.d.ts.map +1 -1
  20. package/dist/LlmService.js.map +1 -1
  21. package/dist/Models.d.ts +0 -21
  22. package/dist/Models.d.ts.map +1 -1
  23. package/dist/Models.js +0 -19
  24. package/dist/Models.js.map +1 -1
  25. package/dist/Streaming.d.ts +4 -11
  26. package/dist/Streaming.d.ts.map +1 -1
  27. package/dist/Streaming.js +2 -29
  28. package/dist/Streaming.js.map +1 -1
  29. package/dist/providers/AnthropicModels.d.ts +0 -43
  30. package/dist/providers/AnthropicModels.d.ts.map +1 -1
  31. package/dist/providers/AnthropicModels.js +0 -39
  32. package/dist/providers/AnthropicModels.js.map +1 -1
  33. package/dist/providers/AnthropicProvider.d.ts +2 -3
  34. package/dist/providers/AnthropicProvider.d.ts.map +1 -1
  35. package/dist/providers/AnthropicProvider.js +2 -49
  36. package/dist/providers/AnthropicProvider.js.map +1 -1
  37. package/dist/providers/GeminiApiProvider.d.ts +2 -3
  38. package/dist/providers/GeminiApiProvider.d.ts.map +1 -1
  39. package/dist/providers/GeminiApiProvider.js +2 -44
  40. package/dist/providers/GeminiApiProvider.js.map +1 -1
  41. package/dist/providers/GeminiModels.d.ts +0 -48
  42. package/dist/providers/GeminiModels.d.ts.map +1 -1
  43. package/dist/providers/GeminiModels.js +0 -40
  44. package/dist/providers/GeminiModels.js.map +1 -1
  45. package/dist/providers/LmStudioProvider.d.ts.map +1 -1
  46. package/dist/providers/LmStudioProvider.js +1 -4
  47. package/dist/providers/LmStudioProvider.js.map +1 -1
  48. package/dist/providers/MlxLmProvider.d.ts.map +1 -1
  49. package/dist/providers/MlxLmProvider.js +1 -2
  50. package/dist/providers/MlxLmProvider.js.map +1 -1
  51. package/dist/providers/MockProvider.d.ts.map +1 -1
  52. package/dist/providers/MockProvider.js +1 -6
  53. package/dist/providers/MockProvider.js.map +1 -1
  54. package/dist/providers/OllamaProvider.d.ts.map +1 -1
  55. package/dist/providers/OllamaProvider.js +1 -4
  56. package/dist/providers/OllamaProvider.js.map +1 -1
  57. package/dist/providers/OpenAIModels.d.ts +0 -58
  58. package/dist/providers/OpenAIModels.d.ts.map +1 -1
  59. package/dist/providers/OpenAIModels.js +0 -51
  60. package/dist/providers/OpenAIModels.js.map +1 -1
  61. package/dist/providers/OpenAIProvider.d.ts +2 -3
  62. package/dist/providers/OpenAIProvider.d.ts.map +1 -1
  63. package/dist/providers/OpenAIProvider.js +2 -46
  64. package/dist/providers/OpenAIProvider.js.map +1 -1
  65. package/package.json +2 -14
  66. package/src/Capability.ts +0 -50
  67. package/src/Connector.ts +2 -20
  68. package/src/ConnectorRegistry.ts +0 -15
  69. package/src/HttpClient.ts +0 -15
  70. package/src/LlmService.ts +1 -13
  71. package/src/Models.ts +0 -22
  72. package/src/Streaming.ts +3 -99
  73. package/src/providers/AnthropicModels.ts +0 -47
  74. package/src/providers/AnthropicProvider.ts +1 -87
  75. package/src/providers/GeminiApiProvider.ts +2 -83
  76. package/src/providers/GeminiModels.ts +0 -46
  77. package/src/providers/LmStudioProvider.ts +1 -7
  78. package/src/providers/MlxLmProvider.ts +1 -3
  79. package/src/providers/MockProvider.ts +0 -9
  80. package/src/providers/OllamaProvider.ts +1 -7
  81. package/src/providers/OpenAIModels.ts +0 -64
  82. package/src/providers/OpenAIProvider.ts +2 -83
  83. package/dist/ContextManagement.d.ts +0 -78
  84. package/dist/ContextManagement.d.ts.map +0 -1
  85. package/dist/ContextManagement.js +0 -222
  86. package/dist/ContextManagement.js.map +0 -1
  87. package/dist/Conversation.d.ts +0 -18
  88. package/dist/Conversation.d.ts.map +0 -1
  89. package/dist/Conversation.js +0 -17
  90. package/dist/Conversation.js.map +0 -1
  91. package/dist/RateLimiter.d.ts +0 -44
  92. package/dist/RateLimiter.d.ts.map +0 -1
  93. package/dist/RateLimiter.js +0 -155
  94. package/dist/RateLimiter.js.map +0 -1
  95. package/dist/observability/MeteredLlmService.d.ts +0 -16
  96. package/dist/observability/MeteredLlmService.d.ts.map +0 -1
  97. package/dist/observability/MeteredLlmService.js +0 -72
  98. package/dist/observability/MeteredLlmService.js.map +0 -1
  99. package/dist/observability/Metrics.d.ts +0 -76
  100. package/dist/observability/Metrics.d.ts.map +0 -1
  101. package/dist/observability/Metrics.js +0 -152
  102. package/dist/observability/Metrics.js.map +0 -1
  103. package/dist/observability/StructuredLogger.d.ts +0 -31
  104. package/dist/observability/StructuredLogger.d.ts.map +0 -1
  105. package/dist/observability/StructuredLogger.js +0 -39
  106. package/dist/observability/StructuredLogger.js.map +0 -1
  107. package/dist/observability/Tracing.d.ts +0 -38
  108. package/dist/observability/Tracing.d.ts.map +0 -1
  109. package/dist/observability/Tracing.js +0 -80
  110. package/dist/observability/Tracing.js.map +0 -1
  111. package/dist/providers/OpenCodeModels.d.ts +0 -61
  112. package/dist/providers/OpenCodeModels.d.ts.map +0 -1
  113. package/dist/providers/OpenCodeModels.js +0 -53
  114. package/dist/providers/OpenCodeModels.js.map +0 -1
  115. package/dist/providers/OpenCodeProvider.d.ts +0 -10
  116. package/dist/providers/OpenCodeProvider.d.ts.map +0 -1
  117. package/dist/providers/OpenCodeProvider.js +0 -154
  118. package/dist/providers/OpenCodeProvider.js.map +0 -1
  119. package/dist/tools/Tool.d.ts +0 -83
  120. package/dist/tools/Tool.d.ts.map +0 -1
  121. package/dist/tools/Tool.js +0 -278
  122. package/dist/tools/Tool.js.map +0 -1
  123. package/dist/tools/ToolCallingExecutor.d.ts +0 -18
  124. package/dist/tools/ToolCallingExecutor.d.ts.map +0 -1
  125. package/dist/tools/ToolCallingExecutor.js +0 -64
  126. package/dist/tools/ToolCallingExecutor.js.map +0 -1
  127. package/dist/tools/ToolRegistry.d.ts +0 -45
  128. package/dist/tools/ToolRegistry.d.ts.map +0 -1
  129. package/dist/tools/ToolRegistry.js +0 -133
  130. package/dist/tools/ToolRegistry.js.map +0 -1
  131. package/src/ContextManagement.ts +0 -367
  132. package/src/Conversation.ts +0 -21
  133. package/src/RateLimiter.ts +0 -238
  134. package/src/observability/MeteredLlmService.ts +0 -168
  135. package/src/observability/Metrics.ts +0 -200
  136. package/src/observability/StructuredLogger.ts +0 -67
  137. package/src/observability/Tracing.ts +0 -146
  138. package/src/providers/OpenCodeModels.ts +0 -60
  139. package/src/providers/OpenCodeProvider.ts +0 -278
  140. package/src/tools/Tool.ts +0 -376
  141. package/src/tools/ToolCallingExecutor.ts +0 -106
  142. package/src/tools/ToolRegistry.ts +0 -224
@@ -1,222 +0,0 @@
1
- import * as Crypto from "effect/Crypto";
2
- import * as DateTime from "effect/DateTime";
3
- import * as Effect from "effect/Effect";
4
- import * as Schema from "effect/Schema";
5
- import { ConversationMessage } from "./Conversation.js";
6
- export class ContextInvalidInput extends Schema.TaggedError()("InvalidInput", {
7
- message: Schema.String
8
- }) {
9
- }
10
- export class ContextParseFailed extends Schema.TaggedError()("ParseFailed", {
11
- message: Schema.String
12
- }) {
13
- }
14
- export class ContextSummarizationFailed extends Schema.TaggedError()("SummarizationFailed", {
15
- message: Schema.String
16
- }) {
17
- }
18
- export class ContextToolLoopFailed extends Schema.TaggedError()("ToolLoopFailed", {
19
- message: Schema.String
20
- }) {
21
- }
22
- export const ContextError = Schema.Union([
23
- ContextInvalidInput,
24
- ContextParseFailed,
25
- ContextSummarizationFailed,
26
- ContextToolLoopFailed
27
- ]);
28
- export class ContextLimits extends Schema.Class("ContextLimits")({
29
- maxTokens: Schema.Int,
30
- warningThresholdPct: Schema.Number.pipe(Schema.withConstructorDefault(Effect.succeed(0.85)))
31
- }) {
32
- }
33
- export class ContextWindow extends Schema.Class("ContextWindow")({
34
- messages: Schema.Array(ConversationMessage),
35
- totalTokens: Schema.Int,
36
- approachingLimit: Schema.Boolean,
37
- trimmed: Schema.Boolean
38
- }) {
39
- }
40
- export class DropOldestFifo extends Schema.TaggedClass()("DropOldestFifo", {}) {
41
- }
42
- export class SlidingWindow extends Schema.TaggedClass()("SlidingWindow", {}) {
43
- }
44
- export class PriorityBased extends Schema.TaggedClass()("PriorityBased", {}) {
45
- }
46
- export class SummarizeOldMessages extends Schema.TaggedClass()("SummarizeOldMessages", {
47
- summaryTargetTokens: Schema.Int.pipe(Schema.withConstructorDefault(Effect.succeed(256)))
48
- }) {
49
- }
50
- export const ContextTrimmingStrategy = Schema.Union([
51
- DropOldestFifo,
52
- SlidingWindow,
53
- PriorityBased,
54
- SummarizeOldMessages
55
- ]);
56
- export const ContextTrimmingStrategies = Object.freeze({
57
- DropOldestFifo: DropOldestFifo.make({}),
58
- SlidingWindow: SlidingWindow.make({}),
59
- PriorityBased: PriorityBased.make({}),
60
- SummarizeOldMessages: (summaryTargetTokens = 256) => SummarizeOldMessages.make({ summaryTargetTokens })
61
- });
62
- const roleOverhead = (role) => {
63
- switch (role) {
64
- case "System":
65
- return 6;
66
- case "User":
67
- case "Assistant":
68
- return 5;
69
- case "Tool":
70
- return 8;
71
- }
72
- };
73
- const providerCharactersPerToken = (provider) => {
74
- switch (provider) {
75
- case "OpenAI":
76
- case "OpenCode":
77
- return 4;
78
- case "Anthropic":
79
- return 3.8;
80
- case "GeminiApi":
81
- case "GeminiCli":
82
- return 4.2;
83
- case "LmStudio":
84
- case "Ollama":
85
- case "MlxLm":
86
- case "Mock":
87
- return 4.5;
88
- }
89
- };
90
- const countText = (provider, text) => Math.max(1, Math.ceil(Math.max(text.length, 1) / providerCharactersPerToken(provider)));
91
- const countMessage = (provider, message) => countText(provider, message.content) + roleOverhead(message.role);
92
- export const defaultTokenCounter = {
93
- countText,
94
- countMessage,
95
- countMessages: (provider, messages) => Array.from(messages).reduce((total, message) => total + countMessage(provider, message), 0)
96
- };
97
- export const simpleMessageSummarizer = {
98
- summarize: (messages, targetTokens) => {
99
- if (messages.length === 0) {
100
- return Effect.fail(ContextInvalidInput.make({
101
- message: "Cannot summarize empty messages"
102
- }));
103
- }
104
- const summaryText = messages
105
- .slice(0, 8)
106
- .map((message) => `${message.role.toLowerCase()}: ${message.content.slice(0, 160)}`)
107
- .join("\n");
108
- return Effect.gen(function* () {
109
- const crypto = yield* Crypto.Crypto;
110
- const id = yield* crypto.randomUUIDv4.pipe(Effect.mapError((error) => ContextSummarizationFailed.make({
111
- message: `Failed to generate summary id: ${error.message}`
112
- })));
113
- const timestamp = yield* DateTime.now;
114
- return ConversationMessage.make({
115
- id,
116
- role: "Assistant",
117
- content: `Summary of previous context:\n${summaryText}`,
118
- timestamp,
119
- tokens: Math.max(1, targetTokens),
120
- metadata: { summary: "true" },
121
- important: true
122
- });
123
- });
124
- }
125
- };
126
- const annotateTokens = (messages, provider, tokenCounter) => messages.map((message) => message.tokens > 0
127
- ? message
128
- : ConversationMessage.make({
129
- ...message,
130
- tokens: tokenCounter.countMessage(provider, message)
131
- }));
132
- const dropOldest = (messages, maxTokens) => {
133
- let used = 0;
134
- let kept = [];
135
- for (const message of Array.from(messages).reverse()) {
136
- if (used + message.tokens <= maxTokens) {
137
- used += message.tokens;
138
- kept = [message, ...kept];
139
- }
140
- }
141
- return kept;
142
- };
143
- const slidingWindow = (messages, maxTokens) => {
144
- const system = messages.filter((message) => message.role === "System");
145
- const recentNonSystem = messages.filter((message) => message.role !== "System");
146
- const systemTokens = system.reduce((total, message) => total + message.tokens, 0);
147
- const tail = dropOldest(recentNonSystem, Math.max(0, maxTokens - systemTokens));
148
- return [...system, ...tail].slice(-messages.length);
149
- };
150
- const priorityWindow = (messages, maxTokens) => {
151
- const scored = messages.map((message, index) => ({
152
- message,
153
- score: (message.role === "System" ? 1_000 : 0) +
154
- (message.role === "Tool" ? 600 : 0) +
155
- (message.important ? 400 : 0) +
156
- index
157
- }));
158
- scored.sort((left, right) => right.score - left.score ||
159
- DateTime.toEpochMillis(left.message.timestamp) -
160
- DateTime.toEpochMillis(right.message.timestamp));
161
- let used = 0;
162
- const selected = [];
163
- for (const candidate of scored) {
164
- if (used + candidate.message.tokens <= maxTokens) {
165
- used += candidate.message.tokens;
166
- selected.push(candidate.message);
167
- }
168
- }
169
- return selected.sort((left, right) => DateTime.toEpochMillis(left.timestamp) - DateTime.toEpochMillis(right.timestamp));
170
- };
171
- const summarizeOldMessages = (messages, maxTokens, summaryTargetTokens, provider, tokenCounter, summarizer) => {
172
- if (messages.length <= 2) {
173
- return Effect.succeed(dropOldest(messages, maxTokens));
174
- }
175
- const splitIndex = Math.max(1, Math.floor(messages.length / 2));
176
- const oldMessages = messages.slice(0, splitIndex);
177
- const recentMessages = messages.slice(splitIndex);
178
- return Effect.map(summarizer.summarize(oldMessages, summaryTargetTokens), (summary) => {
179
- const annotatedSummary = ConversationMessage.make({
180
- ...summary,
181
- tokens: tokenCounter.countMessage(provider, summary)
182
- });
183
- return dropOldest([annotatedSummary, ...recentMessages], maxTokens);
184
- });
185
- };
186
- export function applyContextWindow(messages, provider, limits, strategy, tokenCounter = defaultTokenCounter, summarizer) {
187
- if (limits.maxTokens <= 0) {
188
- return Effect.fail(ContextInvalidInput.make({
189
- message: "maxTokens must be > 0"
190
- }));
191
- }
192
- const withTokens = annotateTokens(messages, provider, tokenCounter);
193
- const totalBefore = withTokens.reduce((total, message) => total + message.tokens, 0);
194
- const trimmed = totalBefore <= limits.maxTokens
195
- ? Effect.succeed([withTokens, false])
196
- : (() => {
197
- switch (strategy._tag) {
198
- case "DropOldestFifo":
199
- return Effect.succeed([dropOldest(withTokens, limits.maxTokens), true]);
200
- case "SlidingWindow":
201
- return Effect.succeed([slidingWindow(withTokens, limits.maxTokens), true]);
202
- case "PriorityBased":
203
- return Effect.succeed([priorityWindow(withTokens, limits.maxTokens), true]);
204
- case "SummarizeOldMessages": {
205
- const summarized = summarizer === undefined
206
- ? summarizeOldMessages(withTokens, limits.maxTokens, strategy.summaryTargetTokens, provider, tokenCounter, simpleMessageSummarizer)
207
- : summarizeOldMessages(withTokens, limits.maxTokens, strategy.summaryTargetTokens, provider, tokenCounter, summarizer);
208
- return Effect.map(summarized, (messages) => [messages, true]);
209
- }
210
- }
211
- })();
212
- return Effect.map(trimmed, ([finalMessages, wasTrimmed]) => {
213
- const totalTokens = finalMessages.reduce((total, message) => total + message.tokens, 0);
214
- return ContextWindow.make({
215
- messages: finalMessages,
216
- totalTokens,
217
- approachingLimit: totalTokens >= limits.maxTokens * limits.warningThresholdPct,
218
- trimmed: wasTrimmed
219
- });
220
- });
221
- }
222
- //# sourceMappingURL=ContextManagement.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ContextManagement.js","sourceRoot":"","sources":["../src/ContextManagement.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import * as Schema from "effect/Schema";
2
- export declare const PromptRole: Schema.Literals<readonly ["System", "User", "Assistant", "Tool"]>;
3
- export type PromptRole = typeof PromptRole.Type;
4
- declare const ConversationMessage_base: Schema.Class<ConversationMessage, Schema.Struct<{
5
- readonly id: Schema.String;
6
- readonly role: Schema.Literals<readonly ["System", "User", "Assistant", "Tool"]>;
7
- readonly content: Schema.String;
8
- readonly timestamp: Schema.DateTimeUtc;
9
- readonly tokens: Schema.withConstructorDefault<Schema.Int>;
10
- readonly model: Schema.optionalKey<Schema.String>;
11
- readonly costUsd: Schema.optionalKey<Schema.Number>;
12
- readonly metadata: Schema.withConstructorDefault<Schema.$Record<Schema.String, Schema.String>>;
13
- readonly important: Schema.withConstructorDefault<Schema.Boolean>;
14
- }>, {}>;
15
- export declare class ConversationMessage extends ConversationMessage_base {
16
- }
17
- export {};
18
- //# sourceMappingURL=Conversation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Conversation.d.ts","sourceRoot":"","sources":["../src/Conversation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,eAAO,MAAM,UAAU,mEAA2D,CAAA;AAClF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;;;;;;;;;;;;AAI/C,qBAAa,mBAAoB,SAAQ,wBAYvC;CAAG"}
@@ -1,17 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Schema from "effect/Schema";
3
- export const PromptRole = Schema.Literals(["System", "User", "Assistant", "Tool"]);
4
- const emptyMetadata = Object.freeze({});
5
- export class ConversationMessage extends Schema.Class("ConversationMessage")({
6
- id: Schema.String,
7
- role: PromptRole,
8
- content: Schema.String,
9
- timestamp: Schema.DateTimeUtc,
10
- tokens: Schema.Int.pipe(Schema.withConstructorDefault(Effect.succeed(0))),
11
- model: Schema.optionalKey(Schema.String),
12
- costUsd: Schema.optionalKey(Schema.Number),
13
- metadata: Schema.Record(Schema.String, Schema.String).pipe(Schema.withConstructorDefault(Effect.succeed(emptyMetadata))),
14
- important: Schema.Boolean.pipe(Schema.withConstructorDefault(Effect.succeed(false)))
15
- }) {
16
- }
17
- //# sourceMappingURL=Conversation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Conversation.js","sourceRoot":"","sources":["../src/Conversation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAA;AAGlF,MAAM,aAAa,GAAqC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAEzE,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,KAAK,CAAsB,qBAAqB,CAAC,CAAC;IAChG,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,WAAW;IAC7B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CACxD,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAC7D;IACD,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;CACrF,CAAC;CAAG"}
@@ -1,44 +0,0 @@
1
- import * as Context from "effect/Context";
2
- import * as Effect from "effect/Effect";
3
- import * as Layer from "effect/Layer";
4
- import * as Schema from "effect/Schema";
5
- import type { LlmConfig } from "./Models.ts";
6
- declare const RateLimiterAcquireTimeout_base: Schema.Class<RateLimiterAcquireTimeout, Schema.TaggedStruct<"AcquireTimeout", {
7
- readonly timeout: Schema.Duration;
8
- }>, import("effect/Cause").YieldableError>;
9
- export declare class RateLimiterAcquireTimeout extends RateLimiterAcquireTimeout_base {
10
- }
11
- declare const RateLimiterInvalidConfig_base: Schema.Class<RateLimiterInvalidConfig, Schema.TaggedStruct<"InvalidConfig", {
12
- readonly details: Schema.String;
13
- }>, import("effect/Cause").YieldableError>;
14
- export declare class RateLimiterInvalidConfig extends RateLimiterInvalidConfig_base {
15
- }
16
- export declare const RateLimiterError: Schema.Union<readonly [typeof RateLimiterAcquireTimeout, typeof RateLimiterInvalidConfig]>;
17
- export type RateLimiterError = typeof RateLimiterError.Type;
18
- declare const RateLimiterConfig_base: Schema.Class<RateLimiterConfig, Schema.Struct<{
19
- readonly requestsPerMinute: Schema.withConstructorDefault<Schema.Int>;
20
- readonly burstSize: Schema.withConstructorDefault<Schema.Int>;
21
- readonly acquireTimeout: Schema.withConstructorDefault<Schema.Duration>;
22
- }>, {}>;
23
- export declare class RateLimiterConfig extends RateLimiterConfig_base {
24
- }
25
- export declare const rateLimiterConfigFromLlmConfig: (config: LlmConfig) => RateLimiterConfig;
26
- declare const RateLimiterMetrics_base: Schema.Class<RateLimiterMetrics, Schema.Struct<{
27
- readonly totalRequests: Schema.Int;
28
- readonly throttledRequests: Schema.Int;
29
- readonly currentTokens: Schema.Int;
30
- }>, {}>;
31
- export declare class RateLimiterMetrics extends RateLimiterMetrics_base {
32
- }
33
- export interface RateLimiterShape {
34
- readonly acquire: Effect.Effect<void, RateLimiterError>;
35
- readonly tryAcquire: Effect.Effect<boolean>;
36
- readonly metrics: Effect.Effect<RateLimiterMetrics>;
37
- }
38
- declare const RateLimiter_base: Context.ServiceClass<RateLimiter, "@llm4ts/core/RateLimiter", RateLimiterShape>;
39
- export declare class RateLimiter extends RateLimiter_base {
40
- }
41
- export declare const makeRateLimiter: (config: RateLimiterConfig) => Effect.Effect<RateLimiterShape, never, never>;
42
- export declare const rateLimiterLayer: (config: RateLimiterConfig) => Layer.Layer<RateLimiter>;
43
- export {};
44
- //# sourceMappingURL=RateLimiter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../src/RateLimiter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAEzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;;;;AAE5C,qBAAa,yBAA0B,SAAQ,8BAK9C;CAAG;;;;AAEJ,qBAAa,wBAAyB,SAAQ,6BAK7C;CAAG;AAEJ,eAAO,MAAM,gBAAgB,4FAAsE,CAAA;AACnG,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;;;;;;AAE3D,qBAAa,iBAAkB,SAAQ,sBAMrC;CAAG;AAEL,eAAO,MAAM,8BAA8B,GAAI,QAAQ,SAAS,KAAG,iBAK/D,CAAA;;;;;;AAEJ,qBAAa,kBAAmB,SAAQ,uBAItC;CAAG;AAEL,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IACvD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;CACpD;;AAED,qBAAa,WAAY,SAAQ,gBAEhC;CAAG;AAwBJ,eAAO,MAAM,eAAe,8EA2J1B,CAAA;AAEF,eAAO,MAAM,gBAAgB,GAAI,QAAQ,iBAAiB,KAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAChC,CAAA"}
@@ -1,155 +0,0 @@
1
- import * as Clock from "effect/Clock";
2
- import * as Context from "effect/Context";
3
- import * as Duration from "effect/Duration";
4
- import * as Effect from "effect/Effect";
5
- import * as Layer from "effect/Layer";
6
- import * as Ref from "effect/Ref";
7
- import * as Schema from "effect/Schema";
8
- export class RateLimiterAcquireTimeout extends Schema.TaggedError()("AcquireTimeout", {
9
- timeout: Schema.Duration
10
- }) {
11
- }
12
- export class RateLimiterInvalidConfig extends Schema.TaggedError()("InvalidConfig", {
13
- details: Schema.String
14
- }) {
15
- }
16
- export const RateLimiterError = Schema.Union([RateLimiterAcquireTimeout, RateLimiterInvalidConfig]);
17
- export class RateLimiterConfig extends Schema.Class("RateLimiterConfig")({
18
- requestsPerMinute: Schema.Int.pipe(Schema.withConstructorDefault(Effect.succeed(60))),
19
- burstSize: Schema.Int.pipe(Schema.withConstructorDefault(Effect.succeed(10))),
20
- acquireTimeout: Schema.Duration.pipe(Schema.withConstructorDefault(Effect.succeed(Duration.seconds(30))))
21
- }) {
22
- }
23
- export const rateLimiterConfigFromLlmConfig = (config) => RateLimiterConfig.make({
24
- requestsPerMinute: config.requestsPerMinute,
25
- burstSize: config.burstSize,
26
- acquireTimeout: config.acquireTimeout
27
- });
28
- export class RateLimiterMetrics extends Schema.Class("RateLimiterMetrics")({
29
- totalRequests: Schema.Int,
30
- throttledRequests: Schema.Int,
31
- currentTokens: Schema.Int
32
- }) {
33
- }
34
- export class RateLimiter extends Context.Service()("@llm4ts/core/RateLimiter") {
35
- }
36
- const nanosPerSecond = 1_000_000_000;
37
- const configDetails = (config) => `requestsPerMinute=${config.requestsPerMinute}, burstSize=${config.burstSize}, ` +
38
- `acquireTimeout=${Duration.format(config.acquireTimeout)}`;
39
- const isConfigValid = (config) => config.requestsPerMinute > 0 &&
40
- config.burstSize > 0 &&
41
- Duration.toMillis(config.acquireTimeout) > 0;
42
- export const makeRateLimiter = Effect.fn("@llm4ts/core/RateLimiter.make")(function* (config) {
43
- const initialNanos = yield* Clock.currentTimeNanos;
44
- const state = yield* Ref.make({
45
- tokens: config.burstSize,
46
- lastRefillNanos: initialNanos
47
- });
48
- const metrics = yield* Ref.make(RateLimiterMetrics.make({
49
- totalRequests: 0,
50
- throttledRequests: 0,
51
- currentTokens: config.burstSize
52
- }));
53
- const capacity = config.burstSize;
54
- const ratePerSecond = config.requestsPerMinute / 60;
55
- const takeToken = Effect.gen(function* () {
56
- const now = yield* Clock.currentTimeNanos;
57
- return yield* Ref.modify(state, (current) => {
58
- const elapsedNanos = now - current.lastRefillNanos;
59
- const tokensToAdd = elapsedNanos <= 0n ? 0 : (Number(elapsedNanos) / nanosPerSecond) * ratePerSecond;
60
- const refilled = tokensToAdd <= 0 ? current.tokens : Math.min(capacity, current.tokens + tokensToAdd);
61
- const lastRefillNanos = tokensToAdd <= 0 ? current.lastRefillNanos : now;
62
- if (refilled >= 1) {
63
- const remaining = refilled - 1;
64
- return [
65
- {
66
- acquired: true,
67
- tokensAfter: remaining,
68
- deficit: 0
69
- },
70
- {
71
- tokens: remaining,
72
- lastRefillNanos
73
- }
74
- ];
75
- }
76
- return [
77
- {
78
- acquired: false,
79
- tokensAfter: refilled,
80
- deficit: 1 - refilled
81
- },
82
- {
83
- tokens: refilled,
84
- lastRefillNanos
85
- }
86
- ];
87
- });
88
- });
89
- const updateCurrentTokens = (tokens) => Ref.update(metrics, (current) => RateLimiterMetrics.make({
90
- ...current,
91
- currentTokens: Math.trunc(tokens)
92
- }));
93
- const waitForToken = (deficit) => {
94
- if (ratePerSecond <= 0) {
95
- return Effect.fail(RateLimiterInvalidConfig.make({
96
- details: configDetails(config)
97
- }));
98
- }
99
- const nanoseconds = BigInt(Math.max(0, Math.ceil((deficit / ratePerSecond) * nanosPerSecond)));
100
- return Effect.sleep(Duration.nanos(nanoseconds));
101
- };
102
- const acquireLoop = (alreadyThrottled) => Effect.gen(function* () {
103
- const result = yield* takeToken;
104
- yield* updateCurrentTokens(result.tokensAfter);
105
- if (result.acquired) {
106
- return;
107
- }
108
- if (!alreadyThrottled) {
109
- yield* Ref.update(metrics, (current) => RateLimiterMetrics.make({
110
- ...current,
111
- throttledRequests: current.throttledRequests + 1
112
- }));
113
- }
114
- yield* waitForToken(result.deficit);
115
- return yield* Effect.suspend(() => acquireLoop(true));
116
- });
117
- const acquire = Effect.suspend(() => {
118
- if (!isConfigValid(config)) {
119
- return Effect.fail(RateLimiterInvalidConfig.make({
120
- details: configDetails(config)
121
- }));
122
- }
123
- return Ref.update(metrics, (current) => RateLimiterMetrics.make({
124
- ...current,
125
- totalRequests: current.totalRequests + 1
126
- })).pipe(Effect.andThen(acquireLoop(false)), Effect.timeoutOrElse({
127
- duration: config.acquireTimeout,
128
- orElse: () => Effect.fail(RateLimiterAcquireTimeout.make({
129
- timeout: config.acquireTimeout
130
- }))
131
- }));
132
- });
133
- const tryAcquire = Effect.suspend(() => {
134
- if (!isConfigValid(config)) {
135
- return Effect.logWarning(`Rate limiter config invalid: ${configDetails(config)}`).pipe(Effect.as(false));
136
- }
137
- return Effect.gen(function* () {
138
- const result = yield* takeToken;
139
- yield* updateCurrentTokens(result.tokensAfter);
140
- yield* Ref.update(metrics, (current) => RateLimiterMetrics.make({
141
- ...current,
142
- totalRequests: current.totalRequests + 1,
143
- throttledRequests: current.throttledRequests + (result.acquired ? 0 : 1)
144
- }));
145
- return result.acquired;
146
- });
147
- });
148
- return RateLimiter.of({
149
- acquire,
150
- tryAcquire,
151
- metrics: Ref.get(metrics)
152
- });
153
- });
154
- export const rateLimiterLayer = (config) => Layer.effect(RateLimiter, makeRateLimiter(config));
155
- //# sourceMappingURL=RateLimiter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../src/RateLimiter.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import * as Schema from "effect/Schema";
2
- import type { LlmServiceShape } from "../LlmService.ts";
3
- import type { MetricsCollectorShape, RequestLabels } from "./Metrics.ts";
4
- declare const LlmPricing_base: Schema.Class<LlmPricing, Schema.Struct<{
5
- readonly inputUsdPer1k: Schema.Number;
6
- readonly outputUsdPer1k: Schema.Number;
7
- }>, {}>;
8
- export declare class LlmPricing extends LlmPricing_base {
9
- }
10
- export interface MeteredLlmOptions {
11
- readonly labels: RequestLabels;
12
- readonly pricing?: LlmPricing;
13
- }
14
- export declare const meterLlmService: (service: LlmServiceShape, collector: MetricsCollectorShape, options: MeteredLlmOptions) => LlmServiceShape;
15
- export {};
16
- //# sourceMappingURL=MeteredLlmService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MeteredLlmService.d.ts","sourceRoot":"","sources":["../../src/observability/MeteredLlmService.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,kBAAkB,CAAA;AAGzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;;;;;AAExE,qBAAa,UAAW,SAAQ,eAG9B;CAAG;AAEL,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAA;CAC9B;AA+GD,eAAO,MAAM,eAAe,GAC1B,SAAS,eAAe,EACxB,WAAW,qBAAqB,EAChC,SAAS,iBAAiB,KACzB,eA4BD,CAAA"}
@@ -1,72 +0,0 @@
1
- /**
2
- * @deprecated Since 2.30.0 (ADR 0026): llm4ts exports OpenTelemetry spans and
3
- * metrics over OTLP from `@llm4ts/runner/Otel`; this in-memory module is not
4
- * used by flow or runner and will be removed in the next major.
5
- */
6
- import * as Clock from "effect/Clock";
7
- import * as Effect from "effect/Effect";
8
- import * as Ref from "effect/Ref";
9
- import * as Schema from "effect/Schema";
10
- import * as Stream from "effect/Stream";
11
- import { RequestMetrics } from "./Metrics.js";
12
- export class LlmPricing extends Schema.Class("LlmPricing")({
13
- inputUsdPer1k: Schema.Number,
14
- outputUsdPer1k: Schema.Number
15
- }) {
16
- }
17
- const estimatedCost = (usage, pricing) => usage === undefined || pricing === undefined
18
- ? undefined
19
- : (usage.prompt / 1_000) * pricing.inputUsdPer1k +
20
- (usage.completion / 1_000) * pricing.outputUsdPer1k;
21
- const complete = (collector, options, startedAt, endedAt, success, errorType, usage) => {
22
- const cost = estimatedCost(usage, options.pricing);
23
- return collector.recordCompleted(RequestMetrics.make({
24
- labels: options.labels,
25
- latencyMs: Math.max(0, endedAt - startedAt),
26
- success,
27
- ...(errorType === undefined ? {} : { errorType }),
28
- ...(usage === undefined ? {} : { tokenUsage: usage }),
29
- ...(cost === undefined ? {} : { estimatedCostUsd: cost })
30
- }));
31
- };
32
- const meterEffect = (effect, collector, options, usageOf) => Effect.gen(function* () {
33
- const startedAt = yield* Clock.currentTimeMillis;
34
- yield* collector.markRequestStarted(options.labels);
35
- const result = yield* Effect.result(effect);
36
- const endedAt = yield* Clock.currentTimeMillis;
37
- yield* complete(collector, options, startedAt, endedAt, result._tag === "Success", result._tag === "Failure" ? result.failure._tag : undefined, result._tag === "Success" ? usageOf(result.success) : undefined);
38
- return yield* Effect.fromResult(result);
39
- });
40
- const meterStream = (stream, collector, options) => Stream.unwrap(Effect.gen(function* () {
41
- const startedAt = yield* Clock.currentTimeMillis;
42
- yield* collector.markRequestStarted(options.labels);
43
- const measurement = yield* Ref.make({
44
- success: true,
45
- errorType: undefined,
46
- usage: undefined
47
- });
48
- return stream.pipe(Stream.tap((chunk) => chunk.usage === undefined
49
- ? Effect.void
50
- : Ref.update(measurement, (current) => ({
51
- ...current,
52
- usage: chunk.usage
53
- }))), Stream.tapError((error) => Ref.update(measurement, (current) => ({
54
- ...current,
55
- success: false,
56
- errorType: error._tag
57
- }))), Stream.ensuring(Effect.gen(function* () {
58
- const current = yield* Ref.get(measurement);
59
- const endedAt = yield* Clock.currentTimeMillis;
60
- yield* complete(collector, options, startedAt, endedAt, current.success, current.errorType, current.usage);
61
- })));
62
- }));
63
- export const meterLlmService = (service, collector, options) => ({
64
- executeStream: (prompt) => meterStream(service.executeStream(prompt), collector, options),
65
- executeStreamWithHistory: (messages) => meterStream(service.executeStreamWithHistory(messages), collector, options),
66
- executeWithTools: (prompt, tools) => meterEffect(service.executeWithTools(prompt, tools), collector, options, () => undefined),
67
- executeStructured: (prompt, schema, jsonSchema) => meterEffect(service.executeStructured(prompt, schema, jsonSchema), collector, options, () => undefined),
68
- executeStructuredWithUsage: (prompt, schema, jsonSchema) => meterEffect(service.executeStructuredWithUsage(prompt, schema, jsonSchema), collector, options, (result) => result[1]),
69
- scoreLabels: (prompt, labels) => meterEffect(service.scoreLabels(prompt, labels), collector, options, (distribution) => distribution.usage),
70
- isAvailable: service.isAvailable
71
- });
72
- //# sourceMappingURL=MeteredLlmService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MeteredLlmService.js","sourceRoot":"","sources":["../../src/observability/MeteredLlmService.ts"],"names":[],"mappings":"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"}