mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-15 07:04:45 +00:00
add support for gpt-5.4
This commit is contained in:
parent
7aed39063b
commit
8a6384a925
4 changed files with 47 additions and 5 deletions
|
|
@ -677,8 +677,17 @@ async function generateModels() {
|
||||||
) {
|
) {
|
||||||
candidate.contextWindow = 200000;
|
candidate.contextWindow = 200000;
|
||||||
}
|
}
|
||||||
|
if ((candidate.provider === "opencode" || candidate.provider === "opencode-go") && candidate.id === "gpt-5.4") {
|
||||||
|
candidate.contextWindow = 272000;
|
||||||
|
candidate.maxTokens = 128000;
|
||||||
|
}
|
||||||
|
if (candidate.provider === "openai" && candidate.id === "gpt-5.4") {
|
||||||
|
candidate.contextWindow = 272000;
|
||||||
|
candidate.maxTokens = 128000;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Add missing EU Opus 4.6 profile
|
// Add missing EU Opus 4.6 profile
|
||||||
if (!allModels.some((m) => m.provider === "amazon-bedrock" && m.id === "eu.anthropic.claude-opus-4-6-v1")) {
|
if (!allModels.some((m) => m.provider === "amazon-bedrock" && m.id === "eu.anthropic.claude-opus-4-6-v1")) {
|
||||||
allModels.push({
|
allModels.push({
|
||||||
|
|
@ -858,6 +867,26 @@ async function generateModels() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!allModels.some((m) => m.provider === "openai" && m.id === "gpt-5.4")) {
|
||||||
|
allModels.push({
|
||||||
|
id: "gpt-5.4",
|
||||||
|
name: "GPT-5.4",
|
||||||
|
api: "openai-responses",
|
||||||
|
baseUrl: "https://api.openai.com/v1",
|
||||||
|
provider: "openai",
|
||||||
|
reasoning: true,
|
||||||
|
input: ["text", "image"],
|
||||||
|
cost: {
|
||||||
|
input: 2.5,
|
||||||
|
output: 15,
|
||||||
|
cacheRead: 0.25,
|
||||||
|
cacheWrite: 0,
|
||||||
|
},
|
||||||
|
contextWindow: 272000,
|
||||||
|
maxTokens: 128000,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// OpenAI Codex (ChatGPT OAuth) models
|
// OpenAI Codex (ChatGPT OAuth) models
|
||||||
// NOTE: These are not fetched from models.dev; we keep a small, explicit list to avoid aliases.
|
// NOTE: These are not fetched from models.dev; we keep a small, explicit list to avoid aliases.
|
||||||
// Context window is based on observed server limits (400s above ~272k), not marketing numbers.
|
// Context window is based on observed server limits (400s above ~272k), not marketing numbers.
|
||||||
|
|
@ -937,6 +966,18 @@ async function generateModels() {
|
||||||
contextWindow: CODEX_CONTEXT,
|
contextWindow: CODEX_CONTEXT,
|
||||||
maxTokens: CODEX_MAX_TOKENS,
|
maxTokens: CODEX_MAX_TOKENS,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: "gpt-5.4",
|
||||||
|
name: "GPT-5.4",
|
||||||
|
api: "openai-codex-responses",
|
||||||
|
provider: "openai-codex",
|
||||||
|
baseUrl: CODEX_BASE_URL,
|
||||||
|
reasoning: true,
|
||||||
|
input: ["text", "image"],
|
||||||
|
cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 },
|
||||||
|
contextWindow: CODEX_CONTEXT,
|
||||||
|
maxTokens: CODEX_MAX_TOKENS,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: "gpt-5.3-codex-spark",
|
id: "gpt-5.3-codex-spark",
|
||||||
name: "GPT-5.3 Codex Spark",
|
name: "GPT-5.3 Codex Spark",
|
||||||
|
|
|
||||||
|
|
@ -49,11 +49,11 @@ export function calculateCost<TApi extends Api>(model: Model<TApi>, usage: Usage
|
||||||
* Check if a model supports xhigh thinking level.
|
* Check if a model supports xhigh thinking level.
|
||||||
*
|
*
|
||||||
* Supported today:
|
* Supported today:
|
||||||
* - GPT-5.2 / GPT-5.3 model families
|
* - GPT-5.2 / GPT-5.3 / GPT-5.4 model families
|
||||||
* - Anthropic Messages API Opus 4.6 models (xhigh maps to adaptive effort "max")
|
* - Anthropic Messages API Opus 4.6 models (xhigh maps to adaptive effort "max")
|
||||||
*/
|
*/
|
||||||
export function supportsXhigh<TApi extends Api>(model: Model<TApi>): boolean {
|
export function supportsXhigh<TApi extends Api>(model: Model<TApi>): boolean {
|
||||||
if (model.id.includes("gpt-5.2") || model.id.includes("gpt-5.3")) {
|
if (model.id.includes("gpt-5.2") || model.id.includes("gpt-5.3") || model.id.includes("gpt-5.4")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -324,7 +324,8 @@ function buildRequestBody(
|
||||||
|
|
||||||
function clampReasoningEffort(modelId: string, effort: string): string {
|
function clampReasoningEffort(modelId: string, effort: string): string {
|
||||||
const id = modelId.includes("/") ? modelId.split("/").pop()! : modelId;
|
const id = modelId.includes("/") ? modelId.split("/").pop()! : modelId;
|
||||||
if ((id.startsWith("gpt-5.2") || id.startsWith("gpt-5.3")) && effort === "minimal") return "low";
|
if ((id.startsWith("gpt-5.2") || id.startsWith("gpt-5.3") || id.startsWith("gpt-5.4")) && effort === "minimal")
|
||||||
|
return "low";
|
||||||
if (id === "gpt-5.1" && effort === "xhigh") return "high";
|
if (id === "gpt-5.1" && effort === "xhigh") return "high";
|
||||||
if (id === "gpt-5.1-codex-mini") return effort === "high" || effort === "xhigh" ? "high" : "medium";
|
if (id === "gpt-5.1-codex-mini") return effort === "high" || effort === "xhigh" ? "high" : "medium";
|
||||||
return effort;
|
return effort;
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,9 @@ import type { ModelRegistry } from "./model-registry.js";
|
||||||
export const defaultModelPerProvider: Record<KnownProvider, string> = {
|
export const defaultModelPerProvider: Record<KnownProvider, string> = {
|
||||||
"amazon-bedrock": "us.anthropic.claude-opus-4-6-v1",
|
"amazon-bedrock": "us.anthropic.claude-opus-4-6-v1",
|
||||||
anthropic: "claude-opus-4-6",
|
anthropic: "claude-opus-4-6",
|
||||||
openai: "gpt-5.1-codex",
|
openai: "gpt-5.4",
|
||||||
"azure-openai-responses": "gpt-5.2",
|
"azure-openai-responses": "gpt-5.2",
|
||||||
"openai-codex": "gpt-5.3-codex",
|
"openai-codex": "gpt-5.4",
|
||||||
google: "gemini-2.5-pro",
|
google: "gemini-2.5-pro",
|
||||||
"google-gemini-cli": "gemini-2.5-pro",
|
"google-gemini-cli": "gemini-2.5-pro",
|
||||||
"google-antigravity": "gemini-3.1-pro-high",
|
"google-antigravity": "gemini-3.1-pro-high",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue