Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions core/llm/llms/OpenAI.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ describe("OpenAI", () => {
expect(openai.isOSeriesOrGpt5PlusModel("gpt-5.4-pro")).toBeTruthy();
expect(openai.isOSeriesOrGpt5PlusModel("gpt-6")).toBeTruthy();
expect(openai.isOSeriesOrGpt5PlusModel("gpt-7-turbo")).toBeTruthy();

// case-insensitive matching (e.g. Azure deployments named in upper case)
expect(openai.isOSeriesOrGpt5PlusModel("GPT-5")).toBeTruthy();
expect(openai.isOSeriesOrGpt5PlusModel("GPT-5-mini")).toBeTruthy();
expect(openai.isOSeriesOrGpt5PlusModel("Gpt-5.4")).toBeTruthy();
expect(openai.isOSeriesOrGpt5PlusModel("O1")).toBeTruthy();
expect(openai.isOSeriesOrGpt5PlusModel("O3-mini")).toBeTruthy();
});
test("should identify incorrect o-series models", () => {
const openai = new OpenAI({
Expand Down
5 changes: 4 additions & 1 deletion core/llm/llms/OpenAI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,10 @@ class OpenAI extends BaseLLM {
}

public isOSeriesOrGpt5PlusModel(model?: string): boolean {
return !!model && (!!model.match(/^o[0-9]+/) || !!model.match(/gpt-[5-9]/));
return (
!!model &&
(!!model.match(/^o[0-9]+/i) || !!model.match(/gpt-[5-9]/i))
);
}

private isFireworksAiModel(model?: string): boolean {
Expand Down
5 changes: 3 additions & 2 deletions packages/openai-adapters/src/apis/OpenAI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ export class OpenAIApi implements BaseLlmApi {
// o-series models - only apply for official OpenAI API
const isOfficialOpenAIAPI = this.apiBase === "https://api.openai.com/v1/";
if (isOfficialOpenAIAPI) {
if (body.model.startsWith("o") || body.model.includes("gpt-5")) {
const modelLower = body.model.toLowerCase();
if (modelLower.startsWith("o") || modelLower.includes("gpt-5")) {
// a) use max_completion_tokens instead of max_tokens
body.max_completion_tokens = body.max_tokens;
body.max_tokens = undefined;
Expand All @@ -80,7 +81,7 @@ export class OpenAIApi implements BaseLlmApi {
return message;
});
}
if (body.tools?.length && !body.model.startsWith("o3")) {
if (body.tools?.length && !modelLower.startsWith("o3")) {
body.parallel_tool_calls = false;
}
}
Expand Down
Loading