@argosvix/sdk 0.1.0 → 0.1.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/CHANGELOG.md +72 -0
- package/README.md +7 -3
- package/dist/recorder.d.ts +12 -0
- package/dist/recorder.d.ts.map +1 -1
- package/dist/recorder.js +41 -1
- package/dist/recorder.js.map +1 -1
- package/package.json +3 -7
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@argosvix/sdk` are documented in this file.
|
|
4
|
+
The format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
5
|
+
and the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [0.1.1] - 2026-05-21
|
|
8
|
+
|
|
9
|
+
Patch release that hardens short-lived runtime delivery and matches the SDK's
|
|
10
|
+
default endpoint to the live backend.
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- **Workers / Lambda fire-and-forget loss (HIGH).** When `bufferMaxSize` was
|
|
14
|
+
reached, `record()` started a background `flush()` whose `fetch` could be
|
|
15
|
+
killed by the runtime before completing. `flushClient()` now waits behind
|
|
16
|
+
any in-flight flush via an internal `inFlightFlush` promise, so records
|
|
17
|
+
buffered before the handler returned are guaranteed to reach the backend
|
|
18
|
+
in order.
|
|
19
|
+
- **Edge runtime crash on `process.env` (HIGH).** `record()` no longer assumes
|
|
20
|
+
a Node `process` global exists; environments without it (Cloudflare Workers
|
|
21
|
+
in some modes, Vercel Edge) used to throw and break the wrapped LLM call.
|
|
22
|
+
- **Default endpoint corrected to `https://ingest.argosvix.com/v1/ingest`.**
|
|
23
|
+
The previous default pointed to a non-existent subdomain
|
|
24
|
+
(`api.argosvix.com`), which would have failed for any user who omitted an
|
|
25
|
+
explicit `endpoint` in their `ArgosvixConfig`.
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
- Regression tests for the two `Recorder` fixes above (concurrent flush
|
|
29
|
+
serialization, missing `process` global).
|
|
30
|
+
|
|
31
|
+
### Documentation
|
|
32
|
+
- Source comments rewritten to English ahead of wider distribution.
|
|
33
|
+
|
|
34
|
+
## [0.1.0] - 2026-05-21
|
|
35
|
+
|
|
36
|
+
Initial public release on npm under the `alpha` dist-tag.
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
- `wrap(client, config?)`: transparent observability wrapper for AI provider
|
|
40
|
+
SDK clients. Supported targets:
|
|
41
|
+
- OpenAI `chat.completions.create` (sync + streaming) and `responses.create`
|
|
42
|
+
(sync; streaming is deferred to a later release).
|
|
43
|
+
- Anthropic `messages.create` (sync + streaming, with `message_start` /
|
|
44
|
+
`message_delta` accumulation).
|
|
45
|
+
- Mistral `chat.complete` and `chat.stream`.
|
|
46
|
+
- Gemini legacy SDK (`@google/generative-ai`) `getGenerativeModel(...)`
|
|
47
|
+
plus `generateContent` and `generateContentStream`.
|
|
48
|
+
- Gemini current SDK (`@google/genai`) `models.generateContent` and
|
|
49
|
+
`models.generateContentStream`.
|
|
50
|
+
- `getRecorder(client)`: retrieve the per-client `Recorder` instance.
|
|
51
|
+
- `flushClient(client)`: short-lived runtime helper that resolves only after
|
|
52
|
+
the buffer is delivered to the backend.
|
|
53
|
+
- `Recorder` class with `record()`, `flush()`, retry on 5xx/network with
|
|
54
|
+
exponential-ish backoff, and per-instance buffer isolation.
|
|
55
|
+
- `calculateCost(provider, model, prompt, completion)` and the public
|
|
56
|
+
`PRICING` table covering 2026-05 OpenAI / Anthropic / Gemini / Mistral
|
|
57
|
+
prices, with prefix matching for version-suffixed model IDs.
|
|
58
|
+
- TypeScript types: `Provider`, `ArgosvixConfig`, `LlmCallRecord`,
|
|
59
|
+
`PricingEntry`.
|
|
60
|
+
- Idempotency: wrapping the same client twice is a no-op (`WeakMap` for
|
|
61
|
+
clients, `WeakSet` for Gemini model instances).
|
|
62
|
+
|
|
63
|
+
### Notes
|
|
64
|
+
- The SDK does **not** record prompt or completion bodies. Only token counts,
|
|
65
|
+
cost, latency, tags, error metadata, and a small request-meta overview are
|
|
66
|
+
sent to the backend.
|
|
67
|
+
- `peerDependencies` for every provider SDK are marked optional — install
|
|
68
|
+
only the ones you actually use.
|
|
69
|
+
- License: MIT.
|
|
70
|
+
|
|
71
|
+
[0.1.1]: https://www.npmjs.com/package/@argosvix/sdk/v/0.1.1
|
|
72
|
+
[0.1.0]: https://www.npmjs.com/package/@argosvix/sdk/v/0.1.0
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Transparent observability wrapper for AI provider SDKs. Wrap a single line of code and get cost / latency / token / error records for every LLM call across OpenAI, Anthropic, Gemini, and Mistral.
|
|
4
4
|
|
|
5
|
-
>
|
|
5
|
+
> 🟢 **Alpha released** — backend ingest (`ingest.argosvix.com`) と dashboard (`dashboard.argosvix.com`) は稼働中。 npm に `@argosvix/sdk@alpha` で公開済。 dogfood / ベータ提供期間として無料プランのみで運用しており、 サインアップから API キー発行までブラウザだけで完了します。 詳細な変更履歴は [`CHANGELOG.md`](./CHANGELOG.md) を参照。
|
|
6
6
|
>
|
|
7
7
|
> 設計方針:
|
|
8
8
|
> - **顧客のエンドユーザー PII は送信しない**(prompt / completion 本文は記録対象外、 token 数 + cost + latency + error code のみ)
|
|
@@ -23,11 +23,15 @@ Transparent observability wrapper for AI provider SDKs. Wrap a single line of co
|
|
|
23
23
|
## Install
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
# alpha 段階 (= 公開後)
|
|
27
26
|
npm install @argosvix/sdk@alpha openai
|
|
27
|
+
# Anthropic / Gemini / Mistral を使う場合は対応する SDK も併せて install
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
API
|
|
30
|
+
API キー取得手順(2026-05 時点、 dogfood / ベータ運用):
|
|
31
|
+
|
|
32
|
+
1. <https://dashboard.argosvix.com/ja/signup> でメールアドレスとパスワードを登録
|
|
33
|
+
2. 受信した認証メール内のリンクを開く
|
|
34
|
+
3. 認証完了画面で `argosvix_live_…` 形式の API キーが**一度だけ**表示されます。 安全な場所に保管してください
|
|
31
35
|
|
|
32
36
|
```bash
|
|
33
37
|
export ARGOSVIX_API_KEY=argosvix_live_...
|
package/dist/recorder.d.ts
CHANGED
|
@@ -10,6 +10,13 @@ import type { ArgosvixConfig, LlmCallRecord } from "./types.js";
|
|
|
10
10
|
export declare class Recorder {
|
|
11
11
|
private buffer;
|
|
12
12
|
private readonly config;
|
|
13
|
+
/**
|
|
14
|
+
* Tracks the most recently started flush so that callers can serialize behind it.
|
|
15
|
+
* A fire-and-forget `void this.flush()` from `record()` (triggered when the buffer
|
|
16
|
+
* fills) starts an in-flight POST that `flushClient()` must wait on; otherwise
|
|
17
|
+
* Workers / Lambda may return while that POST is still in flight, killing it.
|
|
18
|
+
*/
|
|
19
|
+
private inFlightFlush;
|
|
13
20
|
constructor(config?: ArgosvixConfig);
|
|
14
21
|
record(record: LlmCallRecord): void;
|
|
15
22
|
/**
|
|
@@ -19,8 +26,13 @@ export declare class Recorder {
|
|
|
19
26
|
* If all attempts fail the records are dropped and logged via console.error
|
|
20
27
|
* (durable persistence is intentionally out of scope for the MVP).
|
|
21
28
|
* Errors are never thrown — backend outages must not break the host application.
|
|
29
|
+
*
|
|
30
|
+
* Concurrent flush calls are serialized via `inFlightFlush`. An auto-flush
|
|
31
|
+
* triggered by `bufferMaxSize` and a subsequent explicit `flushClient()`
|
|
32
|
+
* both await the same promise instead of racing.
|
|
22
33
|
*/
|
|
23
34
|
flush(): Promise<LlmCallRecord[]>;
|
|
35
|
+
private doFlush;
|
|
24
36
|
getBufferSize(): number;
|
|
25
37
|
/**
|
|
26
38
|
* Test-only helper. Do not call from production code.
|
package/dist/recorder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;;GAOG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;
|
|
1
|
+
{"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;;GAOG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC;;;;;OAKG;IACH,OAAO,CAAC,aAAa,CAAyC;gBAElD,MAAM,GAAE,cAAmB;IAIvC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAuBnC;;;;;;;;;;;OAWG;IACG,KAAK,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAwBzB,OAAO;IA8DrB,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACH,iBAAiB,IAAI,IAAI;CAI1B"}
|
package/dist/recorder.js
CHANGED
|
@@ -9,6 +9,13 @@
|
|
|
9
9
|
export class Recorder {
|
|
10
10
|
buffer = [];
|
|
11
11
|
config;
|
|
12
|
+
/**
|
|
13
|
+
* Tracks the most recently started flush so that callers can serialize behind it.
|
|
14
|
+
* A fire-and-forget `void this.flush()` from `record()` (triggered when the buffer
|
|
15
|
+
* fills) starts an in-flight POST that `flushClient()` must wait on; otherwise
|
|
16
|
+
* Workers / Lambda may return while that POST is still in flight, killing it.
|
|
17
|
+
*/
|
|
18
|
+
inFlightFlush = null;
|
|
12
19
|
constructor(config = {}) {
|
|
13
20
|
this.config = config;
|
|
14
21
|
}
|
|
@@ -16,7 +23,13 @@ export class Recorder {
|
|
|
16
23
|
if (this.config.disabled)
|
|
17
24
|
return;
|
|
18
25
|
this.buffer.push(record);
|
|
19
|
-
|
|
26
|
+
// Guard `process` access — some edge runtimes (Cloudflare Workers in
|
|
27
|
+
// certain modes, Vercel Edge) do not expose a Node `process` global, and
|
|
28
|
+
// an unguarded `process.env[...]` reference would throw and break the
|
|
29
|
+
// host LLM call we are wrapping.
|
|
30
|
+
if (typeof process !== "undefined" &&
|
|
31
|
+
process.env != null &&
|
|
32
|
+
process.env["ARGOSVIX_DEBUG"] === "1") {
|
|
20
33
|
// eslint-disable-next-line no-console
|
|
21
34
|
console.log("[argosvix]", JSON.stringify(record));
|
|
22
35
|
}
|
|
@@ -32,11 +45,37 @@ export class Recorder {
|
|
|
32
45
|
* If all attempts fail the records are dropped and logged via console.error
|
|
33
46
|
* (durable persistence is intentionally out of scope for the MVP).
|
|
34
47
|
* Errors are never thrown — backend outages must not break the host application.
|
|
48
|
+
*
|
|
49
|
+
* Concurrent flush calls are serialized via `inFlightFlush`. An auto-flush
|
|
50
|
+
* triggered by `bufferMaxSize` and a subsequent explicit `flushClient()`
|
|
51
|
+
* both await the same promise instead of racing.
|
|
35
52
|
*/
|
|
36
53
|
async flush() {
|
|
54
|
+
// Wait behind any in-flight flush so callers (e.g. flushClient in a Worker
|
|
55
|
+
// handler's `finally`) cannot return before earlier records reach the backend.
|
|
56
|
+
if (this.inFlightFlush) {
|
|
57
|
+
try {
|
|
58
|
+
await this.inFlightFlush;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Errors from the prior flush are already logged inside doFlush; swallow here.
|
|
62
|
+
}
|
|
63
|
+
}
|
|
37
64
|
if (this.buffer.length === 0)
|
|
38
65
|
return [];
|
|
39
66
|
const records = this.buffer.splice(0);
|
|
67
|
+
const promise = this.doFlush(records);
|
|
68
|
+
this.inFlightFlush = promise;
|
|
69
|
+
try {
|
|
70
|
+
return await promise;
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
if (this.inFlightFlush === promise) {
|
|
74
|
+
this.inFlightFlush = null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async doFlush(records) {
|
|
40
79
|
if (this.config.disabled || !this.config.apiKey) {
|
|
41
80
|
return records;
|
|
42
81
|
}
|
|
@@ -95,6 +134,7 @@ export class Recorder {
|
|
|
95
134
|
*/
|
|
96
135
|
__resetForTesting() {
|
|
97
136
|
this.buffer.splice(0);
|
|
137
|
+
this.inFlightFlush = null;
|
|
98
138
|
}
|
|
99
139
|
}
|
|
100
140
|
//# sourceMappingURL=recorder.js.map
|
package/dist/recorder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recorder.js","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,OAAO,QAAQ;IACX,MAAM,GAAoB,EAAE,CAAC;IACpB,MAAM,CAAiB;
|
|
1
|
+
{"version":3,"file":"recorder.js","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@argosvix/sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Drop-in observability wrapper for OpenAI, Anthropic, Gemini, Mistral SDK clients. One-line wrap() = cost / latency / quality records.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"argosvix",
|
|
@@ -18,12 +18,7 @@
|
|
|
18
18
|
"author": "jissocyu",
|
|
19
19
|
"homepage": "https://argosvix.com",
|
|
20
20
|
"bugs": {
|
|
21
|
-
"
|
|
22
|
-
},
|
|
23
|
-
"repository": {
|
|
24
|
-
"type": "git",
|
|
25
|
-
"url": "git+https://github.com/typing-game/Argosvix.git",
|
|
26
|
-
"directory": "packages/sdk"
|
|
21
|
+
"email": "hello@argosvix.com"
|
|
27
22
|
},
|
|
28
23
|
"type": "module",
|
|
29
24
|
"main": "./dist/index.js",
|
|
@@ -37,6 +32,7 @@
|
|
|
37
32
|
"files": [
|
|
38
33
|
"dist",
|
|
39
34
|
"README.md",
|
|
35
|
+
"CHANGELOG.md",
|
|
40
36
|
"LICENSE"
|
|
41
37
|
],
|
|
42
38
|
"engines": {
|