qlogicagent 2.10.4 → 2.10.5

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.
@@ -1,10 +1,8 @@
1
1
  /**
2
- * Builtin provider definitions 鈥?hardcoded fallback list (~30 providers).
2
+ * Curated Provider Core model catalog.
3
3
  *
4
- * This is Layer 1 (lowest priority) of the three-layer merge strategy.
5
- * Used when remote model catalog is unavailable.
6
- *
7
- * Aligned with Hermes hermes_cli/models.py hardcoded fallback.
4
+ * This is the single source used by qlogicagent direct mode and llmrouter's
5
+ * model catalog API. External broad catalogs are intentionally not merged in.
8
6
  */
9
7
  import type { ProviderDef } from "./provider-def.js";
10
8
  export declare const BUILTIN_PROVIDERS: ProviderDef[];
@@ -16,7 +16,6 @@ export { MediaClient, type MediaClientConfig, type ResolvedMediaModel } from "./
16
16
  export type { ProviderToolAPI, WebSearchResult, ReaderResult, TokenizerResult, ModerationResult, ProviderToolCapability } from "./provider-tool-api.js";
17
17
  export { ProviderRegistry } from "./provider-registry.js";
18
18
  export { BUILTIN_PROVIDERS } from "./builtin-providers.js";
19
- export { ModelCatalog } from "./model-catalog.js";
20
19
  export { ProviderVariantResolver, type ProviderVariantResolverInput, type ProviderVariantResolution, type RequestedProviderProtocol } from "./provider-variant-resolver.js";
21
20
  export type { LLMClientConfig, LLMClient } from "./llm-client.js";
22
21
  export { createLLMClient } from "./llm-client.js";
@@ -4,10 +4,7 @@
4
4
  * Aligned with Hermes `ProviderDef` dataclass pattern:
5
5
  * id + name + transport type + baseUrl + auth config + model list
6
6
  *
7
- * Three-layer merge strategy (Layer 3 > Layer 2 > Layer 1):
8
- * Layer 1: builtin-providers.ts hardcoded (fallback)
9
- * Layer 2: model-catalog.ts remote (models.dev)
10
- * Layer 3: user config (from agent.turn.config)
7
+ * Single curated model catalog plus optional user provider overrides.
11
8
  */
12
9
  export type TransportType = "openai-chat" | "openai-responses" | "anthropic-messages" | "volcengine-responses" | "gemini-generatecontent";
13
10
  export type AuthType = "bearer" | "x-api-key" | "none";
@@ -1,26 +1,22 @@
1
1
  /**
2
- * ProviderRegistry 鈥?two-layer merge registry for LLM providers.
2
+ * ProviderRegistry 鈥?single-source curated registry for LLM providers.
3
3
  *
4
- * Layer 1: builtin-providers.ts hardcoded (lowest priority, ~20 providers)
5
- * Layer 2: model-catalog.ts remote (models.dev 鈥?enriches model metadata)
6
- * Layer 3: user config override (from agent.turn.config 鈥?highest priority)
4
+ * Layer 1: builtin-providers.ts curated providers and models
5
+ * Layer 2: user config override (from agent.turn.config)
7
6
  *
8
- * Merge strategy: Layer 3 > Layer 2 > Layer 1 (later layers override same-id fields)
7
+ * Model IDs are intentionally not enriched from external catalogs. llmrouter and
8
+ * OpenClaw consume the same curated Provider Core catalog, and upstream request
9
+ * IDs are resolved through model aliases/native IDs.
9
10
  *
10
11
  * Aligned with Hermes provider_registry.py.
11
12
  */
12
13
  import type { ModelInfo, ProviderDef } from "./provider-def.js";
