@modellink/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/schema.json ADDED
@@ -0,0 +1,1541 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://goroutined.github.io/modellink/schema.json",
4
+ "title": "ModelLink Public Data Schema",
5
+ "description": "Public JSON contract for ModelLink catalog, provider, model and package manifest data.",
6
+ "x-modellink-schema-version": 1,
7
+ "$ref": "#/definitions/Catalog",
8
+ "definitions": {
9
+ "ModelMetadata": {
10
+ "type": "object",
11
+ "properties": {
12
+ "id": {
13
+ "type": "string"
14
+ },
15
+ "name": {
16
+ "type": "string",
17
+ "minLength": 1
18
+ },
19
+ "description": {
20
+ "type": "string",
21
+ "minLength": 1
22
+ },
23
+ "family": {
24
+ "type": "string",
25
+ "enum": [
26
+ "trinity",
27
+ "trinity-mini",
28
+ "gpt",
29
+ "gpt-codex",
30
+ "gpt-codex-spark",
31
+ "gpt-codex-mini",
32
+ "gpt-pro",
33
+ "gpt-mini",
34
+ "gpt-nano",
35
+ "gpt-sol",
36
+ "gpt-terra",
37
+ "gpt-luna",
38
+ "gpt-oss",
39
+ "gpt-image",
40
+ "o",
41
+ "o-mini",
42
+ "o-pro",
43
+ "claude",
44
+ "claude-haiku",
45
+ "claude-sonnet",
46
+ "claude-opus",
47
+ "claude-fable",
48
+ "gemini",
49
+ "gemini-pro",
50
+ "gemini-flash",
51
+ "gemini-flash-lite",
52
+ "gemini-embedding",
53
+ "glm",
54
+ "glmv",
55
+ "glm-air",
56
+ "glm-flash",
57
+ "glm-free",
58
+ "glm-z",
59
+ "llama",
60
+ "muse",
61
+ "qwen",
62
+ "qwen3.5",
63
+ "qwen3.6",
64
+ "qwen3.7-plus",
65
+ "qwen3.7-max",
66
+ "qwen3.7-flash",
67
+ "qwen3.8-max",
68
+ "qwen-free",
69
+ "ornith",
70
+ "deepseek",
71
+ "deepseek-thinking",
72
+ "deepseek-flash",
73
+ "deepseek-flash-free",
74
+ "deepseek-flash-think",
75
+ "doubao-seed",
76
+ "phi",
77
+ "kimi",
78
+ "kimi-k2",
79
+ "kimi-k3",
80
+ "kimi-free",
81
+ "kimi-thinking",
82
+ "laguna",
83
+ "laguna-s",
84
+ "mistral",
85
+ "mistral-large",
86
+ "mistral-medium",
87
+ "mistral-small",
88
+ "mistral-nemo",
89
+ "ministral",
90
+ "codestral",
91
+ "devstral",
92
+ "pixtral",
93
+ "mixtral",
94
+ "grok",
95
+ "grok-build",
96
+ "grok-vision",
97
+ "grok-beta",
98
+ "gemma",
99
+ "nova",
100
+ "nova-pro",
101
+ "nova-lite",
102
+ "nova-micro",
103
+ "command",
104
+ "command-r",
105
+ "command-a",
106
+ "command-light",
107
+ "north",
108
+ "north-free",
109
+ "jamba",
110
+ "nemotron",
111
+ "nemotron-free",
112
+ "titan",
113
+ "titan-embed",
114
+ "minimax",
115
+ "minimax-m2",
116
+ "minimax-m2.1",
117
+ "minimax-m2.5",
118
+ "minimax-m2.7",
119
+ "minimax-m3",
120
+ "minimax-m3-free",
121
+ "minimax-free",
122
+ "hunyuan",
123
+ "Hy",
124
+ "ernie",
125
+ "baichuan",
126
+ "sensenova",
127
+ "yi",
128
+ "granite",
129
+ "reka",
130
+ "sonar",
131
+ "sonar-pro",
132
+ "sonar-reasoning",
133
+ "sonar-deep-research",
134
+ "solar",
135
+ "solar-mini",
136
+ "solar-pro",
137
+ "step",
138
+ "spark-x2",
139
+ "openpangu",
140
+ "text-embedding",
141
+ "cohere-embed",
142
+ "voyage",
143
+ "mistral-embed",
144
+ "bge",
145
+ "plamo",
146
+ "codestral-embed",
147
+ "dall-e",
148
+ "flux",
149
+ "imagen",
150
+ "recraft",
151
+ "stable-diffusion",
152
+ "ideogram",
153
+ "dreamshaper",
154
+ "sora",
155
+ "veo",
156
+ "runway",
157
+ "dream-machine",
158
+ "whisper",
159
+ "elevenlabs",
160
+ "lyria",
161
+ "melotts",
162
+ "hermes",
163
+ "zephyr",
164
+ "openchat",
165
+ "starling",
166
+ "qvq",
167
+ "sherlock",
168
+ "pony",
169
+ "mercury",
170
+ "cogito",
171
+ "mimo",
172
+ "mimo-pro",
173
+ "mimo-omni",
174
+ "mimo-v2-pro",
175
+ "mimo-v2-omni",
176
+ "mimo-v2.5-pro",
177
+ "mimo-v2.5",
178
+ "mimo-v2.5-free",
179
+ "mimo-pro-free",
180
+ "mimo-omni-free",
181
+ "mimo-flash-free",
182
+ "mm-poly",
183
+ "longcat",
184
+ "nex-n2",
185
+ "intern-s",
186
+ "internvl",
187
+ "joyai",
188
+ "magistral",
189
+ "magistral-small",
190
+ "magistral-medium",
191
+ "phoenix",
192
+ "lucid",
193
+ "agi",
194
+ "intellect",
195
+ "aura",
196
+ "jais",
197
+ "sarvam",
198
+ "falcon",
199
+ "skywork",
200
+ "bart",
201
+ "distilbert",
202
+ "resnet",
203
+ "m2m",
204
+ "indictrans",
205
+ "llava",
206
+ "seed",
207
+ "ray",
208
+ "tstars",
209
+ "rnj",
210
+ "hy3",
211
+ "hy3-free",
212
+ "ling",
213
+ "ling-flash-free",
214
+ "ring",
215
+ "ring-1t-free",
216
+ "kat-coder",
217
+ "sqlcoder",
218
+ "discolm",
219
+ "osmosis",
220
+ "parakeet",
221
+ "nemoretriever",
222
+ "nano-banana",
223
+ "una-cybertron",
224
+ "morph",
225
+ "voxtral",
226
+ "venice",
227
+ "auto",
228
+ "model-router",
229
+ "fugu",
230
+ "v0",
231
+ "tako",
232
+ "mai",
233
+ "rednote",
234
+ "smart-turn",
235
+ "qwerky",
236
+ "big-pickle",
237
+ "chutesai",
238
+ "opengvlab",
239
+ "tngtech",
240
+ "topazlabs",
241
+ "unsloth",
242
+ "nousresearch",
243
+ "alpha",
244
+ "oswe",
245
+ "neural-chat",
246
+ "pangu",
247
+ "liquid",
248
+ "sourceful",
249
+ "allenai",
250
+ "palmyra",
251
+ "allam",
252
+ "canopylabs",
253
+ "groq",
254
+ "elephant"
255
+ ]
256
+ },
257
+ "series": {
258
+ "type": "string",
259
+ "minLength": 1
260
+ },
261
+ "attachment": {
262
+ "type": "boolean",
263
+ "description": "Whether attachments are supported. Missing on optional metadata means unknown."
264
+ },
265
+ "reasoning": {
266
+ "type": "boolean",
267
+ "description": "Whether reasoning is supported. Missing means unknown; false means explicitly unsupported."
268
+ },
269
+ "tool_call": {
270
+ "type": "boolean",
271
+ "description": "Whether tool calling is supported. Missing means unknown; false means explicitly unsupported."
272
+ },
273
+ "structured_output": {
274
+ "type": "boolean",
275
+ "description": "Whether structured output is supported. Missing means unknown; false means explicitly unsupported."
276
+ },
277
+ "temperature": {
278
+ "type": "boolean",
279
+ "description": "Whether temperature is explicitly adjustable. Missing means unknown; false means fixed or unsupported."
280
+ },
281
+ "knowledge": {
282
+ "type": "string",
283
+ "pattern": "^\\d{4}-\\d{2}(-\\d{2})?$"
284
+ },
285
+ "release_date": {
286
+ "$ref": "#/definitions/ModelMetadata/properties/knowledge"
287
+ },
288
+ "last_updated": {
289
+ "$ref": "#/definitions/ModelMetadata/properties/knowledge"
290
+ },
291
+ "modalities": {
292
+ "type": "object",
293
+ "properties": {
294
+ "input": {
295
+ "type": "array",
296
+ "items": {
297
+ "type": "string",
298
+ "enum": [
299
+ "text",
300
+ "audio",
301
+ "image",
302
+ "video",
303
+ "pdf"
304
+ ]
305
+ },
306
+ "description": "Input modalities accepted by the model."
307
+ },
308
+ "output": {
309
+ "type": "array",
310
+ "items": {
311
+ "$ref": "#/definitions/ModelMetadata/properties/modalities/properties/input/items"
312
+ },
313
+ "description": "Output modalities produced by the model."
314
+ }
315
+ },
316
+ "required": [
317
+ "input",
318
+ "output"
319
+ ],
320
+ "additionalProperties": false,
321
+ "description": "Input and output modalities exposed by this model endpoint."
322
+ },
323
+ "open_weights": {
324
+ "type": "boolean"
325
+ },
326
+ "limit": {
327
+ "type": "object",
328
+ "properties": {
329
+ "context": {
330
+ "type": "integer",
331
+ "minimum": 0,
332
+ "description": "Maximum context window in tokens."
333
+ },
334
+ "input": {
335
+ "type": "integer",
336
+ "minimum": 0,
337
+ "description": "Maximum input length in tokens when separately documented."
338
+ },
339
+ "output": {
340
+ "type": "integer",
341
+ "minimum": 0,
342
+ "description": "Maximum output length in tokens when documented."
343
+ }
344
+ },
345
+ "required": [
346
+ "context"
347
+ ],
348
+ "additionalProperties": false,
349
+ "description": "Token limits published for the base model."
350
+ },
351
+ "license": {
352
+ "type": "string",
353
+ "minLength": 1
354
+ },
355
+ "links": {
356
+ "type": "array",
357
+ "items": {
358
+ "type": "object",
359
+ "properties": {
360
+ "label": {
361
+ "type": "string",
362
+ "minLength": 1
363
+ },
364
+ "url": {
365
+ "type": "string",
366
+ "format": "uri"
367
+ },
368
+ "type": {
369
+ "type": "string",
370
+ "enum": [
371
+ "announcement",
372
+ "blog",
373
+ "docs",
374
+ "license",
375
+ "model_card",
376
+ "paper",
377
+ "weights",
378
+ "other"
379
+ ]
380
+ }
381
+ },
382
+ "required": [
383
+ "url"
384
+ ],
385
+ "additionalProperties": false
386
+ }
387
+ },
388
+ "weights": {
389
+ "type": "array",
390
+ "items": {
391
+ "type": "object",
392
+ "properties": {
393
+ "label": {
394
+ "type": "string",
395
+ "minLength": 1
396
+ },
397
+ "url": {
398
+ "$ref": "#/definitions/ModelMetadata/properties/links/items/properties/url"
399
+ },
400
+ "format": {
401
+ "type": "string",
402
+ "minLength": 1
403
+ },
404
+ "quantization": {
405
+ "type": "string",
406
+ "minLength": 1
407
+ }
408
+ },
409
+ "required": [
410
+ "url"
411
+ ],
412
+ "additionalProperties": false
413
+ }
414
+ },
415
+ "benchmarks": {
416
+ "type": "array",
417
+ "items": {
418
+ "type": "object",
419
+ "properties": {
420
+ "name": {
421
+ "type": "string",
422
+ "minLength": 1
423
+ },
424
+ "score": {
425
+ "anyOf": [
426
+ {
427
+ "type": "number"
428
+ },
429
+ {
430
+ "type": "string",
431
+ "minLength": 1
432
+ }
433
+ ]
434
+ },
435
+ "metric": {
436
+ "type": "string",
437
+ "minLength": 1
438
+ },
439
+ "harness": {
440
+ "type": "string",
441
+ "minLength": 1
442
+ },
443
+ "variant": {
444
+ "type": "string",
445
+ "minLength": 1
446
+ },
447
+ "dataset": {
448
+ "type": "string",
449
+ "minLength": 1
450
+ },
451
+ "version": {
452
+ "type": "string",
453
+ "minLength": 1
454
+ },
455
+ "source": {
456
+ "$ref": "#/definitions/ModelMetadata/properties/links/items/properties/url"
457
+ },
458
+ "date": {
459
+ "$ref": "#/definitions/ModelMetadata/properties/knowledge"
460
+ }
461
+ },
462
+ "required": [
463
+ "name",
464
+ "score"
465
+ ],
466
+ "additionalProperties": false
467
+ }
468
+ }
469
+ },
470
+ "required": [
471
+ "id",
472
+ "name",
473
+ "description"
474
+ ],
475
+ "additionalProperties": false
476
+ },
477
+ "Protocol": {
478
+ "type": "string",
479
+ "enum": [
480
+ "openai-compatible",
481
+ "anthropic-compatible",
482
+ "openai-responses"
483
+ ],
484
+ "description": "Protocol used to call a provider endpoint."
485
+ },
486
+ "ProviderEndpoint": {
487
+ "type": "object",
488
+ "properties": {
489
+ "id": {
490
+ "type": "string",
491
+ "pattern": "^[a-z][a-z0-9-]*$",
492
+ "description": "Stable endpoint ID referenced by provider models."
493
+ },
494
+ "protocol": {
495
+ "$ref": "#/definitions/Protocol"
496
+ },
497
+ "api": {
498
+ "type": "string",
499
+ "format": "uri",
500
+ "description": "Base API URL for this endpoint."
501
+ },
502
+ "default": {
503
+ "type": "boolean",
504
+ "const": true,
505
+ "description": "Marks the endpoint represented by the provider-level protocol and API fields."
506
+ }
507
+ },
508
+ "required": [
509
+ "id",
510
+ "protocol",
511
+ "api"
512
+ ],
513
+ "additionalProperties": false,
514
+ "description": "A protocol-specific API endpoint exposed by a provider."
515
+ },
516
+ "ReasoningOption": {
517
+ "anyOf": [
518
+ {
519
+ "type": "object",
520
+ "properties": {
521
+ "type": {
522
+ "type": "string",
523
+ "const": "toggle"
524
+ },
525
+ "field": {
526
+ "type": "string",
527
+ "minLength": 1,
528
+ "description": "Request body field used by this reasoning control."
529
+ },
530
+ "endpoints": {
531
+ "type": "array",
532
+ "items": {
533
+ "type": "string",
534
+ "pattern": "^[a-z][a-z0-9-]*$"
535
+ },
536
+ "minItems": 1,
537
+ "description": "Provider endpoint IDs where this reasoning control applies."
538
+ }
539
+ },
540
+ "required": [
541
+ "type"
542
+ ],
543
+ "additionalProperties": false
544
+ },
545
+ {
546
+ "type": "object",
547
+ "properties": {
548
+ "type": {
549
+ "type": "string",
550
+ "const": "effort"
551
+ },
552
+ "values": {
553
+ "type": "array",
554
+ "items": {
555
+ "anyOf": [
556
+ {
557
+ "type": "null"
558
+ },
559
+ {
560
+ "type": "string",
561
+ "enum": [
562
+ "none",
563
+ "minimal",
564
+ "low",
565
+ "medium",
566
+ "high",
567
+ "xhigh",
568
+ "max"
569
+ ]
570
+ }
571
+ ]
572
+ },
573
+ "minItems": 1,
574
+ "description": "Supported reasoning effort values; JSON null disables reasoning when supported."
575
+ },
576
+ "default": {
577
+ "$ref": "#/definitions/ReasoningOption/anyOf/1/properties/values/items",
578
+ "description": "Default reasoning effort when the provider documents one."
579
+ },
580
+ "field": {
581
+ "$ref": "#/definitions/ReasoningOption/anyOf/0/properties/field"
582
+ },
583
+ "endpoints": {
584
+ "$ref": "#/definitions/ReasoningOption/anyOf/0/properties/endpoints"
585
+ }
586
+ },
587
+ "required": [
588
+ "type",
589
+ "values"
590
+ ],
591
+ "additionalProperties": false
592
+ },
593
+ {
594
+ "type": "object",
595
+ "properties": {
596
+ "type": {
597
+ "type": "string",
598
+ "const": "budget_tokens"
599
+ },
600
+ "min": {
601
+ "type": "integer",
602
+ "minimum": -1,
603
+ "description": "Minimum reasoning token budget; -1 may represent automatic allocation."
604
+ },
605
+ "max": {
606
+ "type": "integer",
607
+ "minimum": 0,
608
+ "description": "Maximum reasoning token budget."
609
+ },
610
+ "field": {
611
+ "$ref": "#/definitions/ReasoningOption/anyOf/0/properties/field"
612
+ },
613
+ "endpoints": {
614
+ "$ref": "#/definitions/ReasoningOption/anyOf/0/properties/endpoints"
615
+ }
616
+ },
617
+ "required": [
618
+ "type"
619
+ ],
620
+ "additionalProperties": false
621
+ }
622
+ ],
623
+ "description": "Provider-specific reasoning control; type discriminates toggle, effort and token-budget forms."
624
+ },
625
+ "ProviderModel": {
626
+ "type": "object",
627
+ "properties": {
628
+ "id": {
629
+ "type": "string"
630
+ },
631
+ "name": {
632
+ "type": "string",
633
+ "minLength": 1
634
+ },
635
+ "description": {
636
+ "type": "string",
637
+ "minLength": 1
638
+ },
639
+ "family": {
640
+ "$ref": "#/definitions/ModelMetadata/properties/family"
641
+ },
642
+ "series": {
643
+ "type": "string",
644
+ "minLength": 1
645
+ },
646
+ "attachment": {
647
+ "$ref": "#/definitions/ModelMetadata/properties/attachment"
648
+ },
649
+ "reasoning": {
650
+ "$ref": "#/definitions/ModelMetadata/properties/reasoning",
651
+ "description": "Whether reasoning is supported. Missing means unknown; false means explicitly unsupported."
652
+ },
653
+ "reasoning_options": {
654
+ "type": "array",
655
+ "items": {
656
+ "$ref": "#/definitions/ReasoningOption"
657
+ },
658
+ "description": "Provider-specific controls for enabling or configuring reasoning."
659
+ },
660
+ "tool_call": {
661
+ "$ref": "#/definitions/ModelMetadata/properties/tool_call",
662
+ "description": "Whether tool calling is supported. Missing means unknown; false means explicitly unsupported."
663
+ },
664
+ "interleaved": {
665
+ "anyOf": [
666
+ {
667
+ "type": "boolean",
668
+ "const": true
669
+ },
670
+ {
671
+ "type": "object",
672
+ "properties": {
673
+ "field": {
674
+ "type": "string",
675
+ "enum": [
676
+ "reasoning_content",
677
+ "reasoning_details"
678
+ ]
679
+ }
680
+ },
681
+ "required": [
682
+ "field"
683
+ ],
684
+ "additionalProperties": false
685
+ }
686
+ ],
687
+ "description": "Whether reasoning content is returned alongside output, optionally naming its response field."
688
+ },
689
+ "structured_output": {
690
+ "$ref": "#/definitions/ModelMetadata/properties/structured_output",
691
+ "description": "Whether structured output is supported. Missing means unknown; false means explicitly unsupported."
692
+ },
693
+ "temperature": {
694
+ "$ref": "#/definitions/ModelMetadata/properties/temperature",
695
+ "description": "Whether temperature is explicitly adjustable. Missing means unknown; false means fixed or unsupported."
696
+ },
697
+ "knowledge": {
698
+ "$ref": "#/definitions/ModelMetadata/properties/knowledge"
699
+ },
700
+ "release_date": {
701
+ "$ref": "#/definitions/ModelMetadata/properties/knowledge"
702
+ },
703
+ "last_updated": {
704
+ "$ref": "#/definitions/ModelMetadata/properties/knowledge"
705
+ },
706
+ "modalities": {
707
+ "$ref": "#/definitions/ModelMetadata/properties/modalities"
708
+ },
709
+ "open_weights": {
710
+ "type": "boolean"
711
+ },
712
+ "limit": {
713
+ "type": "object",
714
+ "properties": {
715
+ "context": {
716
+ "$ref": "#/definitions/ModelMetadata/properties/limit/properties/context"
717
+ },
718
+ "input": {
719
+ "$ref": "#/definitions/ModelMetadata/properties/limit/properties/input"
720
+ },
721
+ "output": {
722
+ "type": "integer",
723
+ "minimum": 0,
724
+ "description": "Maximum output length in tokens when documented."
725
+ }
726
+ },
727
+ "required": [
728
+ "context"
729
+ ],
730
+ "additionalProperties": false,
731
+ "description": "Token limits exposed by this provider model endpoint."
732
+ },
733
+ "doc": {
734
+ "$ref": "#/definitions/ModelMetadata/properties/links/items/properties/url"
735
+ },
736
+ "endpoints": {
737
+ "type": "array",
738
+ "items": {
739
+ "type": "string",
740
+ "pattern": "^[a-z][a-z0-9-]*$"
741
+ },
742
+ "minItems": 1,
743
+ "description": "Provider endpoint IDs enabled for this model; missing means the provider default endpoint."
744
+ },
745
+ "cost_points": {
746
+ "type": "object",
747
+ "properties": {
748
+ "input": {
749
+ "type": "number",
750
+ "minimum": 0
751
+ },
752
+ "output": {
753
+ "type": "number",
754
+ "minimum": 0
755
+ },
756
+ "cache_read": {
757
+ "type": "number",
758
+ "minimum": 0
759
+ },
760
+ "per_tokens": {
761
+ "type": "integer",
762
+ "exclusiveMinimum": 0
763
+ },
764
+ "tiers": {
765
+ "type": "array",
766
+ "items": {
767
+ "type": "object",
768
+ "properties": {
769
+ "input": {
770
+ "$ref": "#/definitions/ProviderModel/properties/cost_points/properties/input"
771
+ },
772
+ "output": {
773
+ "$ref": "#/definitions/ProviderModel/properties/cost_points/properties/output"
774
+ },
775
+ "cache_read": {
776
+ "$ref": "#/definitions/ProviderModel/properties/cost_points/properties/cache_read"
777
+ },
778
+ "tier": {
779
+ "anyOf": [
780
+ {
781
+ "type": "object",
782
+ "properties": {
783
+ "type": {
784
+ "type": "string",
785
+ "const": "context"
786
+ },
787
+ "size": {
788
+ "type": "integer",
789
+ "minimum": 0
790
+ }
791
+ },
792
+ "required": [
793
+ "type",
794
+ "size"
795
+ ],
796
+ "additionalProperties": false
797
+ },
798
+ {
799
+ "type": "object",
800
+ "properties": {
801
+ "type": {
802
+ "type": "string",
803
+ "const": "conditional"
804
+ },
805
+ "input": {
806
+ "type": "object",
807
+ "properties": {
808
+ "gte": {
809
+ "type": "integer",
810
+ "minimum": 0
811
+ },
812
+ "gt": {
813
+ "type": "integer",
814
+ "minimum": 0
815
+ },
816
+ "lt": {
817
+ "type": "integer",
818
+ "minimum": 0
819
+ },
820
+ "lte": {
821
+ "type": "integer",
822
+ "minimum": 0
823
+ }
824
+ },
825
+ "additionalProperties": false
826
+ },
827
+ "output": {
828
+ "$ref": "#/definitions/ProviderModel/properties/cost_points/properties/tiers/items/properties/tier/anyOf/1/properties/input"
829
+ },
830
+ "time": {
831
+ "type": "object",
832
+ "properties": {
833
+ "timezone": {
834
+ "type": "string",
835
+ "minLength": 1
836
+ },
837
+ "windows": {
838
+ "type": "array",
839
+ "items": {
840
+ "type": "object",
841
+ "properties": {
842
+ "days": {
843
+ "type": "array",
844
+ "items": {
845
+ "type": "string",
846
+ "enum": [
847
+ "monday",
848
+ "tuesday",
849
+ "wednesday",
850
+ "thursday",
851
+ "friday",
852
+ "saturday",
853
+ "sunday"
854
+ ]
855
+ },
856
+ "minItems": 1
857
+ },
858
+ "start": {
859
+ "type": "string",
860
+ "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
861
+ },
862
+ "end": {
863
+ "type": "string",
864
+ "pattern": "^(([01]\\d|2[0-3]):[0-5]\\d|24:00)$"
865
+ }
866
+ },
867
+ "required": [
868
+ "start",
869
+ "end"
870
+ ],
871
+ "additionalProperties": false
872
+ },
873
+ "minItems": 1
874
+ }
875
+ },
876
+ "required": [
877
+ "timezone",
878
+ "windows"
879
+ ],
880
+ "additionalProperties": false
881
+ },
882
+ "label": {
883
+ "type": "string",
884
+ "minLength": 1
885
+ }
886
+ },
887
+ "required": [
888
+ "type"
889
+ ],
890
+ "additionalProperties": false
891
+ }
892
+ ]
893
+ }
894
+ },
895
+ "required": [
896
+ "input",
897
+ "output",
898
+ "tier"
899
+ ],
900
+ "additionalProperties": false
901
+ }
902
+ },
903
+ "off_peak_multiplier": {
904
+ "type": "number",
905
+ "exclusiveMinimum": 0,
906
+ "maximum": 1
907
+ },
908
+ "peak_window": {
909
+ "type": "object",
910
+ "properties": {
911
+ "days": {
912
+ "type": "array",
913
+ "items": {
914
+ "$ref": "#/definitions/ProviderModel/properties/cost_points/properties/tiers/items/properties/tier/anyOf/1/properties/time/properties/windows/items/properties/days/items"
915
+ },
916
+ "minItems": 1
917
+ },
918
+ "start": {
919
+ "type": "string",
920
+ "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
921
+ },
922
+ "end": {
923
+ "type": "string",
924
+ "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
925
+ },
926
+ "timezone": {
927
+ "type": "string",
928
+ "minLength": 1
929
+ }
930
+ },
931
+ "required": [
932
+ "days",
933
+ "start",
934
+ "end",
935
+ "timezone"
936
+ ],
937
+ "additionalProperties": false
938
+ }
939
+ },
940
+ "required": [
941
+ "input",
942
+ "output",
943
+ "per_tokens"
944
+ ],
945
+ "additionalProperties": false,
946
+ "description": "Plan point consumption per the number of tokens declared by per_tokens."
947
+ },
948
+ "status": {
949
+ "type": "string",
950
+ "enum": [
951
+ "alpha",
952
+ "beta",
953
+ "deprecated"
954
+ ]
955
+ },
956
+ "experimental": {
957
+ "type": "object",
958
+ "properties": {
959
+ "modes": {
960
+ "type": "object",
961
+ "additionalProperties": {
962
+ "type": "object",
963
+ "properties": {
964
+ "cost": {
965
+ "type": "object",
966
+ "properties": {
967
+ "input": {
968
+ "type": "number",
969
+ "minimum": 0
970
+ },
971
+ "output": {
972
+ "type": "number",
973
+ "minimum": 0
974
+ },
975
+ "reasoning": {
976
+ "type": "number",
977
+ "minimum": 0
978
+ },
979
+ "cache_read": {
980
+ "type": "number",
981
+ "minimum": 0
982
+ },
983
+ "cache_write": {
984
+ "type": "number",
985
+ "minimum": 0
986
+ },
987
+ "input_audio": {
988
+ "type": "number",
989
+ "minimum": 0
990
+ },
991
+ "output_audio": {
992
+ "type": "number",
993
+ "minimum": 0
994
+ }
995
+ },
996
+ "required": [
997
+ "input",
998
+ "output"
999
+ ],
1000
+ "additionalProperties": false
1001
+ },
1002
+ "cost_cn": {
1003
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost"
1004
+ },
1005
+ "provider": {
1006
+ "type": "object",
1007
+ "properties": {
1008
+ "body": {
1009
+ "type": "object",
1010
+ "additionalProperties": {
1011
+ "anyOf": [
1012
+ {
1013
+ "type": "string"
1014
+ },
1015
+ {
1016
+ "type": "number"
1017
+ },
1018
+ {
1019
+ "type": "boolean"
1020
+ },
1021
+ {
1022
+ "type": "null"
1023
+ },
1024
+ {
1025
+ "type": "array",
1026
+ "items": {
1027
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/provider/properties/body/additionalProperties"
1028
+ }
1029
+ },
1030
+ {
1031
+ "type": "object",
1032
+ "additionalProperties": {
1033
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/provider/properties/body/additionalProperties"
1034
+ }
1035
+ }
1036
+ ]
1037
+ }
1038
+ },
1039
+ "headers": {
1040
+ "type": "object",
1041
+ "additionalProperties": {
1042
+ "type": "string"
1043
+ }
1044
+ }
1045
+ },
1046
+ "additionalProperties": false
1047
+ }
1048
+ },
1049
+ "additionalProperties": false
1050
+ }
1051
+ }
1052
+ },
1053
+ "additionalProperties": false
1054
+ },
1055
+ "provider": {
1056
+ "type": "object",
1057
+ "properties": {
1058
+ "npm": {
1059
+ "type": "string"
1060
+ },
1061
+ "api": {
1062
+ "type": "string"
1063
+ },
1064
+ "shape": {
1065
+ "type": "string",
1066
+ "enum": [
1067
+ "responses",
1068
+ "completions"
1069
+ ]
1070
+ },
1071
+ "body": {
1072
+ "type": "object",
1073
+ "additionalProperties": {
1074
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/provider/properties/body/additionalProperties"
1075
+ }
1076
+ },
1077
+ "headers": {
1078
+ "type": "object",
1079
+ "additionalProperties": {
1080
+ "type": "string"
1081
+ }
1082
+ }
1083
+ },
1084
+ "additionalProperties": false
1085
+ },
1086
+ "cost": {
1087
+ "type": "object",
1088
+ "properties": {
1089
+ "input": {
1090
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/input"
1091
+ },
1092
+ "output": {
1093
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/output"
1094
+ },
1095
+ "reasoning": {
1096
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/reasoning"
1097
+ },
1098
+ "cache_read": {
1099
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/cache_read"
1100
+ },
1101
+ "cache_write": {
1102
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/cache_write"
1103
+ },
1104
+ "input_audio": {
1105
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/input_audio"
1106
+ },
1107
+ "output_audio": {
1108
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/output_audio"
1109
+ },
1110
+ "context_over_200k": {
1111
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost"
1112
+ },
1113
+ "tiers": {
1114
+ "type": "array",
1115
+ "items": {
1116
+ "type": "object",
1117
+ "properties": {
1118
+ "input": {
1119
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/input"
1120
+ },
1121
+ "output": {
1122
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/output"
1123
+ },
1124
+ "reasoning": {
1125
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/reasoning"
1126
+ },
1127
+ "cache_read": {
1128
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/cache_read"
1129
+ },
1130
+ "cache_write": {
1131
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/cache_write"
1132
+ },
1133
+ "input_audio": {
1134
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/input_audio"
1135
+ },
1136
+ "output_audio": {
1137
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/output_audio"
1138
+ },
1139
+ "tier": {
1140
+ "$ref": "#/definitions/ProviderModel/properties/cost_points/properties/tiers/items/properties/tier"
1141
+ }
1142
+ },
1143
+ "required": [
1144
+ "input",
1145
+ "output",
1146
+ "tier"
1147
+ ],
1148
+ "additionalProperties": false
1149
+ }
1150
+ }
1151
+ },
1152
+ "required": [
1153
+ "input",
1154
+ "output"
1155
+ ],
1156
+ "additionalProperties": false,
1157
+ "description": "Prices in USD per million tokens."
1158
+ },
1159
+ "cost_cn": {
1160
+ "type": "object",
1161
+ "properties": {
1162
+ "input": {
1163
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/input"
1164
+ },
1165
+ "output": {
1166
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/output"
1167
+ },
1168
+ "reasoning": {
1169
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/reasoning"
1170
+ },
1171
+ "cache_read": {
1172
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/cache_read"
1173
+ },
1174
+ "cache_write": {
1175
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/cache_write"
1176
+ },
1177
+ "input_audio": {
1178
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/input_audio"
1179
+ },
1180
+ "output_audio": {
1181
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/output_audio"
1182
+ },
1183
+ "thinking": {
1184
+ "type": "object",
1185
+ "properties": {
1186
+ "input": {
1187
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/input"
1188
+ },
1189
+ "output": {
1190
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/output"
1191
+ },
1192
+ "cache_read": {
1193
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/cache_read"
1194
+ },
1195
+ "cache_write": {
1196
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/cache_write"
1197
+ },
1198
+ "input_audio": {
1199
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/input_audio"
1200
+ },
1201
+ "output_audio": {
1202
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/output_audio"
1203
+ }
1204
+ },
1205
+ "required": [
1206
+ "input",
1207
+ "output"
1208
+ ],
1209
+ "additionalProperties": false
1210
+ },
1211
+ "context_over_200k": {
1212
+ "type": "object",
1213
+ "properties": {
1214
+ "input": {
1215
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/input"
1216
+ },
1217
+ "output": {
1218
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/output"
1219
+ },
1220
+ "reasoning": {
1221
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/reasoning"
1222
+ },
1223
+ "cache_read": {
1224
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/cache_read"
1225
+ },
1226
+ "cache_write": {
1227
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/cache_write"
1228
+ },
1229
+ "input_audio": {
1230
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/input_audio"
1231
+ },
1232
+ "output_audio": {
1233
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/output_audio"
1234
+ },
1235
+ "thinking": {
1236
+ "$ref": "#/definitions/ProviderModel/properties/cost_cn/properties/thinking"
1237
+ }
1238
+ },
1239
+ "required": [
1240
+ "input",
1241
+ "output"
1242
+ ],
1243
+ "additionalProperties": false
1244
+ },
1245
+ "tiers": {
1246
+ "type": "array",
1247
+ "items": {
1248
+ "type": "object",
1249
+ "properties": {
1250
+ "input": {
1251
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/input"
1252
+ },
1253
+ "output": {
1254
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/output"
1255
+ },
1256
+ "reasoning": {
1257
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/reasoning"
1258
+ },
1259
+ "cache_read": {
1260
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/cache_read"
1261
+ },
1262
+ "cache_write": {
1263
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/cache_write"
1264
+ },
1265
+ "input_audio": {
1266
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/input_audio"
1267
+ },
1268
+ "output_audio": {
1269
+ "$ref": "#/definitions/ProviderModel/properties/experimental/properties/modes/additionalProperties/properties/cost/properties/output_audio"
1270
+ },
1271
+ "thinking": {
1272
+ "$ref": "#/definitions/ProviderModel/properties/cost_cn/properties/thinking"
1273
+ },
1274
+ "tier": {
1275
+ "$ref": "#/definitions/ProviderModel/properties/cost_points/properties/tiers/items/properties/tier"
1276
+ }
1277
+ },
1278
+ "required": [
1279
+ "input",
1280
+ "output",
1281
+ "tier"
1282
+ ],
1283
+ "additionalProperties": false
1284
+ }
1285
+ }
1286
+ },
1287
+ "required": [
1288
+ "input",
1289
+ "output"
1290
+ ],
1291
+ "additionalProperties": false,
1292
+ "description": "Prices in CNY per million tokens."
1293
+ }
1294
+ },
1295
+ "required": [
1296
+ "id",
1297
+ "name",
1298
+ "description",
1299
+ "attachment",
1300
+ "release_date",
1301
+ "last_updated",
1302
+ "modalities",
1303
+ "open_weights",
1304
+ "limit"
1305
+ ],
1306
+ "additionalProperties": false
1307
+ },
1308
+ "Provider": {
1309
+ "type": "object",
1310
+ "properties": {
1311
+ "id": {
1312
+ "type": "string"
1313
+ },
1314
+ "env": {
1315
+ "type": "array",
1316
+ "items": {
1317
+ "type": "string"
1318
+ },
1319
+ "minItems": 1
1320
+ },
1321
+ "npm": {
1322
+ "type": "string",
1323
+ "minLength": 1
1324
+ },
1325
+ "protocol": {
1326
+ "type": "string",
1327
+ "enum": [
1328
+ "openai-compatible",
1329
+ "anthropic-compatible",
1330
+ "openai-responses"
1331
+ ],
1332
+ "description": "Default protocol used by this provider."
1333
+ },
1334
+ "api": {
1335
+ "type": "string",
1336
+ "description": "Base API URL for the default endpoint."
1337
+ },
1338
+ "endpoints": {
1339
+ "type": "array",
1340
+ "items": {
1341
+ "$ref": "#/definitions/ProviderEndpoint"
1342
+ },
1343
+ "minItems": 1,
1344
+ "description": "All protocol-specific endpoints exposed by this provider."
1345
+ },
1346
+ "name": {
1347
+ "type": "string",
1348
+ "minLength": 1
1349
+ },
1350
+ "plans_cn": {
1351
+ "type": "array",
1352
+ "items": {
1353
+ "type": "object",
1354
+ "properties": {
1355
+ "name": {
1356
+ "type": "string",
1357
+ "minLength": 1
1358
+ },
1359
+ "price_month": {
1360
+ "type": "number",
1361
+ "minimum": 0
1362
+ },
1363
+ "usage": {
1364
+ "type": "string",
1365
+ "minLength": 1
1366
+ },
1367
+ "quota_windows": {
1368
+ "type": "array",
1369
+ "items": {
1370
+ "type": "string",
1371
+ "minLength": 1
1372
+ }
1373
+ }
1374
+ },
1375
+ "required": [
1376
+ "name",
1377
+ "price_month"
1378
+ ],
1379
+ "additionalProperties": false
1380
+ },
1381
+ "description": "Subscription plans published for users in China."
1382
+ },
1383
+ "credits_cn": {
1384
+ "type": "object",
1385
+ "properties": {
1386
+ "points": {
1387
+ "type": "integer",
1388
+ "exclusiveMinimum": 0
1389
+ },
1390
+ "cny": {
1391
+ "type": "number",
1392
+ "exclusiveMinimum": 0
1393
+ },
1394
+ "valid_days": {
1395
+ "type": "integer",
1396
+ "exclusiveMinimum": 0
1397
+ }
1398
+ },
1399
+ "required": [
1400
+ "points",
1401
+ "cny"
1402
+ ],
1403
+ "additionalProperties": false
1404
+ },
1405
+ "doc": {
1406
+ "type": "string",
1407
+ "minLength": 1
1408
+ },
1409
+ "models": {
1410
+ "type": "object",
1411
+ "additionalProperties": {
1412
+ "$ref": "#/definitions/ProviderModel"
1413
+ }
1414
+ }
1415
+ },
1416
+ "required": [
1417
+ "id",
1418
+ "env",
1419
+ "npm",
1420
+ "protocol",
1421
+ "name",
1422
+ "doc",
1423
+ "models"
1424
+ ],
1425
+ "additionalProperties": false
1426
+ },
1427
+ "Models": {
1428
+ "type": "object",
1429
+ "additionalProperties": {
1430
+ "$ref": "#/definitions/ModelMetadata"
1431
+ }
1432
+ },
1433
+ "Providers": {
1434
+ "type": "object",
1435
+ "additionalProperties": {
1436
+ "$ref": "#/definitions/Provider"
1437
+ }
1438
+ },
1439
+ "ManifestFile": {
1440
+ "type": "object",
1441
+ "properties": {
1442
+ "sha256": {
1443
+ "type": "string",
1444
+ "pattern": "^[0-9a-f]{64}$"
1445
+ },
1446
+ "size": {
1447
+ "type": "integer",
1448
+ "minimum": 0
1449
+ }
1450
+ },
1451
+ "required": [
1452
+ "sha256",
1453
+ "size"
1454
+ ],
1455
+ "additionalProperties": false
1456
+ },
1457
+ "Manifest": {
1458
+ "type": "object",
1459
+ "properties": {
1460
+ "version": {
1461
+ "type": "string",
1462
+ "pattern": "^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$"
1463
+ },
1464
+ "schema_version": {
1465
+ "type": "number",
1466
+ "const": 1
1467
+ },
1468
+ "generated_at": {
1469
+ "type": "string",
1470
+ "format": "date-time"
1471
+ },
1472
+ "source": {
1473
+ "type": "object",
1474
+ "properties": {
1475
+ "repository": {
1476
+ "type": "string",
1477
+ "format": "uri"
1478
+ },
1479
+ "revision": {
1480
+ "type": "string",
1481
+ "minLength": 1
1482
+ }
1483
+ },
1484
+ "required": [
1485
+ "repository",
1486
+ "revision"
1487
+ ],
1488
+ "additionalProperties": false
1489
+ },
1490
+ "files": {
1491
+ "type": "object",
1492
+ "properties": {
1493
+ "api.json": {
1494
+ "$ref": "#/definitions/ManifestFile"
1495
+ },
1496
+ "models.json": {
1497
+ "$ref": "#/definitions/ManifestFile"
1498
+ },
1499
+ "catalog.json": {
1500
+ "$ref": "#/definitions/ManifestFile"
1501
+ },
1502
+ "schema.json": {
1503
+ "$ref": "#/definitions/ManifestFile"
1504
+ }
1505
+ },
1506
+ "required": [
1507
+ "api.json",
1508
+ "models.json",
1509
+ "catalog.json",
1510
+ "schema.json"
1511
+ ],
1512
+ "additionalProperties": false
1513
+ }
1514
+ },
1515
+ "required": [
1516
+ "version",
1517
+ "schema_version",
1518
+ "generated_at",
1519
+ "source",
1520
+ "files"
1521
+ ],
1522
+ "additionalProperties": false
1523
+ },
1524
+ "Catalog": {
1525
+ "type": "object",
1526
+ "properties": {
1527
+ "models": {
1528
+ "$ref": "#/definitions/Models"
1529
+ },
1530
+ "providers": {
1531
+ "$ref": "#/definitions/Providers"
1532
+ }
1533
+ },
1534
+ "required": [
1535
+ "models",
1536
+ "providers"
1537
+ ],
1538
+ "additionalProperties": false
1539
+ }
1540
+ }
1541
+ }