Skip to content

feat: add optional jev thinking-mode voice router - #2343

Closed
JianYan121 wants to merge 1 commit into
TEN-framework:mainfrom
JianYan121:feat/jev-thinking-router
Closed

JianYan121 wants to merge 1 commit into
TEN-framework:mainfrom
JianYan121:feat/jev-thinking-router

Conversation

@JianYan121

Copy link
Copy Markdown
Contributor

Summary

  • Add a TypeSafe Jev decision extension with choice, score, and noul support, cancellation, and stable error responses.
  • Add an opt-in voice assistant graph that routes DeepSeek Flash between non-thinking and high-effort thinking modes without tools; leave the default graph unchanged.
  • Show the Jev route and completed DeepSeek reasoning separately in chat, while keeping reasoning out of TTS output.
  • Add placeholder environment settings and regression tests.

Verification

  • 40 related Python tests passed.
  • Python formatting and diff checks passed.
  • Frontend TypeScript type check passed in the development container.
  • Optional graph startup smoke check passed.

Voice end-to-end audio playback remains unverified because the configured TTS account had previously exhausted its quota.

@JianYan11

Copy link
Copy Markdown
Contributor

Superseded by #2344, submitted from JianYan11.

1 similar comment
@JianYan121

Copy link
Copy Markdown
Contributor Author

Superseded by #2344, submitted from JianYan11.

@JianYan121 JianYan121 closed this Sep 27, 2026
@github-actions

Copy link
Copy Markdown

[P1] Do not send DeepSeek thinking parameters to the existing OpenAI graphs (ai_agents/agents/examples/voice-assistant/tenapp/ten_packages/extension/main_python/agent/llm_exec.py:195)

_send_to_llm() adds parameters.extra_body.thinking on every request, including when model_routing.enabled is false. The default voice_assistant graph (and the other non-Jev graphs) still targets the OpenAI Chat Completions endpoint. openai_llm2_python/openai.py forwards extra_body to chat.completions.create(), so the API receives a vendor-specific thinking field even for ordinary OpenAI requests. That field is not part of the OpenAI Chat Completions create schema, and these previously working requests can fail instead of producing speech. Only set extra_body.thinking and reasoning_effort for the Jev/DeepSeek route; retain the prior temperature-only parameters when routing is disabled. The new test currently asserts the incompatible disabled-routing payload, so please update it as well.

ASR checklist

  • Lifecycle: N/A (Deepgram extension unchanged).
  • Connection state: N/A.
  • Buffering: N/A for audio; controller segment accumulation is bounded by speech_final under normal endpointing.
  • Finalize: N/A (asr_finalize path unchanged).
  • Reconnect: N/A.
  • Result shape: pass (reads metadata.asr_info.speech_final and does not submit an empty turn).
  • Metrics: N/A.
  • Tests: pass for mocked speech_final sequences; live ASR-to-reply behavior remains unverified in the PR.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants