Add speech-to-text support via Gemini audio understanding
>>> [!note] Migrated issue <!-- Drupal.org comment --> <!-- Migrated from issue #3572955. --> Reported by: [jibla](https://www.drupal.org/user/1013184) Related to !29 >>> <p>[Tracker]<br> <strong>Update Summary: </strong>New - audio transcription via Gemini multimodal<br> <strong>Check-in Date: </strong>02/11/2026<br> <strong>Additional Collaborators: </strong><br> <em>Metadata is used by the <a href="https://www.drupalstarforge.ai/" title="AI Tracker">AI Tracker.</a> Docs and additional fields <a href="https://www.drupalstarforge.ai/ai-dashboard/docs" title="AI Issue Tracker Documentation">here</a>.</em><br> [/Tracker]</p> <h3 id="summary-problem-motivation">Problem/Motivation</h3> <p>Gemini can transcribe audio files (WAV, MP3, AIFF, AAC, OGG, FLAC) up to 9.5 hours via its multimodal <code>generateContent</code> endpoint. Audio is sent as a Blob or uploaded via the Files API, with a transcription prompt. The PHP library supports audio input via Blob with audio MIME types.</p> <p>The OpenAI provider already implements <code>SpeechToTextInterface</code> (via Whisper). We should reach parity.</p> <h3 id="summary-proposed-resolution">Proposed resolution</h3> <ul> <li>Implement <code>SpeechToTextInterface</code> in GeminiProvider</li> <li>Add <code>speech_to_text</code> to <code>getSupportedOperationTypes()</code></li> <li>Accept <code>SpeechToTextInput</code> (<code>AudioFile</code> binary data), convert to Gemini Blob with appropriate audio MIME type</li> <li>Send via <code>generateContent</code> with a transcription system prompt</li> <li>Return text response as <code>SpeechToTextOutput</code></li> <li>Add STT configuration to <code>definitions/api_defaults.yml</code></li> <li>Add model filtering in <code>getConfiguredModels()</code> for STT-capable models</li> <li>Update <code>ai_provider_info.yml</code> with <code>speech_to_text</code></li> <li>Add tests</li> </ul> <p><strong>Note:</strong> This uses Gemini's multimodal understanding rather than a dedicated STT endpoint. The approach differs from OpenAI's Whisper (dedicated transcription model) but achieves the same result.</p> <p><strong>References:</strong></p> <ul> <li><a href="https://ai.google.dev/gemini-api/docs/audio">Gemini audio understanding documentation</a></li> </ul> <h3 id="summary-remaining-tasks">Target date or deadline</h3> <p>Before stable release.</p> <h3 id="summary-remaining-tasks">Remaining tasks</h3> <ul> <li>Implement <code>SpeechToTextInterface</code></li> <li>Handle audio file MIME type detection</li> <li>Design transcription prompt (or make it configurable)</li> <li>Add model filtering for speech_to_text operation type</li> <li>Write tests</li> <li>phpcs clean</li> </ul> <h3 id="summary-ai-usage">AI usage (if applicable)</h3> <p>[x] AI Assisted Issue<br> This issue was generated with AI assistance, but was reviewed and refined by the creator.</p> <p>[ ] AI Assisted Code</p> <p>[ ] AI Generated Code</p> <p>[ ] Vibe Coded</p> > Related issue: [Issue #3572958](https://www.drupal.org/node/3572958)
issue