小鱼开发
|
2d9538c324
|
fix(docker): Dockerfile 复制 alembic.ini 和 alembic/ 目录到镜像
api 服务启动命令包含 alembic upgrade head,
需要在镜像中包含 alembic 配置文件和迁移脚本。
|
2026-05-08 13:51:08 +08:00 |
|
小鱼开发
|
f1a4e34ac7
|
feat(docker): 测试环境 compose 添加自动迁移 + healthcheck
- api 服务启动时自动执行 alembic upgrade head,再启动 uvicorn
- api 添加 healthcheck(/health 端点检查)
- scheduler 添加 healthcheck(导入检查)
|
2026-05-08 13:43:15 +08:00 |
|
小鱼开发
|
eeb5b0bd47
|
chore: 升级 FastAPI 0.135.3 → 0.136.1
同时更新 requirements.lock 中相关依赖:
- starlette 1.0.0
- urllib3 2.7.0
- volcengine-python-sdk 5.0.25 → 5.0.26
注:auth.py 中 Request 参数保持 Request = None 写法,
因为 FastAPI 不支持 Request | None 作为注入参数类型注解
(FastAPI 用 lenient_issubclass 检查,Union 类型无法通过)。
|
2026-05-08 12:10:29 +08:00 |
|
小鱼开发
|
43bbb4ea22
|
fix: FastAPI Request 参数类型回退,修复 Docker 启动失败
FastAPI 0.135.3 无法正确识别 Request | None Union 类型作为注入参数,
回退为 Request = None(运行时 FastAPI 会自动注入 Request 对象)。
|
2026-05-08 11:34:47 +08:00 |
|
小鱼开发
|
b597d715c8
|
fix: 认证流程修复 + alembic 迁移补全 + 前端僵尸代码清理
后端:
- 修复 get_current_user 未校验 is_active,被封禁用户仍可用旧 Token
- auth.py 捕获 ValueError 转 HTTPException(验证码错误、账号被封、Token 无效等不再返回 500)
- 修正 SMS 每日上限注释(3次 → 10次)
- 修复迁移脚本外键引用错误:users.id → mjk_users.id
- 新建积分系统 4 张表的迁移(mjk_user_points/batches/transactions/recharge_orders)
- pyproject.toml 补充 alembic + psycopg2-binary 依赖
- ruff 格式修复(import 排序等)
前端:
- 修复 doRefreshToken 成功后不持久化新 Token 的严重 bug
- 修复应用重启后 SSE 不自动重连(收不到踢人通知)
- 修复 App.tsx handleLogout 未 await
- client.ts 统一从 utils/env 导入 isTauri,默认 base URL 兜底 localhost:8000
- 清理 ~20 个未使用的 hooks/utils/api 模块/组件导出
- 修复所有 ESLint 警告(206 → 0)和 TSC 错误
- 测试通过(5/5)
其他:
- 更新 requirements.lock 和 uv.lock
|
2026-05-08 11:10:48 +08:00 |
|
小鱼开发
|
5080f992d9
|
feat(auth): SMS 日限 10 次 + 前端 send-code 联调后端 API
|
2026-05-07 21:10:05 +08:00 |
|
小鱼开发
|
51521fc0dd
|
feat(payment): 微信支付 APIv2 + 积分充值 + SMS 短信 + 双 Token 认证
- 微信支付从 APIv3 降级为 APIv2(MD5/XML)
- 积分系统:充值下单、微信回调、消费冻结/结算/退款
- SMS B2M 短信验证码服务
- 双 Token 认证(Access 30min + Refresh 30days)
- SSE 单设备踢人
- 用户设备管理、积分账户模型
- Alembic 迁移脚本
|
2026-05-07 18:43:02 +08:00 |
|
小鱼开发
|
755ecc9abe
|
refactor(config): 统一配置体系,禁用热重载,清理兼容层
- 删除 .gitlab-ci.yml
- 删除 runtime_config.py 兼容层
- Pydantic Settings + YAML 三层配置分离
- 统一 PlatformConfigLoader 加载器
- docker-compose 移除重复 environment 覆盖
- volcengine base_url 从 YAML 读取
- 微信支付/SMS 空值启动时拦截
- 日志仅输出控制台,不写文件
- 更新 model_router 注释
|
2026-05-07 18:42:47 +08:00 |
|
小鱼开发
|
c45cb02385
|
fix: 七牛云 SDK 同步 I/O 阻塞事件循环
- QiniuService 新增 async 包装方法(upload_stream_async 等)
- upload.py / voice.py 上传路由改为 await async 版本
- voice.py 改用 get_qiniu_service() 单例
|
2026-05-06 22:56:23 +08:00 |
|
小鱼开发
|
e7dcb017c6
|
chore: update prompt files
|
2026-05-06 21:33:11 +08:00 |
|
小鱼开发
|
bd2f7b9afe
|
feat: title 与 topic 解耦 + 草稿列表支持重命名项目
title/topic 职责分离:
- topic: 创作主题分类标签
- title: 用户自定义项目名称,独立保存
数据层:
- buildTitle 不再截断,优先保留已有 title
- MetaOverrides 允许覆盖 title
- projectStore 新增 setTitle action
- VideoCreation 加载时恢复 title
UI:
- 草稿列表项 hover 显示编辑按钮,点击可重命名
- 直接修改 meta.json,无需进入项目
后端:
- script_handler 返回中文分类名称作为 title
|
2026-05-06 14:03:15 +08:00 |
|
小鱼开发
|
c79b2323f4
|
refactor: 删除脚本生成未使用的 duration/style/scriptType/scriptDuration 参数
前端:
- 删除 scriptType 字段及相关 store action、持久化、API 类型
- 删除 scriptDuration 字段及相关 store action、持久化、加载逻辑
- ScriptCreation 不再传 duration/style 参数给后端
后端:
- ScriptParams 删除 duration/style 字段
- ScriptHandler 删除 duration/style 参数读取和传递
- ScriptService.generate_script 签名删除 duration/script_type
- load_script_user_prompt 删除 duration 参数
影响:无,duration/style 在 prompt 模板中未被实际使用
|
2026-05-06 13:30:40 +08:00 |
|
小鱼开发
|
a0562a21e3
|
fix: 补全 Method.CLONE_VOICE 常量
|
2026-05-06 11:14:20 +08:00 |
|
小鱼开发
|
8f8256ddfb
|
fix: 声音克隆暴露原始错误 + 脚本生成去掉中间进度提示
- voice.py: 异常处理不再吞掉原始错误,直接暴露具体原因
- vidu_service.py: clone_voice 错误消息包含 Vidu 返回的 error_message
- ScriptCreation.tsx: 去掉一闪而过的'任务已创建,等待执行...'中间状态
|
2026-05-06 11:04:26 +08:00 |
|
小鱼开发
|
3ed37b6c27
|
fix(adapter): Vidu 状态映射补全 created/queueing,错误字段改为 err_code
- 文档中 state 包含 created/queueing,原映射表缺失导致 normalize_state 默认返回 failed
- parse_callback 错误信息从 message 改为 err_code(与文档一致)
|
2026-05-05 23:20:04 +08:00 |
|
小鱼开发
|
761deb1156
|
fix(scheduler): VideoHandler 轮询阶段 fallback 主动查询 Vidu API
- 之前完全依赖 Vidu callback,一旦 callback 未到达任务就永远卡住
- 现在轮询时如果 callback 未到,主动调用 Vidu API 查询任务状态
- 查询到 success 时自动更新 Redis 并移除 running set
- 查询到 failed 时标记失败
|
2026-05-05 23:10:46 +08:00 |
|
小鱼开发
|
5aafabf88f
|
feat(log): Vidu 对口型提交请求增加完整参数日志
- VideoHandler 提交前记录 callback_url 和 video_url
- ViduProvider.lip_sync() 发送前记录完整请求体 body
- 部署后可从日志直接确认 callback_url 是否传给 Vidu API
|
2026-05-05 23:05:56 +08:00 |
|
小鱼开发
|
a2106cbfb3
|
feat(log): Vidu 回调增加详细日志
- 记录回调请求体(前500字符,防日志过大)
- 记录 handle_webhook 解析结果(state/result/error)
- 记录反查 internal_task_id 前后的 platform_task_id 和结果
- 更新成功时记录 video_url
|
2026-05-05 23:03:45 +08:00 |
|
小鱼开发
|
f5268d6077
|
fix(api): 从 VideoParams 移除 callback_url,不再暴露给前端
- callback_url 是后端和 Vidu 之间的内部配置,不应由前端传入
- VideoHandler 已自动兜底构建(基于 ENV 推断 app_base_url)
|
2026-05-05 22:57:12 +08:00 |
|
小鱼开发
|
676c54b6ba
|
fix(scheduler): VideoHandler 自动构建 Vidu 回调地址
- 前端提交 video 任务时不传 callback_url,导致 Vidu 不发送回调
- 任务永远停留在 running 状态,前端无限轮询
- VideoHandler 现在会自动用 app_base_url 构建回调地址兜底
- ENV=staging 时 base_url 自动推断为 https://dev.tapi.meijiaka.cn
|
2026-05-05 22:55:06 +08:00 |
|
小鱼开发
|
28033feca7
|
fix(frontend): 对口型接口从 /vidu/lip-sync 迁移到 /tasks/video
- 后端已废弃 /vidu/lip-sync 和 /vidu/tasks/*,统一为 /tasks/video + /tasks/{id}
- submitLipSync 改为 POST /tasks/video,请求体 { taskType, params }
- queryLipSyncStatus 改为 GET /tasks/{taskId},并做 status→state 字段映射
- 移除未使用的 queryLipSyncTask
|
2026-05-05 22:27:24 +08:00 |
|
小鱼开发
|
26f9096e2e
|
fix(provider): ViduProvider 外部 client 补 Authorization header
- main.py / scheduler/main.py 均使用外部 httpx.AsyncClient 注入 ViduProvider
- 外部 client 创建时未带 Authorization header,导致所有 Vidu API 请求 401
- 在 ViduProvider.__init__ 中统一补 header,无论自建还是外部 client
|
2026-05-05 22:08:38 +08:00 |
|
小鱼开发
|
8f7f0ac9cf
|
fix(scheduler): 缩短脚本任务等待时间
- 移除 ScriptHandler 中无意义的 asyncio.sleep(2) 假延迟
- Engine 轮询间隔从 10s/2s 缩短到 5s/1s,任务创建后最多等 5s 即被处理
- 去掉 script_handler.py 中不再使用的 asyncio import
|
2026-05-05 22:01:35 +08:00 |
|
小鱼开发
|
bd6681c454
|
fix(adapter): VolcengineArkAdapter 转发 reasoning_effort,移除 temperature 传参
- Adapter 之前漏传 reasoning_effort,platform-config.yaml 里配置的
minimal 未生效,可能导致脚本生成走完整推理链变慢
- 豆包 Seed 2.0 Pro 强制固定 temperature=1,传参无效,全部移除
- 移除 script_service.generate_script/polish_content 和 script.py
generate_title 中的 temperature 硬编码
|
2026-05-05 21:52:09 +08:00 |
|
小鱼开发
|
43f13cf394
|
fix(provider): VolcengineProvider 自动从 Settings 读取 API Key / Base URL
- VolcengineProvider 无参调用时 api_key 为 None,导致 scheduler/main.py 中
volcengine_ark adapter 注册失败,脚本生成报'未注册的平台: volcengine_ark'
- 参照 ViduProvider 做法,__init__ 中自动兜底读取 get_settings()
- 补充 Settings.VOLCENGINE_BASE_URL 字段(.env 中已有但 Pydantic 未定义)
- 顺手清理 volcengine_provider.py 中的 unused import / variable
|
2026-05-05 21:42:39 +08:00 |
|
小鱼开发
|
7bd0e2877e
|
fix(scheduler): Scheduler 进程初始化 ModelRouter gateway
- scheduler/main.py 新增火山方舟链路初始化(VolcengineProvider + VolcengineArkAdapter)
- scheduler/main.py 调用 get_model_router(gateway=platform_gateway)
- 修复 ScriptHandler 在 Scheduler 进程中运行时报 'PlatformGateway 未初始化'
根因:Scheduler 是独立进程,没有 FastAPI lifespan,从未初始化 ModelRouter 的 gateway。
ScriptService.generate_script() 调用 get_model_router() 时,gateway 为 None。
|
2026-05-05 21:20:23 +08:00 |
|
小鱼开发
|
12625a830d
|
fix: model_router.py 缺失 VolcengineProvider 导入
_load_from_config() 中直接使用了 VolcengineProvider 类方法,
但文件顶部未导入,导致 NameError 使 initialize() 失败。
_model_router 处于半成品状态,后续调用返回无 gateway 的实例,
最终触发 'PlatformGateway 未初始化' 错误。
|
2026-05-05 21:11:29 +08:00 |
|
小鱼开发
|
4076f316f8
|
fix: ModelRouter 初始化失败安全机制
- get_model_router() 增加 _initialized 检查,之前初始化失败时自动重试
- 防止 lifespan 中 initialize() 抛异常后,_model_router 处于半成品状态
|
2026-05-05 21:08:58 +08:00 |
|
小鱼开发
|
c38e67ce08
|
fix: ModelHealth 导入路径 + Pydantic protected_namespaces 警告
- model_router.py: ModelHealth 从 adapters.base 移至 providers.base
- script.py: TestModelRequest 添加 ConfigDict(protected_namespaces=()) 消除 Pydantic 警告
|
2026-05-05 21:00:35 +08:00 |
|
小鱼开发
|
30536276ba
|
refactor(scheduler): 统一异步任务调度架构
核心变更:
- 统一第三方接口架构:所有服务走 PlatformGateway(call_sync/submit_task/query_task/handle_webhook)
- 视频生成(Vidu 对口型)纳入 Async Engine,与 script/subtitle/tts 统一为 POST /tasks/{task_type} 模式
- 新增 VideoHandler、TTSHandler,完善 ScriptHandler/SubtitleHandler
- PlatformGateway 生成 internal_task_id,建立 Redis 双向映射,callback 场景传入 Async Engine task_id 保证映射一致
- SlotManager 新增 acquire_ctx 上下文管理器,所有 Handler 统一使用
- ViduAdapter 状态映射归一化(normalize_state/denormalize_state)
- 移除 ViduService Semaphore 和 tenacity 重试,并发控制完全交予 SlotManager
- nonce 防重放下沉到 CallbackCapable 协议
- Service 层错误统一为 PlatformError,路由层错误信息脱敏
- 废弃 /voice/lip-sync,清理 vidu.py 遗留路由
Bug 修复:
- VideoHandler 轮询阶段后添加 continue,防止已提交任务重复创建
- voice.py synthesize_to_file 变量名冲突(request vs request_body)
- PlatformGateway.submit_task 空 data 防护
- ScriptHandler 动态导入 asyncio 改为模块级导入
- SubtitleHandler 完成时补充 progress=100
文档:
- 更新 AGENTS.md 核心功能、运行时架构、异步调度描述
|
2026-05-05 20:53:18 +08:00 |
|
小鱼开发
|
f32c1c7703
|
refactor: 删除 video 任务类型
产品无云端视频生成功能,Scheduler 也未注册 VideoHandler,
删除遗留的 video 任务类型及相关代码:
- tasks.py: VideoParams、video 分支
- schemas/task.py: VideoTaskParams
- schemas/__init__.py: VideoTaskParams 导出
|
2026-05-05 16:56:49 +08:00 |
|
小鱼开发
|
c98cb72598
|
chore: 更新火山字幕 QPS 配额 2 -> 5(以控制台为准)
|
2026-05-05 12:01:30 +08:00 |
|
小鱼开发
|
6c1aef276b
|
refactor: 删除所有流式生成代码
项目已明确不做 SSE/流式输出,清理后端所有流式相关代码:
- 删除 Provider 层 generate_stream、generate_stream_with_progress
- 删除 ModelRouter 层 _try_generate_stream、generate_stream_with_progress
- 删除 LLMGateway chat_stream
- 删除 Adapter 层 CHAT_STREAM 常量/分支
- 删除 platform-config.yaml chat_stream 方法配置
- 同步清理 base.py 抽象接口和未使用的导入
|
2026-05-04 20:27:19 +08:00 |
|
小鱼开发
|
59fd9ea4ea
|
chore: 升级火山方舟 SDK 5.0.24 -> 5.0.25
同步更新 uv.lock 和 requirements.lock。
|
2026-05-04 20:19:14 +08:00 |
|
小鱼开发
|
af9e8f5d9b
|
refactor: reasoning_effort 从 extra_body 改为直接传递
与官方 curl 示例对齐:reasoning_effort 作为顶层参数直接传递,
不再通过 extra_body 透传。统一三个方法(generate、generate_stream、
generate_stream_with_progress)的传参方式。
|
2026-05-04 20:14:20 +08:00 |
|
小鱼开发
|
015dfade11
|
chore: 删除 doubao-seed-2-0-pro 无效的 temperature 配置
doubao-seed-2-0-pro 强制固定 temperature=1、top_p=0.95,
API 请求中传入的值会被系统忽略。删除避免配置误导。
|
2026-05-04 20:11:14 +08:00 |
|
小鱼开发
|
0e5bef64b8
|
fix: 移除 response_format=json_object,改为依赖 prompt 约束
回退上一条推断式修复(模型名匹配没有官方依据)。
改为在 script_service 调用层直接移除该参数:
- system prompt 已明确要求'只输出纯 JSON'
- safe_parse_ai_json_response 已做容错解析和 markdown 清洗
- 不依赖特定模型对 response_format 的支持
|
2026-05-04 20:05:38 +08:00 |
|
小鱼开发
|
f10d78f63e
|
fix: 豆包模型不支持 response_format=json_object,添加兼容性判断
doubao-seed-2-0-pro 等豆包系列模型不支持 OpenAI 风格的
response_format.type=json_object 参数,会导致 400 错误。
改为仅对非豆包模型(如 DeepSeek、GPT)传递该参数。
|
2026-05-04 20:03:38 +08:00 |
|
小鱼开发
|
431c54c258
|
refactor: 前端脚本生成改为异步任务轮询,精简LLM模型,删除图片生成代码
- 前端:ScriptCreation SSE 流式改为 createTask + pollTask 轮询
- 后端:LLM 仅保留 doubao-seed-2-0-pro,删除降级链及相关模型
- 后端:删除所有图片生成代码(ImageParams/ImageTaskParams/generate_image)
- 更新 platform-config.yaml、model_router、volcengine_provider、tasks 等
|
2026-05-04 19:58:32 +08:00 |
|
小鱼开发
|
6c0f240369
|
chore: 删除脚本生成 SSE 流式相关废弃代码
|
2026-05-04 19:37:30 +08:00 |
|
小鱼开发
|
52ba99e11d
|
refactor: Scheduler 层统一命名 job → task
|
2026-05-04 19:18:22 +08:00 |
|
小鱼开发
|
82657c2d65
|
chore: 删除形象克隆相关代码、配置及注释
|
2026-05-04 19:06:45 +08:00 |
|
小鱼开发
|
7a858caa01
|
chore: 删除 MockProvider 及相关 mock 代码
|
2026-05-04 18:58:40 +08:00 |
|
小鱼开发
|
d466539928
|
fix: 补全 task_defaults 配置,避免脚本生成误走 MockProvider
|
2026-05-04 18:56:06 +08:00 |
|
小鱼开发
|
a58b2d1f49
|
chore: 测试环境 docker-compose 显式配置 CORS_ORIGINS
|
2026-05-04 18:47:05 +08:00 |
|
小鱼开发
|
e58159fc42
|
refactor: 第三方平台架构改造(Adapter Protocol + Gateway)
Phase 1: 异常体系统一
- 新增 PlatformError / PlatformErrorType 标准定义
- 改造所有 Provider 异常抛出为 PlatformError
- 注册全局 PlatformError exception handler
Phase 2: Adapter Protocol
- 新增 app/ai/adapters/base.py(PlatformAdapter + SyncCapable + TaskCapable + CallbackCapable)
- 新增 app/ai/adapters/constants.py(Method 常量)
- 新增 PlatformConfigLoader(config/platform-config.yaml)
Phase 3: HTTP Client 统一
- ViduProvider 从 aiohttp 迁移到 httpx(注入方式)
- VolcengineCaptionService 改为注入 http_client
- lifespan 统一管理所有 Client 创建和关闭
Phase 4: Gateway 骨架 + Adapter 实现
- 新增 ViduAdapter / VolcengineArkAdapter / VolcengineCaptionAdapter
- 新增 PlatformGateway(call_sync / submit_task / query_task / handle_webhook)
- 新增 LLMGateway(带 Fallback 降级链)
- lifespan 注册所有 Adapter 和 Gateway
Phase 6: 清理与验证
- 从 Settings 移除 VIDU_BASE_URL / VOLCENGINE_BASE_URL
- Provider 改为从 PlatformConfigLoader 读取 base_url
- 清理 volcengine_caption_service 全局单例
- config_loader 默认路径改为 platform-config.yaml
- Scheduler 注入共享 HTTP client
- vidu.py 回调路由使用 Adapter 验签和解析
- ruff 全量通过,应用启动测试通过
|
2026-05-04 16:07:16 +08:00 |
|
小鱼开发
|
0c921aca11
|
chore: 清理废弃代码和文档
- 删除 anytocopy 相关文件(service、handler、文档)
- 删除 KlingAI / MiniMax 开发文档
- 删除 database-design、mvp-lip-sync-replacement 等过时文档
- 删除旧的 docker-compose.yml(已拆分为 dev/test/prod)
- 删除 config/ai_models.yaml(已合并到 platform-config.yaml)
- 从 .env.example 移除 anytocopy 配置
- 从 tasks.py、schemas 移除 copy 任务类型
|
2026-05-04 16:06:25 +08:00 |
|
小鱼开发
|
d28227f779
|
chore: 同步 uv.lock,补全 tenacity 依赖
|
2026-05-02 23:17:25 +08:00 |
|
小鱼开发
|
e262134148
|
refactor: 移除 KlingAI 和 MiniMax 相关代码
删除内容:
- KlingAI Provider、MiniMax Provider
- Kling 视频/图片/TTS/语音克隆/形象克隆 Service 和 Scheduler Handler
- 已废弃的 TTSService、VoiceCloneService
- config 中 KLINGAI_*/MINIMAX_* 配置项
- ai_models.yaml 中 klingai 平台和模型配置
- docker-compose 中相关环境变量
- .env.example 中相关配置示例
- deploy-test.sh 中相关检查
- Makefile 中 klingai 语义检查排除规则
- KlingTaskStatus 枚举
修改内容:
- model_router.py 移除 KlingAI 平台分支
- voice.py 重写,修复批量合成/文件保存中 service 未定义的 Bug
- vidu_service.py 移除 MiniMax 相关注释
- script_handler.py 更新注释
|
2026-05-02 23:16:14 +08:00 |
|
小鱼开发
|
70a87465b5
|
chore: unregister unused KlingAI/MiniMax handlers and imports
- Remove KlingAI handlers (video, avatar, image, tts) from scheduler registration
- Remove MiniMaxTTSService import from voice.py (deprecated, migrated to Vidu)
- Keep source files for future reference
|
2026-05-02 22:47:33 +08:00 |
|