{"record":{"id":"5f7da1205ffe41a3","repo":"continuedev/continue","slug":"unsupported-part-type-input-audio-5f7da1","errorCode":null,"errorMessage":"Unsupported part type: input_audio","messagePattern":"Unsupported part type: input_audio","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/openai-adapters/src/apis/Gemini.ts","lineNumber":101,"sourceCode":"    );\n  }\n\n  private _oaiPartToGeminiPart(\n    part:\n      | OpenAI.Chat.Completions.ChatCompletionContentPart\n      | OpenAI.Chat.Completions.ChatCompletionContentPartRefusal,\n  ): GeminiChatContentPart {\n    switch (part.type) {\n      case \"refusal\":\n        return {\n          text: part.refusal,\n        };\n      case \"text\":\n        return {\n          text: part.text,\n        };\n      case \"input_audio\":\n        throw new Error(\"Unsupported part type: input_audio\");\n      case \"image_url\":\n      default:\n        return {\n          inlineData: {\n            mimeType: \"image/jpeg\",\n            data: (part as ChatCompletionContentPartImage).image_url?.url.split(\n              \",\",\n            )[1],\n          },\n        };\n    }\n  }\n\n  public _convertBody(\n    oaiBody: ChatCompletionCreateParams,\n    isV1API: boolean,\n    includeToolCallIds: boolean,\n  ) {","sourceCodeStart":83,"sourceCodeEnd":119,"githubUrl":"https://github.com/continuedev/continue/blob/5522c6f44ca0ac3528b37244818fbfa39b5af470/packages/openai-adapters/src/apis/Gemini.ts#L83-L119","documentation":"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.","triggerScenarios":"Sending a chat message whose content includes {type: 'input_audio', input_audio: {...}} to the Gemini adapter.","commonSituations":"Porting OpenAI voice/audio chat code to Gemini; multimodal pipelines that attach audio clips via input_audio and route to a Gemini model.","solutions":["Remove or transcribe input_audio parts before sending to Gemini.","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).","Convert audio to Gemini's native inlineData/fileData format yourself if the adapter allows raw parts."],"exampleFix":"// before\ncontent: [{ type: 'input_audio', input_audio: { data: b64, format: 'wav' } }]\n// after\ncontent: [{ type: 'text', text: await transcribeToText(b64) }]","handlingStrategy":"validation","validationCode":"const parts = msg.content.filter((p: any) => p.type !== 'input_audio');","typeGuard":"const isGeminiSafePart = (p: any): boolean => p.type === 'text' || p.type === 'image_url';","tryCatchPattern":"catch (e) { if (e.message.includes('input_audio')) return stripAudioAndRetry(); throw e; }","preventionTips":["Transcribe audio before sending to Gemini.","Feature-detect multimodal support per provider/model."],"tags":["gemini","multimodal","audio","unsupported-feature"],"backgroundTag":"unsupported-content-type","analyzedSha":"5522c6f44ca0ac3528b37244818fbfa39b5af470","analyzedAt":"2026-08-27T11:28:54.683Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}