@llm4ts/core 0.1.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/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/AgentSession.d.ts +66 -0
- package/dist/AgentSession.d.ts.map +1 -0
- package/dist/AgentSession.js +53 -0
- package/dist/AgentSession.js.map +1 -0
- package/dist/Capability.d.ts +101 -0
- package/dist/Capability.d.ts.map +1 -0
- package/dist/Capability.js +210 -0
- package/dist/Capability.js.map +1 -0
- package/dist/Connector.d.ts +69 -0
- package/dist/Connector.d.ts.map +1 -0
- package/dist/Connector.js +86 -0
- package/dist/Connector.js.map +1 -0
- package/dist/ConnectorConfig.d.ts +70 -0
- package/dist/ConnectorConfig.d.ts.map +1 -0
- package/dist/ConnectorConfig.js +110 -0
- package/dist/ConnectorConfig.js.map +1 -0
- package/dist/ConnectorRegistry.d.ts +28 -0
- package/dist/ConnectorRegistry.d.ts.map +1 -0
- package/dist/ConnectorRegistry.js +87 -0
- package/dist/ConnectorRegistry.js.map +1 -0
- package/dist/ContextManagement.d.ts +78 -0
- package/dist/ContextManagement.d.ts.map +1 -0
- package/dist/ContextManagement.js +221 -0
- package/dist/ContextManagement.js.map +1 -0
- package/dist/Conversation.d.ts +18 -0
- package/dist/Conversation.d.ts.map +1 -0
- package/dist/Conversation.js +17 -0
- package/dist/Conversation.js.map +1 -0
- package/dist/Errors.d.ts +64 -0
- package/dist/Errors.d.ts.map +1 -0
- package/dist/Errors.js +76 -0
- package/dist/Errors.js.map +1 -0
- package/dist/HttpClient.d.ts +43 -0
- package/dist/HttpClient.d.ts.map +1 -0
- package/dist/HttpClient.js +99 -0
- package/dist/HttpClient.js.map +1 -0
- package/dist/LlmService.d.ts +24 -0
- package/dist/LlmService.d.ts.map +1 -0
- package/dist/LlmService.js +4 -0
- package/dist/LlmService.js.map +1 -0
- package/dist/Models.d.ts +138 -0
- package/dist/Models.d.ts.map +1 -0
- package/dist/Models.js +209 -0
- package/dist/Models.js.map +1 -0
- package/dist/ProcessExecutor.d.ts +57 -0
- package/dist/ProcessExecutor.d.ts.map +1 -0
- package/dist/ProcessExecutor.js +71 -0
- package/dist/ProcessExecutor.js.map +1 -0
- package/dist/RateLimiter.d.ts +44 -0
- package/dist/RateLimiter.d.ts.map +1 -0
- package/dist/RateLimiter.js +155 -0
- package/dist/RateLimiter.js.map +1 -0
- package/dist/Streaming.d.ts +17 -0
- package/dist/Streaming.d.ts.map +1 -0
- package/dist/Streaming.js +65 -0
- package/dist/Streaming.js.map +1 -0
- package/dist/StructuredOutput.d.ts +10 -0
- package/dist/StructuredOutput.d.ts.map +1 -0
- package/dist/StructuredOutput.js +97 -0
- package/dist/StructuredOutput.js.map +1 -0
- package/dist/TemporaryFiles.d.ts +20 -0
- package/dist/TemporaryFiles.d.ts.map +1 -0
- package/dist/TemporaryFiles.js +18 -0
- package/dist/TemporaryFiles.js.map +1 -0
- package/dist/UsageLimits.d.ts +5 -0
- package/dist/UsageLimits.d.ts.map +1 -0
- package/dist/UsageLimits.js +187 -0
- package/dist/UsageLimits.js.map +1 -0
- package/dist/eval/Checks.d.ts +6 -0
- package/dist/eval/Checks.d.ts.map +1 -0
- package/dist/eval/Checks.js +39 -0
- package/dist/eval/Checks.js.map +1 -0
- package/dist/eval/Eval.d.ts +57 -0
- package/dist/eval/Eval.d.ts.map +1 -0
- package/dist/eval/Eval.js +91 -0
- package/dist/eval/Eval.js.map +1 -0
- package/dist/eval/EvalSuite.d.ts +21 -0
- package/dist/eval/EvalSuite.d.ts.map +1 -0
- package/dist/eval/EvalSuite.js +30 -0
- package/dist/eval/EvalSuite.js.map +1 -0
- package/dist/eval/Evaluator.d.ts +10 -0
- package/dist/eval/Evaluator.d.ts.map +1 -0
- package/dist/eval/Evaluator.js +14 -0
- package/dist/eval/Evaluator.js.map +1 -0
- package/dist/eval/Judge.d.ts +15 -0
- package/dist/eval/Judge.d.ts.map +1 -0
- package/dist/eval/Judge.js +73 -0
- package/dist/eval/Judge.js.map +1 -0
- package/dist/observability/MeteredLlmService.d.ts +16 -0
- package/dist/observability/MeteredLlmService.d.ts.map +1 -0
- package/dist/observability/MeteredLlmService.js +66 -0
- package/dist/observability/MeteredLlmService.js.map +1 -0
- package/dist/observability/Metrics.d.ts +71 -0
- package/dist/observability/Metrics.d.ts.map +1 -0
- package/dist/observability/Metrics.js +147 -0
- package/dist/observability/Metrics.js.map +1 -0
- package/dist/observability/Redaction.d.ts +8 -0
- package/dist/observability/Redaction.d.ts.map +1 -0
- package/dist/observability/Redaction.js +38 -0
- package/dist/observability/Redaction.js.map +1 -0
- package/dist/observability/StreamRecorder.d.ts +9 -0
- package/dist/observability/StreamRecorder.d.ts.map +1 -0
- package/dist/observability/StreamRecorder.js +10 -0
- package/dist/observability/StreamRecorder.js.map +1 -0
- package/dist/observability/StructuredLogger.d.ts +31 -0
- package/dist/observability/StructuredLogger.d.ts.map +1 -0
- package/dist/observability/StructuredLogger.js +34 -0
- package/dist/observability/StructuredLogger.js.map +1 -0
- package/dist/observability/Tracing.d.ts +38 -0
- package/dist/observability/Tracing.d.ts.map +1 -0
- package/dist/observability/Tracing.js +75 -0
- package/dist/observability/Tracing.js.map +1 -0
- package/dist/providers/AnthropicModels.d.ts +95 -0
- package/dist/providers/AnthropicModels.d.ts.map +1 -0
- package/dist/providers/AnthropicModels.js +83 -0
- package/dist/providers/AnthropicModels.js.map +1 -0
- package/dist/providers/AnthropicProvider.d.ts +13 -0
- package/dist/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/providers/AnthropicProvider.js +177 -0
- package/dist/providers/AnthropicProvider.js.map +1 -0
- package/dist/providers/AntigravityConnector.d.ts +7 -0
- package/dist/providers/AntigravityConnector.d.ts.map +1 -0
- package/dist/providers/AntigravityConnector.js +52 -0
- package/dist/providers/AntigravityConnector.js.map +1 -0
- package/dist/providers/ClaudeAgentSession.d.ts +11 -0
- package/dist/providers/ClaudeAgentSession.d.ts.map +1 -0
- package/dist/providers/ClaudeAgentSession.js +158 -0
- package/dist/providers/ClaudeAgentSession.js.map +1 -0
- package/dist/providers/ClaudeCliConnector.d.ts +9 -0
- package/dist/providers/ClaudeCliConnector.d.ts.map +1 -0
- package/dist/providers/ClaudeCliConnector.js +123 -0
- package/dist/providers/ClaudeCliConnector.js.map +1 -0
- package/dist/providers/CliSupport.d.ts +21 -0
- package/dist/providers/CliSupport.d.ts.map +1 -0
- package/dist/providers/CliSupport.js +62 -0
- package/dist/providers/CliSupport.js.map +1 -0
- package/dist/providers/CodexConnector.d.ts +12 -0
- package/dist/providers/CodexConnector.d.ts.map +1 -0
- package/dist/providers/CodexConnector.js +175 -0
- package/dist/providers/CodexConnector.js.map +1 -0
- package/dist/providers/ConnectorFactories.d.ts +15 -0
- package/dist/providers/ConnectorFactories.d.ts.map +1 -0
- package/dist/providers/ConnectorFactories.js +74 -0
- package/dist/providers/ConnectorFactories.js.map +1 -0
- package/dist/providers/CopilotConnector.d.ts +6 -0
- package/dist/providers/CopilotConnector.d.ts.map +1 -0
- package/dist/providers/CopilotConnector.js +35 -0
- package/dist/providers/CopilotConnector.js.map +1 -0
- package/dist/providers/CursorConnector.d.ts +8 -0
- package/dist/providers/CursorConnector.d.ts.map +1 -0
- package/dist/providers/CursorConnector.js +82 -0
- package/dist/providers/CursorConnector.js.map +1 -0
- package/dist/providers/GeminiApiProvider.d.ts +9 -0
- package/dist/providers/GeminiApiProvider.d.ts.map +1 -0
- package/dist/providers/GeminiApiProvider.js +181 -0
- package/dist/providers/GeminiApiProvider.js.map +1 -0
- package/dist/providers/GeminiCliProvider.d.ts +106 -0
- package/dist/providers/GeminiCliProvider.d.ts.map +1 -0
- package/dist/providers/GeminiCliProvider.js +596 -0
- package/dist/providers/GeminiCliProvider.js.map +1 -0
- package/dist/providers/GeminiModels.d.ts +92 -0
- package/dist/providers/GeminiModels.d.ts.map +1 -0
- package/dist/providers/GeminiModels.js +80 -0
- package/dist/providers/GeminiModels.js.map +1 -0
- package/dist/providers/GrokCliConnector.d.ts +8 -0
- package/dist/providers/GrokCliConnector.d.ts.map +1 -0
- package/dist/providers/GrokCliConnector.js +82 -0
- package/dist/providers/GrokCliConnector.js.map +1 -0
- package/dist/providers/LmStudioModels.d.ts +114 -0
- package/dist/providers/LmStudioModels.d.ts.map +1 -0
- package/dist/providers/LmStudioModels.js +102 -0
- package/dist/providers/LmStudioModels.js.map +1 -0
- package/dist/providers/LmStudioProvider.d.ts +13 -0
- package/dist/providers/LmStudioProvider.d.ts.map +1 -0
- package/dist/providers/LmStudioProvider.js +158 -0
- package/dist/providers/LmStudioProvider.js.map +1 -0
- package/dist/providers/MockProvider.d.ts +6 -0
- package/dist/providers/MockProvider.d.ts.map +1 -0
- package/dist/providers/MockProvider.js +271 -0
- package/dist/providers/MockProvider.js.map +1 -0
- package/dist/providers/OllamaModels.d.ts +68 -0
- package/dist/providers/OllamaModels.d.ts.map +1 -0
- package/dist/providers/OllamaModels.js +59 -0
- package/dist/providers/OllamaModels.js.map +1 -0
- package/dist/providers/OllamaProvider.d.ts +7 -0
- package/dist/providers/OllamaProvider.d.ts.map +1 -0
- package/dist/providers/OllamaProvider.js +134 -0
- package/dist/providers/OllamaProvider.js.map +1 -0
- package/dist/providers/OpenAIModels.d.ts +139 -0
- package/dist/providers/OpenAIModels.d.ts.map +1 -0
- package/dist/providers/OpenAIModels.js +123 -0
- package/dist/providers/OpenAIModels.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts +9 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/providers/OpenAIProvider.js +185 -0
- package/dist/providers/OpenAIProvider.js.map +1 -0
- package/dist/providers/OpenCodeCliConnector.d.ts +8 -0
- package/dist/providers/OpenCodeCliConnector.d.ts.map +1 -0
- package/dist/providers/OpenCodeCliConnector.js +93 -0
- package/dist/providers/OpenCodeCliConnector.js.map +1 -0
- package/dist/providers/OpenCodeModels.d.ts +61 -0
- package/dist/providers/OpenCodeModels.d.ts.map +1 -0
- package/dist/providers/OpenCodeModels.js +53 -0
- package/dist/providers/OpenCodeModels.js.map +1 -0
- package/dist/providers/OpenCodeProvider.d.ts +10 -0
- package/dist/providers/OpenCodeProvider.d.ts.map +1 -0
- package/dist/providers/OpenCodeProvider.js +154 -0
- package/dist/providers/OpenCodeProvider.js.map +1 -0
- package/dist/providers/PiConnector.d.ts +8 -0
- package/dist/providers/PiConnector.d.ts.map +1 -0
- package/dist/providers/PiConnector.js +99 -0
- package/dist/providers/PiConnector.js.map +1 -0
- package/dist/tools/Tool.d.ts +83 -0
- package/dist/tools/Tool.d.ts.map +1 -0
- package/dist/tools/Tool.js +278 -0
- package/dist/tools/Tool.js.map +1 -0
- package/dist/tools/ToolCallingExecutor.d.ts +18 -0
- package/dist/tools/ToolCallingExecutor.d.ts.map +1 -0
- package/dist/tools/ToolCallingExecutor.js +64 -0
- package/dist/tools/ToolCallingExecutor.js.map +1 -0
- package/dist/tools/ToolRegistry.d.ts +45 -0
- package/dist/tools/ToolRegistry.d.ts.map +1 -0
- package/dist/tools/ToolRegistry.js +133 -0
- package/dist/tools/ToolRegistry.js.map +1 -0
- package/package.json +105 -0
- package/src/.gitkeep +1 -0
- package/src/AgentSession.ts +69 -0
- package/src/Capability.ts +240 -0
- package/src/Connector.ts +220 -0
- package/src/ConnectorConfig.ts +146 -0
- package/src/ConnectorRegistry.ts +184 -0
- package/src/ContextManagement.ts +372 -0
- package/src/Conversation.ts +21 -0
- package/src/Errors.ts +87 -0
- package/src/HttpClient.ts +202 -0
- package/src/LlmService.ts +45 -0
- package/src/Models.ts +250 -0
- package/src/ProcessExecutor.ts +157 -0
- package/src/RateLimiter.ts +238 -0
- package/src/Streaming.ts +164 -0
- package/src/StructuredOutput.ts +138 -0
- package/src/TemporaryFiles.ts +51 -0
- package/src/UsageLimits.ts +242 -0
- package/src/eval/Checks.ts +68 -0
- package/src/eval/Eval.ts +112 -0
- package/src/eval/EvalSuite.ts +63 -0
- package/src/eval/Evaluator.ts +31 -0
- package/src/eval/Judge.ts +92 -0
- package/src/observability/MeteredLlmService.ts +156 -0
- package/src/observability/Metrics.ts +195 -0
- package/src/observability/Redaction.ts +55 -0
- package/src/observability/StreamRecorder.ts +32 -0
- package/src/observability/StructuredLogger.ts +62 -0
- package/src/observability/Tracing.ts +141 -0
- package/src/providers/AnthropicModels.ts +96 -0
- package/src/providers/AnthropicProvider.ts +320 -0
- package/src/providers/AntigravityConnector.ts +77 -0
- package/src/providers/ClaudeAgentSession.ts +226 -0
- package/src/providers/ClaudeCliConnector.ts +201 -0
- package/src/providers/CliSupport.ts +100 -0
- package/src/providers/CodexConnector.ts +251 -0
- package/src/providers/ConnectorFactories.ts +142 -0
- package/src/providers/CopilotConnector.ts +47 -0
- package/src/providers/CursorConnector.ts +120 -0
- package/src/providers/GeminiApiProvider.ts +337 -0
- package/src/providers/GeminiCliProvider.ts +793 -0
- package/src/providers/GeminiModels.ts +97 -0
- package/src/providers/GrokCliConnector.ts +117 -0
- package/src/providers/LmStudioModels.ts +117 -0
- package/src/providers/LmStudioProvider.ts +260 -0
- package/src/providers/MockProvider.ts +322 -0
- package/src/providers/OllamaModels.ts +64 -0
- package/src/providers/OllamaProvider.ts +236 -0
- package/src/providers/OpenAIModels.ts +152 -0
- package/src/providers/OpenAIProvider.ts +331 -0
- package/src/providers/OpenCodeCliConnector.ts +135 -0
- package/src/providers/OpenCodeModels.ts +60 -0
- package/src/providers/OpenCodeProvider.ts +278 -0
- package/src/providers/PiConnector.ts +142 -0
- package/src/tools/Tool.ts +379 -0
- package/src/tools/ToolCallingExecutor.ts +106 -0
- package/src/tools/ToolRegistry.ts +224 -0
|
@@ -0,0 +1,221 @@
|
|
|
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.TaggedErrorClass()("InvalidInput", {
|
|
7
|
+
message: Schema.String
|
|
8
|
+
}) {
|
|
9
|
+
}
|
|
10
|
+
export class ContextParseFailed extends Schema.TaggedErrorClass()("ParseFailed", {
|
|
11
|
+
message: Schema.String
|
|
12
|
+
}) {
|
|
13
|
+
}
|
|
14
|
+
export class ContextSummarizationFailed extends Schema.TaggedErrorClass()("SummarizationFailed", {
|
|
15
|
+
message: Schema.String
|
|
16
|
+
}) {
|
|
17
|
+
}
|
|
18
|
+
export class ContextToolLoopFailed extends Schema.TaggedErrorClass()("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 "Mock":
|
|
86
|
+
return 4.5;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const countText = (provider, text) => Math.max(1, Math.ceil(Math.max(text.length, 1) / providerCharactersPerToken(provider)));
|
|
90
|
+
const countMessage = (provider, message) => countText(provider, message.content) + roleOverhead(message.role);
|
|
91
|
+
export const defaultTokenCounter = {
|
|
92
|
+
countText,
|
|
93
|
+
countMessage,
|
|
94
|
+
countMessages: (provider, messages) => Array.from(messages).reduce((total, message) => total + countMessage(provider, message), 0)
|
|
95
|
+
};
|
|
96
|
+
export const simpleMessageSummarizer = {
|
|
97
|
+
summarize: (messages, targetTokens) => {
|
|
98
|
+
if (messages.length === 0) {
|
|
99
|
+
return Effect.fail(ContextInvalidInput.make({
|
|
100
|
+
message: "Cannot summarize empty messages"
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
const summaryText = messages
|
|
104
|
+
.slice(0, 8)
|
|
105
|
+
.map((message) => `${message.role.toLowerCase()}: ${message.content.slice(0, 160)}`)
|
|
106
|
+
.join("\n");
|
|
107
|
+
return Effect.gen(function* () {
|
|
108
|
+
const crypto = yield* Crypto.Crypto;
|
|
109
|
+
const id = yield* crypto.randomUUIDv4.pipe(Effect.mapError((error) => ContextSummarizationFailed.make({
|
|
110
|
+
message: `Failed to generate summary id: ${error.message}`
|
|
111
|
+
})));
|
|
112
|
+
const timestamp = yield* DateTime.now;
|
|
113
|
+
return ConversationMessage.make({
|
|
114
|
+
id,
|
|
115
|
+
role: "Assistant",
|
|
116
|
+
content: `Summary of previous context:\n${summaryText}`,
|
|
117
|
+
timestamp,
|
|
118
|
+
tokens: Math.max(1, targetTokens),
|
|
119
|
+
metadata: { summary: "true" },
|
|
120
|
+
important: true
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
const annotateTokens = (messages, provider, tokenCounter) => messages.map((message) => message.tokens > 0
|
|
126
|
+
? message
|
|
127
|
+
: ConversationMessage.make({
|
|
128
|
+
...message,
|
|
129
|
+
tokens: tokenCounter.countMessage(provider, message)
|
|
130
|
+
}));
|
|
131
|
+
const dropOldest = (messages, maxTokens) => {
|
|
132
|
+
let used = 0;
|
|
133
|
+
let kept = [];
|
|
134
|
+
for (const message of Array.from(messages).reverse()) {
|
|
135
|
+
if (used + message.tokens <= maxTokens) {
|
|
136
|
+
used += message.tokens;
|
|
137
|
+
kept = [message, ...kept];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return kept;
|
|
141
|
+
};
|
|
142
|
+
const slidingWindow = (messages, maxTokens) => {
|
|
143
|
+
const system = messages.filter((message) => message.role === "System");
|
|
144
|
+
const recentNonSystem = messages.filter((message) => message.role !== "System");
|
|
145
|
+
const systemTokens = system.reduce((total, message) => total + message.tokens, 0);
|
|
146
|
+
const tail = dropOldest(recentNonSystem, Math.max(0, maxTokens - systemTokens));
|
|
147
|
+
return [...system, ...tail].slice(-messages.length);
|
|
148
|
+
};
|
|
149
|
+
const priorityWindow = (messages, maxTokens) => {
|
|
150
|
+
const scored = messages.map((message, index) => ({
|
|
151
|
+
message,
|
|
152
|
+
score: (message.role === "System" ? 1_000 : 0) +
|
|
153
|
+
(message.role === "Tool" ? 600 : 0) +
|
|
154
|
+
(message.important ? 400 : 0) +
|
|
155
|
+
index
|
|
156
|
+
}));
|
|
157
|
+
scored.sort((left, right) => right.score - left.score ||
|
|
158
|
+
DateTime.toEpochMillis(left.message.timestamp) -
|
|
159
|
+
DateTime.toEpochMillis(right.message.timestamp));
|
|
160
|
+
let used = 0;
|
|
161
|
+
const selected = [];
|
|
162
|
+
for (const candidate of scored) {
|
|
163
|
+
if (used + candidate.message.tokens <= maxTokens) {
|
|
164
|
+
used += candidate.message.tokens;
|
|
165
|
+
selected.push(candidate.message);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return selected.sort((left, right) => DateTime.toEpochMillis(left.timestamp) - DateTime.toEpochMillis(right.timestamp));
|
|
169
|
+
};
|
|
170
|
+
const summarizeOldMessages = (messages, maxTokens, summaryTargetTokens, provider, tokenCounter, summarizer) => {
|
|
171
|
+
if (messages.length <= 2) {
|
|
172
|
+
return Effect.succeed(dropOldest(messages, maxTokens));
|
|
173
|
+
}
|
|
174
|
+
const splitIndex = Math.max(1, Math.floor(messages.length / 2));
|
|
175
|
+
const oldMessages = messages.slice(0, splitIndex);
|
|
176
|
+
const recentMessages = messages.slice(splitIndex);
|
|
177
|
+
return Effect.map(summarizer.summarize(oldMessages, summaryTargetTokens), (summary) => {
|
|
178
|
+
const annotatedSummary = ConversationMessage.make({
|
|
179
|
+
...summary,
|
|
180
|
+
tokens: tokenCounter.countMessage(provider, summary)
|
|
181
|
+
});
|
|
182
|
+
return dropOldest([annotatedSummary, ...recentMessages], maxTokens);
|
|
183
|
+
});
|
|
184
|
+
};
|
|
185
|
+
export function applyContextWindow(messages, provider, limits, strategy, tokenCounter = defaultTokenCounter, summarizer) {
|
|
186
|
+
if (limits.maxTokens <= 0) {
|
|
187
|
+
return Effect.fail(ContextInvalidInput.make({
|
|
188
|
+
message: "maxTokens must be > 0"
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
const withTokens = annotateTokens(messages, provider, tokenCounter);
|
|
192
|
+
const totalBefore = withTokens.reduce((total, message) => total + message.tokens, 0);
|
|
193
|
+
const trimmed = totalBefore <= limits.maxTokens
|
|
194
|
+
? Effect.succeed([withTokens, false])
|
|
195
|
+
: (() => {
|
|
196
|
+
switch (strategy._tag) {
|
|
197
|
+
case "DropOldestFifo":
|
|
198
|
+
return Effect.succeed([dropOldest(withTokens, limits.maxTokens), true]);
|
|
199
|
+
case "SlidingWindow":
|
|
200
|
+
return Effect.succeed([slidingWindow(withTokens, limits.maxTokens), true]);
|
|
201
|
+
case "PriorityBased":
|
|
202
|
+
return Effect.succeed([priorityWindow(withTokens, limits.maxTokens), true]);
|
|
203
|
+
case "SummarizeOldMessages": {
|
|
204
|
+
const summarized = summarizer === undefined
|
|
205
|
+
? summarizeOldMessages(withTokens, limits.maxTokens, strategy.summaryTargetTokens, provider, tokenCounter, simpleMessageSummarizer)
|
|
206
|
+
: summarizeOldMessages(withTokens, limits.maxTokens, strategy.summaryTargetTokens, provider, tokenCounter, summarizer);
|
|
207
|
+
return Effect.map(summarized, (messages) => [messages, true]);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
})();
|
|
211
|
+
return Effect.map(trimmed, ([finalMessages, wasTrimmed]) => {
|
|
212
|
+
const totalTokens = finalMessages.reduce((total, message) => total + message.tokens, 0);
|
|
213
|
+
return ContextWindow.make({
|
|
214
|
+
messages: finalMessages,
|
|
215
|
+
totalTokens,
|
|
216
|
+
approachingLimit: totalTokens >= limits.maxTokens * limits.warningThresholdPct,
|
|
217
|
+
trimmed: wasTrimmed
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=ContextManagement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextManagement.js","sourceRoot":"","sources":["../src/ContextManagement.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
package/dist/Errors.d.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import * as Schema from "effect/Schema";
|
|
2
|
+
declare const ProviderError_base: Schema.Class<ProviderError, Schema.TaggedStruct<"ProviderError", {
|
|
3
|
+
readonly message: Schema.String;
|
|
4
|
+
readonly cause: Schema.optionalKey<Schema.Defect>;
|
|
5
|
+
}>, import("effect/Cause").YieldableError>;
|
|
6
|
+
export declare class ProviderError extends ProviderError_base {
|
|
7
|
+
}
|
|
8
|
+
declare const UsageLimitError_base: Schema.Class<UsageLimitError, Schema.TaggedStruct<"UsageLimitError", {
|
|
9
|
+
readonly resetAt: Schema.optionalKey<Schema.DateTimeUtc>;
|
|
10
|
+
readonly provider: Schema.String;
|
|
11
|
+
readonly message: Schema.String;
|
|
12
|
+
}>, import("effect/Cause").YieldableError>;
|
|
13
|
+
export declare class UsageLimitError extends UsageLimitError_base {
|
|
14
|
+
}
|
|
15
|
+
declare const AuthenticationError_base: Schema.Class<AuthenticationError, Schema.TaggedStruct<"AuthenticationError", {
|
|
16
|
+
readonly message: Schema.String;
|
|
17
|
+
}>, import("effect/Cause").YieldableError>;
|
|
18
|
+
export declare class AuthenticationError extends AuthenticationError_base {
|
|
19
|
+
}
|
|
20
|
+
declare const InvalidRequestError_base: Schema.Class<InvalidRequestError, Schema.TaggedStruct<"InvalidRequestError", {
|
|
21
|
+
readonly message: Schema.String;
|
|
22
|
+
}>, import("effect/Cause").YieldableError>;
|
|
23
|
+
export declare class InvalidRequestError extends InvalidRequestError_base {
|
|
24
|
+
}
|
|
25
|
+
declare const ParseError_base: Schema.Class<ParseError, Schema.TaggedStruct<"ParseError", {
|
|
26
|
+
readonly message: Schema.String;
|
|
27
|
+
readonly raw: Schema.String;
|
|
28
|
+
}>, import("effect/Cause").YieldableError>;
|
|
29
|
+
export declare class ParseError extends ParseError_base {
|
|
30
|
+
}
|
|
31
|
+
declare const ToolError_base: Schema.Class<ToolError, Schema.TaggedStruct<"ToolError", {
|
|
32
|
+
readonly toolName: Schema.String;
|
|
33
|
+
readonly detail: Schema.String;
|
|
34
|
+
}>, import("effect/Cause").YieldableError>;
|
|
35
|
+
export declare class ToolError extends ToolError_base {
|
|
36
|
+
get message(): string;
|
|
37
|
+
}
|
|
38
|
+
declare const ConfigError_base: Schema.Class<ConfigError, Schema.TaggedStruct<"ConfigError", {
|
|
39
|
+
readonly message: Schema.String;
|
|
40
|
+
}>, import("effect/Cause").YieldableError>;
|
|
41
|
+
export declare class ConfigError extends ConfigError_base {
|
|
42
|
+
}
|
|
43
|
+
declare const RateLimitError_base: Schema.Class<RateLimitError, Schema.TaggedStruct<"RateLimitError", {
|
|
44
|
+
readonly retryAfter: Schema.optionalKey<Schema.Duration>;
|
|
45
|
+
}>, import("effect/Cause").YieldableError>;
|
|
46
|
+
export declare class RateLimitError extends RateLimitError_base {
|
|
47
|
+
get message(): string;
|
|
48
|
+
}
|
|
49
|
+
declare const TimeoutError_base: Schema.Class<TimeoutError, Schema.TaggedStruct<"TimeoutError", {
|
|
50
|
+
readonly duration: Schema.Duration;
|
|
51
|
+
}>, import("effect/Cause").YieldableError>;
|
|
52
|
+
export declare class TimeoutError extends TimeoutError_base {
|
|
53
|
+
get message(): string;
|
|
54
|
+
}
|
|
55
|
+
declare const TurnLimitError_base: Schema.Class<TurnLimitError, Schema.TaggedStruct<"TurnLimitError", {
|
|
56
|
+
readonly limit: Schema.optionalKey<Schema.Int>;
|
|
57
|
+
}>, import("effect/Cause").YieldableError>;
|
|
58
|
+
export declare class TurnLimitError extends TurnLimitError_base {
|
|
59
|
+
get message(): string;
|
|
60
|
+
}
|
|
61
|
+
export declare const LlmError: Schema.Union<readonly [typeof ProviderError, typeof UsageLimitError, typeof AuthenticationError, typeof InvalidRequestError, typeof ParseError, typeof ToolError, typeof ConfigError, typeof RateLimitError, typeof TimeoutError, typeof TurnLimitError]>;
|
|
62
|
+
export type LlmError = typeof LlmError.Type;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=Errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../src/Errors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;;;;;AAEvC,qBAAa,aAAc,SAAQ,kBAGjC;CAAG;;;;;;AAEL,qBAAa,eAAgB,SAAQ,oBAInC;CAAG;;;;AAEL,qBAAa,mBAAoB,SAAQ,wBAKxC;CAAG;;;;AAEJ,qBAAa,mBAAoB,SAAQ,wBAKxC;CAAG;;;;;AAEJ,qBAAa,UAAW,SAAQ,eAG9B;CAAG;;;;;AAEL,qBAAa,SAAU,SAAQ,cAG7B;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;AAED,qBAAa,WAAY,SAAQ,gBAE/B;CAAG;;;;AAEL,qBAAa,cAAe,SAAQ,mBAElC;IACA,IAAI,OAAO,IAAI,MAAM,CAIpB;CACF;;;;AAED,qBAAa,YAAa,SAAQ,iBAEhC;IACA,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;AAED,qBAAa,cAAe,SAAQ,mBAElC;IACA,IAAI,OAAO,IAAI,MAAM,CAIpB;CACF;AAED,eAAO,MAAM,QAAQ,2PAWnB,CAAA;AACF,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA"}
|
package/dist/Errors.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as Duration from "effect/Duration";
|
|
2
|
+
import * as Schema from "effect/Schema";
|
|
3
|
+
export class ProviderError extends Schema.TaggedErrorClass()("ProviderError", {
|
|
4
|
+
message: Schema.String,
|
|
5
|
+
cause: Schema.optionalKey(Schema.Defect())
|
|
6
|
+
}) {
|
|
7
|
+
}
|
|
8
|
+
export class UsageLimitError extends Schema.TaggedErrorClass()("UsageLimitError", {
|
|
9
|
+
resetAt: Schema.optionalKey(Schema.DateTimeUtc),
|
|
10
|
+
provider: Schema.String,
|
|
11
|
+
message: Schema.String
|
|
12
|
+
}) {
|
|
13
|
+
}
|
|
14
|
+
export class AuthenticationError extends Schema.TaggedErrorClass()("AuthenticationError", {
|
|
15
|
+
message: Schema.String
|
|
16
|
+
}) {
|
|
17
|
+
}
|
|
18
|
+
export class InvalidRequestError extends Schema.TaggedErrorClass()("InvalidRequestError", {
|
|
19
|
+
message: Schema.String
|
|
20
|
+
}) {
|
|
21
|
+
}
|
|
22
|
+
export class ParseError extends Schema.TaggedErrorClass()("ParseError", {
|
|
23
|
+
message: Schema.String,
|
|
24
|
+
raw: Schema.String
|
|
25
|
+
}) {
|
|
26
|
+
}
|
|
27
|
+
export class ToolError extends Schema.TaggedErrorClass()("ToolError", {
|
|
28
|
+
toolName: Schema.String,
|
|
29
|
+
detail: Schema.String
|
|
30
|
+
}) {
|
|
31
|
+
get message() {
|
|
32
|
+
return `tool '${this.toolName}' failed: ${this.detail}`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class ConfigError extends Schema.TaggedErrorClass()("ConfigError", {
|
|
36
|
+
message: Schema.String
|
|
37
|
+
}) {
|
|
38
|
+
}
|
|
39
|
+
export class RateLimitError extends Schema.TaggedErrorClass()("RateLimitError", {
|
|
40
|
+
retryAfter: Schema.optionalKey(Schema.Duration)
|
|
41
|
+
}) {
|
|
42
|
+
get message() {
|
|
43
|
+
return this.retryAfter === undefined
|
|
44
|
+
? "rate limited"
|
|
45
|
+
: `rate limited; retry after ${Duration.format(this.retryAfter)}`;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export class TimeoutError extends Schema.TaggedErrorClass()("TimeoutError", {
|
|
49
|
+
duration: Schema.Duration
|
|
50
|
+
}) {
|
|
51
|
+
get message() {
|
|
52
|
+
return `timed out after ${Duration.format(this.duration)}`;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export class TurnLimitError extends Schema.TaggedErrorClass()("TurnLimitError", {
|
|
56
|
+
limit: Schema.optionalKey(Schema.Int)
|
|
57
|
+
}) {
|
|
58
|
+
get message() {
|
|
59
|
+
return this.limit === undefined
|
|
60
|
+
? "turn limit reached"
|
|
61
|
+
: `turn limit reached after ${this.limit} turn(s)`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export const LlmError = Schema.Union([
|
|
65
|
+
ProviderError,
|
|
66
|
+
UsageLimitError,
|
|
67
|
+
AuthenticationError,
|
|
68
|
+
InvalidRequestError,
|
|
69
|
+
ParseError,
|
|
70
|
+
ToolError,
|
|
71
|
+
ConfigError,
|
|
72
|
+
RateLimitError,
|
|
73
|
+
TimeoutError,
|
|
74
|
+
TurnLimitError
|
|
75
|
+
]);
|
|
76
|
+
//# sourceMappingURL=Errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Errors.js","sourceRoot":"","sources":["../src/Errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as Context from "effect/Context";
|
|
2
|
+
import type * as Duration from "effect/Duration";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Schema from "effect/Schema";
|
|
5
|
+
import * as Stream from "effect/Stream";
|
|
6
|
+
import { type LlmError } from "./Errors.ts";
|
|
7
|
+
declare const HttpRequest_base: Schema.Class<HttpRequest, Schema.Struct<{
|
|
8
|
+
readonly method: Schema.String;
|
|
9
|
+
readonly url: Schema.String;
|
|
10
|
+
readonly body: Schema.optionalKey<Schema.String>;
|
|
11
|
+
readonly headers: Schema.withConstructorDefault<Schema.$Record<Schema.String, Schema.String>>;
|
|
12
|
+
readonly contentType: Schema.withConstructorDefault<Schema.String>;
|
|
13
|
+
readonly timeout: Schema.Duration;
|
|
14
|
+
}>, {}>;
|
|
15
|
+
export declare class HttpRequest extends HttpRequest_base {
|
|
16
|
+
}
|
|
17
|
+
export interface HttpClientShape {
|
|
18
|
+
readonly get: (url: string, headers: Readonly<Record<string, string>>, timeout: Duration.Duration) => Effect.Effect<string, LlmError>;
|
|
19
|
+
readonly postJson: (url: string, body: string, headers: Readonly<Record<string, string>>, timeout: Duration.Duration) => Effect.Effect<string, LlmError>;
|
|
20
|
+
readonly send: (method: string, url: string, body: string | undefined, headers: Readonly<Record<string, string>>, contentType: string, timeout: Duration.Duration) => Effect.Effect<string, LlmError>;
|
|
21
|
+
readonly postJsonStream: (url: string, body: string, headers: Readonly<Record<string, string>>, timeout: Duration.Duration) => Stream.Stream<string, LlmError>;
|
|
22
|
+
readonly postJsonStreamSSE: (url: string, body: string, headers: Readonly<Record<string, string>>, timeout: Duration.Duration) => Stream.Stream<string, LlmError>;
|
|
23
|
+
}
|
|
24
|
+
declare const HttpClient_base: Context.ServiceClass<HttpClient, "@llm4ts/core/HttpClient", HttpClientShape>;
|
|
25
|
+
export declare class HttpClient extends HttpClient_base {
|
|
26
|
+
}
|
|
27
|
+
export interface HttpClientPrimitives {
|
|
28
|
+
readonly postJson: HttpClientShape["postJson"];
|
|
29
|
+
readonly get?: HttpClientShape["get"];
|
|
30
|
+
readonly send?: HttpClientShape["send"];
|
|
31
|
+
readonly postJsonStream?: HttpClientShape["postJsonStream"];
|
|
32
|
+
readonly postJsonStreamSSE?: HttpClientShape["postJsonStreamSSE"];
|
|
33
|
+
}
|
|
34
|
+
export declare const makeHttpClient: (primitives: HttpClientPrimitives) => HttpClientShape;
|
|
35
|
+
export interface RecordingHttpClient {
|
|
36
|
+
readonly client: HttpClientShape;
|
|
37
|
+
readonly recorded: Effect.Effect<ReadonlyArray<HttpRequest>>;
|
|
38
|
+
}
|
|
39
|
+
export declare const makeRecordingHttpClient: (handler: (request: HttpRequest) => Effect.Effect<string, LlmError>, streamHandler?: ((request: HttpRequest) => Stream.Stream<string, LlmError>) | undefined) => Effect.Effect<RecordingHttpClient, never, never>;
|
|
40
|
+
export declare const httpGet: (url: string, headers: Readonly<Record<string, string>> | undefined, timeout: Duration.Duration) => Effect.Effect<string, LlmError, HttpClient>;
|
|
41
|
+
export declare const httpPostJson: (url: string, body: string, headers: Readonly<Record<string, string>> | undefined, timeout: Duration.Duration) => Effect.Effect<string, LlmError, HttpClient>;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=HttpClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpClient.d.ts","sourceRoot":"","sources":["../src/HttpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import * as Context from "effect/Context";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Ref from "effect/Ref";
|
|
4
|
+
import * as Schema from "effect/Schema";
|
|
5
|
+
import * as Stream from "effect/Stream";
|
|
6
|
+
import { InvalidRequestError } from "./Errors.js";
|
|
7
|
+
const emptyHeaders = Object.freeze({});
|
|
8
|
+
export class HttpRequest extends Schema.Class("HttpRequest")({
|
|
9
|
+
method: Schema.String,
|
|
10
|
+
url: Schema.String,
|
|
11
|
+
body: Schema.optionalKey(Schema.String),
|
|
12
|
+
headers: Schema.Record(Schema.String, Schema.String).pipe(Schema.withConstructorDefault(Effect.succeed(emptyHeaders))),
|
|
13
|
+
contentType: Schema.String.pipe(Schema.withConstructorDefault(Effect.succeed("application/json"))),
|
|
14
|
+
timeout: Schema.Duration
|
|
15
|
+
}) {
|
|
16
|
+
}
|
|
17
|
+
export class HttpClient extends Context.Service()("@llm4ts/core/HttpClient") {
|
|
18
|
+
}
|
|
19
|
+
export const makeHttpClient = (primitives) => {
|
|
20
|
+
const get = primitives.get ??
|
|
21
|
+
((_url, _headers, _timeout) => Effect.fail(InvalidRequestError.make({
|
|
22
|
+
message: "GET is not supported by this HttpClient implementation"
|
|
23
|
+
})));
|
|
24
|
+
const send = primitives.send ??
|
|
25
|
+
((_method, _url, _body, _headers, _contentType, _timeout) => Effect.fail(InvalidRequestError.make({
|
|
26
|
+
message: "send is not supported by this HttpClient implementation"
|
|
27
|
+
})));
|
|
28
|
+
const postJsonStream = primitives.postJsonStream ??
|
|
29
|
+
((url, body, headers, timeout) => Stream.flatMap(Stream.fromEffect(primitives.postJson(url, body, headers, timeout)), (raw) => Stream.fromIterable(raw.split(/\r?\n/))));
|
|
30
|
+
const postJsonStreamSSE = primitives.postJsonStreamSSE ??
|
|
31
|
+
((url, body, headers, timeout) => postJsonStream(url, body, headers, timeout).pipe(Stream.filter((line) => line.startsWith("data: ")), Stream.map((line) => line.slice("data: ".length).trim()), Stream.filter((payload) => payload.length > 0 && payload !== "[DONE]")));
|
|
32
|
+
return {
|
|
33
|
+
get,
|
|
34
|
+
postJson: primitives.postJson,
|
|
35
|
+
send,
|
|
36
|
+
postJsonStream,
|
|
37
|
+
postJsonStreamSSE
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
export const makeRecordingHttpClient = Effect.fn("@llm4ts/core/HttpClient.makeRecording")(function* (handler, streamHandler) {
|
|
41
|
+
const requests = yield* Ref.make([]);
|
|
42
|
+
const record = (request) => Ref.update(requests, (current) => [...current, request]);
|
|
43
|
+
const postJson = (url, body, headers, timeout) => {
|
|
44
|
+
const request = HttpRequest.make({
|
|
45
|
+
method: "POST",
|
|
46
|
+
url,
|
|
47
|
+
body,
|
|
48
|
+
headers,
|
|
49
|
+
contentType: "application/json",
|
|
50
|
+
timeout
|
|
51
|
+
});
|
|
52
|
+
return record(request).pipe(Effect.andThen(handler(request)));
|
|
53
|
+
};
|
|
54
|
+
const client = makeHttpClient({
|
|
55
|
+
postJson,
|
|
56
|
+
get: (url, headers, timeout) => {
|
|
57
|
+
const request = HttpRequest.make({
|
|
58
|
+
method: "GET",
|
|
59
|
+
url,
|
|
60
|
+
headers,
|
|
61
|
+
timeout
|
|
62
|
+
});
|
|
63
|
+
return record(request).pipe(Effect.andThen(handler(request)));
|
|
64
|
+
},
|
|
65
|
+
send: (method, url, body, headers, contentType, timeout) => {
|
|
66
|
+
const request = HttpRequest.make({
|
|
67
|
+
method,
|
|
68
|
+
url,
|
|
69
|
+
...(body === undefined ? {} : { body }),
|
|
70
|
+
headers,
|
|
71
|
+
contentType,
|
|
72
|
+
timeout
|
|
73
|
+
});
|
|
74
|
+
return record(request).pipe(Effect.andThen(handler(request)));
|
|
75
|
+
},
|
|
76
|
+
...(streamHandler === undefined
|
|
77
|
+
? {}
|
|
78
|
+
: {
|
|
79
|
+
postJsonStream: (url, body, headers, timeout) => {
|
|
80
|
+
const request = HttpRequest.make({
|
|
81
|
+
method: "POST",
|
|
82
|
+
url,
|
|
83
|
+
body,
|
|
84
|
+
headers,
|
|
85
|
+
contentType: "application/json",
|
|
86
|
+
timeout
|
|
87
|
+
});
|
|
88
|
+
return Stream.concat(Stream.drain(Stream.fromEffect(record(request))), Stream.suspend(() => streamHandler(request)));
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
});
|
|
92
|
+
return {
|
|
93
|
+
client,
|
|
94
|
+
recorded: Ref.get(requests)
|
|
95
|
+
};
|
|
96
|
+
});
|
|
97
|
+
export const httpGet = (url, headers = emptyHeaders, timeout) => Effect.flatMap(HttpClient, (client) => client.get(url, headers, timeout));
|
|
98
|
+
export const httpPostJson = (url, body, headers = emptyHeaders, timeout) => Effect.flatMap(HttpClient, (client) => client.postJson(url, body, headers, timeout));
|
|
99
|
+
//# sourceMappingURL=HttpClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../src/HttpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as Context from "effect/Context";
|
|
2
|
+
import type * as Effect from "effect/Effect";
|
|
3
|
+
import type * as Stream from "effect/Stream";
|
|
4
|
+
import type * as Schema from "effect/Schema";
|
|
5
|
+
import type { LlmError } from "./Errors.ts";
|
|
6
|
+
import type { JsonSchema, LlmChunk, Message, TokenUsage, ToolCallResponse, ToolDefinition } from "./Models.ts";
|
|
7
|
+
export type StructuredResult<A> = readonly [
|
|
8
|
+
value: A,
|
|
9
|
+
usage: TokenUsage | undefined,
|
|
10
|
+
model: string | undefined
|
|
11
|
+
];
|
|
12
|
+
export interface LlmServiceShape {
|
|
13
|
+
readonly executeStream: (prompt: string) => Stream.Stream<LlmChunk, LlmError>;
|
|
14
|
+
readonly executeStreamWithHistory: (messages: ReadonlyArray<Message>) => Stream.Stream<LlmChunk, LlmError>;
|
|
15
|
+
readonly executeWithTools: (prompt: string, tools: ReadonlyArray<ToolDefinition>) => Effect.Effect<ToolCallResponse, LlmError>;
|
|
16
|
+
readonly executeStructured: <A, E, RD, RE>(prompt: string, schema: Schema.ConstraintCodec<A, E, RD, RE>, jsonSchema: JsonSchema) => Effect.Effect<A, LlmError, RD>;
|
|
17
|
+
readonly executeStructuredWithUsage: <A, E, RD, RE>(prompt: string, schema: Schema.ConstraintCodec<A, E, RD, RE>, jsonSchema: JsonSchema) => Effect.Effect<StructuredResult<A>, LlmError, RD>;
|
|
18
|
+
readonly isAvailable: Effect.Effect<boolean>;
|
|
19
|
+
}
|
|
20
|
+
declare const LlmService_base: Context.ServiceClass<LlmService, "@llm4ts/core/LlmService", LlmServiceShape>;
|
|
21
|
+
export declare class LlmService extends LlmService_base {
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=LlmService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LlmService.d.ts","sourceRoot":"","sources":["../src/LlmService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,UAAU,EACV,gBAAgB,EAChB,cAAc,EACf,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,SAAS;IACzC,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,UAAU,GAAG,SAAS;IAC7B,KAAK,EAAE,MAAM,GAAG,SAAS;CAC1B,CAAA;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC7E,QAAQ,CAAC,wBAAwB,EAAE,CACjC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,KAC7B,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACtC,QAAQ,CAAC,gBAAgB,EAAE,CACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,KACjC,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAA;IAC9C,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAC5C,UAAU,EAAE,UAAU,KACnB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;IACnC,QAAQ,CAAC,0BAA0B,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAChD,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAC5C,UAAU,EAAE,UAAU,KACnB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;IACrD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;CAC7C;;AAED,qBAAa,UAAW,SAAQ,eAE/B;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LlmService.js","sourceRoot":"","sources":["../src/LlmService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AA0CzC,MAAM,OAAO,UAAW,SAAQ,OAAO,CAAC,OAAO,EAA+B,CAC5E,yBAAyB,CAC1B;CAAG"}
|