@argosvix/sdk 0.4.12-alpha.0 → 0.4.13-alpha.0

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
@@ -234,6 +234,38 @@ Notes:
234
234
  A stream that the consumer cancels mid-way is not recorded (token usage is only final at the
235
235
  stream's `finish`).
236
236
 
237
+ ## LangChain.js
238
+
239
+ If your app uses LangChain.js, attach `argosvixLangChainHandler()` as a callback. Every LLM call
240
+ made through LangChain — including calls issued inside chains and agents — is recorded: provider,
241
+ model, tokens, cost, latency, TTFT (streaming), cache and reasoning tokens.
242
+
243
+ ```typescript
244
+ import { ChatOpenAI } from "@langchain/openai";
245
+ import { argosvixLangChainHandler, flushClient } from "@argosvix/sdk";
246
+
247
+ const handler = argosvixLangChainHandler({ apiKey: process.env.ARGOSVIX_API_KEY });
248
+ const model = new ChatOpenAI({ model: "gpt-5.5" });
249
+
250
+ try {
251
+ // Per-call:
252
+ await model.invoke("Summarize this PR.", { callbacks: [handler] });
253
+ // Or attach once at construction: new ChatOpenAI({ ..., callbacks: [handler] });
254
+ } finally {
255
+ await flushClient(handler); // or: await handler.flush()
256
+ }
257
+ ```
258
+
259
+ Notes:
260
+ - Supported providers are the same four as `wrap()` (OpenAI / Anthropic / Google Gemini /
261
+ Mistral). The handler maps the LangChain model class (e.g. `ChatOpenAI`, `ChatAnthropic`,
262
+ `ChatGoogleGenerativeAI`, `ChatMistralAI`) to the right pricing table. Other providers run
263
+ normally but are not recorded — pass `config.provider` to force a mapping.
264
+ - Token usage is read from the standard `usage_metadata` on the message (with `llmOutput.tokenUsage`
265
+ as a fallback), so cache/reasoning breakdowns are captured where the provider reports them.
266
+ - Budget / policy gates and automatic trace grouping (`withTrace`) apply here too.
267
+ - Recording is best-effort: a callback never throws into your LangChain run.
268
+
237
269
  ## Automatic trace grouping
238
270
 
239
271
  Wrap a unit of work in `withTrace` and every wrapped LLM call inside it is grouped under one
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  export { wrap, getRecorder } from "./client.js";
2
2
  export { argosvixMiddleware } from "./aiSdkMiddleware.js";
3
3
  export type { ArgosvixAiSdkMiddleware } from "./aiSdkMiddleware.js";
4
+ export { argosvixLangChainHandler } from "./langchainCallback.js";
5
+ export type { ArgosvixLangChainHandler } from "./langchainCallback.js";
4
6
  export { withTrace, withSpan, observe, getAmbientTraceContext } from "./context.js";
5
7
  export type { TraceContext } from "./context.js";
6
8
  export type { ObservationRecord, ObservationType } from "./types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACpF,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,WAAW,EACX,UAAU,EACV,2BAA2B,EAC3B,kCAAkC,EAClC,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,eAAe,EACf,WAAW,EACX,eAAe,EACf,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,QAAQ,EACR,cAAc,EACd,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,YAAY,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACpF,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,WAAW,EACX,UAAU,EACV,2BAA2B,EAC3B,kCAAkC,EAClC,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,eAAe,EACf,WAAW,EACX,eAAe,EACf,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,QAAQ,EACR,cAAc,EACd,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { wrap, getRecorder } from "./client.js";
2
2
  export { argosvixMiddleware } from "./aiSdkMiddleware.js";
3
+ export { argosvixLangChainHandler } from "./langchainCallback.js";
3
4
  export { withTrace, withSpan, observe, getAmbientTraceContext } from "./context.js";
4
5
  export { Recorder } from "./recorder.js";
5
6
  export { RuntimeGate, BudgetGate, ArgosvixBudgetExceededError, ArgosvixBudgetGateUnavailableError, ArgosvixPolicyViolationError, } from "./budgetGate.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAGpF,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,WAAW,EACX,UAAU,EACV,2BAA2B,EAC3B,kCAAkC,EAClC,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,eAAe,EACf,WAAW,EACX,eAAe,EACf,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAOxB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAGpF,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,WAAW,EACX,UAAU,EACV,2BAA2B,EAC3B,kCAAkC,EAClC,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,eAAe,EACf,WAAW,EACX,eAAe,EACf,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAOxB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,90 @@
1
+ import type { ArgosvixConfig } from "./types.js";
2
+ import { Recorder } from "./recorder.js";
3
+ /**
4
+ * 監査 Tier 2 = LangChain.js 統合 (コールバックハンドラ)。
5
+ *
6
+ * `argosvixLangChainHandler()` は LangChain の `callbacks` 配列に渡せる
7
+ * コールバックハンドラを返す。 model.invoke / chain / agent の `{ callbacks: [...] }`
8
+ * に入れると、 LangChain 経由の全 LLM 呼び出し (= chain や agent が内部発行する
9
+ * 呼び出しも含む) を観測する: provider / model / tokens / cost / latency / TTFT /
10
+ * cache / reasoning。
11
+ *
12
+ * LangChain へのハード依存は持たない (= `@langchain/core` を import しない)。
13
+ * LangChain は BaseCallbackHandler インスタンスでなくとも、 ハンドラメソッドを
14
+ * 持つ素のオブジェクトを `callbacks` に受け付ける。
15
+ *
16
+ * 設計方針は AI SDK ミドルウェアと同じ: 観測コードは決してホストの呼び出しを
17
+ * 壊さない (= 記録は best-effort)。
18
+ *
19
+ * @example
20
+ * import { ChatOpenAI } from "@langchain/openai";
21
+ * import { argosvixLangChainHandler, flushClient } from "@argosvix/sdk";
22
+ *
23
+ * const handler = argosvixLangChainHandler({ apiKey: process.env.ARGOSVIX_API_KEY });
24
+ * const model = new ChatOpenAI({ model: "gpt-5.5" });
25
+ * try {
26
+ * await model.invoke("hi", { callbacks: [handler] });
27
+ * } finally {
28
+ * await flushClient(handler); // or: await handler.flush()
29
+ * }
30
+ */
31
+ interface LcSerialized {
32
+ id?: unknown;
33
+ name?: unknown;
34
+ }
35
+ interface LcExtraParams {
36
+ invocation_params?: {
37
+ model?: unknown;
38
+ model_name?: unknown;
39
+ modelName?: unknown;
40
+ };
41
+ }
42
+ interface LcUsageMetadata {
43
+ input_tokens?: number;
44
+ output_tokens?: number;
45
+ total_tokens?: number;
46
+ input_token_details?: {
47
+ cache_read?: number;
48
+ cache_creation?: number;
49
+ };
50
+ output_token_details?: {
51
+ reasoning?: number;
52
+ };
53
+ }
54
+ interface LcLLMResult {
55
+ generations?: Array<Array<{
56
+ message?: {
57
+ usage_metadata?: LcUsageMetadata;
58
+ };
59
+ } | undefined> | undefined>;
60
+ llmOutput?: {
61
+ model_name?: unknown;
62
+ tokenUsage?: {
63
+ promptTokens?: number;
64
+ completionTokens?: number;
65
+ totalTokens?: number;
66
+ };
67
+ usage?: {
68
+ promptTokens?: number;
69
+ completionTokens?: number;
70
+ totalTokens?: number;
71
+ };
72
+ };
73
+ }
74
+ /**
75
+ * LangChain のハンドラオブジェクト型 (= callbacks 配列に渡せる素のオブジェクト)。
76
+ * flush() / recorder を直接公開する (flushClient(handler) も可)。
77
+ */
78
+ export interface ArgosvixLangChainHandler {
79
+ name: string;
80
+ handleLLMStart: (llm: LcSerialized, prompts: unknown, runId: string, parentRunId?: string, extraParams?: LcExtraParams) => void;
81
+ handleChatModelStart: (llm: LcSerialized, messages: unknown, runId: string, parentRunId?: string, extraParams?: LcExtraParams) => void;
82
+ handleLLMNewToken: (token: string, idx?: unknown, runId?: string) => void;
83
+ handleLLMEnd: (output: LcLLMResult, runId: string) => void;
84
+ handleLLMError: (err: unknown, runId: string) => void;
85
+ flush: () => Promise<void>;
86
+ readonly recorder: Recorder;
87
+ }
88
+ export declare function argosvixLangChainHandler(config?: ArgosvixConfig): ArgosvixLangChainHandler;
89
+ export {};
90
+ //# sourceMappingURL=langchainCallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"langchainCallback.d.ts","sourceRoot":"","sources":["../src/langchainCallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,YAAY,CAAC;AAK1E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,UAAU,YAAY;IACpB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,iBAAiB,CAAC,EAAE;QAClB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAED,UAAU,eAAe;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,oBAAoB,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,KAAK,CACjB,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE;YAAE,cAAc,CAAC,EAAE,eAAe,CAAA;SAAE,CAAA;KAAE,GAAG,SAAS,CAAC,GAAG,SAAS,CAClF,CAAC;IACF,SAAS,CAAC,EAAE;QACV,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE;YAAE,YAAY,CAAC,EAAE,MAAM,CAAC;YAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACxF,KAAK,CAAC,EAAE;YAAE,YAAY,CAAC,EAAE,MAAM,CAAC;YAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACpF,CAAC;CACH;AAYD;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAChI,oBAAoB,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACvI,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1E,YAAY,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,cAAc,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAiHD,wBAAgB,wBAAwB,CACtC,MAAM,GAAE,cAAmB,GAC1B,wBAAwB,CA+I1B"}
@@ -0,0 +1,236 @@
1
+ import { _registerRecorderFor } from "./client.js";
2
+ import { _registerObservationSink, getAmbientTraceContext } from "./context.js";
3
+ import { generateId } from "./ids.js";
4
+ import { calculateCostWithCache } from "./pricing.js";
5
+ import { Recorder } from "./recorder.js";
6
+ /** 記録は best-effort。 ここで投げてもホストの呼び出しを壊さない。 */
7
+ function safeRun(fn) {
8
+ try {
9
+ fn();
10
+ }
11
+ catch (err) {
12
+ // eslint-disable-next-line no-console
13
+ console.error("[argosvix] LangChain handler recording failed (non-fatal):", err);
14
+ }
15
+ }
16
+ /**
17
+ * LangChain の serialized id (例 ["langchain","chat_models","openai","ChatOpenAI"])
18
+ * や class 名から Argosvix の 4 provider へ寄せる。 セグメント完全一致を主判定に
19
+ * して substring 誤判定を避ける。 最後のセグメント (= class 名、 例 ChatOpenAI) は
20
+ * 補助的に includes 判定する (= class 名しか持たない独自 wrapper も拾うため。 副作用
21
+ * として class 名に provider 名を含む独自クラスは寄せられる)。 該当なし = null
22
+ * (= backend の厳格 enum 検証に合わせ fabricate せず記録をスキップ。 config.provider で上書き可)。
23
+ */
24
+ function mapProvider(llm) {
25
+ const segments = [];
26
+ if (llm && Array.isArray(llm.id)) {
27
+ for (const s of llm.id)
28
+ if (typeof s === "string")
29
+ segments.push(s.toLowerCase());
30
+ }
31
+ if (llm && typeof llm.name === "string")
32
+ segments.push(llm.name.toLowerCase());
33
+ const has = (...keys) => segments.some((seg) => keys.some((k) => seg === k));
34
+ // class 名 (ChatOpenAI 等) は prefix 判定で拾う
35
+ const cls = segments[segments.length - 1] ?? "";
36
+ if (has("openai", "azure_openai", "azureopenai") || cls.includes("openai"))
37
+ return "openai";
38
+ if (has("anthropic") || cls.includes("anthropic"))
39
+ return "anthropic";
40
+ if (has("google_genai", "google_vertexai", "googlegenerativeai", "google", "vertexai") ||
41
+ cls.includes("google") ||
42
+ cls.includes("gemini") ||
43
+ cls.includes("vertex")) {
44
+ return "gemini";
45
+ }
46
+ if (has("mistralai", "mistral") || cls.includes("mistral"))
47
+ return "mistral";
48
+ return null;
49
+ }
50
+ function resolveModel(extraParams) {
51
+ const ip = extraParams?.invocation_params;
52
+ const cand = ip?.model ?? ip?.model_name ?? ip?.modelName;
53
+ return typeof cand === "string" && cand.length > 0 ? cand : "unknown";
54
+ }
55
+ /** LLMResult から正規化トークンを取り出す。 usage_metadata (標準) を優先、 無ければ llmOutput.tokenUsage。 */
56
+ function extractTokens(output) {
57
+ // model 名は token source に関わらず llmOutput.model_name から拾う (= start の
58
+ // invocation_params が無い integration でも model 不明 → cost 0 にならないように)。
59
+ const modelName = typeof output.llmOutput?.model_name === "string" ? output.llmOutput.model_name : undefined;
60
+ const modelSpread = modelName !== undefined ? { modelName } : {};
61
+ // 標準 usage_metadata = AIMessage に載る provider 横断の正規化形
62
+ const meta = output.generations?.[0]?.[0]?.message?.usage_metadata;
63
+ if (meta && (typeof meta.input_tokens === "number" || typeof meta.output_tokens === "number")) {
64
+ const promptTokens = meta.input_tokens ?? 0;
65
+ const completionTokens = meta.output_tokens ?? 0;
66
+ return {
67
+ promptTokens,
68
+ completionTokens,
69
+ totalTokens: meta.total_tokens ?? promptTokens + completionTokens,
70
+ cachedReadTokens: meta.input_token_details?.cache_read ?? 0,
71
+ cachedWriteTokens: meta.input_token_details?.cache_creation ?? 0,
72
+ reasoningTokens: meta.output_token_details?.reasoning ?? 0,
73
+ ...modelSpread,
74
+ };
75
+ }
76
+ // fallback = OpenAI 形 llmOutput.tokenUsage
77
+ const tu = output.llmOutput?.tokenUsage ?? output.llmOutput?.usage;
78
+ const promptTokens = tu?.promptTokens ?? 0;
79
+ const completionTokens = tu?.completionTokens ?? 0;
80
+ return {
81
+ promptTokens,
82
+ completionTokens,
83
+ totalTokens: tu?.totalTokens ?? promptTokens + completionTokens,
84
+ cachedReadTokens: 0,
85
+ cachedWriteTokens: 0,
86
+ reasoningTokens: 0,
87
+ ...modelSpread,
88
+ };
89
+ }
90
+ let warnedUnsupported = null;
91
+ function warnUnsupported(llm) {
92
+ const label = llm && Array.isArray(llm.id)
93
+ ? llm.id.filter((s) => typeof s === "string").join(".")
94
+ : typeof llm?.name === "string"
95
+ ? llm.name
96
+ : "unknown";
97
+ if (warnedUnsupported === null)
98
+ warnedUnsupported = new Set();
99
+ if (warnedUnsupported.has(label))
100
+ return;
101
+ warnedUnsupported.add(label);
102
+ // eslint-disable-next-line no-console
103
+ console.warn(`[argosvix] LangChain model "${label}" is not one of openai/anthropic/gemini/mistral; ` +
104
+ `the call runs normally but is not recorded. Pass config.provider to override.`);
105
+ }
106
+ export function argosvixLangChainHandler(config = {}) {
107
+ const recorder = new Recorder(config);
108
+ _registerObservationSink(recorder);
109
+ const callTags = { ...(config.tags ?? {}) };
110
+ // runId ごとの開始状態 (= start で登録、 end/error で消費・削除)。
111
+ const runs = new Map();
112
+ // abort などで end/error が来ない run が溜まり続けないよう上限を設ける
113
+ // (= Map は挿入順を保つので、 超過時は最古を FIFO 退避)。
114
+ const MAX_PENDING_RUNS = 10000;
115
+ function buildTraceMeta() {
116
+ const meta = {};
117
+ const ambient = config.autoContext === false ? undefined : getAmbientTraceContext();
118
+ const traceId = config.traceId ?? ambient?.traceId;
119
+ if (traceId) {
120
+ meta.traceId = traceId;
121
+ meta.spanId = config.spanId ?? generateId();
122
+ const parent = config.parentSpanId ?? ambient?.spanId;
123
+ if (parent)
124
+ meta.parentSpanId = parent;
125
+ }
126
+ else {
127
+ if (config.spanId)
128
+ meta.spanId = config.spanId;
129
+ if (config.parentSpanId)
130
+ meta.parentSpanId = config.parentSpanId;
131
+ }
132
+ if (config.sessionId)
133
+ meta.sessionId = config.sessionId;
134
+ return meta;
135
+ }
136
+ function onStart(llm, runId, extraParams) {
137
+ const provider = config.provider ?? mapProvider(llm);
138
+ if (provider === null) {
139
+ warnUnsupported(llm);
140
+ return;
141
+ }
142
+ if (runs.size >= MAX_PENDING_RUNS) {
143
+ const oldest = runs.keys().next().value;
144
+ if (oldest !== undefined)
145
+ runs.delete(oldest);
146
+ }
147
+ runs.set(runId, {
148
+ start: Date.now(),
149
+ model: resolveModel(extraParams),
150
+ provider,
151
+ traceMeta: buildTraceMeta(),
152
+ });
153
+ }
154
+ const handler = {
155
+ name: "argosvix_handler",
156
+ handleLLMStart(llm, _prompts, runId, _parentRunId, extraParams) {
157
+ safeRun(() => onStart(llm, runId, extraParams));
158
+ },
159
+ handleChatModelStart(llm, _messages, runId, _parentRunId, extraParams) {
160
+ safeRun(() => onStart(llm, runId, extraParams));
161
+ },
162
+ handleLLMNewToken(_token, _idx, runId) {
163
+ safeRun(() => {
164
+ if (!runId)
165
+ return;
166
+ const state = runs.get(runId);
167
+ if (state && state.ttftMs === undefined) {
168
+ state.ttftMs = Date.now() - state.start;
169
+ }
170
+ });
171
+ },
172
+ handleLLMEnd(output, runId) {
173
+ const state = runs.get(runId);
174
+ if (!state)
175
+ return; // 未対応 provider 等で start が無い
176
+ runs.delete(runId);
177
+ safeRun(() => {
178
+ const t = extractTokens(output);
179
+ const model = t.modelName ?? state.model;
180
+ const cost = calculateCostWithCache(state.provider, model, t.promptTokens, t.completionTokens, t.cachedReadTokens, t.cachedWriteTokens);
181
+ const record = {
182
+ id: generateId(),
183
+ provider: state.provider,
184
+ model,
185
+ promptTokens: t.promptTokens,
186
+ completionTokens: t.completionTokens,
187
+ totalTokens: t.totalTokens,
188
+ costUsd: cost.costUsd,
189
+ latencyMs: Date.now() - state.start,
190
+ timestamp: new Date().toISOString(),
191
+ tags: callTags,
192
+ ...state.traceMeta,
193
+ ...(t.cachedReadTokens > 0 ? { cachedReadTokens: t.cachedReadTokens } : {}),
194
+ ...(t.cachedWriteTokens > 0 ? { cachedWriteTokens: t.cachedWriteTokens } : {}),
195
+ ...(cost.cacheSavingsUsd > 0 ? { cacheSavingsUsd: cost.cacheSavingsUsd } : {}),
196
+ ...(t.reasoningTokens > 0 ? { reasoningTokens: t.reasoningTokens } : {}),
197
+ ...(state.ttftMs !== undefined ? { ttftMs: state.ttftMs } : {}),
198
+ };
199
+ recorder.record(record);
200
+ });
201
+ },
202
+ handleLLMError(err, runId) {
203
+ const state = runs.get(runId);
204
+ if (!state)
205
+ return;
206
+ runs.delete(runId);
207
+ safeRun(() => recorder.record({
208
+ id: generateId(),
209
+ provider: state.provider,
210
+ model: state.model,
211
+ promptTokens: 0,
212
+ completionTokens: 0,
213
+ totalTokens: 0,
214
+ costUsd: 0,
215
+ latencyMs: Date.now() - state.start,
216
+ timestamp: new Date().toISOString(),
217
+ tags: callTags,
218
+ ...state.traceMeta,
219
+ error: err instanceof Error ? err.message : String(err),
220
+ }));
221
+ },
222
+ async flush() {
223
+ try {
224
+ await recorder.flush();
225
+ }
226
+ catch (err) {
227
+ // eslint-disable-next-line no-console
228
+ console.error("[argosvix] LangChain handler flush failed:", err);
229
+ }
230
+ },
231
+ recorder,
232
+ };
233
+ _registerRecorderFor(handler, recorder);
234
+ return handler;
235
+ }
236
+ //# sourceMappingURL=langchainCallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"langchainCallback.js","sourceRoot":"","sources":["../src/langchainCallback.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAyFzC,6CAA6C;AAC7C,SAAS,OAAO,CAAC,EAAc;IAC7B,IAAI,CAAC;QACH,EAAE,EAAE,CAAC;IACP,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,4DAA4D,EAAE,GAAG,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,GAA6B;IAChD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE;YAAE,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,CAAC,GAAG,IAAc,EAAW,EAAE,CACzC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtD,wCAAwC;IACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,IAAI,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC5F,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,WAAW,CAAC;IACtE,IACE,GAAG,CAAC,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,UAAU,CAAC;QAClF,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACtB,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACtB,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACtB,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,WAAsC;IAC1D,MAAM,EAAE,GAAG,WAAW,EAAE,iBAAiB,CAAC;IAC1C,MAAM,IAAI,GAAG,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,UAAU,IAAI,EAAE,EAAE,SAAS,CAAC;IAC1D,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACxE,CAAC;AAED,oFAAoF;AACpF,SAAS,aAAa,CAAC,MAAmB;IASxC,mEAAmE;IACnE,oEAAoE;IACpE,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,SAAS,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7F,MAAM,WAAW,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,qDAAqD;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC;IACnE,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,EAAE,CAAC;QAC9F,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;QAC5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;QACjD,OAAO;YACL,YAAY;YACZ,gBAAgB;YAChB,WAAW,EAAE,IAAI,CAAC,YAAY,IAAI,YAAY,GAAG,gBAAgB;YACjE,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,EAAE,UAAU,IAAI,CAAC;YAC3D,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,EAAE,cAAc,IAAI,CAAC;YAChE,eAAe,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,IAAI,CAAC;YAC1D,GAAG,WAAW;SACf,CAAC;IACJ,CAAC;IACD,2CAA2C;IAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,UAAU,IAAI,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IACnE,MAAM,YAAY,GAAG,EAAE,EAAE,YAAY,IAAI,CAAC,CAAC;IAC3C,MAAM,gBAAgB,GAAG,EAAE,EAAE,gBAAgB,IAAI,CAAC,CAAC;IACnD,OAAO;QACL,YAAY;QACZ,gBAAgB;QAChB,WAAW,EAAE,EAAE,EAAE,WAAW,IAAI,YAAY,GAAG,gBAAgB;QAC/D,gBAAgB,EAAE,CAAC;QACnB,iBAAiB,EAAE,CAAC;QACpB,eAAe,EAAE,CAAC;QAClB,GAAG,WAAW;KACf,CAAC;AACJ,CAAC;AAED,IAAI,iBAAiB,GAAuB,IAAI,CAAC;AACjD,SAAS,eAAe,CAAC,GAA6B;IACpD,MAAM,KAAK,GACT,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACvD,CAAC,CAAC,OAAO,GAAG,EAAE,IAAI,KAAK,QAAQ;YAC7B,CAAC,CAAC,GAAG,CAAC,IAAI;YACV,CAAC,CAAC,SAAS,CAAC;IAClB,IAAI,iBAAiB,KAAK,IAAI;QAAE,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;IAC9D,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO;IACzC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,sCAAsC;IACtC,OAAO,CAAC,IAAI,CACV,+BAA+B,KAAK,mDAAmD;QACrF,+EAA+E,CAClF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,SAAyB,EAAE;IAE3B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,QAAQ,GAA2B,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;IACpE,iDAAiD;IACjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IACzC,gDAAgD;IAChD,sCAAsC;IACtC,MAAM,gBAAgB,GAAG,KAAK,CAAC;IAE/B,SAAS,cAAc;QACrB,MAAM,IAAI,GAAc,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC;QACpF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,OAAO,EAAE,OAAO,CAAC;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,IAAI,OAAO,EAAE,MAAM,CAAC;YACtD,IAAI,MAAM;gBAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,IAAI,MAAM,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC/C,IAAI,MAAM,CAAC,YAAY;gBAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACnE,CAAC;QACD,IAAI,MAAM,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,OAAO,CACd,GAAiB,EACjB,KAAa,EACb,WAAsC;QAEtC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,eAAe,CAAC,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,IAAI,gBAAgB,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACxC,IAAI,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;YACd,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE;YACjB,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC;YAChC,QAAQ;YACR,SAAS,EAAE,cAAc,EAAE;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAA6B;QACxC,IAAI,EAAE,kBAAkB;QAExB,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW;YAC5D,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW;YACnE,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK;YACnC,OAAO,CAAC,GAAG,EAAE;gBACX,IAAI,CAAC,KAAK;oBAAE,OAAO;gBACnB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBACxC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC1C,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,YAAY,CAAC,MAAM,EAAE,KAAK;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,4BAA4B;YAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,CAAC,GAAG,EAAE;gBACX,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;gBAChC,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC;gBACzC,MAAM,IAAI,GAAG,sBAAsB,CACjC,KAAK,CAAC,QAAQ,EACd,KAAK,EACL,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,gBAAgB,EAClB,CAAC,CAAC,gBAAgB,EAClB,CAAC,CAAC,iBAAiB,CACpB,CAAC;gBACF,MAAM,MAAM,GAAkB;oBAC5B,EAAE,EAAE,UAAU,EAAE;oBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,KAAK;oBACL,YAAY,EAAE,CAAC,CAAC,YAAY;oBAC5B,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;oBACpC,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK;oBACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,IAAI,EAAE,QAAQ;oBACd,GAAG,KAAK,CAAC,SAAS;oBAClB,GAAG,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3E,GAAG,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9E,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9E,GAAG,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxE,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChE,CAAC;gBACF,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,cAAc,CAAC,GAAG,EAAE,KAAK;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,CAAC,GAAG,EAAE,CACX,QAAQ,CAAC,MAAM,CAAC;gBACd,EAAE,EAAE,UAAU,EAAE;gBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,YAAY,EAAE,CAAC;gBACf,gBAAgB,EAAE,CAAC;gBACnB,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK;gBACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,IAAI,EAAE,QAAQ;gBACd,GAAG,KAAK,CAAC,SAAS;gBAClB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CACH,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,KAAK;YACT,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;YACzB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,QAAQ;KACT,CAAC;IAEF,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxC,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/dist/version.d.ts CHANGED
@@ -10,5 +10,5 @@
10
10
  * 2. packages/sdk/package.json の `version` も同 値に更新
11
11
  * 3. npm run build && tests pass を確認してから commit
12
12
  */
13
- export declare const SDK_VERSION: "0.4.12-alpha.0";
13
+ export declare const SDK_VERSION: "0.4.13-alpha.0";
14
14
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -10,5 +10,5 @@
10
10
  * 2. packages/sdk/package.json の `version` も同 値に更新
11
11
  * 3. npm run build && tests pass を確認してから commit
12
12
  */
13
- export const SDK_VERSION = "0.4.12-alpha.0";
13
+ export const SDK_VERSION = "0.4.13-alpha.0";
14
14
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@argosvix/sdk",
3
- "version": "0.4.12-alpha.0",
3
+ "version": "0.4.13-alpha.0",
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",