feat(google_meet): document gpt-realtime-2 support - #22700
Conversation
Pin the realtime-handshake test to assert the model identifier flows through the WebSocket URL for both `gpt-realtime` (existing default) and `gpt-realtime-2` (the GPT-5-class voice model OpenAI shipped on 2026-05-07 alongside the Realtime API GA). Document `HERMES_MEET_REALTIME_MODEL` in the plugin README, SKILL.md, and the website's built-in-plugins page so users discover the new model and the pinned snapshot `gpt-realtime-2025-08-28`. Defaults stay at `gpt-realtime`; opt in via env var.
CI statusAll blocking checks green: Two non-blocking jobs failed on the run, both unrelated to this change. Capturing here so a reviewer does not have to retrace.
I reproduced two of these (
The PR itself is docs-and-test-only:
No production code path changed; defaults stay at |
teknium1
left a comment
There was a problem hiding this comment.
Thanks for documenting an already-supported realtime-model path. Current main reads HERMES_MEET_REALTIME_MODEL in plugins/google_meet/meet_bot.py:456 and interpolates the supplied value into the Realtime WebSocket URL at plugins/google_meet/realtime/openai_client.py:80; the discoverability update is therefore grounded in the current implementation.
Problems
tests/plugins/test_google_meet_realtime.py:86parameterizes the transport test with a fixed provider-model list. This is a change-detector test: the behavior being protected is arbitrary model pass-through, not continued membership of particular OpenAI model names. The repository rubric specifically calls for behavior contracts instead of model-list snapshots (AGENTS.md:80-83).
Suggested changes
- Use a single arbitrary sentinel identifier and assert that the exact supplied identifier becomes the
modelquery parameter. Keep the named identifiers in documentation rather than making them a test catalog.
Automated hermes-sweeper review.
| @@ -86,23 +86,24 @@ def _connect(url, **kwargs): | |||
| # --------------------------------------------------------------------------- | |||
There was a problem hiding this comment.
Please make this a model-agnostic pass-through contract rather than a fixed provider-model catalog. A single arbitrary sentinel identifier, asserted as the URL model query value, protects the behavior without creating a change-detector test when OpenAI changes its identifiers.
What does this PR do?
Documents
gpt-realtime-2(OpenAI's GPT-5-class voice reasoning model, shipped 2026-05-07 alongside the Realtime API GA) as a first-class supported identifier for thegoogle_meetplugin's realtime mode, and pins the contract via a parametrized handshake test.The
HERMES_MEET_REALTIME_MODELenv var already accepts any string and flows directly into the OpenAI Realtime WebSocket URL. The missing pieces were discoverability (no docs mentionedgpt-realtime-2exists) and contract pinning (no test asserted the model name flows verbatim into the URL). This PR closes both gaps without touching production code or changing defaults.Defaults stay at
gpt-realtime. Users opt into the new model by settingHERMES_MEET_REALTIME_MODEL=gpt-realtime-2(or the dated snapshotgpt-realtime-2025-08-28for pinned behavior). Identifiers were verified against the canonical OpenAI SDKs (openai-python,openai-node,openai-go,openai-ruby,openai-java,openai-dotnet,openai-cookbook,openai-agents-python,openai-agents-js).Related Issue
Fixes #22699
Type of Change
Changes Made
plugins/google_meet/README.md: add### Configuring the OpenAI Realtime modelsubsection under## Realtime modewith two tables (env vars + supported identifiers) and an example invocation.plugins/google_meet/SKILL.md: add a one-line note in the body under## Two modesreferencingHERMES_MEET_REALTIME_MODELand the new alias so the agent system prompt advertises the capability.website/docs/user-guide/features/built-in-plugins.md: add a**Realtime mode (optional):**subsection in the### google_meetsection mirroring the existing Langfuse env-var table style, listing the same identifiers.tests/plugins/test_google_meet_realtime.py: parametrize the existing handshake test over["gpt-realtime", "gpt-realtime-2"]. Reuses the_FakeWS+_install_fake_websocketspattern; no live API calls.How to Test
scripts/run_tests.sh tests/plugins/test_google_meet_realtime.py -vshould report 10/10 passed including both parametrized cases.plugins/google_meet/README.mdandwebsite/docs/user-guide/features/built-in-plugins.mdshould appear under the realtime/google_meet sections respectively.OPENAI_API_KEYandHERMES_MEET_REALTIME_MODEL=gpt-realtime-2, then exercisehermes meet join <test-url> --mode realtimeto confirm the live handshake accepts the model identifier. Not required; covered structurally by the parametrized test plus the OpenAI SDK source verification.Checklist
Code
feat(google_meet): ...)gpt-realtime-2ingh pr list --search)Documentation & Housekeeping
plugins/google_meet/README.md,plugins/google_meet/SKILL.md,website/docs/user-guide/features/built-in-plugins.md)cli-config.yaml.example(this plugin's env vars live in plugin docs, not the top-level example)CONTRIBUTING.md/AGENTS.md(no architecture or workflow changes)