SunsetDiff

Function tools with reasoning_effort are not supported for gpt-6-luna

A Chat Completions request that sends function tools to gpt-6-luna fails unless reasoning_effort is none. The model page says to use the Responses API for function calling.

Error text

Function tools with reasoning_effort are not supported for gpt-6-luna in /v1/chat/completions

The GPT-6 Luna model page says: use the Responses API for built-in tools and function calling. Chat Completions supports function calling only with reasoning_effort set to none. The same page lists fine-tuning (v1/fine-tuning) as not supported. Source: GPT-6 Luna model page, checked October 20, 2026.

Affected models

Models named on the official page for this failure.
Model idWhat the source says
gpt-6-luna Function calling on Chat Completions works only with reasoning_effort set to none. The Responses API is the documented path for function calling.

Fix

Raw SDK

For function tools, call the Responses API. To stay on Chat Completions, set reasoning_effort to none. The model page says that is the only Chat Completions function-calling mode for gpt-6-luna. The Responses tool object matches OpenAI's function calling guide: https://developers.openai.com/api/docs/guides/function-calling

Responses API (Python)

from openai import OpenAI
client = OpenAI()
response = client.responses.create(
    model="gpt-6-luna",
    input=[{"role": "user", "content": "Hello"}],
    tools=[{
        "type": "function",
        "name": "get_weather",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    }],
)

Chat Completions, reasoning_effort none (Python)

from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
    model="gpt-6-luna",
    messages=[{"role": "user", "content": "Hello"}],
    reasoning_effort="none",
    tools=[{
        "type": "function",
        "function": {
            "name": "get_weather",
            "parameters": {
                "type": "object",
                "properties": {"city": {"type": "string"}},
                "required": ["city"],
            },
        },
    }],
)

Source: GPT-6 Luna model page, checked October 20, 2026.

LiteLLM

LiteLLM documents model openai/responses/gpt-6-luna for the Responses API. Use that when the call includes function tools. On a Chat Completions model string, set reasoning_effort to none, which is the only function-calling mode the OpenAI model page allows on that endpoint.

Responses API

import litellm
response = litellm.completion(
    model="openai/responses/gpt-6-luna",
    messages=[{"role": "user", "content": "Hello"}],
    tools=[{
        "type": "function",
        "function": {
            "name": "get_weather",
            "parameters": {
                "type": "object",
                "properties": {"city": {"type": "string"}},
                "required": ["city"],
            },
        },
    }],
)

Chat Completions

import litellm
response = litellm.completion(
    model="openai/gpt-6-luna",
    messages=[{"role": "user", "content": "Hello"}],
    reasoning_effort="none",
    tools=[{
        "type": "function",
        "function": {
            "name": "get_weather",
            "parameters": {
                "type": "object",
                "properties": {"city": {"type": "string"}},
                "required": ["city"],
            },
        },
    }],
)

Source: LiteLLM OpenAI provider, checked October 20, 2026.

Vercel AI SDK

openai('gpt-6-luna') uses the Responses API. The AI SDK guide says to use the Responses API for GPT-6 tool calling. openai.chat() stays on Chat Completions, so set providerOptions.openai.reasoningEffort to none when that call includes tools.

Responses API

import { openai } from "@ai-sdk/openai";
import { generateText, tool } from "ai";
import { z } from "zod";

const result = await generateText({
  model: openai("gpt-6-luna"),
  prompt: "What is the weather in Paris?",
  tools: {
    get_weather: tool({
      description: "Get the weather for a city.",
      inputSchema: z.object({ city: z.string() }),
    }),
  },
});

Chat Completions

import { openai, type OpenAILanguageModelChatOptions } from "@ai-sdk/openai";
import { generateText, tool } from "ai";
import { z } from "zod";

const result = await generateText({
  model: openai.chat("gpt-6-luna"),
  prompt: "What is the weather in Paris?",
  tools: {
    get_weather: tool({
      description: "Get the weather for a city.",
      inputSchema: z.object({ city: z.string() }),
    }),
  },
  providerOptions: {
    openai: {
      reasoningEffort: "none",
    } satisfies OpenAILanguageModelChatOptions,
  },
});

Source: AI SDK OpenAI guide, checked October 20, 2026.

Switch guides

More request errors

All request errors

Questions

Which model returns this 400?

gpt-6-luna, on POST /v1/chat/completions, when the request includes function tools and reasoning_effort is not none. The model page lists Chat Completions as supported for other calls.

Can gpt-6-luna be fine-tuned?

No. The GPT-6 Luna model page lists the fine-tuning endpoint as not supported.

Deprecation alerts

We email you before models shut down. Unsubscribe anytime.

Deprecation alert signup
Providers (optional)