MCPcopy Create free account
hub / github.com/Zoo-Code-Org/Zoo-Code / handleO3FamilyMessage

Method handleO3FamilyMessage

src/api/providers/openai.ts:333–433  ·  view source on GitHub ↗
(
		modelId: string,
		systemPrompt: string,
		messages: Anthropic.Messages.MessageParam[],
		metadata?: ApiHandlerCreateMessageMetadata,
	)

Source from the content-addressed store, hash-verified

331 }
332
333 private async *handleO3FamilyMessage(
334 modelId: string,
335 systemPrompt: string,
336 messages: Anthropic.Messages.MessageParam[],
337 metadata?: ApiHandlerCreateMessageMetadata,
338 ): ApiStream {
339 const modelInfo = this.getModel().info
340 const methodIsAzureAiInference = this._isAzureAiInference(this.options.openAiBaseUrl)
341
342 if (this.options.openAiStreamingEnabled ?? true) {
343 const isGrokXAI = this._isGrokXAI(this.options.openAiBaseUrl)
344
345 const requestOptions: OpenAI.Chat.Completions.ChatCompletionCreateParamsStreaming = {
346 model: modelId,
347 messages: [
348 {
349 role: "developer",
350 content: `Formatting re-enabled\n${systemPrompt}`,
351 },
352 ...convertToOpenAiMessages(messages),
353 ],
354 stream: true,
355 ...(isGrokXAI ? {} : { stream_options: { include_usage: true } }),
356 reasoning_effort: modelInfo.reasoningEffort as "low" | "medium" | "high" | undefined,
357 temperature: undefined,
358 // Tools are always present (minimum ALWAYS_AVAILABLE_TOOLS)
359 tools: this.convertToolsForOpenAI(metadata?.tools),
360 tool_choice: metadata?.tool_choice,
361 parallel_tool_calls: metadata?.parallelToolCalls ?? true,
362 }
363
364 // O3 family models do not support the deprecated max_tokens parameter
365 // but they do support max_completion_tokens (the modern OpenAI parameter)
366 // This allows O3 models to limit response length when includeMaxTokens is enabled
367 this.addMaxTokensIfNeeded(requestOptions, modelInfo)
368
369 let stream
370 try {
371 stream = await this.client.chat.completions.create(
372 requestOptions,
373 methodIsAzureAiInference ? { path: OPENAI_AZURE_AI_INFERENCE_PATH } : {},
374 )
375 } catch (error) {
376 throw handleOpenAIError(error, this.providerName)
377 }
378
379 yield* this.handleStreamResponse(stream)
380 } else {
381 const requestOptions: OpenAI.Chat.Completions.ChatCompletionCreateParamsNonStreaming = {
382 model: modelId,
383 messages: [
384 {
385 role: "developer",
386 content: `Formatting re-enabled\n${systemPrompt}`,
387 },
388 ...convertToOpenAiMessages(messages),
389 ],
390 reasoning_effort: modelInfo.reasoningEffort as "low" | "medium" | "high" | undefined,

Callers 1

createMessageMethod · 0.95

Calls 9

getModelMethod · 0.95
_isAzureAiInferenceMethod · 0.95
_isGrokXAIMethod · 0.95
addMaxTokensIfNeededMethod · 0.95
handleStreamResponseMethod · 0.95
processUsageMetricsMethod · 0.95
convertToOpenAiMessagesFunction · 0.90
handleOpenAIErrorFunction · 0.90
createMethod · 0.45

Tested by

no test coverage detected