You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Reason: Add executable voice cloning for the configured MiniMax backend.
Summary
Add a voice_clone tool that uploads MP3, M4A, or WAV source audio and creates a reusable voice.
Support global and China endpoints, optional prompt audio, transcript validation, normalization, noise reduction, preview text, and watermark controls.
Inherit the configured MiniMax provider key and register the tool only when its media configuration is enabled.
Parse upload and clone API status responses and return the created voice identifier.
Type
Fix
Feature
Docs
CI / tooling
Refactor
Other
Verification
uv run --frozen pytest -q -p no:everos_plugin tests/test_media_gen_voice_clone_minimax.py (4 passed)
uv run --frozen pytest -q -p no:everos_plugin tests/test_config_raven_sections.py (20 passed)
uv run --frozen ruff format --check raven/agent/tools/media_gen.py raven/agent/loop/main.py raven/config/schema.py tests/test_media_gen_voice_clone_minimax.py
Nice addition. One thing worth settling before this lands: voice_clone
introduces a fourth shape for "is this tool configured", and the two places that
answer it disagree.
effective_media_config counts the tool as configured on api_key or api_base or model, but registration in agent/loop/main.py still
gates the whole media family on api_key or model. So an install that sets only tools.media.voice_clone.apiBase and has no providers.minimax key:
effective_media_config says configured: True
registration rule says: False
api_key after the borrow: ''
The tool is declared configured, never registered, and nothing says why.
Reproduced against this branch.
Either rule is defensible; they just need to be the same one. If api_base
alone is not meant to switch it on, dropping it from the voice_clone_configured
test makes the two agree. If it is, registration needs to learn the rule.
Heads-up on the interaction with #312, which adds a table describing exactly
these rules plus a raven doctor section that reports them. Its coverage test
derives the gated tools from the schema, so whichever of the two lands second
turns that assertion red on purpose:
gated but undeclared: ['voice_clone']
The fix is one entry in raven/agent/tools/capabilities.py -- but it needs the
rule above settled first, since the entry has to state which one is true. Happy
to add it on my side once you decide, or to leave it to you if this merges first.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reason: Add executable voice cloning for the configured MiniMax backend.
Summary
voice_clonetool that uploads MP3, M4A, or WAV source audio and creates a reusable voice.Type
Verification
uv run --frozen pytest -q -p no:everos_plugin tests/test_media_gen_voice_clone_minimax.py(4 passed)uv run --frozen pytest -q -p no:everos_plugin tests/test_config_raven_sections.py(20 passed)uv run --frozen ruff format --check raven/agent/tools/media_gen.py raven/agent/loop/main.py raven/config/schema.py tests/test_media_gen_voice_clone_minimax.pyuv run --frozen ruff check --ignore I001 raven/agent/tools/media_gen.py raven/agent/loop/main.py raven/config/schema.py tests/test_media_gen_voice_clone_minimax.pyuv run --frozen python -m py_compile raven/agent/tools/media_gen.py raven/agent/loop/main.py raven/config/schema.py tests/test_media_gen_voice_clone_minimax.pygit diff origin/main...HEAD --checkRelevant tests pass locally
Relevant lint / type checks pass locally
User-facing docs or screenshots are updated when needed
Risk
The tool is opt-in and preserves existing media behavior. Rollback consists of removing the tool registration and its configuration field.
Related Issues
N/A