feat(config): add model compatibility configuration and schema for OpenRouter routing preferences

This commit is contained in:
Matthijs Hoekstra 2026-01-29 13:42:55 +01:00
parent 87b1c2bfb7
commit 56ccee35a0
3 changed files with 39 additions and 0 deletions

View File

@ -16,6 +16,21 @@ export type AgentModelEntryConfig = {
alias?: string; alias?: string;
/** Provider-specific API parameters (e.g., GLM-4.7 thinking mode). */ /** Provider-specific API parameters (e.g., GLM-4.7 thinking mode). */
params?: Record<string, unknown>; params?: Record<string, unknown>;
/** Model compatibility overrides (e.g., OpenRouter routing preferences). */
compat?: ModelCompatEntryConfig;
};
export type ModelCompatEntryConfig = {
supportsStore?: boolean;
supportsDeveloperRole?: boolean;
supportsReasoningEffort?: boolean;
maxTokensField?: "max_completion_tokens" | "max_tokens";
openRouterRouting?: OpenRouterRoutingConfig;
};
export type OpenRouterRoutingConfig = {
only?: string[];
order?: string[];
}; };
export type AgentModelListConfig = { export type AgentModelListConfig = {

View File

@ -37,6 +37,24 @@ export const AgentDefaultsSchema = z
alias: z.string().optional(), alias: z.string().optional(),
/** Provider-specific API parameters (e.g., GLM-4.7 thinking mode). */ /** Provider-specific API parameters (e.g., GLM-4.7 thinking mode). */
params: z.record(z.string(), z.unknown()).optional(), params: z.record(z.string(), z.unknown()).optional(),
/** Model compatibility overrides (e.g., OpenRouter routing preferences). */
compat: z
.object({
supportsStore: z.boolean().optional(),
supportsDeveloperRole: z.boolean().optional(),
supportsReasoningEffort: z.boolean().optional(),
maxTokensField: z
.union([z.literal("max_completion_tokens"), z.literal("max_tokens")])
.optional(),
openRouterRouting: z
.object({
only: z.array(z.string()).optional(),
order: z.array(z.string()).optional(),
})
.optional(),
})
.strict()
.optional(),
}) })
.strict(), .strict(),
) )

View File

@ -19,6 +19,12 @@ export const ModelCompatSchema = z
maxTokensField: z maxTokensField: z
.union([z.literal("max_completion_tokens"), z.literal("max_tokens")]) .union([z.literal("max_completion_tokens"), z.literal("max_tokens")])
.optional(), .optional(),
openRouterRouting: z
.object({
only: z.array(z.string()).optional(),
order: z.array(z.string()).optional(),
})
.optional(),
}) })
.strict() .strict()
.optional(); .optional();