mirror of
https://github.com/Nezumi-2711/9router.git
synced 2026-09-22 20:00:47 +00:00
- Pass system prompt via native systemInstruction field (+ <instructions> fallback) so Claude models stop treating it as info-only <system-reminder> - Add Opus 4.5/4.7/4.8 (base/thinking/agentic/thinking+agentic) to Kiro registry - normalizeModelId(): dash->dot version separator, scoped to Kiro provider only - Replace <system-reminder> with <instructions> in claude-to-openai/openai-to-kiro Co-authored-by: Cursor <cursoragent@cursor.com>
41 lines
1.5 KiB
JavaScript
41 lines
1.5 KiB
JavaScript
import { deriveModelName } from "./namePatterns.js";
|
|
|
|
// Normalize version separators in a model id: hyphen between two digits becomes a dot.
|
|
// Registry ids use dots for versions ("claude-sonnet-4.5") but clients (CLIs, aliases)
|
|
// often send them with dashes ("claude-sonnet-4-5"). Only digit-digit hyphens are
|
|
// touched, so word/suffix hyphens stay intact ("-thinking", "-agentic", "qwen3-coder-next").
|
|
export function normalizeModelId(modelId) {
|
|
if (typeof modelId !== "string") return modelId;
|
|
return modelId.replace(/(\d)-(\d)/g, "$1.$2");
|
|
}
|
|
|
|
// Model defaults centralized (was scattered as `m.kind || "llm"`, `quotaFamily || "normal"`, etc.)
|
|
export const MODEL_DEFAULTS = {
|
|
kind: "llm",
|
|
quotaFamily: "normal",
|
|
strip: [],
|
|
targetFormat: null
|
|
};
|
|
|
|
// Normalize a registry model entry: accept terse "id" string, fill name via regex when omitted.
|
|
// Override always wins (raw spread last); name falls back to regex → id.
|
|
export function normalizeModel(raw) {
|
|
const model = typeof raw === "string" ? { id: raw } : raw;
|
|
if (model.name !== undefined) return model;
|
|
return { ...model, name: deriveModelName(model.id) };
|
|
}
|
|
|
|
// Resolve model kind with default (accepts legacy `type` field)
|
|
export function modelKind(model) {
|
|
return model?.kind || model?.type || MODEL_DEFAULTS.kind;
|
|
}
|
|
export function modelQuotaFamily(model) {
|
|
return model?.quotaFamily || MODEL_DEFAULTS.quotaFamily;
|
|
}
|
|
export function modelStrip(model) {
|
|
return model?.strip || [];
|
|
}
|
|
export function modelTargetFormat(model) {
|
|
return model?.targetFormat || MODEL_DEFAULTS.targetFormat;
|
|
}
|