@blockrun/clawrouter 0.12.102 → 0.12.104

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 (283) hide show
  1. package/dist/cli.d.ts +0 -15
  2. package/dist/cli.js +80068 -407
  3. package/dist/cli.js.map +1 -1
  4. package/dist/index.d.ts +1406 -34
  5. package/dist/index.js +81085 -1075
  6. package/dist/index.js.map +1 -1
  7. package/package.json +1 -1
  8. package/scripts/reinstall.sh +43 -7
  9. package/scripts/update.sh +35 -1
  10. package/dist/auth.d.ts +0 -82
  11. package/dist/auth.d.ts.map +0 -1
  12. package/dist/auth.js +0 -388
  13. package/dist/auth.js.map +0 -1
  14. package/dist/balance.d.ts +0 -97
  15. package/dist/balance.d.ts.map +0 -1
  16. package/dist/balance.js +0 -157
  17. package/dist/balance.js.map +0 -1
  18. package/dist/cli.d.ts.map +0 -1
  19. package/dist/compression/codebook.d.ts +0 -24
  20. package/dist/compression/codebook.d.ts.map +0 -1
  21. package/dist/compression/codebook.js +0 -119
  22. package/dist/compression/codebook.js.map +0 -1
  23. package/dist/compression/index.d.ts +0 -33
  24. package/dist/compression/index.d.ts.map +0 -1
  25. package/dist/compression/index.js +0 -246
  26. package/dist/compression/index.js.map +0 -1
  27. package/dist/compression/layers/deduplication.d.ts +0 -28
  28. package/dist/compression/layers/deduplication.d.ts.map +0 -1
  29. package/dist/compression/layers/deduplication.js +0 -101
  30. package/dist/compression/layers/deduplication.js.map +0 -1
  31. package/dist/compression/layers/dictionary.d.ts +0 -21
  32. package/dist/compression/layers/dictionary.d.ts.map +0 -1
  33. package/dist/compression/layers/dictionary.js +0 -73
  34. package/dist/compression/layers/dictionary.js.map +0 -1
  35. package/dist/compression/layers/dynamic-codebook.d.ts +0 -26
  36. package/dist/compression/layers/dynamic-codebook.d.ts.map +0 -1
  37. package/dist/compression/layers/dynamic-codebook.js +0 -149
  38. package/dist/compression/layers/dynamic-codebook.js.map +0 -1
  39. package/dist/compression/layers/json-compact.d.ts +0 -23
  40. package/dist/compression/layers/json-compact.d.ts.map +0 -1
  41. package/dist/compression/layers/json-compact.js +0 -79
  42. package/dist/compression/layers/json-compact.js.map +0 -1
  43. package/dist/compression/layers/observation.d.ts +0 -21
  44. package/dist/compression/layers/observation.d.ts.map +0 -1
  45. package/dist/compression/layers/observation.js +0 -130
  46. package/dist/compression/layers/observation.js.map +0 -1
  47. package/dist/compression/layers/paths.d.ts +0 -24
  48. package/dist/compression/layers/paths.d.ts.map +0 -1
  49. package/dist/compression/layers/paths.js +0 -110
  50. package/dist/compression/layers/paths.js.map +0 -1
  51. package/dist/compression/layers/whitespace.d.ts +0 -27
  52. package/dist/compression/layers/whitespace.d.ts.map +0 -1
  53. package/dist/compression/layers/whitespace.js +0 -60
  54. package/dist/compression/layers/whitespace.js.map +0 -1
  55. package/dist/compression/types.d.ts +0 -84
  56. package/dist/compression/types.d.ts.map +0 -1
  57. package/dist/compression/types.js +0 -27
  58. package/dist/compression/types.js.map +0 -1
  59. package/dist/config.d.ts +0 -12
  60. package/dist/config.d.ts.map +0 -1
  61. package/dist/config.js +0 -22
  62. package/dist/config.js.map +0 -1
  63. package/dist/dedup.d.ts +0 -34
  64. package/dist/dedup.d.ts.map +0 -1
  65. package/dist/dedup.js +0 -150
  66. package/dist/dedup.js.map +0 -1
  67. package/dist/doctor.d.ts +0 -8
  68. package/dist/doctor.d.ts.map +0 -1
  69. package/dist/doctor.js +0 -375
  70. package/dist/doctor.js.map +0 -1
  71. package/dist/error-classification.test.d.ts +0 -2
  72. package/dist/error-classification.test.d.ts.map +0 -1
  73. package/dist/error-classification.test.js +0 -59
  74. package/dist/error-classification.test.js.map +0 -1
  75. package/dist/errors.d.ts +0 -54
  76. package/dist/errors.d.ts.map +0 -1
  77. package/dist/errors.js +0 -85
  78. package/dist/errors.js.map +0 -1
  79. package/dist/exclude-models.d.ts +0 -28
  80. package/dist/exclude-models.d.ts.map +0 -1
  81. package/dist/exclude-models.integration.test.d.ts +0 -2
  82. package/dist/exclude-models.integration.test.d.ts.map +0 -1
  83. package/dist/exclude-models.integration.test.js +0 -46
  84. package/dist/exclude-models.integration.test.js.map +0 -1
  85. package/dist/exclude-models.js +0 -70
  86. package/dist/exclude-models.js.map +0 -1
  87. package/dist/exclude-models.test.d.ts +0 -5
  88. package/dist/exclude-models.test.d.ts.map +0 -1
  89. package/dist/exclude-models.test.js +0 -95
  90. package/dist/exclude-models.test.js.map +0 -1
  91. package/dist/fs-read.d.ts +0 -11
  92. package/dist/fs-read.d.ts.map +0 -1
  93. package/dist/fs-read.js +0 -47
  94. package/dist/fs-read.js.map +0 -1
  95. package/dist/index.d.ts.map +0 -1
  96. package/dist/journal.d.ts +0 -67
  97. package/dist/journal.d.ts.map +0 -1
  98. package/dist/journal.js +0 -184
  99. package/dist/journal.js.map +0 -1
  100. package/dist/journal.test.d.ts +0 -2
  101. package/dist/journal.test.d.ts.map +0 -1
  102. package/dist/journal.test.js +0 -201
  103. package/dist/journal.test.js.map +0 -1
  104. package/dist/logger.d.ts +0 -33
  105. package/dist/logger.d.ts.map +0 -1
  106. package/dist/logger.js +0 -35
  107. package/dist/logger.js.map +0 -1
  108. package/dist/models.d.ts +0 -107
  109. package/dist/models.d.ts.map +0 -1
  110. package/dist/models.js +0 -941
  111. package/dist/models.js.map +0 -1
  112. package/dist/models.test.d.ts +0 -2
  113. package/dist/models.test.d.ts.map +0 -1
  114. package/dist/models.test.js +0 -38
  115. package/dist/models.test.js.map +0 -1
  116. package/dist/partners/index.d.ts +0 -8
  117. package/dist/partners/index.d.ts.map +0 -1
  118. package/dist/partners/index.js +0 -6
  119. package/dist/partners/index.js.map +0 -1
  120. package/dist/partners/registry.d.ts +0 -51
  121. package/dist/partners/registry.d.ts.map +0 -1
  122. package/dist/partners/registry.js +0 -256
  123. package/dist/partners/registry.js.map +0 -1
  124. package/dist/partners/tools.d.ts +0 -24
  125. package/dist/partners/tools.d.ts.map +0 -1
  126. package/dist/partners/tools.js +0 -97
  127. package/dist/partners/tools.js.map +0 -1
  128. package/dist/payment-preauth.d.ts +0 -17
  129. package/dist/payment-preauth.d.ts.map +0 -1
  130. package/dist/payment-preauth.js +0 -102
  131. package/dist/payment-preauth.js.map +0 -1
  132. package/dist/provider.d.ts +0 -19
  133. package/dist/provider.d.ts.map +0 -1
  134. package/dist/provider.js +0 -45
  135. package/dist/provider.js.map +0 -1
  136. package/dist/proxy.d.ts +0 -210
  137. package/dist/proxy.d.ts.map +0 -1
  138. package/dist/proxy.debrand.test.d.ts +0 -2
  139. package/dist/proxy.debrand.test.d.ts.map +0 -1
  140. package/dist/proxy.debrand.test.js +0 -101
  141. package/dist/proxy.debrand.test.js.map +0 -1
  142. package/dist/proxy.degraded-response.test.d.ts +0 -2
  143. package/dist/proxy.degraded-response.test.d.ts.map +0 -1
  144. package/dist/proxy.degraded-response.test.js +0 -105
  145. package/dist/proxy.degraded-response.test.js.map +0 -1
  146. package/dist/proxy.image-download.test.d.ts +0 -2
  147. package/dist/proxy.image-download.test.d.ts.map +0 -1
  148. package/dist/proxy.image-download.test.js +0 -92
  149. package/dist/proxy.image-download.test.js.map +0 -1
  150. package/dist/proxy.js +0 -3810
  151. package/dist/proxy.js.map +0 -1
  152. package/dist/proxy.models-endpoint.test.d.ts +0 -2
  153. package/dist/proxy.models-endpoint.test.d.ts.map +0 -1
  154. package/dist/proxy.models-endpoint.test.js +0 -19
  155. package/dist/proxy.models-endpoint.test.js.map +0 -1
  156. package/dist/proxy.multiturn-thinking.test.d.ts +0 -2
  157. package/dist/proxy.multiturn-thinking.test.d.ts.map +0 -1
  158. package/dist/proxy.multiturn-thinking.test.js +0 -82
  159. package/dist/proxy.multiturn-thinking.test.js.map +0 -1
  160. package/dist/proxy.payment-chain-reuse.test.d.ts +0 -2
  161. package/dist/proxy.payment-chain-reuse.test.d.ts.map +0 -1
  162. package/dist/proxy.payment-chain-reuse.test.js +0 -30
  163. package/dist/proxy.payment-chain-reuse.test.js.map +0 -1
  164. package/dist/proxy.solana-resilience.test.d.ts +0 -12
  165. package/dist/proxy.solana-resilience.test.d.ts.map +0 -1
  166. package/dist/proxy.solana-resilience.test.js +0 -39
  167. package/dist/proxy.solana-resilience.test.js.map +0 -1
  168. package/dist/report.d.ts +0 -6
  169. package/dist/report.d.ts.map +0 -1
  170. package/dist/report.js +0 -44
  171. package/dist/report.js.map +0 -1
  172. package/dist/response-cache.advanced.test.d.ts +0 -2
  173. package/dist/response-cache.advanced.test.d.ts.map +0 -1
  174. package/dist/response-cache.advanced.test.js +0 -566
  175. package/dist/response-cache.advanced.test.js.map +0 -1
  176. package/dist/response-cache.d.ts +0 -85
  177. package/dist/response-cache.d.ts.map +0 -1
  178. package/dist/response-cache.edge-cases.test.d.ts +0 -2
  179. package/dist/response-cache.edge-cases.test.d.ts.map +0 -1
  180. package/dist/response-cache.edge-cases.test.js +0 -488
  181. package/dist/response-cache.edge-cases.test.js.map +0 -1
  182. package/dist/response-cache.extreme.test.d.ts +0 -2
  183. package/dist/response-cache.extreme.test.d.ts.map +0 -1
  184. package/dist/response-cache.extreme.test.js +0 -561
  185. package/dist/response-cache.extreme.test.js.map +0 -1
  186. package/dist/response-cache.js +0 -240
  187. package/dist/response-cache.js.map +0 -1
  188. package/dist/response-cache.test.d.ts +0 -2
  189. package/dist/response-cache.test.d.ts.map +0 -1
  190. package/dist/response-cache.test.js +0 -242
  191. package/dist/response-cache.test.js.map +0 -1
  192. package/dist/retry.d.ts +0 -42
  193. package/dist/retry.d.ts.map +0 -1
  194. package/dist/retry.js +0 -99
  195. package/dist/retry.js.map +0 -1
  196. package/dist/router/config.d.ts +0 -11
  197. package/dist/router/config.d.ts.map +0 -1
  198. package/dist/router/config.js +0 -1215
  199. package/dist/router/config.js.map +0 -1
  200. package/dist/router/index.d.ts +0 -18
  201. package/dist/router/index.d.ts.map +0 -1
  202. package/dist/router/index.js +0 -19
  203. package/dist/router/index.js.map +0 -1
  204. package/dist/router/llm-classifier.d.ts +0 -29
  205. package/dist/router/llm-classifier.d.ts.map +0 -1
  206. package/dist/router/llm-classifier.js +0 -99
  207. package/dist/router/llm-classifier.js.map +0 -1
  208. package/dist/router/rules.d.ts +0 -12
  209. package/dist/router/rules.d.ts.map +0 -1
  210. package/dist/router/rules.js +0 -202
  211. package/dist/router/rules.js.map +0 -1
  212. package/dist/router/selector.d.ts +0 -58
  213. package/dist/router/selector.d.ts.map +0 -1
  214. package/dist/router/selector.js +0 -165
  215. package/dist/router/selector.js.map +0 -1
  216. package/dist/router/selector.test.d.ts +0 -2
  217. package/dist/router/selector.test.d.ts.map +0 -1
  218. package/dist/router/selector.test.js +0 -67
  219. package/dist/router/selector.test.js.map +0 -1
  220. package/dist/router/strategy.d.ts +0 -19
  221. package/dist/router/strategy.d.ts.map +0 -1
  222. package/dist/router/strategy.js +0 -138
  223. package/dist/router/strategy.js.map +0 -1
  224. package/dist/router/strategy.test.d.ts +0 -2
  225. package/dist/router/strategy.test.d.ts.map +0 -1
  226. package/dist/router/strategy.test.js +0 -131
  227. package/dist/router/strategy.test.js.map +0 -1
  228. package/dist/router/types.d.ts +0 -127
  229. package/dist/router/types.d.ts.map +0 -1
  230. package/dist/router/types.js +0 -11
  231. package/dist/router/types.js.map +0 -1
  232. package/dist/session.d.ts +0 -124
  233. package/dist/session.d.ts.map +0 -1
  234. package/dist/session.js +0 -256
  235. package/dist/session.js.map +0 -1
  236. package/dist/session.test.d.ts +0 -2
  237. package/dist/session.test.d.ts.map +0 -1
  238. package/dist/session.test.js +0 -163
  239. package/dist/session.test.js.map +0 -1
  240. package/dist/solana-balance.d.ts +0 -48
  241. package/dist/solana-balance.d.ts.map +0 -1
  242. package/dist/solana-balance.js +0 -142
  243. package/dist/solana-balance.js.map +0 -1
  244. package/dist/spend-control.d.ts +0 -112
  245. package/dist/spend-control.d.ts.map +0 -1
  246. package/dist/spend-control.js +0 -278
  247. package/dist/spend-control.js.map +0 -1
  248. package/dist/spend-control.test.d.ts +0 -5
  249. package/dist/spend-control.test.d.ts.map +0 -1
  250. package/dist/spend-control.test.js +0 -210
  251. package/dist/spend-control.test.js.map +0 -1
  252. package/dist/stats.d.ts +0 -64
  253. package/dist/stats.d.ts.map +0 -1
  254. package/dist/stats.js +0 -295
  255. package/dist/stats.js.map +0 -1
  256. package/dist/types.d.ts +0 -150
  257. package/dist/types.d.ts.map +0 -1
  258. package/dist/types.js +0 -9
  259. package/dist/types.js.map +0 -1
  260. package/dist/update-hint.test.d.ts +0 -9
  261. package/dist/update-hint.test.d.ts.map +0 -1
  262. package/dist/update-hint.test.js +0 -156
  263. package/dist/update-hint.test.js.map +0 -1
  264. package/dist/updater.d.ts +0 -10
  265. package/dist/updater.d.ts.map +0 -1
  266. package/dist/updater.js +0 -55
  267. package/dist/updater.js.map +0 -1
  268. package/dist/version.d.ts +0 -3
  269. package/dist/version.d.ts.map +0 -1
  270. package/dist/version.js +0 -16
  271. package/dist/version.js.map +0 -1
  272. package/dist/wallet.d.ts +0 -52
  273. package/dist/wallet.d.ts.map +0 -1
  274. package/dist/wallet.js +0 -94
  275. package/dist/wallet.js.map +0 -1
  276. package/dist/wallet.test.d.ts +0 -6
  277. package/dist/wallet.test.d.ts.map +0 -1
  278. package/dist/wallet.test.js +0 -117
  279. package/dist/wallet.test.js.map +0 -1
  280. package/dist/x402-sdk.test.d.ts +0 -6
  281. package/dist/x402-sdk.test.d.ts.map +0 -1
  282. package/dist/x402-sdk.test.js +0 -161
  283. package/dist/x402-sdk.test.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"response-cache.advanced.test.d.ts","sourceRoot":"","sources":["../src/response-cache.advanced.test.ts"],"names":[],"mappings":""}
