cost-katana 2.3.3 β 2.4.1
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 +126 -94
- package/dist/config/tracker-defaults.d.ts +8 -0
- package/dist/config/tracker-defaults.d.ts.map +1 -0
- package/dist/config/tracker-defaults.js +79 -0
- package/dist/config/tracker-defaults.js.map +1 -0
- package/dist/feedback/client.d.ts.map +1 -1
- package/dist/feedback/client.js +5 -5
- package/dist/feedback/client.js.map +1 -1
- package/dist/gateway/client.d.ts +2 -1
- package/dist/gateway/client.d.ts.map +1 -1
- package/dist/gateway/client.js +32 -1
- package/dist/gateway/client.js.map +1 -1
- package/dist/gateway/index.d.ts +1 -0
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +4 -0
- package/dist/gateway/index.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -58
- package/dist/index.js.map +1 -1
- package/dist/trace/client.js +8 -8
- package/dist/trace/client.js.map +1 -1
- package/dist/types/gateway.d.ts +11 -0
- package/dist/types/gateway.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,27 +6,73 @@ Cost Katana is a drop-in SDK that wraps your AI calls with automatic cost tracki
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Get started in 60 seconds
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Set **`COST_KATANA_API_KEY`**. **`PROJECT_ID`** is optional (recommended for per-project analytics in the dashboard).
|
|
12
|
+
|
|
13
|
+
### Gateway first (drop-in proxy β like changing base URL + one header)
|
|
14
|
+
|
|
15
|
+
**HTTP / cURL** β no SDK; send OpenAI-compatible JSON to the gateway:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
curl -s https://api.costkatana.com/api/gateway/v1/chat/completions \
|
|
19
|
+
-H "Content-Type: application/json" \
|
|
20
|
+
-H "Authorization: Bearer $COST_KATANA_API_KEY" \
|
|
21
|
+
-d '{"model":"gpt-4o","messages":[{"role":"user","content":"Hello!"}]}'
|
|
22
|
+
```
|
|
23
|
+
|
|
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()`):
|
|
12
27
|
|
|
13
28
|
```bash
|
|
14
29
|
npm install cost-katana
|
|
15
30
|
```
|
|
16
31
|
|
|
17
|
-
|
|
32
|
+
```typescript
|
|
33
|
+
import { gateway } from 'cost-katana';
|
|
34
|
+
|
|
35
|
+
const res = await gateway().openai({
|
|
36
|
+
model: 'gpt-4o',
|
|
37
|
+
messages: [{ role: 'user', content: 'Hello!' }],
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
console.log(res.data);
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### `ai()` β simple typed API with cost on the response
|
|
18
44
|
|
|
19
45
|
```typescript
|
|
20
46
|
import { ai, OPENAI } from 'cost-katana';
|
|
21
47
|
|
|
22
|
-
const response = await ai(OPENAI.
|
|
48
|
+
const response = await ai(OPENAI.GPT_4O, 'Hello');
|
|
49
|
+
|
|
50
|
+
console.log(response.text, response.cost);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Python
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
pip install costkatana
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
import cost_katana as ck
|
|
61
|
+
from cost_katana import openai
|
|
23
62
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
console.log(response.tokens); // 47
|
|
63
|
+
response = ck.ai(openai.gpt_4o, "Hello")
|
|
64
|
+
print(response.text, response.cost)
|
|
27
65
|
```
|
|
28
66
|
|
|
29
|
-
|
|
67
|
+
### Which API should I use?
|
|
68
|
+
|
|
69
|
+
| If you want⦠| Use |
|
|
70
|
+
|--------------|-----|
|
|
71
|
+
| Drop-in HTTP proxy (existing OpenAI clients / curl) | Gateway URL + `Authorization: Bearer`, or **`gateway()`** in TypeScript |
|
|
72
|
+
| Simple AI calls with cost on the response | **`ai()`** / **`chat()`** |
|
|
73
|
+
| Session replay, advanced analytics, or manual `trackUsage` | **`AICostTracker`** (advanced) |
|
|
74
|
+
|
|
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.
|
|
30
76
|
|
|
31
77
|
---
|
|
32
78
|
|
|
@@ -222,16 +268,25 @@ DEEPSEEK.DEEPSEEK_CHAT
|
|
|
222
268
|
|
|
223
269
|
### Environment Variables
|
|
224
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
|
+
|
|
225
273
|
```bash
|
|
226
|
-
#
|
|
274
|
+
# Required for hosted Cost Katana
|
|
227
275
|
COST_KATANA_API_KEY=dak_your_key_here
|
|
228
276
|
|
|
229
|
-
#
|
|
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.
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
# Optional β direct provider keys
|
|
230
285
|
OPENAI_API_KEY=sk-...
|
|
231
286
|
ANTHROPIC_API_KEY=sk-ant-...
|
|
232
287
|
GEMINI_API_KEY=...
|
|
233
288
|
|
|
234
|
-
#
|
|
289
|
+
# Optional β AWS Bedrock
|
|
235
290
|
AWS_ACCESS_KEY_ID=...
|
|
236
291
|
AWS_SECRET_ACCESS_KEY=...
|
|
237
292
|
AWS_REGION=us-east-1
|
|
@@ -372,34 +427,70 @@ console.log(`Provider used: ${response.provider}`);
|
|
|
372
427
|
|
|
373
428
|
---
|
|
374
429
|
|
|
375
|
-
## π
|
|
430
|
+
## π Usage tracking & analytics
|
|
376
431
|
|
|
377
|
-
###
|
|
432
|
+
### Dashboard attribution (stay on `ai()`)
|
|
378
433
|
|
|
379
|
-
|
|
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.
|
|
380
435
|
|
|
381
436
|
```typescript
|
|
382
|
-
import {
|
|
437
|
+
import { configure, ai, OPENAI } from 'cost-katana';
|
|
383
438
|
|
|
384
|
-
|
|
439
|
+
await configure({
|
|
385
440
|
apiKey: process.env.COST_KATANA_API_KEY,
|
|
386
|
-
|
|
387
|
-
comprehensiveTracking: true,
|
|
388
|
-
// Optional: configure tracking endpoints
|
|
389
|
-
trackingEndpoint: 'https://api.costkatana.com/usage/track-comprehensive'
|
|
441
|
+
projectId: process.env.PROJECT_ID,
|
|
390
442
|
});
|
|
391
443
|
|
|
392
|
-
const response = await
|
|
444
|
+
const response = await ai(OPENAI.GPT_4O, 'Explain quantum computing', {
|
|
445
|
+
tags: ['demo', 'readme'],
|
|
446
|
+
});
|
|
393
447
|
|
|
394
|
-
console.log(
|
|
448
|
+
console.log(response.text);
|
|
395
449
|
console.log('Cost:', response.cost);
|
|
396
450
|
console.log('Tokens:', response.tokens);
|
|
397
|
-
console.log('Response
|
|
451
|
+
console.log('Response time (ms):', response.responseTime);
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
Calls are attributed to your project in the dashboard. You can also pass **`projectId`** on individual `ai()` options when you use multiple projects.
|
|
455
|
+
|
|
456
|
+
### `AICostTracker` with defaults (recommended)
|
|
457
|
+
|
|
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.
|
|
398
459
|
|
|
399
|
-
|
|
400
|
-
|
|
460
|
+
```typescript
|
|
461
|
+
import { createCostKatanaTracker, AIProvider } from 'cost-katana';
|
|
462
|
+
|
|
463
|
+
const tracker = await createCostKatanaTracker();
|
|
464
|
+
|
|
465
|
+
// Optional overrides (merged on top of defaults)
|
|
466
|
+
const custom = await createCostKatanaTracker({
|
|
467
|
+
optimization: { enablePromptOptimization: false },
|
|
468
|
+
providers: [{ provider: AIProvider.OpenAI, apiKey: process.env.OPENAI_API_KEY! }]
|
|
469
|
+
});
|
|
470
|
+
|
|
471
|
+
// Same behavior: await AICostTracker.createWithDefaults({ ... })
|
|
472
|
+
// Short alias: import { tracker as costKatana } from 'cost-katana';
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
Requires **`COST_KATANA_API_KEY`** in the environment (same as `AICostTracker.create()`). **`PROJECT_ID`** remains optional.
|
|
476
|
+
|
|
477
|
+
### Dedicated tracker instances (advanced)
|
|
478
|
+
|
|
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:
|
|
480
|
+
|
|
481
|
+
```typescript
|
|
482
|
+
import { createOpenAITracker, OPENAI } from 'cost-katana';
|
|
483
|
+
|
|
484
|
+
const t = await createOpenAITracker({ model: OPENAI.GPT_4O });
|
|
485
|
+
const response = await t.complete({ prompt: 'Explain quantum computing' });
|
|
486
|
+
|
|
487
|
+
console.log(response.text);
|
|
488
|
+
console.log('Total cost (USD):', response.cost.totalCost);
|
|
489
|
+
console.log('Response time (ms):', response.responseTime);
|
|
401
490
|
```
|
|
402
491
|
|
|
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
|
+
|
|
403
494
|
### View Analytics in Dashboard
|
|
404
495
|
|
|
405
496
|
Once tracking is enabled, you can view detailed analytics at your dashboard:
|
|
@@ -415,11 +506,9 @@ Once tracking is enabled, you can view detailed analytics at your dashboard:
|
|
|
415
506
|
For custom implementations or additional tracking:
|
|
416
507
|
|
|
417
508
|
```typescript
|
|
418
|
-
import {
|
|
509
|
+
import { createCostKatanaTracker } from 'cost-katana';
|
|
419
510
|
|
|
420
|
-
const tracker =
|
|
421
|
-
apiKey: process.env.COST_KATANA_API_KEY
|
|
422
|
-
});
|
|
511
|
+
const tracker = await createCostKatanaTracker();
|
|
423
512
|
|
|
424
513
|
// Manually track usage with additional metadata
|
|
425
514
|
await tracker.trackUsage({
|
|
@@ -444,39 +533,9 @@ await tracker.trackUsage({
|
|
|
444
533
|
});
|
|
445
534
|
```
|
|
446
535
|
|
|
447
|
-
### Session
|
|
448
|
-
|
|
449
|
-
```typescript
|
|
450
|
-
import { AICostTracker } from 'cost-katana';
|
|
451
|
-
|
|
452
|
-
const tracker = new AICostTracker({
|
|
453
|
-
apiKey: process.env.COST_KATANA_API_KEY,
|
|
454
|
-
sessionReplay: true,
|
|
455
|
-
distributedTracing: true
|
|
456
|
-
});
|
|
457
|
-
|
|
458
|
-
// Start a traced session
|
|
459
|
-
const sessionId = tracker.startSession({
|
|
460
|
-
userId: 'user_123',
|
|
461
|
-
feature: 'customer-support',
|
|
462
|
-
metadata: {
|
|
463
|
-
source: 'web-app',
|
|
464
|
-
version: '1.2.3'
|
|
465
|
-
}
|
|
466
|
-
});
|
|
467
|
-
|
|
468
|
-
// All requests in this session will be automatically traced
|
|
469
|
-
const response = await tracker.chat(OPENAI.GPT_4, 'How can I cancel my subscription?', {
|
|
470
|
-
sessionId,
|
|
471
|
-
tags: ['support', 'billing']
|
|
472
|
-
});
|
|
536
|
+
### Session replay & distributed tracing
|
|
473
537
|
|
|
474
|
-
|
|
475
|
-
const sessionStats = await tracker.endSession(sessionId);
|
|
476
|
-
console.log('Session cost:', sessionStats.totalCost);
|
|
477
|
-
console.log('Session duration:', sessionStats.duration);
|
|
478
|
-
console.log('Requests made:', sessionStats.requestCount);
|
|
479
|
-
```
|
|
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`).
|
|
480
539
|
|
|
481
540
|
---
|
|
482
541
|
|
|
@@ -535,41 +594,14 @@ try {
|
|
|
535
594
|
|
|
536
595
|
---
|
|
537
596
|
|
|
538
|
-
## π AI Gateway
|
|
539
|
-
|
|
540
|
-
The gateway is an **HTTP proxy**: your app calls **Cost Katanaβs URL** (for example `https://api.costkatana.com/api/gateway/...`) with your **Cost Katana API key**. The server can **forward** that request to OpenAI, Anthropic, Google, Cohere, etc., and attach **usage tracking, caching, budgets, firewall**, and other features.
|
|
541
|
-
|
|
542
|
-
### What is `CostKatana-Target-Url` for?
|
|
543
|
-
|
|
544
|
-
It tells the proxy **which providerβs base URL** to use (for example `https://api.anthropic.com` or `https://api.openai.com`). The proxy then combines that **origin** with your route (such as `/v1/messages`) to build the real upstream request.
|
|
545
|
-
|
|
546
|
-
**It is not your API key.** Keys are either:
|
|
547
|
-
|
|
548
|
-
- **Provider keys** configured on the **server** (for example `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`), or
|
|
549
|
-
- **Proxy keys** (`ck-proxy-...`) that map to a stored provider key in Cost Katana.
|
|
597
|
+
## π AI Gateway β details
|
|
550
598
|
|
|
551
|
-
The
|
|
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.
|
|
552
600
|
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
Set `CostKatana-Target-Url` (or `targetUrl` in SDK options) when you use a **non-default base URL** (Azure OpenAI, a private endpoint, another OpenAI-compatible host) or a path the server cannot infer.
|
|
558
|
-
|
|
559
|
-
On **Cost Katanaβs hosted gateway**, **`/v1/messages` (Anthropic)** needs **no extra SDK or client configuration**: if the server has **no** `ANTHROPIC_API_KEY`, the gateway **automatically** runs Claude on **AWS Bedrock** (Cost Katanaβs AWS account/credentials). Your app still calls the normal gateway URL and `gateway.anthropic(...)` as usual. Streaming (`stream: true`) is not supported on that automatic Bedrock path yetβuse non-streaming or set `ANTHROPIC_API_KEY` on the server for direct Anthropic streaming.
|
|
560
|
-
|
|
561
|
-
```typescript
|
|
562
|
-
import { createGatewayClientFromEnv } from 'cost-katana';
|
|
563
|
-
|
|
564
|
-
const gateway = createGatewayClientFromEnv();
|
|
565
|
-
|
|
566
|
-
// No target header needed β gateway infers Anthropic from /v1/messages
|
|
567
|
-
const res = await gateway.anthropic({
|
|
568
|
-
model: 'claude-sonnet-4-5-20250929',
|
|
569
|
-
max_tokens: 256,
|
|
570
|
-
messages: [{ role: 'user', content: 'Hello' }],
|
|
571
|
-
});
|
|
572
|
-
```
|
|
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).
|
|
573
605
|
|
|
574
606
|
---
|
|
575
607
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ProviderConfig, TrackerConfig } from '../types';
|
|
2
|
+
export declare const COST_KATANA_HOSTED_MODELS_PROXY_KEY: "proxy";
|
|
3
|
+
export declare function hasCostKatanaApiKeyInEnv(): boolean;
|
|
4
|
+
export declare function hasDirectProviderApiKeysInEnv(): boolean;
|
|
5
|
+
export declare function costKatanaHostedModelsProviderEntry(): ProviderConfig;
|
|
6
|
+
export declare function detectProvidersFromEnv(): ProviderConfig[];
|
|
7
|
+
export declare function createDefaultTrackerConfig(overrides?: Partial<TrackerConfig>): TrackerConfig;
|
|
8
|
+
//# sourceMappingURL=tracker-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker-defaults.d.ts","sourceRoot":"","sources":["../../src/config/tracker-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AASzF,eAAO,MAAM,mCAAmC,EAAG,OAAgB,CAAC;AAGpE,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAGD,wBAAgB,6BAA6B,IAAI,OAAO,CAOvD;AAMD,wBAAgB,mCAAmC,IAAI,cAAc,CAKpE;AASD,wBAAgB,sBAAsB,IAAI,cAAc,EAAE,CAwBzD;AAqBD,wBAAgB,0BAA0B,CAAC,SAAS,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,aAAa,CAuBhG"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.COST_KATANA_HOSTED_MODELS_PROXY_KEY = void 0;
|
|
4
|
+
exports.hasCostKatanaApiKeyInEnv = hasCostKatanaApiKeyInEnv;
|
|
5
|
+
exports.hasDirectProviderApiKeysInEnv = hasDirectProviderApiKeysInEnv;
|
|
6
|
+
exports.costKatanaHostedModelsProviderEntry = costKatanaHostedModelsProviderEntry;
|
|
7
|
+
exports.detectProvidersFromEnv = detectProvidersFromEnv;
|
|
8
|
+
exports.createDefaultTrackerConfig = createDefaultTrackerConfig;
|
|
9
|
+
const types_1 = require("../types");
|
|
10
|
+
const default_1 = require("./default");
|
|
11
|
+
exports.COST_KATANA_HOSTED_MODELS_PROXY_KEY = 'proxy';
|
|
12
|
+
function hasCostKatanaApiKeyInEnv() {
|
|
13
|
+
return !!(process.env.COST_KATANA_API_KEY || process.env.COSTKATANA_KEY);
|
|
14
|
+
}
|
|
15
|
+
function hasDirectProviderApiKeysInEnv() {
|
|
16
|
+
return !!(process.env.OPENAI_API_KEY ||
|
|
17
|
+
process.env.ANTHROPIC_API_KEY ||
|
|
18
|
+
process.env.GOOGLE_API_KEY ||
|
|
19
|
+
(process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY));
|
|
20
|
+
}
|
|
21
|
+
function costKatanaHostedModelsProviderEntry() {
|
|
22
|
+
return {
|
|
23
|
+
provider: types_1.AIProvider.OpenAI,
|
|
24
|
+
apiKey: exports.COST_KATANA_HOSTED_MODELS_PROXY_KEY
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function detectProvidersFromEnv() {
|
|
28
|
+
const providers = [];
|
|
29
|
+
if (process.env.OPENAI_API_KEY) {
|
|
30
|
+
providers.push({ provider: types_1.AIProvider.OpenAI, apiKey: process.env.OPENAI_API_KEY });
|
|
31
|
+
}
|
|
32
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
33
|
+
providers.push({ provider: types_1.AIProvider.Anthropic, apiKey: process.env.ANTHROPIC_API_KEY });
|
|
34
|
+
}
|
|
35
|
+
if (process.env.GOOGLE_API_KEY) {
|
|
36
|
+
providers.push({ provider: types_1.AIProvider.Google, apiKey: process.env.GOOGLE_API_KEY });
|
|
37
|
+
}
|
|
38
|
+
if (process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY) {
|
|
39
|
+
providers.push({
|
|
40
|
+
provider: types_1.AIProvider.AWSBedrock,
|
|
41
|
+
region: process.env.AWS_REGION || 'us-east-1'
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (providers.length === 0) {
|
|
45
|
+
return [costKatanaHostedModelsProviderEntry()];
|
|
46
|
+
}
|
|
47
|
+
return providers;
|
|
48
|
+
}
|
|
49
|
+
function mergeOptimization(overrides) {
|
|
50
|
+
const base = default_1.defaultConfig.optimization;
|
|
51
|
+
return {
|
|
52
|
+
...base,
|
|
53
|
+
...overrides,
|
|
54
|
+
thresholds: {
|
|
55
|
+
...base.thresholds,
|
|
56
|
+
...overrides?.thresholds
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function createDefaultTrackerConfig(overrides = {}) {
|
|
61
|
+
const providers = overrides.providers !== undefined ? overrides.providers : detectProvidersFromEnv();
|
|
62
|
+
const optimization = mergeOptimization(overrides.optimization);
|
|
63
|
+
const tracking = {
|
|
64
|
+
retentionDays: 30,
|
|
65
|
+
...default_1.defaultConfig.tracking,
|
|
66
|
+
...overrides.tracking
|
|
67
|
+
};
|
|
68
|
+
const alerts = { ...default_1.defaultConfig.alerts, ...overrides.alerts };
|
|
69
|
+
return {
|
|
70
|
+
providers,
|
|
71
|
+
optimization,
|
|
72
|
+
tracking,
|
|
73
|
+
alerts,
|
|
74
|
+
logger: overrides.logger,
|
|
75
|
+
apiUrl: overrides.apiUrl,
|
|
76
|
+
projectId: overrides.projectId
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=tracker-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker-defaults.js","sourceRoot":"","sources":["../../src/config/tracker-defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/feedback/client.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAyC;IAexE,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,wBAAwB,CAAC;IAqB9B,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/feedback/client.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAyC;IAexE,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,wBAAwB,CAAC;IAqB9B,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,wBAAwB,CAAC;IAwB9B,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAe5C,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAclD,4BAA4B,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAc1D,0BAA0B,IAAI,OAAO,CAAC,iBAAiB,CAAC;CAU/D"}
|
package/dist/feedback/client.js
CHANGED
|
@@ -19,7 +19,7 @@ class FeedbackClient {
|
|
|
19
19
|
}
|
|
20
20
|
async submitFeedback(requestId, feedback) {
|
|
21
21
|
try {
|
|
22
|
-
const response = await this.client.post(`/
|
|
22
|
+
const response = await this.client.post(`/request-feedback/${requestId}/feedback`, feedback);
|
|
23
23
|
return {
|
|
24
24
|
success: true,
|
|
25
25
|
message: response.data.message || 'Feedback submitted successfully',
|
|
@@ -36,7 +36,7 @@ class FeedbackClient {
|
|
|
36
36
|
}
|
|
37
37
|
async updateImplicitSignals(requestId, signals) {
|
|
38
38
|
try {
|
|
39
|
-
const response = await this.client.put(`/
|
|
39
|
+
const response = await this.client.put(`/request-feedback/${requestId}/implicit-signals`, signals);
|
|
40
40
|
return {
|
|
41
41
|
success: true,
|
|
42
42
|
message: response.data.message || 'Implicit signals updated successfully',
|
|
@@ -53,7 +53,7 @@ class FeedbackClient {
|
|
|
53
53
|
}
|
|
54
54
|
async getFeedback(requestId) {
|
|
55
55
|
try {
|
|
56
|
-
const response = await this.client.get(`/
|
|
56
|
+
const response = await this.client.get(`/request-feedback/${requestId}/feedback`);
|
|
57
57
|
return response.data.data;
|
|
58
58
|
}
|
|
59
59
|
catch (error) {
|
|
@@ -65,7 +65,7 @@ class FeedbackClient {
|
|
|
65
65
|
}
|
|
66
66
|
async getFeedbackAnalytics() {
|
|
67
67
|
try {
|
|
68
|
-
const response = await this.client.get('/
|
|
68
|
+
const response = await this.client.get('/request-feedback/analytics');
|
|
69
69
|
return response.data.data;
|
|
70
70
|
}
|
|
71
71
|
catch (error) {
|
|
@@ -83,7 +83,7 @@ class FeedbackClient {
|
|
|
83
83
|
}
|
|
84
84
|
async getGlobalFeedbackAnalytics() {
|
|
85
85
|
try {
|
|
86
|
-
const response = await this.client.get('/
|
|
86
|
+
const response = await this.client.get('/request-feedback/analytics/global');
|
|
87
87
|
return response.data.data;
|
|
88
88
|
}
|
|
89
89
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/feedback/client.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA6C;AAQ7C,MAAa,cAAc;IAKzB,YAAY,MAAc,EAAE,UAAkB,gCAAgC;QAC5E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;gBACtC,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;IACL,CAAC;IAKD,KAAK,CAAC,cAAc,CAClB,SAAiB,EACjB,QAAyB;QAEzB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/feedback/client.ts"],"names":[],"mappings":"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"}
|
package/dist/gateway/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ClientSideRequestData } from '../interceptors/comprehensive-tracking.interceptor';
|
|
2
|
-
import { GatewayConfig, GatewayRequestOptions, GatewayResponse, GatewayStats, CacheStats, AgentTraceSummary, AgentTraceDetails, OpenAIRequest, AnthropicRequest, GoogleAIRequest, CohereRequest, ProxyKeyInfo, FirewallOptions, ProxyKeyUsageOptions, FirewallAnalytics, SastConfig } from '../types/gateway';
|
|
2
|
+
import { GatewayConfig, GatewayRequestOptions, GatewayResponse, GatewayStats, CacheStats, AgentTraceSummary, AgentTraceDetails, OpenAIRequest, AnthropicRequest, GoogleAIRequest, CohereRequest, ProxyKeyInfo, FirewallOptions, ProxyKeyUsageOptions, FirewallAnalytics, GatewaySecuritySummary, SastConfig } from '../types/gateway';
|
|
3
3
|
export declare class GatewayClient {
|
|
4
4
|
private config;
|
|
5
5
|
private client;
|
|
@@ -13,6 +13,7 @@ export declare class GatewayClient {
|
|
|
13
13
|
makeRequest(endpoint: string, data: any, options?: GatewayRequestOptions): Promise<GatewayResponse>;
|
|
14
14
|
getStats(): Promise<GatewayStats>;
|
|
15
15
|
getCacheStats(): Promise<CacheStats>;
|
|
16
|
+
getSecuritySummary(): Promise<GatewaySecuritySummary>;
|
|
16
17
|
clearCache(options?: {
|
|
17
18
|
userScope?: string;
|
|
18
19
|
expired?: boolean;
|
|
@@ -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,
|
|
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
|
@@ -73,6 +73,12 @@ class GatewayClient {
|
|
|
73
73
|
this.config.firewall.openaiThreshold.toString();
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
+
if (this.config.securityEnabled === false) {
|
|
77
|
+
requestConfig.headers['CostKatana-LLM-Security-Enabled'] = 'false';
|
|
78
|
+
}
|
|
79
|
+
if (this.config.outputModerationEnabled === false) {
|
|
80
|
+
requestConfig.headers['CostKatana-Output-Moderation-Enabled'] = 'false';
|
|
81
|
+
}
|
|
76
82
|
requestConfig.headers['CostKatana-Auto-Track'] = 'true';
|
|
77
83
|
return requestConfig;
|
|
78
84
|
});
|
|
@@ -174,6 +180,16 @@ class GatewayClient {
|
|
|
174
180
|
throw error;
|
|
175
181
|
}
|
|
176
182
|
}
|
|
183
|
+
async getSecuritySummary() {
|
|
184
|
+
try {
|
|
185
|
+
const response = await this.client.get('/security/summary');
|
|
186
|
+
return response.data.data;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
logger_1.logger.error('Failed to get gateway security summary', error);
|
|
190
|
+
throw error;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
177
193
|
async clearCache(options = {}) {
|
|
178
194
|
try {
|
|
179
195
|
const params = new URLSearchParams();
|
|
@@ -324,8 +340,23 @@ class GatewayClient {
|
|
|
324
340
|
headers['CostKatana-Omit-Request'] = 'true';
|
|
325
341
|
if (options.omitResponse)
|
|
326
342
|
headers['CostKatana-Omit-Response'] = 'true';
|
|
327
|
-
|
|
343
|
+
const securityDisabled = options.security === false ||
|
|
344
|
+
(options.security === undefined && this.config.securityEnabled === false);
|
|
345
|
+
if (securityDisabled) {
|
|
346
|
+
headers['CostKatana-LLM-Security-Enabled'] = 'false';
|
|
347
|
+
}
|
|
348
|
+
else if (options.security === true) {
|
|
328
349
|
headers['CostKatana-LLM-Security-Enabled'] = 'true';
|
|
350
|
+
}
|
|
351
|
+
const outputModerationDisabled = options.outputModeration === false ||
|
|
352
|
+
(options.outputModeration === undefined &&
|
|
353
|
+
this.config.outputModerationEnabled === false);
|
|
354
|
+
if (outputModerationDisabled) {
|
|
355
|
+
headers['CostKatana-Output-Moderation-Enabled'] = 'false';
|
|
356
|
+
}
|
|
357
|
+
else if (options.outputModeration === true) {
|
|
358
|
+
headers['CostKatana-Output-Moderation-Enabled'] = 'true';
|
|
359
|
+
}
|
|
329
360
|
if (options.firewall !== undefined) {
|
|
330
361
|
if (typeof options.firewall === 'boolean') {
|
|
331
362
|
headers['CostKatana-Firewall-Enabled'] = options.firewall.toString();
|