@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.
Files changed (284) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +47 -0
  3. package/dist/AgentSession.d.ts +66 -0
  4. package/dist/AgentSession.d.ts.map +1 -0
  5. package/dist/AgentSession.js +53 -0
  6. package/dist/AgentSession.js.map +1 -0
  7. package/dist/Capability.d.ts +101 -0
  8. package/dist/Capability.d.ts.map +1 -0
  9. package/dist/Capability.js +210 -0
  10. package/dist/Capability.js.map +1 -0
  11. package/dist/Connector.d.ts +69 -0
  12. package/dist/Connector.d.ts.map +1 -0
  13. package/dist/Connector.js +86 -0
  14. package/dist/Connector.js.map +1 -0
  15. package/dist/ConnectorConfig.d.ts +70 -0
  16. package/dist/ConnectorConfig.d.ts.map +1 -0
  17. package/dist/ConnectorConfig.js +110 -0
  18. package/dist/ConnectorConfig.js.map +1 -0
  19. package/dist/ConnectorRegistry.d.ts +28 -0
  20. package/dist/ConnectorRegistry.d.ts.map +1 -0
  21. package/dist/ConnectorRegistry.js +87 -0
  22. package/dist/ConnectorRegistry.js.map +1 -0
  23. package/dist/ContextManagement.d.ts +78 -0
  24. package/dist/ContextManagement.d.ts.map +1 -0
  25. package/dist/ContextManagement.js +221 -0
  26. package/dist/ContextManagement.js.map +1 -0
  27. package/dist/Conversation.d.ts +18 -0
  28. package/dist/Conversation.d.ts.map +1 -0
  29. package/dist/Conversation.js +17 -0
  30. package/dist/Conversation.js.map +1 -0
  31. package/dist/Errors.d.ts +64 -0
  32. package/dist/Errors.d.ts.map +1 -0
  33. package/dist/Errors.js +76 -0
  34. package/dist/Errors.js.map +1 -0
  35. package/dist/HttpClient.d.ts +43 -0
  36. package/dist/HttpClient.d.ts.map +1 -0
  37. package/dist/HttpClient.js +99 -0
  38. package/dist/HttpClient.js.map +1 -0
  39. package/dist/LlmService.d.ts +24 -0
  40. package/dist/LlmService.d.ts.map +1 -0
  41. package/dist/LlmService.js +4 -0
  42. package/dist/LlmService.js.map +1 -0
  43. package/dist/Models.d.ts +138 -0
  44. package/dist/Models.d.ts.map +1 -0
  45. package/dist/Models.js +209 -0
  46. package/dist/Models.js.map +1 -0
  47. package/dist/ProcessExecutor.d.ts +57 -0
  48. package/dist/ProcessExecutor.d.ts.map +1 -0
  49. package/dist/ProcessExecutor.js +71 -0
  50. package/dist/ProcessExecutor.js.map +1 -0
  51. package/dist/RateLimiter.d.ts +44 -0
  52. package/dist/RateLimiter.d.ts.map +1 -0
  53. package/dist/RateLimiter.js +155 -0
  54. package/dist/RateLimiter.js.map +1 -0
  55. package/dist/Streaming.d.ts +17 -0
  56. package/dist/Streaming.d.ts.map +1 -0
  57. package/dist/Streaming.js +65 -0
  58. package/dist/Streaming.js.map +1 -0
  59. package/dist/StructuredOutput.d.ts +10 -0
  60. package/dist/StructuredOutput.d.ts.map +1 -0
  61. package/dist/StructuredOutput.js +97 -0
  62. package/dist/StructuredOutput.js.map +1 -0
  63. package/dist/TemporaryFiles.d.ts +20 -0
  64. package/dist/TemporaryFiles.d.ts.map +1 -0
  65. package/dist/TemporaryFiles.js +18 -0
  66. package/dist/TemporaryFiles.js.map +1 -0
  67. package/dist/UsageLimits.d.ts +5 -0
  68. package/dist/UsageLimits.d.ts.map +1 -0
  69. package/dist/UsageLimits.js +187 -0
  70. package/dist/UsageLimits.js.map +1 -0
  71. package/dist/eval/Checks.d.ts +6 -0
  72. package/dist/eval/Checks.d.ts.map +1 -0
  73. package/dist/eval/Checks.js +39 -0
  74. package/dist/eval/Checks.js.map +1 -0
  75. package/dist/eval/Eval.d.ts +57 -0
  76. package/dist/eval/Eval.d.ts.map +1 -0
  77. package/dist/eval/Eval.js +91 -0
  78. package/dist/eval/Eval.js.map +1 -0
  79. package/dist/eval/EvalSuite.d.ts +21 -0
  80. package/dist/eval/EvalSuite.d.ts.map +1 -0
  81. package/dist/eval/EvalSuite.js +30 -0
  82. package/dist/eval/EvalSuite.js.map +1 -0
  83. package/dist/eval/Evaluator.d.ts +10 -0
  84. package/dist/eval/Evaluator.d.ts.map +1 -0
  85. package/dist/eval/Evaluator.js +14 -0
  86. package/dist/eval/Evaluator.js.map +1 -0
  87. package/dist/eval/Judge.d.ts +15 -0
  88. package/dist/eval/Judge.d.ts.map +1 -0
  89. package/dist/eval/Judge.js +73 -0
  90. package/dist/eval/Judge.js.map +1 -0
  91. package/dist/observability/MeteredLlmService.d.ts +16 -0
  92. package/dist/observability/MeteredLlmService.d.ts.map +1 -0
  93. package/dist/observability/MeteredLlmService.js +66 -0
  94. package/dist/observability/MeteredLlmService.js.map +1 -0
  95. package/dist/observability/Metrics.d.ts +71 -0
  96. package/dist/observability/Metrics.d.ts.map +1 -0
  97. package/dist/observability/Metrics.js +147 -0
  98. package/dist/observability/Metrics.js.map +1 -0
  99. package/dist/observability/Redaction.d.ts +8 -0
  100. package/dist/observability/Redaction.d.ts.map +1 -0
  101. package/dist/observability/Redaction.js +38 -0
  102. package/dist/observability/Redaction.js.map +1 -0
  103. package/dist/observability/StreamRecorder.d.ts +9 -0
  104. package/dist/observability/StreamRecorder.d.ts.map +1 -0
  105. package/dist/observability/StreamRecorder.js +10 -0
  106. package/dist/observability/StreamRecorder.js.map +1 -0
  107. package/dist/observability/StructuredLogger.d.ts +31 -0
  108. package/dist/observability/StructuredLogger.d.ts.map +1 -0
  109. package/dist/observability/StructuredLogger.js +34 -0
  110. package/dist/observability/StructuredLogger.js.map +1 -0
  111. package/dist/observability/Tracing.d.ts +38 -0
  112. package/dist/observability/Tracing.d.ts.map +1 -0
  113. package/dist/observability/Tracing.js +75 -0
  114. package/dist/observability/Tracing.js.map +1 -0
  115. package/dist/providers/AnthropicModels.d.ts +95 -0
  116. package/dist/providers/AnthropicModels.d.ts.map +1 -0
  117. package/dist/providers/AnthropicModels.js +83 -0
  118. package/dist/providers/AnthropicModels.js.map +1 -0
  119. package/dist/providers/AnthropicProvider.d.ts +13 -0
  120. package/dist/providers/AnthropicProvider.d.ts.map +1 -0
  121. package/dist/providers/AnthropicProvider.js +177 -0
  122. package/dist/providers/AnthropicProvider.js.map +1 -0
  123. package/dist/providers/AntigravityConnector.d.ts +7 -0
  124. package/dist/providers/AntigravityConnector.d.ts.map +1 -0
  125. package/dist/providers/AntigravityConnector.js +52 -0
  126. package/dist/providers/AntigravityConnector.js.map +1 -0
  127. package/dist/providers/ClaudeAgentSession.d.ts +11 -0
  128. package/dist/providers/ClaudeAgentSession.d.ts.map +1 -0
  129. package/dist/providers/ClaudeAgentSession.js +158 -0
  130. package/dist/providers/ClaudeAgentSession.js.map +1 -0
  131. package/dist/providers/ClaudeCliConnector.d.ts +9 -0
  132. package/dist/providers/ClaudeCliConnector.d.ts.map +1 -0
  133. package/dist/providers/ClaudeCliConnector.js +123 -0
  134. package/dist/providers/ClaudeCliConnector.js.map +1 -0
  135. package/dist/providers/CliSupport.d.ts +21 -0
  136. package/dist/providers/CliSupport.d.ts.map +1 -0
  137. package/dist/providers/CliSupport.js +62 -0
  138. package/dist/providers/CliSupport.js.map +1 -0
  139. package/dist/providers/CodexConnector.d.ts +12 -0
  140. package/dist/providers/CodexConnector.d.ts.map +1 -0
  141. package/dist/providers/CodexConnector.js +175 -0
  142. package/dist/providers/CodexConnector.js.map +1 -0
  143. package/dist/providers/ConnectorFactories.d.ts +15 -0
  144. package/dist/providers/ConnectorFactories.d.ts.map +1 -0
  145. package/dist/providers/ConnectorFactories.js +74 -0
  146. package/dist/providers/ConnectorFactories.js.map +1 -0
  147. package/dist/providers/CopilotConnector.d.ts +6 -0
  148. package/dist/providers/CopilotConnector.d.ts.map +1 -0
  149. package/dist/providers/CopilotConnector.js +35 -0
  150. package/dist/providers/CopilotConnector.js.map +1 -0
  151. package/dist/providers/CursorConnector.d.ts +8 -0
  152. package/dist/providers/CursorConnector.d.ts.map +1 -0
  153. package/dist/providers/CursorConnector.js +82 -0
  154. package/dist/providers/CursorConnector.js.map +1 -0
  155. package/dist/providers/GeminiApiProvider.d.ts +9 -0
  156. package/dist/providers/GeminiApiProvider.d.ts.map +1 -0
  157. package/dist/providers/GeminiApiProvider.js +181 -0
  158. package/dist/providers/GeminiApiProvider.js.map +1 -0
  159. package/dist/providers/GeminiCliProvider.d.ts +106 -0
  160. package/dist/providers/GeminiCliProvider.d.ts.map +1 -0
  161. package/dist/providers/GeminiCliProvider.js +596 -0
  162. package/dist/providers/GeminiCliProvider.js.map +1 -0
  163. package/dist/providers/GeminiModels.d.ts +92 -0
  164. package/dist/providers/GeminiModels.d.ts.map +1 -0
  165. package/dist/providers/GeminiModels.js +80 -0
  166. package/dist/providers/GeminiModels.js.map +1 -0
  167. package/dist/providers/GrokCliConnector.d.ts +8 -0
  168. package/dist/providers/GrokCliConnector.d.ts.map +1 -0
  169. package/dist/providers/GrokCliConnector.js +82 -0
  170. package/dist/providers/GrokCliConnector.js.map +1 -0
  171. package/dist/providers/LmStudioModels.d.ts +114 -0
  172. package/dist/providers/LmStudioModels.d.ts.map +1 -0
  173. package/dist/providers/LmStudioModels.js +102 -0
  174. package/dist/providers/LmStudioModels.js.map +1 -0
  175. package/dist/providers/LmStudioProvider.d.ts +13 -0
  176. package/dist/providers/LmStudioProvider.d.ts.map +1 -0
  177. package/dist/providers/LmStudioProvider.js +158 -0
  178. package/dist/providers/LmStudioProvider.js.map +1 -0
  179. package/dist/providers/MockProvider.d.ts +6 -0
  180. package/dist/providers/MockProvider.d.ts.map +1 -0
  181. package/dist/providers/MockProvider.js +271 -0
  182. package/dist/providers/MockProvider.js.map +1 -0
  183. package/dist/providers/OllamaModels.d.ts +68 -0
  184. package/dist/providers/OllamaModels.d.ts.map +1 -0
  185. package/dist/providers/OllamaModels.js +59 -0
  186. package/dist/providers/OllamaModels.js.map +1 -0
  187. package/dist/providers/OllamaProvider.d.ts +7 -0
  188. package/dist/providers/OllamaProvider.d.ts.map +1 -0
  189. package/dist/providers/OllamaProvider.js +134 -0
  190. package/dist/providers/OllamaProvider.js.map +1 -0
  191. package/dist/providers/OpenAIModels.d.ts +139 -0
  192. package/dist/providers/OpenAIModels.d.ts.map +1 -0
  193. package/dist/providers/OpenAIModels.js +123 -0
  194. package/dist/providers/OpenAIModels.js.map +1 -0
  195. package/dist/providers/OpenAIProvider.d.ts +9 -0
  196. package/dist/providers/OpenAIProvider.d.ts.map +1 -0
  197. package/dist/providers/OpenAIProvider.js +185 -0
  198. package/dist/providers/OpenAIProvider.js.map +1 -0
  199. package/dist/providers/OpenCodeCliConnector.d.ts +8 -0
  200. package/dist/providers/OpenCodeCliConnector.d.ts.map +1 -0
  201. package/dist/providers/OpenCodeCliConnector.js +93 -0
  202. package/dist/providers/OpenCodeCliConnector.js.map +1 -0
  203. package/dist/providers/OpenCodeModels.d.ts +61 -0
  204. package/dist/providers/OpenCodeModels.d.ts.map +1 -0
  205. package/dist/providers/OpenCodeModels.js +53 -0
  206. package/dist/providers/OpenCodeModels.js.map +1 -0
  207. package/dist/providers/OpenCodeProvider.d.ts +10 -0
  208. package/dist/providers/OpenCodeProvider.d.ts.map +1 -0
  209. package/dist/providers/OpenCodeProvider.js +154 -0
  210. package/dist/providers/OpenCodeProvider.js.map +1 -0
  211. package/dist/providers/PiConnector.d.ts +8 -0
  212. package/dist/providers/PiConnector.d.ts.map +1 -0
  213. package/dist/providers/PiConnector.js +99 -0
  214. package/dist/providers/PiConnector.js.map +1 -0
  215. package/dist/tools/Tool.d.ts +83 -0
  216. package/dist/tools/Tool.d.ts.map +1 -0
  217. package/dist/tools/Tool.js +278 -0
  218. package/dist/tools/Tool.js.map +1 -0
  219. package/dist/tools/ToolCallingExecutor.d.ts +18 -0
  220. package/dist/tools/ToolCallingExecutor.d.ts.map +1 -0
  221. package/dist/tools/ToolCallingExecutor.js +64 -0
  222. package/dist/tools/ToolCallingExecutor.js.map +1 -0
  223. package/dist/tools/ToolRegistry.d.ts +45 -0
  224. package/dist/tools/ToolRegistry.d.ts.map +1 -0
  225. package/dist/tools/ToolRegistry.js +133 -0
  226. package/dist/tools/ToolRegistry.js.map +1 -0
  227. package/package.json +105 -0
  228. package/src/.gitkeep +1 -0
  229. package/src/AgentSession.ts +69 -0
  230. package/src/Capability.ts +240 -0
  231. package/src/Connector.ts +220 -0
  232. package/src/ConnectorConfig.ts +146 -0
  233. package/src/ConnectorRegistry.ts +184 -0
  234. package/src/ContextManagement.ts +372 -0
  235. package/src/Conversation.ts +21 -0
  236. package/src/Errors.ts +87 -0
  237. package/src/HttpClient.ts +202 -0
  238. package/src/LlmService.ts +45 -0
  239. package/src/Models.ts +250 -0
  240. package/src/ProcessExecutor.ts +157 -0
  241. package/src/RateLimiter.ts +238 -0
  242. package/src/Streaming.ts +164 -0
  243. package/src/StructuredOutput.ts +138 -0
  244. package/src/TemporaryFiles.ts +51 -0
  245. package/src/UsageLimits.ts +242 -0
  246. package/src/eval/Checks.ts +68 -0
  247. package/src/eval/Eval.ts +112 -0
  248. package/src/eval/EvalSuite.ts +63 -0
  249. package/src/eval/Evaluator.ts +31 -0
  250. package/src/eval/Judge.ts +92 -0
  251. package/src/observability/MeteredLlmService.ts +156 -0
  252. package/src/observability/Metrics.ts +195 -0
  253. package/src/observability/Redaction.ts +55 -0
  254. package/src/observability/StreamRecorder.ts +32 -0
  255. package/src/observability/StructuredLogger.ts +62 -0
  256. package/src/observability/Tracing.ts +141 -0
  257. package/src/providers/AnthropicModels.ts +96 -0
  258. package/src/providers/AnthropicProvider.ts +320 -0
  259. package/src/providers/AntigravityConnector.ts +77 -0
  260. package/src/providers/ClaudeAgentSession.ts +226 -0
  261. package/src/providers/ClaudeCliConnector.ts +201 -0
  262. package/src/providers/CliSupport.ts +100 -0
  263. package/src/providers/CodexConnector.ts +251 -0
  264. package/src/providers/ConnectorFactories.ts +142 -0
  265. package/src/providers/CopilotConnector.ts +47 -0
  266. package/src/providers/CursorConnector.ts +120 -0
  267. package/src/providers/GeminiApiProvider.ts +337 -0
  268. package/src/providers/GeminiCliProvider.ts +793 -0
  269. package/src/providers/GeminiModels.ts +97 -0
  270. package/src/providers/GrokCliConnector.ts +117 -0
  271. package/src/providers/LmStudioModels.ts +117 -0
  272. package/src/providers/LmStudioProvider.ts +260 -0
  273. package/src/providers/MockProvider.ts +322 -0
  274. package/src/providers/OllamaModels.ts +64 -0
  275. package/src/providers/OllamaProvider.ts +236 -0
  276. package/src/providers/OpenAIModels.ts +152 -0
  277. package/src/providers/OpenAIProvider.ts +331 -0
  278. package/src/providers/OpenCodeCliConnector.ts +135 -0
  279. package/src/providers/OpenCodeModels.ts +60 -0
  280. package/src/providers/OpenCodeProvider.ts +278 -0
  281. package/src/providers/PiConnector.ts +142 -0
  282. package/src/tools/Tool.ts +379 -0
  283. package/src/tools/ToolCallingExecutor.ts +106 -0
  284. 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"}