@@ -1,566 +0,0 @@
1
- import { describe, it, expect, beforeEach, vi } from "vitest";
2
- import { ResponseCache } from "./response-cache.js";
3
- describe("ResponseCache Advanced Edge Cases", () => {
4
- let cache;
5
- beforeEach(() => {
6
- cache = new ResponseCache();
7
- });
8
- describe("OpenAI API request variations", () => {
9
- it("should differentiate requests with different temperature", () => {
10
- const body1 = JSON.stringify({
11
- model: "gpt-4",
12
- messages: [{ role: "user", content: "hello" }],
13
- temperature: 0.7,
14
- });
15
- const body2 = JSON.stringify({
16
- model: "gpt-4",
17
- messages: [{ role: "user", content: "hello" }],
18
- temperature: 0.9,
19
- });
20
- expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
21
- });
22
- it("should differentiate requests with different max_tokens", () => {
23
- const body1 = JSON.stringify({
24
- model: "gpt-4",
25
- messages: [{ role: "user", content: "hello" }],
26
- max_tokens: 100,
27
- });
28
- const body2 = JSON.stringify({
29
- model: "gpt-4",
30
- messages: [{ role: "user", content: "hello" }],
31
- max_tokens: 200,
32
- });
33
- expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
34
- });
35
- it("should differentiate requests with different seed", () => {
36
- const body1 = JSON.stringify({
37
- model: "gpt-4",
38
- messages: [{ role: "user", content: "hello" }],
39
- seed: 12345,
40
- });
41
- const body2 = JSON.stringify({
42
- model: "gpt-4",
43
- messages: [{ role: "user", content: "hello" }],
44
- seed: 67890,
45
- });
46
- expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
47
- });
48
- it("should differentiate requests with different system messages", () => {
49
- const body1 = JSON.stringify({
50
- model: "gpt-4",
51
- messages: [
52
- { role: "system", content: "You are a helpful assistant" },
53
- { role: "user", content: "hello" },
54
- ],
55
- });
56
- const body2 = JSON.stringify({
57
- model: "gpt-4",
58
- messages: [
59
- { role: "system", content: "You are a coding assistant" },
60
- { role: "user", content: "hello" },
61
- ],
62
- });
63
- expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
64
- });
65
- it("should differentiate requests with tools", () => {
66
- const body1 = JSON.stringify({
67
- model: "gpt-4",
68
- messages: [{ role: "user", content: "hello" }],
69
- tools: [{ type: "function", function: { name: "get_weather" } }],
70
- });
71
- const body2 = JSON.stringify({
72
- model: "gpt-4",
73
- messages: [{ role: "user", content: "hello" }],
74
- tools: [{ type: "function", function: { name: "search" } }],
75
- });
76
- expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
77
- });
78
- it("should differentiate requests with response_format", () => {
79
- const body1 = JSON.stringify({
80
- model: "gpt-4",
81
- messages: [{ role: "user", content: "hello" }],
82
- response_format: { type: "json_object" },
83
- });
84
- const body2 = JSON.stringify({
85
- model: "gpt-4",
86
- messages: [{ role: "user", content: "hello" }],
87
- response_format: { type: "text" },
88
- });
89
- expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
90
- });
91
- it("should handle multi-turn conversations", () => {
92
- const body = JSON.stringify({
93
- model: "gpt-4",
94
- messages: [
95
- { role: "system", content: "You are helpful" },
96
- { role: "user", content: "Hello" },
97
- { role: "assistant", content: "Hi there!" },
98
- { role: "user", content: "How are you?" },
99
- { role: "assistant", content: "I'm doing well!" },
100
- { role: "user", content: "Great!" },
101
- ],
102
- });
103
- expect(ResponseCache.generateKey(body)).toHaveLength(32);
104
- });
105
- it("should handle tool role messages", () => {
106
- const body = JSON.stringify({
107
- model: "gpt-4",
108
- messages: [
109
- { role: "user", content: "What's the weather?" },
110
- {
111
- role: "assistant",
112
- content: null,
113
- tool_calls: [
114
- {
115
- id: "call_123",
116
- type: "function",
117
- function: { name: "get_weather", arguments: "{}" },
118
- },
119
- ],
120
- },
121
- { role: "tool", tool_call_id: "call_123", content: "Sunny, 72°F" },
122
- ],
123
- });
124
- expect(ResponseCache.generateKey(body)).toHaveLength(32);
125
- });
126
- it("should handle image content (vision API)", () => {
127
- const body = JSON.stringify({
128
- model: "gpt-4-vision-preview",
129
- messages: [
130
- {
131
- role: "user",
132
- content: [
133
- { type: "text", text: "What's in this image?" },
134
- { type: "image_url", image_url: { url: "data:image/png;base64,iVBORw0KGgo..." } },
135
- ],
136
- },
137
- ],
138
- });
139
- expect(ResponseCache.generateKey(body)).toHaveLength(32);
140
- });
141
- it("should differentiate different images", () => {
142
- const body1 = JSON.stringify({
143
- model: "gpt-4-vision-preview",
144
- messages: [
145
- {
146
- role: "user",
147
- content: [{ type: "image_url", image_url: { url: "data:image/png;base64,ABC123" } }],
148
- },
149
- ],
150
- });
151
- const body2 = JSON.stringify({
152
- model: "gpt-4-vision-preview",
153
- messages: [
154
- {
155
- role: "user",
156
- content: [{ type: "image_url", image_url: { url: "data:image/png;base64,XYZ789" } }],
157
- },
158
- ],
159
- });
160
- expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
161
- });
162
- });
163
- describe("timestamp stripping edge cases", () => {
164
- it("should strip various timestamp formats", () => {
165
- const timestamps = [
166
- "[Mon 2024-01-15 10:30 PST]",
167
- "[Tue 2024-12-31 23:59 UTC]",
168
- "[Wed 2025-06-15 00:00 EST]",
169
- ];
170
- for (const ts of timestamps) {
171
- const body1 = JSON.stringify({
172
- model: "gpt-4",
173
- messages: [{ role: "user", content: `${ts} hello world` }],
174
- });
175
- const body2 = JSON.stringify({
176
- model: "gpt-4",
177
- messages: [{ role: "user", content: "hello world" }],
178
- });
179
- expect(ResponseCache.generateKey(body1)).toBe(ResponseCache.generateKey(body2));
180
- }
181
- });
182
- it("should NOT strip timestamp-like text in middle of content", () => {
183
- const body1 = JSON.stringify({
184
- model: "gpt-4",
185
- messages: [{ role: "user", content: "Meeting at [Mon 2024-01-15 10:30 PST] confirmed" }],
186
- });
187
- const body2 = JSON.stringify({
188
- model: "gpt-4",
189
- messages: [{ role: "user", content: "Meeting at confirmed" }],
190
- });
191
- // Should NOT be equal - only strips from beginning
192
- expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
193
- });
194
- it("should handle content that looks like timestamp but isn't", () => {
195
- const body = JSON.stringify({
196
- model: "gpt-4",
197
- messages: [{ role: "user", content: "[Not a timestamp] hello" }],
198
- });
199
- expect(ResponseCache.generateKey(body)).toHaveLength(32);
200
- });
201
- });
202
- describe("model name variations", () => {
203
- it("should differentiate provider-prefixed models", () => {
204
- const body1 = JSON.stringify({
205
- model: "openai/gpt-4",
206
- messages: [{ role: "user", content: "hello" }],
207
- });
208
- const body2 = JSON.stringify({
209
- model: "gpt-4",
210
- messages: [{ role: "user", content: "hello" }],
211
- });
212
- expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
213
- });
214
- it("should handle model with version suffix", () => {
215
- const body1 = JSON.stringify({
216
- model: "gpt-4-0125-preview",
217
- messages: [{ role: "user", content: "hello" }],
218
- });
219
- const body2 = JSON.stringify({
220
- model: "gpt-4-1106-preview",
221
- messages: [{ role: "user", content: "hello" }],
222
- });
223
- expect(ResponseCache.generateKey(body1)).not.toBe(ResponseCache.generateKey(body2));
224
- });
225
- });
226
- describe("concurrent operations simulation", () => {
227
- it("should handle rapid interleaved operations", async () => {
228
- const operations = [];
229
- for (let i = 0; i < 100; i++) {
230
- operations.push((async () => {
231
- const key = `key-${i % 20}`;
232
- cache.set(key, {
233
- body: Buffer.from(`value-${i}`),
234
- status: 200,
235
- headers: {},
236
- model: "gpt-4",
237
- });
238
- cache.get(key);
239
- if (i % 10 === 0) {
240
- cache.getStats();
241
- }
242
- })());
243
- }
244
- await Promise.all(operations);
245
- expect(cache.getStats().size).toBeGreaterThan(0);
246
- });
247
- it("should handle set-get-clear cycles", () => {
248
- for (let cycle = 0; cycle < 10; cycle++) {
249
- // Fill cache
250
- for (let i = 0; i < 50; i++) {
251
- cache.set(`cycle-${cycle}-key-${i}`, {
252
- body: Buffer.from(`value-${i}`),
253
- status: 200,
254
- headers: {},
255
- model: "gpt-4",
256
- });
257
- }
258
- // Read some
259
- for (let i = 0; i < 25; i++) {
260
- cache.get(`cycle-${cycle}-key-${i}`);
261
- }
262
- // Clear
263
- cache.clear();
264
- expect(cache.getStats().size).toBe(0);
265
- }
266
- });
267
- });
268
- describe("heap integrity under stress", () => {
269
- it("should maintain heap integrity with many expirations", () => {
270
- vi.useFakeTimers();
271
- // Add items with varying TTLs
272
- for (let i = 0; i < 100; i++) {
273
- cache.set(`key-${i}`, {
274
- body: Buffer.from(`value-${i}`),
275
- status: 200,
276
- headers: {},
277
- model: "gpt-4",
278
- }, i + 1);
279
- }
280
- expect(cache.getStats().size).toBe(100);
281
- // Expire items with TTL <= 50 seconds
282
- // Need to advance 51 seconds because expiration check is `>` not `>=`
283
- vi.advanceTimersByTime(51 * 1000);
284
- // Items with TTL > 51 should still exist (key-51 to key-99)
285
- for (let i = 51; i < 100; i++) {
286
- expect(cache.get(`key-${i}`)).toBeDefined();
287
- }
288
- // Items with TTL <= 50 should be expired (key-0 to key-49)
289
- for (let i = 0; i < 50; i++) {
290
- expect(cache.get(`key-${i}`)).toBeUndefined();
291
- }
292
- vi.useRealTimers();
293
- });
294
- it("should handle updating same key with different TTLs", () => {
295
- vi.useFakeTimers();
296
- // Set with short TTL
297
- cache.set("key", { body: Buffer.from("v1"), status: 200, headers: {}, model: "gpt-4" }, 10);
298
- // Update with longer TTL
299
- cache.set("key", { body: Buffer.from("v2"), status: 200, headers: {}, model: "gpt-4" }, 100);
300
- // Advance past first TTL
301
- vi.advanceTimersByTime(50 * 1000);
302
- // Should still exist with new TTL
303
- const cached = cache.get("key");
304
- expect(cached).toBeDefined();
305
- expect(cached.body.toString()).toBe("v2");
306
- vi.useRealTimers();
307
- });
308
- });
309
- describe("response body edge cases", () => {
310
- it("should handle streaming-style chunks", () => {
311
- // Simulating SSE data
312
- const sseData = `data: {"choices":[{"delta":{"content":"Hello"}}]}\n\ndata: {"choices":[{"delta":{"content":" world"}}]}\n\ndata: [DONE]\n\n`;
313
- cache.set("sse", {
314
- body: Buffer.from(sseData),
315
- status: 200,
316
- headers: { "content-type": "text/event-stream" },
317
- model: "gpt-4",
318
- });
319
- const cached = cache.get("sse");
320
- expect(cached.body.toString()).toBe(sseData);
321
- });
322
- it("should handle gzipped response body", () => {
323
- // Simulated gzip data (just random bytes)
324
- const gzipData = Buffer.from([0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00]);
325
- cache.set("gzip", {
326
- body: gzipData,
327
- status: 200,
328
- headers: { "content-encoding": "gzip" },
329
- model: "gpt-4",
330
- });
331
- expect(cache.get("gzip").body).toEqual(gzipData);
332
- });
333
- it("should handle response with null bytes", () => {
334
- const nullBytes = Buffer.from([0x00, 0x01, 0x00, 0x02, 0x00]);
335
- cache.set("null-bytes", {
336
- body: nullBytes,
337
- status: 200,
338
- headers: {},
339
- model: "gpt-4",
340
- });
341
- expect(cache.get("null-bytes").body).toEqual(nullBytes);
342
- });
343
- it("should handle very large JSON response", () => {
344
- const largeArray = Array(1000).fill({ text: "a".repeat(100) });
345
- const largeResponse = JSON.stringify({ data: largeArray });
346
- cache.set("large-json", {
347
- body: Buffer.from(largeResponse),
348
- status: 200,
349
- headers: {},
350
- model: "gpt-4",
351
- });
352
- const cached = cache.get("large-json");
353
- expect(cached).toBeDefined();
354
- expect(JSON.parse(cached.body.toString()).data.length).toBe(1000);
355
- });
356
- });
357
- describe("header edge cases", () => {
358
- it("should handle headers with array values (converted to string)", () => {
359
- cache.set("array-header", {
360
- body: Buffer.from("test"),
361
- status: 200,
362
- headers: { "set-cookie": "a=1; b=2" }, // Normally could be array
363
- model: "gpt-4",
364
- });
365
- expect(cache.get("array-header")).toBeDefined();
366
- });
367
- it("should handle empty header values", () => {
368
- cache.set("empty-headers", {
369
- body: Buffer.from("test"),
370
- status: 200,
371
- headers: { "x-empty": "", "x-null-ish": "null", "x-undefined-ish": "undefined" },
372
- model: "gpt-4",
373
- });
374
- const cached = cache.get("empty-headers");
375
- expect(cached.headers["x-empty"]).toBe("");
376
- });
377
- it("should handle rate limit headers", () => {
378
- cache.set("rate-limit", {
379
- body: Buffer.from("test"),
380
- status: 200,
381
- headers: {
382
- "x-ratelimit-limit-requests": "10000",
383
- "x-ratelimit-remaining-requests": "9999",
384
- "x-ratelimit-reset-requests": "1s",
385
- },
386
- model: "gpt-4",
387
- });
388
- expect(cache.get("rate-limit")).toBeDefined();
389
- });
390
- });
391
- describe("shouldCache with various body formats", () => {
392
- it("should handle body with nested cache:false", () => {
393
- const body = JSON.stringify({
394
- model: "gpt-4",
395
- messages: [{ role: "user", content: "hello" }],
396
- metadata: { cache: false }, // Nested - should NOT disable caching
397
- });
398
- expect(cache.shouldCache(body)).toBe(true);
399
- });
400
- it("should handle body with cache:true explicitly", () => {
401
- const body = JSON.stringify({
402
- model: "gpt-4",
403
- messages: [],
404
- cache: true,
405
- });
406
- expect(cache.shouldCache(body)).toBe(true);
407
- });
408
- it("should handle body with both cache and no_cache", () => {
409
- const body = JSON.stringify({
410
- model: "gpt-4",
411
- messages: [],
412
- cache: true,
413
- no_cache: true, // Conflicting - no_cache wins
414
- });
415
- expect(cache.shouldCache(body)).toBe(false);
416
- });
417
- it("should handle body with cache:0 (falsy but not false)", () => {
418
- const body = JSON.stringify({
419
- model: "gpt-4",
420
- messages: [],
421
- cache: 0,
422
- });
423
- // cache: 0 is falsy but !== false
424
- expect(cache.shouldCache(body)).toBe(true);
425
- });
426
- it("should handle body with cache:'false' (string)", () => {
427
- const body = JSON.stringify({
428
- model: "gpt-4",
429
- messages: [],
430
- cache: "false",
431
- });
432
- // cache: "false" is truthy string, not boolean false
433
- expect(cache.shouldCache(body)).toBe(true);
434
- });
435
- });
436
- describe("stats edge cases", () => {
437
- it("should handle very high hit/miss counts", () => {
438
- // Simulate many operations
439
- for (let i = 0; i < 10000; i++) {
440
- cache.get(`miss-${i}`); // All misses
441
- }
442
- cache.set("hit-key", {
443
- body: Buffer.from("test"),
444
- status: 200,
445
- headers: {},
446
- model: "gpt-4",
447
- });
448
- for (let i = 0; i < 10000; i++) {
449
- cache.get("hit-key"); // All hits
450
- }
451
- const stats = cache.getStats();
452
- expect(stats.misses).toBe(10000);
453
- expect(stats.hits).toBe(10000);
454
- expect(stats.hitRate).toBe("50.0%");
455
- });
456
- it("should handle stats after clear", () => {
457
- cache.set("key", {
458
- body: Buffer.from("test"),
459
- status: 200,
460
- headers: {},
461
- model: "gpt-4",
462
- });
463
- cache.get("key");
464
- cache.get("key");
465
- cache.clear();
466
- // Stats should persist after clear
467
- const stats = cache.getStats();
468
- expect(stats.hits).toBe(2);
469
- expect(stats.size).toBe(0);
470
- });
471
- });
472
- describe("eviction edge cases", () => {
473
- it("should handle eviction when all items have same TTL", () => {
474
- const smallCache = new ResponseCache({ maxSize: 5, defaultTTL: 600 });
475
- for (let i = 0; i < 10; i++) {
476
- smallCache.set(`key-${i}`, {
477
- body: Buffer.from(`value-${i}`),
478
- status: 200,
479
- headers: {},
480
- model: "gpt-4",
481
- });
482
- }
483
- // Should have evicted oldest entries
484
- expect(smallCache.getStats().size).toBeLessThanOrEqual(5);
485
- expect(smallCache.getStats().evictions).toBeGreaterThan(0);
486
- });
487
- it("should prefer evicting expired items over non-expired", () => {
488
- vi.useFakeTimers();
489
- const smallCache = new ResponseCache({ maxSize: 3 });
490
- // Add item with short TTL
491
- smallCache.set("short-ttl", { body: Buffer.from("short"), status: 200, headers: {}, model: "gpt-4" }, 1);
492
- // Add items with long TTL
493
- smallCache.set("long-ttl-1", { body: Buffer.from("long1"), status: 200, headers: {}, model: "gpt-4" }, 600);
494
- smallCache.set("long-ttl-2", { body: Buffer.from("long2"), status: 200, headers: {}, model: "gpt-4" }, 600);
495
- // Expire short TTL item
496
- vi.advanceTimersByTime(2000);
497
- // Add new item - should evict expired one first
498
- smallCache.set("new", { body: Buffer.from("new"), status: 200, headers: {}, model: "gpt-4" }, 600);
499
- // Long TTL items should still exist
500
- expect(smallCache.get("long-ttl-1")).toBeDefined();
501
- expect(smallCache.get("long-ttl-2")).toBeDefined();
502
- expect(smallCache.get("new")).toBeDefined();
503
- vi.useRealTimers();
504
- });
505
- });
506
- describe("JSON parsing edge cases in generateKey", () => {
507
- it("should handle deeply nested objects", () => {
508
- let nested = { value: "deep" };
509
- for (let i = 0; i < 50; i++) {
510
- nested = { nested };
511
- }
512
- const body = JSON.stringify({
513
- model: "gpt-4",
514
- messages: [{ role: "user", content: "test" }],
515
- metadata: nested,
516
- });
517
- expect(ResponseCache.generateKey(body)).toHaveLength(32);
518
- });
519
- it("should handle arrays with mixed types", () => {
520
- const body = JSON.stringify({
521
- model: "gpt-4",
522
- messages: [{ role: "user", content: [1, "two", true, null, { nested: "obj" }, [1, 2, 3]] }],
523
- });
524
- expect(ResponseCache.generateKey(body)).toHaveLength(32);
525
- });
526
- it("should handle numeric string keys", () => {
527
- const body = JSON.stringify({
528
- model: "gpt-4",
529
- "123": "numeric key",
530
- messages: [],
531
- });
532
- expect(ResponseCache.generateKey(body)).toHaveLength(32);
533
- });
534
- it("should handle escaped characters in strings", () => {
535
- const body = JSON.stringify({
536
- model: "gpt-4",
537
- messages: [{ role: "user", content: 'Line1\\nLine2\\t"quoted"' }],
538
- });
539
- expect(ResponseCache.generateKey(body)).toHaveLength(32);
540
- });
541
- });
542
- describe("disabled cache behavior", () => {
543
- it("should not store anything when disabled", () => {
544
- const disabled = new ResponseCache({ enabled: false });
545
- disabled.set("key", {
546
- body: Buffer.from("test"),
547
- status: 200,
548
- headers: {},
549
- model: "gpt-4",
550
- });
551
- expect(disabled.get("key")).toBeUndefined();
552
- expect(disabled.getStats().size).toBe(0);
553
- });
554
- it("should return false for shouldCache when disabled", () => {
555
- const disabled = new ResponseCache({ enabled: false });
556
- expect(disabled.shouldCache(JSON.stringify({ model: "gpt-4" }))).toBe(false);
557
- });
558
- it("should still track stats when disabled", () => {
559
- const disabled = new ResponseCache({ enabled: false });
560
- disabled.get("miss1");
561
- disabled.get("miss2");
562
- expect(disabled.getStats().misses).toBe(2);
563
- });
564
- });
565
- });
566
- //# sourceMappingURL=response-cache.advanced.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"response-cache.advanced.test.js","sourceRoot":"","sources":["../src/response-cache.advanced.test.ts"],"names":[],"mappings":"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"}