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 CHANGED
@@ -1,18 +1,72 @@
1
- # Cost Katana 🥷
1
+ # Cost Katana
2
+
3
+ [![npm](https://img.shields.io/npm/v/cost-katana.svg)](https://www.npmjs.com/package/cost-katana)
4
+ [![PyPI](https://img.shields.io/pypi/v/cost-katana.svg)](https://pypi.org/project/cost-katana/)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
6
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org/)
7
+ [![Python](https://img.shields.io/badge/python-%3E%3D3.8-blue)](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
- ## Get started in 60 seconds
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
- ### Gateway first (drop-in proxy like changing base URL + one header)
65
+ ### Path AGateway (HTTP proxy)
14
66
 
15
- **HTTP / cURL** no SDK; send OpenAI-compatible JSON to the gateway:
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
- See also [`examples/curl-http.sh`](./examples/curl-http.sh).
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: 'gpt-4o',
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()` simple typed API with cost on the response
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
- ```bash
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 / curl) | Gateway URL + `Authorization: Bearer`, or **`gateway()`** in TypeScript |
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. Optional direct provider keys: see [`.env.example`](./.env.example) if you need them.
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
- ## 🌍 Provider-Independent by Design
127
+ ## Configuration
80
128
 
81
- Cost Katana is **completely provider-agnostic**. Never lock yourself into a single vendor.
129
+ ### Environment variables
82
130
 
83
- ### Use Capability-Based Routing
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
- ```typescript
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
- // Automatically selects best model for each task
89
- const code = await ai(ModelCapability.CODE_GENERATION, 'Write a React component');
90
- const chat = await ai(ModelCapability.CONVERSATION, 'Hello!');
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
- ### Optimize by Performance Characteristics
139
+ # Optional per-project analytics
140
+ PROJECT_ID=your_project_id
95
141
 
96
- ```typescript
97
- import { ai } from 'cost-katana';
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
- // Fastest model available
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
- // Cheapest model available
103
- const cheap = await ai({ cost: 'cheapest' }, prompt);
155
+ ### Programmatic configuration
104
156
 
105
- // Best quality model
106
- const best = await ai({ quality: 'best' }, prompt);
157
+ ```typescript
158
+ import { configure } from 'cost-katana';
107
159
 
108
- // Balanced approach
109
- const balanced = await ai({ speed: 'fast', cost: 'cheap' }, prompt);
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
- **Benefits:**
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
- [Read the full Provider-Agnostic Guide →](https://github.com/Hypothesize-Tech/costkatana-examples/blob/main/PROVIDER_AGNOSTIC_GUIDE.md)
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
- ## 📖 Tutorial: Build a Cost-Aware Chatbot
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
- Let's build something real. In this tutorial, you'll create a chatbot that:
125
- - ✅ Tracks every dollar spent
126
- - ✅ Caches repeated questions (saving 100% on duplicates)
127
- - ✅ Optimizes long responses (40-75% savings)
190
+ ---
128
191
 
129
- ### Part 1: Basic Chat Session
192
+ ## Core APIs
130
193
 
131
- ```typescript
132
- import { chat, OPENAI } from 'cost-katana';
194
+ ### `ai()`
133
195
 
134
- // Create a persistent chat session
135
- const session = chat(OPENAI.GPT_4);
196
+ The simplest way to make AI requests with automatic cost tracking.
136
197
 
137
- // Send messages and track costs
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
- // See exactly what you spent
143
- console.log(`💰 Total cost: $${session.totalCost.toFixed(4)}`);
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
- ### Part 2: Add Smart Caching
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
- Cache identical questions to avoid paying twice:
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
- // First call - hits the API
156
- const response1 = await ai(OPENAI.GPT_4, 'What is 2+2?', { cache: true });
157
- console.log(`Cached: ${response1.cached}`); // false
158
- console.log(`Cost: $${response1.cost}`); // $0.0008
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
- // Second call - served from cache (FREE!)
161
- const response2 = await ai(OPENAI.GPT_4, 'What is 2+2?', { cache: true });
162
- console.log(`Cached: ${response2.cached}`); // true
163
- console.log(`Cost: $${response2.cost}`); // $0.0000 🎉
226
+ **Signature**
227
+
228
+ ```typescript
229
+ const session = chat(model, options?);
164
230
  ```
165
231
 
166
- ### Part 3: Enable Cortex Optimization
232
+ **Session API**
167
233
 
168
- For long-form content, Cortex compresses prompts intelligently:
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 { ai, OPENAI } from 'cost-katana';
243
+ import { chat, OPENAI } from 'cost-katana';
172
244
 
173
- const response = await ai(
174
- OPENAI.GPT_4,
175
- 'Write a comprehensive guide to machine learning for beginners',
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
- console.log(`Optimized: ${response.optimized}`);
183
- console.log(`Saved: $${response.savedAmount}`);
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
- ### Part 4: Compare Models Side-by-Side
259
+ ### `gateway()`
187
260
 
188
- Find the best price-to-quality ratio for your use case:
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
- ```typescript
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
- const prompt = 'Summarize the theory of relativity in 50 words';
265
+ ---
194
266
 
195
- const models = [
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
- console.log('📊 Model Cost Comparison\n');
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
- for (const model of models) {
205
- const response = await ai(model.id, prompt);
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
- **Sample Output:**
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
- GPT-4 $0.001200
215
- Claude 3.5 Sonnet $0.000900
216
- Gemini 2.5 Pro $0.000150
217
- GPT-3.5 Turbo $0.000080
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
- ## 🎯 Type-Safe Model Selection
290
+ ## Type-safe model constants
223
291
 
224
- Stop guessing model names. Get autocomplete and catch typos at compile time:
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
- **Why constants over strings?**
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
- ## ⚙️ Configuration
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
- ```bash
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
- # Optional AWS Bedrock
290
- AWS_ACCESS_KEY_ID=...
291
- AWS_SECRET_ACCESS_KEY=...
292
- AWS_REGION=us-east-1
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
- ### Programmatic Configuration
341
+ ### Caching
296
342
 
297
343
  ```typescript
298
- import { configure } from 'cost-katana';
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
- ### Request Options
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
- ```typescript
311
- const response = await ai(OPENAI.GPT_4, 'Your prompt', {
312
- temperature: 0.7, // Creativity (0-2)
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
- export async function POST(request: Request) {
332
- const { prompt } = await request.json();
333
- const response = await ai(OPENAI.GPT_4, prompt);
334
- return Response.json(response);
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
- ### Express.js
373
+ ### Compare models side by side
339
374
 
340
375
  ```typescript
341
- import express from 'express';
342
- import { ai, OPENAI } from 'cost-katana';
376
+ import { ai, OPENAI, ANTHROPIC, GOOGLE } from 'cost-katana';
343
377
 
344
- const app = express();
345
- app.use(express.json());
378
+ const prompt = 'Summarize the theory of relativity in 50 words';
346
379
 
347
- app.post('/api/chat', async (req, res) => {
348
- const response = await ai(OPENAI.GPT_4, req.body.prompt);
349
- res.json(response);
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
- app.listen(3000);
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
- ### Fastify
395
+ ### Quick wins
356
396
 
357
397
  ```typescript
358
- import fastify from 'fastify';
359
398
  import { ai, OPENAI } from 'cost-katana';
360
399
 
361
- const app = fastify();
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
- ### NestJS
403
+ // Better: match model to task
404
+ await ai(OPENAI.GPT_3_5_TURBO, 'What is 2+2?');
372
405
 
373
- ```typescript
374
- import { Controller, Post, Body } from '@nestjs/common';
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
- @Controller('api')
378
- export class ChatController {
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
- ## 🛡️ Built-in Security
415
+ ## Security and reliability
389
416
 
390
- ### Firewall Protection
417
+ ### Firewall
391
418
 
392
- Block prompt injection attacks automatically:
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.GPT_4, 'Ignore all previous instructions and...');
427
+ await ai(OPENAI.GPT_4O, 'Ignore all previous instructions and...');
401
428
  } catch (error) {
402
- console.log('🛡️ Blocked:', error.message);
429
+ console.log('Blocked:', (error as Error).message);
403
430
  }
404
431
  ```
405
432
 
406
- **Protects against:**
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
- ## 🔄 Auto-Failover
435
+ ### Auto-failover
415
436
 
416
- Never let provider outages break your app:
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
- // If OpenAI is down, automatically switches to Claude or Gemini
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
- // Could be 'openai', 'anthropic', or 'google' depending on availability
445
+ // e.g. 'openai', 'anthropic', or 'google' depending on availability and policy
426
446
  ```
427
447
 
428
448
  ---
429
449
 
430
- ## 📊 Usage tracking & analytics
450
+ ## Usage tracking and analytics
431
451
 
432
- ### Dashboard attribution (stay on `ai()`)
452
+ ### Dashboard attribution with `configure()` and `ai()`
433
453
 
434
- Use the same **`ai()`** API as everywhere else. Point usage at your project once with **`configure()`** or env vars—no need to switch to a new class for standard cost and token tracking.
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 are attributed to your project in the dashboard. You can also pass **`projectId`** on individual `ai()` options when you use multiple projects.
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 (recommended)
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 fill in **`TrackerConfig`** from the same environment rules as auto-config: if you set **direct** provider keys (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_API_KEY`, or AWS Bedrock creds), those providers are registered. If you **only** have **`COST_KATANA_API_KEY`** and **no** provider keys, the default is **Cost Katana hosted models** via the gateway (**`costkatana-backend-nest`**): a single OpenAI-shaped slot with the reserved `proxy` key so **`ai()`** / **`initializeGateway()`** route inference through the hosted API (no OpenAI/Anthropic keys required in your app). Optimization and alerts come from package defaults; pass a **partial** config to override anything.
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 behavior: await AICostTracker.createWithDefaults({ ... })
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 tracker instances (advanced)
496
+ ### Dedicated per-provider trackers
478
497
 
479
- If you want a **per-provider tracker object** (instead of the global `ai()` helper), use **`createOpenAITracker`** / **`createAnthropicTracker`** / etc. They wrap `AICostTracker` with a small `complete()` API:
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`** with your own provider list, see [`docs/API.md`](./docs/API.md) and [`examples/`](./examples/).
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
- Once tracking is enabled, you can view detailed analytics at your dashboard:
513
+ ### View analytics in the dashboard
497
514
 
498
- - **Network Performance**: DNS lookup time, TCP connection time, total response time
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
- ### Manual Usage Tracking
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
- For custom implementations or additional tracking:
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-4',
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?.userAgent,
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 & distributed tracing
551
+ ### Session replay and distributed tracing
537
552
 
538
- Session graphs, spans, and trace middleware are provided by the **`trace`** submodule. Start here: [`src/trace/README.md`](./src/trace/README.md) (exported APIs such as `TraceClient`, `LocalTraceService`, and `createTraceMiddleware`).
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
- ## 💡 Cost Optimization Cheatsheet
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
- | Strategy | Savings | When to Use |
545
- |----------|---------|-------------|
546
- | **Use GPT-3.5 over GPT-4** | 90% | Simple tasks, translations |
547
- | **Enable caching** | 100% on hits | Repeated queries, FAQs |
548
- | **Enable Cortex** | 40-75% | Long-form content |
549
- | **Batch in sessions** | 10-20% | Related queries |
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
- ### Quick Wins
572
+ ### Express.js
553
573
 
554
574
  ```typescript
555
- // Expensive: Using GPT-4 for everything
556
- await ai(OPENAI.GPT_4, 'What is 2+2?'); // $0.001
575
+ import express from 'express';
576
+ import { ai, OPENAI } from 'cost-katana';
557
577
 
558
- // Smart: Match model to task
559
- await ai(OPENAI.GPT_3_5_TURBO, 'What is 2+2?'); // $0.0001
578
+ const app = express();
579
+ app.use(express.json());
560
580
 
561
- // Smarter: Cache common queries
562
- await ai(OPENAI.GPT_3_5_TURBO, 'What is 2+2?', { cache: true }); // $0 on repeat
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
- // ✅ Smartest: Cortex for long content
565
- await ai(OPENAI.GPT_4, 'Write a 2000-word essay', { cortex: true }); // 40-75% off
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
- ## 🔧 Error Handling
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.GPT_4, 'Hello');
628
+ const response = await ai(OPENAI.GPT_4O, 'Hello');
577
629
  console.log(response.text);
578
630
  } catch (error) {
579
- switch (error.code) {
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 OPENAI_API_KEY');
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. Retrying...');
637
+ console.log('Rate limited. Retry with backoff.');
585
638
  break;
586
639
  case 'INVALID_MODEL':
587
- console.log('Model not found. Available:', error.availableModels);
640
+ console.log('Model not found. Available:', err.availableModels);
588
641
  break;
589
642
  default:
590
- console.log('Error:', error.message);
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
- ## 🌐 AI Gateway details
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, etc., and can attach caching, retries, firewall, and tracking.
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:** see [Get started in 60 seconds](#get-started-in-60-seconds) above (`gateway()` or curl).
602
- - **`CostKatana-Target-Url`:** only needed for non-default upstream URLs (Azure OpenAI, private endpoints). For standard routes (`/v1/chat/completions`, `/v1/messages`, …), **`gateway()`** uses `inferTargetUrl: true` and usually omits it.
603
- - **Anthropic on hosted gateway:** `gateway.anthropic(...)` / `/v1/messages` often needs no Anthropic key in your app; the service may use Bedrock when no server `ANTHROPIC_API_KEY` is set (see docs for streaming limitations).
604
- - **Dashboard rows:** gateway traffic reflects **proxied** bodies; `AICostTracker` / `trackUsage` is for **custom** structured logging. Multi-turn and token accounting nuances: [`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).
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
- ## 📚 More Examples
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
- Explore 45+ complete examples in our examples repository:
702
+ **External examples repo** — 45+ complete examples:
611
703
 
612
- **🔗 [github.com/Hypothesize-Tech/costkatana-examples](https://github.com/Hypothesize-Tech/costkatana-examples)**
704
+ **[github.com/Hypothesize-Tech/costkatana-examples](https://github.com/Hypothesize-Tech/costkatana-examples)**
613
705
 
614
- | Category | Examples |
615
- |----------|----------|
616
- | **Cost Tracking** | Basic tracking, budgets, alerts |
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 AI orchestration |
713
+ | **Workflows** | Multi-step orchestration |
622
714
  | **Frameworks** | Express, Next.js, Fastify, NestJS, FastAPI |
623
715
 
624
716
  ---
625
717
 
626
- ## 🔄 Migration Guides
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}`); // Bonus: cost tracking!
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
- ## 🤝 Contributing
770
+ ## Contributing
679
771
 
680
- We welcome contributions! See our [Contributing Guide](./CONTRIBUTING.md).
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
- ## 📞 Support
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
- ## 📄 License
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":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/gateway/client.ts"],"names":[],"mappings":"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"}
@@ -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":"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"}
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.1",
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",