13
- import { ModelCatalog } from "./model-catalog.js";
14
14
  export declare class ProviderRegistry {
15
- /** Layer 1: builtin hardcoded providers */
15
+ /** Curated providers and models */
16
16
  private builtins;
17
- /** Layer 2: remote model catalog (models.dev) */
18
- private catalog;
19
- /** Layer 3: user overrides (from agent.turn.config) */
17
+ /** User overrides (from agent.turn.config) */
20
18
  private overrides;
21
- constructor(opts?: {
22
- catalog?: ModelCatalog;
23
- });
19
+ constructor();
24
20
  /**
25
21
  * Apply user config override for a provider.
26
22
  * Typically called when agent.turn.config has baseUrl/apiKey overrides.
@@ -38,7 +34,6 @@ export declare class ProviderRegistry {
38
34
  listProviders(): ProviderDef[];
39
35
  /**
40
36
  * List models for a specific provider.
41
- * Merges: Layer 3 override > Layer 1 builtin > Layer 2 catalog enrichment.
42
37
  */
43
38
  listModels(providerId: string): ModelInfo[];
44
39
  /**
@@ -46,10 +41,6 @@ export declare class ProviderRegistry {
46
41
  * Returns undefined if the model is not found.
47
42
  */
48
43
  getModelInfo(providerId: string, modelId: string): ModelInfo | undefined;
49
- /**
50
- * Trigger background refresh of the remote model catalog.
51
- */
52
- refreshCatalog(): Promise<boolean>;
53
44
  /**
54
45
  * Resolve API key for a provider:
55
46
  * 1. Explicit key (from agent.turn.config)
@@ -27,6 +27,7 @@ export interface ModelEntry {
27
27
  purposes: ModelPurpose[];
28
28
  baseUrl?: string;
29
29
  enabled: boolean;
30
+ nativeModelId?: string;
30
31
  transport?: string;
31
32
  contextWindow?: number;
32
33
  maxOutput?: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qlogicagent",
3
- "version": "2.10.4",
3
+ "version": "2.10.5",
4
4
  "description": "XiaozhiClaw Agent CLI — subprocess architecture (JSON-RPC over stdio)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,82 +0,0 @@
1
- /**
2
- * ModelCatalog 鈥?remote model directory with disk cache + fallback.
3
- *
4
- * Fetches model metadata from models.dev/api.json (community-maintained,
5
- * comprehensive single-source catalog with 100+ providers).
6
- *
7
- * Two-layer fallback:
8
- * 1. In-memory cache (process-level, TTL check against disk mtime)
9
- * 2. Disk cache (~/.qlogicagent/cache/model_catalog.json)
10
- * 3. Remote fetch (models.dev single endpoint)
11
- * 4. Stale disk cache (if remote fails)
12
- * 5. Empty (caller falls back to builtin-providers.ts hardcoded)
13
- *
14
- * Non-blocking: first startup without cache returns empty immediately,
15
- * triggers background async fetch. Agent uses builtin providers until
16
- * catalog arrives.
17
- */
18
- import type { ModelInfo } from "./provider-def.js";
19
- /** Embedding model metadata from models.dev catalog. */
20
- export interface EmbeddingModelInfo {
21
- id: string;
22
- name: string;
23
- /** Provider-internal ID (e.g. "openai", "qwen") */
24
- providerId: string;
25
- /** Output vector dimensions (from limit.output) */
26
- dimensions: number;
27
- /** Max input context tokens */
28
- maxInputTokens: number;
29
- /** Cost per million input tokens (USD) */
30
- costInput?: number;
31
- /** Model family string from models.dev */
32
- family: string;
33
- }
34
- export declare class ModelCatalog {
35
- private cache;
36
- private cacheDir;
37
- private cacheFile;
38
- private ttlMs;
39
- private fetching;
40
- private lastFetchAttempt;
41
- constructor(opts?: {
42
- cacheDir?: string;
43
- ttlMs?: number;
44
- });
45
- /**
46
- * Get models for a provider. Non-blocking: returns whatever is cached.
47
- * Triggers background refresh if stale.
48
- */
49
- getModels(providerId: string): ModelInfo[];
50
- /**
51
- * Get a single model by provider + model id.
52
- */
53
- getModel(providerId: string, modelId: string): ModelInfo | undefined;
54
- /**
55
- * List all known provider ids from the catalog.
56
- */
57
- listProviderIds(): string[];
58
- /**
59
- * Get embedding models for a provider.
60
- * Returns models sorted by cost (cheapest first, then largest dims).
61
- */
62
- getEmbeddingModels(providerId: string): EmbeddingModelInfo[];
63
- /**
64
- * Get the default embedding model for a provider.
65
- * Picks the cheapest model with >=512 dimensions.
66
- */
67
- getDefaultEmbeddingModel(providerId: string): EmbeddingModelInfo | undefined;
68
- /**
69
- * Get all embedding models across all providers.
70
- */
71
- getAllEmbeddingModels(): Map<string, EmbeddingModelInfo[]>;
72
- /**
73
- * Force refresh from remote. Returns true if successful.
74
- */
75
- refreshCatalog(): Promise<boolean>;
76
- private ensureLoaded;
77
- private isStale;
78
- private loadFromDisk;
79
- private saveToDisk;
80
- private backgroundFetch;
81
- private fetchRemote;
82
- }