Skip to content

feat(google_meet): document gpt-realtime-2 support - #22700

Open
GodsBoy wants to merge 1 commit into
NousResearch:mainfrom
GodsBoy:feat/google-meet-gpt-realtime-2
Open

feat(google_meet): document gpt-realtime-2 support#22700
GodsBoy wants to merge 1 commit into
NousResearch:mainfrom
GodsBoy:feat/google-meet-gpt-realtime-2

Conversation

@GodsBoy

@GodsBoy GodsBoy commented May 9, 2026

Copy link
Copy Markdown
Contributor

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 the google_meet plugin's realtime mode, and pins the contract via a parametrized handshake test.

The HERMES_MEET_REALTIME_MODEL env var already accepts any string and flows directly into the OpenAI Realtime WebSocket URL. The missing pieces were discoverability (no docs mentioned gpt-realtime-2 exists) 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 setting HERMES_MEET_REALTIME_MODEL=gpt-realtime-2 (or the dated snapshot gpt-realtime-2025-08-28 for 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

  • ✨ New feature (non-breaking change that adds functionality)
  • 📝 Documentation update

Changes Made

  • plugins/google_meet/README.md: add ### Configuring the OpenAI Realtime model subsection under ## Realtime mode with 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 modes referencing HERMES_MEET_REALTIME_MODEL and 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_meet section 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_websockets pattern; no live API calls.

How to Test

  1. scripts/run_tests.sh tests/plugins/test_google_meet_realtime.py -v should report 10/10 passed including both parametrized cases.
  2. Render the docs locally: the new content tables in plugins/google_meet/README.md and website/docs/user-guide/features/built-in-plugins.md should appear under the realtime/google_meet sections respectively.
  3. (Optional, requires a real OpenAI key) Set OPENAI_API_KEY and HERMES_MEET_REALTIME_MODEL=gpt-realtime-2, then exercise hermes meet join <test-url> --mode realtime to confirm the live handshake accepts the model identifier. Not required; covered structurally by the parametrized test plus the OpenAI SDK source verification.

Checklist

Code

  • I've read the Contributing Guide
  • My commit messages follow Conventional Commits (feat(google_meet): ...)
  • I searched for existing PRs to make sure this isn't a duplicate (none found for gpt-realtime-2 in gh pr list --search)
  • My PR contains only changes related to this feature (no unrelated commits)
  • I've run the test suite and all tests pass (10/10 in the changed file)
  • I've added tests for my changes (parametrized handshake test pins the contract)
  • I've tested on my platform: Linux 6.8 (Ubuntu)

Documentation & Housekeeping

  • I've updated relevant documentation (plugins/google_meet/README.md, plugins/google_meet/SKILL.md, website/docs/user-guide/features/built-in-plugins.md)
  • N/A: cli-config.yaml.example (this plugin's env vars live in plugin docs, not the top-level example)
  • N/A: CONTRIBUTING.md / AGENTS.md (no architecture or workflow changes)
  • N/A: cross-platform impact (docs + test only; no platform-specific code)
  • N/A: tool descriptions/schemas (no tool behavior change)

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.
@GodsBoy

GodsBoy commented May 9, 2026

Copy link
Copy Markdown
Contributor Author

CI status

All blocking checks green: check-attribution, Supply Chain Audit, ruff enforcement (blocking), Windows footguns (blocking), Docs Site Checks, build-amd64, build-arm64, nix (ubuntu-latest), nix (macos-latest), and e2e.

Two non-blocking jobs failed on the run, both unrelated to this change. Capturing here so a reviewer does not have to retrace.

test (Tests workflow): seven failures, all in test files this PR does not touch:

  • tests/gateway/test_sms.py::TestStartupGuard::test_insecure_flag_does_not_set_fatal_error
  • tests/gateway/test_base_topic_sessions.py::TestBasePlatformTopicSessions::test_process_message_background_replies_in_same_topic
  • tests/gateway/test_restart_drain.py::test_restart_command_while_busy_requests_drain_without_interrupt
  • tests/gateway/test_tts_media_routing.py (3 tests)
  • tests/hermes_cli/test_tencent_tokenhub_provider.py::TestTencentTokenhubContextLength::test_hy3_preview_context_length

I reproduced two of these (test_hy3_preview_context_length, test_process_message_background_replies_in_same_topic) against the merge-base (origin/main at f1f42a7b9) in a fresh worktree with no changes from this branch and they fail identically. The Tencent test is a constant mismatch (assert 262144 == 256000); the base-topic-sessions test appears to be aligned with the routing fix in #22053 which has not landed yet. The remaining gateway failures are in gateway/sms, gateway/restart_drain, and gateway/tts_media_routing, none of which this PR touches. The single test file this PR modifies, tests/plugins/test_google_meet_realtime.py, passes 10/10 locally and is not in the CI failure list.

ruff + ty diff (Lint workflow): failed on the Post / update PR comment step with RequestError [HttpError]: Resource not accessible by integration. This is a known GitHub permission limitation when a workflow run from a fork PR tries to post a sticky lint-summary comment. The actual lint check, ruff enforcement (blocking), ran in the same workflow and passed. The diff-comment step is convenience output; no source-level lint issue was found.

The PR itself is docs-and-test-only:

  • 3 documentation files (plugins/google_meet/README.md, plugins/google_meet/SKILL.md, website/docs/user-guide/features/built-in-plugins.md)
  • 1 test parametrize (tests/plugins/test_google_meet_realtime.py)

No production code path changed; defaults stay at gpt-realtime. Happy to rebase or take any feedback.

@alt-glitch alt-glitch added type/docs Documentation improvements P3 Low — cosmetic, nice to have comp/plugins Plugin system and bundled plugins labels May 9, 2026

@teknium1 teknium1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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:86 parameterizes 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 model query 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):
# ---------------------------------------------------------------------------

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@teknium1 teknium1 added the sweeper:blast-contained Sweeper blast radius: contained — one narrow path / opt-in / few users label Jul 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/plugins Plugin system and bundled plugins P3 Low — cosmetic, nice to have sweeper:blast-contained Sweeper blast radius: contained — one narrow path / opt-in / few users type/docs Documentation improvements

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Document gpt-realtime-2 as a supported OpenAI Realtime model in google_meet plugin

3 participants