From 7265f74c24f0556032f114a4d4a5487ca555478b Mon Sep 17 00:00:00 2001 From: Peter Goldstein <peter.goldstein@hearst.com> Date: Fri, 7 Feb 2025 00:01:48 -0500 Subject: [PATCH] Add reasoning_effort for o1 and o3 (#1628) --- .changeset/itchy-dots-warn.md | 5 +++++ packages/providers/openai/src/llm.ts | 12 ++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 .changeset/itchy-dots-warn.md diff --git a/.changeset/itchy-dots-warn.md b/.changeset/itchy-dots-warn.md new file mode 100644 index 000000000..3dfab5b74 --- /dev/null +++ b/.changeset/itchy-dots-warn.md @@ -0,0 +1,5 @@ +--- +"@llamaindex/openai": patch +--- + +Add reasoning_effort for o1 and o3 models diff --git a/packages/providers/openai/src/llm.ts b/packages/providers/openai/src/llm.ts index 926d478d1..081edde96 100644 --- a/packages/providers/openai/src/llm.ts +++ b/packages/providers/openai/src/llm.ts @@ -140,6 +140,12 @@ export function isFunctionCallingModel(llm: LLM): llm is OpenAI { return isChatModel && !isOld && !isO1; } +export function isReasoningModel(model: ChatModel | string): boolean { + const isO1 = model.startsWith("o1"); + const isO3 = model.startsWith("o3"); + return isO1 || isO3; +} + export function isTemperatureSupported(model: ChatModel | string): boolean { return !model.startsWith("o3"); } @@ -152,6 +158,7 @@ export type OpenAIAdditionalChatOptions = Omit< | "messages" | "model" | "temperature" + | "reasoning_effort" | "top_p" | "stream" | "tools" @@ -166,6 +173,7 @@ export class OpenAI extends ToolCallLLM<OpenAIAdditionalChatOptions> { // string & {} is a hack to allow any string, but still give autocomplete | (string & {}); temperature: number; + reasoningEffort?: "low" | "medium" | "high" | undefined; topP: number; maxTokens?: number | undefined; additionalChatOptions?: OpenAIAdditionalChatOptions | undefined; @@ -197,6 +205,9 @@ export class OpenAI extends ToolCallLLM<OpenAIAdditionalChatOptions> { super(); this.model = init?.model ?? "gpt-4o"; this.temperature = init?.temperature ?? 0.1; + this.reasoningEffort = isReasoningModel(this.model) + ? init?.reasoningEffort + : undefined; this.topP = init?.topP ?? 1; this.maxTokens = init?.maxTokens ?? undefined; @@ -354,6 +365,7 @@ export class OpenAI extends ToolCallLLM<OpenAIAdditionalChatOptions> { const baseRequestParams = <OpenAILLM.Chat.ChatCompletionCreateParams>{ model: this.model, temperature: isTemperatureSupported(this.model) ? this.temperature : null, + reasoning_effort: this.reasoningEffort, max_tokens: this.maxTokens, tools: tools?.map(OpenAI.toTool), messages: OpenAI.toOpenAIMessage(messages), -- GitLab