@@ -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":"AAAA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,gBAAgB,EAAiB,CAAC,eAAe,EAAE;IAC3F,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;CAC3C,CAAC;CAAG;AAEL,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,gBAAgB,EAAmB,CAAC,iBAAiB,EAAE;IACjG,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC;IAC/C,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAEL,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,gBAAgB,EAAuB,CACrF,qBAAqB,EACrB;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CACF;CAAG;AAEJ,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,gBAAgB,EAAuB,CACrF,qBAAqB,EACrB;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CACF;CAAG;AAEJ,MAAM,OAAO,UAAW,SAAQ,MAAM,CAAC,gBAAgB,EAAc,CAAC,YAAY,EAAE;IAClF,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,GAAG,EAAE,MAAM,CAAC,MAAM;CACnB,CAAC;CAAG;AAEL,MAAM,OAAO,SAAU,SAAQ,MAAM,CAAC,gBAAgB,EAAa,CAAC,WAAW,EAAE;IAC/E,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CAAC;IACA,IAAI,OAAO;QACT,OAAO,SAAS,IAAI,CAAC,QAAQ,aAAa,IAAI,CAAC,MAAM,EAAE,CAAA;IACzD,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,MAAM,CAAC,gBAAgB,EAAe,CAAC,aAAa,EAAE;IACrF,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAEL,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,gBAAgB,EAAkB,CAAC,gBAAgB,EAAE;IAC9F,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;CAChD,CAAC;IACA,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,UAAU,KAAK,SAAS;YAClC,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,6BAA6B,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAA;IACrE,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,gBAAgB,EAAgB,CAAC,cAAc,EAAE;IACxF,QAAQ,EAAE,MAAM,CAAC,QAAQ;CAC1B,CAAC;IACA,IAAI,OAAO;QACT,OAAO,mBAAmB,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC5D,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,gBAAgB,EAAkB,CAAC,gBAAgB,EAAE;IAC9F,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC;CACtC,CAAC;IACA,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS;YAC7B,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,4BAA4B,IAAI,CAAC,KAAK,UAAU,CAAA;IACtD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;IACnC,aAAa;IACb,eAAe;IACf,mBAAmB;IACnB,mBAAmB;IACnB,UAAU;IACV,SAAS;IACT,WAAW;IACX,cAAc;IACd,YAAY;IACZ,cAAc;CACf,CAAC,CAAA"}
@@ -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,4 @@
1
+ import * as Context from "effect/Context";
2
+ export class LlmService extends Context.Service()("@llm4ts/core/LlmService") {
3
+ }
4
+ //# sourceMappingURL=LlmService.js.map
@@ -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"}