@vinhnt-sdk/llm 0.1.3

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-caller.js","sourceRoot":"","sources":["../src/model-caller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * LLM Adapter Registry — register, resolve, and swap providers.
3
+ *
4
+ * Providers register via `registerAdapter(providerNames, adapter)`.
5
+ * The registry validates all-or-nothing registration, prevents duplicates,
6
+ * and supports atomic swap for hot-reload.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { LlmRegistry } from "@vinhnt-sdk/llm";
11
+ *
12
+ * const registry = new LlmRegistry();
13
+ * registry.registerAdapter(["deepseek"], new DeepSeekAdapter());
14
+ * registry.registerAdapter(["openai", "azure"], new OpenAIAdapter());
15
+ *
16
+ * // Resolve by provider name
17
+ * const adapter = registry.getAdapter("deepseek");
18
+ *
19
+ * // Atomic swap (all-or-nothing)
20
+ * registry.registerAdapter(["deepseek"], new DeepSeekV2Adapter());
21
+ * ```
22
+ */
23
+ import type { LlmAdapter, ProviderInfo, RetryPolicy } from "./adapter.js";
24
+ /** Handle returned by registerAdapter — controls the registration lifetime. */
25
+ export interface AdapterRegistrationHandle {
26
+ /** Release all routes registered by this call. */
27
+ dispose(): void;
28
+ /** Atomically replace the provider routes with a new adapter. */
29
+ replace(adapter: LlmAdapter): void;
30
+ }
31
+ /** Error thrown when adapter registration fails. */
32
+ export declare class AdapterRegistrationError extends Error {
33
+ readonly code: "DUPLICATE_ADAPTER" | "EMPTY_PROVIDERS" | "CONFLICT";
34
+ constructor(message: string, code: "DUPLICATE_ADAPTER" | "EMPTY_PROVIDERS" | "CONFLICT");
35
+ }
36
+ /**
37
+ * Registry for LLM adapters — manages provider → adapter mapping.
38
+ *
39
+ * Registration rules:
40
+ * - All-or-nothing: if any provider name conflicts, nothing registers
41
+ * - One adapter per provider route
42
+ * - Non-empty provider names required
43
+ * - Atomic swap: replace() validates the full candidate set before mutating
44
+ */
45
+ export declare class LlmRegistry {
46
+ /** provider name → { adapter, owner } */
47
+ private readonly adapters;
48
+ /** owner symbol → provider names (for dispose) */
49
+ private readonly owners;
50
+ /**
51
+ * Register an adapter for one or more provider names.
52
+ *
53
+ * @param providerNames - Provider names this adapter handles (e.g., `["openai", "azure"]`)
54
+ * @param adapter - The adapter implementation
55
+ * @returns A handle to control the registration lifetime
56
+ * @throws AdapterRegistrationError if any provider name conflicts
57
+ */
58
+ registerAdapter(providerNames: readonly string[], adapter: LlmAdapter): AdapterRegistrationHandle;
59
+ /**
60
+ * Get an adapter by provider name.
61
+ * @returns The adapter, or undefined if not registered.
62
+ */
63
+ getAdapter(provider: string): LlmAdapter | undefined;
64
+ /**
65
+ * Check if a provider is registered.
66
+ */
67
+ hasProvider(provider: string): boolean;
68
+ /**
69
+ * Get metadata about all registered providers.
70
+ */
71
+ listProviders(): readonly (ProviderInfo & {
72
+ readonly routes: readonly string[];
73
+ })[];
74
+ /**
75
+ * Get the retry policy for a provider.
76
+ * Falls back to the adapter's policy, then to the default.
77
+ */
78
+ getRetryPolicy(provider: string): RetryPolicy | undefined;
79
+ /**
80
+ * Clear all registrations.
81
+ */
82
+ clear(): void;
83
+ }
84
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAI1E,+EAA+E;AAC/E,MAAM,WAAW,yBAAyB;IACxC,kDAAkD;IAClD,OAAO,IAAI,IAAI,CAAC;IAChB,iEAAiE;IACjE,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;CACpC;AAID,oDAAoD;AACpD,qBAAa,wBAAyB,SAAQ,KAAK;aAG/B,IAAI,EAAE,mBAAmB,GAAG,iBAAiB,GAAG,UAAU;gBAD1E,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,mBAAmB,GAAG,iBAAiB,GAAG,UAAU;CAK7E;AAID;;;;;;;;GAQG;AACH,qBAAa,WAAW;IACtB,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6D;IACtF,kDAAkD;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IAEtD;;;;;;;OAOG;IACH,eAAe,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,yBAAyB;IA2CjG;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIpD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAItC;;OAEG;IACH,aAAa,IAAI,SAAS,CAAC,YAAY,GAAG;QAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC,EAAE;IAkBnF;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAKzD;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * LLM Adapter Registry — register, resolve, and swap providers.
3
+ *
4
+ * Providers register via `registerAdapter(providerNames, adapter)`.
5
+ * The registry validates all-or-nothing registration, prevents duplicates,
6
+ * and supports atomic swap for hot-reload.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { LlmRegistry } from "@vinhnt-sdk/llm";
11
+ *
12
+ * const registry = new LlmRegistry();
13
+ * registry.registerAdapter(["deepseek"], new DeepSeekAdapter());
14
+ * registry.registerAdapter(["openai", "azure"], new OpenAIAdapter());
15
+ *
16
+ * // Resolve by provider name
17
+ * const adapter = registry.getAdapter("deepseek");
18
+ *
19
+ * // Atomic swap (all-or-nothing)
20
+ * registry.registerAdapter(["deepseek"], new DeepSeekV2Adapter());
21
+ * ```
22
+ */
23
+ // ── Registration Errors ──
24
+ /** Error thrown when adapter registration fails. */
25
+ export class AdapterRegistrationError extends Error {
26
+ code;
27
+ constructor(message, code) {
28
+ super(message);
29
+ this.code = code;
30
+ this.name = "AdapterRegistrationError";
31
+ }
32
+ }
33
+ // ── Registry ──
34
+ /**
35
+ * Registry for LLM adapters — manages provider → adapter mapping.
36
+ *
37
+ * Registration rules:
38
+ * - All-or-nothing: if any provider name conflicts, nothing registers
39
+ * - One adapter per provider route
40
+ * - Non-empty provider names required
41
+ * - Atomic swap: replace() validates the full candidate set before mutating
42
+ */
43
+ export class LlmRegistry {
44
+ /** provider name → { adapter, owner } */
45
+ adapters = new Map();
46
+ /** owner symbol → provider names (for dispose) */
47
+ owners = new Map();
48
+ /**
49
+ * Register an adapter for one or more provider names.
50
+ *
51
+ * @param providerNames - Provider names this adapter handles (e.g., `["openai", "azure"]`)
52
+ * @param adapter - The adapter implementation
53
+ * @returns A handle to control the registration lifetime
54
+ * @throws AdapterRegistrationError if any provider name conflicts
55
+ */
56
+ registerAdapter(providerNames, adapter) {
57
+ if (providerNames.length === 0) {
58
+ throw new AdapterRegistrationError("At least one provider name is required", "EMPTY_PROVIDERS");
59
+ }
60
+ // Validate no conflicts
61
+ for (const name of providerNames) {
62
+ if (this.adapters.has(name)) {
63
+ const existing = this.adapters.get(name);
64
+ throw new AdapterRegistrationError(`Provider "${name}" is already registered by another adapter`, "DUPLICATE_ADAPTER");
65
+ }
66
+ }
67
+ // Register
68
+ const owner = Symbol(`adapter:${providerNames.join(",")}`);
69
+ for (const name of providerNames) {
70
+ this.adapters.set(name, { adapter, owner });
71
+ }
72
+ this.owners.set(owner, [...providerNames]);
73
+ return {
74
+ dispose: () => {
75
+ const routes = this.owners.get(owner);
76
+ if (routes) {
77
+ for (const name of routes) {
78
+ this.adapters.delete(name);
79
+ }
80
+ this.owners.delete(owner);
81
+ }
82
+ },
83
+ replace: (newAdapter) => {
84
+ const routes = this.owners.get(owner);
85
+ if (!routes)
86
+ return;
87
+ for (const name of routes) {
88
+ this.adapters.set(name, { adapter: newAdapter, owner });
89
+ }
90
+ },
91
+ };
92
+ }
93
+ /**
94
+ * Get an adapter by provider name.
95
+ * @returns The adapter, or undefined if not registered.
96
+ */
97
+ getAdapter(provider) {
98
+ return this.adapters.get(provider)?.adapter;
99
+ }
100
+ /**
101
+ * Check if a provider is registered.
102
+ */
103
+ hasProvider(provider) {
104
+ return this.adapters.has(provider);
105
+ }
106
+ /**
107
+ * Get metadata about all registered providers.
108
+ */
109
+ listProviders() {
110
+ const seen = new Map();
111
+ for (const [name, { adapter }] of this.adapters) {
112
+ const existing = seen.get(adapter);
113
+ if (existing) {
114
+ existing.push(name);
115
+ }
116
+ else {
117
+ seen.set(adapter, [name]);
118
+ }
119
+ }
120
+ const result = [];
121
+ for (const [adapter, routes] of seen) {
122
+ const info = adapter.providerInfo(routes[0]);
123
+ result.push({ ...info, routes });
124
+ }
125
+ return result;
126
+ }
127
+ /**
128
+ * Get the retry policy for a provider.
129
+ * Falls back to the adapter's policy, then to the default.
130
+ */
131
+ getRetryPolicy(provider) {
132
+ const adapter = this.getAdapter(provider);
133
+ return adapter?.providerRetryPolicy(provider);
134
+ }
135
+ /**
136
+ * Clear all registrations.
137
+ */
138
+ clear() {
139
+ this.adapters.clear();
140
+ this.owners.clear();
141
+ }
142
+ }
143
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * LLM Retry — provider-scoped retry with exponential backoff.
3
+ *
4
+ * Retry is a separate concern from the adapter. Each adapter captures
5
+ * its retry policy at registration. The retry plugin executes it at
6
+ * durable boundaries (agent step level, not inside the adapter call).
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { shouldRetry, calculateDelay } from "@vinhnt-sdk/llm";
11
+ *
12
+ * if (shouldRetry(error, policy, attempt)) {
13
+ * const delay = calculateDelay(attempt, policy, retryAfterHeader);
14
+ * await sleep(delay, signal);
15
+ * }
16
+ * ```
17
+ */
18
+ import type { RetryPolicy } from "./adapter.js";
19
+ /**
20
+ * Determine whether a failure should be retried.
21
+ *
22
+ * @param error - The error that occurred
23
+ * @param policy - The provider's retry policy
24
+ * @param attempt - Current attempt number (0-based)
25
+ * @returns Whether to retry
26
+ */
27
+ export declare function shouldRetry(error: {
28
+ readonly retryable?: boolean;
29
+ readonly statusCode?: number;
30
+ }, policy: RetryPolicy | undefined, attempt: number): boolean;
31
+ /**
32
+ * Calculate retry delay with exponential backoff + jitter.
33
+ *
34
+ * @param attempt - Current attempt number (0-based)
35
+ * @param policy - The provider's retry policy
36
+ * @param retryAfterMs - Optional Retry-After header value in ms
37
+ * @returns Delay in ms before the next attempt
38
+ */
39
+ export declare function calculateDelay(attempt: number, policy: RetryPolicy | undefined, retryAfterMs?: number): number;
40
+ /**
41
+ * Sleep for a given duration, abortable via signal.
42
+ *
43
+ * @param ms - Duration in milliseconds
44
+ * @param signal - Optional abort signal
45
+ */
46
+ export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
47
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAUhD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EACrE,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,OAAO,EAAE,MAAM,GACd,OAAO,CAcT;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAaR;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBrE"}
package/dist/retry.js ADDED
@@ -0,0 +1,91 @@
1
+ /**
2
+ * LLM Retry — provider-scoped retry with exponential backoff.
3
+ *
4
+ * Retry is a separate concern from the adapter. Each adapter captures
5
+ * its retry policy at registration. The retry plugin executes it at
6
+ * durable boundaries (agent step level, not inside the adapter call).
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { shouldRetry, calculateDelay } from "@vinhnt-sdk/llm";
11
+ *
12
+ * if (shouldRetry(error, policy, attempt)) {
13
+ * const delay = calculateDelay(attempt, policy, retryAfterHeader);
14
+ * await sleep(delay, signal);
15
+ * }
16
+ * ```
17
+ */
18
+ /** Default retry configuration. */
19
+ const DEFAULT_MAX_RETRIES = 2;
20
+ const DEFAULT_BASE_DELAY_MS = 1000;
21
+ const DEFAULT_MAX_DELAY_MS = 30_000;
22
+ /** Default set of retryable HTTP status codes. */
23
+ const DEFAULT_RETRYABLE_STATUSES = new Set([408, 429, 500, 502, 503, 504]);
24
+ /**
25
+ * Determine whether a failure should be retried.
26
+ *
27
+ * @param error - The error that occurred
28
+ * @param policy - The provider's retry policy
29
+ * @param attempt - Current attempt number (0-based)
30
+ * @returns Whether to retry
31
+ */
32
+ export function shouldRetry(error, policy, attempt) {
33
+ const maxRetries = policy?.maxRetries ?? DEFAULT_MAX_RETRIES;
34
+ if (attempt >= maxRetries)
35
+ return false;
36
+ // If error explicitly says not retryable, don't retry
37
+ if (error.retryable === false)
38
+ return false;
39
+ // Check status code
40
+ if (error.statusCode !== undefined) {
41
+ const retryableStatuses = policy?.retryableStatuses ?? [...DEFAULT_RETRYABLE_STATUSES];
42
+ if (!retryableStatuses.includes(error.statusCode))
43
+ return false;
44
+ }
45
+ return true;
46
+ }
47
+ /**
48
+ * Calculate retry delay with exponential backoff + jitter.
49
+ *
50
+ * @param attempt - Current attempt number (0-based)
51
+ * @param policy - The provider's retry policy
52
+ * @param retryAfterMs - Optional Retry-After header value in ms
53
+ * @returns Delay in ms before the next attempt
54
+ */
55
+ export function calculateDelay(attempt, policy, retryAfterMs) {
56
+ const baseDelay = policy?.baseDelayMs ?? DEFAULT_BASE_DELAY_MS;
57
+ const maxDelay = policy?.maxDelayMs ?? DEFAULT_MAX_DELAY_MS;
58
+ // Use Retry-After if provided
59
+ if (retryAfterMs !== undefined && retryAfterMs > 0) {
60
+ return Math.min(retryAfterMs, maxDelay);
61
+ }
62
+ // Exponential backoff with jitter
63
+ const exponentialDelay = baseDelay * Math.pow(2, attempt);
64
+ const jitter = exponentialDelay * 0.2 * Math.random();
65
+ return Math.min(exponentialDelay + jitter, maxDelay);
66
+ }
67
+ /**
68
+ * Sleep for a given duration, abortable via signal.
69
+ *
70
+ * @param ms - Duration in milliseconds
71
+ * @param signal - Optional abort signal
72
+ */
73
+ export function sleep(ms, signal) {
74
+ return new Promise((resolve, reject) => {
75
+ if (signal?.aborted) {
76
+ reject(new DOMException("Aborted", "AbortError"));
77
+ return;
78
+ }
79
+ const timer = setTimeout(resolve, ms);
80
+ const onAbort = () => {
81
+ clearTimeout(timer);
82
+ reject(new DOMException("Aborted", "AbortError"));
83
+ };
84
+ signal?.addEventListener("abort", onAbort, { once: true });
85
+ // Cleanup: if the timer fires first, remove the abort listener
86
+ void Promise.resolve().then(() => {
87
+ signal?.removeEventListener("abort", onAbort);
88
+ });
89
+ });
90
+ }
91
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,mCAAmC;AACnC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAEpC,kDAAkD;AAClD,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAE3E;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CACzB,KAAqE,EACrE,MAA+B,EAC/B,OAAe;IAEf,MAAM,UAAU,GAAG,MAAM,EAAE,UAAU,IAAI,mBAAmB,CAAC;IAC7D,IAAI,OAAO,IAAI,UAAU;QAAE,OAAO,KAAK,CAAC;IAExC,sDAAsD;IACtD,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAE5C,oBAAoB;IACpB,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,iBAAiB,GAAG,MAAM,EAAE,iBAAiB,IAAI,CAAC,GAAG,0BAA0B,CAAC,CAAC;QACvF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;IAClE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,MAA+B,EAC/B,YAAqB;IAErB,MAAM,SAAS,GAAG,MAAM,EAAE,WAAW,IAAI,qBAAqB,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,EAAE,UAAU,IAAI,oBAAoB,CAAC;IAE5D,8BAA8B;IAC9B,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,kCAAkC;IAClC,MAAM,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACtD,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,MAAM,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,EAAU,EAAE,MAAoB;IACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC;QAEF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,+DAA+D;QAC/D,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC/B,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Token Metering — estimate and track token usage.
3
+ *
4
+ * Provides heuristic token estimation and replay-aware measurement
5
+ * for tracking context pressure and usage across sessions.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { TokenMeter } from "@vinhnt-sdk/llm";
10
+ *
11
+ * const meter = new TokenMeter();
12
+ * const tokens = meter.estimateMessage({ role: "user", content: "Hello world" });
13
+ * // tokens ≈ 4 (2 words + overhead)
14
+ * ```
15
+ */
16
+ import type { ModelUsage } from "@vinhnt-sdk/schema";
17
+ /**
18
+ * Token meter — estimates token counts heuristically.
19
+ *
20
+ * Provider-specific tokenizers would be more accurate but would
21
+ * couple the meter to a specific provider. The heuristic is
22
+ * intentionally approximate for budget estimation.
23
+ */
24
+ export declare class TokenMeter {
25
+ /**
26
+ * Heuristically estimate the token count for a message.
27
+ *
28
+ * @param message - The message to estimate
29
+ * @returns Estimated token count
30
+ */
31
+ estimateMessage(message: {
32
+ readonly role: string;
33
+ readonly content: string | readonly unknown[];
34
+ }): number;
35
+ /**
36
+ * Estimate the token count for a full request.
37
+ *
38
+ * @param messages - The conversation messages
39
+ * @param tools - Optional tool definitions
40
+ * @returns Estimated total tokens
41
+ */
42
+ estimateRequest(messages: readonly {
43
+ readonly role: string;
44
+ readonly content: string | readonly unknown[];
45
+ }[], tools?: readonly unknown[]): number;
46
+ /**
47
+ * Estimate tokens for a text string.
48
+ */
49
+ estimateText(text: string): number;
50
+ /**
51
+ * Measure context pressure — how much of the context window is used.
52
+ *
53
+ * @param usage - The token usage from a model response
54
+ * @param contextLimit - The model's context window
55
+ * @returns Pressure ratio (0-1, where 1 = fully used)
56
+ */
57
+ measurePressure(usage: ModelUsage, contextLimit: number): number;
58
+ /**
59
+ * Project next request token estimate based on current usage.
60
+ *
61
+ * @param currentUsage - Current request usage
62
+ * @param messageGrowth - Expected message growth (default: 0.1 = 10%)
63
+ * @returns Projected input tokens for next request
64
+ */
65
+ projectNextRequest(currentUsage: ModelUsage, messageGrowth?: number): number;
66
+ }
67
+ //# sourceMappingURL=token-meter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-meter.d.ts","sourceRoot":"","sources":["../src/token-meter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAWrD;;;;;;GAMG;AACH,qBAAa,UAAU;IACrB;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,OAAO,EAAE,CAAA;KAAE,GAAG,MAAM;IAS1G;;;;;;OAMG;IACH,eAAe,CACb,QAAQ,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,OAAO,EAAE,CAAA;KAAE,EAAE,EAC7F,KAAK,CAAC,EAAE,SAAS,OAAO,EAAE,GACzB,MAAM;IAcT;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIlC;;;;;;OAMG;IACH,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAKhE;;;;;;OAMG;IACH,kBAAkB,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,SAAM,GAAG,MAAM;CAI1E"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Token Metering — estimate and track token usage.
3
+ *
4
+ * Provides heuristic token estimation and replay-aware measurement
5
+ * for tracking context pressure and usage across sessions.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { TokenMeter } from "@vinhnt-sdk/llm";
10
+ *
11
+ * const meter = new TokenMeter();
12
+ * const tokens = meter.estimateMessage({ role: "user", content: "Hello world" });
13
+ * // tokens ≈ 4 (2 words + overhead)
14
+ * ```
15
+ */
16
+ /** Fixed density: characters per token (heuristic). */
17
+ const CHARS_PER_TOKEN = 4;
18
+ /** Structural overhead per content block. */
19
+ const BLOCK_OVERHEAD = 4;
20
+ /** Structural overhead per message. */
21
+ const ROLE_OVERHEAD = 4;
22
+ /**
23
+ * Token meter — estimates token counts heuristically.
24
+ *
25
+ * Provider-specific tokenizers would be more accurate but would
26
+ * couple the meter to a specific provider. The heuristic is
27
+ * intentionally approximate for budget estimation.
28
+ */
29
+ export class TokenMeter {
30
+ /**
31
+ * Heuristically estimate the token count for a message.
32
+ *
33
+ * @param message - The message to estimate
34
+ * @returns Estimated token count
35
+ */
36
+ estimateMessage(message) {
37
+ const content = typeof message.content === "string"
38
+ ? message.content
39
+ : JSON.stringify(message.content);
40
+ const contentTokens = Math.ceil(content.length / CHARS_PER_TOKEN);
41
+ return ROLE_OVERHEAD + contentTokens;
42
+ }
43
+ /**
44
+ * Estimate the token count for a full request.
45
+ *
46
+ * @param messages - The conversation messages
47
+ * @param tools - Optional tool definitions
48
+ * @returns Estimated total tokens
49
+ */
50
+ estimateRequest(messages, tools) {
51
+ let total = 0;
52
+ for (const msg of messages) {
53
+ total += this.estimateMessage(msg);
54
+ }
55
+ if (tools) {
56
+ total += tools.length * BLOCK_OVERHEAD;
57
+ for (const tool of tools) {
58
+ total += Math.ceil(JSON.stringify(tool).length / CHARS_PER_TOKEN);
59
+ }
60
+ }
61
+ return total;
62
+ }
63
+ /**
64
+ * Estimate tokens for a text string.
65
+ */
66
+ estimateText(text) {
67
+ return Math.ceil(text.length / CHARS_PER_TOKEN);
68
+ }
69
+ /**
70
+ * Measure context pressure — how much of the context window is used.
71
+ *
72
+ * @param usage - The token usage from a model response
73
+ * @param contextLimit - The model's context window
74
+ * @returns Pressure ratio (0-1, where 1 = fully used)
75
+ */
76
+ measurePressure(usage, contextLimit) {
77
+ const input = usage.promptTokens ?? usage.inputTokens ?? 0;
78
+ return Math.min(1, input / contextLimit);
79
+ }
80
+ /**
81
+ * Project next request token estimate based on current usage.
82
+ *
83
+ * @param currentUsage - Current request usage
84
+ * @param messageGrowth - Expected message growth (default: 0.1 = 10%)
85
+ * @returns Projected input tokens for next request
86
+ */
87
+ projectNextRequest(currentUsage, messageGrowth = 0.1) {
88
+ const current = currentUsage.promptTokens ?? currentUsage.inputTokens ?? 0;
89
+ return Math.ceil(current * (1 + messageGrowth));
90
+ }
91
+ }
92
+ //# sourceMappingURL=token-meter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-meter.js","sourceRoot":"","sources":["../src/token-meter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,uDAAuD;AACvD,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,6CAA6C;AAC7C,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,uCAAuC;AACvC,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,OAAO,UAAU;IACrB;;;;;OAKG;IACH,eAAe,CAAC,OAAiF;QAC/F,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;YACjD,CAAC,CAAC,OAAO,CAAC,OAAO;YACjB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEpC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;QAClE,OAAO,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAED;;;;;;OAMG;IACH,eAAe,CACb,QAA6F,EAC7F,KAA0B;QAE1B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;OAMG;IACH,eAAe,CAAC,KAAiB,EAAE,YAAoB;QACrD,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;OAMG;IACH,kBAAkB,CAAC,YAAwB,EAAE,aAAa,GAAG,GAAG;QAC9D,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,IAAI,YAAY,CAAC,WAAW,IAAI,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;IAClD,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@vinhnt-sdk/llm",
3
+ "version": "0.1.3",
4
+ "description": "LLM capability seam — adapter abstraction, registry, retry, token metering",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./package.json": "./package.json"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "LICENSE",
19
+ "README.md"
20
+ ],
21
+ "sideEffects": false,
22
+ "engines": {
23
+ "node": ">=20"
24
+ },
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "https://github.com/vinhnt-develop/vinhnt-sdk.git",
28
+ "directory": "packages/llm"
29
+ },
30
+ "homepage": "https://github.com/vinhnt-develop/vinhnt-sdk/tree/main/packages/llm",
31
+ "bugs": {
32
+ "url": "https://github.com/vinhnt-develop/vinhnt-sdk/issues"
33
+ },
34
+ "keywords": [
35
+ "vnt",
36
+ "llm",
37
+ "adapter",
38
+ "registry"
39
+ ],
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "dependencies": {
44
+ "@vinhnt-sdk/schema": "0.1.3",
45
+ "@vinhnt-sdk/config": "0.1.3",
46
+ "@vinhnt-sdk/tools": "0.1.3"
47
+ },
48
+ "devDependencies": {
49
+ "typescript": "^5.8.0"
50
+ },
51
+ "license": "MIT",
52
+ "scripts": {
53
+ "build": "tsc -b",
54
+ "typecheck": "tsc --noEmit",
55
+ "test": "vitest run",
56
+ "lint": "eslint .",
57
+ "clean": "node -e \"try{require('fs').rmSync('dist',{recursive:true,force:true})}catch(e){}\" && node -e \"try{require('fs').rmSync('tsconfig.tsbuildinfo',{force:true})}catch(e){}\""
58
+ }
59
+ }