Fetching metadata from the HF Docker repository...
Oct 4, 2025 04:27 fix(app_simple): apply critical fixes to production deployment wapadil +1: Claude
CRITICAL: Previous fixes were applied to app.py but production runs app_simple.py
Fixes applied to api/fal_client.py:
- Add image compression in upload_file() (max 2000px, JPEG quality 92)
- Add video parameter support in prepare_fal_arguments() (WAN 2.2/2.5)
- Import Pillow and io modules for image processing
Fixes applied to api/routes.py:
- Change error responses from 500 to 200 with error payload
- Prevent frontend from seeing 500 errors during status polling
Root cause analysis:
- Dockerfile CMD runs app_simple.py (modular architecture)
- All previous fixes to app.py did not affect production
- This commit applies identical fixes to the actual running code
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com> Oct 3, 2025 08:48 [CRITICAL FIX] 恢复功能 + 通过猴子补丁注入隐私保护 header wapadil +1: Claude
问题: 直接用 httpx REST API 实现导致 500 错误和"响应异常"
根因: 不了解 FAL API 的真实端点格式和参数要求
解决方案: 保留 fal-client SDK(确保功能正常)+ httpx 猴子补丁注入 header
技术实现:
- 在导入 fal_client 之前,猴子补丁 httpx.Client.request 和 httpx.AsyncClient.request
- 自动在所有请求的 headers 中添加 'X-Fal-Store-IO': '0'
- fal_client SDK 底层使用 httpx,因此会自动携带注入的 header
关键代码:
- api/fal_client.py:14-34 - httpx 猴子补丁实现
- api/fal_client.py:37 - 导入 fal_client(会使用打过补丁的 httpx)
验证: Python 导入和语法检查通过
优势:
✅ 功能正常(使用经过验证的 SDK)
✅ 隐私保护生效(所有请求自动携带 X-Fal-Store-IO: 0)
✅ 零破坏性(无需修改 SDK 调用逻辑)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com> Oct 2, 2025 15:54 [BUGFIX] 修复 SyncClient 初始化错误 - 移除不支持的 headers 参数 wapadil +1: Claude
根因: SyncClient 不支持 headers 参数(仅 AsyncClient 支持)
症状: TypeError - SyncClient.__init__() got an unexpected keyword argument 'headers'
修复: 移除 SyncClient 构造函数中的 headers 参数
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com> Sep 30, 2025 08:30 [PRIVACY] 添加 X-Fal-Store-IO header 阻止 FAL 平台保存生成历史 wapadil +1: Claude
在所有 FAL API 客户端初始化时配置 X-Fal-Store-IO: 0 header,
阻止 FAL 平台保存 I/O payload 到用户历史记录,提升隐私保护。
修改位置:
- api/fal_client.py: SyncClient 初始化
- app.py: AsyncClient 图像生成和文件上传客户端
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com> 07:54 [FEATURE] 增强日志系统 - 支持 request_id 追踪与清理 wapadil +1: Claude
数据结构改进:
- monitoring.py 新增 log_request_id() 函数,标准化 request_id 日志格式
- 日志格式: [REQUEST_ID] {id} | action={action} | model={model} | prompt={preview}
复杂度消除:
- 统一日志记录点,消除日志格式不一致问题
- 提供明确的日志标记,便于自动化提取和清理
实用性:
- 支持从 HF Spaces 日志提取 request_id 进行批量清理
- 完整的操作指南(DELETE_GUIDE.md)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com> Sep 28, 2025 14:35 [CRITICAL FIX] 修复FAL API状态查询核心错误 wapadil +1: Claude
解决 'InProgress' object has no attribute 'status' 导致的500错误
- 重构get_status方法使用isinstance正确处理FAL状态对象类型
- 消除错误的status.status访问,改用client.result()获取结果
- 优化routes层状态处理,添加队列位置信息支持
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com> 14:10 [CRITICAL FIX] 修复FAL API状态查询子路径问题 wapadil +1: Claude
根据外部专家建议,解决"Failed to check request status"错误:
核心修复:
- FALClient: 添加get_status()方法,正确处理模型子路径剥离
- API路由: 新增/api/status端点,支持队列状态轮询
- 前端: 状态查询添加必要的授权和模型端点头部
- 子路径处理: /edit等子路径仅用于提交,状态查询自动剥离
技术要点:
- 提交: fal-ai/bytedance/seedream/v4/edit (带/edit)
- 状态: fal-ai/bytedance/seedream/v4 (不带/edit)
- 遵循FAL官方队列API最佳实践
问题根因:之前状态查询URL错误包含子路径,导致FAL API返回404
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com> 08:55 [MAJOR REFACTOR] SeedDream v4 架构优化 wapadil +1: Claude
架构简化:
- 移除复杂的多事件循环设计,使用简单同步API
- 将500行单体文件拆分为模块化架构
- 消除特殊情况处理,统一错误处理逻辑
新增功能:
- 模块化API设计(api/fal_client.py, api/routes.py)
- 简化版主应用(app_simple.py)
- 统一监控和日志系统(monitoring.py)
- 自动化部署流水线(.github/workflows/deploy.yml)
- 完整测试覆盖(tests/)
部署优化:
- GitHub Actions自动同步到Hugging Face Spaces
- 健康检查端点优化
- 环境配置标准化
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>