continuedev/continue · error · Error

Unsupported part type: input_audio

Error message

Unsupported part type: input_audio

What it means

The Gemini adapter's message converter explicitly rejects OpenAI-style input_audio content parts — Gemini's inline media conversion only handles text and image_url, and audio is not mapped.

Source

Thrown at packages/openai-adapters/src/apis/Gemini.ts:101

    );
  }

  private _oaiPartToGeminiPart(
    part:
      | OpenAI.Chat.Completions.ChatCompletionContentPart
      | OpenAI.Chat.Completions.ChatCompletionContentPartRefusal,
  ): GeminiChatContentPart {
    switch (part.type) {
      case "refusal":
        return {
          text: part.refusal,
        };
      case "text":
        return {
          text: part.text,
        };
      case "input_audio":
        throw new Error("Unsupported part type: input_audio");
      case "image_url":
      default:
        return {
          inlineData: {
            mimeType: "image/jpeg",
            data: (part as ChatCompletionContentPartImage).image_url?.url.split(
              ",",
            )[1],
          },
        };
    }
  }

  public _convertBody(
    oaiBody: ChatCompletionCreateParams,
    isV1API: boolean,
    includeToolCallIds: boolean,
  ) {

View on GitHub (pinned to 5522c6f44c)

Solutions

  1. Remove or transcribe input_audio parts before sending to Gemini.
  2. If audio support exists in the adapter version, upgrade; otherwise use a provider that accepts input_audio (OpenAI, or Gemini native file API with inlineData).
  3. Convert audio to Gemini's native inlineData/fileData format yourself if the adapter allows raw parts.

Example fix

// before
content: [{ type: 'input_audio', input_audio: { data: b64, format: 'wav' } }]
// after
content: [{ type: 'text', text: await transcribeToText(b64) }]
Defensive patterns

Strategy: validation

Validate before calling

const parts = msg.content.filter((p: any) => p.type !== 'input_audio');

Type guard

const isGeminiSafePart = (p: any): boolean => p.type === 'text' || p.type === 'image_url';

Try / catch

catch (e) { if (e.message.includes('input_audio')) return stripAudioAndRetry(); throw e; }

Prevention

When it happens

Trigger: Sending a chat message whose content includes {type: 'input_audio', input_audio: {...}} to the Gemini adapter.

Common situations: Porting OpenAI voice/audio chat code to Gemini; multimodal pipelines that attach audio clips via input_audio and route to a Gemini model.

Related errors


AI-assisted analysis of continuedev/continue@5522c6f44c (2026-08-27). Data as JSON: /api/errors/5f7da1205ffe41a3. Report an issue: GitHub.