cost-katana 2.4.1 → 2.4.2
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/README.md +417 -325
- package/dist/gateway/client.d.ts.map +1 -1
- package/dist/gateway/client.js +1 -2
- package/dist/gateway/client.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,18 +1,72 @@
|
|
|
1
|
-
# Cost Katana
|
|
1
|
+
# Cost Katana
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/cost-katana)
|
|
4
|
+
[](https://pypi.org/project/cost-katana/)
|
|
5
|
+
[](./LICENSE)
|
|
6
|
+
[](https://nodejs.org/)
|
|
7
|
+
[](https://pypi.org/project/cost-katana/)
|
|
2
8
|
|
|
3
9
|
> **Cut your AI costs in half. Without cutting corners.**
|
|
4
10
|
|
|
5
11
|
Cost Katana is a drop-in SDK that wraps your AI calls with automatic cost tracking, smart caching, and optimization—all in one line of code.
|
|
6
12
|
|
|
13
|
+
## Table of contents
|
|
14
|
+
|
|
15
|
+
1. [Installation](#installation)
|
|
16
|
+
2. [Quick start](#quick-start)
|
|
17
|
+
3. [Configuration](#configuration)
|
|
18
|
+
4. [Core APIs](#core-apis)
|
|
19
|
+
- [`ai()`](#ai)
|
|
20
|
+
- [`chat()`](#chat)
|
|
21
|
+
- [`gateway()`](#gateway)
|
|
22
|
+
5. [Provider-independent design](#provider-independent-design)
|
|
23
|
+
6. [Type-safe model constants](#type-safe-model-constants)
|
|
24
|
+
7. [Cost optimization](#cost-optimization)
|
|
25
|
+
8. [Security and reliability](#security-and-reliability)
|
|
26
|
+
9. [Usage tracking and analytics](#usage-tracking-and-analytics)
|
|
27
|
+
10. [Framework integration](#framework-integration)
|
|
28
|
+
11. [Error handling](#error-handling)
|
|
29
|
+
12. [AI gateway (details)](#ai-gateway-details)
|
|
30
|
+
13. [Experimentation (hosted API)](#experimentation-hosted-api)
|
|
31
|
+
14. [Examples and documentation](#examples-and-documentation)
|
|
32
|
+
15. [Migration guides](#migration-guides)
|
|
33
|
+
16. [Contributing](#contributing)
|
|
34
|
+
17. [Support](#support)
|
|
35
|
+
18. [License](#license)
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Installation
|
|
40
|
+
|
|
41
|
+
**TypeScript / Node**
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npm install cost-katana
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Python** — published on PyPI as [`cost-katana`](https://pypi.org/project/cost-katana/) (install name uses a hyphen; import uses an underscore).
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
pip install cost-katana
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```python
|
|
54
|
+
import cost_katana as ck # package import: cost_katana
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Requires **Node.js 18+** for the npm package and **Python 3.8+** for the PyPI package.
|
|
58
|
+
|
|
7
59
|
---
|
|
8
60
|
|
|
9
|
-
##
|
|
61
|
+
## Quick start
|
|
10
62
|
|
|
11
63
|
Set **`COST_KATANA_API_KEY`**. **`PROJECT_ID`** is optional (recommended for per-project analytics in the dashboard).
|
|
12
64
|
|
|
13
|
-
###
|
|
65
|
+
### Path A — Gateway (HTTP proxy)
|
|
14
66
|
|
|
15
|
-
|
|
67
|
+
Use this when you want a **drop-in proxy**: change base URL and send `Authorization: Bearer`, or use **`gateway()`** in TypeScript with no extra config (reads `COST_KATANA_API_KEY`, same behavior as `createGatewayClientFromEnv()`).
|
|
68
|
+
|
|
69
|
+
**cURL** (no SDK; OpenAI-compatible JSON):
|
|
16
70
|
|
|
17
71
|
```bash
|
|
18
72
|
curl -s https://api.costkatana.com/api/gateway/v1/chat/completions \
|
|
@@ -21,26 +75,20 @@ curl -s https://api.costkatana.com/api/gateway/v1/chat/completions \
|
|
|
21
75
|
-d '{"model":"gpt-4o","messages":[{"role":"user","content":"Hello!"}]}'
|
|
22
76
|
```
|
|
23
77
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
**TypeScript — `gateway()`** — zero extra config; reads `COST_KATANA_API_KEY` (same behavior as `createGatewayClientFromEnv()`):
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
npm install cost-katana
|
|
30
|
-
```
|
|
78
|
+
**TypeScript**
|
|
31
79
|
|
|
32
80
|
```typescript
|
|
33
|
-
import { gateway } from 'cost-katana';
|
|
81
|
+
import { gateway, OPENAI } from 'cost-katana';
|
|
34
82
|
|
|
35
83
|
const res = await gateway().openai({
|
|
36
|
-
model:
|
|
84
|
+
model: OPENAI.GPT_4O,
|
|
37
85
|
messages: [{ role: 'user', content: 'Hello!' }],
|
|
38
86
|
});
|
|
39
87
|
|
|
40
88
|
console.log(res.data);
|
|
41
89
|
```
|
|
42
90
|
|
|
43
|
-
### `ai()`
|
|
91
|
+
### Path B — `ai()` (simple API, cost on the response)
|
|
44
92
|
|
|
45
93
|
```typescript
|
|
46
94
|
import { ai, OPENAI } from 'cost-katana';
|
|
@@ -50,11 +98,9 @@ const response = await ai(OPENAI.GPT_4O, 'Hello');
|
|
|
50
98
|
console.log(response.text, response.cost);
|
|
51
99
|
```
|
|
52
100
|
|
|
53
|
-
### Python
|
|
101
|
+
### Path C — Python
|
|
54
102
|
|
|
55
|
-
|
|
56
|
-
pip install costkatana
|
|
57
|
-
```
|
|
103
|
+
Install [`cost-katana` from PyPI](https://pypi.org/project/cost-katana/), set `COST_KATANA_API_KEY` (and optionally `PROJECT_ID`), then:
|
|
58
104
|
|
|
59
105
|
```python
|
|
60
106
|
import cost_katana as ck
|
|
@@ -64,332 +110,313 @@ response = ck.ai(openai.gpt_4o, "Hello")
|
|
|
64
110
|
print(response.text, response.cost)
|
|
65
111
|
```
|
|
66
112
|
|
|
113
|
+
The Python SDK talks to the same hosted backend as TypeScript (`https://api.costkatana.com` by default). For HTTP gateway usage (OpenAI- or Anthropic-shaped JSON), see the [package README on PyPI](https://pypi.org/project/cost-katana/).
|
|
114
|
+
|
|
67
115
|
### Which API should I use?
|
|
68
116
|
|
|
69
117
|
| If you want… | Use |
|
|
70
118
|
|--------------|-----|
|
|
71
|
-
| Drop-in HTTP proxy (existing OpenAI clients /
|
|
119
|
+
| Drop-in HTTP proxy (existing OpenAI clients / cURL) | Gateway URL + `Authorization: Bearer`, or **`gateway()`** in TypeScript |
|
|
72
120
|
| Simple AI calls with cost on the response | **`ai()`** / **`chat()`** |
|
|
73
121
|
| Session replay, advanced analytics, or manual `trackUsage` | **`AICostTracker`** (advanced) |
|
|
74
122
|
|
|
75
|
-
For most apps, **`COST_KATANA_API_KEY`** plus either **`gateway()`** (proxy) or **`ai()`** (SDK) is enough.
|
|
123
|
+
For most apps, **`COST_KATANA_API_KEY`** plus either **`gateway()`** (proxy) or **`ai()`** (SDK) is enough. For optional direct provider keys, add them to your environment as shown in [Configuration](#configuration).
|
|
76
124
|
|
|
77
125
|
---
|
|
78
126
|
|
|
79
|
-
##
|
|
127
|
+
## Configuration
|
|
80
128
|
|
|
81
|
-
|
|
129
|
+
### Environment variables
|
|
82
130
|
|
|
83
|
-
|
|
131
|
+
**Start here:** `COST_KATANA_API_KEY` unlocks routing, tracking, and dashboard features. **`PROJECT_ID`** is optional (scopes usage to a project in the dashboard).
|
|
84
132
|
|
|
85
|
-
|
|
86
|
-
import { ai, ModelCapability } from 'cost-katana';
|
|
133
|
+
Create a `.env` in your project (or export in your shell) with the variables you need:
|
|
87
134
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const vision = await ai(ModelCapability.VISION, 'Describe this image', { image });
|
|
92
|
-
```
|
|
135
|
+
```bash
|
|
136
|
+
# Required for hosted Cost Katana
|
|
137
|
+
COST_KATANA_API_KEY=dak_your_key_here
|
|
93
138
|
|
|
94
|
-
|
|
139
|
+
# Optional — per-project analytics
|
|
140
|
+
PROJECT_ID=your_project_id
|
|
95
141
|
|
|
96
|
-
|
|
97
|
-
|
|
142
|
+
# Optional — direct provider keys (bring your own keys)
|
|
143
|
+
OPENAI_API_KEY=sk-...
|
|
144
|
+
ANTHROPIC_API_KEY=sk-ant-...
|
|
145
|
+
GOOGLE_API_KEY=...
|
|
146
|
+
|
|
147
|
+
# Optional — AWS Bedrock
|
|
148
|
+
AWS_ACCESS_KEY_ID=...
|
|
149
|
+
AWS_SECRET_ACCESS_KEY=...
|
|
150
|
+
AWS_REGION=us-east-1
|
|
151
|
+
```
|
|
98
152
|
|
|
99
|
-
|
|
100
|
-
const fast = await ai({ speed: 'fastest' }, prompt);
|
|
153
|
+
There is no `.env.example` file in this repository; copy the block above into your own `.env` and fill in values.
|
|
101
154
|
|
|
102
|
-
|
|
103
|
-
const cheap = await ai({ cost: 'cheapest' }, prompt);
|
|
155
|
+
### Programmatic configuration
|
|
104
156
|
|
|
105
|
-
|
|
106
|
-
|
|
157
|
+
```typescript
|
|
158
|
+
import { configure } from 'cost-katana';
|
|
107
159
|
|
|
108
|
-
|
|
109
|
-
|
|
160
|
+
await configure({
|
|
161
|
+
apiKey: 'dak_your_key',
|
|
162
|
+
cortex: true, // 40–75% cost savings (when enabled on requests)
|
|
163
|
+
cache: true, // Smart caching (when enabled on requests)
|
|
164
|
+
firewall: true, // Block prompt injections
|
|
165
|
+
});
|
|
110
166
|
```
|
|
111
167
|
|
|
112
|
-
|
|
113
|
-
- 🔄 **Automatic Failover** - Seamlessly switch providers if one goes down
|
|
114
|
-
- 💰 **Cost Optimization** - Routes to the cheapest provider automatically
|
|
115
|
-
- 🚀 **Future-Proof** - New providers added without code changes
|
|
116
|
-
- 🔓 **Zero Lock-In** - Switch providers anytime, no refactoring needed
|
|
168
|
+
### Common request options (`ai()`)
|
|
117
169
|
|
|
118
|
-
|
|
170
|
+
| Option | Description |
|
|
171
|
+
|--------|-------------|
|
|
172
|
+
| `temperature` | Creativity (0–2), default `0.7` |
|
|
173
|
+
| `maxTokens` | Max response tokens, default `1000` |
|
|
174
|
+
| `systemMessage` | System prompt |
|
|
175
|
+
| `cache` | Enable caching |
|
|
176
|
+
| `cortex` | Enable optimization (Cortex) |
|
|
119
177
|
|
|
120
|
-
|
|
178
|
+
```typescript
|
|
179
|
+
import { ai, OPENAI } from 'cost-katana';
|
|
121
180
|
|
|
122
|
-
|
|
181
|
+
const response = await ai(OPENAI.GPT_4O, 'Your prompt', {
|
|
182
|
+
temperature: 0.7,
|
|
183
|
+
maxTokens: 500,
|
|
184
|
+
systemMessage: 'You are a helpful AI',
|
|
185
|
+
cache: true,
|
|
186
|
+
cortex: true,
|
|
187
|
+
});
|
|
188
|
+
```
|
|
123
189
|
|
|
124
|
-
|
|
125
|
-
- ✅ Tracks every dollar spent
|
|
126
|
-
- ✅ Caches repeated questions (saving 100% on duplicates)
|
|
127
|
-
- ✅ Optimizes long responses (40-75% savings)
|
|
190
|
+
---
|
|
128
191
|
|
|
129
|
-
|
|
192
|
+
## Core APIs
|
|
130
193
|
|
|
131
|
-
|
|
132
|
-
import { chat, OPENAI } from 'cost-katana';
|
|
194
|
+
### `ai()`
|
|
133
195
|
|
|
134
|
-
|
|
135
|
-
const session = chat(OPENAI.GPT_4);
|
|
196
|
+
The simplest way to make AI requests with automatic cost tracking.
|
|
136
197
|
|
|
137
|
-
|
|
138
|
-
await session.send('Hello! What can you help me with?');
|
|
139
|
-
await session.send('Tell me a programming joke');
|
|
140
|
-
await session.send('Now explain it');
|
|
198
|
+
**Signature**
|
|
141
199
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
console.log(`📊 Messages: ${session.messages.length}`);
|
|
145
|
-
console.log(`🎯 Tokens used: ${session.totalTokens}`);
|
|
200
|
+
```typescript
|
|
201
|
+
await ai(model, prompt, options?);
|
|
146
202
|
```
|
|
147
203
|
|
|
148
|
-
|
|
204
|
+
- **`model`** — Use type-safe constants (e.g. `OPENAI.GPT_4O`). String model IDs still work but are deprecated.
|
|
205
|
+
- **`prompt`** — User prompt text.
|
|
206
|
+
- **`options`** — See [Common request options](#common-request-options-ai).
|
|
149
207
|
|
|
150
|
-
|
|
208
|
+
**Returns:** `text`, `cost`, `tokens`, `model`, `provider`, and optionally `cached`, `optimized`, `templateUsed` when applicable.
|
|
151
209
|
|
|
152
210
|
```typescript
|
|
153
211
|
import { ai, OPENAI } from 'cost-katana';
|
|
154
212
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
213
|
+
const response = await ai(OPENAI.GPT_4O, 'Explain quantum computing', {
|
|
214
|
+
temperature: 0.7,
|
|
215
|
+
maxTokens: 500,
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
console.log(response.text);
|
|
219
|
+
console.log(`Cost: $${response.cost}`);
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### `chat()`
|
|
223
|
+
|
|
224
|
+
Create a **session** with conversation history and cost tracking.
|
|
159
225
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
226
|
+
**Signature**
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
const session = chat(model, options?);
|
|
164
230
|
```
|
|
165
231
|
|
|
166
|
-
|
|
232
|
+
**Session API**
|
|
167
233
|
|
|
168
|
-
|
|
234
|
+
| Member | Description |
|
|
235
|
+
|--------|-------------|
|
|
236
|
+
| `send(message)` | Send a message and append assistant reply |
|
|
237
|
+
| `messages` | Full conversation history |
|
|
238
|
+
| `totalCost` | Running total cost (USD) |
|
|
239
|
+
| `totalTokens` | Running token count |
|
|
240
|
+
| `clear()` | Reset conversation (keeps system message if set) |
|
|
169
241
|
|
|
170
242
|
```typescript
|
|
171
|
-
import {
|
|
243
|
+
import { chat, OPENAI } from 'cost-katana';
|
|
172
244
|
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
cortex: true, // Enable 40-75% cost reduction
|
|
178
|
-
maxTokens: 2000
|
|
179
|
-
}
|
|
180
|
-
);
|
|
245
|
+
const session = chat(OPENAI.GPT_4O, {
|
|
246
|
+
systemMessage: 'You are a helpful AI assistant.',
|
|
247
|
+
temperature: 0.7,
|
|
248
|
+
});
|
|
181
249
|
|
|
182
|
-
|
|
183
|
-
|
|
250
|
+
await session.send('Hello! What can you help me with?');
|
|
251
|
+
await session.send('Tell me a programming joke');
|
|
252
|
+
await session.send('Now explain it');
|
|
253
|
+
|
|
254
|
+
console.log(`Total cost: $${session.totalCost.toFixed(4)}`);
|
|
255
|
+
console.log(`Messages: ${session.messages.length}`);
|
|
256
|
+
console.log(`Tokens used: ${session.totalTokens}`);
|
|
184
257
|
```
|
|
185
258
|
|
|
186
|
-
###
|
|
259
|
+
### `gateway()`
|
|
187
260
|
|
|
188
|
-
|
|
261
|
+
Zero extra config for the hosted gateway: **`COST_KATANA_API_KEY`** is read from the environment. Use the same OpenAI-shaped request bodies you would send upstream.
|
|
189
262
|
|
|
190
|
-
|
|
191
|
-
import { ai, OPENAI, ANTHROPIC, GOOGLE } from 'cost-katana';
|
|
263
|
+
For advanced gateway features (headers, proxy keys, firewall), see [`docs/GATEWAY.md`](./docs/GATEWAY.md) and [`docs/API.md`](./docs/API.md).
|
|
192
264
|
|
|
193
|
-
|
|
265
|
+
---
|
|
194
266
|
|
|
195
|
-
|
|
196
|
-
{ name: 'GPT-4', id: OPENAI.GPT_4 },
|
|
197
|
-
{ name: 'Claude 3.5 Sonnet', id: ANTHROPIC.CLAUDE_3_5_SONNET_20241022 },
|
|
198
|
-
{ name: 'Gemini 2.5 Pro', id: GOOGLE.GEMINI_2_5_PRO },
|
|
199
|
-
{ name: 'GPT-3.5 Turbo', id: OPENAI.GPT_3_5_TURBO }
|
|
200
|
-
];
|
|
267
|
+
## Provider-independent design
|
|
201
268
|
|
|
202
|
-
|
|
269
|
+
Cost Katana is **provider-agnostic**: the same **`ai()`** API works across OpenAI, Anthropic, Google, and more—pick a **model constant** per provider.
|
|
203
270
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
console.log(`${model.name.padEnd(20)} $${response.cost.toFixed(6)}`);
|
|
207
|
-
}
|
|
208
|
-
```
|
|
271
|
+
```typescript
|
|
272
|
+
import { ai, OPENAI, ANTHROPIC, GOOGLE } from 'cost-katana';
|
|
209
273
|
|
|
210
|
-
|
|
274
|
+
const a = await ai(OPENAI.GPT_4O, 'Hello');
|
|
275
|
+
const b = await ai(ANTHROPIC.CLAUDE_3_5_SONNET_20241022, 'Hello');
|
|
276
|
+
const c = await ai(GOOGLE.GEMINI_2_5_PRO, 'Hello');
|
|
211
277
|
```
|
|
212
|
-
📊 Model Cost Comparison
|
|
213
278
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
279
|
+
**Benefits**
|
|
280
|
+
|
|
281
|
+
- **Automatic failover** — Seamlessly switch providers when configured (see [Security and reliability](#security-and-reliability)).
|
|
282
|
+
- **Cost optimization** — Choose cheaper models with constants and the [cost optimization](#cost-optimization) patterns below.
|
|
283
|
+
- **Future-proof** — New providers and models are added to the registry without changing your mental model.
|
|
284
|
+
- **Zero lock-in** — Swap model constants as your stack evolves.
|
|
285
|
+
|
|
286
|
+
For deeper routing patterns (capabilities, load balancing, multi-provider setups), see the [Provider-Agnostic Guide](https://github.com/Hypothesize-Tech/costkatana-examples/blob/main/PROVIDER_AGNOSTIC_GUIDE.md).
|
|
219
287
|
|
|
220
288
|
---
|
|
221
289
|
|
|
222
|
-
##
|
|
290
|
+
## Type-safe model constants
|
|
223
291
|
|
|
224
|
-
Stop guessing model names
|
|
292
|
+
Stop guessing model names: use namespaces for autocomplete and typo safety.
|
|
225
293
|
|
|
226
294
|
```typescript
|
|
227
295
|
import { OPENAI, ANTHROPIC, GOOGLE, AWS_BEDROCK, XAI, DEEPSEEK } from 'cost-katana';
|
|
228
296
|
|
|
229
297
|
// OpenAI
|
|
230
|
-
OPENAI.GPT_5
|
|
231
|
-
OPENAI.GPT_4
|
|
232
|
-
OPENAI.GPT_4O
|
|
233
|
-
OPENAI.GPT_3_5_TURBO
|
|
234
|
-
OPENAI.O1
|
|
235
|
-
OPENAI.O3
|
|
298
|
+
OPENAI.GPT_5;
|
|
299
|
+
OPENAI.GPT_4;
|
|
300
|
+
OPENAI.GPT_4O;
|
|
301
|
+
OPENAI.GPT_3_5_TURBO;
|
|
302
|
+
OPENAI.O1;
|
|
303
|
+
OPENAI.O3;
|
|
236
304
|
|
|
237
305
|
// Anthropic
|
|
238
|
-
ANTHROPIC.CLAUDE_SONNET_4_5
|
|
239
|
-
ANTHROPIC.CLAUDE_3_5_SONNET_20241022
|
|
240
|
-
ANTHROPIC.CLAUDE_3_5_HAIKU_20241022
|
|
306
|
+
ANTHROPIC.CLAUDE_SONNET_4_5;
|
|
307
|
+
ANTHROPIC.CLAUDE_3_5_SONNET_20241022;
|
|
308
|
+
ANTHROPIC.CLAUDE_3_5_HAIKU_20241022;
|
|
241
309
|
|
|
242
310
|
// Google
|
|
243
|
-
GOOGLE.GEMINI_2_5_PRO
|
|
244
|
-
GOOGLE.GEMINI_2_5_FLASH
|
|
245
|
-
GOOGLE.GEMINI_1_5_PRO
|
|
311
|
+
GOOGLE.GEMINI_2_5_PRO;
|
|
312
|
+
GOOGLE.GEMINI_2_5_FLASH;
|
|
313
|
+
GOOGLE.GEMINI_1_5_PRO;
|
|
246
314
|
|
|
247
315
|
// AWS Bedrock
|
|
248
|
-
AWS_BEDROCK.NOVA_PRO
|
|
249
|
-
AWS_BEDROCK.NOVA_LITE
|
|
250
|
-
AWS_BEDROCK.CLAUDE_SONNET_4_5
|
|
316
|
+
AWS_BEDROCK.NOVA_PRO;
|
|
317
|
+
AWS_BEDROCK.NOVA_LITE;
|
|
318
|
+
AWS_BEDROCK.CLAUDE_SONNET_4_5;
|
|
251
319
|
|
|
252
320
|
// Others
|
|
253
|
-
XAI.GROK_2_1212
|
|
254
|
-
DEEPSEEK.DEEPSEEK_CHAT
|
|
321
|
+
XAI.GROK_2_1212;
|
|
322
|
+
DEEPSEEK.DEEPSEEK_CHAT;
|
|
255
323
|
```
|
|
256
324
|
|
|
257
|
-
**
|
|
258
|
-
| Feature | String `'gpt-4'` | Constant `OPENAI.GPT_4` |
|
|
259
|
-
|---------|------------------|-------------------------|
|
|
260
|
-
| Autocomplete | ❌ | ✅ |
|
|
261
|
-
| Typo protection | ❌ | ✅ |
|
|
262
|
-
| Refactor safely | ❌ | ✅ |
|
|
263
|
-
| Self-documenting | ❌ | ✅ |
|
|
325
|
+
**Prefer constants over raw strings** — They give IDE autocomplete, catch typos early, refactor safely, and document which provider you intended.
|
|
264
326
|
|
|
265
327
|
---
|
|
266
328
|
|
|
267
|
-
##
|
|
268
|
-
|
|
269
|
-
### Environment Variables
|
|
270
|
-
|
|
271
|
-
**Start here:** `COST_KATANA_API_KEY` unlocks routing, tracking, and dashboard features. **`PROJECT_ID`** is optional (set it to scope usage to a project in the dashboard).
|
|
272
|
-
|
|
273
|
-
```bash
|
|
274
|
-
# Required for hosted Cost Katana
|
|
275
|
-
COST_KATANA_API_KEY=dak_your_key_here
|
|
276
|
-
|
|
277
|
-
# Optional — per-project analytics
|
|
278
|
-
PROJECT_ID=your_project_id
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
Optional: bring your own provider keys, or use AWS Bedrock. **Copy [`.env.example`](./.env.example)** into `.env` and fill in values.
|
|
329
|
+
## Cost optimization
|
|
282
330
|
|
|
283
|
-
|
|
284
|
-
# Optional — direct provider keys
|
|
285
|
-
OPENAI_API_KEY=sk-...
|
|
286
|
-
ANTHROPIC_API_KEY=sk-ant-...
|
|
287
|
-
GEMINI_API_KEY=...
|
|
331
|
+
### Cheatsheet
|
|
288
332
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
333
|
+
| Strategy | Typical savings | When to use |
|
|
334
|
+
|----------|-----------------|-------------|
|
|
335
|
+
| Use a smaller/faster model (e.g. GPT-3.5 vs GPT-4) | Large on simple tasks | Trivial Q&A, classification, translation |
|
|
336
|
+
| **Caching** | 100% on cache hits | Repeated queries, FAQs |
|
|
337
|
+
| **Cortex** | 40–75% on eligible workloads | Long-form generation |
|
|
338
|
+
| **Chat sessions** | 10–20% | Related multi-turn work |
|
|
339
|
+
| **Gemini Flash** (vs heavy flagship models) | Very high $/token delta | High volume, cost-sensitive |
|
|
294
340
|
|
|
295
|
-
###
|
|
341
|
+
### Caching
|
|
296
342
|
|
|
297
343
|
```typescript
|
|
298
|
-
import {
|
|
299
|
-
|
|
300
|
-
await configure({
|
|
301
|
-
apiKey: 'dak_your_key',
|
|
302
|
-
cortex: true, // 40-75% cost savings
|
|
303
|
-
cache: true, // Smart caching
|
|
304
|
-
firewall: true // Block prompt injections
|
|
305
|
-
});
|
|
306
|
-
```
|
|
344
|
+
import { ai, OPENAI } from 'cost-katana';
|
|
307
345
|
|
|
308
|
-
|
|
346
|
+
const response1 = await ai(OPENAI.GPT_4O, 'What is 2+2?', { cache: true });
|
|
347
|
+
console.log(`Cached: ${response1.cached}`);
|
|
348
|
+
console.log(`Cost: $${response1.cost}`);
|
|
309
349
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
maxTokens: 500, // Response limit
|
|
314
|
-
systemMessage: 'You are a helpful AI', // System prompt
|
|
315
|
-
cache: true, // Enable caching
|
|
316
|
-
cortex: true, // Enable optimization
|
|
317
|
-
retry: true // Auto-retry on failures
|
|
318
|
-
});
|
|
350
|
+
const response2 = await ai(OPENAI.GPT_4O, 'What is 2+2?', { cache: true });
|
|
351
|
+
console.log(`Cached: ${response2.cached}`);
|
|
352
|
+
console.log(`Cost: $${response2.cost}`);
|
|
319
353
|
```
|
|
320
354
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
## 🔌 Framework Integration
|
|
324
|
-
|
|
325
|
-
### Next.js App Router
|
|
355
|
+
### Cortex (optimization)
|
|
326
356
|
|
|
327
357
|
```typescript
|
|
328
|
-
// app/api/chat/route.ts
|
|
329
358
|
import { ai, OPENAI } from 'cost-katana';
|
|
330
359
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
360
|
+
const response = await ai(
|
|
361
|
+
OPENAI.GPT_4O,
|
|
362
|
+
'Write a comprehensive guide to machine learning for beginners',
|
|
363
|
+
{
|
|
364
|
+
cortex: true,
|
|
365
|
+
maxTokens: 2000,
|
|
366
|
+
}
|
|
367
|
+
);
|
|
368
|
+
|
|
369
|
+
console.log(`Optimized: ${response.optimized}`);
|
|
370
|
+
console.log(`Cost: $${response.cost}`);
|
|
336
371
|
```
|
|
337
372
|
|
|
338
|
-
###
|
|
373
|
+
### Compare models side by side
|
|
339
374
|
|
|
340
375
|
```typescript
|
|
341
|
-
import
|
|
342
|
-
import { ai, OPENAI } from 'cost-katana';
|
|
376
|
+
import { ai, OPENAI, ANTHROPIC, GOOGLE } from 'cost-katana';
|
|
343
377
|
|
|
344
|
-
const
|
|
345
|
-
app.use(express.json());
|
|
378
|
+
const prompt = 'Summarize the theory of relativity in 50 words';
|
|
346
379
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
}
|
|
380
|
+
const models = [
|
|
381
|
+
{ name: 'GPT-4 class', id: OPENAI.GPT_4O },
|
|
382
|
+
{ name: 'Claude 3.5 Sonnet', id: ANTHROPIC.CLAUDE_3_5_SONNET_20241022 },
|
|
383
|
+
{ name: 'Gemini 2.5 Pro', id: GOOGLE.GEMINI_2_5_PRO },
|
|
384
|
+
{ name: 'GPT-3.5 Turbo', id: OPENAI.GPT_3_5_TURBO },
|
|
385
|
+
];
|
|
351
386
|
|
|
352
|
-
|
|
387
|
+
console.log('Model cost comparison\n');
|
|
388
|
+
|
|
389
|
+
for (const model of models) {
|
|
390
|
+
const response = await ai(model.id, prompt);
|
|
391
|
+
console.log(`${model.name.padEnd(22)} $${response.cost.toFixed(6)}`);
|
|
392
|
+
}
|
|
353
393
|
```
|
|
354
394
|
|
|
355
|
-
###
|
|
395
|
+
### Quick wins
|
|
356
396
|
|
|
357
397
|
```typescript
|
|
358
|
-
import fastify from 'fastify';
|
|
359
398
|
import { ai, OPENAI } from 'cost-katana';
|
|
360
399
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
app.post('/api/chat', async (request) => {
|
|
364
|
-
const { prompt } = request.body as { prompt: string };
|
|
365
|
-
return await ai(OPENAI.GPT_4, prompt);
|
|
366
|
-
});
|
|
367
|
-
|
|
368
|
-
app.listen({ port: 3000 });
|
|
369
|
-
```
|
|
400
|
+
// Expensive: flagship model for a trivial question
|
|
401
|
+
await ai(OPENAI.GPT_4O, 'What is 2+2?');
|
|
370
402
|
|
|
371
|
-
|
|
403
|
+
// Better: match model to task
|
|
404
|
+
await ai(OPENAI.GPT_3_5_TURBO, 'What is 2+2?');
|
|
372
405
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
import { ai, OPENAI } from 'cost-katana';
|
|
406
|
+
// Better still: cache repeated FAQs
|
|
407
|
+
await ai(OPENAI.GPT_3_5_TURBO, 'What is 2+2?', { cache: true });
|
|
376
408
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
@Post('chat')
|
|
380
|
-
async chat(@Body() body: { prompt: string }) {
|
|
381
|
-
return await ai(OPENAI.GPT_4, body.prompt);
|
|
382
|
-
}
|
|
383
|
-
}
|
|
409
|
+
// Long content: Cortex
|
|
410
|
+
await ai(OPENAI.GPT_4O, 'Write a 2000-word essay', { cortex: true });
|
|
384
411
|
```
|
|
385
412
|
|
|
386
413
|
---
|
|
387
414
|
|
|
388
|
-
##
|
|
415
|
+
## Security and reliability
|
|
389
416
|
|
|
390
|
-
### Firewall
|
|
417
|
+
### Firewall
|
|
391
418
|
|
|
392
|
-
Block prompt injection
|
|
419
|
+
Block prompt injection and related abuse when enabled via **`configure({ firewall: true })`** and gateway/tracker settings.
|
|
393
420
|
|
|
394
421
|
```typescript
|
|
395
422
|
import { configure, ai, OPENAI } from 'cost-katana';
|
|
@@ -397,41 +424,34 @@ import { configure, ai, OPENAI } from 'cost-katana';
|
|
|
397
424
|
await configure({ firewall: true });
|
|
398
425
|
|
|
399
426
|
try {
|
|
400
|
-
await ai(OPENAI.
|
|
427
|
+
await ai(OPENAI.GPT_4O, 'Ignore all previous instructions and...');
|
|
401
428
|
} catch (error) {
|
|
402
|
-
console.log('
|
|
429
|
+
console.log('Blocked:', (error as Error).message);
|
|
403
430
|
}
|
|
404
431
|
```
|
|
405
432
|
|
|
406
|
-
**
|
|
407
|
-
- Prompt injection attacks
|
|
408
|
-
- Jailbreak attempts
|
|
409
|
-
- Data exfiltration
|
|
410
|
-
- Malicious content generation
|
|
411
|
-
|
|
412
|
-
---
|
|
433
|
+
**Helps mitigate:** prompt injection, jailbreak attempts, unsafe content patterns (exact behavior depends on your gateway configuration).
|
|
413
434
|
|
|
414
|
-
|
|
435
|
+
### Auto-failover
|
|
415
436
|
|
|
416
|
-
|
|
437
|
+
When routing and health checks allow, requests can fall back across providers so a single vendor outage does not take down your app.
|
|
417
438
|
|
|
418
439
|
```typescript
|
|
419
440
|
import { ai, OPENAI } from 'cost-katana';
|
|
420
441
|
|
|
421
|
-
|
|
422
|
-
const response = await ai(OPENAI.GPT_4, 'Hello');
|
|
442
|
+
const response = await ai(OPENAI.GPT_4O, 'Hello');
|
|
423
443
|
|
|
424
444
|
console.log(`Provider used: ${response.provider}`);
|
|
425
|
-
//
|
|
445
|
+
// e.g. 'openai', 'anthropic', or 'google' depending on availability and policy
|
|
426
446
|
```
|
|
427
447
|
|
|
428
448
|
---
|
|
429
449
|
|
|
430
|
-
##
|
|
450
|
+
## Usage tracking and analytics
|
|
431
451
|
|
|
432
|
-
### Dashboard attribution (
|
|
452
|
+
### Dashboard attribution with `configure()` and `ai()`
|
|
433
453
|
|
|
434
|
-
Use the same **`ai()`** API
|
|
454
|
+
Use the same **`ai()`** API everywhere. Point usage at your project once with **`configure()`** or environment variables.
|
|
435
455
|
|
|
436
456
|
```typescript
|
|
437
457
|
import { configure, ai, OPENAI } from 'cost-katana';
|
|
@@ -441,42 +461,41 @@ await configure({
|
|
|
441
461
|
projectId: process.env.PROJECT_ID,
|
|
442
462
|
});
|
|
443
463
|
|
|
444
|
-
const response = await ai(OPENAI.GPT_4O, 'Explain quantum computing'
|
|
445
|
-
tags: ['demo', 'readme'],
|
|
446
|
-
});
|
|
464
|
+
const response = await ai(OPENAI.GPT_4O, 'Explain quantum computing');
|
|
447
465
|
|
|
448
466
|
console.log(response.text);
|
|
449
467
|
console.log('Cost:', response.cost);
|
|
450
468
|
console.log('Tokens:', response.tokens);
|
|
451
|
-
console.log('Response time (ms):', response.responseTime);
|
|
452
469
|
```
|
|
453
470
|
|
|
454
|
-
Calls
|
|
471
|
+
Calls can be attributed to your project in the dashboard. You can also pass **`projectId`** through tracker/gateway options where supported when using multiple projects.
|
|
455
472
|
|
|
456
|
-
### `AICostTracker` with defaults (
|
|
473
|
+
### `AICostTracker` with defaults (advanced)
|
|
457
474
|
|
|
458
|
-
When you need a **dedicated tracker instance** (not the global `ai()` helper), use **`createCostKatanaTracker()`** or **`AICostTracker.createWithDefaults()`**. They
|
|
475
|
+
When you need a **dedicated tracker instance** (not only the global `ai()` helper), use **`createCostKatanaTracker()`** or **`AICostTracker.createWithDefaults()`**. They populate **`TrackerConfig`** from the same environment rules as auto-config:
|
|
476
|
+
|
|
477
|
+
- If you set **direct** provider keys (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_API_KEY`, or AWS Bedrock credentials), those providers are registered.
|
|
478
|
+
- If you **only** have **`COST_KATANA_API_KEY`** and **no** direct provider keys, the default is **Cost Katana hosted models** via the gateway: inference can route through the hosted API without embedding vendor keys in your app.
|
|
459
479
|
|
|
460
480
|
```typescript
|
|
461
481
|
import { createCostKatanaTracker, AIProvider } from 'cost-katana';
|
|
462
482
|
|
|
463
483
|
const tracker = await createCostKatanaTracker();
|
|
464
484
|
|
|
465
|
-
// Optional overrides (merged on top of defaults)
|
|
466
485
|
const custom = await createCostKatanaTracker({
|
|
467
486
|
optimization: { enablePromptOptimization: false },
|
|
468
|
-
providers: [{ provider: AIProvider.OpenAI, apiKey: process.env.OPENAI_API_KEY! }]
|
|
487
|
+
providers: [{ provider: AIProvider.OpenAI, apiKey: process.env.OPENAI_API_KEY! }],
|
|
469
488
|
});
|
|
470
489
|
|
|
471
|
-
// Same
|
|
490
|
+
// Same idea: await AICostTracker.createWithDefaults({ ... })
|
|
472
491
|
// Short alias: import { tracker as costKatana } from 'cost-katana';
|
|
473
492
|
```
|
|
474
493
|
|
|
475
494
|
Requires **`COST_KATANA_API_KEY`** in the environment (same as `AICostTracker.create()`). **`PROJECT_ID`** remains optional.
|
|
476
495
|
|
|
477
|
-
### Dedicated
|
|
496
|
+
### Dedicated per-provider trackers
|
|
478
497
|
|
|
479
|
-
|
|
498
|
+
For a **small `complete()`-style API** on top of `AICostTracker`, use **`createOpenAITracker`**, **`createAnthropicTracker`**, etc.
|
|
480
499
|
|
|
481
500
|
```typescript
|
|
482
501
|
import { createOpenAITracker, OPENAI } from 'cost-katana';
|
|
@@ -489,30 +508,27 @@ console.log('Total cost (USD):', response.cost.totalCost);
|
|
|
489
508
|
console.log('Response time (ms):', response.responseTime);
|
|
490
509
|
```
|
|
491
510
|
|
|
492
|
-
For **gateway proxying**, **manual `trackUsage`**, or a fully custom **`AICostTracker
|
|
493
|
-
|
|
494
|
-
### View Analytics in Dashboard
|
|
511
|
+
For **gateway proxying**, **manual `trackUsage`**, or a fully custom **`AICostTracker`**, see [`docs/API.md`](./docs/API.md) and [`examples/`](./examples/).
|
|
495
512
|
|
|
496
|
-
|
|
513
|
+
### View analytics in the dashboard
|
|
497
514
|
|
|
498
|
-
|
|
499
|
-
- **Client Environment**: User agent, platform, IP geolocation
|
|
500
|
-
- **Request/Response Data**: Full request and response payloads (sanitized)
|
|
501
|
-
- **Optimization Opportunities**: AI-powered suggestions to reduce costs
|
|
502
|
-
- **Performance Metrics**: Real-time monitoring with anomaly detection
|
|
515
|
+
With tracking enabled, you can inspect:
|
|
503
516
|
|
|
504
|
-
|
|
517
|
+
- **Network performance** — DNS, TCP, total response time
|
|
518
|
+
- **Client environment** — User agent, platform, IP geolocation (where collected)
|
|
519
|
+
- **Request/response data** — Payloads (sanitized)
|
|
520
|
+
- **Optimization opportunities** — Suggestions to reduce cost
|
|
521
|
+
- **Performance metrics** — Monitoring and anomaly signals
|
|
505
522
|
|
|
506
|
-
|
|
523
|
+
### Manual usage tracking
|
|
507
524
|
|
|
508
525
|
```typescript
|
|
509
526
|
import { createCostKatanaTracker } from 'cost-katana';
|
|
510
527
|
|
|
511
528
|
const tracker = await createCostKatanaTracker();
|
|
512
529
|
|
|
513
|
-
// Manually track usage with additional metadata
|
|
514
530
|
await tracker.trackUsage({
|
|
515
|
-
model: 'gpt-
|
|
531
|
+
model: 'gpt-4o',
|
|
516
532
|
provider: 'openai',
|
|
517
533
|
prompt: 'Hello, world!',
|
|
518
534
|
completion: 'Hello! How can I help you today?',
|
|
@@ -524,106 +540,182 @@ await tracker.trackUsage({
|
|
|
524
540
|
userId: 'user_123',
|
|
525
541
|
sessionId: 'session_abc',
|
|
526
542
|
tags: ['chat', 'greeting'],
|
|
527
|
-
// Additional metadata for comprehensive tracking
|
|
528
543
|
requestMetadata: {
|
|
529
|
-
userAgent: navigator
|
|
530
|
-
clientIP: await fetch('https://api.ipify.org').then(r => r.text()),
|
|
531
|
-
feature: 'chat-interface'
|
|
532
|
-
}
|
|
544
|
+
userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,
|
|
545
|
+
clientIP: await fetch('https://api.ipify.org').then((r) => r.text()),
|
|
546
|
+
feature: 'chat-interface',
|
|
547
|
+
},
|
|
533
548
|
});
|
|
534
549
|
```
|
|
535
550
|
|
|
536
|
-
### Session replay
|
|
551
|
+
### Session replay and distributed tracing
|
|
537
552
|
|
|
538
|
-
|
|
553
|
+
The **`trace`** submodule provides session graphs, spans, and middleware. See [`src/trace/README.md`](./src/trace/README.md) for exports such as `TraceClient`, `LocalTraceService`, and `createTraceMiddleware`.
|
|
539
554
|
|
|
540
555
|
---
|
|
541
556
|
|
|
542
|
-
##
|
|
557
|
+
## Framework integration
|
|
558
|
+
|
|
559
|
+
### Next.js App Router
|
|
560
|
+
|
|
561
|
+
```typescript
|
|
562
|
+
// app/api/chat/route.ts
|
|
563
|
+
import { ai, OPENAI } from 'cost-katana';
|
|
543
564
|
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
| **Use Gemini Flash** | 95% vs GPT-4 | High-volume, cost-sensitive |
|
|
565
|
+
export async function POST(request: Request) {
|
|
566
|
+
const { prompt } = await request.json();
|
|
567
|
+
const response = await ai(OPENAI.GPT_4O, prompt);
|
|
568
|
+
return Response.json(response);
|
|
569
|
+
}
|
|
570
|
+
```
|
|
551
571
|
|
|
552
|
-
###
|
|
572
|
+
### Express.js
|
|
553
573
|
|
|
554
574
|
```typescript
|
|
555
|
-
|
|
556
|
-
|
|
575
|
+
import express from 'express';
|
|
576
|
+
import { ai, OPENAI } from 'cost-katana';
|
|
557
577
|
|
|
558
|
-
|
|
559
|
-
|
|
578
|
+
const app = express();
|
|
579
|
+
app.use(express.json());
|
|
560
580
|
|
|
561
|
-
|
|
562
|
-
await ai(OPENAI.
|
|
581
|
+
app.post('/api/chat', async (req, res) => {
|
|
582
|
+
const response = await ai(OPENAI.GPT_4O, req.body.prompt);
|
|
583
|
+
res.json(response);
|
|
584
|
+
});
|
|
563
585
|
|
|
564
|
-
|
|
565
|
-
|
|
586
|
+
app.listen(3000);
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
### Fastify
|
|
590
|
+
|
|
591
|
+
```typescript
|
|
592
|
+
import fastify from 'fastify';
|
|
593
|
+
import { ai, OPENAI } from 'cost-katana';
|
|
594
|
+
|
|
595
|
+
const app = fastify();
|
|
596
|
+
|
|
597
|
+
app.post('/api/chat', async (request) => {
|
|
598
|
+
const { prompt } = request.body as { prompt: string };
|
|
599
|
+
return await ai(OPENAI.GPT_4O, prompt);
|
|
600
|
+
});
|
|
601
|
+
|
|
602
|
+
app.listen({ port: 3000 });
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
### NestJS
|
|
606
|
+
|
|
607
|
+
```typescript
|
|
608
|
+
import { Controller, Post, Body } from '@nestjs/common';
|
|
609
|
+
import { ai, OPENAI } from 'cost-katana';
|
|
610
|
+
|
|
611
|
+
@Controller('api')
|
|
612
|
+
export class ChatController {
|
|
613
|
+
@Post('chat')
|
|
614
|
+
async chat(@Body() body: { prompt: string }) {
|
|
615
|
+
return await ai(OPENAI.GPT_4O, body.prompt);
|
|
616
|
+
}
|
|
617
|
+
}
|
|
566
618
|
```
|
|
567
619
|
|
|
568
620
|
---
|
|
569
621
|
|
|
570
|
-
##
|
|
622
|
+
## Error handling
|
|
571
623
|
|
|
572
624
|
```typescript
|
|
573
625
|
import { ai, OPENAI } from 'cost-katana';
|
|
574
626
|
|
|
575
627
|
try {
|
|
576
|
-
const response = await ai(OPENAI.
|
|
628
|
+
const response = await ai(OPENAI.GPT_4O, 'Hello');
|
|
577
629
|
console.log(response.text);
|
|
578
630
|
} catch (error) {
|
|
579
|
-
|
|
631
|
+
const err = error as Error & { code?: string; availableModels?: string[] };
|
|
632
|
+
switch (err.code) {
|
|
580
633
|
case 'NO_API_KEY':
|
|
581
|
-
console.log('Set COST_KATANA_API_KEY or
|
|
634
|
+
console.log('Set COST_KATANA_API_KEY or a provider API key');
|
|
582
635
|
break;
|
|
583
636
|
case 'RATE_LIMIT':
|
|
584
|
-
console.log('Rate limited.
|
|
637
|
+
console.log('Rate limited. Retry with backoff.');
|
|
585
638
|
break;
|
|
586
639
|
case 'INVALID_MODEL':
|
|
587
|
-
console.log('Model not found. Available:',
|
|
640
|
+
console.log('Model not found. Available:', err.availableModels);
|
|
588
641
|
break;
|
|
589
642
|
default:
|
|
590
|
-
console.log('Error:',
|
|
643
|
+
console.log('Error:', err.message);
|
|
591
644
|
}
|
|
592
645
|
}
|
|
593
646
|
```
|
|
594
647
|
|
|
648
|
+
Exact **`code`** values depend on the failure path (gateway vs direct provider). Always log **`message`** for support.
|
|
649
|
+
|
|
595
650
|
---
|
|
596
651
|
|
|
597
|
-
##
|
|
652
|
+
## AI gateway (details)
|
|
598
653
|
|
|
599
|
-
The gateway is an **HTTP proxy**: call Cost Katana’s URL with your API key; the service forwards to OpenAI, Anthropic, Google, Cohere,
|
|
654
|
+
The gateway is an **HTTP proxy**: call Cost Katana’s URL with your API key; the service forwards to OpenAI, Anthropic, Google, Cohere, and others, and can attach caching, retries, firewall, and tracking.
|
|
600
655
|
|
|
601
|
-
- **Quick start:**
|
|
602
|
-
- **`CostKatana-Target-Url`:**
|
|
603
|
-
- **Anthropic on hosted gateway:** `gateway.anthropic(...)` / `/v1/messages`
|
|
604
|
-
- **Dashboard
|
|
656
|
+
- **Quick start:** [Quick start — Path A](#path-a--gateway-http-proxy) (`gateway()` or cURL).
|
|
657
|
+
- **`CostKatana-Target-Url`:** Use for non-default upstream URLs (Azure OpenAI, private endpoints). For standard routes (`/v1/chat/completions`, `/v1/messages`, …), **`gateway()`** often uses `inferTargetUrl: true` and omits it.
|
|
658
|
+
- **Anthropic on hosted gateway:** `gateway.anthropic(...)` / `/v1/messages` may not require an Anthropic key in your app; the service may use Bedrock when no server `ANTHROPIC_API_KEY` is set (see docs for streaming limitations).
|
|
659
|
+
- **Dashboard vs custom tracking:** Gateway traffic reflects **proxied** bodies; `AICostTracker` / `trackUsage` supports **custom** structured logging. For multi-turn and token nuances, see [`examples/GATEWAY_USAGE_AND_TRACKING.md`](./examples/GATEWAY_USAGE_AND_TRACKING.md) and [costkatana-examples `2-gateway`](https://github.com/Hypothesize-Tech/costkatana-examples/tree/main/2-gateway).
|
|
605
660
|
|
|
606
661
|
---
|
|
607
662
|
|
|
608
|
-
##
|
|
663
|
+
## Experimentation (hosted API)
|
|
664
|
+
|
|
665
|
+
The Cost Katana backend ([`costkatana-backend-nest`](https://github.com/Hypothesize-Tech/costkatana-backend-nest)) exposes **experimentation** REST endpoints under **`/api/experimentation`** on the hosted API (same origin as the gateway, e.g. `https://api.costkatana.com`). The dashboard **Experimentation** UI uses these APIs; you can also integrate them directly.
|
|
666
|
+
|
|
667
|
+
**What it covers**
|
|
668
|
+
|
|
669
|
+
- **Model comparison** — Run side-by-side comparisons across providers (`POST /api/experimentation/model-comparison`).
|
|
670
|
+
- **Real-time comparison** — Start a comparison job (`POST /api/experimentation/real-time-comparison`) and stream progress over **SSE** at `GET /api/experimentation/comparison-progress/:sessionId` (session token validated). Poll or reconnect via `GET /api/experimentation/comparison-job/:sessionId` when authenticated.
|
|
671
|
+
- **Catalog** — `GET /api/experimentation/available-models` returns router-registered models (active/inactive) for picking candidates.
|
|
672
|
+
- **Cost estimate** — `POST /api/experimentation/estimate-cost` (public) for experiment cost estimates before you run.
|
|
673
|
+
- **What-if scenarios** — List/create/analyze/delete scenarios (`/api/experimentation/what-if-scenarios`, `.../:scenarioName/analyze`, lifecycle updates).
|
|
674
|
+
- **Real-time simulation** — `POST /api/experimentation/real-time-simulation` (public) for what-if style simulations.
|
|
675
|
+
- **History and insights** — `GET /api/experimentation/history`, `GET /api/experimentation/recommendations`, `GET /api/experimentation/fine-tuning-analysis`.
|
|
676
|
+
- **Exports** — `GET /api/experimentation/:experimentId/export?format=json|csv` for results.
|
|
677
|
+
|
|
678
|
+
**Auth**
|
|
679
|
+
|
|
680
|
+
- Most write/read routes require a **dashboard user JWT** (`JwtAuthGuard`).
|
|
681
|
+
- Several routes are marked **public** (estimate cost, available models, real-time simulation, SSE progress with a valid session id). See the controller for the exact list: [`experimentation.controller.ts` in costkatana-backend-nest](https://github.com/Hypothesize-Tech/costkatana-backend-nest/blob/main/src/modules/experimentation/experimentation.controller.ts).
|
|
682
|
+
|
|
683
|
+
**Server configuration**
|
|
684
|
+
|
|
685
|
+
- Real model execution for comparisons may require backend flags such as **`ENABLE_REAL_MODEL_COMPARISON=true`** where your deployment enables live API calls to providers.
|
|
686
|
+
|
|
687
|
+
---
|
|
688
|
+
|
|
689
|
+
## Examples and documentation
|
|
690
|
+
|
|
691
|
+
**In this repo**
|
|
692
|
+
|
|
693
|
+
| Resource | Description |
|
|
694
|
+
|----------|-------------|
|
|
695
|
+
| [`docs/API.md`](./docs/API.md) | API reference |
|
|
696
|
+
| [`docs/EXAMPLES.md`](./docs/EXAMPLES.md) | Examples index |
|
|
697
|
+
| [`docs/GATEWAY.md`](./docs/GATEWAY.md) | Gateway |
|
|
698
|
+
| [`docs/PROMPT_OPTIMIZATION.md`](./docs/PROMPT_OPTIMIZATION.md) | Prompt optimization |
|
|
699
|
+
| [`docs/WEBHOOKS.md`](./docs/WEBHOOKS.md) | Webhooks |
|
|
700
|
+
| [`examples/`](./examples/) | Runnable TypeScript examples |
|
|
609
701
|
|
|
610
|
-
|
|
702
|
+
**External examples repo** — 45+ complete examples:
|
|
611
703
|
|
|
612
|
-
|
|
704
|
+
**[github.com/Hypothesize-Tech/costkatana-examples](https://github.com/Hypothesize-Tech/costkatana-examples)**
|
|
613
705
|
|
|
614
|
-
| Category |
|
|
615
|
-
|
|
616
|
-
| **Cost
|
|
706
|
+
| Category | Topics |
|
|
707
|
+
|----------|--------|
|
|
708
|
+
| **Cost tracking** | Budgets, alerts |
|
|
617
709
|
| **Gateway** | Routing, load balancing, failover |
|
|
618
710
|
| **Optimization** | Cortex, caching, compression |
|
|
619
711
|
| **Observability** | OpenTelemetry, tracing, metrics |
|
|
620
712
|
| **Security** | Firewall, rate limiting, moderation |
|
|
621
|
-
| **Workflows** | Multi-step
|
|
713
|
+
| **Workflows** | Multi-step orchestration |
|
|
622
714
|
| **Frameworks** | Express, Next.js, Fastify, NestJS, FastAPI |
|
|
623
715
|
|
|
624
716
|
---
|
|
625
717
|
|
|
626
|
-
##
|
|
718
|
+
## Migration guides
|
|
627
719
|
|
|
628
720
|
### From OpenAI SDK
|
|
629
721
|
|
|
@@ -633,7 +725,7 @@ import OpenAI from 'openai';
|
|
|
633
725
|
const openai = new OpenAI({ apiKey: 'sk-...' });
|
|
634
726
|
const completion = await openai.chat.completions.create({
|
|
635
727
|
model: 'gpt-4',
|
|
636
|
-
messages: [{ role: 'user', content: 'Hello' }]
|
|
728
|
+
messages: [{ role: 'user', content: 'Hello' }],
|
|
637
729
|
});
|
|
638
730
|
console.log(completion.choices[0].message.content);
|
|
639
731
|
|
|
@@ -641,7 +733,7 @@ console.log(completion.choices[0].message.content);
|
|
|
641
733
|
import { ai, OPENAI } from 'cost-katana';
|
|
642
734
|
const response = await ai(OPENAI.GPT_4, 'Hello');
|
|
643
735
|
console.log(response.text);
|
|
644
|
-
console.log(`Cost: $${response.cost}`);
|
|
736
|
+
console.log(`Cost: $${response.cost}`);
|
|
645
737
|
```
|
|
646
738
|
|
|
647
739
|
### From Anthropic SDK
|
|
@@ -652,7 +744,7 @@ import Anthropic from '@anthropic-ai/sdk';
|
|
|
652
744
|
const anthropic = new Anthropic({ apiKey: 'sk-ant-...' });
|
|
653
745
|
const message = await anthropic.messages.create({
|
|
654
746
|
model: 'claude-3-sonnet-20241022',
|
|
655
|
-
messages: [{ role: 'user', content: 'Hello' }]
|
|
747
|
+
messages: [{ role: 'user', content: 'Hello' }],
|
|
656
748
|
});
|
|
657
749
|
|
|
658
750
|
// After
|
|
@@ -675,9 +767,9 @@ const response = await ai(OPENAI.GPT_4, 'Hello');
|
|
|
675
767
|
|
|
676
768
|
---
|
|
677
769
|
|
|
678
|
-
##
|
|
770
|
+
## Contributing
|
|
679
771
|
|
|
680
|
-
We welcome contributions
|
|
772
|
+
We welcome contributions. See [Contributing Guide](./CONTRIBUTING.md).
|
|
681
773
|
|
|
682
774
|
```bash
|
|
683
775
|
git clone https://github.com/Hypothesize-Tech/costkatana-core.git
|
|
@@ -693,7 +785,7 @@ npm run build # Build
|
|
|
693
785
|
|
|
694
786
|
---
|
|
695
787
|
|
|
696
|
-
##
|
|
788
|
+
## Support
|
|
697
789
|
|
|
698
790
|
| Channel | Link |
|
|
699
791
|
|---------|------|
|
|
@@ -705,7 +797,7 @@ npm run build # Build
|
|
|
705
797
|
|
|
706
798
|
---
|
|
707
799
|
|
|
708
|
-
##
|
|
800
|
+
## License
|
|
709
801
|
|
|
710
802
|
MIT © Cost Katana
|
|
711
803
|
|
|
@@ -713,7 +805,7 @@ MIT © Cost Katana
|
|
|
713
805
|
|
|
714
806
|
<div align="center">
|
|
715
807
|
|
|
716
|
-
**Start cutting AI costs today**
|
|
808
|
+
**Start cutting AI costs today**
|
|
717
809
|
|
|
718
810
|
```bash
|
|
719
811
|
npm install cost-katana
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/gateway/client.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,qBAAqB,EACtB,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EAEtB,UAAU,EACX,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,yBAAyB,CAA+B;gBAEpD,MAAM,EAAE,aAAa;IA2HjC,OAAO,CAAC,oBAAoB;IAOtB,MAAM,CACV,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,eAAe,CAAC;IAarB,SAAS,CACb,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,eAAe,CAAC;IAWrB,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,eAAe,CAAC;IAYrB,MAAM,CACV,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,eAAe,CAAC;IAWrB,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,eAAe,CAAC;IAmDrB,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IAajC,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAapC,kBAAkB,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAarD,UAAU,CAAC,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBlF,cAAc,CAClB,OAAO,GAAE;QACP,SAAS,CAAC,EAAE,IAAI,CAAC;QACjB,OAAO,CAAC,EAAE,IAAI,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GACL,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAmBzB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAajE,iBAAiB,CACrB,OAAO,GAAE;QACP,SAAS,CAAC,EAAE,IAAI,CAAC;QACjB,OAAO,CAAC,EAAE,IAAI,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GACL,OAAO,CAAC,MAAM,CAAC;IAaZ,WAAW,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAC;IAajE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAclD,OAAO,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/gateway/client.ts"],"names":[],"mappings":"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"}
|
package/dist/gateway/client.js
CHANGED
|
@@ -349,8 +349,7 @@ class GatewayClient {
|
|
|
349
349
|
headers['CostKatana-LLM-Security-Enabled'] = 'true';
|
|
350
350
|
}
|
|
351
351
|
const outputModerationDisabled = options.outputModeration === false ||
|
|
352
|
-
(options.outputModeration === undefined &&
|
|
353
|
-
this.config.outputModerationEnabled === false);
|
|
352
|
+
(options.outputModeration === undefined && this.config.outputModerationEnabled === false);
|
|
354
353
|
if (outputModerationDisabled) {
|
|
355
354
|
headers['CostKatana-Output-Moderation-Enabled'] = 'false';
|
|
356
355
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/gateway/client.ts"],"names":[],"mappings":";;;;;;AAKA,kDAA4D;AAC5D,4CAAyC;AACzC,2GAG4D;AAsB5D,MAAa,aAAa;IAKxB,YAAY,MAAqB;QAFzB,8BAAyB,GAA4B,EAAE,CAAC;QAG9D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAGrB,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,SAAS,CAAC;QAClD,MAAM,UAAU,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC;QAGlF,IAAI,CAAC,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM;YACf,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAElC,CAAC,UAAU,CAAC,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;aACxC;SACF,CAAC,CAAC;QAGH,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;YAEnD,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBAClC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBACrE,aAAa,CAAC,OAAO,CAAC,uBAAuB,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;gBAC9D,CAAC,CAAC,CAAC;YACL,CAAC;YAGD,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC5B,aAAa,CAAC,OAAO,CAAC,0BAA0B,CAAC,GAAG,MAAM,CAAC;gBAE3D,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC;oBACjC,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,WAAW,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;gBACpF,CAAC;gBAED,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC;oBACvC,aAAa,CAAC,OAAO,CAAC,6BAA6B,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;gBAC3F,CAAC;gBAED,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC;oBAC3C,aAAa,CAAC,OAAO,CAAC,kCAAkC,CAAC;wBACvD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;gBACrD,CAAC;YACH,CAAC;YAGD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC9B,aAAa,CAAC,OAAO,CAAC,0BAA0B,CAAC,GAAG,MAAM,CAAC;gBAE3D,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;oBACjD,aAAa,CAAC,OAAO,CAAC,wBAAwB,CAAC;wBAC7C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC7C,CAAC;gBAED,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;oBAClD,aAAa,CAAC,OAAO,CAAC,yBAAyB,CAAC;wBAC9C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC9C,CAAC;gBAED,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;oBACtD,aAAa,CAAC,OAAO,CAAC,8BAA8B,CAAC;wBACnD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAClD,CAAC;gBAED,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;oBACtD,aAAa,CAAC,OAAO,CAAC,8BAA8B,CAAC;wBACnD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAClD,CAAC;YACH,CAAC;YAGD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;gBAClC,aAAa,CAAC,OAAO,CAAC,6BAA6B,CAAC,GAAG,MAAM,CAAC;gBAE9D,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;oBAClC,aAAa,CAAC,OAAO,CAAC,8BAA8B,CAAC,GAAG,MAAM,CAAC;gBACjE,CAAC;gBAED,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;oBACvD,aAAa,CAAC,OAAO,CAAC,sCAAsC,CAAC;wBAC3D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;gBACpD,CAAC;gBAED,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;oBACvD,aAAa,CAAC,OAAO,CAAC,sCAAsC,CAAC;wBAC3D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;gBACpD,CAAC;YACH,CAAC;YAGD,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;gBAC1C,aAAa,CAAC,OAAO,CAAC,iCAAiC,CAAC,GAAG,OAAO,CAAC;YACrE,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,KAAK,KAAK,EAAE,CAAC;gBAClD,aAAa,CAAC,OAAO,CAAC,sCAAsC,CAAC,GAAG,OAAO,CAAC;YAC1E,CAAC;YAGD,aAAa,CAAC,OAAO,CAAC,uBAAuB,CAAC,GAAG,MAAM,CAAC;YAExD,OAAO,aAAa,CAAC;QACvB,CAAC,CAAC,CAAC;QAGH,IAAA,iEAA4B,EAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAA2B,EAAE,EAAE;YAC9E,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,eAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE;gBAC3D,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;gBACjC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAC/B,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS;aACtC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,eAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACxC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,cAAc,EAAE,MAAM,CAAC,cAAc,KAAK,IAAI;YAC9C,qBAAqB,EAAE,IAAI;SAC5B,CAAC,CAAC;IACL,CAAC;IAGO,oBAAoB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,IAAI,CAAC;IAC7C,CAAC;IAKD,KAAK,CAAC,MAAM,CACV,OAAsB,EACtB,UAAiC,EAAE;QAEnC,MAAM,SAAS,GACb,OAAO,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;QAC5F,MAAM,QAAQ,GAAG,sBAAsB,CAAC;QAExC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IAOD,KAAK,CAAC,SAAS,CACb,OAAyB,EACzB,UAAiC,EAAE;QAEnC,MAAM,SAAS,GACb,OAAO,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;QAC/F,MAAM,QAAQ,GAAG,cAAc,CAAC;QAEhC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IAKD,KAAK,CAAC,QAAQ,CACZ,KAAa,EACb,OAAwB,EACxB,UAAiC,EAAE;QAEnC,MAAM,SAAS,GACb,OAAO,CAAC,SAAS;YACjB,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC;QAC1F,MAAM,QAAQ,GAAG,cAAc,KAAK,kBAAkB,CAAC;QAEvD,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IAKD,KAAK,CAAC,MAAM,CACV,OAAsB,EACtB,UAAiC,EAAE;QAEnC,MAAM,SAAS,GACb,OAAO,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC;QAC3F,MAAM,QAAQ,GAAG,cAAc,CAAC;QAEhC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IAKD,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,IAAS,EACT,UAAiC,EAAE;QAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YAEH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAG3C,MAAM,QAAQ,GAAkB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAEpF,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAG9C,MAAM,eAAe,GAAoB;gBACvC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,OAAO,EAAE,QAAQ,CAAC,OAAiC;gBACnD,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,QAAQ,EAAE;oBACR,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,yBAAyB,CAAmB;oBAC1E,cAAc,EACZ,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,IAAI,cAAc;oBAC5E,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC;oBAC3E,eAAe,EAAE,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;oBAC5E,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC;oBACzF,qBAAqB,EAAE,QAAQ,CAAC,OAAO,CAAC,2BAA2B,CAAC;wBAClE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;wBACzD,CAAC,CAAC,SAAS;iBACd;aACF,CAAC;YAEF,eAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;gBACvC,QAAQ;gBACR,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,WAAW,EAAE,eAAe,CAAC,QAAQ,CAAC,WAAW;gBACjD,cAAc,EAAE,eAAe,CAAC,QAAQ,CAAC,cAAc;gBACvD,aAAa,EAAE,eAAe,CAAC,QAAQ,CAAC,aAAa;aACtD,CAAC,CAAC;YAEH,OAAO,eAAe,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAc,EAAE;gBACrD,QAAQ;gBACR,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACvC,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAc,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACvD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAc,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YAC5D,OAAO,QAAQ,CAAC,IAAI,CAAC,IAA8B,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAc,CAAC,CAAC;YACvE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,UAAU,CAAC,UAAqD,EAAE;QACtE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,SAAS;gBAAE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACrE,IAAI,OAAO,CAAC,OAAO;gBAAE,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAEtD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACxD,eAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAc,CAAC,CAAC;YACtD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,cAAc,CAClB,UAKI,EAAE;QAEN,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,SAAS;gBAAE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACnF,IAAI,OAAO,CAAC,OAAO;gBAAE,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7E,IAAI,OAAO,CAAC,SAAS;gBAAE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACrE,IAAI,OAAO,CAAC,KAAK;gBAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC5E,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAc,CAAC,CAAC;YAC3D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,oBAAoB,CAAC,OAAe;QACxC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;YAClE,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAc,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/E,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,iBAAiB,CACrB,UAII,EAAE;QAEN,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAc,CAAC,CAAC;YAC9D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAClD,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAc,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAKD,YAAY,CAAC,MAA8B;QACzC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QAG5C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9E,CAAC;QAED,eAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;IAKO,YAAY,CAAC,OAA8B;QACjD,MAAM,OAAO,GAA2B,EAAE,CAAC;QAG3C,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACzE,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,uBAAuB,CAAC,GAAG,cAAc,CAAC;QACpD,CAAC;QAGD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;QACvD,CAAC;QAGD,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC/B,OAAO,CAAC,wBAAwB,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;QACjE,CAAC;QAGD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACvC,OAAO,CAAC,0BAA0B,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,0BAA0B,CAAC,GAAG,MAAM,CAAC;gBAC7C,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;oBACtB,OAAO,CAAC,eAAe,CAAC,GAAG,WAAW,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBAC5D,CAAC;gBACD,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;oBAC5B,OAAO,CAAC,6BAA6B,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;gBACnE,CAAC;gBACD,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;oBAChC,OAAO,CAAC,kCAAkC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;gBACvF,CAAC;YACH,CAAC;QACH,CAAC;QAGD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACvC,OAAO,CAAC,0BAA0B,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,0BAA0B,CAAC,GAAG,MAAM,CAAC;gBAC7C,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBACtC,OAAO,CAAC,wBAAwB,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACrE,CAAC;gBACD,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBACvC,OAAO,CAAC,yBAAyB,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACvE,CAAC;gBACD,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC3C,OAAO,CAAC,8BAA8B,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAChF,CAAC;gBACD,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC3C,OAAO,CAAC,8BAA8B,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAChF,CAAC;YACH,CAAC;QACH,CAAC;QAGD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;YACvD,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;YAC3D,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC5B,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;YAC7D,CAAC;YACD,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBAC9C,OAAO,CAAC,2BAA2B,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAChF,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,OAAO,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC7D,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YACjE,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAClC,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YACnE,CAAC;QACH,CAAC;QAGD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC1D,OAAO,CAAC,uBAAuB,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;YAChD,CAAC,CAAC,CAAC;QACL,CAAC;QAGD,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;QACzE,IAAI,OAAO,CAAC,aAAa;YAAE,OAAO,CAAC,2BAA2B,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;QACxF,IAAI,OAAO,CAAC,WAAW;YAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,MAAM,CAAC;QACrE,IAAI,OAAO,CAAC,YAAY;YAAE,OAAO,CAAC,0BAA0B,CAAC,GAAG,MAAM,CAAC;QAEvE,MAAM,gBAAgB,GACpB,OAAO,CAAC,QAAQ,KAAK,KAAK;YAC1B,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,KAAK,CAAC,CAAC;QAC5E,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,iCAAiC,CAAC,GAAG,OAAO,CAAC;QACvD,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACrC,OAAO,CAAC,iCAAiC,CAAC,GAAG,MAAM,CAAC;QACtD,CAAC;QAED,MAAM,wBAAwB,GAC5B,OAAO,CAAC,gBAAgB,KAAK,KAAK;YAClC,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS;gBACrC,IAAI,CAAC,MAAM,CAAC,uBAAuB,KAAK,KAAK,CAAC,CAAC;QACnD,IAAI,wBAAwB,EAAE,CAAC;YAC7B,OAAO,CAAC,sCAAsC,CAAC,GAAG,OAAO,CAAC;QAC5D,CAAC;aAAM,IAAI,OAAO,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;YAC7C,OAAO,CAAC,sCAAsC,CAAC,GAAG,MAAM,CAAC;QAC3D,CAAC;QAGD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC1C,OAAO,CAAC,6BAA6B,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,6BAA6B,CAAC,GAAG,MAAM,CAAC;gBAChD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;oBAC9B,OAAO,CAAC,8BAA8B,CAAC,GAAG,MAAM,CAAC;gBACnD,CAAC;gBACD,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;oBACnD,OAAO,CAAC,sCAAsC,CAAC;wBAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;gBAChD,CAAC;gBACD,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;oBACnD,OAAO,CAAC,sCAAsC,CAAC;wBAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;QAGD,OAAO,CAAC,uBAAuB,CAAC,GAAG,MAAM,CAAC;QAG1C,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAE1C,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC;oBAC5D,OAAO,CAAC,4BAA4B,CAAC,GAAG,IAAI,CAAC,SAAS,CACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CACnC,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBAEN,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAC5B,OAAO,CAAC,4BAA4B,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAClF,CAAC;YACH,CAAC;YAGD,IAAI,OAAO,CAAC,4BAA4B,CAAC,EAAE,CAAC;gBAC1C,OAAO,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,eAAe;YAAE,OAAO,CAAC,6BAA6B,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;QAC9F,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;QAC5E,IAAI,OAAO,CAAC,OAAO;YAAE,OAAO,CAAC,8BAA8B,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/E,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QACnE,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;QAG5E,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC3B,OAAO,CAAC,2BAA2B,CAAC,GAAG,MAAM,CAAC;YAChD,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC7B,OAAO,CAAC,6BAA6B,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YACpE,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,yBAAyB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAC5D,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC1B,OAAO,CAAC,0BAA0B,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9D,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBAC/C,OAAO,CAAC,kCAAkC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YACxF,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACnD,OAAO,CAAC,sCAAsC,CAAC;oBAC7C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;YAChD,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBACpD,OAAO,CAAC,uCAAuC,CAAC;oBAC9C,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;YACjD,CAAC;YAGD,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;gBACjC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC/B,OAAO,CAAC,mCAAmC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACzE,CAAC;gBACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClB,OAAO,CAAC,iCAAiC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC7D,CAAC;gBACD,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;oBAC3C,OAAO,CAAC,wCAAwC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC;gBAC1F,CAAC;gBACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;oBACxC,OAAO,CAAC,sCAAsC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;gBACrF,CAAC;gBACD,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBAChC,OAAO,CAAC,2CAA2C,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC;gBACrF,CAAC;gBACD,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;oBACzC,OAAO,CAAC,sCAAsC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;gBACtF,CAAC;gBACD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;oBACrC,OAAO,CAAC,kCAAkC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;gBAC9E,CAAC;gBACD,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;oBACzC,OAAO,CAAC,sCAAsC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;gBACtF,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,aAAa;YAAE,OAAO,CAAC,2BAA2B,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;QAExF,OAAO,OAAO,CAAC;IACjB,CAAC;IAKO,gBAAgB,CAAC,MAA2B;QAClD,MAAM,OAAO,GAAG;YACd,UAAU;YACV,YAAY;YACZ,YAAY;YACZ,UAAU;YACV,eAAe;YACf,gBAAgB;YAChB,cAAc;YACd,eAAe;YACf,8BAA8B;YAC9B,OAAO;SACR,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,OAAO;YACb,KAAK,CAAC,SAAS;YACf,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;YACvC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE;YACrC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE;YACzB,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1B,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE;YAC5B,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC7B,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9E,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG;YACjB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACjB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC3D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,UAAU,CAAC;IACpB,CAAC;IAKM,eAAe;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC;IAKM,KAAK,CAAC,eAAe;QAC1B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE;gBAC9D,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;aACtC,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACrC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;QAChF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAc,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAKM,KAAK,CAAC,mBAAmB,CAC9B,SAAiB,EACjB,WAAgB,EAChB,UAAgC,EAAE;QAElC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,cAAc,GAA0B;YAC5C,SAAS;YACT,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,QAAQ,EAAE,OAAO,CAAC,SAAS;SAC5B,CAAC;QAEF,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACvD,CAAC;IAKM,KAAK,CAAC,gBAAgB;QAM3B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAClD,OAAO,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAc,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAKM,KAAK,CAAC,mBAAmB;QAK9B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAClD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,YAAY,CAAC;YAGvF,IAAI,WAAW,IAAI,UAAU,CAAC,SAAS,IAAI,WAAW,EAAE,CAAC;gBACvD,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;YAC3F,CAAC;YACD,IAAI,gBAAgB,IAAI,UAAU,CAAC,SAAS,IAAI,gBAAgB,EAAE,CAAC;gBACjE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;YAC3F,CAAC;YACD,IAAI,kBAAkB,IAAI,UAAU,CAAC,WAAW,IAAI,kBAAkB,EAAE,CAAC;gBACvE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC;YAC7F,CAAC;YAGD,IAAI,WAAW,IAAI,UAAU,CAAC,SAAS,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC;gBAC7D,OAAO;oBACL,YAAY,EAAE,IAAI;oBAClB,YAAY,EAAE,SAAS;oBACvB,OAAO,EAAE,gCAAgC;iBAC1C,CAAC;YACJ,CAAC;YACD,IAAI,gBAAgB,IAAI,UAAU,CAAC,SAAS,IAAI,gBAAgB,GAAG,GAAG,EAAE,CAAC;gBACvE,OAAO;oBACL,YAAY,EAAE,IAAI;oBAClB,YAAY,EAAE,SAAS;oBACvB,OAAO,EAAE,gCAAgC;iBAC1C,CAAC;YACJ,CAAC;YACD,IAAI,kBAAkB,IAAI,UAAU,CAAC,WAAW,IAAI,kBAAkB,GAAG,GAAG,EAAE,CAAC;gBAC7E,OAAO;oBACL,YAAY,EAAE,IAAI;oBAClB,YAAY,EAAE,SAAS;oBACvB,OAAO,EAAE,kCAAkC;iBAC5C,CAAC;YACJ,CAAC;YAED,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;QACvF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAc,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAKM,KAAK,CAAC,2BAA2B,CACtC,kBAA8C;QAE9C,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAClD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,KAAK,CAAC;YACf,CAAC;YAGD,OAAO,CACL,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBACrD,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC3C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAc,CAAC,CAAC;YAC1E,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAKM,KAAK,CAAC,oBAAoB,CAC/B,MAAe,EACf,SAAsC;QAEtC,IAAI,CAAC;YACH,MAAM,MAAM,GAA2B,EAAE,CAAC;YAE1C,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACzB,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBACjD,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YAC/C,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAE1E,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAc,CAAC,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAKM,KAAK,CAAC,4BAA4B,CACvC,QAAgB,EAChB,IAAS,EACT,eAAgC,EAChC,iBAAwC,EAAE;QAE1C,MAAM,OAAO,GAA0B;YACrC,GAAG,cAAc;YACjB,QAAQ,EAAE,eAAe;SAC1B,CAAC;QAEF,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAKD,KAAK,CAAC,QAAQ,CACZ,QAAgB,EAChB,IAAS,EACT,cAAmC,EAAE,EACrC,UAAiC,EAAE;QAEnC,MAAM,aAAa,GAAiB;YAClC,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE;gBACJ,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,mBAAmB,EAAE,IAAI;gBACzB,gBAAgB,EAAE,KAAK;gBACvB,sBAAsB,EAAE,QAAQ;gBAChC,iBAAiB,EAAE,KAAK;gBACxB,aAAa,EAAE,GAAG;gBAClB,iBAAiB,EAAE,GAAG;gBACtB,GAAG,WAAW;aACf;SACF,CAAC;QAEF,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE;YACtC,GAAG,OAAO;YACV,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;IACL,CAAC;IAKD,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,IAAS,EACT,UAAiC,EAAE;QAWnC,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE;YAC1D,GAAG,OAAO;YACV,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE;SACjD,CAAC,CAAC;QAGH,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAE/D,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC,CAAC;QAGjF,MAAM,iBAAiB,GAAG,WAAW,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAC;QACrD,MAAM,cAAc,GAClB,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,UAAU,CAAC,GAAG,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3F,MAAM,kBAAkB,GACtB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;QAEnF,OAAO;YACL,WAAW;YACX,IAAI;YACJ,UAAU,EAAE;gBACV,cAAc;gBACd,kBAAkB;gBAClB,mBAAmB,EAAE,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa;aAClE;SACF,CAAC;IACJ,CAAC;IAKD,KAAK,CAAC,sBAAsB,CAC1B,QAAgB,EAChB,IAAS,EACT,YAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EACxC,UAAiC,EAAE;QAEnC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CACxC,IAAI,CAAC,QAAQ,CACX,QAAQ,EACR,IAAI,EACJ;YACE,QAAQ;YACR,gBAAgB,EAAE,IAAI;YACtB,mBAAmB,EAAE,IAAI;SAC1B,EACD,OAAO,CACR,CACF,CAAC;QAEF,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAKD,KAAK,CAAC,iBAAiB,CAAC,UAAiC,EAAE;QACzD,OAAO,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAKD,KAAK,CAAC,wBAAwB,CAC5B,KAKC,EACD,UAAiC,EAAE;QAEnC,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAKD,KAAK,CAAC,gBAAgB,CAAC,UAAiC,EAAE;QACxD,OAAO,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAKD,4BAA4B;QAC1B,OAAO,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAKD,8BAA8B;QAC5B,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC;IACtC,CAAC;IAKD,KAAK,CAAC,YAAY,CAAC,UAAiC,EAAE;QACpD,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;CACF;AAj/BD,sCAi/BC"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/gateway/client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cost-katana",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.2",
|
|
4
4
|
"description": "The simplest way to use AI with automatic cost tracking and optimization. Native SDK support for OpenAI and Google Gemini with automatic AWS Bedrock fallback.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|