@wengine-ai/llms 2.3.238 → 2.3.239

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.
@@ -13,11 +13,35 @@ export interface ActiveProbeConfig {
13
13
  quotaProbeIntervalMinutes?: number;
14
14
  /** Timeout in milliseconds for probe requests (default: 15000) */
15
15
  probeTimeoutMs?: number;
16
+ /** Latency threshold in milliseconds for slow-network warnings (default: 3000) */
17
+ slowThresholdMs?: number;
16
18
  /** Initial delay before starting first probe (default: 5000) */
17
19
  initialDelayMs?: number;
18
20
  /** Providers to exclude from active probing (e.g., providers without models endpoint) */
19
21
  excludeProviders?: string[];
20
22
  }
23
+ export type ProviderProbeStatus = 'healthy' | 'slow' | 'error' | 'timeout';
24
+ export type ProviderProbeErrorKind = 'timeout' | 'network' | 'http';
25
+ export type ProviderProbeSource = 'health' | 'manual' | 'rate-limit-headers';
26
+ export interface ProviderProbeTelemetry {
27
+ provider: string;
28
+ latencyMs: number;
29
+ status: ProviderProbeStatus;
30
+ isSlow: boolean;
31
+ errorKind?: ProviderProbeErrorKind;
32
+ errorMessage?: string;
33
+ lastProbeAt: number;
34
+ lastSuccessAt?: number;
35
+ source: ProviderProbeSource;
36
+ }
37
+ export interface ManualProbeResult {
38
+ success: boolean;
39
+ latencyMs: number;
40
+ status: ProviderProbeStatus;
41
+ isSlow: boolean;
42
+ errorKind?: ProviderProbeErrorKind;
43
+ error?: string;
44
+ }
21
45
  /**
22
46
  * Active probe scheduler
23
47
  */
@@ -33,7 +57,23 @@ export declare class ActiveProbeService {
33
57
  private logger?;
34
58
  private getConfig?;
35
59
  private running;
60
+ private probeTelemetry;
36
61
  constructor(getProviders: () => LLMProvider[], config?: ActiveProbeConfig, resolveProxyUrl?: (provider: LLMProvider) => string | undefined, logger?: any, getConfig?: (key: string) => any);
62
+ /**
63
+ * Record the latest reachability probe result for a provider.
64
+ * Only /models-style reachability probes (health, manual, rate-limit header
65
+ * probes) should be recorded here; quota adapters, wake-up calls and
66
+ * rate-limit chat pings hit different endpoints and must not overwrite it.
67
+ */
68
+ private recordProbe;
69
+ /**
70
+ * Read-only snapshot of the latest probe telemetry for all providers.
71
+ */
72
+ getProbeTelemetry(): ProviderProbeTelemetry[];
73
+ /**
74
+ * Read-only snapshot of the latest probe telemetry for one provider.
75
+ */
76
+ getProviderProbeTelemetry(providerName: string): ProviderProbeTelemetry | undefined;
37
77
  /**
38
78
  * Start the active probe loop
39
79
  */
@@ -76,7 +116,7 @@ export declare class ActiveProbeService {
76
116
  /**
77
117
  * Trigger a manual probe for a specific provider
78
118
  */
79
- probeProviderManually(providerName: string): Promise<boolean>;
119
+ probeProviderManually(providerName: string): Promise<ManualProbeResult>;
80
120
  }
81
121
  /**
82
122
  * Initialize and get the active probe service
@@ -29,6 +29,11 @@ interface MessageParam {
29
29
  content: string | ContentBlockParam[];
30
30
  }
31
31
  export declare const calculateTokenCount: (messages: MessageParam[], system: any, tools: Tool[]) => number;
32
+ export declare function extractModelFamily(modelName: string): {
33
+ family: string | null;
34
+ extended: boolean;
35
+ isCcrAlias: boolean;
36
+ };
32
37
  /**
33
38
  * Look up a provider and model by name in the current provider list.
34
39
  * Returns canonical (case-matched) values or null when the provider is
@@ -47,6 +52,7 @@ export declare function diagnoseResolutionFailure(configuredModel: string, provi
47
52
  reason: string;
48
53
  code: string;
49
54
  };
55
+ export declare function modelSupportsImages(modelName: string): boolean;
50
56
  interface RouterFamilyConfig {
51
57
  default: string;
52
58
  background?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wengine-ai/llms",
3
- "version": "2.3.238",
3
+ "version": "2.3.239",
4
4
  "description": "A universal LLM API transformation server",
5
5
  "main": "dist/cjs/server.cjs",
6
6
  "module": "dist/esm/server.mjs",
@@ -52,7 +52,7 @@
52
52
  "uuid": "^11.1.0",
53
53
  "@fastify/multipart": "^9.0.0",
54
54
  "@fastify/static": "^8.2.0",
55
- "@wengine-ai/claude-code-router-shared": "^2.3.238",
55
+ "@wengine-ai/claude-code-router-shared": "^2.3.239",
56
56
  "adm-zip": "^0.5.16",
57
57
  "better-sqlite3": "^12.10.0",
58
58
  "rotating-file-stream": "^3.2.7"
@@ -1,9 +0,0 @@
1
- export declare function switchCodexAccountBeforeUsageLimit(): Promise<void>;
2
- export declare function switchCodexAccountAfterRateLimit(reason?: string): Promise<void>;
3
- /** Periodically refresh managed Codex account tokens, active or not, so refresh_tokens never go stale. */
4
- export declare function startCodexTokenRefreshScheduler(): void;
5
- export declare function isRateLimitMessage(statusCode: number, message?: string): boolean;
6
- export declare function getCurrentCodexAccountForRequest(): Promise<{
7
- id?: string;
8
- email?: string;
9
- }>;
@@ -1,2 +0,0 @@
1
- import { type CodexAccountsResult } from "@wengine-ai/claude-code-router-shared";
2
- export declare function computeCodexAccountUsage(config: Record<string, any>): Promise<CodexAccountsResult>;