Skip to content

feat(ai-components): add VoiceGlow and VoiceWave voice-agent visualizations (V10) - #3896

Merged
oliverlaz merged 1 commit into
V10from
feat/ai-voice-visualizations-v10
Oct 28, 2026
Merged

oliverlaz merged 1 commit into
V10from
feat/ai-voice-visualizations-v10

Conversation

@oliverlaz

Copy link
Copy Markdown
Member

Ticket: https://linear.app/stream/issue/RN-468

🎯 Goal

Port of #3895 (the develop counterpart) to V10: the VoiceWave and VoiceGlow voice-agent visualizations in stream-chat-react-native/ai-components (and stream-chat-expo/ai-components), the useDictationAudioLevel hook, and the voice mode in ExpoChatGPTSample. Android, iOS and web already ship these visualizations in their AI components.

πŸ›  Implementation details

Everything under package/ is identical to #3895 (both of its commits, 0f07f0366 and 38a224a65, squashed into one), and applied to V10 without changes. See #3895 for the full description. In short:

  • VoiceWave and VoiceGlow: one motion driver ported from Android, run as Reanimated worklets on the UI thread; the glow is Android's AGSL shader ported to Skia SkSL, the wave a Skia path. Props: state, colors, expressivity, audioLevel (SharedValue<number | null>) and stateLabels, plus View props.
  • useDictationAudioLevel(), backed by a new AIDictationOnLevel event in package/shared-native/{android,ios}; useDictationState and useDictationTranscript are now exported.
  • An optional voiceVisualization theme key (colors, backdropColor).
  • A source option on useDictation, so ComposerView only fills its input from its own mic button.
  • Fix: iOS dictation restores the AVAudioSession it found when dictation ends.

What differs from #3895 on V10 (all in examples/ExpoChatGPTSample):

  • screens/ChatContent.tsx: V10 already moved channel creation and startAI/summarize from preSendMessageRequest into the client's sendMessageRequest handler in app/_layout.tsx, so the port only adds VoiceMode and useSendAIMessage there and drops the imports it no longer needs.
  • components/VoiceMode/useVoiceConversation.ts: stream-chat v10 has no channel.state.latestMessages, so the voice mode reads channel.messagePaginator.items; and custom data lives under custom, so it checks message.custom?.ai_generated.
  • hooks/useSendAIMessage.ts: the doc comment names the sendMessageRequest handler instead of preSendMessageRequest.

Docs: the v10-rc AI integration pages are updated in GetStream/getstream.io#810, together with v9.

🎨 UI Changes

Same UI as #3895; see its recordings.

πŸ§ͺ Testing

  • yarn lint (including validate-entry-isolation), cd package && yarn test:typecheck, yarn typecheck, yarn build and yarn test:unit (246 suites, 2302 tests) pass on this branch. shared-native:sync was run.
  • The unit tests are the same as on feat(ai-components): add VoiceGlow and VoiceWave voice-agent visualizationsΒ #3895 (driver, bounce, palette, geometry, rendering, accessibility, theme fallbacks, reduced motion, dictation level).
  • Not yet tested on a device on V10: the voice mode's switch to messagePaginator.items is type-checked only. Dictation needs a physical device (iOS 27 simulators can't initialize the speech recognizer).

β˜‘οΈ Checklist

…ations

Port of #3895 to V10. The ExpoChatGPTSample voice mode reads replies from
channel.messagePaginator.items and message.custom.ai_generated (stream-chat v10).
@oliverlaz
oliverlaz requested a review from isekovanic October 27, 2026 14:13
@Stream-SDK-Bot

Copy link
Copy Markdown
Contributor

SDK Size

title develop branch diff status
js_bundle_size 2036 KB 2018 KB -18022 B πŸš€
ai_components_size 130 KB 163 KB +33387 B πŸ”΄

@oliverlaz
oliverlaz merged commit 841e115 into V10 Oct 28, 2026
2 checks passed
@oliverlaz
oliverlaz deleted the feat/ai-voice-visualizations-v10 branch October 28, 2026 08:09
@github-actions github-actions Bot mentioned this pull request Nov 6, 2026
6 tasks
@stream-ci-bot

Copy link
Copy Markdown
Contributor

πŸŽ‰ This PR is included in version 10.0.0 πŸŽ‰

The release is available on:

Your semantic-release bot πŸ“¦πŸš€

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants