封装minmax语音克隆接口

This commit is contained in:
gexianmeng 2025-05-23 17:34:53 +08:00
parent 8a3404dc2e
commit a4c4ee1f5b
4 changed files with 43 additions and 6 deletions

View File

@ -4,8 +4,9 @@ import sentry_sdk
from sentry_sdk.integrations.loguru import LoguruIntegration, LoggingLevels
from sentry_sdk.integrations.fastapi import FastApiIntegration
from fastapi.middleware.cors import CORSMiddleware
from .utils.KVCache import KVCache
from .router import ffmpeg, cache, comfyui
from .router import ffmpeg, cache, comfyui, text2speech
from .config import WorkerConfig
config = WorkerConfig()
@ -82,3 +83,4 @@ async def scalar():
web_app.include_router(ffmpeg.router)
web_app.include_router(cache.router)
web_app.include_router(comfyui.router)
web_app.include_router(text2speech.router) # 添加文本转语音路由

View File

@ -19,4 +19,39 @@ class WorkerConfig(BaseSettings):
comfyui_s3_input: Optional[str] = Field(default="comfyui-input", description="ComfyUI input S3文件夹名")
comfyui_s3_output: Optional[str] = Field(default="comfyui-output", description="ComfyUI output S3文件夹名")
modal_config: Any = SettingsConfigDict()
# MiniMax API 配置
# BaseSettings 会自动从环境变量 MINIMAX_GROUP_ID 读取值
minimax_group_id: str = Field(
default="",
description="MiniMax API 组ID"
)
# BaseSettings 会自动从环境变量 MINIMAX_API_KEY 读取值
minimax_api_key: str = Field(
default="",
description="MiniMax API 密钥"
)
# 语音克隆相关配置
voice_clone_max_file_size: int = Field(
default=20 * 1024 * 1024, # 20MB
description="语音克隆最大文件大小限制"
)
voice_clone_allowed_formats: list = Field(
default=[".mp3", ".wav", ".m4a", ".aac", ".ogg"],
description="语音克隆支持的音频格式"
)
voice_clone_output_dir: str = Field(
default="voice_clone/minmax",
description="语音克隆输出目录相对于S3挂载目录"
)
model_config = SettingsConfigDict(
# 自动从环境变量加载,大小写不敏感
case_sensitive=False,
# 支持从 .env 文件加载(如果存在)
env_file=".env",
env_file_encoding="utf-8"
)

View File

@ -10,8 +10,8 @@ config = WorkerConfig()
app = modal.App(config.modal_app_name,
include_source=False,
secrets=[modal.Secret.from_name("cf-kv-secret",
environment_name=config.modal_environment)])
secrets=[modal.Secret.from_name("cf-kv-secret", environment_name=config.modal_environment),
modal.Secret.from_name("minimax-api", environment_name=config.modal_environment)])
app.include(media_app)
app.include(ffmpeg_app)

View File

@ -24,12 +24,12 @@ with fastapi_image.imports():
@app.function(scaledown_window=60,
secrets=[
modal.Secret.from_name("cf-kv-secret", environment_name='dev'),
modal.Secret.from_name("minimax-api", environment_name=config.modal_environment)
],
volumes={
config.S3_mount_dir: modal.CloudBucketMount(
bucket_name=config.S3_bucket_name,
secret=modal.Secret.from_name("aws-s3-secret",
environment_name=config.modal_environment),
secret=modal.Secret.from_name("aws-s3-secret", environment_name=config.modal_environment),
),
},
)