generate-models: use reasoning options from models.dev (#6928)
* generate-models: use reasoning options from models.dev * fix tests
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
import type { ThinkingLevel, ThinkingLevelMap } from "../src/types.ts";
|
||||
|
||||
export type ModelsDevReasoningOption =
|
||||
| { type: "toggle" }
|
||||
| {
|
||||
type: "effort";
|
||||
values: Array<"none" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max" | "default" | null>;
|
||||
}
|
||||
| { type: "budget_tokens"; min?: number; max?: number };
|
||||
|
||||
const THINKING_LEVELS: readonly ThinkingLevel[] = ["minimal", "low", "medium", "high", "xhigh", "max"];
|
||||
|
||||
/**
|
||||
* Converts models.dev verified effort values into Pi's selectable thinking levels.
|
||||
* Values without a Pi equivalent (`default` and JSON `null`) are intentionally
|
||||
* omitted.
|
||||
*/
|
||||
export function getEffortThinkingLevelMap(options: readonly ModelsDevReasoningOption[]): ThinkingLevelMap | undefined {
|
||||
const effortValues = options.flatMap((option) => (option.type === "effort" ? option.values : []));
|
||||
if (effortValues.length === 0) return undefined;
|
||||
|
||||
const supported = new Set(effortValues);
|
||||
if (!THINKING_LEVELS.some((level) => supported.has(level)) && !supported.has("none")) return undefined;
|
||||
|
||||
const map: ThinkingLevelMap = { off: supported.has("none") ? "none" : null };
|
||||
for (const level of THINKING_LEVELS) {
|
||||
map[level] = supported.has(level) ? level : null;
|
||||
}
|
||||
return map;
|
||||
}
|
||||
Reference in New Issue
Block a user