@anyllmtoken/modelx-data 0.1.0 → 0.1.2
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/changes.jsonl +29085 -20567
- package/data-cn.ts +28936 -0
- package/data-us.ts +211433 -0
- package/index.ts +5 -5
- package/package.json +14 -3
- package/types.ts +144 -0
- package/utils.ts +93 -0
package/index.ts
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
//
|
|
3
3
|
// import { getProviders, getAllModels, getChanges, getModel } from "@anyllmtoken/modelx-data";
|
|
4
4
|
|
|
5
|
-
import { providers as _providersUs, allModels as _allModelsUs } from "
|
|
6
|
-
import { providers as _providersCn, allModels as _allModelsCn } from "
|
|
5
|
+
import { providers as _providersUs, allModels as _allModelsUs } from "./data-us";
|
|
6
|
+
import { providers as _providersCn, allModels as _allModelsCn } from "./data-cn";
|
|
7
7
|
import {
|
|
8
8
|
getModel as _getModel,
|
|
9
9
|
getModelsByProvider as _getModelsByProvider,
|
|
@@ -13,8 +13,8 @@ import {
|
|
|
13
13
|
getProvider as _getProvider,
|
|
14
14
|
getAllProviders as _getAllProviders,
|
|
15
15
|
getProviderIcon as _getProviderIcon,
|
|
16
|
-
} from "
|
|
17
|
-
import type { Model, ProviderWithModels } from "
|
|
16
|
+
} from "./utils";
|
|
17
|
+
import type { Model, ProviderWithModels } from "./types";
|
|
18
18
|
|
|
19
19
|
// ── 类型 ──
|
|
20
20
|
|
|
@@ -31,7 +31,7 @@ export type {
|
|
|
31
31
|
ModelStatus,
|
|
32
32
|
ModelSource,
|
|
33
33
|
Modality,
|
|
34
|
-
} from "
|
|
34
|
+
} from "./types";
|
|
35
35
|
|
|
36
36
|
// ── 合并双区域数据 ──
|
|
37
37
|
|
package/package.json
CHANGED
|
@@ -1,19 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anyllmtoken/modelx-data",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Cross-provider AI model data — specs, pricing, capabilities across 30+ providers",
|
|
5
5
|
"main": "./index.ts",
|
|
6
6
|
"types": "./index.ts",
|
|
7
7
|
"exports": {
|
|
8
8
|
".": "./index.ts"
|
|
9
9
|
},
|
|
10
|
-
"files": [
|
|
10
|
+
"files": [
|
|
11
|
+
"index.ts",
|
|
12
|
+
"changes.jsonl",
|
|
13
|
+
"data-cn.ts",
|
|
14
|
+
"data-us.ts",
|
|
15
|
+
"utils.ts",
|
|
16
|
+
"types.ts"
|
|
17
|
+
],
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "https://github.com/anyllmtoken/modelx-data.git"
|
|
21
|
+
},
|
|
11
22
|
"license": "MIT",
|
|
12
23
|
"publishConfig": {
|
|
13
24
|
"access": "public",
|
|
14
25
|
"provenance": true
|
|
15
26
|
},
|
|
16
27
|
"scripts": {
|
|
17
|
-
"prepublishOnly": "cd ../.. && bun run generate && bun run generate:cn"
|
|
28
|
+
"prepublishOnly": "cd ../.. && bun run generate && bun run generate:cn && cp src/data-cn.ts src/data-us.ts src/utils.ts src/types.ts packages/data/"
|
|
18
29
|
}
|
|
19
30
|
}
|
package/types.ts
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/** Model lifecycle status */
|
|
2
|
+
export type ModelStatus = "active" | "deprecated" | "preview";
|
|
3
|
+
|
|
4
|
+
export type ModelSource = "official" | "community";
|
|
5
|
+
|
|
6
|
+
export type Modality = "text" | "image" | "audio" | "video";
|
|
7
|
+
|
|
8
|
+
export interface ModelCapabilities {
|
|
9
|
+
vision?: boolean;
|
|
10
|
+
tool_call?: boolean;
|
|
11
|
+
structured_output?: boolean;
|
|
12
|
+
reasoning?: boolean;
|
|
13
|
+
json_mode?: boolean;
|
|
14
|
+
streaming?: boolean;
|
|
15
|
+
fine_tuning?: boolean;
|
|
16
|
+
batch?: boolean;
|
|
17
|
+
prompt_caching?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface ModelModalities {
|
|
21
|
+
input?: Modality[];
|
|
22
|
+
output?: Modality[];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface ModelPricing {
|
|
26
|
+
input?: number | null;
|
|
27
|
+
output?: number | null;
|
|
28
|
+
cached_input?: number | null;
|
|
29
|
+
cache_write?: number | null;
|
|
30
|
+
cache_write_1h?: number | null;
|
|
31
|
+
batch_input?: number | null;
|
|
32
|
+
batch_output?: number | null;
|
|
33
|
+
/** Cost per 1M cached output tokens (reasoning models) */
|
|
34
|
+
cached_output?: number | null;
|
|
35
|
+
/** Detailed pricing breakdown by category (text/audio/image tokens, per-image, etc.) */
|
|
36
|
+
tiers?: PricingTier[];
|
|
37
|
+
/** Provider-specific pricing fields (e.g. cosy_tts_number) */
|
|
38
|
+
[key: string]: unknown;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface PricingTier {
|
|
42
|
+
label: string;
|
|
43
|
+
unit: string;
|
|
44
|
+
columns: string[];
|
|
45
|
+
rows: PricingTierRow[];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface PricingTierRow {
|
|
49
|
+
label: string;
|
|
50
|
+
values: (number | null)[];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface ModelData {
|
|
54
|
+
id: string;
|
|
55
|
+
name: string;
|
|
56
|
+
created_by: string;
|
|
57
|
+
source: ModelSource;
|
|
58
|
+
last_updated: string;
|
|
59
|
+
family?: string;
|
|
60
|
+
description?: string;
|
|
61
|
+
tagline?: string;
|
|
62
|
+
page_url?: string;
|
|
63
|
+
status?: ModelStatus;
|
|
64
|
+
release_date?: string | null;
|
|
65
|
+
deprecation_date?: string | null;
|
|
66
|
+
retirement_date?: string | null;
|
|
67
|
+
knowledge_cutoff?: string | null;
|
|
68
|
+
context_window?: number | null;
|
|
69
|
+
max_context_window?: number | null;
|
|
70
|
+
max_output_tokens?: number | null;
|
|
71
|
+
batch_max_output_tokens?: number | null;
|
|
72
|
+
max_input_tokens?: number | null;
|
|
73
|
+
capabilities?: ModelCapabilities;
|
|
74
|
+
modalities?: ModelModalities;
|
|
75
|
+
pricing?: ModelPricing;
|
|
76
|
+
model_type?: "chat" | "reasoning" | "embed" | "embedding" | "rerank" | "image" | "video" | "audio" | "tts" | "transcription" | "moderation" | "code" | "translation" | "classification" | "other";
|
|
77
|
+
tools?: string[];
|
|
78
|
+
endpoints?: string[];
|
|
79
|
+
reasoning_tokens?: boolean;
|
|
80
|
+
license?: string;
|
|
81
|
+
parameters?: number;
|
|
82
|
+
active_parameters?: number;
|
|
83
|
+
snapshots?: string[];
|
|
84
|
+
alias?: string;
|
|
85
|
+
performance?: number;
|
|
86
|
+
reasoning?: number;
|
|
87
|
+
speed?: number;
|
|
88
|
+
successor?: string | string[];
|
|
89
|
+
pricing_notes?: string[];
|
|
90
|
+
training_data_cutoff?: string | null;
|
|
91
|
+
architecture?: string;
|
|
92
|
+
open_weight?: boolean;
|
|
93
|
+
[key: string]: unknown;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface Model extends ModelData {
|
|
97
|
+
provider: string;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export type ProviderType = "direct" | "aggregator" | "cloud";
|
|
101
|
+
|
|
102
|
+
export interface Provider {
|
|
103
|
+
id: string;
|
|
104
|
+
name: string;
|
|
105
|
+
description?: string;
|
|
106
|
+
type?: ProviderType;
|
|
107
|
+
aliases?: string[];
|
|
108
|
+
region: string;
|
|
109
|
+
headquarters?: string;
|
|
110
|
+
founded?: number;
|
|
111
|
+
url: string;
|
|
112
|
+
api_url: string | null;
|
|
113
|
+
docs_url: string;
|
|
114
|
+
pricing_url: string | null;
|
|
115
|
+
playground_url?: string;
|
|
116
|
+
status_url?: string;
|
|
117
|
+
changelog_url?: string;
|
|
118
|
+
sdk?: Record<string, string>;
|
|
119
|
+
free_tier?: boolean;
|
|
120
|
+
pricing_currency?: string;
|
|
121
|
+
openai_compatible?: boolean;
|
|
122
|
+
github_url?: string;
|
|
123
|
+
models_url?: string;
|
|
124
|
+
tokenizer_url?: string;
|
|
125
|
+
twitter_url?: string;
|
|
126
|
+
discord_url?: string;
|
|
127
|
+
blog_url?: string;
|
|
128
|
+
terms_url?: string;
|
|
129
|
+
support_url?: string;
|
|
130
|
+
icon?: string;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export interface ChangeEntry {
|
|
134
|
+
ts: string;
|
|
135
|
+
provider: string;
|
|
136
|
+
model: string;
|
|
137
|
+
action: "create" | "update" | "delete";
|
|
138
|
+
commit?: string;
|
|
139
|
+
changes?: Record<string, { from: unknown; to: unknown }>;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export interface ProviderWithModels extends Provider {
|
|
143
|
+
models: ModelData[];
|
|
144
|
+
}
|
package/utils.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { Model, ProviderWithModels } from "./types";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 按 provider + model id 精确查找单个模型。
|
|
5
|
+
* @example getModel(providers, allModels, "openai", "gpt-4o")
|
|
6
|
+
*/
|
|
7
|
+
export function getModel(
|
|
8
|
+
providers: ProviderWithModels[],
|
|
9
|
+
allModels: Model[],
|
|
10
|
+
provider: string,
|
|
11
|
+
id: string,
|
|
12
|
+
): Model | undefined {
|
|
13
|
+
return allModels.find((m) => m.provider === provider && m.id === id);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* 获取某个 provider 下的所有模型。
|
|
18
|
+
* @example getModelsByProvider(providers, allModels, "deepseek")
|
|
19
|
+
*/
|
|
20
|
+
export function getModelsByProvider(
|
|
21
|
+
providers: ProviderWithModels[],
|
|
22
|
+
allModels: Model[],
|
|
23
|
+
provider: string,
|
|
24
|
+
): Model[] {
|
|
25
|
+
return allModels.filter((m) => m.provider === provider);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* 获取所有非 deprecated 的活跃模型。
|
|
30
|
+
* @example getActiveModels(providers, allModels)
|
|
31
|
+
*/
|
|
32
|
+
export function getActiveModels(
|
|
33
|
+
providers: ProviderWithModels[],
|
|
34
|
+
allModels: Model[],
|
|
35
|
+
): Model[] {
|
|
36
|
+
return allModels.filter((m) => m.status !== "deprecated");
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* 按 model family 过滤模型。
|
|
41
|
+
* @example getModelsByFamily(providers, allModels, "gpt-4o")
|
|
42
|
+
*/
|
|
43
|
+
export function getModelsByFamily(
|
|
44
|
+
providers: ProviderWithModels[],
|
|
45
|
+
allModels: Model[],
|
|
46
|
+
family: string,
|
|
47
|
+
): Model[] {
|
|
48
|
+
return allModels.filter((m) => m.family === family);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* 按创建者过滤模型。
|
|
53
|
+
* @example getModelsByCreator(providers, allModels, "google")
|
|
54
|
+
*/
|
|
55
|
+
export function getModelsByCreator(
|
|
56
|
+
providers: ProviderWithModels[],
|
|
57
|
+
allModels: Model[],
|
|
58
|
+
creator: string,
|
|
59
|
+
): Model[] {
|
|
60
|
+
return allModels.filter((m) => m.created_by === creator);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* 按 id 查找单个 provider。
|
|
65
|
+
* @example getProvider(providers, "openai")
|
|
66
|
+
*/
|
|
67
|
+
export function getProvider(
|
|
68
|
+
providers: ProviderWithModels[],
|
|
69
|
+
id: string,
|
|
70
|
+
): ProviderWithModels | undefined {
|
|
71
|
+
return providers.find((p) => p.id === id);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* 获取全部 provider 列表。
|
|
76
|
+
* @example getAllProviders(providers)
|
|
77
|
+
*/
|
|
78
|
+
export function getAllProviders(
|
|
79
|
+
providers: ProviderWithModels[],
|
|
80
|
+
): ProviderWithModels[] {
|
|
81
|
+
return providers;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* 获取 provider 的内联 SVG 图标字符串。
|
|
86
|
+
* @example getProviderIcon(providers, "openai")
|
|
87
|
+
*/
|
|
88
|
+
export function getProviderIcon(
|
|
89
|
+
providers: ProviderWithModels[],
|
|
90
|
+
id: string,
|
|
91
|
+
): string | undefined {
|
|
92
|
+
return providers.find((p) => p.id === id)?.icon;
|
|
93
|
+
}
|