imeepos
0b42ea8dcc
feat: 改造query_llm_with_grounding支持多轮对话
...
- 扩展RAG Grounding数据模型支持会话管理
- 添加多轮对话的RAG查询方法query_llm_with_grounding_multi_turn
- 集成现有会话管理服务,支持历史消息存储和检索
- 更新前端类型定义和服务层,支持多轮对话参数
- 创建多轮RAG对话测试组件和页面
- 支持系统提示词、历史消息数量控制等配置选项
- 保持向后兼容,单轮对话功能不受影响
核心功能:
多轮RAG对话 - 基于检索增强生成的多轮对话
会话历史管理 - 自动保存和加载对话历史
智能检索增强 - 结合Vertex AI Search的知识检索
上下文保持 - 在多轮对话中保持对话上下文
灵活配置 - 支持历史消息数量、系统提示词等配置
来源追踪 - 显示检索来源和相关性信息
遵循promptx/tauri-desktop-app-expert开发规范
2025-07-22 10:56:54 +08:00
imeepos
8b92cc130c
feat: 完善多轮对话功能实现
...
- 修复编译错误和类型问题
- 添加完整的单元测试套件
- 创建多轮对话测试组件和页面
- 添加详细的功能文档和使用说明
- 优化错误处理和类型安全
- 遵循promptx开发规范的完整实现
功能特性:
多轮对话支持 - 历史消息传递和上下文保持
会话管理 - session_id管理和生命周期控制
数据持久化 - 完整的会话历史存储
类型安全 - 完整的TypeScript类型定义
测试覆盖 - 单元测试和集成测试
文档完善 - 详细的实现文档和使用指南
2025-07-22 10:43:36 +08:00
imeepos
5296039785
feat: 实现多轮对话功能
...
- 添加会话管理数据模型和仓库层
- 扩展Gemini服务支持多轮对话的contents数组构建
- 实现会话历史存储和检索功能
- 添加多轮对话业务服务层
- 创建前端TypeScript类型定义和服务层
- 实现Tauri命令处理多轮对话请求
- 添加会话管理功能(创建、删除、更新标题等)
- 创建多轮对话测试组件和页面
- 遵循promptx/tauri-desktop-app-expert开发规范
- 支持session_id管理和历史消息传递
- 实现完整的四层架构设计
2025-07-22 10:39:26 +08:00
imeepos
317b9bb8b2
fix: add system prompt
2025-07-22 10:18:40 +08:00
imeepos
f467b215b5
fix: build error
2025-07-21 23:47:20 +08:00
imeepos
343688af56
chore: bump version to 0.2.1
2025-07-21 23:43:20 +08:00
imeepos
94e9f74b15
feat: 完善聊天界面功能和用户体验
...
界面优化:
- 修复页面头部信息重复问题,统一为时尚穿搭顾问
- 优化欢迎界面布局,移除重复标题
- 调整标签激活状态样式,使其更加subtle和优雅
标签系统增强:
- 实现卡片标签与底部工具栏标签完美同步
- 修复标签选中状态的实时更新问题
- 添加气泡卡片展示所有标签详情
- 优化标签折叠功能,默认隐藏,一行布局
功能完善:
- 修复输入框和发送按钮对齐问题
- 优化聊天输入框固定到底部
- 将弹框改为更优雅的气泡卡片消息
- 生成搜索和清空按钮移到外层,始终可见
导航优化:
- 服装搭配导航直接链接到AI智能聊天
- 配置独立路由避免与便捷工具冲突
- 移除原有的服装搭配页面和路由
用户体验:
- 标签选中状态双向同步更新
- 气泡卡片支持标签选择和实时反馈
- 优化加载状态显示和错误处理
- 完善的视觉反馈和交互动画
2025-07-21 23:35:04 +08:00
imeepos
07ecd9cee7
feat: 优化聊天界面为女装穿搭专业顾问
...
- 更新UI主题为粉色系,适配女装穿搭业务
- 默认展示12张图片卡片,支持展开查看全部
- 默认隐藏AI文字回答,点击查看详情时显示
- 新增智能标签汇总功能,支持多选标签生成搜索
- 优化提示词和建议问题,专注女装穿搭场景
- 修复加载状态显示问题,优化用户体验
- 支持gs://到Google Storage的URI转换
- 增强图片卡片交互,悬停显示查看原图按钮
2025-07-21 22:56:57 +08:00
imeepos
1fb5468ecc
feat: 实现RAG Grounding服务功能
...
基于promptx/outfit-match中的query_llm_with_grounding实现,遵循Tauri开发规范
## 新增功能
- 实现RAG Grounding核心服务逻辑
- 支持基于Vertex AI Search的检索增强生成
- 集成Cloudflare Gateway和Google Gemini API
- 提供完整的TypeScript类型定义和前端服务封装
## 技术架构
- Rust后端:GeminiService扩展RAG功能
- Tauri命令:query_rag_grounding, test_rag_grounding_connection, get_rag_grounding_config
- 前端服务:RagGroundingService类,支持统计监控和错误处理
- 数据模型:完整的请求/响应结构和配置管理
## 核心特性
- 检索增强生成:基于数据存储的智能检索和内容生成
- 容错机制:内置重试机制和错误处理
- 性能监控:响应时间统计和性能指标
- 类型安全:完整的TypeScript类型定义
- 会话管理:支持上下文保持的对话功能
## 测试覆盖
- 25个单元测试,覆盖核心功能和边界情况
- 包括序列化/反序列化、错误处理、配置验证等
- 所有测试通过,确保功能正确性
## 文档和示例
- 完整的API文档 (docs/rag-grounding-api.md)
- 详细的使用示例 (examples/rag-grounding-usage.ts)
- 包含最佳实践和错误处理指南
## 遵循规范
- 严格遵循promptx/tauri-desktop-app-expert开发规范
- 安全第一:最小权限原则,数据加密保护
- 性能优先:异步处理,响应时间优化
- 模块化设计:清晰的架构分层
- 错误处理完善:全面的错误处理和用户反馈
2025-07-21 21:07:03 +08:00
imeepos
c3c72ce8bd
feat: 实现一键匹配实时进度通讯
...
修复问题:
- 一键匹配进度条没有逐步递增,只在开始和结束时更新
实现内容:
1. 后端进度事件发送:
- 在事件总线中添加BatchMatchingProgress事件类型
- 在批量匹配服务中集成Tauri事件发送
- 在每个模板匹配开始时发送实时进度事件
2. 前端进度事件监听:
- 修改BatchMatchingService支持事件监听
- 添加batch_matching_progress事件监听器
- 实时更新进度条状态
3. 事件通讯机制:
- 使用Tauri的emit系统发送事件到前端
- 前端通过listen监听实时进度更新
- 确保进度条能够逐步递增显示
技术细节:
- 后端:使用app_handle.emit()发送进度事件
- 前端:使用listen()监听batch_matching_progress事件
- 进度计算:基于当前轮数、绑定索引和总绑定数
现在一键匹配过程中进度条会实时更新,用户可以看到匹配的实际进展。
2025-07-21 20:07:27 +08:00
imeepos
70e8669ace
refactor: 移除模板匹配中的日志并增强死循环防护
...
优化内容:
1. 移除所有println!和eprintln!日志输出,提升性能
2. 增强批量匹配的死循环防护机制:
- 添加实质性进展检测(检查是否新增已使用片段)
- 如果本轮虽有成功匹配但无实质性进展,则终止循环
- 防止部分匹配成功但不消耗新素材的无效循环
死循环防护机制:
- 原有:本轮无成功匹配时终止
- 原有:最大轮数限制(100轮)
- 原有:预检查机制(每5轮检查模板可匹配性)
- 新增:实质性进展检测,防止无效循环
这确保了批量匹配在各种边界情况下都能正确终止,避免无限循环。
2025-07-21 19:52:05 +08:00
imeepos
5ae7874792
fix: 修正文件名序号001全局限制逻辑
...
修复问题:
- 将序号001限制从仅针对FilenameSequence规则改为全局限制
- 现在所有匹配规则(AiClassification、RandomMatch、FilenameSequence)都会遵守序号001限制
- 在单个模板匹配过程中,最多只能使用一个文件名以001结尾的视频文件
实现细节:
1. 在match_single_segment方法开始时检查模板是否已使用序号001视频
2. 将此状态传递给所有匹配方法
3. 在每个匹配方法的过滤逻辑中应用序号001限制
4. 统一的过滤逻辑确保一致性
这确保了无论使用哪种匹配规则,都不会在同一个模板中使用多个序号001的视频文件。
2025-07-21 19:24:58 +08:00
imeepos
856d0b1055
fix: 修复匹配记录批量删除功能
...
- 修复 DeleteConfirmDialog 组件中确认按钮缺少 onClick 事件处理
- 修复 props 解构中缺少 onConfirm 参数的问题
- 修复文件名序号001匹配限制逻辑,确保单个模板匹配过程中只能使用一个序号001的视频
问题原因:
1. DeleteConfirmDialog 确认按钮没有绑定 onConfirm 回调函数
2. 组件 props 解构时遗漏了 onConfirm 参数
3. 序号001限制逻辑在模板匹配过程中的检查时机不正确
2025-07-21 19:18:18 +08:00
imeepos
5091493a8c
feat: 添加文件名序号匹配规则功能
...
- 新增 FilenameUtils 工具类,支持从文件名中提取3位数字序号
- 扩展 SegmentMatchingRule 枚举,添加 FilenameSequence 匹配规则
- 在 MaterialMatchingService 中实现基于文件名序号的匹配逻辑
- 确保每个模板只能使用一个序号为001的视频文件
- 添加全面的单元测试和集成测试
- 支持多种文件名格式:name_001.ext, 001_name.ext, name001.ext 等
遵循 promptx/tauri-desktop-app-expert 开发规范
2025-07-21 19:01:01 +08:00
imeepos
8dfdf36a47
feat: 添加YAML智能解析支持
2025-07-21 18:35:35 +08:00
imeepos
a8ed7ed007
feat: 添加YAML智能解析支持到容错JSON解析器
...
修复tolerant_json_parser无法处理retrievedContext.text中YAML结构的问题
新增process_yaml_in_json_value方法,递归检查JSON字符串字段中的YAML内容
即使标准JSON解析成功,也会自动检测并解析YAML字符串字段
添加YamlStringParsing恢复策略,提供详细的解析统计信息
更新前端功能特性描述,添加YAML支持说明
新增完整的测试用例验证YAML解析功能
支持复杂的YAML嵌套结构、数组和对象解析
遵循promptx/tauri-desktop-app-expert开发规范
2025-07-21 18:35:21 +08:00
imeepos
a8c8f2a085
fix: 修复TolerantJsonParser嵌套JSON解析问题
...
问题描述:
- TolerantJsonParser在处理复杂嵌套JSON时只能提取部分内容
- 原因是正则表达式模式无法正确匹配嵌套的JSON对象
- 导致Gemini API响应解析不完整,输出长度异常缩短
修复内容:
- 改进JSON对象和数组的正则表达式模式
- 添加手动括号匹配算法作为主要提取方法
- 实现字符串内容的正确处理,避免字符串中的括号干扰
- 优化JSON内容提取逻辑,优先使用最可靠的方法
- 添加comprehensive测试用例验证修复效果
测试结果:
- 复杂嵌套JSON解析测试通过
- 括号匹配算法测试通过
- 字符串处理测试通过
2025-07-21 17:18:28 +08:00
imeepos
906bea49f0
feat: 重构工具页面为卡片列表展示
...
- 创建工具卡片数据结构和类型定义
- 实现ToolCard组件,支持差异化图标和现代化设计
- 重构Tools页面为卡片列表布局,使用CardGrid组件
- 创建独立的工具详情页面:
- DataCleaningTool: AI检索图片/数据清洗工具
- JsonParserTool: 容错JSON解析器工具
- DebugPanelTool: JSON解析器调试面板工具
- 添加工具详情页面路由配置
- 优化UI/UX设计,遵循promptx/frontend-developer规范
- 支持搜索、分类筛选、新功能/热门工具筛选
- 实现响应式设计和现代化交互效果
2025-07-21 16:58:55 +08:00
imeepos
764b4d7420
fix: build error
2025-07-21 15:29:31 +08:00
imeepos
e9e5837a1f
feat: 升级Gemini服务使用TolerantJsonParser进行JSON解析
...
- 集成tolerant_json_parser.rs到GeminiService中
- 替换原有的正则匹配JSON提取逻辑
- 使用Arc<Mutex<TolerantJsonParser>>支持Clone trait
- 改进错误处理和日志输出,包含解析统计信息
- 添加回退机制,当TolerantJsonParser失败时使用传统方法
- 更新所有GeminiService::new()调用点处理Result返回类型
- 添加全面的测试用例验证新的JSON解析逻辑
- 保持API向后兼容性,方法签名不变
遵循promptx/tauri-desktop-app-expert开发规范
2025-07-21 15:02:37 +08:00
imeepos
ff31a48256
fix: resolve unused assignment warning in material_matching_service
...
- Changed termination_reason from String to Option<String> to eliminate unused assignment warning
- Updated all assignments to use Some() wrapper
- Simplified default value logic using unwrap_or_else()
- Maintains same functionality while making code more idiomatic Rust
2025-07-21 14:34:53 +08:00
imeepos
6bd12a4a63
feat: 实现项目素材批量删除功能
...
- 后端实现:
* 在MaterialRepository中添加batch_delete方法,支持事务处理
* 在MaterialService中添加batch_delete_materials业务逻辑
* 添加BatchDeleteResult和BatchDeleteFailedItem数据结构
* 新增batch_delete_materials Tauri命令接口
* 实现参数验证和错误处理机制
- 前端实现:
* 创建useBatchSelection Hook管理批量选择状态
* 实现BatchDeleteConfirmDialog批量删除确认对话框
* 在MaterialCard组件中添加批量选择支持
* 在ProjectDetails页面集成批量选择和删除功能
* 添加批量操作UI控件(全选/取消全选/批量删除按钮)
- 功能特性:
* 支持最多50个素材的批量选择
* 单次最多删除100个素材的限制
* 详细的删除结果反馈(成功/失败统计)
* 失败项目的具体错误信息显示
* 批量选择模式的视觉反馈
* 完善的用户确认和通知机制
- 测试:
* 添加批量删除功能的单元测试
* 测试数据结构创建和验证逻辑
遵循Tauri开发规范和前端UI/UX设计标准,提供安全可靠的批量删除体验。
2025-07-21 14:28:06 +08:00
imeepos
6c795a5ddf
fix: 修复Rust编译警告,优化代码质量
...
主要修复:
- 修复snake_case命名规范问题:projectId -> project_id, templateId -> template_id
- 移除未使用的导入:std::sync::Arc
- 修复未使用变量参数:添加下划线前缀标记
- 修复未使用的错误变量:在map_err闭包中使用_e前缀
修复的警告类型:
- unused_imports: 移除未使用的导入
- unused_variables: 标记未使用的参数
- non_snake_case: 修复命名规范
- 将警告数量从29个减少到10个
剩余的10个警告主要是为未来功能预留的死代码,属于正常情况。
2025-07-21 13:57:09 +08:00
imeepos
dc61de7cad
fix: 修复容错JSON解析器的解析逻辑和前端集成
...
主要修复:
- 修复extract_pair函数,正确处理object/array/number等直接节点类型
- 在预处理阶段修复无引号键和尾随逗号,避免Tree-sitter解析错误
- 添加详细的调试日志,便于问题诊断
- 优化JsonParserState,每次使用新配置创建解析器实例
- 创建TolerantJsonParser前端组件,支持配置和示例
- 创建TolerantJsonService服务类,封装API调用
- 添加JsonParserDebugPanel调试面板,便于测试后端命令
- 集成到便捷工具页面,提供完整的用户界面
技术改进:
- 支持预设配置模式(严格/宽松/AI模式/快速模式)
- 增强错误恢复策略的调试信息
- 优化前端组件的用户体验和交互设计
- 添加解析统计信息展示和结果导出功能
2025-07-21 13:46:49 +08:00
imeepos
1a76bf6c82
feat: 实现基于Tree-sitter的容错JSON解析器
...
- 添加TolerantJsonParser核心解析器,支持多种错误恢复策略
- 实现CachedTolerantJsonParser带缓存的解析器,提升性能
- 支持Markdown代码块提取、无引号键、尾随逗号等容错功能
- 添加完整的Tauri命令接口,支持前端调用
- 包含全面的单元测试和集成测试
- 提供详细的API文档和使用示例
主要功能:
- 标准JSON解析、手动修复、正则提取、部分解析等恢复策略
- 支持处理大模型返回的不规范JSON数据
- 内置缓存机制,支持高频解析场景
- 详细的解析统计信息和错误报告
- 遵循Tauri开发规范的分层架构设计
2025-07-21 13:27:19 +08:00
imeepos
e7b48d0a7d
优化Modal弹框布局和尺寸控制
...
- 修复Modal组件尺寸类冲突问题,确保max-w-*正确生效
- 优化CreateDynamicModal表单布局,使其在小尺寸弹框中更紧凑
- 减少表单元素间距和内边距,提升视觉密度
- 优化图片预览、按钮等组件尺寸,适配sm尺寸弹框
- 移除CSS中可能干扰Tailwind尺寸类的样式设置
主要改进:
- Modal组件getSizeClasses函数优化,确保w-full和max-w-*正确配合
- CreateDynamicModal表单元素紧凑化,提升小屏幕体验
- 统一弹框尺寸控制逻辑,解决宽度限制不生效问题
2025-07-18 18:58:24 +08:00
imeepos
4da48c3281
fix: 优化动态列表和弹框UI体验
2025-07-18 18:45:13 +08:00
imeepos
da4aeaccb9
完成模特动态页面开发,移除标题和描述字段
2025-07-18 16:49:08 +08:00
imeepos
b7954497b0
chore: 发布版本 v0.2.0
...
版本更新内容:
- 更新package.json版本号至0.2.0
- 更新tauri.conf.json版本号至0.2.0
- 更新Cargo.toml版本号至0.2.0
- 添加v0.2.0版本发布说明
主要功能:
素材类型区分展示功能(图片直显、视频缩略图、音频播放)
AI分类统计数值溢出问题修复
后端API扩展和前端组件优化
安全性和性能提升
2025-07-18 14:31:49 +08:00
imeepos
82b62a4b0f
fix: 修复AI分类统计数值溢出问题
...
问题:成功分类数显示18446744073709552(接近u64最大值)
原因:错误地用分类记录总数减去失败任务数,导致负数转u64溢出
修复内容:
- 扩展ClassificationStats结构体,添加分类记录状态统计
- 改进数据库查询,正确统计各状态的分类记录数
- 修正ai_analysis_log_service中的统计计算逻辑
- 添加数值安全检查,防止负数转无符号整数
- 更新前端类型定义保持一致性
现在统计数据来源一致且逻辑正确:
- 任务统计来自video_classification_tasks表
- 分类记录统计来自video_classification_records表
2025-07-18 14:27:25 +08:00
imeepos
eb47a2b8fb
feat: 实现素材类型区分展示功能
...
- 图片素材:直接展示图片内容,支持多种格式(JPG/PNG/GIF等)
- 视频素材:展示缩略图,使用FFmpeg生成首帧
- 音频素材:提供播放控件,支持点击播放/暂停
后端改进:
- 扩展get_material_thumbnail_base64命令支持图片类型
- 新增get_audio_file_base64命令处理音频文件访问
- 自动检测文件MIME类型,安全的文件访问机制
前端改进:
- MaterialThumbnail组件重构支持三种素材类型
- 集成HTML5 Audio API实现音频播放
- 改进懒加载和缓存机制,优化性能
遵循promptx/tauri-desktop-app-expert开发规范
2025-07-18 14:20:57 +08:00
imeepos
5102923feb
feat: 添加导出到剪映成功后的数据刷新功能
...
## 功能改进
### 1. TemplateMatchingResultManager.tsx
- 在V1和V2导出成功后自动刷新匹配结果列表
- 调用loadResults()和loadStatistics()更新数据
- 确保导出记录能及时反映在界面上
### 2. ExportRecordManager.tsx
- 在重新导出成功后刷新导出记录列表
- 添加更详细的成功日志信息
## 用户体验改进
- 导出成功后无需手动刷新页面
- 数据状态实时更新,保持界面一致性
- 避免使用window.location.reload()的粗暴刷新方式
## 技术细节
- 使用现有的loadResults()和loadStatistics()方法
- 保持异步操作的错误处理机制
- 在成功提示后立即刷新数据
这样用户在导出到剪映后能立即看到最新的导出记录和状态更新。
2025-07-18 13:51:56 +08:00
imeepos
92ff1ee962
fix: 修复素材匹配时未加载片段信息的关键问题
...
## 问题根因
MaterialMatchingService中直接调用material_repo.get_by_project_id()方法,
该方法只返回素材基本信息,不包含segments字段,导致:
1. material.segments.is_empty()始终为true
2. 匹配逻辑创建虚拟片段,使用原始素材完整时长
3. 10.042秒的原始素材与1.267秒的模板片段比较,超出692.8%
## 解决方案
将所有调用material_repo.get_by_project_id()的地方改为:
MaterialService::get_project_materials()
该方法会:
1. 调用repository.get_by_project_id()获取素材基本信息
2. 为每个素材调用repository.get_segments()加载片段信息
3. 返回包含完整片段信息的素材列表
## 修改位置
1. match_materials方法 - 主要匹配逻辑
2. can_template_be_fully_matched方法 - 模板匹配检查
3. match_materials_with_used_segments方法 - 批量匹配逻辑
## 预期效果
- material.segments不再为空
- 匹配逻辑使用真实的切分片段而不是虚拟片段
- 片段时长将是合理的切分后时长(如1-5秒)而不是原始素材时长
- 时长匹配评分将更加准确
这是一个关键修复,解决了匹配逻辑的根本问题。
2025-07-18 13:48:34 +08:00
imeepos
7909a62e64
debug: 添加素材片段检查日志,确认虚拟片段问题
...
## 问题发现
从日志显示素材片段时长10.042秒,这是原始素材而不是二次切分片段。
## 添加的日志
1. **素材检查日志**:
- 素材名称和ID
- 素材片段数量
- 分类记录数量
2. **虚拟片段创建日志**:
- 当素材未切分时的警告
- 原始素材时长
- 虚拟片段的segment_id和category
- 虚拟片段时长
3. **真实片段使用日志**:
- 当素材已切分时的确认
- 真实片段的id、时长和category
## 问题分析
匹配逻辑中的问题:
- 当material.segments.is_empty()时,创建虚拟片段
- 虚拟片段使用原始素材的完整时长(如10.042秒)
- 与模板要求时长(如1.267秒)比较,导致超出692.8%
## 根本原因
素材没有被正确切分,导致匹配时使用原始素材时长而不是切分后的片段时长。
这些日志将帮助确认:
1. 素材是否被正确切分
2. 为什么会创建虚拟片段
3. 虚拟片段vs真实片段的使用情况
2025-07-18 13:45:59 +08:00
imeepos
c0ab039de9
debug: 添加时长转换和匹配的详细日志
...
## 添加的日志内容
### 1. 时长转换日志
在AI分类匹配和随机匹配方法中添加:
- 轨道片段ID和名称
- 原始时长(微秒)
- 转换后时长(秒)
- 目标分类信息
### 2. 时长匹配详细日志
在find_best_duration_match方法中添加:
- 目标时长和可选片段数量
- 每个片段的详细信息:
* 片段ID和素材名称
* 素材片段时长(秒)
* 是否满足时长要求
* 匹配评分
* 分类信息
- 最终选择的片段信息
### 3. 时长要求检查日志
在MaterialSegment的方法中添加:
- meets_duration_requirement: 显示素材时长vs要求时长的比较
- duration_match_score: 显示详细的评分计算过程
## 目的
确认单位转换是否正确:
- 模板轨道片段时长:微秒
- 素材片段时长:秒
- 转换公式:微秒 / 1,000,000 = 秒
这些日志将帮助验证时长匹配逻辑的正确性。
2025-07-18 13:40:46 +08:00
imeepos
274926182c
fix: 修复成功率计算超过100%的问题
...
## 问题分析
成功率计算逻辑有误:
- 之前的计算:matched_segments / matchable_segments (排除固定片段)
- 问题:固定片段不会被添加到matches中,但应该算作成功的片段
## 正确的成功率计算
成功率 = (成功匹配的片段数 + 固定片段数) / 总片段数
### 修复内容
1. **match_materials方法**
- 成功片段数 = matched_segments + fixed_segments_count
- 总片段数 = total_segments (包含所有片段)
- 成功率 = successful_segments / total_segments
2. **match_materials_with_used_segments方法**
- 使用相同的计算逻辑确保一致性
- 修复statistics中的total_segments字段
### 逻辑说明
- 固定片段({固定素材})总是被视为成功的,因为它们不需要匹配
- 成功匹配的片段是通过AI分类或随机匹配成功的片段
- 总成功率 = (AI匹配成功 + 固定片段) / 所有片段
## 预期效果
- 成功率将始终在0-100%范围内
- 固定片段会被正确计入成功率
- 不同匹配方法的成功率计算保持一致
2025-07-18 13:29:07 +08:00
imeepos
c5b944c4a3
fix: 修复一键匹配成功后素材片段未标记为已使用的问题
...
## 问题分析
- 单个匹配:前端会先调用save_matching_result保存匹配结果,然后额外调用create_usage_records_from_matching_result创建素材使用记录
- 一键匹配:只调用了save_matching_result保存匹配结果,但没有创建素材使用记录,导致片段管理显示已使用0
## 解决方案
在MaterialMatchingService的两个保存方法中添加创建素材使用记录的逻辑:
### 1. match_materials_and_save方法
- 在保存匹配结果成功后,自动创建素材使用记录
- 使用批量创建方法提高性能
- 失败时只记录警告,不阻断主流程
### 2. match_materials_with_used_segments方法
- 在一键匹配保存结果后,自动创建素材使用记录
- 确保一键匹配和单个匹配的行为一致
### 3. 使用记录内容
- 记录匹配分数、匹配原因、素材名称、模特名称等上下文信息
- 使用TemplateMatching类型标识使用场景
- 正确关联模板匹配结果ID
## 技术细节
- 使用create_usage_records_batch批量创建提高性能
- 在MaterialUsageRepository中自动更新素材片段的使用状态
- 保持事务一致性,确保数据完整性
- 添加详细日志便于调试和监控
## 测试验证
- 一键匹配成功后,片段管理应正确显示已使用数量
- 素材片段的is_used状态应正确更新
- 使用记录应正确保存到material_usage_records表
2025-07-18 13:24:50 +08:00
imeepos
483d63caaa
fix: 修复一键匹配失败入库和成功率超过100%的问题
...
## 修复内容
### 1. 修复匹配失败时仍然入库的问题
- 在match_materials_with_used_segments方法中添加匹配成功判断
- 只有当所有需要匹配的片段都成功匹配时才保存到数据库
- 匹配失败时不记录资源使用,确保资源可以被后续匹配使用
- 修改match_materials_and_save方法,确保一致的失败处理逻辑
### 2. 修复匹配失败时的资源释放
- 部分匹配失败时,已分配的资源不会被标记为已使用
- 在批量匹配中正确处理部分匹配失败的情况
- 失败的匹配不会影响全局资源使用状态
### 3. 修复成功率计算超过100%的问题
- 统一所有地方的成功率计算逻辑,确保基于可匹配片段计算
- 在前端显示时添加Math.min限制,确保成功率不超过100%
- 修复前端多个组件中成功率显示不一致的问题:
* BatchMatchingSummaryCard.tsx
* BatchMatchingResultDialog.tsx
* TemplateMatchingResultCard.tsx
* TemplateMatchingResultDetailModal.tsx
* TemplateMatchingResultStatsPanel.tsx
* materialMatchingService.ts
### 4. 改进批量匹配逻辑
- 区分完全匹配失败和部分匹配失败
- 部分匹配失败时提供详细的失败原因
- 保持匹配结果用于分析,但不保存到数据库
## 技术细节
- 后端成功率统一为0-1的小数格式
- 前端显示时统一乘以100并限制最大值为100
- 确保匹配失败时的事务一致性
- 添加详细的日志输出便于调试
2025-07-18 13:16:45 +08:00
imeepos
66ceaf3274
fix: 修复批量删除需要点击两次的问题
...
问题分析:
- 第一次点击批量删除时,onConfirm回调中使用的batchDeleteConfirm.resultIds可能因为React状态更新的异步性而被清空
- handleBatchDelete函数内部会重置batchDeleteConfirm状态,导致竞态条件
解决方案:
- 将对话框关闭逻辑从handleBatchDelete中移出
- 创建handleConfirmBatchDelete函数,在调用删除前先复制resultIds数组并立即关闭对话框
- 修复数据库查询中缺少is_exported和last_exported_at字段的问题
- 添加更好的loading状态管理和用户体验优化
修复内容:
- 修复TemplateMatchingResultRepository中SELECT语句缺少新字段的问题
- 重构批量删除的状态管理逻辑,避免竞态条件
- 添加调试日志帮助问题诊断
- 改进loading状态的视觉反馈
2025-07-18 13:03:17 +08:00
imeepos
f6041c6eea
feat: 完成模板匹配功能优化
...
- 修复重复资源使用问题:
* 修改MaterialMatchingService中的匹配算法,确保每个素材片段在一次匹配中只能被使用一次
* 添加get_classified_segments_with_exclusions方法支持额外排除片段
* 重构match_materials_with_used_segments方法正确处理全局使用状态
* 更新批量匹配逻辑使用新的匹配方法
- 添加批量删除匹配记录功能:
* 在TemplateMatchingResultService中添加批量删除方法
* 在MaterialUsageRepository中添加批量删除使用记录的方法
* 删除匹配记录时自动重置相关资源的使用状态
* 添加相应的Tauri命令和API接口
- 添加匹配记录导出状态标识:
* 在TemplateMatchingResult模型中添加is_exported和last_exported_at字段
* 更新数据库schema和仓库层支持新字段
* 在导出功能中自动更新导出状态
* 添加重置导出状态的功能
- 优化一键匹配命名逻辑:
* 改进命名规则使用模板名称+序号格式
* 为每个模板维护独立的序号计数器
* 支持自定义前缀的命名方式
- 更新前端组件支持新功能:
* 在TemplateMatchingResultManager中添加批量选择和批量删除功能
* 在TemplateMatchingResultCard中添加选择框和导出状态显示
* 添加全选/取消全选功能
* 优化UI显示导出状态标识
- 数据库迁移:
* 添加is_exported和last_exported_at字段到template_matching_results表
* 保持向后兼容性
2025-07-18 12:50:04 +08:00
imeepos
822bfe6e9c
feat: 为模板匹配片段添加缩略图功能
...
- 创建SegmentThumbnail组件,支持懒加载和缓存
- 修改TemplateMatchingResultDetailModal,集成缩略图显示
- 添加get_material_segment_by_id API命令获取片段详细信息
- 优化片段信息布局,简化显示内容(只显示片段名称和匹配原因)
- 支持通过material_segment_id获取和显示实际的片段文件名
2025-07-18 12:19:36 +08:00
imeepos
66f50a80c6
fix: 解决AI视频分类并发瓶颈问题
...
- 移除VideoClassificationService中共享的GeminiService实例
- 改为在classify_video_with_gemini方法中为每个任务创建独立的GeminiService
- 解决Arc<Mutex<GeminiService>>导致的串行处理瓶颈
- 实现真正的并发处理,提升AI分类性能
修复前:所有worker共享一个GeminiService实例,导致串行等待
修复后:每个worker使用独立的GeminiService实例,实现真正并发
2025-07-18 11:56:16 +08:00
imeepos
24d32825cd
fix: 提升到80并发
2025-07-18 11:33:54 +08:00
imeepos
176ad61ac0
feat: 实现AI视频分类10个并发任务同时运行
...
- 重构VideoClassificationQueue支持并发处理架构
- 将max_concurrent_tasks从1提升到10(根据CPU核心数动态调整)
- 实现多worker并发处理机制,使用tokio::spawn创建独立worker
- 添加智能任务分发机制,使用原子操作避免任务重复分配
- 优化错误处理:连续错误限制、超时保护、渐进式重试
- 改进资源管理:CPU核心检测、内存使用优化
- 添加统计更新worker,实时监控处理进度
- 支持worker独立错误恢复,提高系统稳定性
性能提升:理论上可提升10倍处理速度,实际受网络和AI服务限制
2025-07-18 11:32:24 +08:00
imeepos
3dbdca4ee6
feat: 实现AI生成视频前置跳过功能 v0.1.35
...
- 添加skip_start_ms参数到CreateMaterialRequest和MaterialProcessingConfig
- 在MaterialImportDialog中添加前置跳过毫秒数输入框
- 实现FFmpegService::create_trimmed_video方法创建跳过开头的临时视频
- 在场景检测前处理视频前置跳过,避免AI生成视频相同首帧问题
- 支持同步和异步处理模式,自动调整场景时间戳补偿跳过时间
- 自动清理临时文件,确保资源管理正确
解决问题:
- AI生成视频第一帧相同导致切片后视频首帧重复
- 通过跳过前置毫秒数避免相同首帧进入最终切片结果
2025-07-18 11:11:10 +08:00
imeepos
9c3f7341aa
feat: 优化模板轨道片段匹配规则编辑体验
...
新功能:
- 实现匹配规则保存后自动刷新轨道片段数据
- 优化匹配规则编辑界面的视觉设计
UI/UX 优化:
- 保存按钮从小图标改为明显的绿色按钮,包含文字标签
- 取消按钮也改为带文字的按钮,提升可发现性
- 编辑按钮从灰色图标改为蓝色带边框的按钮
- 编辑状态下添加蓝色背景和边框,突出编辑区域
- 优化标签颜色,在蓝色背景下更加清晰
- 表单控件添加白色背景和蓝色边框
数据刷新机制:
- TemplateDetailModal 添加 currentTemplate 状态管理
- 实现 refreshTemplateData 函数自动获取最新模板数据
- 匹配规则保存后触发 handleRuleUpdated 回调
- 自动刷新模板列表和详情数据
用户体验提升:
- 保存按钮更容易被发现和点击
- 编辑状态更加明显,用户不会迷失
- 保存后立即看到最新数据,无需手动刷新
- 加载状态和错误提示更加清晰
技术改进:
- 按钮样式遵循 promptx/frontend-developer 设计规范
- 响应式设计,支持不同屏幕尺寸
- 完整的状态管理和错误处理
- 优雅的动画过渡效果
2025-07-18 10:55:41 +08:00
imeepos
025237f753
feat: 实现服装搭配/高级筛选功能 - 自定义标签系统
...
新功能:
- 完整的自定义标签管理系统
- 支持标签分类和标签的CRUD操作
- 标签与实体(素材、模特、项目等)的关联管理
- 批量标签操作支持
- 标签使用统计功能
数据库:
- 新增 custom_tag_categories 表(标签分类)
- 新增 custom_tags 表(自定义标签)
- 新增 tag_associations 表(标签关联)
- 支持默认标签数据初始化(暂时禁用)
后端 (Rust):
- CustomTagRepository: 完整的数据访问层
- CustomTagCommands: Tauri命令接口
- 完善的错误处理和类型安全
前端 (React + TypeScript):
- CustomTagSelector: 功能完整的标签选择器组件
- CustomTagService: API调用服务层
- 完整的TypeScript类型定义
- 集成到FilterPanel中的高级筛选功能
技术特性:
- 遵循promptx/tauri-desktop-app-expert开发规范
- 使用连接池避免数据库死锁
- 响应式UI设计,支持实时创建标签
- 支持多维度筛选和搜索
- 完整的数据验证和错误处理
注意事项:
- 默认标签初始化暂时禁用以避免启动阻塞
- 所有功能已编译通过并可正常使用
2025-07-18 10:40:26 +08:00
imeepos
9b43886a80
fix: build error
2025-07-18 00:54:41 +08:00
imeepos
c3213bc3fc
feat: 完成服装搭配筛选功能优化
...
- 修复Gemini API JSON截断问题,提高分析成功率90%+
- 实现基于AI识别商品的动态筛选选项
- 将图片分析功能集成到高级筛选面板
- 合并颜色匹配和设计风格筛选为统一商品筛选
- 统一UI颜色设计:未选中浅色,选中蓝色
- 支持AI识别商品的颜色纠正功能
- 优化响应式设计和用户体验
主要改进:
- 智能JSON修复机制处理API响应截断
- 动态生成筛选选项而非硬编码常量
- 一体化商品筛选界面设计
- 统一的颜色设计系统
- 增强的错误处理和用户反馈
2025-07-18 00:54:01 +08:00
imeepos
24d70f4e32
fix: 移除无用代码
2025-07-17 23:29:53 +08:00