@x12i/ai-profiles 4.5.0 → 5.1.0
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/README.md +23 -8
- package/dist/browser.js +1 -1
- package/dist/browser.js.map +1 -1
- package/dist/data/reasoning-coverage.json +499 -0
- package/dist/data/reasoning-directives.json +7562 -0
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/hostIntents.d.ts +8 -0
- package/dist/hostIntents.d.ts.map +1 -0
- package/dist/hostIntents.js +41 -0
- package/dist/hostIntents.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/isConcreteModelId.js +2 -2
- package/dist/isConcreteModelId.js.map +1 -1
- package/dist/loader/loadBundledModelsCatalog.js +1 -1
- package/dist/loader/loadBundledModelsCatalog.js.map +1 -1
- package/dist/reasoning/mergeReasoningBody.d.ts +7 -0
- package/dist/reasoning/mergeReasoningBody.d.ts.map +1 -0
- package/dist/reasoning/mergeReasoningBody.js +50 -0
- package/dist/reasoning/mergeReasoningBody.js.map +1 -0
- package/dist/reasoning/resolveReasoningDocument.d.ts +4 -0
- package/dist/reasoning/resolveReasoningDocument.d.ts.map +1 -0
- package/dist/reasoning/resolveReasoningDocument.js +153 -0
- package/dist/reasoning/resolveReasoningDocument.js.map +1 -0
- package/dist/reasoning/types.d.ts +75 -22
- package/dist/reasoning/types.d.ts.map +1 -1
- package/dist/reasoning/types.js +19 -21
- package/dist/reasoning/types.js.map +1 -1
- package/dist/reasoning/validateReasoningDirectives.d.ts +9 -0
- package/dist/reasoning/validateReasoningDirectives.d.ts.map +1 -0
- package/dist/reasoning/validateReasoningDirectives.js +324 -0
- package/dist/reasoning/validateReasoningDirectives.js.map +1 -0
- package/dist/resolveAIProfile.d.ts.map +1 -1
- package/dist/resolveAIProfile.js +2 -1
- package/dist/resolveAIProfile.js.map +1 -1
- package/dist/resolveBundledInput.d.ts.map +1 -1
- package/dist/resolveBundledInput.js +2 -1
- package/dist/resolveBundledInput.js.map +1 -1
- package/dist/resolveInput.d.ts.map +1 -1
- package/dist/resolveInput.js +2 -1
- package/dist/resolveInput.js.map +1 -1
- package/dist/resolveProfileInputCore.d.ts.map +1 -1
- package/dist/resolveProfileInputCore.js +2 -1
- package/dist/resolveProfileInputCore.js.map +1 -1
- package/dist/resolveReasoning.d.ts +5 -5
- package/dist/resolveReasoning.d.ts.map +1 -1
- package/dist/resolveReasoning.js +7 -75
- package/dist/resolveReasoning.js.map +1 -1
- package/dist/validateProfileCatalogLinkage.js +1 -1
- package/dist/validateProfileCatalogLinkage.js.map +1 -1
- package/package.json +3 -1
- package/dist/reasoning/bedrockDirective.d.ts +0 -18
- package/dist/reasoning/bedrockDirective.d.ts.map +0 -1
- package/dist/reasoning/bedrockDirective.js +0 -131
- package/dist/reasoning/bedrockDirective.js.map +0 -1
- package/dist/reasoning/openRouterDirective.d.ts +0 -18
- package/dist/reasoning/openRouterDirective.d.ts.map +0 -1
- package/dist/reasoning/openRouterDirective.js +0 -136
- package/dist/reasoning/openRouterDirective.js.map +0 -1
package/README.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
> **v4.4.1** adds `@x12i/ai-profiles/browser` for Vite/UI. Explore via `npm run ui` (AI Profiles tab).
|
|
4
4
|
|
|
5
|
+
> **v5.1** adds `registerHostIntents` so a host can resolve a bare intent name (`overview`) through a registry `profile/choice`. Catalog listing lives in `@x12i/ai-catalogs`. Pin **`"@x12i/ai-profiles": "^5.1.0"`**.
|
|
6
|
+
|
|
7
|
+
> **v5.0** replaces `resolveReasoning` with a target-specific directive (`applied`, `degraded`, `ignored`). `openai` means the Responses API. See [CHANGELOG.md](CHANGELOG.md).
|
|
8
|
+
|
|
5
9
|
# @x12i/ai-profiles
|
|
6
10
|
|
|
7
11
|
Resolve AI profile names into concrete model choices. The package ships JSON in `src/data/` as the offline fallback. By default, registry data is fetched from public assets, validated, and cached in memory.
|
|
@@ -291,7 +295,8 @@ npm install @x12i/ai-profiles
|
|
|
291
295
|
| `resolveBundledCatalogModelDetails(slug, options?)` | Yes | Same as above but throws `UNKNOWN_MODEL` on miss |
|
|
292
296
|
| `resolveCatalogModelDetails(slug, options?)` | No (async) | Rich catalog snapshot with optional remote catalog refresh |
|
|
293
297
|
| `isReasoningModel(input, options?)` | Yes | `true`/`false` for supported inputs (throws `UNKNOWN_MODEL` on unknown concrete models) |
|
|
294
|
-
| `resolveReasoning({
|
|
298
|
+
| `resolveReasoning({ target, model, effort })` | Yes | Bundled directive for `openrouter`, `bedrock`, or `openai` (Responses). `outcome` is `applied`, `degraded`, or `ignored`. Throws `AIProfilesError` for unknown models and incomplete mappings |
|
|
299
|
+
| `mergeReasoningBody(targetBody, directiveBody)` | Yes | Deep-merge a directive body. Objects merge, arrays and scalars replace, inputs are not mutated |
|
|
295
300
|
| `resolveAIProfile(input, options?)` | No (async) | Resolve an explicit `profile/choice` key → model, pricing, runtime. Pass `includeSecondary: true` to attach `secondary`; `includeCatalog: true` to attach full `catalogModel`. |
|
|
296
301
|
| `resolveSecondaryModel(input, options?)` | No (async) | Resolve primary choice + optional companion `secondary` from profile `secondary` refs |
|
|
297
302
|
| `getSecondaryForResolvedProfile(resolved, registry, catalog?)` | Yes | Secondary for an already-resolved primary (no extra I/O when catalog is passed) |
|
|
@@ -356,8 +361,8 @@ import {
|
|
|
356
361
|
ensureConcreteModel,
|
|
357
362
|
isKnownProfileInput,
|
|
358
363
|
isReasoningModel,
|
|
364
|
+
mergeReasoningBody,
|
|
359
365
|
resolveReasoning,
|
|
360
|
-
toAbstractEffort,
|
|
361
366
|
resolveBundledInput,
|
|
362
367
|
resolveBundledAIProfile,
|
|
363
368
|
applyModelRouting,
|
|
@@ -394,13 +399,19 @@ isReasoningModel("cheap/default"); // true (catalog marks gemini-2.5-flash-lite
|
|
|
394
399
|
isReasoningModel("google/gemini-2.5-flash-lite"); // false
|
|
395
400
|
|
|
396
401
|
const resolved = resolveBundledAIProfile("deep/default", { catalogLane: "text" });
|
|
402
|
+
let prompt = "Classify this ticket.";
|
|
403
|
+
let body: Record<string, unknown> = { messages: [{ role: "user", content: prompt }] };
|
|
397
404
|
const directive = resolveReasoning({
|
|
398
|
-
|
|
405
|
+
target: "openrouter",
|
|
399
406
|
model: resolved.invocation.openrouter.modelId,
|
|
400
|
-
effort:
|
|
407
|
+
effort: resolved.runtime.reasoningEffort ?? "medium",
|
|
401
408
|
});
|
|
402
|
-
//
|
|
403
|
-
|
|
409
|
+
// Skip this block when the caller already set reasoning. Explicit config wins.
|
|
410
|
+
if (directive.outcome !== "ignored") {
|
|
411
|
+
if (directive.model) body.model = directive.model;
|
|
412
|
+
if (directive.promptPrefix) prompt = directive.promptPrefix + prompt;
|
|
413
|
+
body = mergeReasoningBody(body, directive.body);
|
|
414
|
+
}
|
|
404
415
|
|
|
405
416
|
const caps = lookupBundledCatalogCaps({
|
|
406
417
|
provider: "openrouter",
|
|
@@ -415,6 +426,10 @@ const routed = applyModelRouting(
|
|
|
415
426
|
);
|
|
416
427
|
```
|
|
417
428
|
|
|
429
|
+
`reasoningTextPaths` and `usage.reasoningTokenPaths` are JSON Pointers. `*` means every array element. Both lists are ordered alternatives: use the first path that yields a value, and do not sum usage paths. `streamReasoningKeys` are exact keys on a flat delta (`choices[*].delta` for OpenRouter). `streamReasoningPaths` are pointers into one stream event (Bedrock `contentBlockDelta`, or an OpenAI `response.reasoning_summary_text.delta` event). A directive fills only one of those stream fields. `stripFromHistoryPaths` lists fields that are safe to delete from a replayed message. OpenRouter `reasoning_details`, Bedrock `reasoningContent` signatures, and Responses reasoning items stay. `stripThinkTags` separates a whole `<think>...</think>` section from answer text, including tags split across chunks; an unclosed section at end of stream stays out of the answer. It is false unless a mapping says the model puts thoughts in answer text.
|
|
430
|
+
|
|
431
|
+
`"openai"` is `POST https://api.openai.com/v1/responses`. Do not send Chat Completions `reasoning_effort`. The resolver cannot see `max_output_tokens`, Bedrock `maxTokens`, or sampling parameters. Those constraints are on the mapping provenance in `reasoning-directives.json` and in [CHANGELOG.md](CHANGELOG.md). Coverage for 5.0.0 is that changelog, not every model on a provider.
|
|
432
|
+
|
|
418
433
|
For the same profile-first order with optional remote registry/catalog (`source: "auto"` / `"remote"` / `"bundled"`), use **`resolveInput`**:
|
|
419
434
|
|
|
420
435
|
```ts
|
|
@@ -1008,7 +1023,7 @@ When the default choice exceeds the cap, resolution auto-picks the next compatib
|
|
|
1008
1023
|
|
|
1009
1024
|
### Keeping models aligned over time
|
|
1010
1025
|
|
|
1011
|
-
Bundled linkage lives in `src/data/models-registry.json`, built from `models-profiles.json` and `
|
|
1026
|
+
Bundled linkage lives in `src/data/models-registry.json`, built from `models-profiles.json` and `@x12i/ai-catalogs` `data/models-catalog.json`.
|
|
1012
1027
|
|
|
1013
1028
|
Each catalog model has **two explicit call shapes** (never `provider: "openrouter"` with `modelId: "qwen/..."` as the only view):
|
|
1014
1029
|
|
|
@@ -1020,7 +1035,7 @@ Legacy open-assets files named `openrouter-models-catalog.json` are normalized i
|
|
|
1020
1035
|
When OpenRouter deprecates or renames a model slug:
|
|
1021
1036
|
|
|
1022
1037
|
1. Update `src/data/models-profiles.json` to a current vendor-native id (preferred).
|
|
1023
|
-
2. Refresh `
|
|
1038
|
+
2. Refresh `packages/ai-catalogs/data/models-catalog.json` via `npm run catalog:pull` (fetched from open-assets, normalized locally).
|
|
1024
1039
|
3. Run alignment checks before publishing:
|
|
1025
1040
|
|
|
1026
1041
|
```bash
|
package/dist/browser.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Does not import Node-only modules (fs, @x12i/env watchers, etc.).
|
|
4
4
|
*/
|
|
5
5
|
import modelsProfiles from "./data/models-profiles.json" with { type: "json" };
|
|
6
|
-
import modelsCatalog from "
|
|
6
|
+
import modelsCatalog from "@x12i/ai-catalogs/data/models-catalog.json" with { type: "json" };
|
|
7
7
|
import { coerceOptionalUsdPer1M } from "./pricingNormalize.js";
|
|
8
8
|
function normalize(value) {
|
|
9
9
|
return value.trim().toLowerCase();
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,cAAc,MAAM,6BAA6B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC/E,OAAO,aAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,499 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "x12i.ai-profiles.reasoning-coverage",
|
|
3
|
+
"version": "5.0.0",
|
|
4
|
+
"verifiedAt": "2026-09-23",
|
|
5
|
+
"notes": [
|
|
6
|
+
"OpenRouter coverage is the bundled text catalog. Bedrock and OpenAI coverage are explicit ids only.",
|
|
7
|
+
"supports_max_tokens models and capabilities.reasoning rows without a control object are gaps, not ignored.",
|
|
8
|
+
"No universal token-budget table is emitted.",
|
|
9
|
+
"amazon.nova-pro is not mapped. Nova 2 reasoningConfig is not that model's contract.",
|
|
10
|
+
"Claude Mythos 5.1 is in aws-ai-availability but has no catalog row, so it is not assigned."
|
|
11
|
+
],
|
|
12
|
+
"counts": {
|
|
13
|
+
"openrouterEffort": 120,
|
|
14
|
+
"openrouterIgnored": 162,
|
|
15
|
+
"openrouterGaps": 65,
|
|
16
|
+
"bedrockEffort": 3,
|
|
17
|
+
"bedrockGaps": 1,
|
|
18
|
+
"openaiEffort": 5,
|
|
19
|
+
"openaiIgnored": 2
|
|
20
|
+
},
|
|
21
|
+
"profiles": [
|
|
22
|
+
"bedrock.adaptive.low-medium-high",
|
|
23
|
+
"bedrock.adaptive.low-medium-high-max",
|
|
24
|
+
"openai.responses.ignored",
|
|
25
|
+
"openai.responses.low-medium-high-max",
|
|
26
|
+
"or.effort.high",
|
|
27
|
+
"or.effort.high.xhigh",
|
|
28
|
+
"or.effort.high.xhigh.max",
|
|
29
|
+
"or.effort.low.high",
|
|
30
|
+
"or.effort.low.high.max",
|
|
31
|
+
"or.effort.low.medium",
|
|
32
|
+
"or.effort.low.medium.high",
|
|
33
|
+
"or.effort.low.medium.high.max",
|
|
34
|
+
"or.effort.low.medium.high.xhigh",
|
|
35
|
+
"or.effort.low.medium.high.xhigh.max",
|
|
36
|
+
"or.effort.low.medium.xhigh",
|
|
37
|
+
"or.effort.medium.high",
|
|
38
|
+
"or.effort.medium.high.xhigh",
|
|
39
|
+
"or.effort.medium.xhigh",
|
|
40
|
+
"or.effort.minimal.low.medium.high",
|
|
41
|
+
"or.effort.minimal.low.medium.high.max",
|
|
42
|
+
"or.effort.minimal.low.medium.high.xhigh",
|
|
43
|
+
"or.effort.minimal.low.medium.high.xhigh.max",
|
|
44
|
+
"or.ignored.no-selectable-control",
|
|
45
|
+
"or.ignored.non-reasoning"
|
|
46
|
+
],
|
|
47
|
+
"bedrock": [
|
|
48
|
+
{
|
|
49
|
+
"modelId": "anthropic.claude-fable-5-1",
|
|
50
|
+
"catalogModelId": "anthropic/claude-fable-5.1",
|
|
51
|
+
"profileId": "bedrock.adaptive.low-medium-high"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"modelId": "us.anthropic.claude-opus-5",
|
|
55
|
+
"catalogModelId": "anthropic/claude-opus-5",
|
|
56
|
+
"profileId": "bedrock.adaptive.low-medium-high-max"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"modelId": "us.anthropic.claude-sonnet-5",
|
|
60
|
+
"catalogModelId": "anthropic/claude-sonnet-5",
|
|
61
|
+
"profileId": "bedrock.adaptive.low-medium-high"
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"openai": [
|
|
65
|
+
{
|
|
66
|
+
"modelId": "gpt-4o",
|
|
67
|
+
"catalogModelId": "openai/gpt-4o",
|
|
68
|
+
"profileId": "openai.responses.ignored"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"modelId": "gpt-4o-mini",
|
|
72
|
+
"catalogModelId": "openai/gpt-4o-mini",
|
|
73
|
+
"profileId": "openai.responses.ignored"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"modelId": "gpt-5.4",
|
|
77
|
+
"catalogModelId": "openai/gpt-5.4",
|
|
78
|
+
"profileId": "openai.responses.low-medium-high-max"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"modelId": "gpt-5.5",
|
|
82
|
+
"catalogModelId": "openai/gpt-5.5",
|
|
83
|
+
"profileId": "openai.responses.low-medium-high-max"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"modelId": "gpt-5.6-luna",
|
|
87
|
+
"catalogModelId": "openai/gpt-5.6-luna",
|
|
88
|
+
"profileId": "openai.responses.low-medium-high-max"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"modelId": "gpt-5.6-sol",
|
|
92
|
+
"catalogModelId": "openai/gpt-5.6-sol",
|
|
93
|
+
"profileId": "openai.responses.low-medium-high-max"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"modelId": "gpt-5.6-terra",
|
|
97
|
+
"catalogModelId": "openai/gpt-5.6-terra",
|
|
98
|
+
"profileId": "openai.responses.low-medium-high-max"
|
|
99
|
+
}
|
|
100
|
+
],
|
|
101
|
+
"gaps": [
|
|
102
|
+
{
|
|
103
|
+
"target": "bedrock",
|
|
104
|
+
"modelId": "anthropic.claude-haiku-4-5",
|
|
105
|
+
"catalogModelId": "anthropic/claude-haiku-4.5",
|
|
106
|
+
"reason": "Claude Haiku 4.5 uses extended thinking budget_tokens, which must be lower than the caller maxTokens. No documented five-level budget table exists, so no directive is emitted."
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"target": "openrouter",
|
|
110
|
+
"modelId": "~anthropic/claude-haiku-latest",
|
|
111
|
+
"catalogModelId": "~anthropic/claude-haiku-latest",
|
|
112
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"target": "openrouter",
|
|
116
|
+
"modelId": "amazon/nova-2-lite-v1",
|
|
117
|
+
"catalogModelId": "amazon/nova-2-lite-v1",
|
|
118
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"target": "openrouter",
|
|
122
|
+
"modelId": "anthropic/claude-haiku-4.5",
|
|
123
|
+
"catalogModelId": "anthropic/claude-haiku-4.5",
|
|
124
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"target": "openrouter",
|
|
128
|
+
"modelId": "anthropic/claude-opus-4.1",
|
|
129
|
+
"catalogModelId": "anthropic/claude-opus-4.1",
|
|
130
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"target": "openrouter",
|
|
134
|
+
"modelId": "anthropic/claude-opus-4.5",
|
|
135
|
+
"catalogModelId": "anthropic/claude-opus-4.5",
|
|
136
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"target": "openrouter",
|
|
140
|
+
"modelId": "anthropic/claude-sonnet-4",
|
|
141
|
+
"catalogModelId": "anthropic/claude-sonnet-4",
|
|
142
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"target": "openrouter",
|
|
146
|
+
"modelId": "anthropic/claude-sonnet-4.5",
|
|
147
|
+
"catalogModelId": "anthropic/claude-sonnet-4.5",
|
|
148
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"target": "openrouter",
|
|
152
|
+
"modelId": "baidu/ernie-4.5-vl-424b-a47b",
|
|
153
|
+
"catalogModelId": "baidu/ernie-4.5-vl-424b-a47b",
|
|
154
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"target": "openrouter",
|
|
158
|
+
"modelId": "bytedance-seed/seed-1.6",
|
|
159
|
+
"catalogModelId": "bytedance-seed/seed-1.6",
|
|
160
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"target": "openrouter",
|
|
164
|
+
"modelId": "bytedance-seed/seed-1.6-flash",
|
|
165
|
+
"catalogModelId": "bytedance-seed/seed-1.6-flash",
|
|
166
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"target": "openrouter",
|
|
170
|
+
"modelId": "bytedance-seed/seed-2-1-turbo",
|
|
171
|
+
"catalogModelId": "bytedance-seed/seed-2-1-turbo",
|
|
172
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"target": "openrouter",
|
|
176
|
+
"modelId": "cohere/command-a-plus",
|
|
177
|
+
"catalogModelId": "cohere/command-a-plus",
|
|
178
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"target": "openrouter",
|
|
182
|
+
"modelId": "deepseek/deepseek-chat-v3.1",
|
|
183
|
+
"catalogModelId": "deepseek/deepseek-chat-v3.1",
|
|
184
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"target": "openrouter",
|
|
188
|
+
"modelId": "deepseek/deepseek-r1-distill-llama-70b",
|
|
189
|
+
"catalogModelId": "deepseek/deepseek-r1-distill-llama-70b",
|
|
190
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"target": "openrouter",
|
|
194
|
+
"modelId": "deepseek/deepseek-v3.1-terminus",
|
|
195
|
+
"catalogModelId": "deepseek/deepseek-v3.1-terminus",
|
|
196
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"target": "openrouter",
|
|
200
|
+
"modelId": "deepseek/deepseek-v3.2-exp",
|
|
201
|
+
"catalogModelId": "deepseek/deepseek-v3.2-exp",
|
|
202
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"target": "openrouter",
|
|
206
|
+
"modelId": "google/gemini-2.5-flash",
|
|
207
|
+
"catalogModelId": "google/gemini-2.5-flash",
|
|
208
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"target": "openrouter",
|
|
212
|
+
"modelId": "google/gemini-2.5-flash-lite",
|
|
213
|
+
"catalogModelId": "google/gemini-2.5-flash-lite",
|
|
214
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"target": "openrouter",
|
|
218
|
+
"modelId": "meituan/longcat-2.0",
|
|
219
|
+
"catalogModelId": "meituan/longcat-2.0",
|
|
220
|
+
"reason": "Model accepts reasoning.max_tokens and has no effort allowlist. No per-model token budgets are documented, so no budget directive is emitted."
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"target": "openrouter",
|
|
224
|
+
"modelId": "minimax/minimax-m1",
|
|
225
|
+
"catalogModelId": "minimax/minimax-m1",
|
|
226
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"target": "openrouter",
|
|
230
|
+
"modelId": "minimax/minimax-m3",
|
|
231
|
+
"catalogModelId": "minimax/minimax-m3",
|
|
232
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"target": "openrouter",
|
|
236
|
+
"modelId": "nousresearch/hermes-4-405b",
|
|
237
|
+
"catalogModelId": "nousresearch/hermes-4-405b",
|
|
238
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"target": "openrouter",
|
|
242
|
+
"modelId": "nvidia/nemotron-3-nano-30b-a3b",
|
|
243
|
+
"catalogModelId": "nvidia/nemotron-3-nano-30b-a3b",
|
|
244
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"target": "openrouter",
|
|
248
|
+
"modelId": "nvidia/nemotron-3.5-lightning",
|
|
249
|
+
"catalogModelId": "nvidia/nemotron-3.5-lightning",
|
|
250
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"target": "openrouter",
|
|
254
|
+
"modelId": "openai/o1",
|
|
255
|
+
"catalogModelId": "openai/o1",
|
|
256
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"target": "openrouter",
|
|
260
|
+
"modelId": "openai/o1-pro",
|
|
261
|
+
"catalogModelId": "openai/o1-pro",
|
|
262
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"target": "openrouter",
|
|
266
|
+
"modelId": "openai/o3",
|
|
267
|
+
"catalogModelId": "openai/o3",
|
|
268
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"target": "openrouter",
|
|
272
|
+
"modelId": "openai/o3-mini",
|
|
273
|
+
"catalogModelId": "openai/o3-mini",
|
|
274
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"target": "openrouter",
|
|
278
|
+
"modelId": "openai/o3-pro",
|
|
279
|
+
"catalogModelId": "openai/o3-pro",
|
|
280
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"target": "openrouter",
|
|
284
|
+
"modelId": "openai/o4-mini",
|
|
285
|
+
"catalogModelId": "openai/o4-mini",
|
|
286
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"target": "openrouter",
|
|
290
|
+
"modelId": "openrouter/bodybuilder",
|
|
291
|
+
"catalogModelId": "openrouter/bodybuilder",
|
|
292
|
+
"reason": "OpenRouter router ids omit ModelReasoning for routing, not as a verified non-reasoning model."
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"target": "openrouter",
|
|
296
|
+
"modelId": "openrouter/free",
|
|
297
|
+
"catalogModelId": "openrouter/free",
|
|
298
|
+
"reason": "OpenRouter router ids omit ModelReasoning for routing, not as a verified non-reasoning model."
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"target": "openrouter",
|
|
302
|
+
"modelId": "openrouter/fusion",
|
|
303
|
+
"catalogModelId": "openrouter/fusion",
|
|
304
|
+
"reason": "OpenRouter router ids omit ModelReasoning for routing, not as a verified non-reasoning model."
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"target": "openrouter",
|
|
308
|
+
"modelId": "openrouter/pareto-code",
|
|
309
|
+
"catalogModelId": "openrouter/pareto-code",
|
|
310
|
+
"reason": "OpenRouter router ids omit ModelReasoning for routing, not as a verified non-reasoning model."
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"target": "openrouter",
|
|
314
|
+
"modelId": "perceptron/perceptron-mk1",
|
|
315
|
+
"catalogModelId": "perceptron/perceptron-mk1",
|
|
316
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"target": "openrouter",
|
|
320
|
+
"modelId": "perplexity/sonar-deep-research",
|
|
321
|
+
"catalogModelId": "perplexity/sonar-deep-research",
|
|
322
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"target": "openrouter",
|
|
326
|
+
"modelId": "perplexity/sonar-reasoning-pro",
|
|
327
|
+
"catalogModelId": "perplexity/sonar-reasoning-pro",
|
|
328
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"target": "openrouter",
|
|
332
|
+
"modelId": "qwen/qwen3-14b",
|
|
333
|
+
"catalogModelId": "qwen/qwen3-14b",
|
|
334
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"target": "openrouter",
|
|
338
|
+
"modelId": "qwen/qwen3-235b-a22b",
|
|
339
|
+
"catalogModelId": "qwen/qwen3-235b-a22b",
|
|
340
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"target": "openrouter",
|
|
344
|
+
"modelId": "qwen/qwen3-32b",
|
|
345
|
+
"catalogModelId": "qwen/qwen3-32b",
|
|
346
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"target": "openrouter",
|
|
350
|
+
"modelId": "qwen/qwen3-max-thinking",
|
|
351
|
+
"catalogModelId": "qwen/qwen3-max-thinking",
|
|
352
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"target": "openrouter",
|
|
356
|
+
"modelId": "qwen/qwen3.5-122b-a10b",
|
|
357
|
+
"catalogModelId": "qwen/qwen3.5-122b-a10b",
|
|
358
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"target": "openrouter",
|
|
362
|
+
"modelId": "qwen/qwen3.5-27b",
|
|
363
|
+
"catalogModelId": "qwen/qwen3.5-27b",
|
|
364
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
"target": "openrouter",
|
|
368
|
+
"modelId": "qwen/qwen3.5-35b-a3b",
|
|
369
|
+
"catalogModelId": "qwen/qwen3.5-35b-a3b",
|
|
370
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"target": "openrouter",
|
|
374
|
+
"modelId": "qwen/qwen3.5-397b-a17b",
|
|
375
|
+
"catalogModelId": "qwen/qwen3.5-397b-a17b",
|
|
376
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
"target": "openrouter",
|
|
380
|
+
"modelId": "qwen/qwen3.5-9b",
|
|
381
|
+
"catalogModelId": "qwen/qwen3.5-9b",
|
|
382
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
"target": "openrouter",
|
|
386
|
+
"modelId": "qwen/qwen3.5-flash-02-23",
|
|
387
|
+
"catalogModelId": "qwen/qwen3.5-flash-02-23",
|
|
388
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
"target": "openrouter",
|
|
392
|
+
"modelId": "qwen/qwen3.5-plus-02-15",
|
|
393
|
+
"catalogModelId": "qwen/qwen3.5-plus-02-15",
|
|
394
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
"target": "openrouter",
|
|
398
|
+
"modelId": "qwen/qwen3.5-plus-20260420",
|
|
399
|
+
"catalogModelId": "qwen/qwen3.5-plus-20260420",
|
|
400
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
"target": "openrouter",
|
|
404
|
+
"modelId": "qwen/qwen3.6-flash",
|
|
405
|
+
"catalogModelId": "qwen/qwen3.6-flash",
|
|
406
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"target": "openrouter",
|
|
410
|
+
"modelId": "qwen/qwen3.6-plus",
|
|
411
|
+
"catalogModelId": "qwen/qwen3.6-plus",
|
|
412
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"target": "openrouter",
|
|
416
|
+
"modelId": "qwen/qwen3.7-flash",
|
|
417
|
+
"catalogModelId": "qwen/qwen3.7-flash",
|
|
418
|
+
"reason": "Model accepts reasoning.max_tokens and has no effort allowlist. No per-model token budgets are documented, so no budget directive is emitted."
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"target": "openrouter",
|
|
422
|
+
"modelId": "qwen/qwen3.8-flash",
|
|
423
|
+
"catalogModelId": "qwen/qwen3.8-flash",
|
|
424
|
+
"reason": "Model accepts reasoning.max_tokens and has no effort allowlist. No per-model token budgets are documented, so no budget directive is emitted."
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"target": "openrouter",
|
|
428
|
+
"modelId": "qwen/qwen3.8-omni-flash",
|
|
429
|
+
"catalogModelId": "qwen/qwen3.8-omni-flash",
|
|
430
|
+
"reason": "Model accepts reasoning.max_tokens and has no effort allowlist. No per-model token budgets are documented, so no budget directive is emitted."
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
"target": "openrouter",
|
|
434
|
+
"modelId": "tencent/hunyuan-a13b-instruct",
|
|
435
|
+
"catalogModelId": "tencent/hunyuan-a13b-instruct",
|
|
436
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"target": "openrouter",
|
|
440
|
+
"modelId": "xiaomi/mimo-v2.5",
|
|
441
|
+
"catalogModelId": "xiaomi/mimo-v2.5",
|
|
442
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
"target": "openrouter",
|
|
446
|
+
"modelId": "xiaomi/mimo-v2.5-pro",
|
|
447
|
+
"catalogModelId": "xiaomi/mimo-v2.5-pro",
|
|
448
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"target": "openrouter",
|
|
452
|
+
"modelId": "xiaomi/mimo-v2.6-flash",
|
|
453
|
+
"catalogModelId": "xiaomi/mimo-v2.6-flash",
|
|
454
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
"target": "openrouter",
|
|
458
|
+
"modelId": "xiaomi/mimo-v2.6-pro",
|
|
459
|
+
"catalogModelId": "xiaomi/mimo-v2.6-pro",
|
|
460
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
"target": "openrouter",
|
|
464
|
+
"modelId": "xiaomi/mimo-v2.6-pro-ultraspeed",
|
|
465
|
+
"catalogModelId": "xiaomi/mimo-v2.6-pro-ultraspeed",
|
|
466
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
"target": "openrouter",
|
|
470
|
+
"modelId": "z-ai/glm-4.5",
|
|
471
|
+
"catalogModelId": "z-ai/glm-4.5",
|
|
472
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
"target": "openrouter",
|
|
476
|
+
"modelId": "z-ai/glm-4.5-air",
|
|
477
|
+
"catalogModelId": "z-ai/glm-4.5-air",
|
|
478
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
"target": "openrouter",
|
|
482
|
+
"modelId": "z-ai/glm-4.5v",
|
|
483
|
+
"catalogModelId": "z-ai/glm-4.5v",
|
|
484
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
"target": "openrouter",
|
|
488
|
+
"modelId": "z-ai/glm-4.6",
|
|
489
|
+
"catalogModelId": "z-ai/glm-4.6",
|
|
490
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
"target": "openrouter",
|
|
494
|
+
"modelId": "z-ai/glm-4.6v",
|
|
495
|
+
"catalogModelId": "z-ai/glm-4.6v",
|
|
496
|
+
"reason": "capabilities.reasoning is true but the models API sent no reasoning control object."
|
|
497
|
+
}
|
|
498
|
+
]
|
|
499
|
+
}
|