mirror of
https://github.com/dograh-hq/dograh.git
synced 2026-06-07 07:55:16 +02:00
* feat: add MiniMax provider support (Chat + TTS) - Add MiniMax LLM provider using OpenAI-compatible API - Models: MiniMax-M2.7, MiniMax-M2.7-highspeed - Default base URL: https://api.minimax.io/v1 - Uses MINIMAX_API_KEY for authentication - Add MiniMax TTS provider using Pipecat's MiniMaxHttpTTSService - Models: speech-2.8-hd (default), speech-2.8-turbo - 6 built-in voices - Requires group_id configuration - Add unit tests for both providers * fix(minimax): validator, temperature, session cleanup, reasoning filter - check_validity.py: wire MiniMax into _validator_map and enforce group_id at save time. Without this, saving a config with a valid key was rejected. - registry.py: surface temperature on the LLM config (gt=0; MiniMax rejects 0) and base_url on the TTS config - service_factory.py: * Plumb temperature through create_llm_service * Normalize TTS base_url to include /t2a_v2 — pipecat appends only ?GroupId=... to the URL. * Use the new MiniMaxLLMService (from pipecat) to strip <think>...</think> reasoning that MiniMax-M2.7 emits inline in delta.content (otherwise it leaks straight to TTS). * Use MiniMaxOwnedSessionTTSService so the per-instance aiohttp session gets closed in cleanup() instead of leaking sockets/FDs. - minimax_tts.py: small wrapper around MiniMaxHttpTTSService that owns the session it was handed (pipecat's caller-owns-session API conflicts with the ftory's per-instance pattern). - pipecat submodule: bumps to a commit that adds MiniMaxLLMService — a thin OpenAILLMService subclass with the streaming <think> filter (mirrors NvidiaLLMService's pattern for NIM reasoning models). - Tests updated/added for all of the above. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: octo-patch <octo-patch@github.com> Co-authored-by: Sabiha Khan <sabihak89@gmail.com>
23 lines
847 B
Python
23 lines
847 B
Python
"""MiniMax TTS wrapper that closes its aiohttp session in cleanup().
|
|
|
|
Pipecat's MiniMaxHttpTTSService leaves session disposal to the caller. Our
|
|
factory creates a fresh session per service instance, so we own its close
|
|
here to avoid leaking sockets/FDs on shutdown.
|
|
"""
|
|
|
|
import aiohttp
|
|
|
|
from pipecat.services.minimax.tts import MiniMaxHttpTTSService
|
|
|
|
|
|
class MiniMaxOwnedSessionTTSService(MiniMaxHttpTTSService):
|
|
"""MiniMaxHttpTTSService variant that owns its aiohttp session lifecycle."""
|
|
|
|
def __init__(self, *args, aiohttp_session: aiohttp.ClientSession, **kwargs):
|
|
super().__init__(*args, aiohttp_session=aiohttp_session, **kwargs)
|
|
self._owned_session = aiohttp_session
|
|
|
|
async def cleanup(self):
|
|
await super().cleanup()
|
|
if not self._owned_session.closed:
|
|
await self._owned_session.close()
|