From 15138cb8333b890dd1cf8f541f9a17a36bbd186f Mon Sep 17 00:00:00 2001 From: eust-w Date: Tue, 2 Dec 2025 18:54:14 +0800 Subject: [PATCH] :tada: init code --- .cursor/commands/openspec-apply.md | 23 + .cursor/commands/openspec-archive.md | 27 + .cursor/commands/openspec-proposal.md | 27 + .drone.yml | 4 + .farmer.dev.json | 15 + .gitignore | 63 +++ .windsurf/workflows/openspec-apply.md | 21 + .windsurf/workflows/openspec-archive.md | 25 + .windsurf/workflows/openspec-proposal.md | 25 + AGENTS.md | 18 + API.md | 466 ++++++++++++++++ CONFIG.md | 124 +++++ README.md | 295 +++++++++++ app.py | 16 + app/__init__.py | 44 ++ app/config.py | 105 ++++ app/models/__init__.py | 9 + app/models/analysis.py | 143 +++++ app/models/comparison.py | 67 +++ app/models/database.py | 38 ++ app/models/video.py | 103 ++++ app/routes/video_routes.py | 205 +++++++ app/services/analysis_service.py | 163 ++++++ app/services/dashscope_service.py | 499 ++++++++++++++++++ app/services/video_service.py | 144 +++++ app/utils/file_utils.py | 39 ++ app/utils/logger.py | 44 ++ app/utils/validators.py | 53 ++ config copy.yaml | 31 ++ config.yaml | 31 ++ image.png | Bin 0 -> 501305 bytes openspec/AGENTS.md | 456 ++++++++++++++++ .../add-third-party-api-logging/proposal.md | 22 + .../specs/logging/spec.md | 40 ++ .../specs/video-analysis/spec.md | 48 ++ .../add-third-party-api-logging/tasks.md | 26 + .../add-video-analysis-feature/design.md | 175 ++++++ .../add-video-analysis-feature/proposal.md | 23 + .../specs/video-analysis/spec.md | 120 +++++ .../add-video-analysis-feature/tasks.md | 104 ++++ .../proposal.md | 16 + .../fix-dashscope-api-key-validation/tasks.md | 8 + .../ROOT_CAUSE_ANALYSIS.md | 127 +++++ .../fix-dashscope-local-file-path/proposal.md | 33 ++ .../specs/video-analysis/spec.md | 44 ++ .../fix-dashscope-local-file-path/tasks.md | 23 + .../proposal.md | 24 + .../fix-dashscope-video-url-format/tasks.md | 30 ++ .../changes/fix-missing-os-import/proposal.md | 14 + .../changes/fix-missing-os-import/tasks.md | 7 + .../proposal.md | 20 + .../tasks.md | 17 + .../proposal.md | 23 + .../tasks.md | 53 ++ .../changes/remove-env-var-config/design.md | 86 +++ .../changes/remove-env-var-config/proposal.md | 24 + .../specs/config-management/spec.md | 26 + .../specs/video-analysis/spec.md | 26 + .../changes/remove-env-var-config/tasks.md | 40 ++ openspec/config.json | 3 + openspec/project.md | 31 ++ requirements.txt | 8 + start.bat | 30 ++ start.sh | 28 + static/app.js | 440 +++++++++++++++ static/index.html | 81 +++ static/style.css | 382 ++++++++++++++ uploads/.gitkeep | 2 + 68 files changed, 5527 insertions(+) create mode 100644 .cursor/commands/openspec-apply.md create mode 100644 .cursor/commands/openspec-archive.md create mode 100644 .cursor/commands/openspec-proposal.md create mode 100644 .drone.yml create mode 100644 .farmer.dev.json create mode 100644 .gitignore create mode 100644 .windsurf/workflows/openspec-apply.md create mode 100644 .windsurf/workflows/openspec-archive.md create mode 100644 .windsurf/workflows/openspec-proposal.md create mode 100644 AGENTS.md create mode 100644 API.md create mode 100644 CONFIG.md create mode 100644 README.md create mode 100644 app.py create mode 100644 app/__init__.py create mode 100644 app/config.py create mode 100644 app/models/__init__.py create mode 100644 app/models/analysis.py create mode 100644 app/models/comparison.py create mode 100644 app/models/database.py create mode 100644 app/models/video.py create mode 100644 app/routes/video_routes.py create mode 100644 app/services/analysis_service.py create mode 100644 app/services/dashscope_service.py create mode 100644 app/services/video_service.py create mode 100644 app/utils/file_utils.py create mode 100644 app/utils/logger.py create mode 100644 app/utils/validators.py create mode 100644 config copy.yaml create mode 100644 config.yaml create mode 100644 image.png create mode 100644 openspec/AGENTS.md create mode 100644 openspec/changes/add-third-party-api-logging/proposal.md create mode 100644 openspec/changes/add-third-party-api-logging/specs/logging/spec.md create mode 100644 openspec/changes/add-third-party-api-logging/specs/video-analysis/spec.md create mode 100644 openspec/changes/add-third-party-api-logging/tasks.md create mode 100644 openspec/changes/add-video-analysis-feature/design.md create mode 100644 openspec/changes/add-video-analysis-feature/proposal.md create mode 100644 openspec/changes/add-video-analysis-feature/specs/video-analysis/spec.md create mode 100644 openspec/changes/add-video-analysis-feature/tasks.md create mode 100644 openspec/changes/fix-dashscope-api-key-validation/proposal.md create mode 100644 openspec/changes/fix-dashscope-api-key-validation/tasks.md create mode 100644 openspec/changes/fix-dashscope-local-file-path/ROOT_CAUSE_ANALYSIS.md create mode 100644 openspec/changes/fix-dashscope-local-file-path/proposal.md create mode 100644 openspec/changes/fix-dashscope-local-file-path/specs/video-analysis/spec.md create mode 100644 openspec/changes/fix-dashscope-local-file-path/tasks.md create mode 100644 openspec/changes/fix-dashscope-video-url-format/proposal.md create mode 100644 openspec/changes/fix-dashscope-video-url-format/tasks.md create mode 100644 openspec/changes/fix-missing-os-import/proposal.md create mode 100644 openspec/changes/fix-missing-os-import/tasks.md create mode 100644 openspec/changes/fix-video-model-indentation-error/proposal.md create mode 100644 openspec/changes/fix-video-model-indentation-error/tasks.md create mode 100644 openspec/changes/improve-dashscope-api-key-error-handling/proposal.md create mode 100644 openspec/changes/improve-dashscope-api-key-error-handling/tasks.md create mode 100644 openspec/changes/remove-env-var-config/design.md create mode 100644 openspec/changes/remove-env-var-config/proposal.md create mode 100644 openspec/changes/remove-env-var-config/specs/config-management/spec.md create mode 100644 openspec/changes/remove-env-var-config/specs/video-analysis/spec.md create mode 100644 openspec/changes/remove-env-var-config/tasks.md create mode 100644 openspec/config.json create mode 100644 openspec/project.md create mode 100644 requirements.txt create mode 100644 start.bat create mode 100755 start.sh create mode 100644 static/app.js create mode 100644 static/index.html create mode 100644 static/style.css create mode 100644 uploads/.gitkeep diff --git a/.cursor/commands/openspec-apply.md b/.cursor/commands/openspec-apply.md new file mode 100644 index 0000000..778249c --- /dev/null +++ b/.cursor/commands/openspec-apply.md @@ -0,0 +1,23 @@ +--- +name: /openspec-apply +id: openspec-apply +category: OpenSpec +description: Implement an approved OpenSpec change and keep tasks in sync. +--- + +**约束条件** +- 优先采用简单、最小化的实现,只有在明确要求或明显需要时才添加复杂性。 +- 保持更改紧密围绕请求的结果。 +- 如需更多 OpenSpec 约定或说明,请参考 `openspec/AGENTS.md`(位于 `openspec/` 目录中——如果看不到,请运行 `ls openspec` 或 `openspec update`)。 + +**步骤** +将这些步骤作为待办事项跟踪,逐一完成。 +1. 阅读 `changes//proposal.md`、`design.md`(如果存在)和 `tasks.md` 以确认范围和验收标准。 +2. 按顺序完成任务,保持编辑最小化并专注于请求的更改。 +3. 在更新状态之前确认完成——确保 `tasks.md` 中的每个项目都已完成。 +4. 在所有工作完成后更新清单,以便每个任务都标记为 `- [x]` 并反映实际情况。 +5. 需要额外上下文时,参考 `openspec list` 或 `openspec show `。 + +**参考** +- 如果在实施过程中需要提案的额外上下文,请使用 `openspec show --json --deltas-only`。 + diff --git a/.cursor/commands/openspec-archive.md b/.cursor/commands/openspec-archive.md new file mode 100644 index 0000000..a4792cf --- /dev/null +++ b/.cursor/commands/openspec-archive.md @@ -0,0 +1,27 @@ +--- +name: /openspec-archive +id: openspec-archive +category: OpenSpec +description: Archive a deployed OpenSpec change and update specs. +--- + +**约束条件** +- 优先采用简单、最小化的实现,只有在明确要求或明显需要时才添加复杂性。 +- 保持更改紧密围绕请求的结果。 +- 如需更多 OpenSpec 约定或说明,请参考 `openspec/AGENTS.md`(位于 `openspec/` 目录中——如果看不到,请运行 `ls openspec` 或 `openspec update`)。 + +**步骤** +1. 确定要归档的变更 ID: + - 如果此提示已包含特定的变更 ID(例如在由斜杠命令参数填充的 `` 块内),请在修剪空白后使用该值。 + - 如果对话中松散地引用了变更(例如通过标题或摘要),运行 `openspec list` 以显示可能的 ID,分享相关候选,并确认用户打算使用哪一个。 + - 否则,查看对话,运行 `openspec list`,并询问用户要归档哪个变更;在继续之前等待确认的变更 ID。 + - 如果您仍然无法识别单个变更 ID,请停止并告诉用户您还无法归档任何内容。 +2. 通过运行 `openspec list`(或 `openspec show `)验证变更 ID,如果变更缺失、已归档或尚未准备好归档,则停止。 +3. 运行 `openspec archive --yes`,以便 CLI 移动变更并应用规范更新而不提示(仅对仅工具工作使用 `--skip-specs`)。 +4. 查看命令输出以确认目标规范已更新,并且变更已进入 `changes/archive/`。 +5. 使用 `openspec validate --strict` 进行验证,如果看起来有问题,请使用 `openspec show ` 进行检查。 + +**参考** +- 在归档之前使用 `openspec list` 确认变更 ID。 +- 使用 `openspec list --specs` 检查刷新的规范,并在移交之前解决任何验证问题。 + diff --git a/.cursor/commands/openspec-proposal.md b/.cursor/commands/openspec-proposal.md new file mode 100644 index 0000000..9268005 --- /dev/null +++ b/.cursor/commands/openspec-proposal.md @@ -0,0 +1,27 @@ +--- +name: /openspec-proposal +id: openspec-proposal +category: OpenSpec +description: Scaffold a new OpenSpec change and validate strictly. +--- + +**约束条件** +- 优先采用简单、最小化的实现,只有在明确要求或明显需要时才添加复杂性。 +- 保持更改紧密围绕请求的结果。 +- 如需更多 OpenSpec 约定或说明,请参考 `openspec/AGENTS.md`(位于 `openspec/` 目录中——如果看不到,请运行 `ls openspec` 或 `openspec update`)。 +- 识别任何模糊或含糊的细节,在编辑文件之前提出必要的后续问题。 + +**步骤** +1. 查看 `openspec/project.md`,运行 `openspec list` 和 `openspec list --specs`,并检查相关代码或文档(例如通过 `rg`/`ls`)以了解当前行为;注意任何需要澄清的空白。 +2. 选择一个唯一的动词引导的 `change-id`,并在 `openspec/changes//` 下搭建 `proposal.md`、`tasks.md` 和 `design.md`(需要时)。 +3. 将变更映射到具体的能力或需求,将多范围的工作分解为具有明确关系和顺序的不同规范增量。 +4. 当解决方案跨越多个系统、引入新模式或需要在提交规范之前进行权衡讨论时,在 `design.md` 中捕获架构推理。 +5. 在 `changes//specs//spec.md` 中起草规范增量(每个能力一个文件夹),使用 `## ADDED|MODIFIED|REMOVED Requirements`,每个需求至少包含一个 `#### Scenario:`,并在相关时交叉引用相关能力。 +6. 将 `tasks.md` 起草为有序的小型、可验证工作项列表,这些工作项提供用户可见的进度,包括验证(测试、工具),并突出依赖关系或可并行化的工作。 +7. 使用 `openspec validate --strict` 进行验证,并在分享提案之前解决所有问题。 + +**参考** +- 当验证失败时,使用 `openspec show --json --deltas-only` 或 `openspec show --type spec` 检查详细信息。 +- 在编写新需求之前,使用 `rg -n "Requirement:|Scenario:" openspec/specs` 搜索现有需求。 +- 使用 `rg `、`ls` 或直接文件读取来探索代码库,以便提案与当前实现现实保持一致。 + diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..0959d4f --- /dev/null +++ b/.drone.yml @@ -0,0 +1,4 @@ +kind: template +load: buildgo.jsonnet +data: + deployName: "videosummary" \ No newline at end of file diff --git a/.farmer.dev.json b/.farmer.dev.json new file mode 100644 index 0000000..97df1af --- /dev/null +++ b/.farmer.dev.json @@ -0,0 +1,15 @@ +{ + "app_id": "videosummary", + "deploy_name": "videosummary", + "service_name": "videosummary", + "app_label": "videosummary", + "image_repo": "ccr-29eug8s3-vpc.cnc.bj.baidubce.com/dcloud/videosummary", + "replicas": 1, + "commands": ["app"], + "ports": [ + { + "port": 80, + "protocol": "tcp" + } + ] + } \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e21a3c4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,63 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Virtual Environment +venv/ +env/ +ENV/ +.venv + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Environment variables +.env +.env.local + +# Config file with sensitive data (optional, uncomment if needed) +# config.yaml + +# Uploads +uploads/* +!uploads/.gitkeep + +# Logs +*.log +logs/ + +# OS +.DS_Store +Thumbs.db + +# MongoDB +*.db + +# Temporary files +*.tmp +*.temp + +# config.yaml +*config.yaml diff --git a/.windsurf/workflows/openspec-apply.md b/.windsurf/workflows/openspec-apply.md new file mode 100644 index 0000000..b42d374 --- /dev/null +++ b/.windsurf/workflows/openspec-apply.md @@ -0,0 +1,21 @@ +--- +description: Implement an approved OpenSpec change and keep tasks in sync. +auto_execution_mode: 3 +--- + +**约束条件** +- 优先采用简单、最小化的实现,只有在明确要求或明显需要时才添加复杂性。 +- 保持更改紧密围绕请求的结果。 +- 如需更多 OpenSpec 约定或说明,请参考 `openspec/AGENTS.md`(位于 `openspec/` 目录中——如果看不到,请运行 `ls openspec` 或 `openspec update`)。 + +**步骤** +将这些步骤作为待办事项跟踪,逐一完成。 +1. 阅读 `changes//proposal.md`、`design.md`(如果存在)和 `tasks.md` 以确认范围和验收标准。 +2. 按顺序完成任务,保持编辑最小化并专注于请求的更改。 +3. 在更新状态之前确认完成——确保 `tasks.md` 中的每个项目都已完成。 +4. 在所有工作完成后更新清单,以便每个任务都标记为 `- [x]` 并反映实际情况。 +5. 需要额外上下文时,参考 `openspec list` 或 `openspec show `。 + +**参考** +- 如果在实施过程中需要提案的额外上下文,请使用 `openspec show --json --deltas-only`。 + diff --git a/.windsurf/workflows/openspec-archive.md b/.windsurf/workflows/openspec-archive.md new file mode 100644 index 0000000..46f7542 --- /dev/null +++ b/.windsurf/workflows/openspec-archive.md @@ -0,0 +1,25 @@ +--- +description: Archive a deployed OpenSpec change and update specs. +auto_execution_mode: 3 +--- + +**约束条件** +- 优先采用简单、最小化的实现,只有在明确要求或明显需要时才添加复杂性。 +- 保持更改紧密围绕请求的结果。 +- 如需更多 OpenSpec 约定或说明,请参考 `openspec/AGENTS.md`(位于 `openspec/` 目录中——如果看不到,请运行 `ls openspec` 或 `openspec update`)。 + +**步骤** +1. 确定要归档的变更 ID: + - 如果此提示已包含特定的变更 ID(例如在由斜杠命令参数填充的 `` 块内),请在修剪空白后使用该值。 + - 如果对话中松散地引用了变更(例如通过标题或摘要),运行 `openspec list` 以显示可能的 ID,分享相关候选,并确认用户打算使用哪一个。 + - 否则,查看对话,运行 `openspec list`,并询问用户要归档哪个变更;在继续之前等待确认的变更 ID。 + - 如果您仍然无法识别单个变更 ID,请停止并告诉用户您还无法归档任何内容。 +2. 通过运行 `openspec list`(或 `openspec show `)验证变更 ID,如果变更缺失、已归档或尚未准备好归档,则停止。 +3. 运行 `openspec archive --yes`,以便 CLI 移动变更并应用规范更新而不提示(仅对仅工具工作使用 `--skip-specs`)。 +4. 查看命令输出以确认目标规范已更新,并且变更已进入 `changes/archive/`。 +5. 使用 `openspec validate --strict` 进行验证,如果看起来有问题,请使用 `openspec show ` 进行检查。 + +**参考** +- 在归档之前使用 `openspec list` 确认变更 ID。 +- 使用 `openspec list --specs` 检查刷新的规范,并在移交之前解决任何验证问题。 + diff --git a/.windsurf/workflows/openspec-proposal.md b/.windsurf/workflows/openspec-proposal.md new file mode 100644 index 0000000..5284899 --- /dev/null +++ b/.windsurf/workflows/openspec-proposal.md @@ -0,0 +1,25 @@ +--- +description: Scaffold a new OpenSpec change and validate strictly. +auto_execution_mode: 3 +--- + +**约束条件** +- 优先采用简单、最小化的实现,只有在明确要求或明显需要时才添加复杂性。 +- 保持更改紧密围绕请求的结果。 +- 如需更多 OpenSpec 约定或说明,请参考 `openspec/AGENTS.md`(位于 `openspec/` 目录中——如果看不到,请运行 `ls openspec` 或 `openspec update`)。 +- 识别任何模糊或含糊的细节,在编辑文件之前提出必要的后续问题。 + +**步骤** +1. 查看 `openspec/project.md`,运行 `openspec list` 和 `openspec list --specs`,并检查相关代码或文档(例如通过 `rg`/`ls`)以了解当前行为;注意任何需要澄清的空白。 +2. 选择一个唯一的动词引导的 `change-id`,并在 `openspec/changes//` 下搭建 `proposal.md`、`tasks.md` 和 `design.md`(需要时)。 +3. 将变更映射到具体的能力或需求,将多范围的工作分解为具有明确关系和顺序的不同规范增量。 +4. 当解决方案跨越多个系统、引入新模式或需要在提交规范之前进行权衡讨论时,在 `design.md` 中捕获架构推理。 +5. 在 `changes//specs//spec.md` 中起草规范增量(每个能力一个文件夹),使用 `## ADDED|MODIFIED|REMOVED Requirements`,每个需求至少包含一个 `#### Scenario:`,并在相关时交叉引用相关能力。 +6. 将 `tasks.md` 起草为有序的小型、可验证工作项列表,这些工作项提供用户可见的进度,包括验证(测试、工具),并突出依赖关系或可并行化的工作。 +7. 使用 `openspec validate --strict` 进行验证,并在分享提案之前解决所有问题。 + +**参考** +- 当验证失败时,使用 `openspec show --json --deltas-only` 或 `openspec show --type spec` 检查详细信息。 +- 在编写新需求之前,使用 `rg -n "Requirement:|Scenario:" openspec/specs` 搜索现有需求。 +- 使用 `rg `、`ls` 或直接文件读取来探索代码库,以便提案与当前实现现实保持一致。 + diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..7ef7fa6 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,18 @@ + +# OpenSpec 说明 + +这些说明适用于在此项目中工作的 AI 助手。 + +当请求涉及以下情况时,请始终打开 `@/openspec/AGENTS.md`: +- 提及规划或提案(如 proposal、spec、change、plan 等词) +- 引入新功能、破坏性变更、架构调整或重大的性能/安全工作 +- 听起来模糊不清,需要在编码前查看权威规范 + +使用 `@/openspec/AGENTS.md` 了解: +- 如何创建和应用变更提案 +- 规范格式和约定 +- 项目结构和指南 + +保留此托管块,以便 'openspec update' 可以刷新说明。 + + \ No newline at end of file diff --git a/API.md b/API.md new file mode 100644 index 0000000..71f3bc7 --- /dev/null +++ b/API.md @@ -0,0 +1,466 @@ +# Video Analysis API 文档 + +## 概述 + +Video Analysis API 提供视频上传、内容分析、总结生成和视频对比功能。所有 API 端点都遵循 RESTful 设计原则。 + +**Base URL**: `http://localhost:8080/api/videos` + +## 通用响应格式 + +### 成功响应 +```json +{ + "success": true, + "data": { ... }, + "message": "操作成功" +} +``` + +### 错误响应 +```json +{ + "success": false, + "message": "错误信息" +} +``` + +## API 端点 + +### 1. 上传视频 + +上传视频文件到服务器。 + +**端点**: `POST /api/videos/upload` + +**请求格式**: `multipart/form-data` + +**请求参数**: +- `file` (file, required): 视频文件 + +**支持的视频格式**: mp4, avi, mov, mkv, wmv, flv, webm + +**文件大小限制**: 500MB + +**响应示例**: +```json +{ + "success": true, + "data": { + "video_id": "507f1f77bcf86cd799439011", + "filename": "example.mp4", + "file_size": 10485760, + "status": "uploaded", + "upload_time": "2024-01-15T10:30:00.000Z" + }, + "message": "Video uploaded successfully" +} +``` + +**错误响应**: +- `400`: 文件格式不支持或文件大小超限 +- `500`: 服务器内部错误 + +--- + +### 2. 获取视频列表 + +获取所有已上传的视频列表。 + +**端点**: `GET /api/videos` + +**查询参数**: +- `limit` (integer, optional): 返回数量限制,默认 100 +- `skip` (integer, optional): 跳过数量,默认 0 + +**响应示例**: +```json +{ + "success": true, + "data": [ + { + "id": "507f1f77bcf86cd799439011", + "filename": "example.mp4", + "file_size": 10485760, + "status": "analyzed", + "upload_time": "2024-01-15T10:30:00.000Z" + } + ] +} +``` + +--- + +### 3. 获取视频详情 + +获取指定视频的详细信息,包括分析结果和总结。 + +**端点**: `GET /api/videos/{video_id}` + +**路径参数**: +- `video_id` (string, required): 视频 ID + +**响应示例**: +```json +{ + "success": true, + "data": { + "id": "507f1f77bcf86cd799439011", + "filename": "example.mp4", + "file_path": "/path/to/video.mp4", + "file_size": 10485760, + "mime_type": "video/mp4", + "status": "analyzed", + "upload_time": "2024-01-15T10:30:00.000Z", + "analysis": { + "id": "507f1f77bcf86cd799439012", + "content": "这段视频描绘了...", + "fps": 2, + "created_at": "2024-01-15T10:35:00.000Z" + }, + "summary": { + "id": "507f1f77bcf86cd799439013", + "summary_text": "视频主要内容总结...", + "created_at": "2024-01-15T10:40:00.000Z" + } + } +} +``` + +**错误响应**: +- `404`: 视频不存在 + +--- + +### 4. 分析视频内容 + +使用阿里云 DashScope API 分析视频内容。 + +**端点**: `POST /api/videos/{video_id}/analyze` + +**路径参数**: +- `video_id` (string, required): 视频 ID + +**请求体** (可选): +```json +{ + "prompt": "自定义分析提示词" +} +``` + +**响应示例**: +```json +{ + "success": true, + "data": { + "id": "507f1f77bcf86cd799439012", + "video_id": "507f1f77bcf86cd799439011", + "content": "这段视频描绘了...", + "fps": 2, + "created_at": "2024-01-15T10:35:00.000Z" + }, + "message": "Video analyzed successfully" +} +``` + +**错误响应**: +- `400`: 视频不存在或分析失败 +- `404`: 视频不存在 + +**注意**: 分析过程可能需要较长时间,取决于视频长度。 + +--- + +### 5. 生成视频总结 + +为视频生成内容总结。 + +**端点**: `POST /api/videos/{video_id}/summarize` + +**路径参数**: +- `video_id` (string, required): 视频 ID + +**响应示例**: +```json +{ + "success": true, + "data": { + "id": "507f1f77bcf86cd799439013", + "video_id": "507f1f77bcf86cd799439011", + "summary_text": "这段视频主要讲述了...", + "created_at": "2024-01-15T10:40:00.000Z" + }, + "message": "Summary generated successfully" +} +``` + +**错误响应**: +- `400`: 视频不存在或总结生成失败 +- `404`: 视频不存在 + +--- + +### 6. 获取视频总结 + +获取视频的总结内容。 + +**端点**: `GET /api/videos/{video_id}/summary` + +**路径参数**: +- `video_id` (string, required): 视频 ID + +**响应示例**: +```json +{ + "success": true, + "data": { + "id": "507f1f77bcf86cd799439013", + "video_id": "507f1f77bcf86cd799439011", + "summary_text": "这段视频主要讲述了...", + "created_at": "2024-01-15T10:40:00.000Z" + } +} +``` + +**错误响应**: +- `404`: 总结不存在 + +--- + +### 7. 对比多个视频 + +对比多个视频的内容,找出相似之处和不同之处。 + +**端点**: `POST /api/videos/compare` + +**请求体**: +```json +{ + "video_ids": [ + "507f1f77bcf86cd799439011", + "507f1f77bcf86cd799439014" + ] +} +``` + +**请求参数**: +- `video_ids` (array, required): 视频 ID 数组,至少需要 2 个 + +**响应示例**: +```json +{ + "success": true, + "data": { + "id": "507f1f77bcf86cd799439015", + "video_ids": [ + "507f1f77bcf86cd799439011", + "507f1f77bcf86cd799439014" + ], + "comparison_result": "这两个视频的相似之处是...不同之处是...", + "created_at": "2024-01-15T11:00:00.000Z" + }, + "message": "Comparison completed successfully" +} +``` + +**错误响应**: +- `400`: 视频数量不足或对比失败 +- `404`: 某个视频不存在 + +--- + +### 8. 获取对比结果 + +获取指定对比任务的结果。 + +**端点**: `GET /api/videos/compare/{comparison_id}` + +**路径参数**: +- `comparison_id` (string, required): 对比任务 ID + +**响应示例**: +```json +{ + "success": true, + "data": { + "id": "507f1f77bcf86cd799439015", + "video_ids": [ + "507f1f77bcf86cd799439011", + "507f1f77bcf86cd799439014" + ], + "comparison_result": "这两个视频的相似之处是...不同之处是...", + "created_at": "2024-01-15T11:00:00.000Z" + } +} +``` + +**错误响应**: +- `404`: 对比结果不存在 + +--- + +## 状态码说明 + +### 视频状态 (status) +- `uploaded`: 已上传,等待分析 +- `analyzing`: 分析中 +- `analyzed`: 已分析完成 +- `failed`: 分析失败 + +--- + +## 错误码说明 + +| HTTP 状态码 | 说明 | +|------------|------| +| 200 | 请求成功 | +| 201 | 创建成功 | +| 400 | 请求参数错误 | +| 404 | 资源不存在 | +| 500 | 服务器内部错误 | + +--- + +## 使用示例 + +### cURL 示例 + +#### 上传视频 +```bash +curl -X POST http://localhost:8080/api/videos/upload \ + -F "file=@/path/to/video.mp4" +``` + +#### 分析视频 +```bash +curl -X POST http://localhost:8080/api/videos/507f1f77bcf86cd799439011/analyze \ + -H "Content-Type: application/json" +``` + +#### 生成总结 +```bash +curl -X POST http://localhost:8080/api/videos/507f1f77bcf86cd799439011/summarize \ + -H "Content-Type: application/json" +``` + +#### 对比视频 +```bash +curl -X POST http://localhost:8080/api/videos/compare \ + -H "Content-Type: application/json" \ + -d '{ + "video_ids": [ + "507f1f77bcf86cd799439011", + "507f1f77bcf86cd799439014" + ] + }' +``` + +### Python 示例 + +```python +import requests + +# 上传视频 +with open('video.mp4', 'rb') as f: + response = requests.post( + 'http://localhost:8080/api/videos/upload', + files={'file': f} + ) + video_data = response.json() + video_id = video_data['data']['video_id'] + +# 分析视频 +response = requests.post( + f'http://localhost:8080/api/videos/{video_id}/analyze' +) +analysis = response.json() + +# 生成总结 +response = requests.post( + f'http://localhost:8080/api/videos/{video_id}/summarize' +) +summary = response.json() + +# 对比视频 +response = requests.post( + 'http://localhost:8080/api/videos/compare', + json={ + 'video_ids': ['video_id_1', 'video_id_2'] + } +) +comparison = response.json() +``` + +### JavaScript 示例 + +```javascript +// 上传视频 +const formData = new FormData(); +formData.append('file', fileInput.files[0]); + +fetch('http://localhost:8080/api/videos/upload', { + method: 'POST', + body: formData +}) +.then(response => response.json()) +.then(data => { + console.log('Uploaded:', data.data.video_id); +}); + +// 分析视频 +fetch(`http://localhost:8080/api/videos/${videoId}/analyze`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + } +}) +.then(response => response.json()) +.then(data => { + console.log('Analysis:', data.data.content); +}); +``` + +--- + +## 配置要求 + +### 主要配置:config.yaml + +所有配置主要在 `config.yaml` 文件中设置: + +```yaml +dashscope: + api_key: "your-dashscope-api-key" # 必需 + +mongodb: + uri: "mongodb://localhost:27017" + database: "videoSummary" + +server: + host: "0.0.0.0" + port: 8080 + mode: "debug" +``` + +**注意**: +- 所有配置均在 `config.yaml` 文件中设置 +- 请确保配置文件中的值正确 + +--- + +## 注意事项 + +1. **API Key 安全**: 请确保 DashScope API Key 在 `config.yaml` 中设置,不要将包含 API Key 的 `config.yaml` 提交到代码仓库 +2. **文件大小**: 当前限制为 500MB,可在 `config.yaml` 中配置 +3. **处理时间**: 视频分析和总结生成可能需要较长时间,取决于视频长度和 API 响应速度 +4. **CORS**: API 已启用 CORS,支持跨域请求 +5. **错误处理**: 所有 API 调用都应检查 `success` 字段并处理错误情况 + +--- + +## 更新日志 + +### v1.0.0 (2024-01-15) +- 初始版本发布 +- 支持视频上传、分析、总结和对比功能 + diff --git a/CONFIG.md b/CONFIG.md new file mode 100644 index 0000000..c7ca51b --- /dev/null +++ b/CONFIG.md @@ -0,0 +1,124 @@ +# 配置说明文档 + +本文档说明运行视频分析服务需要配置的内容。 + +## 必须配置项 + +### 1. DashScope API Key(必需) + +**用途**: 用于调用阿里云 DashScope 多模态 API 进行视频分析 + +**配置方式**: 在 `config.yaml` 文件中配置 + ```yaml + dashscope: + api_key: "your-api-key-here" + ``` + +**获取方式**: +- 访问 https://dashscope.console.aliyun.com/ +- 注册/登录阿里云账号 +- 创建 API Key + +### 2. MongoDB 连接(必需) + +**用途**: 存储视频元数据和分析结果 + +**配置方式**: 在 `config.yaml` 文件中配置 + ```yaml + mongodb: + uri: "mongodb://localhost:27017" + database: "videoSummary" + ``` + +**要求**: +- 确保 MongoDB 服务已启动 +- 确保数据库可访问 + +## 可选配置项 + +### 服务器配置 + +```yaml +server: + host: "0.0.0.0" # 监听地址,默认 0.0.0.0 + port: 8080 # 监听端口,默认 8080 + mode: "debug" # 运行模式: debug, release, test +``` + +### DashScope 模型配置 + +```yaml +dashscope: + model: "qwen3-vl-plus" # 多模态模型名称 + fps: 2 # 视频抽帧频率(每秒帧数) +``` + +### 文件上传配置 + +```yaml +upload: + max_size: 524288000 # 最大文件大小(字节),默认 500MB + allowed_extensions: ["mp4", "avi", "mov", "mkv", "wmv", "flv", "webm"] +``` + +### MongoDB 连接池配置 + +```yaml +mongodb: + max_pool_size: 100 # 最大连接数 + min_pool_size: 10 # 最小连接数 +``` + +### 日志配置 + +```yaml +log: + level: "info" # 日志级别: debug, info, warn, error + format: "json" # 日志格式: json, text + output: "stdout" # 输出位置: stdout 或文件路径 +``` + +## 配置来源 + +所有配置均从 `config.yaml` 文件读取。 + +## 快速开始 + +### 最小配置 + +只需要配置以下两项即可运行: + +1. **DashScope API Key**(在 `config.yaml` 中设置) +2. **MongoDB 连接**(确保 MongoDB 运行在默认地址 `mongodb://localhost:27017`) + +### 配置示例 + +```yaml +# config.yaml 最小配置示例 +dashscope: + api_key: "sk-your-api-key-here" + +mongodb: + uri: "mongodb://localhost:27017" + database: "videoSummary" +``` + +## 注意事项 + +1. **API Key 安全**: + - 不要将 API Key 提交到版本控制系统 + - 建议将 `config.yaml` 添加到 `.gitignore` 或使用配置模板文件 + +2. **MongoDB 连接**: + - 确保 MongoDB 服务已启动 + - 生产环境建议配置认证和 SSL + +3. **文件上传大小**: + - 根据服务器资源调整 `max_size` + - 大文件上传可能需要更长的处理时间 + +4. **DashScope FPS 参数**: + - 较低的 fps 值可以减少 API 调用成本,但可能丢失细节 + - 较高的 fps 值可以获得更详细的分析,但成本更高 + - 默认值 2 是平衡性能和成本的选择 + diff --git a/README.md b/README.md new file mode 100644 index 0000000..d0bbe9e --- /dev/null +++ b/README.md @@ -0,0 +1,295 @@ +# Video Summary - 视频分析与总结系统 + +基于 Python Flask 和阿里云 DashScope API 的视频内容分析与总结系统。 + +![系统界面](image.png) + +## 功能特性 + +- 📹 **视频上传**: 支持多种视频格式上传(mp4, avi, mov, mkv, wmv, flv, webm) +- 🔍 **视频分析**: 使用阿里云 DashScope 多模态 API 分析视频内容 +- 📝 **自动总结**: 自动生成视频内容摘要 +- 🔄 **视频对比**: 支持多个视频之间的内容对比分析 +- 🎨 **现代化前端**: 简洁美观的静态前端界面 + +## 技术栈 + +- **后端**: Python Flask +- **数据库**: MongoDB +- **AI 服务**: 阿里云 DashScope (qwen3-vl-plus) +- **前端**: HTML/CSS/JavaScript (静态页面) + +## 项目结构 + +``` +videoSummary/ +├── app/ +│ ├── __init__.py # Flask 应用初始化 +│ ├── config.py # 配置管理 +│ ├── routes/ # API 路由 +│ │ └── video_routes.py +│ ├── services/ # 业务逻辑服务 +│ │ ├── video_service.py +│ │ ├── dashscope_service.py +│ │ └── analysis_service.py +│ ├── models/ # 数据模型 +│ │ ├── video.py +│ │ ├── analysis.py +│ │ └── comparison.py +│ └── utils/ # 工具函数 +│ ├── logger.py +│ ├── validators.py +│ └── file_utils.py +├── static/ # 静态前端文件 +│ ├── index.html +│ ├── style.css +│ └── app.js +├── uploads/ # 视频文件存储目录 +├── config.yaml # 配置文件 +├── requirements.txt # Python 依赖 +├── app.py # 应用入口 +├── API.md # API 文档 +└── README.md # 项目说明 +``` + +## 快速开始 + +### 1. 环境要求 + +- Python 3.8+ +- MongoDB 4.0+ +- 阿里云 DashScope API Key + +### 2. 安装依赖 + +#### 方式一:使用启动脚本(推荐) + +**Linux/Mac:** +```bash +./start.sh +``` + +**Windows:** +```cmd +start.bat +``` + +启动脚本会自动: +- 创建虚拟环境(如果不存在) +- 激活虚拟环境 +- 安装/更新依赖 +- 启动应用 + +#### 方式二:手动安装 + +```bash +# 创建虚拟环境 +python3 -m venv venv + +# 激活虚拟环境 +source venv/bin/activate # Linux/Mac +# 或 +venv\Scripts\activate # Windows + +# 安装依赖 +pip install -r requirements.txt +``` + +### 3. 配置 + +#### 主要配置方式:config.yaml(推荐) + +编辑 `config.yaml` 文件,设置所有配置项: + +```yaml +# DashScope API Configuration +dashscope: + api_key: "your-dashscope-api-key" # 必需:设置你的 DashScope API Key + +# MongoDB Configuration +mongodb: + uri: "mongodb://localhost:27017" + database: "videoSummary" + +# Server Configuration +server: + host: "0.0.0.0" + port: 8080 + mode: "debug" +``` + +**所有配置都在 `config.yaml` 中管理,这是主要的配置方式。** + +**注意**: +- 所有配置均在 `config.yaml` 文件中设置 +- 请确保配置文件中的值正确 + +### 4. 配置 DashScope API Key + +在 `config.yaml` 文件中设置你的 DashScope API Key: + +```yaml +dashscope: + api_key: "your-dashscope-api-key-here" +``` + +**重要**: 必须设置 `dashscope.api_key` 才能使用视频分析功能。 + +# 5. 启动 MongoDB + +确保 MongoDB 服务正在运行: + +```bash +# Linux/Mac +mongod + +# Windows +# 启动 MongoDB 服务 +``` + +### 6. 运行应用 + +#### 使用启动脚本(推荐) + +**Linux/Mac:** +```bash +./start.sh +``` + +**Windows:** +```cmd +start.bat +``` + +#### 手动运行 + +确保已激活虚拟环境,然后运行: + +```bash +# 激活虚拟环境 +source venv/bin/activate # Linux/Mac +# 或 +venv\Scripts\activate # Windows + +# 运行应用 +python app.py +``` + +应用将在 `http://localhost:8080` 启动。 + +### 6. 访问前端 + +在浏览器中打开 `http://localhost:8080/static/index.html` + +## API 使用 + +详细的 API 文档请参考 [API.md](API.md) + +### 快速示例 + +#### 上传视频 +```bash +curl -X POST http://localhost:8080/api/videos/upload \ + -F "file=@video.mp4" +``` + +#### 分析视频 +```bash +curl -X POST http://localhost:8080/api/videos/{video_id}/analyze +``` + +#### 生成总结 +```bash +curl -X POST http://localhost:8080/api/videos/{video_id}/summarize +``` + +#### 对比视频 +```bash +curl -X POST http://localhost:8080/api/videos/compare \ + -H "Content-Type: application/json" \ + -d '{"video_ids": ["id1", "id2"]}' +``` + +## 配置说明 + +### config.yaml + +主要配置项: + +- **server**: 服务器配置(host, port, mode) +- **mongodb**: MongoDB 连接配置 +- **dashscope**: DashScope API 配置(api_key, model, fps) +- **upload**: 上传配置(max_size, allowed_extensions) +- **log**: 日志配置(level, format, output) + +### 配置说明 + +所有配置项均在 `config.yaml` 文件中设置。详细配置说明请参考 `CONFIG.md` 文档。 + +## 开发 + +### 项目结构说明 + +- **app/**: Flask 应用代码 + - `routes/`: API 路由定义 + - `services/`: 业务逻辑层 + - `models/`: 数据模型 + - `utils/`: 工具函数 +- **static/**: 前端静态文件 +- **uploads/**: 视频文件存储 + +### 代码规范 + +- 所有代码注释和文档使用英文 +- 遵循 PEP 8 Python 代码规范 +- API 设计遵循 RESTful 原则 + +## 部署 + +### 使用 Gunicorn(生产环境) + +```bash +pip install gunicorn +gunicorn -w 4 -b 0.0.0.0:8080 app:app +``` + +### Docker 部署 + +```dockerfile +FROM python:3.9-slim + +WORKDIR /app +COPY requirements.txt . +RUN pip install -r requirements.txt + +COPY . . + +CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8080", "app:app"] +``` + +## 注意事项 + +1. **API Key 安全**: 不要将包含 API Key 的 `config.yaml` 提交到代码仓库。建议: + - 在本地 `config.yaml` 中设置 API Key + - 在 `config.yaml` 中设置 `dashscope.api_key` + - 将 `config.yaml` 添加到 `.gitignore`(如果包含敏感信息) +2. **文件存储**: 视频文件存储在本地 `uploads/` 目录,生产环境建议使用对象存储 +3. **性能优化**: 视频分析可能需要较长时间,建议实现异步任务队列 +4. **存储空间**: 定期清理旧视频文件,避免磁盘空间不足 + +## 许可证 + +MIT License + +## 贡献 + +欢迎提交 Issue 和 Pull Request! + +## 更新日志 + +### v1.0.0 +- 初始版本发布 +- 实现视频上传、分析、总结和对比功能 +- 提供完整的 RESTful API +- 实现现代化前端界面 + diff --git a/app.py b/app.py new file mode 100644 index 0000000..aef766a --- /dev/null +++ b/app.py @@ -0,0 +1,16 @@ +""" +Main application entry point +""" +from app import create_app +from app.config import Config + +app = create_app(Config()) + +if __name__ == '__main__': + config = Config() + app.run( + host=config.server_host, + port=config.server_port, + debug=(config.server_mode == 'debug') + ) + diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..e112d4b --- /dev/null +++ b/app/__init__.py @@ -0,0 +1,44 @@ +""" +Flask application initialization +""" +from flask import Flask, send_from_directory +from flask_cors import CORS +from pathlib import Path +from app.config import Config +from app.routes.video_routes import video_bp +from app.utils.logger import setup_logger + +def create_app(config_class=Config): + """ + Create and configure Flask application + + Args: + config_class: Configuration class + + Returns: + Flask application instance + """ + # Get project root directory + project_root = Path(__file__).parent.parent + static_folder = project_root / 'static' + + app = Flask(__name__, static_folder=str(static_folder), static_url_path='/static') + app.config.from_object(config_class) + + # Enable CORS for frontend access + CORS(app) + + # Setup logger + setup_logger(app) + + # Register blueprints + app.register_blueprint(video_bp, url_prefix='/api/videos') + + # Serve index.html at root + @app.route('/') + def index(): + """Serve index.html at root""" + return send_from_directory(static_folder, 'index.html') + + return app + diff --git a/app/config.py b/app/config.py new file mode 100644 index 0000000..8f45a7a --- /dev/null +++ b/app/config.py @@ -0,0 +1,105 @@ +""" +Configuration management +Primary configuration source: config.yaml +""" +import yaml +from pathlib import Path + +class Config: + """Application configuration + + All configuration is read from config.yaml file. + """ + + def __init__(self): + """Load configuration from config.yaml""" + config_path = Path(__file__).parent.parent / 'config.yaml' + + # Load config.yaml + if not config_path.exists(): + raise FileNotFoundError(f"Configuration file not found: {config_path}") + + with open(config_path, 'r', encoding='utf-8') as f: + self._config = yaml.safe_load(f) + + @property + def server_host(self): + """Get server host""" + return self._config['server']['host'] + + @property + def server_port(self): + """Get server port""" + return self._config['server']['port'] + + @property + def server_mode(self): + """Get server mode""" + return self._config['server']['mode'] + + @property + def mongodb_uri(self): + """Get MongoDB URI""" + return self._config['mongodb']['uri'] + + @property + def mongodb_database(self): + """Get MongoDB database name""" + return self._config['mongodb']['database'] + + @property + def mongodb_max_pool_size(self): + """Get MongoDB max pool size""" + return self._config['mongodb'].get('max_pool_size', 100) + + @property + def mongodb_min_pool_size(self): + """Get MongoDB min pool size""" + return self._config['mongodb'].get('min_pool_size', 10) + + @property + def dashscope_api_key(self): + """Get DashScope API key""" + return self._config['dashscope']['api_key'] + + @property + def dashscope_model(self): + """Get DashScope model name""" + return self._config['dashscope']['model'] + + @property + def dashscope_fps(self): + """Get DashScope fps parameter""" + return self._config['dashscope'].get('fps', 2) + + @property + def log_level(self): + """Get log level""" + return self._config['log']['level'] + + @property + def log_format(self): + """Get log format""" + return self._config['log']['format'] + + @property + def log_output(self): + """Get log output""" + return self._config['log']['output'] + + @property + def upload_folder(self): + """Get upload folder path""" + return Path(__file__).parent.parent / 'uploads' + + @property + def max_upload_size(self): + """Get max upload file size in bytes (default: 500MB)""" + return self._config.get('upload', {}).get('max_size', 500 * 1024 * 1024) + + @property + def allowed_extensions(self): + """Get allowed file extensions""" + return self._config.get('upload', {}).get('allowed_extensions', + ['mp4', 'avi', 'mov', 'mkv', 'wmv', 'flv', 'webm']) + diff --git a/app/models/__init__.py b/app/models/__init__.py new file mode 100644 index 0000000..c9d1202 --- /dev/null +++ b/app/models/__init__.py @@ -0,0 +1,9 @@ +""" +Database models +""" +from app.models.video import Video +from app.models.analysis import AnalysisResult, Summary +from app.models.comparison import Comparison + +__all__ = ['Video', 'AnalysisResult', 'Summary', 'Comparison'] + diff --git a/app/models/analysis.py b/app/models/analysis.py new file mode 100644 index 0000000..e288eea --- /dev/null +++ b/app/models/analysis.py @@ -0,0 +1,143 @@ +""" +Analysis result and summary models +""" +from datetime import datetime +from bson import ObjectId +from typing import Optional, Dict, Any +from app.models.database import get_database + +class AnalysisResult: + """Video analysis result model""" + + COLLECTION_NAME = 'analysis_results' + + def __init__(self, + video_id: ObjectId, + content: str, + fps: int, + analysis_type: str = 'content', + created_at: Optional[datetime] = None, + _id: Optional[ObjectId] = None): + """ + Initialize AnalysisResult model + + Args: + video_id: Video document ID + content: Analysis content + fps: Frames per second used + analysis_type: Type of analysis (content, summary) + created_at: Creation timestamp + _id: Document ID + """ + self._id = _id or ObjectId() + self.video_id = video_id + self.content = content + self.fps = fps + self.analysis_type = analysis_type + self.created_at = created_at or datetime.utcnow() + + def to_dict(self) -> Dict[str, Any]: + """Convert to dictionary""" + return { + '_id': self._id, + 'video_id': self.video_id, + 'content': self.content, + 'fps': self.fps, + 'analysis_type': self.analysis_type, + 'created_at': self.created_at + } + + @classmethod + def from_dict(cls, data: Dict[str, Any]) -> 'AnalysisResult': + """Create AnalysisResult from dictionary""" + return cls( + _id=data.get('_id'), + video_id=data['video_id'], + content=data['content'], + fps=data['fps'], + analysis_type=data.get('analysis_type', 'content'), + created_at=data.get('created_at') + ) + + def save(self) -> ObjectId: + """Save analysis result to database""" + db = get_database() + result = db[self.COLLECTION_NAME].insert_one(self.to_dict()) + self._id = result.inserted_id + return self._id + + @classmethod + def find_by_video_id(cls, video_id: str, analysis_type: Optional[str] = None) -> Optional['AnalysisResult']: + """Find analysis result by video ID""" + db = get_database() + query = {'video_id': ObjectId(video_id)} + if analysis_type: + query['analysis_type'] = analysis_type + doc = db[cls.COLLECTION_NAME].find_one(query, sort=[('created_at', -1)]) + if doc: + return cls.from_dict(doc) + return None + + +class Summary: + """Video summary model""" + + COLLECTION_NAME = 'summaries' + + def __init__(self, + video_id: ObjectId, + summary_text: str, + created_at: Optional[datetime] = None, + _id: Optional[ObjectId] = None): + """ + Initialize Summary model + + Args: + video_id: Video document ID + summary_text: Summary text + created_at: Creation timestamp + _id: Document ID + """ + self._id = _id or ObjectId() + self.video_id = video_id + self.summary_text = summary_text + self.created_at = created_at or datetime.utcnow() + + def to_dict(self) -> Dict[str, Any]: + """Convert to dictionary""" + return { + '_id': self._id, + 'video_id': self.video_id, + 'summary_text': self.summary_text, + 'created_at': self.created_at + } + + @classmethod + def from_dict(cls, data: Dict[str, Any]) -> 'Summary': + """Create Summary from dictionary""" + return cls( + _id=data.get('_id'), + video_id=data['video_id'], + summary_text=data['summary_text'], + created_at=data.get('created_at') + ) + + def save(self) -> ObjectId: + """Save summary to database""" + db = get_database() + result = db[self.COLLECTION_NAME].insert_one(self.to_dict()) + self._id = result.inserted_id + return self._id + + @classmethod + def find_by_video_id(cls, video_id: str) -> Optional['Summary']: + """Find summary by video ID""" + db = get_database() + doc = db[cls.COLLECTION_NAME].find_one( + {'video_id': ObjectId(video_id)}, + sort=[('created_at', -1)] + ) + if doc: + return cls.from_dict(doc) + return None + diff --git a/app/models/comparison.py b/app/models/comparison.py new file mode 100644 index 0000000..0185956 --- /dev/null +++ b/app/models/comparison.py @@ -0,0 +1,67 @@ +""" +Video comparison model +""" +from datetime import datetime +from bson import ObjectId +from typing import List, Optional, Dict, Any +from app.models.database import get_database + +class Comparison: + """Video comparison model""" + + COLLECTION_NAME = 'comparisons' + + def __init__(self, + video_ids: List[ObjectId], + comparison_result: str, + created_at: Optional[datetime] = None, + _id: Optional[ObjectId] = None): + """ + Initialize Comparison model + + Args: + video_ids: List of video document IDs + comparison_result: Comparison result text + created_at: Creation timestamp + _id: Document ID + """ + self._id = _id or ObjectId() + self.video_ids = video_ids + self.comparison_result = comparison_result + self.created_at = created_at or datetime.utcnow() + + def to_dict(self) -> Dict[str, Any]: + """Convert to dictionary""" + return { + '_id': self._id, + 'video_ids': self.video_ids, + 'comparison_result': self.comparison_result, + 'created_at': self.created_at + } + + @classmethod + def from_dict(cls, data: Dict[str, Any]) -> 'Comparison': + """Create Comparison from dictionary""" + return cls( + _id=data.get('_id'), + video_ids=data['video_ids'], + comparison_result=data['comparison_result'], + created_at=data.get('created_at') + ) + + def save(self) -> ObjectId: + """Save comparison to database""" + db = get_database() + result = db[self.COLLECTION_NAME].insert_one(self.to_dict()) + self._id = result.inserted_id + return self._id + + @classmethod + def find_by_id(cls, comparison_id: str) -> Optional['Comparison']: + """Find comparison by ID""" + db = get_database() + doc = db[cls.COLLECTION_NAME].find_one({'_id': ObjectId(comparison_id)}) + if doc: + return cls.from_dict(doc) + return None + diff --git a/app/models/database.py b/app/models/database.py new file mode 100644 index 0000000..04cc478 --- /dev/null +++ b/app/models/database.py @@ -0,0 +1,38 @@ +""" +Database connection management +""" +from pymongo import MongoClient +from pymongo.database import Database +from app.config import Config + +_config = Config() +_client: MongoClient = None +_db: Database = None + +def get_database() -> Database: + """ + Get MongoDB database instance + + Returns: + MongoDB database instance + """ + global _db, _client + + if _db is None: + _client = MongoClient( + _config.mongodb_uri, + maxPoolSize=_config.mongodb_max_pool_size, + minPoolSize=_config.mongodb_min_pool_size + ) + _db = _client[_config.mongodb_database] + + return _db + +def close_database(): + """Close database connection""" + global _client, _db + if _client: + _client.close() + _client = None + _db = None + diff --git a/app/models/video.py b/app/models/video.py new file mode 100644 index 0000000..c005d2f --- /dev/null +++ b/app/models/video.py @@ -0,0 +1,103 @@ +""" +Video model +""" +from datetime import datetime +from bson import ObjectId +from typing import Optional, Dict, Any, List +from app.models.database import get_database + +class Video: + """Video document model""" + + COLLECTION_NAME = 'videos' + + def __init__(self, + filename: str, + file_path: str, + file_size: int, + mime_type: str, + upload_time: Optional[datetime] = None, + status: str = 'uploaded', + _id: Optional[ObjectId] = None): + """ + Initialize Video model + + Args: + filename: Video filename + file_path: Video file path + file_size: File size in bytes + mime_type: MIME type + upload_time: Upload timestamp + status: Video status (uploaded, analyzing, analyzed, failed) + _id: Document ID + """ + self._id = _id or ObjectId() + self.filename = filename + self.file_path = file_path + self.file_size = file_size + self.mime_type = mime_type + self.upload_time = upload_time or datetime.utcnow() + self.status = status + + def to_dict(self) -> Dict[str, Any]: + """Convert to dictionary""" + return { + '_id': self._id, + 'filename': self.filename, + 'file_path': self.file_path, + 'file_size': self.file_size, + 'mime_type': self.mime_type, + 'upload_time': self.upload_time, + 'status': self.status + } + + @classmethod + def from_dict(cls, data: Dict[str, Any]) -> 'Video': + """Create Video from dictionary""" + return cls( + _id=data.get('_id'), + filename=data['filename'], + file_path=data['file_path'], + file_size=data['file_size'], + mime_type=data['mime_type'], + upload_time=data.get('upload_time'), + status=data.get('status', 'uploaded') + ) + + def save(self) -> ObjectId: + """Save video to database""" + db = get_database() + result = db[self.COLLECTION_NAME].insert_one(self.to_dict()) + self._id = result.inserted_id + return self._id + + @classmethod + def find_by_id(cls, video_id: str) -> Optional['Video']: + """Find video by ID""" + db = get_database() + doc = db[cls.COLLECTION_NAME].find_one({'_id': ObjectId(video_id)}) + if doc: + return cls.from_dict(doc) + return None + + @classmethod + def find_all(cls, limit: int = 100, skip: int = 0) -> List['Video']: + """Find all videos""" + db = get_database() + cursor = db[cls.COLLECTION_NAME].find().sort('upload_time', -1).skip(skip).limit(limit) + return [cls.from_dict(doc) for doc in cursor] + + def update_status(self, status: str): + """Update video status""" + db = get_database() + db[self.COLLECTION_NAME].update_one( + {'_id': self._id}, + {'$set': {'status': status}} + ) + self.status = status + + def delete(self): + """Delete video from database""" + db = get_database() + db[self.COLLECTION_NAME].delete_one({'_id': self._id}) + diff --git a/app/routes/video_routes.py b/app/routes/video_routes.py new file mode 100644 index 0000000..bd53360 --- /dev/null +++ b/app/routes/video_routes.py @@ -0,0 +1,205 @@ +""" +Video API routes +""" +from flask import Blueprint, request, jsonify, current_app +from bson import ObjectId +from app.services.video_service import VideoService +from app.services.analysis_service import AnalysisService +from app.config import Config + +video_bp = Blueprint('videos', __name__) +config = Config() +video_service = VideoService(config) +analysis_service = AnalysisService(config) + +def json_response(data=None, message=None, status_code=200): + """Create JSON response""" + response = {'success': status_code < 400} + if data is not None: + response['data'] = data + if message: + response['message'] = message + return jsonify(response), status_code + +def error_response(message, status_code=400): + """Create error response""" + return json_response(message=message, status_code=status_code) + +@video_bp.route('/upload', methods=['POST']) +def upload_video(): + """Upload video file""" + if 'file' not in request.files: + return error_response('No file provided', 400) + + file = request.files['file'] + if file.filename == '': + return error_response('No file selected', 400) + + video, error = video_service.upload_video(file) + if error: + return error_response(error, 400) + + return json_response({ + 'video_id': str(video._id), + 'filename': video.filename, + 'file_size': video.file_size, + 'status': video.status, + 'upload_time': video.upload_time.isoformat() + }, message='Video uploaded successfully', status_code=201) + +@video_bp.route('', methods=['GET']) +def list_videos(): + """Get list of videos""" + limit = request.args.get('limit', 100, type=int) + skip = request.args.get('skip', 0, type=int) + + videos = video_service.list_videos(limit=limit, skip=skip) + + video_list = [] + for video in videos: + video_list.append({ + 'id': str(video._id), + 'filename': video.filename, + 'file_size': video.file_size, + 'status': video.status, + 'upload_time': video.upload_time.isoformat() + }) + + return json_response(video_list) + +@video_bp.route('/', methods=['GET']) +def get_video(video_id): + """Get video details""" + video = video_service.get_video(video_id) + if not video: + return error_response('Video not found', 404) + + # Get analysis and summary if available + analysis = analysis_service.get_analysis(video_id) + summary = analysis_service.get_summary(video_id) + + data = { + 'id': str(video._id), + 'filename': video.filename, + 'file_path': video.file_path, + 'file_size': video.file_size, + 'mime_type': video.mime_type, + 'status': video.status, + 'upload_time': video.upload_time.isoformat() + } + + if analysis: + data['analysis'] = { + 'id': str(analysis._id), + 'content': analysis.content, + 'fps': analysis.fps, + 'created_at': analysis.created_at.isoformat() + } + + if summary: + data['summary'] = { + 'id': str(summary._id), + 'summary_text': summary.summary_text, + 'created_at': summary.created_at.isoformat() + } + + return json_response(data) + +@video_bp.route('//analyze', methods=['POST']) +def analyze_video(video_id): + """Analyze video content""" + prompt = None + if request.is_json and request.get_json(): + prompt = request.get_json().get('prompt') + + analysis, error = analysis_service.analyze_video(video_id, prompt) + if error: + current_app.logger.error(f"Video analysis failed for {video_id}: {error}") + return error_response(error, 400) + + return json_response({ + 'id': str(analysis._id), + 'video_id': video_id, + 'content': analysis.content, + 'fps': analysis.fps, + 'created_at': analysis.created_at.isoformat() + }, message='Video analyzed successfully', status_code=201) + +@video_bp.route('//summarize', methods=['POST']) +def summarize_video(video_id): + """Generate video summary""" + summary, error = analysis_service.summarize_video(video_id) + if error: + current_app.logger.error(f"Video summarization failed for {video_id}: {error}") + return error_response(error, 400) + + return json_response({ + 'id': str(summary._id), + 'video_id': video_id, + 'summary_text': summary.summary_text, + 'created_at': summary.created_at.isoformat() + }, message='Summary generated successfully', status_code=201) + +@video_bp.route('//summary', methods=['GET']) +def get_summary(video_id): + """Get video summary""" + summary = analysis_service.get_summary(video_id) + if not summary: + return error_response('Summary not found', 404) + + return json_response({ + 'id': str(summary._id), + 'video_id': video_id, + 'summary_text': summary.summary_text, + 'created_at': summary.created_at.isoformat() + }) + +@video_bp.route('/compare', methods=['POST']) +def compare_videos(): + """Compare multiple videos""" + if not request.is_json: + return error_response('JSON body required', 400) + + data = request.json + video_ids = data.get('video_ids', []) + + if not isinstance(video_ids, list) or len(video_ids) < 2: + return error_response('At least two video IDs are required', 400) + + comparison, error = analysis_service.compare_videos(video_ids) + if error: + current_app.logger.error(f"Video comparison failed: {error}") + return error_response(error, 400) + + return json_response({ + 'id': str(comparison._id), + 'video_ids': [str(vid) for vid in comparison.video_ids], + 'comparison_result': comparison.comparison_result, + 'created_at': comparison.created_at.isoformat() + }, message='Comparison completed successfully', status_code=201) + +@video_bp.route('/compare/', methods=['GET']) +def get_comparison(comparison_id): + """Get comparison result""" + from app.models.comparison import Comparison + comparison = Comparison.find_by_id(comparison_id) + if not comparison: + return error_response('Comparison not found', 404) + + return json_response({ + 'id': str(comparison._id), + 'video_ids': [str(vid) for vid in comparison.video_ids], + 'comparison_result': comparison.comparison_result, + 'created_at': comparison.created_at.isoformat() + }) + +@video_bp.errorhandler(404) +def not_found(error): + """Handle 404 errors""" + return error_response('Endpoint not found', 404) + +@video_bp.errorhandler(500) +def internal_error(error): + """Handle 500 errors""" + return error_response('Internal server error', 500) + diff --git a/app/services/analysis_service.py b/app/services/analysis_service.py new file mode 100644 index 0000000..074b01a --- /dev/null +++ b/app/services/analysis_service.py @@ -0,0 +1,163 @@ +""" +Video analysis service +""" +from pathlib import Path +from typing import Optional, Tuple, List +from app.models.video import Video +from app.models.analysis import AnalysisResult, Summary +from app.models.comparison import Comparison +from app.services.dashscope_service import DashScopeService +from app.config import Config + +class AnalysisService: + """Video analysis service""" + + def __init__(self, config: Config): + """ + Initialize analysis service + + Args: + config: Application configuration + """ + self.config = config + self.dashscope_service = DashScopeService(config) + + def analyze_video(self, video_id: str, prompt: Optional[str] = None) -> Tuple[Optional[AnalysisResult], Optional[str]]: + """ + Analyze video content + + Args: + video_id: Video ID + prompt: Optional custom prompt + + Returns: + Tuple of (AnalysisResult, error_message) + """ + video = Video.find_by_id(video_id) + if not video: + return None, "Video not found" + + video_path = Path(video.file_path) + if not video_path.exists(): + return None, "Video file not found" + + # Update status + video.update_status('analyzing') + + # Default prompt + if not prompt: + prompt = "这段视频描绘的是什么景象? 请详细描述视频中的内容。" + + # Call DashScope API + try: + result = self.dashscope_service.analyze_video(video_path, prompt) + except ValueError as e: + video.update_status('failed') + return None, str(e) + + if not result.get('success'): + video.update_status('failed') + return None, result.get('error', 'Analysis failed') + + # Save analysis result + analysis = AnalysisResult( + video_id=video._id, + content=result['content'], + fps=result['fps'], + analysis_type='content' + ) + analysis.save() + + # Update video status + video.update_status('analyzed') + + return analysis, None + + def summarize_video(self, video_id: str) -> Tuple[Optional[Summary], Optional[str]]: + """ + Generate video summary + + Args: + video_id: Video ID + + Returns: + Tuple of (Summary, error_message) + """ + video = Video.find_by_id(video_id) + if not video: + return None, "Video not found" + + video_path = Path(video.file_path) + if not video_path.exists(): + return None, "Video file not found" + + # Call DashScope API for summary + try: + result = self.dashscope_service.summarize_video(video_path) + except ValueError as e: + return None, str(e) + + if not result.get('success'): + return None, result.get('error', 'Summary generation failed') + + # Save summary + summary = Summary( + video_id=video._id, + summary_text=result['content'] + ) + summary.save() + + return summary, None + + def compare_videos(self, video_ids: List[str]) -> Tuple[Optional[Comparison], Optional[str]]: + """ + Compare multiple videos + + Args: + video_ids: List of video IDs + + Returns: + Tuple of (Comparison, error_message) + """ + if len(video_ids) < 2: + return None, "At least two videos are required for comparison" + + # Get all videos + videos = [] + video_paths = [] + for video_id in video_ids: + video = Video.find_by_id(video_id) + if not video: + return None, f"Video not found: {video_id}" + video_path = Path(video.file_path) + if not video_path.exists(): + return None, f"Video file not found: {video_id}" + videos.append(video) + video_paths.append(video_path) + + # Call DashScope API for comparison + try: + result = self.dashscope_service.compare_videos(video_paths) + except ValueError as e: + return None, str(e) + + if not result.get('success'): + return None, result.get('error', 'Comparison failed') + + # Save comparison + comparison = Comparison( + video_ids=[video._id for video in videos], + comparison_result=result['content'] + ) + comparison.save() + + return comparison, None + + def get_analysis(self, video_id: str) -> Optional[AnalysisResult]: + """Get analysis result for video""" + return AnalysisResult.find_by_video_id(video_id, 'content') + + def get_summary(self, video_id: str) -> Optional[Summary]: + """Get summary for video""" + return Summary.find_by_video_id(video_id) + diff --git a/app/services/dashscope_service.py b/app/services/dashscope_service.py new file mode 100644 index 0000000..5c3d8a0 --- /dev/null +++ b/app/services/dashscope_service.py @@ -0,0 +1,499 @@ +""" +DashScope API service +""" +import base64 +import json +import logging +from pathlib import Path +from typing import Optional, Dict, Any +from dashscope import MultiModalConversation +import dashscope +from app.config import Config + +logger = logging.getLogger('videoSummary') + +class DashScopeService: + """DashScope API service wrapper""" + + def __init__(self, config: Config): + """ + Initialize DashScope service + + Args: + config: Application configuration + """ + self.config = config + self.api_key = config.dashscope_api_key + self.model = config.dashscope_model + self.fps = config.dashscope_fps + self._api_key_set = False + + def _ensure_api_key(self): + """ + Ensure API key is set before making API calls + + Raises: + ValueError: If API key is not configured + """ + if not self.api_key: + raise ValueError( + "DashScope API key is required for video analysis. " + "Please set 'dashscope.api_key' in config.yaml file. " + "You can obtain your API key from: https://dashscope.console.aliyun.com/" + ) + + if not self._api_key_set: + dashscope.api_key = self.api_key + self._api_key_set = True + + def _log_request(self, method_name: str, request_data: Dict[str, Any]): + """ + Log complete request data for third-party API calls + + Args: + method_name: Name of the calling method + request_data: Request data dictionary containing model, messages, api_key, etc. + """ + try: + # Create a copy for logging to avoid modifying original + log_data = request_data.copy() + + # Handle Base64 encoded video data - only log summary for large data + if 'messages' in log_data: + messages_copy = [] + for msg in log_data['messages']: + msg_copy = msg.copy() if isinstance(msg, dict) else msg + if isinstance(msg_copy, dict) and 'content' in msg_copy: + content_copy = [] + for content_item in msg_copy['content']: + if isinstance(content_item, dict) and 'video' in content_item: + video_value = content_item['video'] + # If it's a Base64 data URI, only log the prefix and size + if isinstance(video_value, str) and video_value.startswith('data:video'): + # Extract size info if available + size_info = '' + if 'encoded_size' in log_data: + size_info = f" (encoded size: {log_data['encoded_size']} bytes)" + content_copy.append({ + 'video': f"data:video/mp4;base64,[BASE64_DATA{size_info}]", + 'fps': content_item.get('fps', 'N/A') + }) + else: + content_copy.append(content_item) + else: + content_copy.append(content_item) + msg_copy['content'] = content_copy + messages_copy.append(msg_copy) + log_data['messages'] = messages_copy + + # Log complete request at DEBUG level + logger.debug(f"DashScope API Request [{method_name}] - Complete Request Data:") + logger.debug(json.dumps(log_data, indent=2, ensure_ascii=False)) + + # Log summary at INFO level + video_count = log_data.get('video_count', 'N/A') + if video_count == 'N/A' and 'video_paths' in log_data: + video_paths = log_data.get('video_paths', []) + video_count = len(video_paths) if isinstance(video_paths, list) else 'N/A' + + summary = { + 'method': method_name, + 'model': log_data.get('model', 'N/A'), + 'api_key': log_data.get('api_key', 'N/A'), + 'messages_count': len(log_data.get('messages', [])), + 'fps': log_data.get('fps', 'N/A'), + 'video_count': video_count + } + logger.info(f"DashScope API Request [{method_name}] - Summary: {json.dumps(summary, ensure_ascii=False)}") + except Exception as e: + logger.warning(f"Failed to log request data: {str(e)}") + + def _log_response(self, method_name: str, response: Any): + """ + Log complete response data from third-party API calls + + Args: + method_name: Name of the calling method + response: Response object from DashScope API + """ + try: + # Log complete response at DEBUG level + logger.debug(f"DashScope API Response [{method_name}] - Complete Response Data:") + + response_data = { + 'status_code': getattr(response, 'status_code', 'N/A'), + 'message': getattr(response, 'message', 'N/A'), + 'request_id': getattr(response, 'request_id', 'N/A'), + } + + # Try to get response output if available + if hasattr(response, 'output'): + try: + output_dict = { + 'choices': [] + } + if hasattr(response.output, 'choices') and response.output.choices: + for choice in response.output.choices: + choice_dict = {} + if hasattr(choice, 'message'): + if hasattr(choice.message, 'content'): + content_list = [] + for content_item in choice.message.content: + if isinstance(content_item, dict): + # For text content, include full text + if 'text' in content_item: + content_list.append({'text': content_item['text']}) + else: + # For other content types, include type only + content_list.append({k: v for k, v in content_item.items() if k != 'video' or not isinstance(v, str) or len(v) < 100}) + else: + content_list.append(str(content_item)) + choice_dict['message'] = {'content': content_list} + output_dict['choices'].append(choice_dict) + response_data['output'] = output_dict + except Exception as e: + response_data['output'] = f"Error extracting output: {str(e)}" + + logger.debug(json.dumps(response_data, indent=2, ensure_ascii=False)) + + # Log summary at INFO level + summary = { + 'method': method_name, + 'status_code': response_data['status_code'], + 'message': response_data['message'], + 'request_id': response_data['request_id'] + } + logger.info(f"DashScope API Response [{method_name}] - Summary: {json.dumps(summary, ensure_ascii=False)}") + + # Log error details at ERROR level if failed + if response_data['status_code'] != 200: + logger.error(f"DashScope API Error [{method_name}] - Status: {response_data['status_code']}, Message: {response_data['message']}") + except Exception as e: + logger.warning(f"Failed to log response data: {str(e)}") + + def analyze_video(self, video_path: Path, prompt: str, fps: Optional[int] = None) -> Dict[str, Any]: + """ + Analyze video content using DashScope API + + Args: + video_path: Path to video file + prompt: Analysis prompt + fps: Frames per second (overrides config if provided) + + Returns: + API response dictionary + + Raises: + Exception: If API call fails + """ + # Ensure API key is set + self._ensure_api_key() + + if not video_path.exists(): + raise FileNotFoundError(f"Video file not found: {video_path}") + + # According to DashScope documentation for Linux/macOS Python SDK: + # local_path = "xxx/test.mp4" # absolute path string + # video_path = f"file://{local_path}" + # Example from official docs: + # local_path = "xxx/test.mp4" + # video_path = f"file://{local_path}" + absolute_path = video_path.absolute() + local_path = str(absolute_path) + video_path_for_api = f"file://{local_path}" + + # Log for debugging + logger.info(f"Using video path (file:// format as per official docs): {video_path_for_api}") + + # Use provided fps or default from config + fps_value = fps if fps is not None else self.fps + + # Prepare messages according to DashScope official documentation format: + # {'role':'user', 'content': [{'video': video_path, "fps":2}, {'text': '...'}]} + + messages = [ + { + 'role': 'user', + 'content': [ + {'video': video_path_for_api, 'fps': fps_value}, + {'text': prompt} + ] + } + ] + + # Call API + try: + # Prepare request data for logging + request_data = { + 'model': self.model, + 'api_key': self.api_key, + 'messages': messages, + 'fps': fps_value, + 'video_path': video_path_for_api + } + + # Log complete request + self._log_request('analyze_video', request_data) + + response = MultiModalConversation.call( + model=self.model, + messages=messages + ) + + # Log complete response + self._log_response('analyze_video', response) + + if response.status_code == 200: + # Extract text content from response + content = response.output.choices[0].message.content[0]["text"] + return { + 'success': True, + 'content': content, + 'fps': fps_value + } + else: + # If file:// format fails, try Base64 encoding as fallback + # Note: Base64 encoding increases file size by ~33%, and API limit is 10MB for encoded video + logger.warning(f"File:// format failed, trying Base64 encoding. Error: {response.message}") + + try: + file_size = video_path.stat().st_size + # Check if file is too large for Base64 encoding (10MB limit for encoded video) + if file_size > 7 * 1024 * 1024: # ~7MB raw = ~10MB encoded + logger.error(f"Video file too large for Base64 encoding: {file_size} bytes (limit: ~7MB raw)") + return { + 'success': False, + 'error': f"Video file too large for Base64 encoding. File size: {file_size / 1024 / 1024:.2f}MB, limit: ~7MB raw (~10MB encoded). Please use a smaller video file.", + 'status_code': response.status_code + } + + # Read file and encode to Base64 + with open(video_path, 'rb') as f: + video_data = f.read() + video_base64 = base64.b64encode(video_data).decode('utf-8') + + logger.info(f"Using Base64 encoding (file size: {file_size} bytes, encoded size: {len(video_base64)} bytes)") + + # According to DashScope docs, Base64 format should be: base64 encoded string + # Try data URI format first + messages_base64 = [ + { + 'role': 'user', + 'content': [ + {'video': f"data:video/mp4;base64,{video_base64}", 'fps': fps_value}, + {'text': prompt} + ] + } + ] + + # Prepare request data for logging (Base64 encoding) + request_data_base64 = { + 'model': self.model, + 'api_key': self.api_key, + 'messages': messages_base64, + 'fps': fps_value, + 'encoding': 'base64', + 'file_size': file_size, + 'encoded_size': len(video_base64) + } + + # Log complete request (Base64 encoding) + self._log_request('analyze_video_base64', request_data_base64) + + response = MultiModalConversation.call( + model=self.model, + messages=messages_base64 + ) + + # Log complete response (Base64 encoding) + self._log_response('analyze_video_base64', response) + + if response.status_code == 200: + content = response.output.choices[0].message.content[0]["text"] + return { + 'success': True, + 'content': content, + 'fps': fps_value + } + else: + logger.error(f"DashScope API error (all formats including Base64 failed) - Status: {response.status_code}, Message: {response.message}") + return { + 'success': False, + 'error': f"API error: {response.message}", + 'status_code': response.status_code + } + except Exception as e: + logger.error(f"Base64 encoding failed: {str(e)}") + return { + 'success': False, + 'error': f"All upload methods failed. Last error: {response.message}. Base64 encoding error: {str(e)}", + 'status_code': response.status_code + } + except Exception as e: + logger.error(f"DashScope API exception: {str(e)}, Path used: {video_path_for_api}") + return { + 'success': False, + 'error': str(e) + } + + def summarize_video(self, video_path: Path, fps: Optional[int] = None) -> Dict[str, Any]: + """ + Generate video summary + + Args: + video_path: Path to video file + fps: Frames per second (overrides config if provided) + + Returns: + Summary result dictionary + """ + prompt = "请对这段视频进行总结,包括主要内容、关键场景和重要信息。" + return self.analyze_video(video_path, prompt, fps) + + def compare_videos(self, video_paths: list[Path], fps: Optional[int] = None) -> Dict[str, Any]: + """ + Compare multiple videos + + Args: + video_paths: List of video file paths + fps: Frames per second (overrides config if provided) + + Returns: + Comparison result dictionary + """ + # Ensure API key is set + self._ensure_api_key() + + if len(video_paths) < 2: + return { + 'success': False, + 'error': 'At least two videos are required for comparison' + } + + # Validate all video files exist + for path in video_paths: + if not path.exists(): + return { + 'success': False, + 'error': f"Video file not found: {path}" + } + + # Convert paths - try direct absolute path strings first + video_paths_for_api = [] + for path in video_paths: + absolute_path = path.absolute() + local_path = str(absolute_path) + video_paths_for_api.append(local_path) + + fps_value = fps if fps is not None else self.fps + + # Prepare messages with multiple videos using file:// URI format + content = [] + for video_uri in video_paths_for_api: + content.append({'video': video_uri, 'fps': fps_value}) + + prompt = "请对比这些视频的内容,找出它们的相似之处和不同之处,并详细说明。" + content.append({'text': prompt}) + + messages = [ + { + 'role': 'user', + 'content': content + } + ] + + # Call API + try: + # Prepare request data for logging + request_data = { + 'model': self.model, + 'api_key': self.api_key, + 'messages': messages, + 'fps': fps_value, + 'video_paths': video_paths_for_api, + 'video_count': len(video_paths_for_api) + } + + # Log complete request + self._log_request('compare_videos', request_data) + + response = MultiModalConversation.call( + model=self.model, + messages=messages + ) + + # Log complete response + self._log_response('compare_videos', response) + + if response.status_code == 200: + content_text = response.output.choices[0].message.content[0]["text"] + return { + 'success': True, + 'content': content_text, + 'fps': fps_value + } + else: + # If direct paths fail, try file:// format + logger.warning(f"Direct paths failed, trying file:// format. Error: {response.message}") + + video_urls = [] + for path in video_paths: + absolute_path = path.absolute() + local_path = str(absolute_path) + video_urls.append(f"file://{local_path}") + + content_retry = [] + for video_url in video_urls: + content_retry.append({'video': video_url, 'fps': fps_value}) + content_retry.append({'text': prompt}) + + messages_retry = [ + { + 'role': 'user', + 'content': content_retry + } + ] + + # Prepare request data for logging (retry with file:// format) + request_data_retry = { + 'model': self.model, + 'api_key': self.api_key, + 'messages': messages_retry, + 'fps': fps_value, + 'video_paths': video_urls, + 'video_count': len(video_urls), + 'retry': True + } + + # Log complete request (retry) + self._log_request('compare_videos_retry', request_data_retry) + + response = MultiModalConversation.call( + model=self.model, + messages=messages_retry + ) + + # Log complete response (retry) + self._log_response('compare_videos_retry', response) + + if response.status_code == 200: + content_text = response.output.choices[0].message.content[0]["text"] + return { + 'success': True, + 'content': content_text, + 'fps': fps_value + } + else: + logger.error(f"DashScope API error (both attempts failed) - Status: {response.status_code}, Message: {response.message}") + return { + 'success': False, + 'error': f"API error: {response.message}", + 'status_code': response.status_code + } + except Exception as e: + logger.error(f"DashScope API exception (compare): {str(e)}") + return { + 'success': False, + 'error': str(e) + } + diff --git a/app/services/video_service.py b/app/services/video_service.py new file mode 100644 index 0000000..b5482c1 --- /dev/null +++ b/app/services/video_service.py @@ -0,0 +1,144 @@ +""" +Video service +""" +from pathlib import Path +from typing import Optional, Tuple, List +from werkzeug.datastructures import FileStorage +from app.models.video import Video +from app.models.database import get_database +from app.config import Config +from app.utils.validators import is_allowed_file, validate_file_size, secure_file_path +from app.utils.file_utils import ensure_directory_exists, get_file_size + +class VideoService: + """Video management service""" + + def __init__(self, config: Config): + """ + Initialize video service + + Args: + config: Application configuration + """ + self.config = config + self.upload_folder = config.upload_folder + ensure_directory_exists(self.upload_folder) + + def upload_video(self, file: FileStorage) -> Tuple[Optional[Video], Optional[str]]: + """ + Upload video file + + Args: + file: Uploaded file + + Returns: + Tuple of (Video object, error_message) + """ + # Validate filename + if not file.filename: + return None, "No filename provided" + + # Validate file extension + if not is_allowed_file(file.filename, self.config.allowed_extensions): + allowed = ', '.join(self.config.allowed_extensions) + return None, f"File format not supported. Allowed formats: {allowed}" + + # Save file temporarily to get size + temp_path = self.upload_folder / f"temp_{file.filename}" + try: + file.save(str(temp_path)) + file_size = get_file_size(temp_path) + + # Validate file size + is_valid, error_msg = validate_file_size(file_size, self.config.max_upload_size) + if not is_valid: + temp_path.unlink() + return None, error_msg + + # Generate secure file path + secure_path = secure_file_path(file.filename, self.upload_folder) + + # Handle filename conflicts + counter = 1 + original_path = secure_path + while secure_path.exists(): + stem = original_path.stem + suffix = original_path.suffix + secure_path = self.upload_folder / f"{stem}_{counter}{suffix}" + counter += 1 + + # Move file to final location + temp_path.rename(secure_path) + + # Create video document + video = Video( + filename=file.filename, + file_path=str(secure_path), + file_size=file_size, + mime_type=file.content_type or 'video/mp4', + status='uploaded' + ) + video.save() + + return video, None + + except Exception as e: + if temp_path.exists(): + temp_path.unlink() + return None, f"Upload failed: {str(e)}" + + def get_video(self, video_id: str) -> Optional[Video]: + """ + Get video by ID + + Args: + video_id: Video ID + + Returns: + Video object or None + """ + try: + return Video.find_by_id(video_id) + except Exception: + return None + + def list_videos(self, limit: int = 100, skip: int = 0) -> List[Video]: + """ + List all videos + + Args: + limit: Maximum number of videos to return + skip: Number of videos to skip + + Returns: + List of Video objects + """ + return Video.find_all(limit=limit, skip=skip) + + def delete_video(self, video_id: str) -> Tuple[bool, Optional[str]]: + """ + Delete video + + Args: + video_id: Video ID + + Returns: + Tuple of (success, error_message) + """ + video = self.get_video(video_id) + if not video: + return False, "Video not found" + + try: + # Delete file + file_path = Path(video.file_path) + if file_path.exists(): + file_path.unlink() + + # Delete from database + video.delete() + + return True, None + except Exception as e: + return False, f"Delete failed: {str(e)}" + diff --git a/app/utils/file_utils.py b/app/utils/file_utils.py new file mode 100644 index 0000000..7b1458e --- /dev/null +++ b/app/utils/file_utils.py @@ -0,0 +1,39 @@ +""" +File utility functions +""" +from pathlib import Path +from typing import Optional + +def ensure_directory_exists(directory: Path): + """ + Ensure directory exists, create if not + + Args: + directory: Directory path + """ + directory.mkdir(parents=True, exist_ok=True) + +def get_file_size(file_path: Path) -> int: + """ + Get file size in bytes + + Args: + file_path: File path + + Returns: + File size in bytes + """ + return file_path.stat().st_size + +def file_exists(file_path: Path) -> bool: + """ + Check if file exists + + Args: + file_path: File path + + Returns: + True if file exists, False otherwise + """ + return file_path.exists() and file_path.is_file() + diff --git a/app/utils/logger.py b/app/utils/logger.py new file mode 100644 index 0000000..682da4b --- /dev/null +++ b/app/utils/logger.py @@ -0,0 +1,44 @@ +""" +Logger setup utility +""" +import logging +import sys +from flask import Flask + +def setup_logger(app: Flask): + """ + Setup application logger + + Args: + app: Flask application instance + """ + config = app.config + + # Get log level + log_level = getattr(logging, config.get('log_level', 'INFO').upper(), logging.INFO) + + # Configure logger + logger = logging.getLogger('videoSummary') + logger.setLevel(log_level) + + # Create formatter + if config.get('log_format') == 'json': + formatter = logging.Formatter( + '{"time": "%(asctime)s", "level": "%(levelname)s", "message": "%(message)s", "module": "%(name)s"}' + ) + else: + formatter = logging.Formatter( + '%(asctime)s - %(name)s - %(levelname)s - %(message)s' + ) + + # Create handler + if config.get('log_output') == 'stdout' or not config.get('log_output'): + handler = logging.StreamHandler(sys.stdout) + else: + handler = logging.FileHandler(config.get('log_output')) + + handler.setFormatter(formatter) + logger.addHandler(handler) + + app.logger = logger + diff --git a/app/utils/validators.py b/app/utils/validators.py new file mode 100644 index 0000000..d96e912 --- /dev/null +++ b/app/utils/validators.py @@ -0,0 +1,53 @@ +""" +File validation utilities +""" +from werkzeug.utils import secure_filename +from pathlib import Path +from typing import Optional, List, Tuple + +def is_allowed_file(filename: str, allowed_extensions: List[str]) -> bool: + """ + Check if file extension is allowed + + Args: + filename: File name + allowed_extensions: List of allowed extensions + + Returns: + True if extension is allowed, False otherwise + """ + if '.' not in filename: + return False + ext = filename.rsplit('.', 1)[1].lower() + return ext in allowed_extensions + +def validate_file_size(file_size: int, max_size: int) -> Tuple[bool, Optional[str]]: + """ + Validate file size + + Args: + file_size: File size in bytes + max_size: Maximum allowed size in bytes + + Returns: + Tuple of (is_valid, error_message) + """ + if file_size > max_size: + max_size_mb = max_size / (1024 * 1024) + return False, f"File size exceeds maximum allowed size of {max_size_mb:.1f}MB" + return True, None + +def secure_file_path(filename: str, upload_folder: Path) -> Path: + """ + Generate secure file path + + Args: + filename: Original filename + upload_folder: Upload folder path + + Returns: + Secure file path + """ + secure_name = secure_filename(filename) + return upload_folder / secure_name + diff --git a/config copy.yaml b/config copy.yaml new file mode 100644 index 0000000..33bafe5 --- /dev/null +++ b/config copy.yaml @@ -0,0 +1,31 @@ +# Video Summary Service Configuration + +# Server Configuration +server: + host: "0.0.0.0" + port: 8080 + mode: "debug" # debug, release, test + +# MongoDB Configuration +mongodb: + uri: "mongodb://localhost:27017" + database: "videoSummary" + max_pool_size: 100 + min_pool_size: 10 + +# DashScope API Configuration +dashscope: + api_key: "sk-test" # Set your DashScope API key here + model: "qwen3-vl-plus" # MultiModal model name + fps: 2 # Frames per second for video frame extraction + +# Upload Configuration +upload: + max_size: 524288000 # 500MB in bytes + allowed_extensions: ["mp4", "avi", "mov", "mkv", "wmv", "flv", "webm"] + +# Logging Configuration +log: + level: "info" # debug, info, warn, error + format: "json" # json, text + output: "stdout" # stdout, file path diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..33bafe5 --- /dev/null +++ b/config.yaml @@ -0,0 +1,31 @@ +# Video Summary Service Configuration + +# Server Configuration +server: + host: "0.0.0.0" + port: 8080 + mode: "debug" # debug, release, test + +# MongoDB Configuration +mongodb: + uri: "mongodb://localhost:27017" + database: "videoSummary" + max_pool_size: 100 + min_pool_size: 10 + +# DashScope API Configuration +dashscope: + api_key: "sk-test" # Set your DashScope API key here + model: "qwen3-vl-plus" # MultiModal model name + fps: 2 # Frames per second for video frame extraction + +# Upload Configuration +upload: + max_size: 524288000 # 500MB in bytes + allowed_extensions: ["mp4", "avi", "mov", "mkv", "wmv", "flv", "webm"] + +# Logging Configuration +log: + level: "info" # debug, info, warn, error + format: "json" # json, text + output: "stdout" # stdout, file path diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..2b9774ac6415efffe384cb68fcb9a8a51f2f7144 GIT binary patch literal 501305 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 u-&mBtCQ~! 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 z zz;y<}f3D%@wL{FNKjvq(J+o*{1#-jf<~DJ3&Y{OF@khK?lG=E0W=gkJV%KCoX;N!*oNC0WSnr z^av)03sEFAc&MK5n8&yS^U$T+Jv&9-QpPWo7`yCg+284AF9=rZXGcgwcvRF~T)gEq zrC*@qxIQT66;%sRXaG&clqy2d8sT#LE5|K7>Nfm}9b&8juDcir$*$xO0jx4o4qZU@ zqR#?nf3s44S zTzL!|V+sCijOqKxMYQ58f`%cxgL?yitu@ko$}Ji`o>DbUk+RD5Hesu=;rp-6=BWhW z@jQ74fcKpN9pfxO=R)I9ps<-E4_OpbPF_3>tUxX#r2z!|#)SEQvI9M0gY7=W`qM13 zaIV(U^E3h?ZA9~-quETOO620XLLQc1Eo@^Tbu0Xo**#N(y$!jxK+OBMi6N5A#s?g6 zqWN}fRlrhBvxrm{{lyY(iVyciu+JedXKzO$AcNq4NV`T%(=>M`0{TvgebIk+Zi#p! z4m~_N*l-n5;6MyLom199b|*A$E$bLtlsi-YYInZN+cD#6w58bL+%v$_z(10t6cNc4 zW&Dq4|0zj&^WwKtJzJn%U{Es#qoF(R%ZzfFv|h{}QU@?2i5(11tTSsxN%ftCyl8iA z?{%lY%x(Vy&n`Wg3;0D|qOE61=29rTp1vpCU*;zMM*b@CS~7FcjKQo702m&3yzT%B zpT4cwuwh-sL^it%fP3Yu2Xp$DDe2jc)c!fFa;t;Qma#l1a)ZGYs9ul#*1 zGkMY^Jfi!}Rcv{&X6PiT886>9W%)9sXxCsq87b4%aXuQf}LKS0ADbwuIV_tpM ztt4<%yDy2=B511`ff-b6m0B7sDQB#SYxzBY>B-*94YAo*sZsLagz0hjqGKRQk`pi6@hL8bn z6yZiojQcF+?h0MJt*x4r2qT$-?$=`EQ5WX)O+85{r|J%v_+&nvC)S8_ZRqZiKb7gf zbbCv7MaS#39{CF@QuS_FqTYT=rxa;gq<~PL?|ylvLe;B07iDcqRf@hM7PW+x7j_fN zx0Mf2BomsI{KYaBs5Ge3hp`Q7 z>5|;{=Wmv~NY@H|YyKFjVWIfk8;gyK)F1%CGg-pdJ5Uv(2h{+Nt#IV7p2!kW6vO$nQT7$*);t{tqxV_h7kR;wT+UF_6Am{-XYPSn{h^eY0nw~YglrS5z1z!V;3cZs zuLW_EEnFKQMrh4pi*UTMlaklb#0UgybsHEoMq=9$)Q}rSVE|{|&8LRlO;tAkictTR zucbOCqYYf;FBdIp{m-{*=1lZIS-km_k}BT-#_3yVs8YHH`#GQ&o*MOf;eyi2U~J*wskV1P|vVZ8(ihjg2HmvRw8xzogFI?Xwiccp1X$P%JX4kD zH`hzEk3J1wZ2$A-9u4SULq1K7rCG)X6S5G3vszgfLk`E3B|3gTV|74TSGIYk|M5iO zwBRO({74Wg;iatZuFzKkF)TzqNiX9c|f6YbIv!Ct(_vS))m= zU!NVhebI!P+^y!tIfeYddxWIvmUeAPsVnVdo=uB6)+l$=eP+D5Z}5DM?AD z``GJoPR_Xnh{t8q@@@==XG)gKsKxMHs^26paDVd~qf$k)f%}Lyk2UZkB{YYeHP1^B zyhY`P$t&x6W$VS=ck-&3GJDFJ3O z>+^7SqVC$VjZawAh1W%q8vfLoRWkA4r7C0sH>S&M}xz z`n_cFC5TyuVXXH>p6+QDef7Dgi&!rLLg5MvkYkEO>3ihgCBr@AANj+PvCVlxI1$R! z2poE4=6duN3J@#eMG`sj10~Gahm*~UeW23b)8HVNj3P~c_k|=6;P*B#wlFLDjnfMU z{Cxpv4PQ~l_H7Rc9WMVmUbAF7oZXEawm|n+9>5DTCa1b|I2v(?ng=9CHLpHMa-i@E zsDw~a-J`hB!zlwJhOVH>f7A2x^{sD&w+mXKKjbt6H{LUzl@h73pQK1bPGK)5^Z-C1 zf94LNYAGwoLe9?U(*~;TtOY96;19}LejID4OaQjx&Y@Q-S}zn7zR<8505tG}LTs&U z>B(h>S%e_;u7AuriiRlpTj4khls^><={jF!p(P0YwGmq3UXFpZIDv5ux*5NqJIB{q znqSh`Q|KZ*kQ+)k+g#8`gK~SUU>leaBa0puR)7#CP8Q&7-pUksHkgZNT&)5wfrHpg zb+$27p$;L&SUw@12S5lYwItO-UgQDw%FT)P$}5EYr(ZTKXtx@j^cgw{)rqLwkr(h_ zUsPYa<`=v25&kHKSg*m13Aez?X({mPL!EanGF`J3uA2Ed-rR2Y9Un5uK{E$MXbCOm zTEekk)lBf~sPcdR3jn^3E|d-7x7GabGPDNUSv5x^hl$B~>C-G|iT3r4fv?S=pVIYH zl$LF~Hody=4gyu~Uw(okl8DPZW^3SzRTx<(US9+u*mJ)`RTiOq7Q4o?oS%ABhCdE% zyzec_TW|Vwe~R|yI#2c@+5ynizWN<}Zjx#|&Fu`)yKD$CPBzX$UM}3U;75h%z2oJe zdBP0GeAv<4ska`THMQN_x{H=gL+?E0UA+_JV#cFri-r%i63ObN`|$+o(&cXsr1>Ew zg$F-hS_p@lL2W0wq5f5zBvOX=GX`%0ING^PQ1l|YMJ_}kP@^k|AA`zi0x+|Zoq ziAkxh@K5Rd46_FXX=3sBAQ|)^O=SmTA(mh8!e!gsX~n|F{f*&vCb4$yrA31-NvgHQ z)-C=Y0Omj$zvnJ;0Etoa0$%&5N|oCI$=!D_3`V#{iD6bw@Q~`F9`oWLQEL`zEK>q3 zm{QN`b2)TshI~U~H=w%4CB)#*j5whNr74x7rHwJ&x{G(z zz<5t_ClQ)aLgTWWxXY9mXm$k0ZKqrxYTTO(rG6smf@@)z=Ua1si^h%Y$hWih_7wLA#p>Qo(%Q-P9 zinxook?V30_NS=UXo=kd=|UVRcgM+@H6kJWBm%nhiVLo|!;aA7h{GQ~VL}$77%icNH4v+vji5|xQ460s<@4YB{x3fN zg|FXqcKlJ@>lPPkwgs9q+jNqQ=$f{G4;X`az`qk@{iu*ZP$;t``S!lHOs;*@)u4^Uy*od|@ot^^AjA`JnN3XC#S zhY<_`ktkUkBC9Cu1toZm*a`#Z3?q;O36zCmKs2Zi#54qLJc*Yu+(jNRv)D-Pe*@w) z7(S~VcMJNZL8XRu#ZWCIK<8VGXPTJmk5evV0aP?Z#38w5;w4luVwuE}DBFmUFld#; zH=M9bV2Jw^uLw(5f-4s6x$|%hwy*xkEH`#_uc?hVFb)YFhD?DMN|lV#M1s5lS?1ds z&xrItsB^4c|G8thw=k?E792N+rhiPN>V4OuN(tVoDyrX zN}NHL0oYZFh|A>xQ9-Hb)>#}D8KEd}1G02cmfabw3vTdLx`(4W~O8R)$GMD;MI3;Spp`xsvLPGRKFA5@qZ9FCbC1 zrd0I6t3410(hkQNxCG075I`N6_$rXpzf0L3e<6|RhrSD}+yt^6GfHtA=~Q~jI}Hpg z^ZlWjh`Fpi3Rv+JuLK6#>}^uf=3phWlDDjzAyqc*=`|p0)`p!l7*^(hWbG}fRHa0O zW|NQ&D=GpZijQ6=df5edw;u-wH%nR-2Zuvw4WH;>D#O<6Hv#6>x4!i@+irW;yY7A1 zA3pM;i+)29U48Xc4}0+aSFc`8{AWM==|}(3Lk>D%?@xW|6U6-b*T0G(zxO@weCyx8 z;YojS_@6)FPe}gD^MCQI2N$9ya*j}3=Tw^| zwFq9RJX++(_f$nx^gvm6Zij#fqCN2>9JmmHlo;9-iNRkKvW6e7N|Hj=b*5k#&Ke6I z&s*h9lh-hyY6*571VRav)saV`u~;@YfeUU_&3MLRU8Q`&pTsmrA}$4yM;xX z&9`WB%k@u^@0l>EG^VJMfOAJ&5-m`N@wPF}&?8O_o<}rUY?b#S3y0!$=n=C2kqQC? zHH#>7-Ga$X-N2Q++A!_xs;@zQaa1nT78NjGphz}xW zC9LRybIPWsfFY$l4|4%GuLLhzD?%# z)41gn@Vj8XDG^3)H7F=iQz|jK?}Ev|S(EFHawR+JNwid_Boyc<0@Z2KX6U&d9gbNn z;mes_)qkjRN=)N$d}l}re5oCmifnZe3zo=Dqx2Pb8ZR^2Z|F1;VjYr&hfKQu2+XU% z3+2FKpR?2ao|6TnQ?!O7ss2bWsX6C*Ud@1WIvf)L&E$S22IBb6ETMP%x89aN$xm%_ zDKWz13~|H}WgbnmGU_ix71fJaJmcG^opt6JpZerU?|t_>p8oV>D3bN-HeB$lU(jQT z?|tv==RW(He|7A0KX%foU;fg6|LD9QtfL#kd~ zX3fVx{$YY5+n@a8yc^f7*>R_xp7*?CANAf{VNnAxT zV^TS544I76jif6@ZH`%3^cLBY`;mJGzquFPqRTTXXqirhk3oSrX({IcqH)7h*#@qa z5KzH(eF27D1f?oEK%+eI9hj_u%q7)6E`!Mm3Ij0d z9wE6{pjD;f;a6%MnPtcY;!Jtb0fJ#-RQr^j;!$8|T!sl>)^_n}qG`^8iNTTJfhIJt zA(9~;5?s&*To5?x>M21fai(RXK7&bx#N~N`yn|+qPYA?GBr=J!(JTwC%s}ZQR^+8O z>fn=>T0=15AmN-2EWY$kiEe)NRhQwQ*f)1fvwim1V>RN;qjkmDN6`p;GIfKflw(>= zGMdnL+F!h$@#>l;OpV*3_2TfrfisA8S>LmG^rTQ*7*Wu7aNrx9I zJhY@Y4OcieQx=!Yhel{Be1`MB5Q@4!gSb?HPt@)q8*FFA4Nop)Jx)4ET5;v@8x1p27LzWeQe%&O;n^{fALuX`VS-~k8!=tt+$!!h2~ z|L>Qtx#sHco&DWE{G&$^&TlWh=!VtT(+3;~p@tnLn`{QA+v?L4)JbV;yG%-IolI!7 z5*o6Z<5&8Z^8#Bfqx#C7EdWV#n^r`od@c{EWGD1EQdFRTJ-ksiljp2X*&zM`Dl|)Q zFI(g+&=`V{=FJ7Sh;yP`~Ns<&D@vjn_0z{XJ?!jO{A8bQ-nU1H{&|H(6`%T0>b zG>|Q)CXR}cw|YLi5h=)0M@?qdDkN20ktteU3V8%Jo>b@%svRRp=r2?9Gv-mEYUw=% ztb{qQ{z@?BCi>9^+Z7Ol*aMxKshxR7&3ml^FRn-m&La~-MGRw}a=2!>Vl?XEwLuuG z8I>Bo7Qi~J{PLbb4Z9nG$c*9)BgZsk$8yHZSWxp&vvo!SgpwmW(6mg4v;Lu}@mQ(| zg92$Ez{iEuU)bQ~O}ezkMWWz=N;`aBX*5_l=`4dt@?eWEsde8^G9E*-E!Q&fm} zhRIQAq(&lIH4o#=G%6LsxAb=xUcGYX z9j>`{9d4TuM1ZLTTqoAF)m#{ zBlw+myj?TG+ud$w$mx^$#N6ZVcXG80FTC*lU;J$Ez4w9S4tLnit7@ice&B)kdgZI$ z_`K&FbJf*XJ>|%wo_GA;Y`5KZwXI9G-+l+;FTRAoJK(=HaF;vZ^~+!W0!be7u!o<0 z&e`j3TKnJ!J&ZKZKKrb1pK;os{K=nD)w|yFFRyyVOW*XyS3Ud>AAS7uU$oCYcO&6= zZ2B3%j2{xGJZ$4fZp_FO1aBq6K#gc{-I5L4ZnK;>`f@3xYTWrKJkyzZxnRSYKFGdAcie*;<<5i;7K>&eD=J80?sWcpYE>!A~57w11BW(xH z`4S`0WCx)jaR>;8wM~?Gvlo{dhDH#vQLU75ra9EVm`KRLp)p5{(lqk;?!*7cCXTbx zt0M>46e?*$p)^Zn2Y@caNGCDn)Ra`}Syv1j*5Z<3vOiXrObe*wHx-FvPaG6i3so1Q z1j|IZj@5(;FqhPnrBazw(jI(xDC{8qxf5~ko(Y(Er@~gmHQWr0n?WJBb0cUKrk*TT zlQ=nztR(TVs6gj(2$oe%0$x!V0f-F6e~c^tgQ^sDOrtjQ;wDk4HyJ~b0F-M)-KYfA zL*jJcxkD4AUe+2>;4pi6yM36N$L|DX$Mq1Qe>Y1tMB}pTSRdaNX*Toxz=bk%; z5E4zCfSgEsGFp08WDGkrDQ^ZV-1=5#hIJ1^2R0@VTT??4bX9cWro|k1;6W77 zuYdh(59_Xb-;MVF>*b#pJNJj*cX^Z9WtZFUvHM;>`^BaHM;mq8Z~NE#@r8V{mDg=c zuD_mt3jmaura8%v_&-nk_L)EW^r>H~}+4uk~0ru5pMg!JKmR9$rOg?sGD z4Vr&BOvjlzSMI&!L`CRaa67uS8patQhjhps@C|Qkelk z<)q-wn>`#b0#_M@R73_NSkn>pk0=C(B=(NLhmnsz(sSViM~*CjbBNOc$dO`5+c}r~ zhu%S#XzHvPu;`*5kT7hjh``mN2+biw+D?QVVuBxn zIiY7U4Iq1}x(p$6tooe{HGa-JCc zvG+=i1%5y;H=5cyLv5#2fl0~ z;M|k?2&in}f6!K>Ih_cK4hPH~1#whS3)pd?c~r=(1tD`-MVK=_TUT5juhQH38XV{NwZ9 z@pk@>`rdcl+v7Rx;g9(KIp2By@yF56@4e`R=eoSf?7h$3uDa?9`p!Rn8J>OvkA8UX zs;jQL*S+rjZy){VGtW4kJ}v(a`wsl=Z@()c{O5n1N}8WI=_5dEnt%7K?;QD*C;sm8 z%l6y%?({AC6)X5x61Lxd`*Xf~mOnVCgV}1UtseTYNBrYE-bzl-`_T_S_)qUT)r<+^6q!N^-g!%dxzWJ_PT4YrC;x(-z?aD_dO1}_kEUc zG3}?q>kvlCM#=!D^$=(Le3%ZL^r;-rPZ8@QWUj}5sJMQ0e5nrJDQU{XQGdKD4;=Y9 zs~GbWR;ePu`U#^+*tSn>#OhHf+z6)nGpinz zSY_%(&{70!(wK^4C)`-3;PKQ|sLN0vs5xf4>Q96MCXEf5HBXF`B?1*Hl5i654oDPH zxq!a{OwflCMzmNQuo{9qF6EDOZ4`=O4{>CNbw@o`p~?YZ$1t8t9-Q1qT*XvbE=!Vn zDI=vnF&Ah!!VxnshqL8F0ylyO36YOX?pf~O+>vMN`qs~Hp3%o*T$p^EGW9Gx&8jc9OW6vs5k4d?ER82mA4rsyiDsTHFFTgI|$ zM`4186y>PV!AooXtv)rLZZG(KF^^s{!QF=5e^hbQk$D{GTd`o6+|;!yrWs`dh$F_O z(WU|%DsT{oCClh8v>;bu53p|g>OeMStRE=Fi*1|NYqjlS-1XP2i9!-nkq=FS zu7Tnu*}`6?pVZ8b?6uckr=Na$7amoSLRak(Pk!tn_u21}k9go&XPxoMlRvlZt#9p` z^u6~}PW{4u``!KOtFM0BJKyK>CbM$oZ9ee9kA3h1@7eG7c0cCmr_hi2(TDA6NBz>5 zz3S*^9C6@1?@Bvx7;d@cmh`dw7oPAe(!BU${;)kg7;c*HzyCe<+;gw{-}fH-?7b^# zKKY2JlJb4;_xsyyvkm64!Ln7=;m_y<4up(G@$0}i}5 zeT<*nQPb!b3LgB>!$?j|e*B+5>4|^Nzrg>lcmBgGU-^bE*ipWzWnk$Qzd0W>4D*Vo zrA$qkj7zRxbJOFW`L7nVDB66?3Oujn$s9|KU$SKR@-5Al*OQLt3WDT%&NvJMcj&ls zV%#i=25=qE4;^f}7zQ{DS(>1o#h__MvO5eLxstw7b?^fzZ0MRm`g#=cn0Wegj5EOx z!s(2`D+-wCtEie-?7+l;Rw|FlT{01Jc<)<>1G2Bzs_*B+1kq29sIB2`hv&9Zl6I<7 zg&&5+qsY7fEnj$mI2b4bQCZt z9RqB;hHaut7Kwv2|h9`w8YH?Cc~_10U{Uiu4P{N|nS zau=$ge`as(O*fIywDcUzIi+-vCjDxE@T0L3i=_k8bqpqSHRnmP#Y(Wxs7%2)4*}Ne z$=tZ#$Z#b_sZgm3eGvP@cvhr;e1pw`Ci6JNA0h&^iXrDTP^|rG1y@w4Feker4L5HF zkz=}gXkKNeN@^)5?HBM8Cu+NB7iJkP*=Laeud)__DoSTc$MT$#o+|o_A#n(NAEqgW z?K&^MwvA8K1t*xKMn{}Mg;t~36AY@*JQ)jUa08?e>1ahCq0X?lB#1h;aye>C%4Jr! zj^S||1X67TcvkYWh^3EIBmjN=75%{m5{G0aC?!6t$kbCI4&Njl!nw;_*~K~lLu|QX zDv=2tOtrskjWIEw`7lMOMoF7zDcwxOaf=%Wt|$(}CUG3Mkr#{D;nsI4<#{b9SDpl> zc~`0yQD{-@Ts4HIDQH{uOLI)uEydB9E9Fd70nhagl$2xga8s8{STjnvjQ0-;=9tJU z*EbFw!%~ytQN`Hd;DxSVwq%(OjrLt7farq*@|`3Pq~X30`4|rIWKm^>!nmX8?yE;p4dvEN)Ztk~ z=E3Ql+|V2K3x4?v`lY?w@3Py)m;B~!Z-0NW-)^GTyXEC8R&2eZ+?3Hqy}4Jf&6}D{ z+ajJJ(Ygse5vW~z?Z|AJ87N0p9i{%tH-878=OSo0i;S+;B$An#bhymlo1!-YOy%oR z^e^i17M-acw3smOX1N>Fif2qqrt*y`HO4RP1GbYUQ(2c2YN*f!h*lq5e3R0YT)^bC z(IJgQn(9hO;G@U}giLEQS4~R8IfCPTJ_GYf`&!)C69C(OOEOpowSl(W31$|p+o?J< zP_PiVq`XvQDB3T$JVa|kp7Rkr=$D5D3cs#A@t0}aZUd%f0D5Hx+SV>@z=+5%kW}J} zD0hqycIG~M_!y0JBMAgqT|0(}Q5jUCKxVnjed-zM3h5z2WG&NlOpa9j%;BViLr~!u zEl%(u1w-*I#-#6XNtC##9{Hp}G1w?21#NDInZ%MJuYNR^z#I!XUnVMEnT`G0idY%;SS}O8E{G z*~Q(adbaDM4&-(`Nh%;(1W)^XD&s!WBpkEcZGxJ9Y!>(gY+Tmd+Q6$#f9i92;i{S^O@-F1IE z&p7i(x4BKeD2}?8OQ1H`0ve*~&7}fuitcL@O^TGqtz+w9h9E zeZw!|=#8JcVG(Vz{BDp|SUe6e>L2ln{}7A5$w%{`3BEx&W?Oqw$U&r$Xk7zgkjULc z?Htop;JjAM)kDzHpj3)5{XARR&|$Y8R9!T?OVNBc;y zRou%X2+?$8mZ3)wXVE+4f^SZpijwL?mkg6(vVf0L3DUt-Fxh>CcT9>*kRlxlEy!x` zHURQsU|c;$0zPT^SWP0!081h|_yII)d_o{jyld}-^vFVspz15HJ@CP7OD%RAj0&(Wix?=33%t{K$)D5Cij%hW?$ojEEqW#4~HveQ?joav{ z)JJj1clB2}{w&yzGeuBl#ze6(*`(@#nk+WtOcQR}jch2Ix>Y%5-SAS?O!$ntHl=TM z%hySarrQph8VN+!|MYpnJdrV}70=hLaKtEr*jcKtAXMTy6d10Cpehg1Ce7ho;n)mW zESadIG8I0(>Lw?+#u8xwac*iuysbO=zpNRoDK7>@H12pGMN_Adsml%qTt!RDJ%Z>!g z9mpvZqF~Sz_056YcE=s*Zzhq_Z{W=YX9O8DfD8=T>SGRi#%R5#LkOKQ8F@=*60Vaw za#l-ETlL`{TgwK}ZCT9@sl;T*D^*m`Dolq_c4^O9!Lu3O>WiXkf^SfZnXABiGf1L$ zQ?{pR*bfv%H!$($8A4RiNTkXYNl1J;Y6DkIN;MZ@z$Y5t=YtPhbo50@YX`XmZ=aA{ z@L0ix##|d8nnk0neQ3W39^cvcktN8b!XTY_OWqHP+7zv6dz@57yd6<7@>b91%v6;G zMJp!uR|JT_#s|mRF=B!KG9^D_9wnOkh*b>B&Sif=h46wDQz6BLQ{YDg{E3E&t+xG(?lW1}k8bd;g zt9A6l!NS%V?mgo9@K!=&4zzYGApJuVe%v|7)8!iY*jhJV+jMTck$&Lft-cLg!PHp> zdS6{MIwhp#21|qvZ)~tR#JoUG-hDTz}z!1V5{$MB-o2hRAv*O zxFnb9YH#v+J}0HbF=TO|vQ(imL(rPr@x7_W_wxZLVbwZ_xrq zh$2W!Hk&oAH~G;ZzSVEfpr{>r&qEY~N1SM$4Z9xo1c1?+CD7W;XH*zEoAvVoOe)r2 zJZ?Q6m^y~&)q@&!{xZ1

;~7%pWfD_W=v3D-giMETOCgyzxlU)S&6QPuHDREv z)cPwlAVxNAf3dCJOxU>XeEbyrRO^3Zu6eijZG?cyDJBFxP$;NX+BvVL5*?tbkrh-n z=;X+z?E-D&0A#3?iVkGR_Mne?fJ8>QHYT{_?M=Q60eh1l#zR79PJ%!rpm{Zw(BU1F zzNPOs1;rOm4V2DljvHTj2?86#e4T8@)D#AQPS!(7L1)ctyKAMpbfL&GGVnIzxMUJG zE_vNS$g@*U64lF)XM5;Mkt}WF&nT`Yg^`RI7&9=R3=G)n%k;zSlzC~3lub{Wt$K@( zi7OKsGn(J(+qbIHa+yW!&<32o!Cfi z1k9(TwHp8g%pMi0@@yo>JqAf>ILA)t&XA7yK3}pT7b5z62A%-e4$JmgaDf0@?%HwM z%FY?cG&BT8vT%fFq6dGimDHS?yqTs{If2WfNV@#Y+aCU7FrkiaH^MbP={LBDjOs>r zHtbv!0l;TDlVtD~g1bbBNVME71-Iyz$g8EOvtp*sCBO+lz|q7EevJ@!})6tW$4M_!%m28M;(^ z2t8$#jp96YkjYH8>`H{~H~I22QIp}iG|+a?B8z4cRU&Woe9la3C9h^(s-`jy@B?V- zFPfk1fd40&A&W?eivevFY9vMD`CRvx^qM*`>yEPlaW!}->bMo5tu4CrcOVTA*Ur4D z=Dk+Yco0cWxoV<8ii=bS^_|>I)Zfp~1`59`2-~ORByorgb;R8WIfLnCz0Tzn_l@7t@r+a8Ep` z3FLx~7G;^q*I90}PmeZ+WNe}!cdt26MIN9!9||;~8nhtCyBfe3_cNr72P&P;1G4Jy z5VT!7=fL~2$xD{78p7VSIH^EyIq$A%X^*lo17ikyGB9APZ*w}G8Ba|=sF|%v?w)KA<^;o`Sn|UF^-^3p0s?0Q9c&|2DFJVNSI?bO?p(? zG4vQT9ZV3i6T2K@zZl)3m#H3FiLyWs=v#@;7znrk7>ySI#`E;U5FtdR#3yJ9$FR9N z9z`)$_46^70K$VW48e$jYawWqm%Jm#ir^xOo4f-cS*+tCEy#&6wU4;0sez|1DvBV@ zOEvl^>nZe6q9Gc+@q;rBAq8!|Vk{<`_FTBn+A3JlNs6c64e517+iw_CV0l-I=2%Su z)nN{haN~nZ_QYilpJyuF=oT7L8@FRhtyvOf)Upabr)Z;eGOr7_y&a7P`X+y_$O^>` z4&ebU$8?q0xM&2ZWa6zO;X~(_)sb*9%1u2$h>r84h+^+x)c#Y3S^>zA?KbVOb0K$#^2SCTYA=&>7{!i zd_Nz-PNWDW%(WC-9$l0hUo^DLkDyX-;mT-6az^_y(KH2j9F1gn_#)Dw!UlcLd(7B0 zURvYDw$1DPq`lS0BFHdy$moq1^VqQy`8Ws+kc;A+379DtBn+6f3h+W6SRF=8dko4*U<7Fbh+yF3 z`~2{{6}Jxxn#E8$s>^sjn^V@p@Q7`IEsrayZd0k`wsSL#LdevEOQOMC?O04P5SiMr z10r8C!_`0XP)IZ)LpnvAXegUmb6LWdN2ijE>ihZ86ZlD#<3vwEQ~F4*!?+sDAYmO= z%&8dgRF<%miWX{wf;5yu?O-+wq64!--0ede#?kxX5H9IpqNxGUnYu-?!P7~)h$xHv zmYj9+w3&5>BNjs?QjwwqWJT5V2u9RPDiVa$i){yHh|YBfGrCNR|M*rPEyj1K2D}~Z z_7_`LWYLVGO3g#dOwmUox}5z!XWCAE@+dQG9ngH*DSs8*CXQDYFK;?u@Bjms-waQ|StBDH26KLZOL~h9H83*gm_DIupDzK_3 z3h`_?W6l9N(lG;L2IiZA$yPBv8QrcmnAjQ0e4)fsXLAlxVp4~3fVjS`-*H*;| zmkL^=8{f~@6--_)VKKp#+JF@k$R?C?JBCc9qtJnw#I!1!Ls>gJa4g3hi7ljh1Jh|y zRIsTX;1jja<+tACn~jB_{)cZ+s7wv`Ddl^OUi~$vSIGv>s zXSj7M?=s>bk5DwK=qPEx>@sAtNpTuX=xWZBWGmSNMX5|H%&mwXdA7_BszjzUsTQ~r zqg1F!tA5FPTGaU;4zrP(YJn;K5D{q0ZuHafi$`^z~E7-92{wwfA1;LIAh=2&9^s1l)1nJTV zosdETDgQU~tukx3v(GJgiLRZK*|TQNd^2lyxvT7bj!lGtQ`RXtOWnESLS8XhTStqK zVp8R@C?;OXS_RHN9#Xlc^hmWiUe%aUnsgJZR`R1NIE@n*9X5LfB|4Rbh6b{V%~KD} z2R6dHvz5n)Vvi*yMP$USs3HKsA1^s?>*A?tj*9haVmJh7I$qWvZ76Z}R%BFNdt}#` zEPMJUh#d!R2?3rZA^^=9X>6qsL0B40rAa^7lv2WyQ`k~k*Ge+f&nK5+9g*^ z^OiG^Gtemmorn5B@V8a7C$4mCc+Hz@SO3y!SuFiTsT);^I$_6OojBO^pA&(JF6pTCpDOYh)o-bo(;BgB_&el6k|>(6k0Y5iHl0@Il##X zUw~!D_edS0EJ3y!gjc!i949qs>qB55O0^GjFCpsw+XMP4Dw z_Y)!qhbeTbj=FH9$cwQaBbrG&+HT2hSMBUdKKsI<1KJj}tY;%CG}0?m#Zq4r_lap) zHB?6na!?I*jl3Kqy*}N2m8q0zumWTyoY%3+{+be*=S7dli&s{v?@_{@)n)2~lf8?l z5LSTbma)!gtH|kzC>1q|J|64Ws**RzVo<$7wa}_4(auEq{d^svP^(_#F&zN8!K|NaQ2c zKBWJ?C;9FtrU}2_ti1Zh*j~~s{n7e(R8vVbj4Sve!)RZrC=JmbtEX7icbmJ_*~a;* zxKEl}Rt?qBqD#(T4p@K2hG6iESCXiqIvjTLk=j3rym=8pA$cu$Pt1eBX{A5UeRciy z5H&KFGmtaTCIhX8`Z^m2G`+fciR+aeu6FUnnbgSXpHBByl}NFY6BJ-J*n!?eM zr`%`n$qG7% zfM;m}6AO{^8KI<+CXJ5>;4~83r*)wr3RISXIus_SPcit;Ad|jL@sd zp3a*>DAY9>*jokpNPQnt*Y=b5^Q{&8pN;)V8OOtRa9E5rsq`2@N#1S?gkqXM%pe_NaNJ!*VRIQ|rf=M%@vA7^qQ|=*jnK+K& zr{a2aMRski!L-I!-QLG2r>4NjS&Df506kt)1s@DEShLnTG(0M?k&@9X6|CAP=@CtT z1QnDCOGA$5zrSYHEGCh~ZYUw$noIPVK4WN{@VUc<`X0uFveU+&o z!-BUM>@~BX5xs%8z=mhEGT4{R9ssArinKC0q~28Z{V@_N&l4!*fyF=>Kqz{~#iPX- zf>(B6;q>KQ$J-|RXqC4YAp~E&IRm{7;K6vAHt{sx80<}=z!R10`6lVS%KWuPB)rPWNILW<^{|Hnt`6ix zaGN~6Z#LUV(|EFVl=jxt9WR4WaqMc7XyPfbH1UQEo#(La)zHYC&oT7{JYPhh3MxeT zaK+)wkj9{*k`jQm4h(vdZN;NVBz&lpWe=vB_Wagr`T?uewCIAus->ZcunYY5sx8B4 z4_MF~?Dz}rmbv0!=YOyhG62W7^Qyi&@t*u1Elb8>GB8n@c5^}{S9i3kM1n<911XM5 z!=HqT_wxzB9%j{j$YJ^$l=0_c;LgZ9v-OzHHuNMb+$QiY2FO}qCYBWi+Y;eBy`Rs6 z=&ZQ2w8Ddc`X>`2 zq)|#PAcqQ<2VX7}y*TUxKunw)D$=ro>LteOtXvy_Qzp1c#Vkps9Dfc|^|JFv${(Fz z?~V;mYN4+G0wn4f2M|zfWNlbUfH^r5lN!t#u`y+I)H7mX>y3j^JUZ4ktyY-yxQIx_ zwUltwQ68+zu{SMo|Qc_>(Q;JYF=GH-Mg3b*2JULT6SE;PMzt+mzXL{ z_3^U)Dgdp>sJfiFTJ>r*!Bgf=-ztTIez92VOcbTEbi9fPzU(4VGafIO8&R;4b$h(T zw!8Q9#iP6Po3ob(S?jtwYOZ0}0l{r76sWKC`?MM*Y@|*jDL7fHT|oBQLEswM0+}jB z#Q@}yVK7o=h(BxDiYaBTJkXTm^SFZr>95+g#tE9V;wn%Y$GG@uQ(}riI|jmO3md9 z75NrR=*nc38h9cpMN3>l>B9#v3mei-)fJrq+a9|0l3RZM!9@$^rHIbakYOXYKl00y zwmC4Z&83`yWj+JAzjfT?%5@t!|M7cMC3T{VOBfV8EcwI_Zl)*(s`pkYCLekKN@uW1 zQ4~A~Jr#Xyma4$NlP`|NwV`@PK}3v6LURGCQr}48K>aDK1#3{TRnf#siAEYVy5a;* zj{_)q+2g;^AQMQhrMz#9$g4l1&I~G5IK`llhLMWz)P=F94;Ts)D5WaW5Coz7O&v!N z^@^gLI;6>&C-~*Fs@iKn_L!nZVYNX~8USb~Fq#3O@{waCRYDyr<=B`yUXbEPOdTR| zT~USJp+KcPZG@_uNEO-3oFA!GMNg&Nm(8_PVTJgZ=m&`EDWRR+1RJ7+Vxy(i3U+}( z1ft++DWHONW#A>9aHIq`e#8l{S1XM?qhPAYm)wO|LqdZJnAV%UG~7zQxw!)-2wOu| zDTc%Z23q93dbtLY!Y3Gsaxe%=K`5B47S8j*pk5M>7mtr#v3jH&7mrcMySSGF>OM8# z;+$HZiok}1a?@s2gENP!WrA7S1lL?wb_RV4{l2WCQ3!6K%DE~?scnT$F95J?HHy6J zQfQlpfcEx+$_IT5PZ5sqZ3LH=p*u=~Ywt+*{&Fi<$Zi)yuRL+9Y=76HOD&YXqT!^qm;@a?4FJm1F@f%584)Ymi;T zu%l4SLUjk;Tn4xfa1HR#xS0VBS+BqV?OixSsSGZ}@qlhs{O+3tunH<*P}5Ji3fZqLOgUjaG5LYu-Svsf1ZXeTf} zi^AwJk}A<-0t*(jD^o#=A2nBKj~?+7KrJ{&YA<{^8o>=1*G#Q;uB=cr`nVGn z9t}M{ykg}@x#J}}_Ysl8Me3cV;Au&W_zAHv#!j>rMgx*)RKwCvkoEP!8AA<4V_{`M zt006rC1O{o3pSxjl(Cu-Y67>Zy)u+tt3SM%p%oRu+T;NaTPYic-;!Eg*Z}F$L^oYqRUy zT<^Ms>`y_OglZIJmM3nq|=-Joox z^?c`L^MgN(4+7V z=Gic3pdkaDhx$6_7AM|h#*Nc&VY(8}+Nh9jQ0Zs0F=H-^Jz?@ucqoxp%{jWscY%YZ zfNFfC4XrR$Vyclv>ShZSRicw>AEIjaffU@>qDQkb^{EZg+Cmj%A}L6NjR!P)s!~ue zOMrMN0tKTR6Cl&4CO3}PID+p2qu}CD?MMTLgkyt|G9*@1;8Enq;yID4@Q?)Siq<$Q zoPsFw18hCpDrnJdKxUAkSk$X5i?+8QFDa7aLMlf^3$hnoAu%bI7mKEknhSt@0+L7_ zst?47#GM)lrL#cQP>9ro4~v0Hbze5uPP*3sg=OI08*m{ERM|!nv=z21<6ug63ZOB% zypVUtNRbN`Aro)NH+b!9}Lt)~Y)U`8Wqs~c#G1k`W7M46!Z4>YWzH)ykW7l@jN zn>%moa+k*yM5gsgo445`gC7K2R+EB;YJI{J#!m2(}fKG<4>f^i>%~Jn^y^scX5{iI_Z~~)Zt*s?x zT?xW}9I9`$2B>wlc&#gfcv@Q3N04IP)T^v^?UUKiNHHvKg;WG<=*6mV)F_Q)y=7EeUDq`XrMR`YLn-bK z#R~MKWJhXtae%z#|!EP>%HC^UWF7~a9}bik;^qN4xs?PjMIMru$dwPJOXcw3M}6dVoi zKrbD|QxJroNG~oS)xisV8oTwN6-KuO`a!Apz51J8?gaK$++J1j^`0KhvQr(V5MOLI z0^reURyBMcIQ5_Q>9Y^#7>@SP>W5(L;N;UhT|5IiK+TY_PxKqva?=M~8MPU4*mEpT z23gAC{trV^<;xLDN_uxjyESg52U?<)aOsOcY1`>z<~9B|xX#y!}10f#Mldl^~Lj!Q#`+T7eJ>}<%Z z-Uf2qeI-<6lD8l=j0hoqu&H{**>^6KOgZ6is3Ya z`V_ys&k#H8EWIXqS-*udyr@p!&)+&LbPP&3fi75~F=%uc&2MV=^E5F)f8?K#azc)a z=YHm=VV03Jgn)jG6*=Vcvvd2F^RA4-f7LjXcA?gvJ3o;s`#t`dJ1xO{D3~A103lVS zjSzV>C2gFWIIcC23N z4=Z|}Aq|=0T1^8TR7#z{#&5h;S{Cg~^t&X$Il;Xk0BTR;c`diRuBl`YVm<=^#O1!l70;_!+O z!tKECMMrCvbucs^^L-tJSNaefzKONK2MWy>$#{w8cZe5*Pc=Sw9?vVEoIo!xZhn_rPIPKl^N3d>&lkIQ&*|x5 z_xqu*kD($@!ZW*L>4?31*-g-*c|!FC~oSdNwxW7kQs=nJOk&od#w{koh~W zcsSzLD-Kz8mQZ%yvaOzb35;<53ZqJEZ4p0PRHL9vus`Z@&Rr3GXeX5W{HNcU&a~wh zmZz#jX^{tAI=uQfS1DN9&Vo?+A_)joP)r%vCsf#dQHjpZMci<)`boiR|1S`U%lLnR z$fz@0&8==Znnw#iiN-qZW|4dX^9I_$gJ^-9RzVe9HU>uzs3;9+DkLAfy(gtTN>Z63 zhf_P>rt0TsXRMllOKpcBnTi=N8Dt^UzE9M7K%1d3EcP3&n=#bQMiy%;^Jyf*S!TOc z>OD(%nqx7%!M{l4kLmo=XUK2a)Qf5wF3Mnq*}g7v`b*dlQ)DWCD+`Fmh*dbkzGoiY z%-u&T|1?G_g-%?egFdyInfX6HM&JHIcL5}7;<_JM2O^|~eS+)xyJN%;*19x$Af9Cz zWb`G56?&?t!!kEQG7DaC?=`c6dpab7J~YEjGRHS78~4d6eu(+D=GSx>0%@lT*hI00hJ$e46lp)nI04^j zUo!wgr#p2Rd+A0PG34vbt~#G#!5s5oU}AviJt7N^)Xw_$%vHM@-`d&A-DSy8SNv?z zDe&;fwS6m(^~Yr2Q=glj!)~NkW#!fNcD!Pab3F6;ibVeXq*QKp;EK_7nSYL@045|<2mbZEUpMok5!7k)9T>c|v`P7`PN8w_J=FZvh)X!dgL-WU zj-hk46duAhVMp&}8-i4OoNdFl&r1_q6YwZ6=cWQDRAXtg@kg@uO!x$B61S|_3h>k` zn%>gT^AQ9bY&Z;jt;uYTGkaG`7%S1A-^;fZ=SYjBh^@HFKD%YEiy{|5|7I~A-g7!y=+RZ>N^gC9!x#01)yVCw zuK6K(rjv3F7j(8>OiN6NuTyznR`O0PsHc48OmF@lWuM#ePL0?qd+QoGG%*#f8cKylc*ZWSK zRNp{U5a^^QDdY=tsVDYgU1ge4u3k}|U=*B}5Cxg!+0)e3`J41X z$u&LwU`@fK)!xsfI%-?$MI9C?O@W@kmk=QQRGE`5JC~r`0d=S?!?sG5NwAW=foonRG5DaVU(Q zwWX}_&VltOH*0l2+n0V@7_fl`syn;qr#Z94PMRIIDnR^4<&RLE@ko+Smt&!19;+?@ z<6^&O7XZ|?w^6k0&+m2K`Ow-lPtr{I9XXseLp9XdW)NRNZXIr~a2Rg_Z<#xv!l#Q~ zO_q3;b#Ip=V)!mKBg%Kl7wq$+Dj-SP)=uL>Zd(QUaBKIw#FcH9bLGir8NQFiw*p;6 zrov`9EPs>z=Cx~;9TPe}$FT=_%}M)L zw^udK@`)U|zUG$6q6CmQj2gauSUigMmIXoNdeGEFER+#)i|C zZK+c2x4lIU3VAP!ZYpQeMj(WC`(lAQg#P-wC7TjVV}n2B~b6S8wrJvuU7iyw`|Ek(bh#RjHMn$e~kc}W%ri)MDU1`mY`(b zVa<~s)iyGY5&eb+3T0#{23gKo*OR_z)}KVail8|{bh-M*sY`eXHNubNTrv1#{QCN^ zT>+Dt?Jep`xCwwSeLftN+jaqAY+t7RV=Cp02_nAXAvk`s|V@|e#6DmJxRJJ`4*Zj-8jP20B83Cp=OxBdbWU8{H|eZ;;=rJ@A2Ny_6@Gq z2g$qhBtFYkyhR?1|LtX{u3$}BlAOY$CN;zIDWas^Duw^FxfFBf!HZ+vUTVU9#b*lq z!NGKJD47eCfz)_V`3ZyOhd(=|;A0>8veQ!KFE_zM51+*m%TA>SOdhx)18Z_U&>1uv z+G?0jMS7T$<)oF<6#jFu{(N`RvbRPDb-n)CkkNrPNaY=r+Gx-3Izdr9!0hn?vM}%x zI;?G5!LEpX)o4}KVR^ZYUfFRwtg84*w)30%%7y}LT;)>;X7||$n0E!+ zR3T$)ba8cO+ji{a1Y$IVq>d97kBIK&3bXJnZudB)yJmgawvGH&FdO!k2pUdx>uHdN z9XY#&k~z!U4~P#nZlZ!h9{v=kV0BFe3?7U`ugPP}>2hkv930mV@nrD};=`3{8_fB; zf9lr6T8qK>BpF#LHq8wWD%CkLoEEwcM>kHj&HjgZodd8UNxJeE3V>u|rk ze^#STIxh9S!NqY=W#Qt(l|@#U36xRqQ7aPlK0?k({EI5fN)sQ#wtIcD<8Gx&UK9U- zhu1KrE8njMTN;DU)E+PS-9}N#<&zV;8llR6Am!ov{C70Ml{2ZuUkgl|^r%1Qg^|SO z`A3y6Z&5c^a&C+-FXcvGsJ6ax(jZuGsRB2O->a&i$v4#~;pOv$|{t1W%r)SHL7o0ygbs*BjclEy&L4796F1 z&qsHHw<%jt>K?x|0FOyk$DPnig_L!5_l!7(Q0aNQ=#Y*<v-Bt>bSSV z=mI-0l=zMtpnGu<<2Tnf_?Y2eh~`XoC}7n>v3e7Fq{QnpkC0sGyyBpBxilj?t9xrJ z+%POsWuyoBoo510>G9E`j{A#Ulfyo_{BA-6#C8sPMqnNG6nG@pABVsoK*i?!4OV#w zG#eTP*Bh5CpHB+q*W3@6tSVZjpdT}HwWvbceGzgv&eeebe8AlA}yKMZdMyv`%Ph+ z-RqXnKFd;()av@Lp~jg)METE&`5Ix~#f>~Z>*%#dD2%n`+eI;4LEW91L*|a=v6*S< zT}H^Wx#;rkt~IIb!UdYEcalvyq!@8w{?)-RErNdr>0!)HUHOZV4gI)xnxA?A9E5e}uXC52Nd)qhUhN9VaUHCK=pc2)D+kq5Vzx=+RM znjaeZ+|@|gLw7re0c()Pg>XVR(lo|sVA37EX$#pegv3JvA~Xh4F61V#>E+9#ZObD| zdNi3(o;2(H4%+rV)|0BK!C>qMtBN`z;pLP1#f^bew-a*Pj;CM5wjCRlhu^uJr;R!* zRl;Uxiz^CX7qtgtv(EO?Ss4rpbbD#fqDpV6zaRAWrwq9iR)-1M6IKmWRui=)dd!$B zlQnCtlvP=nFGk^h7u?u`QDebG`fRkL9<^U)Jy@+Afd?fz+VOmWR#zBnz>fFI<3e}G zuTS%jW`fUDI2c|d?AcE|n$jXeifHS*k#CYylA(vNOPYY%&v9e5^(x?^DUGS0Sg4{eP~v0ZYk7gn zng=KeuDv@S$xMaM%OhTYEtwzqTgSB~y6X#KTS1_YFNW(Abg!ETiF|q;BOKgQbn-=L zbNy=?7pw($p@fRUZX4r%uhVrbCo{hBeq8VcG7NONdD!1oz%(MTsi)YF+hal1pzP8d zHEh0+RSq`RnW;2A*{>&W_r30JL8RQ0BqQQ&t=MxFhsHC9Sdt%5-i68XE_CjuvC7JG z&8P@)Y^J7r(VXf|`0UTg+Cm_Rz2@Ng)+ghP&gVG&tokv3J-roU=d0^TLdL3g4&bLw zO#lO{`$+>lDt)xMjwz})YK!1z=v-LVTy@3T5`7*V_pfjiam@vsof7;@Lkd?SToRKQ(pRJ>0~ zIDy`KUmDlmYP*4i{l2WKMiNy*x!YMZozS1Z-ZyQ&+Y};VhVTvZCXTG7l6^Tuo<+RQ zle}=Z=gSYe&(lJyl+@Oir8A0W$QaGKKL1_kikbe(`I00~ zJ>7L?V~>P$w~O+Odmj(x7l9<|;x3D|1%C{Z{Fw8$cu(A1jn0klaKuigEfwb+vdl7- zT+0~g2Hu1pCz$J;`nPdEeWcB$_xG@CmLo!F&Z)7DMq-CbAnhbb z&Z?xAv%bSZps`FS`C3q}lHXpw(HqUrRVPS|Ol_WHKt-Y`j)cZmb6gtB7n?LBdFW7% z=6(ORPi-|Fv98O#%l1~lT3|=sZiOZ0s%=PX4r&koSYJ7QRL*=3J*`<~NvHAYm?){s zsYb&(oF$7yl@2bLN|9L!T_pJ*VE z6Vuc`j3|-hMibZiT*&*Vyu-1;7jO3;p7-w!>qonmjw&0^`~?8c(-TK1q^t(WHPf{_f-+xd(C+gTLdO!3Hdgzx55-a(%oa* zEuX%Y8e%BYQYxb`LR3`sW?9FTFL~2(^>i&^h(bVb4|Vc_u!ULpktJqYm(8(?-&zQF zsT8&18)#d2lu^huTHjbFTF$;ZtWmk|i)hN^@z^6RoGUhS0Ezy4;S(-6G*uKr53nxt zAeYw#WG3hBrQ01#G2~rCYW<7eQelDxdY1JX>vPao+lQmd_E&`4jCi*+ZOfT^;%Cz!0S7zu`HjcKrZt2 z%kjKKrP}Iv5d3#0k22!}lJpzz6H&nRuLjK3{bh>J$e!t%GttCYLyO(WwO+12 z<20z(KlH7WJHZ|?gHv3y6n(=XS#dk9l32VL#|JGQJ4R`C#tI@erQj&8B_4t=1-BVp zta|Mm2v!ZeLuvp0`TyV57@_;BsO?>71=+&RLOp z=n;8%bk!iz6POjY_<$bRiVlr+L{C^S&~y*e6&qpwzLD_os6Ikhb;ehj zQBPsXd&=pv0Z>zo0 zzn^X209c9k9RI!NK%)Ab)h`JRx@VY3(w))Ia*FUGYIn1#bx@r;+@ZUZ5!sWh!h6#S zrpojJ20Du~WxR!(<#X}!DP0B0(^6@x#-gBYZk-gKZ zAHKXHNad{-u`ZBgiTznQ1&r&%)PoU!vei5zYP+#@|00BxfpN$~QDN~@X=|Xp|4#>T z!b@&xtJN{IQz=&UaUb_tq!#LHd>NGXPU_`1dfxTF-c|J7Sq~R5839w_`m46DPN`VW zi?ICWzm;RMch>`e0cvMRLF&rQCdzo0T|b*_n}|l~cAX0Xj(keyU^`H6c&GSiRjj@< zB8f`BHLiU&a4q~;&kM>R4pY@! z1t{UmNq>f?rf>K_W29y|9#%l5V!pk+Y&Q1S^#8f~(IUw>hn-&+Y~awz2~-z;PN@;H zO@7i?*nEVvB89B6iTtR2-lF+F2mjP1s-TBMxd$m8$g+b^tfYOhI$J(z_$}54`xPSY zmJo5)+)@Jr&kmEIHIZqYuP)NOmfKNg-FRPO^#B_u?}U(af_5%BRg2EyFrdic1EAXn z>>XK?nw~+W)ybtZKZ3r_c?Q346on4Ye^uTveOIE4I$c8PVDLoPmeb=-^-C=dWiroN zbfkC^m)0Iw6L*F}$+-8w!UUHY#qIhV#1L{#l?Aj(C1N&YT%e17gkdfjn#emuLpaNF zXsA>EUS*KaYV`%V?JRnDy8XVY!>%qli~g~Yg?@6SXh_Bz2@7-ii*%HNAGXa3eZ(XX zwNW#E6mZ8_kp@__#``|0Qcm6B29YYTppN=3?*;%c+ zA-eudir!&e`%5k&I>Qpx{C&X0(IHUDEFw%VS5ye4BI=wYlgOf*4gatA`saE`_g{EM zAtCVnA#a$S`BqMBW5-1z38Mz$>4^jJPw_F4waQ?u?=`yd^soL0I_}*Q#bv4kB3-)U`H9IR7NCrOiv$H;fGIN zG?cHV7^eW-v%QF#;(@!XRcZ`Xo&7f-1r$pvp#vE?a`;p^?>}i`DU0U!2FOfMZy71Y zxAJ95!?23}$(wygHeJxXiclJ^LHo^=KuF;_vmsrrfN*7N*^}=lahtU4HcA z8N&)J;p;EW&Vp~SBofWv_FEE~>K@6VE`5!BP#IwPR&PG|4kUtWY&Bh9tMJ~0kUp7s zO7hZgs`)TKF{np7;OBRbRPr(T8XX>n=I{<#5>ynfvO@yugZ{nYH0%D_A-}@8WcEIY>a614$ zhUnAx%{0edIW4#QVMeryz|PHGfKtQBZaxhYplEYDS%>p(5g!ja_z>VmzTvBHaJ$k6 z?leeBvE#SQrsGLa3uqrW%(eBk1N&`cO+*RsFwv7k6}*tPR_Rw)7bGO znxBZf+?Bg(^4+S?#5x?87vRjb(8$8fu6?7G6U1lJmk3DXwbT2F`*9=w^%2b4e(%;B z8pXFQ|7gmg4LC!sGKF(NB7XFZ)@uR_n-d zN~-JFqU~_aadvPT;)&e}t_DsylZE9ytvN`+L3V6Ei?_`!A(RBuW$}fVPC51kGodg8 zfz7&(vny@n;fxRhL8m7YQ{98dVUb}1vSkN5qNYof{Gq#4VPRv~eh3@+r}jIdn8?lI z_Z=x3_d6zaMK)LiP{uGp=U(a4x!b+AU1&C&5da>kOt+%O?#CPw_eqZ({b%q{`!3q1 zvoru78l~HT(#In4<)ixahj0>$@X$%1>u>C|(j2Pp;XI|Bgs*O&2wT!IbZoq=f4q^t z7i}n)Rl0n3J*1dPY#70+xl7lYRqV}8J|UfB~i-10s5M|1@npFz=f z+ylQ}U&IxsGjL;S<0|;Y^$tqrkI?WjhVQmf`&Bc^07pI+pzm|@!$-gK$kwYv@T#E3 zcz{{+r%gBXnINg-z6TFSRggK}&emCtd3yhCyJ079UQNDK)a{rXmd&wlBgDt@xVYOKK)pLe&JW*P6^x1}4B5tp!v6{r zll`X!Qh4&jGam&EqE3v8S>rw1**=?0lLE5nDQ2ry&1`m_WljxtpS?HoJ?wv!t+qHM zG8NRC&;OY-D)2?=pK$o&F@LA;!75CWa>6@sE*cf*k_d85& z9#v>4i4RpII3q)Be!xrR)3jZQ)jspQDLjzKcqH>c&xQfc&b&7)R{VhGwve}}aChy5 zS_CF8Vtym`pXm2rdk!Zw7$0$+(Wz=GUeF8?YWvl(w8-3%I&Rp0v`GV^w4Po9_7<7o z;%aHJtOJjT-Z-DchdicaT0~Mi7CbGm)HSf4zyJL38nMHz&p)I4JvY<>1$lamSF^Vu z3Hs)^hik@CF18P?%B3MtK1UwoepSs-eXGm{dM%5BL~^g=xY|FPquw67^FUYVEA41p zq&Zsk0%H$8-!9um=Dv{IwOBxjh6P?u&b)6I&B|Y});|F|u0RL)uMYwGS$@*znzqOL z%K4>fX9%O#zHEqfI6Qb;-hx#ZlbEk}KjS|7o%d#knvX;=lMmEVrMzZyHAX-yG`hU2 zG~&v5+n(Dhok-0aR(CrzxPY5azZ8oNK5^Yu0#Wkda8_l2dYA844_xXvK{{|S^A_KJ zVW>^6{`y5=$tKajO1!@9bzglz1k@g%cfKctX}P-KS;j{^v2I-ZzC96XqU-BZJF1X*M^+~o`cSva)N0Wx zczGQ{Ixy;P+noWpzpKEK4kA_z^DU`2=r#g6D^+{E6ksU9KkJPC1M0Y^1^u}0Tev!u z!dlQ*8OEqQdSQTK+K>2`2XMN$7%$QS0zCKZ-y~W3n{h=hbhUP}t09ny?U$Wje zr>KTutmR>P)j|wn;r1rC!Nal&cp5cQzbAol{v!cI^5*fzb zgwHcM{rF6e7uIW57L-3qsdK-wr&U9`Nk$Xsi68nawPqJOnpSNGsKE=Fu4^}?R(4R5 zbViZq64jTx$T|Z1mYSU{&7|K^x>Hg~ZWP4g*w9_emNEM)TA1D~iK8b#?K>%gHXcU1 z_Y6oY5P&{a*qnA0K)fg3Kz|+b89pFK{hg<-F&WpJc)AAGpB;8g9$NDQez*^5x9)KH zVg5prleem20@miNdaF&@wP_XbBDRrj@vr;yb>~r@3yn+Px3$4sFU7pkbW2eXMUuEpDgAcY@Qz0(i@UA-oWq*(7~YjR1~ zHN9(UiZkPc=DHn!QhEK%K^Yx12H0W9=OnrW6C;M(8wT+pTm~VBm$Z(Daif+d!tyDh ziVLf>Whv^>0vy_Kw~$y1y20xOZkK;H1Z;-Pwsb3fJr+sYMXDzGkSPfT3hzFiWxW&g z+$fMBhxm6P;>9h~r zl0<77OQxW$;C!+{jEa%T@>-t+_&Fj2yY!uZ8K2-@`XZZBWHHN59Kf{Jnyte0u&@_r zyiz9}%1He!ED4Js3cL*eHZdIRs?GZQRXp!uJm)ps8vg;!XHZ1G{lomsaXKV{P0u;u z_j1NmTA}&((IQu%F>B4{vo{#4asic+8e_TJe5gb-Zt!Nz+b5@fI zeU{y^itdq?xWtCI`nnHMrs)W2g(#}r;)*BJd}Fc!EE!_0ThR$`=R>PDK+~ZhUgRmP z7qeFphRGNFsQAsMVYbWrVOsww#_x6B!FWJ%)qD#|>{+L>`TW5;13NNXZhU{zm?D+a z4OAmVUJF{nmWm=1ayeA1>ZH2OewdLuYq_hu%eZ&tgC@vuiVx$Mr}fXKOAEM)FXsc8 zBFCbG;JcUCzqjd5pw51|PL{j63sC6g@vIl*W-~ioF^&6@2Jk_8i%5JIhz)rMrIO;do{rDxmmW8J>DHCogitqYO>+s@4g9xOrrNKOp3BlxxmigboV9Qo3=` zPXNLg+@-&H=<=bR~I(O2>i5I$!pnQ_a)APIWPg@sWk1&28 zepY2ZPd&%9-&Qt7zOH#(s)?ks=X-XZXER2TyubRv`}BGwJAU*Bw%)VTekz=iNd)KY z&5DEFjS_hs`Ldnx@JrHO!Tcz*AG7`k0&iw8{;L(W&@2i!wEi|B40q9PV^_yzK{J0g zg`+v5>G+b4&AkB8nj6pFJ>FUB26Y)^XT#yW9`Sl;<7zx!k*ArLAL56cl8gd!o8k$# zT@fTlwne(Wrbu`1yBRF@;Hk|W?XH`}#$ua__d_lNsyqPXE|;!AkhXb-3|;eXT9r9n z@tG&_#pu|a=|v#^_31^YhLQW;)Yk_P@ab~YPvC-7PP$4|R-=z;9^ z{^BCEWcXK(&Op~&@Uoeq7umDV_@9oWYeZ?i*#$D`eiCa0)OPOsYqhppJI=qP61 z3Z?^hiqhy~@&~`~P;OhWZa6Q#0&U z8R4@epO*HHwm<&(Ms{q(YD(01SzmNVuqyN7uoetdCZeH)f41{incC8CO|`jVRzV2$ zPWlA}q3R5S)`AxIAnhxRou&Ky2-A^uLBYvja~m2@Pus^M!N@B>8k_TxyyVTklHU$) zXov4ov6WrATlY>~4A01!c*ynUe#|y&rTwEC0-b`cLQ8r1(8l0EO-^bw4LJ6s?4oExYDnIHte?tu z?vR>ysYn{EUUo5tWGdwvjPkR7UNk?1tPeBqOanOZer~XF;FHV&bqt>QNnR2Ap(PdJ z-G!|HW74~{t!OzkLZbo51e0ul2Pqu3KwhOPv9*V~F?RM2MRH5OV@8aIi?wx&g^Bd9 z%+ekT(#3Fgl|(n%UL+-iY#^1_du1_p@RzCFym_a?mCrv%L~^COa{)^&DgDqqREvT4`_@n}0Pf3kToK-OuCMr-qxwJ2^Icsg6xUcnztIjF0CIORX78k_bp-zMl?8v$zQKkI@66tP6fcTfN5s!2jBuCTsj5T3moY28 z+(L@!gbiR%n+CijYFxMT9nqRInyFTB^JjL+o<<%5oR4|*1rh|wd^W|pB=)@%-BC> z-$#DB9N)P*crvO8tw&-Z4jVi|-zTeT822%mRAfyJ&Tb|bF275-E3aOX5$|+59qkl8 zKb%C2T(vlwoL_wi_np@r&wY&SOWtVf#1Rt06nR;i2c?EN2(JzKz1BEnihOB0t2EB? zwe60Y-phV2(}JeKYhJVvN}qQ3PJ2V8_q!|L(SElBT1r(u`#W~TQx^T1Zkv%P$>=av z(VGuepXFI0HhJ#bdU+Ixrp?`w0vi-P=nJr7 z&e|$Jh=Nx`T4P#rvnzDnwe7rS=YW6OfQ|{QhXD}AUJ*)CKbvn|>9nypCd-ude5qZ{lYL8e&d=5}Z zCt=ECHXXu4cj>cY@bTJrWUqPA7~_tE7k< zBF|&TsIP2hue$xmbt5SUcc9ls;i(uY7@jP_rJCW|pe$(_H*{tl> z&P>NM8qTYIb|P2~dE^KeN}-h8x61BwXpSIO$8&8P?``C26+m4g-w|2~4)dQ|DNfA5znNa`>5t$` zsdQ)E=;M!ct2W)4izvBw@?o9_9lPoYf^L81V0~m)H&AuKuIHv>@c0Sxs=1CQO5@`- z6Z?XPRT^8_$m!k5B^gQJI3LK70=7K-8ATJ*W$;po$hW~%J>FUWj-0xVh0pYF93HrSGh42Pl;!pL2-}>)}k`VpPTEP z)d8S`+f(7!6%hZ~j>t2&FQ*8ZP&1TOzqr2*Mp3Zi{9q5?Xrc4f*4Vb)hwPqn+zXN; z)DOz;yl=s$_VxDZnvw1u=m!V88{Jp0GbVd^}3=lI=rD zpZcsdyXWvZ!QRkTsJ{X=Hz%dE4aufHKtqi(q(CFk`**?J)s66|fPOoi04?4iKfznF zvQt{JmX#Hc2;MA?HzJ;)Qg;X2D`1fC;Uc_%4f|AwvB+p!@*S;BUI5s^LS z$Edcwjro`73TzEshkamMBi{CHHq>!yOxoLWe*6O?E2+sc08L1_B8pTpuX^qS zKLImD-4!q6%@PGC%u*eIHxK;EU6Lqj|w5R-L|5iU_5b$*B!;AaF3$e;sDqifD z0sPe!qO^RGm{4II(;uanJ)<9DsH2_)bMKfgGuOuF>H2D{*|Ek|h3}m=(|S7}BT@mY zl&HIgUb`Mz{+)Mm@O8UDv5hmk*ylpxNKGg8RE#dnb)Qo>#tYU#Pb{jRFwoSb@6YZkA?HyfPoF#YN_xkNqfY8nlPG!;jsAU2i^RKO5hs6zTncx zWd^4w6P9C5f2p}@f;|O9nCK2x1%8%jfAlhV3q@z4(7Z#BL$&U>n=SQwU$QR6($*67 zJ%89nw|R2;c35k~#q@`p5bs9oLA&jt-*9up(7J5a;e8>Y^6YeRH(%)|KGTzm;kN@p@aYFbOHTR}fdv@N%yrp_aC9w=}M&zqb?zje0 z>Sdf$R$Z4kJ;mHb!OU9XK$!mIl=D94|3UBV{9T2>W7XmB&-%F(jqPix+k2h=G^VG6 zt0GPx9V0>a+YIk>LWue6rDjvEvam6C?J8}?&ycR}qpmmr*-Ssl58nCMU)#;@;60bmVRTz4 z&4^peW@eDXIpJ7*29nWAnoF0ZFg#SE;^>+GB&N|zm(;FnE(%t3)5K!#i!@RISiUQf zu|G{A2(*(j*H><6m4lg+V4L^u41tb9s@L+*4d*78=}IhUg?>&+{b#}b?=|c=%!4j) zyhH?r)n_$4*UK0&8r2}FpY4AVG`r)!37UvFj0<@k=M9bPc!RT8*@|mwg-@89&khA` zspn1HL%{yM+s*sLLZu_6+;kiQFR9VjMhY-kJ z1dbuXHtI-+9YWG6w(@`0TNkFFH+{9z-Gl`^`U2BoV^@N{{{&((oKveI5tymVC;dAO zg}%4%2n%N_!?PBZi~Wh-q!7fI;IJPQRVHY@HMDd*#gebF(5bi8z=qQJ^J8yDj)%?3 z94Aa2n>+#ggx_j1dRSgn`?LJA`X|n#3{8cxMny-}Zz83ll}3no{niAdA>8)y@mX0> zJYZ8TEBR=*)N#>~T%dreiFqmG%_*pN=ZXy^#e>&EoJfTr$?x&&U3S#*-SC|4H(VwUJ;NT54b(B#qzEX3Z`dT|1C9M^Yn>ND#;Q}C# zs{AJc{hyXGV}uE)+Dw82+xXp;tVlYb!&84xcwN`;m7SAN*{^<^+(CY>oE%F$1)3AWd# zvd`cc5^l@Q2V(aOD93EGM>gjK2OK)Szr?x?Eb63V!PVo=_P3kl(zd|;c2dAiA3BV2rEqVdqSN$`>eE;>E9XE zAR)mZ+Sg=xulg+4hEhzE=qKC)(R#T3^TcFo_hmr&F~by$Qn^bChNNuc8MBW=)n;mgG-|7mi{ud#ir%@>jV<^9TD^T$TfUR1D&ShZW6M?u@X$}M6)1_jNYr{oHs66pt zw%IqED3{Ye<03X4@fXEm7(4Yif1n|fpdGEAZqDZK5T&%Y;&MSbXD*4%s7j!5b^-aCj3f9@=YyLn?GNa4w8ugQhKci zVgLNozm)8r8e%|k{d-SvsvfhgfbMQupBNazSY$SN83G_#d^1Iu(ki=Zo*zNTxN6!qw%&GMC3-e8)x>w+Fsd$st@Km<7ctgY(JLf|(N-0(3Flnsw zvhIAHDwpM1$Ob*R?6zDa8CR+KH5CE=z31`jo6a~S)ToJdG4hg#Ciad;n>EMk zX%VwUelvrTQPGh)a8&V*-bTm>L+*mQ5#^b~faHKL+f$=svaQcfzTwXYbdtDPX@) z!MLz}4J}E+8&$C+7K>xJUq^B#ErQOb4WVS7jh5xQiVz8*1QPT^iz@z}V!^kT1l>wj zA3510xQgHM9m=e=CnC_m?*~QoDB*5Do8D^rTnTAZeJ;^Es8R-PLJ5m_;Fv=nPA_*$ zfjVRDZ9%BqI@uYM-}!&Lo@?A}OiAqg8aH4vkx=^W`CB8=o6SDfQ0gPz#~(2iGRL04 zbVJ;aA?p(;7km~cAjKt_plvI4Cy9T@a8MV_chLvkrO7MJ3+=mUb)PvWQSF>HuH%LQ zx(*9nGtB(0>SAmv2d0ec4{+}Yh$--Iu;Yq{1t9y;hk~L_XM5U!lDf2LYpj?Wj4f~E z!DrrC2DDgdiB441hp1RsM}(w{zecl#l^}nH%OOyl5BPAuph`c`+q{128@WaVNG(T^#ley01qOIb$9;lzgvgd;=dpyUECbGDw-O}WpG z^#3~CLOXj*5bEy=L|#}>Z)&}%S(ClUD56ODQVikEjplsUl9wJo009Sk zSwK-Af(Ca!*KQ{R%LeHG*u@e1pXl{s%b}2sG}U;(xfAOdR(vpAm!5U3|E8w^nc%Wr zV80Jg`8$Y3U6}=dq`oSp!c(SnIh=X-=1ebU>eIK%!)cqbbVxV3xUnd;A{>bs^8X?0 zn*!?!v?v?fcH<_EZQFJl+l?C=jnUY)*~YeQ+xDEkH*X&1EB(1??m3%lueCQn+eU7n3E>r>(i0Ilq|SCS0~BrRimEzAxt<-sjzFJXMT>64foRW2LS3;KAdr7 zBiQXT^EEi+#8u^z++1VV`NXS_c{QL9mL-dTUlV*&B$EtcVNtbQRP+F5>cZn6t~sSZOAiqd6`?Vlhsb21Ra08kc}@j= z9WLSXOG_LVhuUO96P<`Lw%qprqd7v7fmJ?`Yy2aDy?yt(>_I8V83<0L?*A<9T!S>o zgkYl^3$)IMpQR>d?&7^B6g`d%a|y&YJkZSuo;Gn)z4ILPsQYLzAP%$flD~Vy7K1xH z2TF^8l<<$n0}_;7*z5Us*@=y-+cJ6?+?p+;i7Mv>H0W`b1@1+s3Y5$-Kx+l83Ijav zkLV#p*H3>e>b^?UmdT`~TfE0N-2#4?TuPo`@bjD8LDNDh9|BUAhM+h|t{`y}c`R!M*=?lY)5#H0a@2W&)b9;;x z(IVWwh?-B;F+0!UiMpb=p8^^XN4w0!s zArcK`QLRDrj9f{|N(reI!@!_Ik@`FfPGNZ$dvb=uXV@#IZNqQZm3!4A4%};G*tBN! zj#p*FYrim^i?NcKtaK$Fv|OVZ!_ip&XT|B-(#sf#5UI2-vHknG;Dlq5g?YPcRl)!J zrDT#SwO|rFZQ#5CWWXmvGSPm^FZp^s2S3_Nl?RmPNFuN#!+7>Y!&?nkGz)Xr8-KF3 zr2iM74?y}C@X2!?h-+(~+6zzmYuXC>p#M5)yqWs4GULrP$wY1CR$crdgIBcT@mDt8 zxh5~Ul@9A&6I}nT$#{?l#zwdl2oOx6SO+b`ulJb@I>4O zh;#^XMi_WYpf$Wn1uE<;Q) zP-`iPQdYm#jW1R-Ni+F($N0~G0joF(WmQ+2TbX`i>)&~ob1+RNyvsgf_|>qrFL z4g@F7#K3$m*MC#kHunL#+oy$qjA)`xAV2WotRnl*-%RX&gLV8CmI zAzSf|rF-`c=~;c9fBjP7g4Q4L5V(><26l**@&c6X+52>kD=v$PFQJsZP`WStjMG^r;EY$H@1P#&^FkI6+4sEAK;q;MLavK#@Rbh z8nq3i1Fp^GaULu@THW?@hl zy1>|eM`AcI(*d}TLO(Rojz)oQM;4JlLd_#9fo7SZI~+Q$viCg*MR8=>y?aI=(pYX( zvtkMVYVy<$`g*`ug$EMDh369^A%qRphP*saqN ze7xJL*L-IB49t^j3PhCU;{?xW>Xek60mXvht8I=w4X0{3aHSo6?#2+;hOH$ERNXUN zVki_sKf|3(cGh)IA!~bHo_gz{VMH3Fi`5&}zSc#NZ=pF=B|QAEvAzxax~q4zfDI&C zO6Tb&4}=woLG%&Yco=$SOvCK&b~78iT>|cd&u|M%@3q|B-Col%w3LQ1Sw8($ zj-YkGg~#mQIeh1!i;sbv0SaN>>;zWbO=j1@f(3}Pd0gP9_6Egh)q7G>p(Wwxba6Ve zCUx0TBj;Z>EjK1ynLqWh1G~>^?#{lrpZ#5ajcv*;%>hR5wwI{>ep|%fcG(SQ=Y5lw zHU;pUYC7KUs(zm}t|T)W6+cZ1Bdq~D6SVEx?vBfTYtBdomQ}SM7bKb5wm{P$C3dt)(EK!odKS{Lw(G^^JQ8sp`>2&?-Oy1#+ zAz`C4xeIIw|HIQiS|nu^sT;H;s(i%qI~<6q>+=31{_L@B2N}ys9Xs~JNTs)PpZX*6 z$_|DdXln*&REq?$*?+mi;MMAjhbRB1!DForSzqjUVN9e## zyMy4&M%}nJqY1cOe$qBV_xYJ@o?MU6Z@BG5E&z`aM9};7YJkXX(@)oR&G~TBTXu%; z1(<)(HmwfEl0uP{^7+`n{iOMIo0S`qDX?!u)Za)UkQ3V-SRKtWW$9 zd%^8gd`8c%v0M7jcUC|Q=AydMtK9a(4jq;4cJqr#2krejNs%t!7tP4Qmp;2QTq&s8 zJLH_ozYXx4(Em2TxsFh{UzO-m{gsjWf}DoEDsK8T%&ni$J*nt;xeho*9tu2s7%Ga) zuAk*?*i9lm2rJH~WPR$*UW-L%jNSR|fS5}HhJSo>oZHbE53)C~u#KC5I}ce{YmQ*? zO+0`TL&3>5-7jTwx1wh#z_9fEoL-J~l{H*y&%7M+NkaPK;KWPAwsA7nQ$%$_94ZL1 z6_(K{MFqJAE&KZAsgw%i+XgZGCL(G50Fh5OD52-2V8>%0{W#yt3(;ez(?Nz00hiMvKCi_(fvEqbnhq*t2E46+fkI^6ICJT}5(asCe;9oaP7)*)b7%8Z@-`D+sg|6>=DUCSOOPZ+by zY4cEg(PAm+M_pFNZ{P|lV95DqneM>#T%Y!7sjpSl-Qf@f+B_exa4gqjkR;zh>BC-E zC|GW)+Mkcb`L1J^>dcI^ZUWKd%+=Tor;S|kuSVY}xJSe(*2Kgw2VYNsF;~t_>1qg$*RxtcHV?Yde#&yY36*k}mRGgRX;V%7Ft7C~?H_iZn*duh zRn6iPaBx1xz-?=#KF5wEdj6s5?CYQZoNq$j>71x}-s@?xP~O+eu#RmRC!F4I4e)2GM)A!-oaE(R*M0gm@a@yRQMZFTr(h zyq&vdR{{GA7_Y@Y2w$^4UJrnMN_P4{d^FYf*YtkcbKUTAWqACi0qygClLdy>*Mr3G z*@wYt8dIL(y6z5;y7I7a=>mYD&|Nd|J#xLKqQ{)DB}Rn^I_hC zp3fU#fp-($_jN&GiBc;CY8;D_?OVZk@0TI`o;PV5ul%0Sh756f=2&vGA%xE_fYI_| zxBG^jpbI;|YeKym&kPdb{uzX#B0e*qZ+|3-0ET^(q|4eS|42ckj^aa@bu)`#8;r6F)5-nkQI8xpNRSv`Yqc%3=>%v1ID@Wbap$1CvRIvdk z=w*Ub-%5UkGl<*Aw)*p*ZN*0uTaO#u-w(GsAg#xt7IN*ryl`8ouJfxaiUY4;1U zqbr-lKZ?X}!Nh6RWpE}(sYTRq(-LYc>Y*8aGU=4?(;|%tC)?2c6S7JOMmORs+mG8r z1old&o*<(or_9C)IrgfdD&_>3aODIgefxRq3Bx!Mt0j8>2MZB=IBCm_95+VH9S5SR zDcrlv6??}Mf)r(j6Y7C1CXI$~39{!{ml&RnalPe|&~A`n#nNYW6$%`_q`1rBiYmBr zxo=|Calh0E<}RJ9U?oE@lVb674Q~eU;{f)IMz|I9} zssreJ4OHk%GZuViDUM9kBy%Iu!^YWJOCRORs={9KB~>9ujajO>VtyRtej>Clkr^K8 zWOFzj=H->&JbClkxKZ>T`e+QYdlVn}HFk9w(c(zoO!b;AaHS!GUH6!Lb`>ME{%ak+ z9_KhIZ$VnI*BG|1)>{)4?c4Nw_qkNT=KNA)Cyhr*QYhL#bMeY~p)zac^la%!)LnLk zv(G0EBf~lcjfo;+VdU~>6-_L!{hH1wM#|AE8+SJuEW6$IBU!s^^EUpMr3r@F0rgu0 z6?tO9$B+A_4q3u@P`4<8S756!0AK*6%KXbkhYwK0>^yU--Icg>fhO(p_-w($fi<@crx_2>DfZACi`J9MXrI@e7$bj}eU2y&qna-^x=By=BKDzM4>7`sH4~tlyPUxHySfLb zs9t~UXWymEIGervFb z$>Snz)2=kjo@XeyUQ<{P$UeZghm7VZlFQIay0i=xvk3iD=7>SnT_Z4l^$n6Pd?%Wp zZx!~^1Y}VmXax2e(AS`a@m_XJ?E>JE z+9kIBpNo?PgiMUh$?Em9soBa%s<~+Vy9GBBb@vBBBNwMlDq-$GCcI6q?jGpN%lR!s zyuFlF$xSg4ts%SdP1URaP#6dmDp-S=Aat$dvNti6qNBsX!bo&=8a?yMYEpMEnsb!l ze!*Vbgq^842lL7ZbygXx@EGaIJJ!N2C&$N&fSU*(tTUWEMC3k&wvO<-lA_M=?W)_` zWb{O^<RvTx@M6n1n))A|qS z_b|##jB1dbq%hWrHdBq8$#I)Q=|abfC*4{NR)20g(BF=4Tk z34jB@<}e9SqznLnv-v*TigmzX$3xo%F+(y7K7|aX0NNAG;NSd*`g6N+#rF4cX_

Mqa&da5K4wGT^Ys2dZb`GnvE5LVwvTPbes@iszl5&g9qIy z>N(XNXxgt6tMt3@9fN?_V_ z*fGvGIkmTjKRp6=Qi zxEA~paV8^WhZZNmOWA)Mg@_*Si-4|LfPh%D6sn=ZD5(I$s?s#829ru_6$^aGBm>cv z;uH4I(ZM-WO)~6Px~&PV6~s(&{04_SkE=A$L?TYUNsYKOg3*4uoM8P7f~??t;)2)m zR*Ub-u-CTO&Bx7&2PY~dy{fcg1E}8`pksB4%O$Hd(Tc0!K-qOI3Sa+7Imp}Rc*CN9 z-BYFe8Qd=O=@$t$@okD6pG|pPX|9QLImT1Cr8`xUtK+&jMyRi z_(2Y*1xeqA^_Ks>X9k|0!C^W>BYVUw?9^OXFjIK!>hXSl0fZWRXLMoG@~|Kfp83%l zjS$gse}iPJPKA60=M|f#Eztm@XkN?>@90v%6(ICjE`M+6dM_H-SS+iUP*v@i*M4}xx@8`d@&5dmma{D^Er3Sdf6fR z2z4Okdd42jgWZUVayDgHWti?My({9oqpC-tLrCi?|mK5W9PuZ@Z>K}%<&L- zgXw3GjEUg1ZsbJ18{>Qw)4O zPKPlTGmTwsxz}+y-fNs;Xpr%IW#zTQfGpM^mN^T6Qi1U9ca2X){;R*R)jQ*isPLb| z4c&!&qrq`KlI!Q7HkxA(^9n=ySgpnZjcr{$&Or-M4j$D~9wIyidpM~!%VRv{HKc)P z+)vPH9GbIr8vU@#Vpj)*--864W}A+~=yp)fOl*OTEMMyg3EGT%T#zOZgJ)EmaBjwJ z(tOSMW|>d6D1!Vd@p}6aor*EsNRuwy4W|Q=_#M4Ob%V@5(FL*zzq!e8wtYgg`z{#1 zsCtLE6)A3*aFY1j(5<{irP9=uSG#5}tT6ls*yIXC&^ST{1g=V+k_Td@)y71XJ2U?y z+REf>uJj7ob=P=_(y;&ft=q|s%GYwasUF{7HJ4Eaw7<%05P=%6b;0)lt*#5HUs?l0 z1fw73Bde|MQ+4U%J4Z&`G%*b^Ci!Q5WLQiWgP#OnTnsK3vKA}8U@rRk`9;FOYJA3o zB>x;5>RVs^%FleT?tXLr)9d#OrpuPjg8M-xr=#iq%emJo8Z#DY{D2ea$mvn!r$Q!j z$Rf1<*3QB{4l`n|r7583aZ*LbZtK0p582hAQI$KYv0dXrz-5u~Y{4o;*8e0Vv0^df z?IKm(6VyMtv-I}%utCZ2F6|WV|YQlT1mxNp2k( z8OY+4vmts=NX7Kyd+Oz2&(-QeAWTxF#|utK=i6Q?lb`>jM$tWzH1p)s4~cZvz8z$d zm#J6z58j-}amRjEV~kM zCsy((^N@q}W$y9h;thd7{DB3$Qno*nu$SESk)EbuxmZ4Wxxr~J)oC+2({fIvs%kbW zmcl=ks>VM!>fZe~;ztAHrTbEFhD80dXj?2qd!1=S9x0SM+R(xnMTPT8-e<$?vj!G= z#ZZ)?6YB-@O>_coDGN=omE>#rHmDI-ON6wYr?d2)+ZIa{Ecp7QN#cK&k0OzYjK7zT z?2g)dI^zXVfQos>-R?sXx(Toya32@v^@4wYGrF-4#ri~XVy&BqeEMaan5AXXSRww6 zFgA8ZLSahuWr?aF4XU^B^RUp$58$KmgvP_$5y z^~2|g#iT_{^JK}U?Y2wmX2=|R=$PU2)i5lyF}Xg>4iG!ZvwU+J{*R&?z$kPWkeiJ$M2v^dw5Y#e2@FaH;Mx zcNT z7v`}fsi9}kkQ$!GP@SaIuL`Qf4mB)@K1?oVvTtQ>H`Pa+x4(v8bo19C>R?OUbR>w0 zCX*W&BP=AYhdsL4?1|AbxP>a!D*S@h20-VVQBCrXU#vAuBHQ;Ob()js-fR+q=I7aoU}iX8B#!u$7dU3oE#x4TYLqTsT0JUS^o0^Bebu@HYvc9i zX%d^kX{+|rCIfcA?-))j&Ek<*nnYJHWkvPgqLQHb11kzxNWk0~%S*jcA!V=rO{8VQ zWdqla-l#+oxMVwG%V$X|%9@~TMs*0QyQSK50MH%3iE}Is{HzTwj?L(fdF;6NGbGf6 z;PguuUl4~=soL6c%Ry#hd5nbi2g^j*V|P%FSBzIH0~fRP%kbAK{ewCU$Y{I;Fb`xt zpn|VY^zf^P?nGC0+#hx3x_OCg4n7LY=O=iyG8awlCr{EL8Eg5ak<>Nq#fD=*cI0eX zL6Qxf@Cp32*n4@AZ^GOFy`Lvf(`qew_i8Jh3@HNCpGOGN*KNW>5Z7$=COg)Ui0`G- z{5hfbzFAC7kwp9!PVev%M|oU{XRuHSy_6x#K~|X+nHU~?$$dRE5vCB5su`!7cb@y! zP-!-)Gf!+}m{rSm)uBpPt5oQ+_qPN0I(l2;>(D&yTCH%!uYEo#=jPJH8);RT^}QG= zHhI1#{mc+235$$yvDNP~C~6QC--?F^VF_T9nYW$`ObW4394rVDj_^1XLlZ)ZV=RTG z)29+;(7Du>fArKjO3=iQjfIoi3DlXCH!#Rnxqu5=@CRai?YRfdglE_*uhr_>xqH}v z!jV`!BfH_2=Cj~GwHYUI;WVbav0ZBois&J)_1aG{yB@dcPOJ4K7@_7FPN2nmeHyN5 z*C-f;^y5=LOi#y$23-(&+SMN@*YjpfI~ZcLm=+;+BcW^#&)FM*EHPvT)j<{cfinT< zlP7-Y54qW`|KV)F#+$}pN!y<_1h0kfs_JHP{cTSwu!vj*(%2ROr3d*0N+&E>FDiv@ z$iv|Sg3}FMec&Tfu3v=bNCJUJTw&Y?75KplLV<61n)?gr%7m1|g~c(cI7~?d**__|*(zbRrr@qTt-qr_I`B^FW+v$v!|VQb2@w7Q6uWJo zKnHME#vO*^>?*%Jf3Fx$V3ZdMyBT&QkrVa{yYrZr(@p&Y3XUIr zSA5exooP?o`>k1-(0egoYcTd5PqWt8qRX2h{@sb8x>EP|_NTo8S;YR%jB!3vO-Uh` zgZwNYK2;wfU*4lL^{oVz2CJnk??4nIyyK;<^(12tbBPNh39?ClIctwDlp+-J6rJ8f7Y*P$NP;Fu_Z}``knCJ){XpT zGslSZW9;R-(L-}A<)Ld6j?6E1*2@EVYN4AKQXjYuBaesJq4vka3aj5auhLo|8FNOdX2KlkbEkjc6u@&e@hzj5 z-4?*%=+~aVqQKg4UlpQLqQG|zKh_tu)`R>RMB0u4@Fp^NCW>j_(>Q z`8y3P3`AYH-z9xNF?KB&zvu61?c?|a4!%W%C}#xtfO834%EgiA53<}RGn>({T^}bw zxEEI11E!k}idFJJmnFhz+NJ8IE}W`xZT7AQ2n7+Zp~!(-sTp940=1(hV_mP}c_8efrfhNct2BS`nD?0b4C{NF(58E_385rB{DEr^%rTXINH z07v(WixgOvXwOLH33!q>6eQE5kPGrKmlY2=%BYV!ReTw=ko$A+4QnWAFHB3I42mT<|Im%6SJG*GOl1UQ0TmM)Ck>DaeRdoe78s zYX+7nJ#ZdCR7ct6M+BdxklJT4`$Wic2~$L;XIOS_p|Xyxa9PZeDY)Ria&)FFQYpF~ zg<2tHL%-HC3;j?g+CbpLI<KJX2#l_c7^#7bDgMn_n4*p@`bW5ON{ zD^K!e)YB3qz&Ng-lnw)f?29B{61BW7HHNzPlkm%fwy=V=W$4)C+^-0a-tsT)<^8bx zJBp=lBB42;o4Y9C1N0Ubw-yRpDU7Cx_nKhcpG%;>fRbZ^5SrX@tkwY^#Y~LiMN89i zFPHo_O>rM#micZtG1TZ+K0#@>aZ70;)14GGU1QMqC65$8YG=5)TbXhjfvo(7uOOC+ z6oDs2e?5vc&O5%BdVn#|ViUJ-?l26<&FJ8M(;uU07`v19Rw*7b@64w3MPC=nxnJuC zj5<($;e;+lR}ZW04%;QE8s8;U>1Wn&BeevGQnXWi-v=L)kG?pH7;Kp#<9f?t|G=V= z*Gd?!a+nlcb<-)rL49BJx4koopGT4~fYv&j9?}2|`jnHjnOIcocHt&Ah z4hJY0D%TvBCwiP4jc<(mc~!qF?&rlPBvJ*Az*|9W8Z`f3bTz9|=T*Dr8yow0}n-}jNf{TT;*JJwD zqNhw9dCk#cOlghW`NG<@TGgvu=W>S2CY7)O+uAQIUcO$jF3xep?tj6Ami^k!)I#C) z6mi7y%50n1qQ82V;$9a){`1Ex4w49jG#RL73RwbOF`D{U zBh)9*sOSMpJWnaZq67K7Xdh$9C&dIsWlD7OZ<-~R)oL4+3UyX@qWx|$w0p=1H74`- zkGt_JXJ+=e=A);1-Q8h$g&qFZN9#ztbN-6P2gTmqO(U6>{A@*%St&KVCa2`_1aC+6 zuY8TOY+lna)^g6;^Tr$Wuk2}pDjTn>$&`A-n~7ENlgL zw9UV{&Erp*5~!8KrwD!x8OL9Ht}&W)E%soyzcEJ62Ok3vbgO~MHs!V?C1!Cfmj$M; zC3D^DhGR!t0rRyZ86tTHzEG;y%RTWr6~QbGIy21*G4e*<(K-^V)2RIq{h?h2FBJ5WG=`e&eGK?_41TbQ|=W2!d~gcY_0 zMl?J>Sxt{PMSp_|Zl~9f+n%><3Cr-#Zd}G?UHs!nfa?wb67HM%kwNnq20lE|hSPkP zd?w#t7=I8?*iXIfOHc#S(HJaX`rzOz@dq#5M(CTrrXh zub(-~G#gRa%CY%g>I;Aq5Tgus&L*YJCiH)fyn`CZ7-~E5CMpOkaZZpma)mc|DL72T zTTgVz5XGfL2@g9EopKz$d!ka?|NSnrVs8lZ_Na`y+yG}B^p$e^cf?m4(ez)P(@B3I zJDi0Mf=q$g56Y4ArG)ICwV+j$`=o*2jn+;BTXJYHN|2~2_LofdWEI2dlC=VjY&8>q zW>n$^2wZhO-rwTq4dux8;uGY4iA+-`*X9|NE=TrE3`5slv)1I2&DqAHJk0b97Czph zM$4=ws<|0&Cl1KAUJmcfCQ|o(^O`HQ>67yAesLpVxOR6mBi5yjrCYU7tCTE~g%K4% zS)@U}%o z2gD1W>Z1^(nDOu$qtk2$k%Bh^Hz~Q9Zu2RuT1Br1@Ake>C=YOU$5wU46sKdaj3x!= zVvhgg*`RFF9uNIec)J?Rf3%=FT-{E@Qjs=2y9_-ui5~5RBTr1Us#PGJ?EhPloFYSK zo^(5iW`XSKSiZG>A$a&=hGw$26+QirzMn3_M<9xqv2gQuWgF3tBOd%(C*%ZTG!#AO z!6@%=3gtqJ&q7m$_c~fnW4w%dCWCB$Se}I#-&6q0g-03eopt4hJiI;UH<0Gf$soFX zgg#f5?(_aEvi#nT4dX#wF#FilwxIgQ95y4z_5)3^=x?(hP+I$7q40y^hxK3$Wc&7R zz4NA$DBgS0w2UNA$vzJgT6E%cERF-5Hn|pHxV}Kz`@cWX2|#)Bf{u3gamKVx`pKe^ z4#?c~6NraMZ5Vhi-0359UT8@B5Iyhxrf#YBE9qmyG2fK%ZcVcIg|)=ChGQ~{>B_^r zTE(E#4lzRX!n4uhW+bSt1$*o(+G81&Bh>p-4#V-hMY1xf0e9j1>n=#?(OVN4C%)X% z1T9@>IG3m5_>0^z?bJ>ZWj|J>9(IO;V za-3Kx<|-R+aVxMpkkymnm=+`-F}=ux9`Nh-3BUsc0ZbGqNdNx$@)@+tF@wi5Eb3Bl z)bn{FoOnaxsXiUg3bT?bAo?J(*I> zy~QjGJWCO}v?7XJ<}td}T>ocEEveNAh| zX50*%bGL~+1{2|`KxN1-?rVl;Hu=1l2HF%}?aedGPU2(>(FBq=*O)w+hb>gF>mL-l za1-Alt}F2`^|3*Q3~ z@KMK#aI%~7k5j!@LVSqk5FtV)RDcj`O7h3oxME1i3xZXp3?9cUzcA$s-QCMl~7i^bPT56jr7|SP8yS%{-y<^d;rGb?k^pz|L z#AF}pB!yhJIjKb5y|zZ*rKtYP_KcB0GJogF>s=>&(H%6>TsL|AVwRXv#Q!2kxJBNHz}~xcju=VuEdB2Rpc&D z;pf+-pAN5X?FBu=ZtZ=8ZiX3TMM6atI0h1Ul6Z6SOlzG67QMpwp3Air51m5R!E|$i zL7wJ+tJ8nGQj9M6s8JFE?LZPwxTFH5rwBsU=AkYjUOaq{PpkCxrJ2^?v!^yBg{=;0 z8B1(@epU0q7&=mISa{%0*-xv~MFEkFm<=X^F>0^hKJ2g-R*1q+$6%vpEP?djwf;KK z7Bb*GuCDcFzwwZa?SC()v9+r4mq#@q^u;4C99KUJVHH1tAlptuDi+e?DpOGF!0T;4 zHI~qmwt6DGkLL119E6TQ$4Ac`;BrYcAP|H{O?K?)lzhcSOBpr9=}j9&kjuZy_Ag2Uq3T^+|l94JJc%*|R?;f?$q&veV*YDH<2-^HUIr zvBRFADdPtmo7r`$9H^PF8d?e*N388NUvmh$7W=FWGZTo%n17Qil_<3X_Ph({2QTC0 zfhTss-BbT{S+*}&X{zB_iQLuBlPXX8X=cZjqCRxrN{P{cnd2(|`O1?!cM=Rab;D)Q zg^8&^14kJvPbrf5euWZsngrjU6V6;4rHH)xwr~AGd%!82jTYlSz7b#;k-j`$Pe>(# zNGi=mj5$UokDI0(4)qVcSSsL1*N$5VO31VWTw5$JaZ`e`%^1aGRB(_slz+=zhe z1#O2L3tn+!oP-X6Y`lOdF%1m(5V=v0;ah)KSAlgUeh2S=y{Gjw0k-8S~ILTcNmA< zYF;|eRTwID1mVrBIc_q^eL^yb4epA8+eD07o(gy(393=b_^a)oR1PJU6ed|PlyIx0 zXtcDhi(MP_=_CS!$to|?Bt;HIa=;q0k)eCJm*S}7h%hdSAgCNE#-(bs!;ZCO{m@nC ztEdud;w+!wR6Za==)5(gn zok<>idXB>(>k`5+x7+!<95l&B2qVgHXby5cD=BOzY7|88^(eAT10mqYF%aNP40jH# zE&ReMJ9OcZ@?^&v? zVc|_1-Y)>RV(iZiu(A(0-ud`&lrgF~g|; zXDIB^XIY#KTO~zy{7_G#7M_{CUrZ)$y<;2MR@nHE*hl;cv+{q_COjw(+2u{$f$spvtkz`2<$QIo7fs$b^fohRkrF^dRvjm%?hDgwOI6EU zM23K)hMDgBDd%gyvz(?SV@vyfVj&UoU{mnH4Fl>&^XuIqIn%O=#%0^zXHop`kCBi+ zPqh9PvHz+Nn85v^m}+j0`qIsmr0m!Ec7~XXY<4rxMS?t56G9Hi;;Uh|v&bq`c=%l? z64?6{%w)*0B{a6Y`ekWU!6b`bc}X7A-H-U$giM{4dZb zmlwZdu%33ucVebh9dNle{Vnn4kaqp4Jxs~KT(Ze>siRKv^Moo7cwlCfAoVi}`-KNB z6jJ4@*1y0R?}Qvh3kQ?%zkRbvXr0fAQ2Y{794QyYrN;`4`ZW5FMdVm)YQNtd&)w<* z4-Yh2|7^Jd)QtjHgXZ$6D2vT@)eUItXtnB-Su996LBkN3QC=Q4d~{dx!H_9zgIKNR zMOr(>Hytl&>|3LGT{gTPoKNPx?&j11LTwX$Uj4tTjRbpeLnLD+l#eMo0s=n7<@^07 z|Bo}~+=no+9ysY22J>-i`4TB@9IAAhz*kPzoP0C~R=If;Z&fGsFrl3NZco&?htxDi ztqA||fRL+C`7uYV3jepz=vVY|cnb0YU+1_fGg-4Yk-7aLTp5|-7?5gdel-(hBeXQ> zVCIu2!%T`D4ofRLdLgjOuuUv|xLZIp(Nxc}eZW31Xv~wdtdf;8GyetJg48PS*;MXV zBazTcxri1xf<7h)l~KjoreS$*;V&9Zq3o3l2;q#G0_h|~JhssT;lF~62FtlPE$fT* zHV<~o*)JqFGxGc>sQiFvV5Qyytwf54+{-r+G;o-{?N*8834rt4Uax^m7f77DF~f;p zxu4+szWq2dA#(+YEPt;kH^@rqH<9j_GMt)p`4iQf@c?#MJctiakJZ1q@0DxTU81Oz zYfQ1K2>r_l6~LwFKzU-8ibQ;Vo7{|2$=i>P6zvq^JVao*Zud&vbdK&6Q^~U9hkXyj zUsxseq)i-!cou}T&7N39*{_BagLg8p z{9C0!h<*lB-gvpQ=XdJwNAgy)cCIwR{>6(>hIFod>1+QQ@tT$Sm>TDR31xVNe;tnT z61z<6A zyilbFPzggXvwYqq&jg_e$Z%d>1Ka>^CqFPdb37QgS!-=T8yB%2PvMSVqRtin{e}z^82lzdwL5Q)@{K15Av2j1% zTeqE>y|67EgY6)#YHNff#eVD}2X7z)==>AP?oFCR4)~NzO|LNmJnf#L(8mCN&7^?u(QO%!|0@_PSl+wtat+4dr9OxXdPzvecrGabub z@|a-1yFn-Ax9tr@q2b~Hc#}8qM-L|p7h~)j`EdJmZ-4bF^?k`%T+XF_MHzEx@>hNpP=L=*>X|@!wc25c&Z$A869Y+7&<6vwm zZbK>{DZgJhKC#hq+R%u#ph!Q*o4aN9dG|azOS5YyHqsk)?(jK12J{q!ax0BCUhR|l zw?;^HBLwHZav5A*2^b*A)_<^K2iAj0Q$Ur-8(9h)=u?WYuUvw?<~7aCP`{g{d@AG{ z0e^nDkf$%dq%7?K7_%S1L-8)k$I}6XH};scTD^k+G4TXY_Y7hwX#LyRfwJN=4(OkP z5$tONm5oqv#kbG?<}zWO#WBU+OtizwKz0NDjNH07&9Zmz5q5O$3B ziz>2?uAHq%lj9NM%ajjd7YRx2CkGLTk*T5Ss&8#S7An`&s=nP#i4#$HLns${|Mq@s zrBu`-N2PLBtuOOBVFldg6K7~%SFo(^bEHzxB22r z$4GYh8FIvg7P6s?#uRD@Qg9-Y^FKeo`%E>?BpT_1xu5A*axp)8O9e3h&2!Jou`bi{ickjLW(%^fyX^q`&AY-l%Vk=*BgzL-rf?6xNSmCo|Hg?}`nA%Fkw=2gQe_8p&iQ8tGjU?khv zJ=_;|C>bX3$>Rl}5*ri);-SKFw+%q_Hk?Es%_~#PZ{NI}bV*z{KwwkKo5NvfibU}dl$;JhG zYT-H~%Z?IqF_jmxQh*fjQC>IRdeQ#E_k2it-#GxGkRt>^V{E+xaIapBWL_itXT>Ah z&XJ9vyc??y7A=Yz5pa_k+PM$?)#v|e27rw4*{);9`N0i8ieo#}a;}tCxAhiK`%&J@ zU3=m(st`DiGRhHyw}$~#P815bQ!nqpeOZvu8ul(=hNjzSje3A(en}0YRa5c#2nG-w zeywk2ASu07`LAfyDcmV?HYMg_M52kXtg9Cv4$g*!K3bov7Py)FL_IXunEx>7mRRteFBx;5Bfxy75W%#OAD3iLUB{u1z;(5Y@D7MDdkvnaiy_b5MLUN2EFvmq;x(7;IvKpq-yT`6W05nv#lhh#=~35mfYyBb*IP zLZr*A@wn+@RbU>yr9YVMeyw4WN(`~rTgMw*bSGNP6L=p>oH)ln@+xmvRy)7jq~fKA z#?wuzmd>KQHPXfE>D)tQG-Snf1wc{a>0;8cMqE;6x`FOtKY2ahO3q7DF8g)K8Cc0! zP7Mi!zFK!hy{x0ktSS0e3XmUYa}&yNrL115O{dPsh-zIXTda+eh8A> ztaotW>-|>7vTtm7RUITpRBLy7WCZ(q7LbZw3E{*c&c$Gj~v zRcP8wD^&lh`Cn`XLMIX0dcxu>TLO{TU7JJboPg%+I82p1IfmaDk>99{SNx>)MOSmf z^S;Qrj6Et>_tNXt${$l~&67;0@5#4+{tsJU9aYuZ^(ze`jf6-eAxMgVltBs-(%s!4 z4I5BWT3TX@Al*neNJ&X=a)Wd?Y+wWT;oSH8&N=VBe>ofjhl{nInDbZjE9biviw)`j z-V=s$l5_?(C!(Xqa-DK(#n`4q0gllT$B)AnO-89I#gJvnz7}h8lA3pgC1=HbrL_zH zg@oOn>Zxd`U5-5iW=+jc1|lL-2q|y^=#7MoP0*KDxn0sfGAKPH?CBp%vipTSmD=Hh zD9m}n*Hcr@z_8|E$INhxcl~2wg2T3z?1MkgUE6txQm~uE`-^}BL)a@RjK7-VyZ$fC zbD9O=K5(5^{rZp5i1=dA!%!m>QvZEMgTK89lW5h%WGv>o@a%Kgeo;fBC)8O%n$hTe#%O+aQN$FuuP1 z+Egse=eUxFqx3Pc`7QJSHE?gxn*N2c=p%-_cq<^eqxG*d=e7fV_6)U)jIO{zeQO5R z9KM-)cSy-Uz6EBX9#VgG`UE&it#X|Y<9ogL=4R3#D2@liMvxiL0Ri~gp%6~ zAP1d)I&W$D3#plC#zS#EmU3kZK&_gqM>MDf*Wm5J}2 zKv#|ayPf>cqmVkFNAS}vBDo73x>79}vAYw)5~fm&;mw!eI$t>1nv@=kq`thS$2w!& z_FD}4czxa-XhiFKoQXwKyEmqyxH(<5)Ds)+%YAyKFY3OsSL{Cjxw_I~NGf?coU7Te z?ZY`yke4g8BIh6L=pmakbq2wZZgD#1f-LfAV~h)}Sm4p5=TaWj|<0ea7-Ek~p0e z(1vVgYkB&?=$z(@>2>}>jWh90id;ufw?>N`?l1SkZS}mjz(8=HnmM=c*82^aUK6Z^F%c+VJAq%KVq1%(m##V`$>YeJj>MHk{?-Qi8PhSbs zzN8loc4ScYZ4s+-D`qptUS3^w{;u%lX>a5fz`Uq{p&qn{bx3;ca6IOxIr@RF0@(T!3KDS?Qg}OWi@yJ0H-G&B07?oSI!JM|^6K|% zZIia$J&gNlwZDz&pDWmEXBu}>In5&i#-bopYPpN$oX| z?Z}FHUJbg^22ipLRL{_Q_a7AN)QBOzzRuIGScX!L<_;xaZ&~GL41W6mXe%PkFP+U+Bk8+KuEXt=j-Q>IS@LziBHAWA9Px zi}zV6HegW7ncMEz#(qZ>!e-GxQH-a;y>y;j@BIN1!%yUVjHJYFF)ZTSMc5n#ZMvSU z$)2o=gV2O5xyL5rca{XhKHTr7>3BpAY^uHKszUjNTmR--y8FTss^vt{6p*aG>nf>j zckV*C$LW?Cwk`L@Ir+M7!-je20nDaeY5o=(CsPWb4_KLz2PJXg!(8LePiq<8CBm*h z3B-|(06Wt2TuF$q1MsB)+~){HCe(o9RS-oQWF%lI{)AlaU}1It{24~#G|LGpnc;7e zEyzP$l39@V@Zgzk&#WHFE!zCQu-q*N^K_t9WO z%+u?aA2~^RGOmE9&Az=7yyFw9i4rwA1$OlURkOn4uk5OMbZJ5^tFPW~&Z;Z0tqt8| z0kP?>Y8dgS)>=jJMJ`^%M$20k807E~%jA5$+eb{ik~(wl>I>lc+h5OO>`P=1r#|k8 zhRYWA#i{7754&^`@-ImqS(c1YAN{5WXDSy zb|C#c-LDozzA=S0dse1h?ozLMw=a+*5bH|>H3izm{yEK>h`~V%!o(r3^Nc`85=Tzo;(b<|B`!#RLO>qFQf#t@Nez5Y8>tWu}O z9u4!}zEIfHNp}SW1qQeifY1*>tyHHXU8GrVjM!iF&?!GMnkdw809GKgK;gYcm+=C% zbWMhrUhOK1qMeF-XHOtgplz-K)u3;j#G_xz|0*wJz)eT+q3S~aZi~gs7Y}CUoiuUN zUa7gka?`vnQXL}e&T|%IU6BYyxQFj?o^t6S#d#N1X_L@uq)0=)PO1H9&HyOGvqT=L z(QRSZo}61Umno(c2VLZC`W=^h@7Co;c#e=8M0gwr~P3 z9F}u6C-EB3+TGhHD*G(?7!Y$*-#j|8$aPtSJft)S-d!WJ`dMAy=|b^lba+ z!lv|aves&JR6$5ISMqtPjP{DwU@D&lV*iql_oNPku_oQoN9;$FhHEh-qla7t1$9qz zW2q}r(QGs6iO%kAw*ull9&40vxU>edZ0K1UF9C$UI8`T!Q}3}_0aGq)F$(&L)u0(k zAClakr`nwhg*>L@A_@S;l^9&dX{%hJ>%|b-!Of2V&rkO`?2S4HFpr}R(Rj!aaM{MX zj1=p*Tlx_G(RTTKs~`DCjbn<2V#3a(RYUmE~ycKO_{-b8FcBXF3Pvu+%YQYW~kGwYttw?&2^WI#jeA>Ry`6)m#uNwB6 zE)V6hVyu)(uYbytWS@VN^uukt@CgNb&tKPfkttF05lhDV5oPJKn~e}!TB>u{RmW}v zn7~KUdDtg(9T<0Uyb%W~lFFmZemn|}avpY@{%2G<^S@+_`jnVkI^LbX4Z4#9QBW8J z=Yy)~NMDN4NuP%!q+ivyDZBGRomwEt`melukO?Rbr7?F4vS zxLMDf0xLKbU)T1NDgbm;S{sILj2-|zu%++TE-BDL1W$oQVFy+|$~PqTsQ;JRV*%T-^{KUtsd|O9qXosULj)r@LHx?@&;A!Pm4)FOk*5ZHF zUP|2P#1osTbP)$Af^u!Jd;7DCqfuI{e{!Mbh#jp$uD+A0>@dkmjxO`Jkf{phlP^o3 z}7$r#A528Mxnf77Yo!z=K&SV|6Qphj{`FRya z?#}x+fA!3#yrJz>(;0o7D}RYj$70*AEbA)-m@5u(7~Ma5dP|AL37`NdFm#+8~;mKjZk~d%D03XhhHi?Ow<=i9pJ?v!(TNZGb_W>V_%&g*o z=HSL@smu37txShaP2xm0wfhruseaVo4MdaT}`SL|f(xErWRzkX*H*5ttIalxNMj9SKKyt{}Ygezy)S-^gtZ z>L(@vu()LATu`16iEkZJ4K#DSx=nOiOLI|Z%o(`mxV*`+*X^lrxpJ80v2jRYR2rMK zkZpmGLirHxGV>TwS`bk@_x03Xm1}^4RHupQ_)oIL2)W%Io2N6Qb-3 z3pN?>#vu)k*bh68Q{2OzS-q?Tpu`U?9j=w5%v>jxKTCKfa!lu664k9#KA1NfcmDd7 z@R+FA-9*32`q9?QH%Va)pC(EfcRYN9KHX1CCfr^&$Wcv^XeP;`ua-?HPjBrDnI&J-=m0b?n(&8 zs%WdRC7B6BIf2CfBX<*}k|8`KzS?Ul5Lp#R&mWPxR4p{K;=D5HTM-QsaH|39xBz?r(@zhn7C_T z#PGSqRQ#TP>YBnR;b#-YYk8K2zD^JwC1TVb$X-(WN`%M{d4R=S_k0L|vz#mghk_4YM#IIaXbQO79tch4` zR$|{I>e$nZ4gL8J=w$GgZRbJK56)^F8kg3A#KugO&06(D_vJXKs|-Bptxzu?vKram z!rq|Alcc|TRV(oIRm=Hm>OBfddEa(K5}?c?DESIi^WT-|GS~Q9j^A>hf0w&-e%OX{ zSkEAYZ~uk~>JV)Uw zD%(p06`Mo*M<}V+v$YP~1yZultZ_XY%Whij>k`J!yo{++cpV~$EpdyNFyT#l)ARt~Mk;`E4ozJ^n@6&C`dpF>wbE&G( zXffTxjk|wISaBj6ergqJ<9~IUo!E4t#U$>wt(i;Tf(}N;;>D`lu6FZY0|kKa_2)-& zU*{TlGCle4oMR~5`QUqPn$SF?`d{Qz`0bi8$Qy;>c9{}xwLv}+8KtxfjCE#;^yKLE~Nfa$Af2(I%i#`)CEXQa!dxtMi#xN*5L?Y{l% zLX06togn0{ZpSp?1h^m7<$TFkg?>z%SFJctLiYJe@qg%pg*L(%)BDQI$H91K$*J;8 z|Bv?7tYJ_y(f8M}Z{U>^WPIq=Q#l&|g5*xtYrX<83|$mc%FzQy^xPSM+>{tOp#_`L z4m2b4jh+(QQxv6Eqd6R2(*ESzRS1W zufQ5JCWWtW8GY$rb!<8*T_D&Q`4ck$v}+xybX5^YD@g{|pmvzLQA{IhH>iKl*3{GN z+b+xD>3&B=W?K1Mne*SfCrLWS z+a0e5c1Y6d?mfYmsx1+fyJ$)N$F_TO5tx~;I#Ey_3PKEhK-Ixf&BEaaEMm2b<#4gn zXL1KP(?|OCw~dhf+!t+zbI>kd?VUQdGmTf`=>tRTK6X#RZDmbeieiI~oLm+1^tqdS zu#LMe7>3S{$`p1-7<#r`UhA)Sb$PNC!jy^;8u!6b^y2b#Cl#hEh(KNKPwCi2%SVqd z{nz(X5=7_5h^XQ!JdUh#cmg3AC(xIqnZBz@%KXJLaNuT2(8JCf)4F0@r=X-AC#L{j zan7%P{jME_6$M_J3=D|x3u>uf+ZdpeWL*IH#*v+5)`iv6qM~QgjN5hEC=AqU67kZr}xx;7WT&WHX?=R zFf*1uwUzmSU=ga%=6E5z;VdI!@lQAx5lhhMpaOa$2DkUkPr=Sd9~@sKgbp*~^QKPv zeREr}wMPGRalx@M8U3fys`NJi(#542#9JO7Vhi$G-KUhQvG)Yj6@dW| z(<{@IA1yv~kzc6p$+k)OuLe2%PL6*V$|@$&C7zjcaTS2zABnMc1(oy2>x<(ZgHt}B zh(4yb+UInTPgFaas>X2LlMl*TCM)P{@m!fby-K-&;h(6-U(20U2wQWh6?XS~WF4J4 zT2_tn_17qsa*kJwS+0ZwrqugFnm+z-n-)Q=oMUtI;D;N`vKox(%mTg_Ios-wVW@D za}_w)pbA5WwY>qmQmp-NjuHHhUttV%0qruX@CW!4p@y>)>SZj%<6PI(9T6L&7K6z& z0Y06F_W_LL8knD}gNoW{R+OyBN1_7f_*O1m8_@-6=kaMkFn?VP{1%0l8S-Dx_Z8dr zC3dJ9p;n;-9#(%)a;KqUOr!}Jo_rrI%};oJii+gbX1SvCn-ot6MbWFDM_eMbvCzxz z*~%e>x=dFIO+^6$^xc-dl0=~s8qehbW3hC3VuYTLSapO{qkYa#A&Y4LrMe{%-k4#6 z|L4=ekVJIv9LP{uc3TasKjQIYPBimV$P)zUIo?QMtE=b-&-4KA6yP&<3U6es}bxYO;o&YbSuM z(BcZb_nL5do{C%ngtCr!>eU_Lo4%S|+uz@2E^gE<m*V)+lY(s zJv!U6P@rA)t($1*wIZA$sJuv*4>_gQ_gJLlnFP;NIZ>>wmapwPRq_3XQ}0uMVU~gC zVJ}e)+-a!lb%~z`g4>GUWuhNs4sIlyD0(0dESl4KR{*9HC~k7$kPGEm$YYH5+}t1! z#We8j{LbASd1-p9T=h8^_uli~Z@%2ixSnzN_Oj2G{&#hEELzCbNc~a3)VuX9tp>MZ zp_A9M5Lc&fd^{)VsZYoT$h&nGAh>akf+x8T$H;Q0HZ}i! zr;y7|%1Bzs)6-9VrJJ*LeS^a8^~awIC3e=Jk#Ki7n%CL(T%+fpmPI<>X3*M#V)E02 z->;)Z_FF$z+coW|eJnj+9wh((Sv5HG3)GAC=c?@*WaF4?Y{%a`wM=<}UNDiTlOr$X zX5Z|k+hTtO61t(@yS+4`ryM#Zw$0P_#ETJh*whZ?md%c+%~B@3|K`02P3K zg{kaC38L)+R05Mg?O=Qh^{|&V@&XO;aWS#Y`8eP;qWutySS{8-paXs#08DH(=ZHPN z4Qlz{)vnYCUQ^KQJF2q#tUKNfAAFl%Eipvw=`d!=tSzx@_67Tt2s>X=?_keAfs83j zN7LT0v7JGEPkTWvw_8Bhd}D7tYWD>vS8LQR&;x)(^PU#{Ae6WVPHB;WTx-W*!XO-X z82%Q7JvQ%U6I$o8cD&KxK9tc!Amq_9-{j_vJRs`yV|1r%No3b3u3br_3I^zsJ6KL)7HeOi6lUkmRAwvT^`#HMcpI{kJTTZ$6u&wKFe)fE^{JmH4=5m)0QPsP2(%FkKoB8>-;#Z+m^}sG8~||7 zS3&Ipt~5&pDgk?4pu;;F5{Ih^83S1F?Jsv!v2yTFKvN@N`TMKw6jMnp&_omhh0lF< z_2X3R^k$=PjgE*gEGa2io^qBduk5)zvSF`z#w=QmwMf-kzkg+T(x4^(bF+F{QDTgq&E3<%;ZXsR94rSZ6D<)Qb$+ zZEas+VjzX>CiT|G$=~OT@0rilih);jY@X5T2~?u-_>h{+H26UJuU%WB;G1dPB*L?m z?og1PmpNW-hcAZM2cq6zUD~*vte-{`Bl4WlRyLk3&erqH6z=j z#jYw4_)i~d&F4TY>qZ$?9V_K^mN8EjLwvsQE(D5hteJ=1X+r|;BPQR-P9JC@36sO) zf1bA>d23Osf$Htn-MxjMHHnp}2o>8Xe$zi#@49u{9^a;Cf*?L`@HuxuN!E;szRyv% z-)oWc4M5CZfRi!i4u1h)8AZWG^rV>%|LzFN*TJY&fRm!(HoVh8*83E1_?c->j7)TH zy4!nM}{P7U1zK;17c6p|JiO@=! z@V*1K+n-9zk8HMdJciok9Ap7O;=Z2-)lQgV%7A(Z|)) zzV;fdRhoU_>OG|#TdilXIPK5pK!jHYf=QvvH%SJb8--jgjZ0AtM#NZR3#}igf6SkP zC%3KKIn{B{TMJSix)HIPHcK)XE>~em#EEB%W4b2YP*yw&Zw zO~R|KMuV}7VZFS4H{0|-_;Q6hQ32(#MdOEb;^+X|*>JYjNuAlv*Qg#)gj#?46!sTz zi%{R1He^f^mrxB;Iy4M?g9fqRd^>EzqGdYzkonnoA0#t20_M?FR%R6g2{I(r3RE}N zvo1CAl){cH!OvH{`~IoP>m=t1d~deSC6(U>Gu^tC_}kvJEBQwFXTO@j)6@=1F(1KQ zOkD~OJIIai>E&KD*h4z@jR#T%{usivMcUQ(4rdLkZKvKG|I?B62q)k-ap;sLy_rqB zwb+i%dC|Gjk0Zw97B5>i24uoTMzCFr{b~)zQd0W4imT7h*sBoys}{X_*J$jAe(kd2 zZ!fKeMBl342w4z#U8JzkP1o!>UY!U)ow|Cr=O@3JZOu3|P?KC)Udom&#qEJrQBnrs}wU;)3ha|%kDRZ1b@tz z{c{B>lBizy&ifjKZOo|9_sPjy$))jQ#yY_V7B1z6TgGIsS~)ZZbyJLq8GQhDOXAkW ze`l1MsRq3Gw)7m9P;ZkpzE?PACKkjmy5{I|u7NCA*5%s@2Z?`cV1}R*L)WvoH*lp! zs=Sl8zJ5%CY(4m`X8v#SZ{k%H=yP_^!Mf$_x9w_W#)!f}!OuoJ20$|Ut%^y6jd;r3 z3XK!(9z@>W5V=zWFFOL_0+~d)-=9=J0JZ?_t0gD4aJq;5dgv+N6jf3U6^NQ#CbBEs;?c#?$ zSwM^^a|*4%x#@>L455bn%nYG!HXqo0lkgZf7jlKED0)5%+TULZxHMitrDoNHdFl;q z_lHs>mc9x8O5pOF|0?ITGkm^T=pcALX53^c?x148InruRPy*xb?BeK;mN>za%es(s zQnP!U4&)NvKkbn%H<#icj$m=X!O;@&X$Ahdn{z_jSX;Py9fUFxrJ%-IN0|0KCCAG& zLEX^I48z^aRfH;}35}#hxZ^|XAildlti*}#vFPs{W#Y7$+|mX5i2hLSTAk-X1M(xy z6!q8-!3B_f5qLotpHha)C ztG5jV|FF8E{(~|FQmz+8n0`SJigAnQi&W^k*ea&9amCGRNMP=l`{YH6iL)%v zm|Eiyrr4uX=OwZX-D+&g{Y143?R|qS3l+1j%raVO(T#7fT6>aY16fX06t>;ItTNx% z@4450)9JbUygGt#U*+I?K=zkg;eYaRdt1Bv(}(wDZbCxF7tKCEks{9V~ z4^?Q9Q+NSIkO!Z?22c-LgA$14fM2NPPWi>v*}J$24pToyw7k4S!!W_PpdPb-MXgj9 zr?8@|>_`%ltx$)L5st56fBz_Tk%>*Jg6;^9e*&#xYqFAt4kK#U+8f5_{h8wlLL&LE z@|tDJzX#8DIXBo(Pg(70y#PVsrSY!QM0%f1qSeCkBl!FNxY_EBw1Y`Xr_tD#DW}9Z ztF$uTl1#`GLHcP^O_RMC&l}N(kWRehW-p?wez>Wb-84 z7T%50w7&5%yu8`JZe2RCp|E)rgO9(trWs@R1hF1EzL=|b1sI}cq56|bdRY`WIq$UyeZF1|RSlaODnb7(DEu2O7NicU z1l#&e48`#-Ob9C_tj4JNF`O5zVM*~a!_1@iKJlaGuW}X=yohez$1PhFzj##O2fDi* zKp>?32}Zzgu0zmJ{gl4USN(%G`oxHu$xo+z)w)mv@U^$)>d*)Li14MPx}a#Q)6ozC z;dxs{^*>RKZ++_)+Z*`F#>s!_6w(T=6iHfGHN2?*N&oICTGXP((+hzB^?o^gdEdzz z+g!yGvAr%Ad2F&?lg-PA(v>8a0M?PJ7EkTZ8aRj}F6vK;zog_dmyz<4h*+rHW+Gp_ z%+*{<{*#>)GJ}q8GbXEb)`=|`&e+OBLiMiG`=oYZ?zx-WT~myJ#@|ue@>lnY%_ect zEe%toy}EZFIiPlr>Nj!#Zh>1Ji=-u{9+sApqL zTWcwjF(7zSwcRwL_3x)To21KLe#G?Nol1RjL8)jeBsF5hs`5WH7ArTZeaIJ78`ea; z@QZW4Vl5hVOewKDovimR%CsXeU1*#?J&J#x_k7$O|9f`QK^s;(#2q{o4|F)P z$oX*7{-WJ3;cJVeTz_B#0W5QV8oXk?V**tCzOs z6Y4x=-pl~Ow9WN=UST38B9$fcR)(^uByEWIY1w%Bov7Uvovf~(w>?-qFKb1V+7rD? z9>0F|<&yn@=F*Equ`tY{XvakEX%9JC`SK$nGcwQ{(QXhg-$={*Y9Y#QoE@h35k)$|8_r0MMT(dv8cw^vVYWo zvl64a$yct1bYf!YLz_Y7h7qV0xwfM#Uy5uaGqcpiok&GLtiC9pk*L@v@ftMXvB>&2DovV(Y192JPm;>eHH{ zqVZhbT0OiWgTm-3l4@AHc=$zbwq|Qz{T8q*VpFM|rdc?MZ2KIxuBbWkO7sg=Pn`+u zFdn2%){zXqeUNv?atcJQBq+fjJJ*k>Bb_7OalG@}6VQ-zz62(m5R@UBLyD9rf;MyX zA~CwpTwpNnPWJ=vSlQ7SdLCQj>2HK`_h0Mv+fHe789QI5=X~?KKDW5%QR9B+d9NW> zZ(&LOW9Qe4#;tF#@Z73N>;iY`iH{gzg#=<#WQU2u>XUKbqNlj}$a>x+i+VrX<8rKi zUV8CbABieRx{ey4nj_|RZC5iF+?S(Ks{i9pGOyWPv#kkpT8S1R>$+F4x2;bU=|X5J zr$V5OVZawt7XMn8MNp~tF9DXyoA%V(y zx^kb`A2SE3RTq%guS3=r*O=So8s=;X5gucaB+@t08>+=q9;GA>@XSm4pcL(4$&(5d9&+Nrn2pmo~wOC8T$Ipc(w_+`$EvPmUrN5|QO9m-O^GY+EexxTj~V zriH{woUHxe+$hc9=bykhx1#<50+fj7wj%ha&fS`3ctYjI+x4L=^7Bk7orc)mZY+LW1xh}!AI%;EQx*n#cc63m$+>#b%^g(~H zUd82-`z?yScBeAMqhXS52)T%(@fu$tOoHxR@a5Y|B$nzr))fhI_!zp{Dp z?BuaYzo&Bmnu%DoIy~?m-Y5k9y;E9LRK5hgQj=R8ih!?Hjcn>c>HPV8XuyoSaA>k; zfQ6DRR8nIwqbgV<_`5>H;LKQ(FfZA7%~`(LgI@>5euJ}6&H@9&r&Wv0Fa7VG0+HXj zo?Pgy7*D~+lghzNF5FVNsL8aZ3C(v38Fhj2vO^id?)VLD zZ_}TT@6F}%pbGim&-3eI0;?j{=uV#W_5&L-lPb5J^=hBwHi|{;OCTsI!Zvh^AhChE zcN*1nNDTF|K<~B1Hq#G;)yHiOHXmS*@*BDE=uQ>?R&1~N~e>& z3hh!#8Y;Rh*@EMfvOt~_Ey|a{sD(@v{;Eb+P~e*ngOgVQpn*f_Xy=8AgNcI4kzC{N3`&+U_QtaBFelP8Nm1u@eyb@u^RNyxvzmIPK0PbHR~MA zIbkeQG++o5_D7Lx7ccicow0}&Zy-(<}a9DLn zFlSzZVI=5%Lc?*NS+@mky@paZ9kZC^XT#9Z9nhJi{ki%mH>(+H#VDV})UVtb?($4O zYN{lKJ|Yf-Yh<&9V~}xOr^=(RH?eOtZZz@!KBFYCROK{4^gRx-Oj=yf-*M(yw--imnD2xb zD_j6s7AyCs`(z3nRd1ok0~)?(Pf!zPs^z%U*QehjNVPq2H1;oH?`F2Eh*tLxa9{f& zw^J(j&grj*1^h&FVFBW}@VzgR;S;6$YTso?$I;jN;!9LZA-jHCVjClwJ7tS%scSwi zBM1EMbCKxRu6;?R$^4Z-#a&T$6V6Cr=Xt(>>3hi=qNNzYQ~+N+WS;{{)5E?8JHoa- zdN-r4uYai(Cc3La6Z<pauQW1}vLDpR% zc&KL23+-n2sAJxD;doHK;WW8Pv)9%siU35JLKsSaUr)8gIQ=>A%9}-Icpn6r@!L0j&Mm~i{RUE`AIz#z zwYk|s##w9E|4WN+vRJcubqHhRaXE*cA_e1{|H%T#|I<$tjl7&2OBl`7u$p?zr~;op z8q5=r;3%LyrF*#7jK_Xl8A#_JlydEQEW7p+eI8?x5w#H|W5F*l#p8|cWY863)%Gu% zMMQ4HZhfJjc9G>NDP21O>N)j&rC65{Yp-H5sBlpKOI`tF4{vh8=>_xolgO|;B@NI%T_Xqn^c zx`DQ&(P!lhu4Yv^hyU84B;`-jnCGVKqnNdY$?L1L5AN`(RhVI$`D4*XNjH6yd(o6` z?d6jY&0MEh_B>qftXE!l5672)0VJXDLF21$^5=&mZf!ug>rm&^J+oUh`(uMZLs$Fp zBuBi0i26Y4+4#$==_rrJ1EY`|99No4l%8>j6ZbeNd3{L$sd=g3tv*fWY$!=SuJ};%#BE3Y?MC)W)=A2D6s_q0l!6C`PU@9;UO z(4KvXgdJHCG(4ak44!p#6}M$Hdcl2zVH|ar0w4!}6G;EJJkvo(?F!^}Lop`+5xjb^O9#^W>dq6(U?6H^_jJ;ZpxRi?UBfezxy?Wnq60T1rdXZGXiInuBNP`)zc|cu3EC`&4qcpH`@oxBq?+iAM?=IB zGrng&zK3_d+&Hi886qhGmkQ=KbtgAU8c?dWc{ax(jJuVFn6O{@qco zC^6#IA5;#8Ms=mth~G;F%|tQK^OlSn8jXY&xZfA0LiT6& z5+|LHCJb-T5^pa0SmqjhJeQ65-QXPq-xX@?1;fO4XEV5P%?Hw_C#GG`oJ8xRXR^G5 ziU&sgBS6A=BSsBWSw5O7g1sbSQLA||#VPrVM^x-z&i8-Q*wx(Vp|I|q)}iCb&KDcS z=Xkc*eFR${=iTcr_@jlxRJ7{%o-7bNw{w~hDsn3s&R1FLhz>kia(z9)kqqCc zQ)XWqyu9v@V;8XAez%(h^zC!4F3-iTY*&KuZakK%rU*n~5ZL~S&7{2Omb{yc@$gB# zAK8$nhsPxgl+F88NL<(1D6)EI>ug7-Mp|*~4>jUovn^6VBws%0uoCKJe4V#8Gk0_6 zk__U$_!U&*4F2@poLh1^3NLTe2VBfW#TeW>KXGzJnoFKVuR%2|&S)6Q-v3%ohx&X; z`k~lxS}-?%(}NF@ic}EpTlmQ4Nt=-RbnbdpCnv+_U2ZP4STmQCXBoqxao$k8lIIla z(4Du3K&VeUDSH^i_JjP;N$W^ui2D^vuD$k($mAkTYR2=Rp|<771Xh*ei3NCR6|O$W<)BA3qkjrH7_ZUgq+ig;>{Gf6dGnWs@=_<{w!aw z*7DY>8_cn{PN}x%YBsdc$RUU2_aYyi8Bn_!cE>7C{J1>l^4J+)UBfS^zQX69asTOm zv(?eMU@Ni^U+;aK*VM;(LLg*&u(tI5$>J3kzG&VAr(R9N#mxeT&)(d`$I^oFI$VXo zi9|-@_!+!r%qy5{@t|-^2UwsY=P5aSU>`nd-NLY`Mi3I|8#THk=GC7p!rAM0NxpkI$oyuzM^X6jjwb$`o1D%lrw#}{FeQaU8N0xc^{i$g( z1lrqIdTkj#FJ++WAYOl%M0cxA+G}8gMPWwf2%E+Ei+*ap-brq6KMOJEH#O}a$jdB( zpbXc`Cxi*@>B;1N`(l1A`Xr6WB5QAb4zv0~SYBpC!Ml$aeb*N%>nnVaKE0}n0W%HQ zTZBLn@+9fa$rhF|-j>#@;4eCv=6H*7FZY+KG>VZB>#0rtfjh6DvXYl%{)hZ{E*)R^ za~_LJuSi7}xWiBOxL6X3mCC&)?He!OYMTt<21qZ!OPd3)kJ4+B-Xf4$0^Ncqbz2h& zY%FBom+q4=*t9^&R*S6qD5#sS+G#xfc&bTSSYD?Jird)hD%@F<7mulsy_06=^WtuJ zaP>cHfWKUX0k(989N8lkZ^VC`D%;p%st_F$#+1po@*;Yq_A;Y>+0BHQ?purgId^1= zgJYcf^007KKV{o>oZz^Svo+*BXBV(x=9NHrGG4fo8~nCfj?--9_dd3E-p0WL11EFn z`K#2z6SMy`B<+l^&z?hj<80h_q{1J;ed2!15hUr2?T20u=zG-JuDqdjwMOpK~d-7T&JC8lN;TaIcJ+K`39@ zwyj2-#NVykFitgnz~*Ao&PHvY!zRK=)-x52cqS$F|52d5A}s6eqM*uXGTO$rc`89) zRv~Ni?K6g8Qqvi$-h6Z4vSL>8p9$AQg=?>?UuxU&>fWWzqk9cWYQOtHhRD%6V^z^h zg_-HO`aO>;yh4!0$Ad&s*gD=8UAp#`$z-9-utS2gkT>#r9E?0z&c)=ato_XI@vlmC54cMEDT1#{q}@J*2Ev+aa_te8O+` zrSnHnPwRP;=&>0Wu1V9bboZh(VT%C+zk!EtdlOAw9i`*>xV%i{%O!fkmm4g(_a0!! zeZOv*^W(B7A|pjQPo}f#3OR665t7Zky_`koV|vWL^Ci>NiR8$>iS%^`HEG}m8p;6y zr9iAwuwDLd7bX_AF*cq50WSYnhX2eP{nbn>=BZh=v1s7^Fzla2;Xms?xLBvXe;zsI z?XXHC+`ujN^Ml;r{qOcVke29RESg5!LxDJaVeHi?0k{?UeFR<;OC`Gn6wv(K+HFNeSjh>MNVq+SX>#g67dRBnw-fva5`nLef z_cwNPP2RcW(n*hXs*&pBZjDQvMpD0?-MEVuqKVnY9i3S~6H4K9@2JwIIosQ4({zI+ zvG5*@32%pT;lq-sPhyQc{Z`bAe{1E_*kFCg(r-ayKACZtx;kD;lcv#cF&}6F`jx!{qAiVLZ6TY9y|cMW&SE}>?QC?P zk_ zVZKh5PclU5H{#xFC=_btCr%2#3#@Dt!UABsG=I2n>3 z(mem;;tkQ7I4ySfJ+I3arDW@col@WFaKSL{K@K$v36pW1uEMtyGOMITx%xYq2 zL$o8eW>UD+mPVr6#1A>I76zUSu`qCLr`xU~UG{PZKe(D+P9FL=t6I<74pb_Z_zva? zed|lKI~oiP?X*;s=MWKBq~*;@E?X;~;Z@h6mu*PmGVs~qHv<|q$m-OyX!OPz49MY= zc+&eThdzIT)}-$RzM+QwZjR4x@^(`%=n4qMxQdT&x?l~f9)jxRdxq!1MudS%V7C74 zt}6TpC149Tl7P-Eo@pL=@8^R%jrlf$;xor@f9y_ht(T1){@qOfU%XdVvXvLp59?uu z;^*E~9{kI0Xp2&b(d8?|iu;MPIU>lp`>G&YcV{}i`AbZrCyC~Qp2HLZqDGvN;&Q#5 z*Rsz<)lobXdHr>pr%Ja;>e30?6;Cj=W4B67l+1fNJOvefqtd7LynZG@v1WU=kZu5< zq6+t2Ckk8mO=r8DH=!uqgdAl*z85T1gZ~UFx
q6}YdsEzfR>CH=CuizgTnxkDHxIRaw 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

jBKjE>F{C%$mTuQt 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�L?(VQz=A+OhOFU-Eib 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

PQih6iU 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

?CV%7Cvp_de;7UI|e6 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/` 下搭建 `proposal.md`、`tasks.md`、可选的 `design.md` 和规范增量。 +3. 使用 `## ADDED|MODIFIED|REMOVED Requirements` 起草规范增量,每个需求至少包含一个 `#### Scenario:`。 +4. 运行 `openspec validate --strict` 并在分享提案之前解决所有问题。 + +### 阶段 2:实施变更 +将这些步骤作为待办事项跟踪,逐一完成。 +1. **阅读 proposal.md** - 了解要构建的内容 +2. **阅读 design.md**(如果存在) - 查看技术决策 +3. **阅读 tasks.md** - 获取实施清单 +4. **按顺序实施任务** - 按顺序完成 +5. **确认完成** - 在更新状态之前,确保 `tasks.md` 中的每个项目都已完成 +6. **更新清单** - 所有工作完成后,将每个任务设置为 `- [x]`,使列表反映实际情况 +7. **批准门控** - 在提案经过审查和批准之前不要开始实施 + +### 阶段 3:归档变更 +部署后,创建单独的 PR: +- 将 `changes/[name]/` → `changes/archive/YYYY-MM-DD-[name]/` +- 如果功能已更改,更新 `specs/` +- 对于仅工具更改,使用 `openspec archive --skip-specs --yes`(始终显式传递变更 ID) +- 运行 `openspec validate --strict` 以确认归档的变更通过检查 + +## 任何任务之前 + +**上下文检查清单:** +- [ ] 在 `specs/[capability]/spec.md` 中阅读相关规范 +- [ ] 检查 `changes/` 中的待处理变更是否存在冲突 +- [ ] 阅读 `openspec/project.md` 了解约定 +- [ ] 运行 `openspec list` 查看活动变更 +- [ ] 运行 `openspec list --specs` 查看现有功能 + +**创建规范之前:** +- 始终检查功能是否已存在 +- 优先修改现有规范而不是创建重复项 +- 使用 `openspec show [spec]` 查看当前状态 +- 如果请求不明确,在搭建之前提出 1-2 个澄清问题 + +### 搜索指导 +- 枚举规范:`openspec spec list --long`(或脚本使用 `--json`) +- 枚举变更:`openspec list`(或 `openspec change list --json` - 已弃用但可用) +- 显示详细信息: + - 规范:`openspec show --type spec`(使用 `--json` 进行过滤) + - 变更:`openspec show --json --deltas-only` +- 全文搜索(使用 ripgrep):`rg -n "Requirement:|Scenario:" openspec/specs` + +## 快速开始 + +### CLI 命令 + +```bash +# 基本命令 +openspec list # 列出活动变更 +openspec list --specs # 列出规范 +openspec show [item] # 显示变更或规范 +openspec validate [item] # 验证变更或规范 +openspec archive [--yes|-y] # 部署后归档(非交互式运行添加 --yes) + +# 项目管理 +openspec init [path] # 初始化 OpenSpec +openspec update [path] # 更新说明文件 + +# 交互模式 +openspec show # 提示选择 +openspec validate # 批量验证模式 + +# 调试 +openspec show [change] --json --deltas-only +openspec validate [change] --strict +``` + +### 命令标志 + +- `--json` - 机器可读输出 +- `--type change|spec` - 消除项目歧义 +- `--strict` - 全面验证 +- `--no-interactive` - 禁用提示 +- `--skip-specs` - 归档时不更新规范 +- `--yes`/`-y` - 跳过确认提示(非交互式归档) + +## 目录结构 + +``` +openspec/ +├── project.md # 项目约定 +├── specs/ # 当前真相 - 已构建的内容 +│ └── [capability]/ # 单一专注的功能 +│ ├── spec.md # 需求和场景 +│ └── design.md # 技术模式 +├── changes/ # 提案 - 应该更改的内容 +│ ├── [change-name]/ +│ │ ├── proposal.md # 原因、内容、影响 +│ │ ├── tasks.md # 实施清单 +│ │ ├── design.md # 技术决策(可选;参见标准) +│ │ └── specs/ # 增量变更 +│ │ └── [capability]/ +│ │ └── spec.md # ADDED/MODIFIED/REMOVED +│ └── archive/ # 已完成的变更 +``` + +## 创建变更提案 + +### 决策树 + +``` +新请求? +├─ 修复规范行为的 Bug? → 直接修复 +├─ 拼写错误/格式/注释? → 直接修复 +├─ 新功能/能力? → 创建提案 +├─ 破坏性更改? → 创建提案 +├─ 架构更改? → 创建提案 +└─ 不明确? → 创建提案(更安全) +``` + +### 提案结构 + +1. **创建目录:** `changes/[change-id]/`(kebab-case,动词开头,唯一) + +2. **编写 proposal.md:** +```markdown +# 变更:[变更的简要描述] + +## 原因 +[关于问题/机会的 1-2 句话] + +## 变更内容 +- [变更的要点列表] +- [用 **BREAKING** 标记破坏性更改] + +## 影响 +- 受影响的规范:[列出功能] +- 受影响的代码:[关键文件/系统] +``` + +3. **创建规范增量:** `specs/[capability]/spec.md` +```markdown +## ADDED Requirements +### Requirement: 新功能 +系统应提供... + +#### Scenario: 成功情况 +- **WHEN** 用户执行操作 +- **THEN** 预期结果 + +## MODIFIED Requirements +### Requirement: 现有功能 +[完整的修改后需求] + +## REMOVED Requirements +### Requirement: 旧功能 +**原因**:[为什么移除] +**迁移**:[如何处理] +``` +如果多个功能受到影响,在 `changes/[change-id]/specs//spec.md` 下创建多个增量文件——每个功能一个。 + +4. **创建 tasks.md:** +```markdown +## 1. 实施 +- [ ] 1.1 创建数据库架构 +- [ ] 1.2 实现 API 端点 +- [ ] 1.3 添加前端组件 +- [ ] 1.4 编写测试 +``` + +5. **在需要时创建 design.md:** +如果以下任何情况适用,则创建 `design.md`;否则省略: +- 跨领域更改(多个服务/模块)或新的架构模式 +- 新的外部依赖或重大的数据模型更改 +- 安全、性能或迁移复杂性 +- 在编码之前从技术决策中受益的模糊性 + +最小 `design.md` 骨架: +```markdown +## 上下文 +[背景、约束、利益相关者] + +## 目标 / 非目标 +- 目标:[...] +- 非目标:[...] + +## 决策 +- 决策:[内容和原因] +- 考虑的替代方案:[选项 + 理由] + +## 风险 / 权衡 +- [风险] → 缓解措施 + +## 迁移计划 +[步骤、回滚] + +## 开放问题 +- [...] +``` + +## 规范文件格式 + +### 关键:场景格式 + +**正确**(使用 #### 标题): +```markdown +#### Scenario: 用户登录成功 +- **WHEN** 提供有效凭据 +- **THEN** 返回 JWT 令牌 +``` + +**错误**(不要使用项目符号或粗体): +```markdown +- **Scenario: 用户登录** ❌ +**Scenario**: 用户登录 ❌ +### Scenario: 用户登录 ❌ +``` + +每个需求必须至少有一个场景。 + +### 需求措辞 +- 对规范性需求使用 SHALL/MUST(除非有意非规范性,否则避免 should/may) + +### 增量操作 + +- `## ADDED Requirements` - 新功能 +- `## MODIFIED Requirements` - 更改的行为 +- `## REMOVED Requirements` - 已弃用的功能 +- `## RENAMED Requirements` - 名称更改 + +标题与 `trim(header)` 匹配 - 忽略空白。 + +#### 何时使用 ADDED vs MODIFIED +- ADDED:引入可以独立作为需求的新功能或子功能。当更改是正交的(例如,添加"斜杠命令配置")而不是改变现有需求的语义时,优先使用 ADDED。 +- MODIFIED:更改现有行为、范围或验收标准。始终粘贴完整的、更新的需求内容(标题 + 所有场景)。归档器将用您在此处提供的内容替换整个需求;部分增量将丢失先前的详细信息。 +- RENAMED:仅在名称更改时使用。如果您还更改行为,请使用 RENAMED(名称)加上 MODIFIED(内容),引用新名称。 + +常见陷阱:使用 MODIFIED 添加新关注点而不包含先前的文本。这会在归档时导致详细信息丢失。如果您没有明确更改现有需求,请在 ADDED 下添加新需求。 + +正确编写 MODIFIED 需求: +1) 在 `openspec/specs//spec.md` 中找到现有需求。 +2) 复制整个需求块(从 `### Requirement: ...` 到其场景)。 +3) 将其粘贴到 `## MODIFIED Requirements` 下并编辑以反映新行为。 +4) 确保标题文本完全匹配(忽略空白)并至少保留一个 `#### Scenario:`。 + +RENAMED 示例: +```markdown +## RENAMED Requirements +- FROM: `### Requirement: Login` +- TO: `### Requirement: User Authentication` +``` + +## 故障排除 + +### 常见错误 + +**"变更必须至少有一个增量"** +- 检查 `changes/[name]/specs/` 是否存在 .md 文件 +- 验证文件具有操作前缀(## ADDED Requirements) + +**"需求必须至少有一个场景"** +- 检查场景是否使用 `#### Scenario:` 格式(4 个井号) +- 不要对场景标题使用项目符号或粗体 + +**静默场景解析失败** +- 需要精确格式:`#### Scenario: Name` +- 使用以下命令调试:`openspec show [change] --json --deltas-only` + +### 验证提示 + +```bash +# 始终使用严格模式进行全面检查 +openspec validate [change] --strict + +# 调试增量解析 +openspec show [change] --json | jq '.deltas' + +# 检查特定需求 +openspec show [spec] --json -r 1 +``` + +## 成功路径脚本 + +```bash +# 1) 探索当前状态 +openspec spec list --long +openspec list +# 可选全文搜索: +# rg -n "Requirement:|Scenario:" openspec/specs +# rg -n "^#|Requirement:" openspec/changes + +# 2) 选择变更 id 并搭建 +CHANGE=add-two-factor-auth +mkdir -p openspec/changes/$CHANGE/{specs/auth} +printf "## 原因\n...\n\n## 变更内容\n- ...\n\n## 影响\n- ...\n" > openspec/changes/$CHANGE/proposal.md +printf "## 1. 实施\n- [ ] 1.1 ...\n" > openspec/changes/$CHANGE/tasks.md + +# 3) 添加增量(示例) +cat > openspec/changes/$CHANGE/specs/auth/spec.md << 'EOF' +## ADDED Requirements +### Requirement: 双因素认证 +用户必须在登录时提供第二个因素。 + +#### Scenario: 需要 OTP +- **WHEN** 提供有效凭据 +- **THEN** 需要 OTP 挑战 +EOF + +# 4) 验证 +openspec validate $CHANGE --strict +``` + +## 多功能示例 + +``` +openspec/changes/add-2fa-notify/ +├── proposal.md +├── tasks.md +└── specs/ + ├── auth/ + │ └── spec.md # ADDED: 双因素认证 + └── notifications/ + └── spec.md # ADDED: OTP 电子邮件通知 +``` + +auth/spec.md +```markdown +## ADDED Requirements +### Requirement: 双因素认证 +... +``` + +notifications/spec.md +```markdown +## ADDED Requirements +### Requirement: OTP 电子邮件通知 +... +``` + +## 最佳实践 + +### 简单优先 +- 默认 <100 行新代码 +- 单文件实现,直到证明不足 +- 没有明确理由时避免框架 +- 选择无聊、经过验证的模式 + +### 复杂性触发器 +仅在以下情况下添加复杂性: +- 性能数据表明当前解决方案太慢 +- 具体的规模要求(>1000 用户,>100MB 数据) +- 需要抽象的多个经过验证的用例 + +### 清晰的引用 +- 使用 `file.ts:42` 格式表示代码位置 +- 将规范引用为 `specs/auth/spec.md` +- 链接相关变更和 PR + +### 功能命名 +- 使用动词-名词:`user-auth`、`payment-capture` +- 每个功能单一目的 +- 10 分钟可理解性规则 +- 如果描述需要"AND",则拆分 + +### 变更 ID 命名 +- 使用 kebab-case,简短且描述性:`add-two-factor-auth` +- 优先使用动词开头的前缀:`add-`、`update-`、`remove-`、`refactor-` +- 确保唯一性;如果已使用,追加 `-2`、`-3` 等 + +## 工具选择指南 + +| 任务 | 工具 | 原因 | +|------|------|-----| +| 按模式查找文件 | Glob | 快速模式匹配 | +| 搜索代码内容 | Grep | 优化的正则表达式搜索 | +| 读取特定文件 | Read | 直接文件访问 | +| 探索未知范围 | Task | 多步骤调查 | + +## 错误恢复 + +### 变更冲突 +1. 运行 `openspec list` 查看活动变更 +2. 检查重叠的规范 +3. 与变更所有者协调 +4. 考虑合并提案 + +### 验证失败 +1. 使用 `--strict` 标志运行 +2. 检查 JSON 输出以获取详细信息 +3. 验证规范文件格式 +4. 确保场景格式正确 + +### 缺少上下文 +1. 首先阅读 project.md +2. 检查相关规范 +3. 查看最近的归档 +4. 请求澄清 + +## 快速参考 + +### 阶段指示器 +- `changes/` - 已提议,尚未构建 +- `specs/` - 已构建并部署 +- `archive/` - 已完成的变更 + +### 文件用途 +- `proposal.md` - 原因和内容 +- `tasks.md` - 实施步骤 +- `design.md` - 技术决策 +- `spec.md` - 需求和行为 + +### CLI 要点 +```bash +openspec list # 正在进行什么? +openspec show [item] # 查看详细信息 +openspec validate --strict # 是否正确? +openspec archive [--yes|-y] # 标记完成(自动化添加 --yes) +``` + +记住:规范是真相。变更是提案。保持它们同步。 diff --git a/openspec/changes/add-third-party-api-logging/proposal.md b/openspec/changes/add-third-party-api-logging/proposal.md new file mode 100644 index 0000000..efa4e93 --- /dev/null +++ b/openspec/changes/add-third-party-api-logging/proposal.md @@ -0,0 +1,22 @@ +# 变更:添加第三方 API 请求响应原始内容日志记录 + +## 原因 +当前系统在调用第三方 API(如 DashScope)时,只记录了部分信息(如路径、FPS、模型名称),但没有记录完整的请求和响应原始内容。这导致在调试 API 调用问题时,无法查看完整的请求参数和响应数据,难以快速定位问题。 + +为了便于调试和问题排查,需要记录所有第三方 API 调用的完整请求和响应原始内容。 + +## 变更内容 +- 在 `DashScopeService` 中添加完整的请求和响应日志记录 +- 记录请求的完整内容(包括 messages、model、api_key 等所有参数) +- 记录响应的完整内容(包括 status_code、response body、headers 等) +- 使用适当的日志级别(DEBUG 级别记录完整内容,INFO 级别记录摘要) +- 记录所有第三方 API 调用的原始请求和响应数据,便于调试和问题排查 + +## 影响 +- 受影响的规范:`specs/video-analysis/spec.md` - 需要添加日志记录要求 +- 受影响的代码: + - `app/services/dashscope_service.py` - 添加详细的请求响应日志记录 + - `app/config.py` - 可能需要添加日志配置选项 +- 有助于调试和问题排查 +- 不影响现有功能,只是增强日志记录 + diff --git a/openspec/changes/add-third-party-api-logging/specs/logging/spec.md b/openspec/changes/add-third-party-api-logging/specs/logging/spec.md new file mode 100644 index 0000000..6d88bdf --- /dev/null +++ b/openspec/changes/add-third-party-api-logging/specs/logging/spec.md @@ -0,0 +1,40 @@ +## ADDED Requirements + +### Requirement: Third-Party API Request/Response Logging +The system SHALL log complete request and response content for all third-party API calls (such as DashScope API). The system SHALL record request parameters, response data, and status information. The system SHALL mask sensitive information (such as API keys) in logs. The system SHALL use appropriate log levels (DEBUG for detailed content, INFO for summaries). + +#### Scenario: Successful API Call Logging +- **WHEN** the system makes a third-party API call (e.g., DashScope API for video analysis) +- **THEN** the system SHALL log the complete request content including: + - **AND** request parameters (model, messages, fps, etc.) + - **AND** request headers (with API key masked) + - **AND** request timestamp +- **AND** the system SHALL log the complete response content including: + - **AND** response status code + - **AND** response body/content + - **AND** response headers (if available) + - **AND** response timestamp +- **AND** the system SHALL use DEBUG log level for detailed content +- **AND** the system SHALL use INFO log level for summary information + +#### Scenario: API Key Masking in Logs +- **WHEN** the system logs API request information containing sensitive data (API keys) +- **THEN** the system SHALL mask the API key showing only the first few and last few characters +- **AND** the system SHALL replace the middle portion with asterisks or similar masking characters +- **AND** the system SHALL ensure no sensitive information is exposed in logs + +#### Scenario: Failed API Call Logging +- **WHEN** a third-party API call fails +- **THEN** the system SHALL log the complete error response including: + - **AND** error status code + - **AND** error message + - **AND** error details (if available) + - **AND** request that caused the error +- **AND** the system SHALL use ERROR or WARNING log level for failed calls + +#### Scenario: Large Response Logging +- **WHEN** the system receives a large response from a third-party API +- **THEN** the system SHALL log the response content +- **AND** the system SHALL handle large responses appropriately (e.g., truncate very large content or log summary) +- **AND** the system SHALL ensure logs remain readable and manageable + diff --git a/openspec/changes/add-third-party-api-logging/specs/video-analysis/spec.md b/openspec/changes/add-third-party-api-logging/specs/video-analysis/spec.md new file mode 100644 index 0000000..1acef6e --- /dev/null +++ b/openspec/changes/add-third-party-api-logging/specs/video-analysis/spec.md @@ -0,0 +1,48 @@ +## MODIFIED Requirements + +### Requirement: Video Content Analysis +The system SHALL provide functionality to analyze video content using Alibaba Cloud DashScope MultiModal API. The system SHALL extract video frames at a configurable fps rate. The system SHALL call the DashScope API with the video file and analysis prompt. The system SHALL log complete request and response content for all DashScope API calls. The system SHALL save the analysis results to MongoDB. + +#### Scenario: Successful Video Analysis +- **WHEN** a user requests analysis for an uploaded video +- **THEN** the system SHALL read the video file from storage +- **AND** the system SHALL call DashScope MultiModalConversation API with the video file and fps parameter (default: 2) +- **AND** the system SHALL log the complete request content including model, messages, fps, and other parameters (with sensitive information masked) +- **AND** the system SHALL receive the analysis result from the API +- **AND** the system SHALL log the complete response content including status code, response body, and headers +- **AND** the system SHALL save the analysis result to MongoDB with video_id, analysis_type, content, fps, and created_at +- **AND** the system SHALL update the video status to "analyzed" +- **AND** the system SHALL return the analysis result to the user + +#### Scenario: Analysis API Failure +- **WHEN** the DashScope API call fails (network error, API error, etc.) +- **THEN** the system SHALL handle the error gracefully +- **AND** the system SHALL log the complete error response including status code, error message, and request details +- **AND** the system SHALL update the video status to "failed" +- **AND** the system SHALL return an appropriate error message to the user +- **AND** the system SHALL log the error for debugging + +### Requirement: Video Summary Generation +The system SHALL provide functionality to generate a summary of video content. The system SHALL use the DashScope API to analyze the video using the correct local file path format (`file://{absolute_path}`) and generate a summary based on a predefined prompt template. The system SHALL log complete request and response content for all DashScope API calls. The system SHALL save the summary to MongoDB. + +#### Scenario: Successful Summary Generation +- **WHEN** a user requests a summary for an analyzed video +- **THEN** the system SHALL construct the file path in the format `file://{absolute_path}` +- **AND** the system SHALL call the DashScope API with the correctly formatted video file path and summary prompt +- **AND** the system SHALL log the complete request and response content +- **AND** the system SHALL receive the summary text from the API +- **AND** the system SHALL save the summary to MongoDB with video_id, summary_text, and created_at +- **AND** the system SHALL return the summary to the user + +### Requirement: Video Comparison +The system SHALL provide functionality to compare content between multiple videos. The system SHALL extract content from each video using the correct local file path format (`file://{absolute_path}`). The system SHALL generate a comparison analysis highlighting similarities and differences. The system SHALL log complete request and response content for all DashScope API calls. The system SHALL save the comparison result to MongoDB. + +#### Scenario: Successful Video Comparison +- **WHEN** a user requests comparison between two or more videos +- **THEN** the system SHALL construct file paths for each video in the format `file://{absolute_path}` +- **AND** the system SHALL call the DashScope API with multiple correctly formatted video file paths and comparison prompt +- **AND** the system SHALL log the complete request and response content +- **AND** the system SHALL generate a comparison result +- **AND** the system SHALL save the comparison to MongoDB with video_ids, comparison_result, and created_at +- **AND** the system SHALL return the comparison result to the user + diff --git a/openspec/changes/add-third-party-api-logging/tasks.md b/openspec/changes/add-third-party-api-logging/tasks.md new file mode 100644 index 0000000..78cd358 --- /dev/null +++ b/openspec/changes/add-third-party-api-logging/tasks.md @@ -0,0 +1,26 @@ +## 1. 实施请求响应日志记录 + +- [ ] 1.1 在 `DashScopeService` 中添加请求日志记录方法 +- [ ] 1.2 记录完整的请求内容(messages、model、fps 等参数) +- [ ] 1.3 实现 API Key 脱敏处理(只显示前几位和后几位) +- [ ] 1.4 记录完整的响应内容(status_code、response body、headers) +- [ ] 1.5 使用 DEBUG 级别记录完整内容,INFO 级别记录摘要 +- [ ] 1.6 在 `analyze_video` 方法中添加请求响应日志 +- [ ] 1.7 在 `compare_videos` 方法中添加请求响应日志 +- [ ] 1.8 在 Base64 编码方式调用时也记录完整日志 + +## 2. 配置和优化 + +- [ ] 2.1 检查是否需要添加配置选项控制详细日志(可选) +- [ ] 2.2 确保日志格式清晰易读(使用 JSON 格式或结构化格式) +- [ ] 2.3 处理大文件/大响应的日志记录(避免日志过大) +- [ ] 2.4 确保敏感信息不会泄露到日志中 + +## 3. 测试和验证 + +- [ ] 3.1 测试视频分析功能的日志记录 +- [ ] 3.2 测试视频总结功能的日志记录 +- [ ] 3.3 测试视频对比功能的日志记录 +- [ ] 3.4 验证 API Key 脱敏是否正确 +- [ ] 3.5 验证日志内容是否完整且可读 + diff --git a/openspec/changes/add-video-analysis-feature/design.md b/openspec/changes/add-video-analysis-feature/design.md new file mode 100644 index 0000000..1a30325 --- /dev/null +++ b/openspec/changes/add-video-analysis-feature/design.md @@ -0,0 +1,175 @@ +# 技术设计文档 + +## 上下文 +项目需要实现视频内容分析和总结功能,使用阿里云 DashScope 多模态 API 进行视频解析。系统需要支持视频上传、内容解析、自动总结以及多视频对比功能。 + +## 目标 / 非目标 + +### 目标 +- 提供 RESTful API 用于视频文件上传和管理 +- 集成阿里云 DashScope API 进行视频内容解析 +- 自动生成视频内容总结 +- 支持多个视频之间的内容对比 +- 使用 MongoDB 持久化存储视频元数据和分析结果 +- 提供简洁的静态前端页面进行交互 + +### 非目标 +- 视频流式处理(当前仅支持文件上传) +- 实时视频分析(异步处理) +- 视频编辑功能 +- 用户认证和权限管理(当前版本) + +## 决策 + +### 1. 后端框架:Python Flask +**决策**:使用 Python Flask 构建 RESTful API 后端 + +**原因**: +- Python 对 AI/ML 生态支持良好,DashScope SDK 为 Python 原生 +- Flask 轻量级,适合快速开发 RESTful API +- 易于集成第三方服务 + +**考虑的替代方案**: +- FastAPI:性能更好,但 Flask 更简单直接 +- Django:功能完整但过于重量级 + +### 2. 数据库:MongoDB +**决策**:使用 MongoDB 存储视频元数据和分析结果 + +**原因**: +- 文档数据库适合存储非结构化的分析结果 +- 灵活的 schema 便于扩展 +- 项目已有 MongoDB 配置 + +**考虑的替代方案**: +- PostgreSQL:关系型数据库,但分析结果结构可能变化 +- SQLite:轻量但不适合生产环境 + +### 3. 视频解析服务:阿里云 DashScope +**决策**:使用 DashScope MultiModalConversation API(qwen3-vl-plus 模型) + +**原因**: +- 官方提供的多模态视频理解能力 +- 支持视频抽帧分析(fps 参数) +- API 调用简单,集成方便 + +**配置要点**: +- fps 参数控制抽帧频率(默认 2,即每 0.5 秒一帧) +- API Key 通过环境变量或配置文件管理 +- 需要处理 API 调用失败和重试 + +### 4. 文件存储:本地文件系统 +**决策**:使用本地 uploads/ 目录存储视频文件 + +**原因**: +- 简单直接,无需额外服务 +- 适合中小规模部署 + +**考虑的替代方案**: +- 对象存储(OSS/S3):适合大规模部署,但增加复杂度 +- 数据库存储:不适合大文件 + +### 5. 前端:静态页面 +**决策**:使用纯 HTML/CSS/JavaScript 静态页面 + +**原因**: +- 简单直接,无需构建工具 +- 易于部署和维护 +- 满足当前功能需求 + +**考虑的替代方案**: +- React/Vue 框架:功能强大但增加复杂度 +- 服务端渲染:当前不需要 SEO + +## 架构设计 + +### 后端架构 +``` +app/ +├── __init__.py # Flask 应用初始化 +├── config.py # 配置管理 +├── routes/ +│ └── video_routes.py # 视频相关路由 +├── services/ +│ ├── video_service.py # 视频处理服务 +│ ├── dashscope_service.py # DashScope API 封装 +│ └── analysis_service.py # 分析业务逻辑 +├── models/ +│ ├── video.py # 视频模型 +│ ├── analysis.py # 分析结果模型 +│ └── comparison.py # 对比结果模型 +└── utils/ + ├── file_utils.py # 文件处理工具 + └── validators.py # 验证工具 +``` + +### API 端点设计 +``` +POST /api/videos/upload # 上传视频 +GET /api/videos # 获取视频列表 +GET /api/videos/{video_id} # 获取视频详情 +POST /api/videos/{video_id}/analyze # 解析视频内容 +POST /api/videos/{video_id}/summarize # 生成视频总结 +GET /api/videos/{video_id}/summary # 获取视频总结 +POST /api/videos/compare # 对比多个视频 +GET /api/videos/compare/{comparison_id} # 获取对比结果 +``` + +### 数据模型设计 + +**Video 文档**: +```python +{ + "_id": ObjectId, + "filename": str, + "file_path": str, + "upload_time": datetime, + "file_size": int, + "status": str, # "uploaded", "analyzing", "analyzed", "failed" + "mime_type": str +} +``` + +**AnalysisResult 文档**: +```python +{ + "_id": ObjectId, + "video_id": ObjectId, + "analysis_type": str, # "content", "summary" + "content": str, + "fps": int, + "created_at": datetime +} +``` + +**Comparison 文档**: +```python +{ + "_id": ObjectId, + "video_ids": [ObjectId], + "comparison_result": str, + "created_at": datetime +} +``` + +## 风险 / 权衡 + +### 风险 +1. **API 调用失败** → 实现重试机制和错误处理 +2. **大文件上传超时** → 设置合理的文件大小限制和超时时间 +3. **视频解析耗时** → 异步处理,返回任务 ID,客户端轮询状态 +4. **存储空间增长** → 定期清理或归档旧文件 + +### 权衡 +- **同步 vs 异步处理**:当前采用同步处理,简单但可能阻塞。后续可改为异步任务队列 +- **本地存储 vs 对象存储**:当前使用本地存储,简单但扩展性有限 + +## 迁移计划 +- 无需迁移(新功能) + +## 开放问题 +- [ ] 是否需要实现视频文件清理策略(自动删除旧文件)? +- [ ] 是否需要支持批量视频上传? +- [ ] 视频解析的 fps 参数是否需要可配置? +- [ ] 是否需要实现解析结果缓存机制? + diff --git a/openspec/changes/add-video-analysis-feature/proposal.md b/openspec/changes/add-video-analysis-feature/proposal.md new file mode 100644 index 0000000..3a8ff3d --- /dev/null +++ b/openspec/changes/add-video-analysis-feature/proposal.md @@ -0,0 +1,23 @@ +# 变更:添加视频分析与总结功能 + +## 原因 +需要构建一个视频内容分析系统,能够解析上传的视频文件,提取视频内容信息,生成视频总结,并支持多个视频之间的内容对比。这将帮助用户快速理解视频内容,提高信息处理效率。 + +## 变更内容 +- 添加视频文件上传功能,支持视频文件存储和管理 +- 集成阿里云 DashScope 多模态 API(qwen3-vl-plus 模型)进行视频内容解析 +- 实现视频内容总结功能,自动生成视频内容摘要 +- 实现视频对比功能,支持多个视频之间的内容对比分析 +- 使用 Python Flask 构建 RESTful API 后端服务 +- 使用 MongoDB 存储视频元数据、解析结果和总结内容 +- 使用 config.yaml 进行配置管理 +- 提供静态前端页面用于视频上传、查看总结和对比结果 + +## 影响 +- 受影响的规范:新增 `video-analysis` 功能规范 +- 受影响的代码: + - 后端:需要创建 Flask 应用、API 路由、视频处理服务、MongoDB 模型 + - 前端:需要创建静态 HTML/CSS/JavaScript 页面 + - 配置:更新 config.yaml 添加 DashScope API 配置 +- 技术栈变更:从 Go 迁移到 Python Flask(如适用) + diff --git a/openspec/changes/add-video-analysis-feature/specs/video-analysis/spec.md b/openspec/changes/add-video-analysis-feature/specs/video-analysis/spec.md new file mode 100644 index 0000000..cf017ca --- /dev/null +++ b/openspec/changes/add-video-analysis-feature/specs/video-analysis/spec.md @@ -0,0 +1,120 @@ +# Video Analysis Specification + +## ADDED Requirements + +### Requirement: Video File Upload +The system SHALL provide an API endpoint for uploading video files. The system SHALL validate the uploaded file format and size. The system SHALL store the video file in the designated uploads directory. The system SHALL save video metadata to MongoDB. + +#### Scenario: Successful Video Upload +- **WHEN** a user uploads a valid video file (supported formats: mp4, avi, mov, etc.) +- **THEN** the system SHALL save the file to the uploads directory +- **AND** the system SHALL create a video document in MongoDB with metadata (filename, file_path, upload_time, file_size, status) +- **AND** the system SHALL return a response with video_id and upload status + +#### Scenario: Invalid File Format Upload +- **WHEN** a user uploads a file with unsupported format +- **THEN** the system SHALL reject the upload +- **AND** the system SHALL return an error message indicating the file format is not supported + +#### Scenario: File Size Exceeds Limit +- **WHEN** a user uploads a video file exceeding the size limit +- **THEN** the system SHALL reject the upload +- **AND** the system SHALL return an error message indicating the file size limit + +### Requirement: Video Content Analysis +The system SHALL provide functionality to analyze video content using Alibaba Cloud DashScope MultiModal API. The system SHALL extract video frames at a configurable fps rate. The system SHALL call the DashScope API with the video file and analysis prompt. The system SHALL save the analysis results to MongoDB. + +#### Scenario: Successful Video Analysis +- **WHEN** a user requests analysis for an uploaded video +- **THEN** the system SHALL read the video file from storage +- **AND** the system SHALL call DashScope MultiModalConversation API with the video file and fps parameter (default: 2) +- **AND** the system SHALL receive the analysis result from the API +- **AND** the system SHALL save the analysis result to MongoDB with video_id, analysis_type, content, fps, and created_at +- **AND** the system SHALL update the video status to "analyzed" +- **AND** the system SHALL return the analysis result to the user + +#### Scenario: Analysis API Failure +- **WHEN** the DashScope API call fails (network error, API error, etc.) +- **THEN** the system SHALL handle the error gracefully +- **AND** the system SHALL update the video status to "failed" +- **AND** the system SHALL return an appropriate error message to the user +- **AND** the system SHALL log the error for debugging + +### Requirement: Video Summary Generation +The system SHALL provide functionality to generate a summary of video content. The system SHALL use the DashScope API to analyze the video and generate a summary based on a predefined prompt template. The system SHALL save the summary to MongoDB. + +#### Scenario: Successful Summary Generation +- **WHEN** a user requests a summary for an analyzed video +- **THEN** the system SHALL call the DashScope API with the video file and summary prompt +- **AND** the system SHALL receive the summary text from the API +- **AND** the system SHALL save the summary to MongoDB with video_id, summary_text, and created_at +- **AND** the system SHALL return the summary to the user + +#### Scenario: Summary for Unanalyzed Video +- **WHEN** a user requests a summary for a video that has not been analyzed +- **THEN** the system SHALL first perform video analysis +- **AND** the system SHALL then generate the summary +- **AND** the system SHALL return both analysis and summary results + +### Requirement: Video Comparison +The system SHALL provide functionality to compare content between multiple videos. The system SHALL extract content from each video. The system SHALL generate a comparison analysis highlighting similarities and differences. The system SHALL save the comparison result to MongoDB. + +#### Scenario: Successful Video Comparison +- **WHEN** a user requests comparison between two or more videos +- **THEN** the system SHALL analyze each video if not already analyzed +- **AND** the system SHALL extract content from each video +- **AND** the system SHALL call the DashScope API with multiple video contents and comparison prompt +- **AND** the system SHALL generate a comparison result +- **AND** the system SHALL save the comparison to MongoDB with video_ids, comparison_result, and created_at +- **AND** the system SHALL return the comparison result to the user + +#### Scenario: Comparison with Insufficient Videos +- **WHEN** a user requests comparison with less than two videos +- **THEN** the system SHALL reject the request +- **AND** the system SHALL return an error message indicating at least two videos are required + +### Requirement: Video List and Details +The system SHALL provide API endpoints to retrieve a list of uploaded videos and video details. The system SHALL return video metadata including upload time, file size, and analysis status. + +#### Scenario: Retrieve Video List +- **WHEN** a user requests the list of videos +- **THEN** the system SHALL query MongoDB for all video documents +- **AND** the system SHALL return a list of videos with basic metadata (id, filename, upload_time, file_size, status) + +#### Scenario: Retrieve Video Details +- **WHEN** a user requests details for a specific video +- **THEN** the system SHALL query MongoDB for the video document by video_id +- **AND** the system SHALL return detailed information including metadata, analysis results, and summary if available + +### Requirement: Frontend Video Management Interface +The system SHALL provide a static web interface for video management. The interface SHALL allow users to upload videos, view video list, trigger analysis, view summaries, and perform video comparisons. + +#### Scenario: Upload Video via Frontend +- **WHEN** a user selects a video file and clicks upload in the frontend +- **THEN** the frontend SHALL send a POST request to /api/videos/upload with the video file +- **AND** the frontend SHALL display upload progress +- **AND** the frontend SHALL show success message and update the video list upon completion + +#### Scenario: View Video Summary +- **WHEN** a user clicks to view summary for a video +- **THEN** the frontend SHALL send a GET request to /api/videos/{video_id}/summary +- **AND** the frontend SHALL display the summary text in a readable format +- **AND** if no summary exists, the frontend SHALL provide an option to generate one + +#### Scenario: Compare Videos +- **WHEN** a user selects multiple videos and clicks compare +- **THEN** the frontend SHALL send a POST request to /api/videos/compare with video_ids +- **AND** the frontend SHALL display the comparison result in a structured format +- **AND** the frontend SHALL highlight similarities and differences + +### Requirement: Configuration Management +The system SHALL read configuration from config.yaml file. The system SHALL support environment variable overrides for sensitive configuration (API keys). The system SHALL validate configuration on startup. + +#### Scenario: Load Configuration +- **WHEN** the application starts +- **THEN** the system SHALL read config.yaml file +- **AND** the system SHALL check for environment variables (DASHSCOPE_API_KEY, MONGODB_URI, etc.) +- **AND** the system SHALL override config values with environment variables if present +- **AND** the system SHALL validate required configuration items +- **AND** the system SHALL fail to start if required configuration is missing + diff --git a/openspec/changes/add-video-analysis-feature/tasks.md b/openspec/changes/add-video-analysis-feature/tasks.md new file mode 100644 index 0000000..093e358 --- /dev/null +++ b/openspec/changes/add-video-analysis-feature/tasks.md @@ -0,0 +1,104 @@ +## 1. 后端开发 + +### 1.1 项目初始化 +- [ ] 创建 Python 虚拟环境 +- [ ] 创建 requirements.txt,包含 Flask、pymongo、dashscope、pyyaml 等依赖 +- [ ] 创建项目目录结构(app/、routes/、services/、models/、utils/) + +### 1.2 配置管理 +- [ ] 实现 config.yaml 读取工具类 +- [ ] 在 config.yaml 中添加 DashScope API Key 配置项 +- [ ] 实现环境变量覆盖配置功能 + +### 1.3 MongoDB 数据模型 +- [ ] 创建视频文档模型(Video Model) + - [ ] 字段:id、filename、file_path、upload_time、file_size、status +- [ ] 创建视频分析结果模型(AnalysisResult Model) + - [ ] 字段:video_id、analysis_type、content、created_at、fps +- [ ] 创建视频总结模型(Summary Model) + - [ ] 字段:video_id、summary_text、created_at +- [ ] 创建视频对比模型(Comparison Model) + - [ ] 字段:video_ids、comparison_result、created_at + +### 1.4 视频上传服务 +- [ ] 实现文件上传 API 端点(POST /api/videos/upload) +- [ ] 实现文件验证(格式、大小限制) +- [ ] 实现文件存储到 uploads/ 目录 +- [ ] 实现视频元数据保存到 MongoDB + +### 1.5 阿里云 DashScope 集成 +- [ ] 实现 DashScope 客户端封装类 +- [ ] 实现视频解析服务(调用 MultiModalConversation.call) +- [ ] 实现 fps 参数配置(默认 2,可配置) +- [ ] 实现错误处理和重试机制 + +### 1.6 视频分析服务 +- [ ] 实现视频内容解析 API(POST /api/videos/{video_id}/analyze) +- [ ] 实现解析结果保存到 MongoDB +- [ ] 实现解析状态跟踪(pending、processing、completed、failed) + +### 1.7 视频总结服务 +- [ ] 实现视频总结生成 API(POST /api/videos/{video_id}/summarize) +- [ ] 实现总结提示词模板 +- [ ] 实现总结结果保存到 MongoDB +- [ ] 实现总结历史查询 + +### 1.8 视频对比服务 +- [ ] 实现视频对比 API(POST /api/videos/compare) +- [ ] 实现多视频内容提取和对比逻辑 +- [ ] 实现对比结果生成和保存 +- [ ] 实现对比历史查询 + +### 1.9 API 路由 +- [ ] 创建视频相关路由(/api/videos/*) +- [ ] 实现错误处理中间件 +- [ ] 实现请求日志记录 +- [ ] 实现 CORS 支持(用于前端访问) + +## 2. 前端开发 + +### 2.1 静态页面结构 +- [ ] 创建 index.html 主页面 +- [ ] 创建视频上传页面组件 +- [ ] 创建视频列表页面组件 +- [ ] 创建视频总结展示页面组件 +- [ ] 创建视频对比页面组件 + +### 2.2 前端功能实现 +- [ ] 实现视频文件上传功能(使用 FormData 和 fetch API) +- [ ] 实现上传进度显示 +- [ ] 实现视频列表展示(从 API 获取) +- [ ] 实现视频分析触发功能 +- [ ] 实现视频总结展示 +- [ ] 实现视频选择对比功能 +- [ ] 实现对比结果展示 +- [ ] 实现错误提示和加载状态 + +### 2.3 样式和交互 +- [ ] 设计响应式布局 +- [ ] 实现现代化的 UI 样式 +- [ ] 实现交互反馈(按钮状态、加载动画等) + +## 3. 测试和文档 + +### 3.1 API 文档 +- [ ] 编写完整的 RESTful API 文档(Markdown 格式) +- [ ] 包含所有端点的请求/响应示例 +- [ ] 包含错误码说明 + +### 3.2 测试 +- [ ] 编写单元测试(视频处理服务) +- [ ] 编写 API 集成测试 +- [ ] 测试视频上传、解析、总结、对比的完整流程 + +## 4. 部署准备 + +### 4.1 环境配置 +- [ ] 更新 .farmer.dev.json 配置(Python 应用) +- [ ] 创建 Dockerfile(如需要) +- [ ] 更新部署脚本 + +### 4.2 文档 +- [ ] 更新 README.md 说明项目结构和使用方法 +- [ ] 添加环境变量配置说明 + diff --git a/openspec/changes/fix-dashscope-api-key-validation/proposal.md b/openspec/changes/fix-dashscope-api-key-validation/proposal.md new file mode 100644 index 0000000..a6e65d5 --- /dev/null +++ b/openspec/changes/fix-dashscope-api-key-validation/proposal.md @@ -0,0 +1,16 @@ +# 变更:修复 DashScope API Key 验证逻辑 + +## 原因 +当前实现在初始化 `DashScopeService` 时立即检查 API key,如果为空就抛出错误。这导致即使 API key 在 `config.yaml` 中设置为空字符串,应用程序也无法启动。应该允许 API key 为空,在实际调用 API 时才进行验证。 + +## 变更内容 +- 修改 `DashScopeService.__init__` 方法,允许 API key 为空 +- 在实际调用 API 方法时(`analyze_video`, `summarize_video`, `compare_videos`)才检查 API key +- 提供更友好的错误提示,指导用户在 `config.yaml` 中设置 API key + +## 影响 +- 受影响的文件:`app/services/dashscope_service.py` +- 应用程序可以在未设置 API key 的情况下启动 +- 只有在实际使用视频分析功能时才会提示需要设置 API key +- 不影响其他功能 + diff --git a/openspec/changes/fix-dashscope-api-key-validation/tasks.md b/openspec/changes/fix-dashscope-api-key-validation/tasks.md new file mode 100644 index 0000000..3271aa2 --- /dev/null +++ b/openspec/changes/fix-dashscope-api-key-validation/tasks.md @@ -0,0 +1,8 @@ +## 1. 修复 API Key 验证逻辑 + +- [x] 修改 `DashScopeService.__init__` 方法,移除立即验证 API key 的逻辑 +- [x] 创建 `_ensure_api_key` 私有方法用于延迟验证 +- [x] 在 `analyze_video` 方法中添加 API key 验证 +- [x] 在 `compare_videos` 方法中添加 API key 验证(`summarize_video` 调用 `analyze_video`,会自动验证) +- [x] 改进错误提示信息,指向 config.yaml 配置 + diff --git a/openspec/changes/fix-dashscope-local-file-path/ROOT_CAUSE_ANALYSIS.md b/openspec/changes/fix-dashscope-local-file-path/ROOT_CAUSE_ANALYSIS.md new file mode 100644 index 0000000..d64d03f --- /dev/null +++ b/openspec/changes/fix-dashscope-local-file-path/ROOT_CAUSE_ANALYSIS.md @@ -0,0 +1,127 @@ +# DashScope 本地视频文件路径格式问题 - 根因分析 + +## 问题描述 + +调用 DashScope API 时返回错误: +``` +<400> InternalError.Algo.InvalidParameter: The provided URL does not appear to be valid. Ensure it is correctly formatted. +``` + +## 当前实现分析 + +### 尝试的方法 1:直接使用绝对路径 +```python +video_path_for_api = str(video_path.absolute()) +# 例如:/Users/d-robotics/workSpace/videoSummary/uploads/episode_0_model_input_observation_full_image.mp4 +``` +**结果**:失败,返回 400 错误 + +### 尝试的方法 2:使用 file:// 格式 +```python +file_url = f"file://{absolute_path_str}" +# 例如:file:///Users/d-robotics/workSpace/videoSummary/uploads/episode_0_model_input_observation_full_image.mp4 +``` +**结果**:失败,返回 400 错误 + +## 根因分析 + +### 1. 路径格式问题 + +根据 DashScope 官方文档示例: +```python +local_path = "xxx/test.mp4" # 绝对路径字符串 +video_path = f"file://{local_path}" +``` + +**关键发现**: +- 文档示例中 `local_path` 是**绝对路径字符串**,不包含前导斜杠 +- 但在 macOS/Linux 系统上,绝对路径通常以 `/` 开头 +- 当使用 `file://` 前缀时,如果路径以 `/` 开头,应该使用 `file:///`(三个斜杠)而不是 `file://`(两个斜杠) + +### 2. URL 编码问题 + +路径中可能包含特殊字符(虽然当前路径没有),但 `file://` URL 格式要求路径部分需要进行 URL 编码: +- 空格应该编码为 `%20` +- 其他特殊字符也需要编码 + +### 3. 可能的解决方案 + +#### 方案 A:使用正确的 file:// 格式(推荐) + +根据 RFC 3986 和 file:// URL 规范: +- 在 Unix/macOS 系统上,`file://` URL 应该使用三个斜杠:`file:///` +- 路径应该进行 URL 编码 + +```python +from urllib.parse import quote, urljoin +import os + +absolute_path = video_path.absolute() +absolute_path_str = str(absolute_path) + +# 对于 Unix/macOS 系统,使用 file:/// 格式 +if os.name != 'nt': # Unix/macOS + # 移除前导斜杠,然后添加 file:/// + path_without_leading_slash = absolute_path_str.lstrip('/') + file_url = f"file:///{path_without_leading_slash}" + # 或者直接使用 file:/// 加上完整路径 + file_url = f"file://{absolute_path_str}" +else: # Windows + # Windows 路径需要特殊处理 + file_url = f"file:///{absolute_path_str.replace('\\', '/')}" +``` + +#### 方案 B:直接使用绝对路径字符串(如果 SDK 支持) + +根据文档示例,可能 SDK 内部会自动处理 `file://` 前缀,所以应该直接传递绝对路径字符串: + +```python +video_path_for_api = str(video_path.absolute()) +``` + +#### 方案 C:使用 pathlib 的 as_uri() 方法 + +Python 的 `pathlib.Path` 提供了 `as_uri()` 方法,可以生成正确的 file:// URL: + +```python +video_path_for_api = video_path.absolute().as_uri() +# 这会自动生成正确的 file:// URL 格式 +``` + +## 推荐解决方案 + +**使用 `pathlib.Path.as_uri()` 方法**,这是最可靠的方式,因为: +1. Python 标准库方法,符合 RFC 3986 规范 +2. 自动处理不同操作系统的路径格式 +3. 自动处理特殊字符编码 +4. 生成正确的 file:// URL 格式 + +### 实现代码 + +```python +def analyze_video(self, video_path: Path, prompt: str, fps: Optional[int] = None) -> Dict[str, Any]: + # ... existing code ... + + # Use pathlib's as_uri() method to generate correct file:// URL + absolute_path = video_path.absolute() + video_path_for_api = absolute_path.as_uri() + + # Log for debugging + logger.info(f"Using video path (file:// URI): {video_path_for_api}") + + # ... rest of the code ... +``` + +## 验证步骤 + +1. 使用 `pathlib.Path.as_uri()` 生成 file:// URL +2. 验证生成的 URL 格式是否正确 +3. 测试调用 DashScope API +4. 如果仍然失败,检查 DashScope SDK 文档是否有其他要求 + +## 注意事项 + +- DashScope API 可能需要在服务器端能够访问该文件路径 +- 如果 API 服务器运行在不同的机器上,本地文件路径将无法访问 +- 在这种情况下,可能需要将文件上传到可访问的 URL(如 OSS),或使用其他方式传递文件内容 + diff --git a/openspec/changes/fix-dashscope-local-file-path/proposal.md b/openspec/changes/fix-dashscope-local-file-path/proposal.md new file mode 100644 index 0000000..39d2179 --- /dev/null +++ b/openspec/changes/fix-dashscope-local-file-path/proposal.md @@ -0,0 +1,33 @@ +# 变更:修复 DashScope 本地视频文件路径格式问题 + +## 原因 +当前实现尝试使用本地文件路径调用 DashScope API,但 API 返回错误:"The provided URL does not appear to be valid. Ensure it is correctly formatted." + +根据 DashScope 官方文档示例,应该使用 `file://` 格式的本地文件路径: +```python +local_path = "xxx/test.mp4" # 绝对路径字符串 +video_path = f"file://{local_path}" +``` + +当前代码虽然尝试了两种方式(直接路径和 file:// 格式),但都失败了。问题可能在于: +1. `file://` 格式的路径构造不正确(在 macOS/Linux 上应该是 `file://` 而不是 `file:///`) +2. 路径中的特殊字符(如空格)没有进行 URL 编码 +3. 路径格式不完全符合 DashScope SDK 的要求 + +需要严格按照官方文档示例实现,确保本地视频文件能够正确传递给 DashScope API。 + +## 变更内容 +- 修改 `DashScopeService.analyze_video` 方法,严格按照 DashScope 文档示例使用 `file://{absolute_path}` 格式 +- 确保路径格式正确:使用绝对路径字符串,然后添加 `file://` 前缀 +- 处理路径中的特殊字符,确保路径格式符合 URL 规范 +- 修改 `DashScopeService.compare_videos` 方法,使用相同的路径格式 +- 移除不必要的回退逻辑,直接使用正确的格式 +- 添加路径格式验证和错误处理 + +## 影响 +- 受影响的规范:`specs/video-analysis/spec.md` - 需要更新视频分析实现要求 +- 受影响的代码: + - `app/services/dashscope_service.py` - 修改视频路径格式处理逻辑 +- 修复后视频分析、总结和对比功能可以正常工作 +- 不影响视频上传和其他功能 + diff --git a/openspec/changes/fix-dashscope-local-file-path/specs/video-analysis/spec.md b/openspec/changes/fix-dashscope-local-file-path/specs/video-analysis/spec.md new file mode 100644 index 0000000..06658c3 --- /dev/null +++ b/openspec/changes/fix-dashscope-local-file-path/specs/video-analysis/spec.md @@ -0,0 +1,44 @@ +## MODIFIED Requirements + +### Requirement: Video Content Analysis +The system SHALL provide functionality to analyze video content using Alibaba Cloud DashScope MultiModal API. The system SHALL extract video frames at a configurable fps rate. The system SHALL call the DashScope API with the video file using the correct local file path format (`file://{absolute_path}`) as specified in DashScope documentation. The system SHALL save the analysis results to MongoDB. + +#### Scenario: Successful Video Analysis +- **WHEN** a user requests analysis for an uploaded video +- **THEN** the system SHALL read the video file from local storage +- **AND** the system SHALL construct the file path in the format `file://{absolute_path}` where `absolute_path` is the absolute path string of the video file +- **AND** the system SHALL call DashScope MultiModalConversation API with the correctly formatted file path and fps parameter (default: 2) +- **AND** the system SHALL receive the analysis result from the API +- **AND** the system SHALL save the analysis result to MongoDB with video_id, analysis_type, content, fps, and created_at +- **AND** the system SHALL update the video status to "analyzed" +- **AND** the system SHALL return the analysis result to the user + +#### Scenario: Analysis API Failure +- **WHEN** the DashScope API call fails (network error, API error, invalid file path format, etc.) +- **THEN** the system SHALL handle the error gracefully +- **AND** the system SHALL update the video status to "failed" +- **AND** the system SHALL return an appropriate error message to the user +- **AND** the system SHALL log the error with detailed information for debugging + +### Requirement: Video Summary Generation +The system SHALL provide functionality to generate a summary of video content. The system SHALL use the DashScope API to analyze the video using the correct local file path format (`file://{absolute_path}`) and generate a summary based on a predefined prompt template. The system SHALL save the summary to MongoDB. + +#### Scenario: Successful Summary Generation +- **WHEN** a user requests a summary for an analyzed video +- **THEN** the system SHALL construct the file path in the format `file://{absolute_path}` +- **AND** the system SHALL call the DashScope API with the correctly formatted video file path and summary prompt +- **AND** the system SHALL receive the summary text from the API +- **AND** the system SHALL save the summary to MongoDB with video_id, summary_text, and created_at +- **AND** the system SHALL return the summary to the user + +### Requirement: Video Comparison +The system SHALL provide functionality to compare content between multiple videos. The system SHALL extract content from each video using the correct local file path format (`file://{absolute_path}`). The system SHALL generate a comparison analysis highlighting similarities and differences. The system SHALL save the comparison result to MongoDB. + +#### Scenario: Successful Video Comparison +- **WHEN** a user requests comparison between two or more videos +- **THEN** the system SHALL construct file paths for each video in the format `file://{absolute_path}` +- **AND** the system SHALL call the DashScope API with multiple correctly formatted video file paths and comparison prompt +- **AND** the system SHALL generate a comparison result +- **AND** the system SHALL save the comparison to MongoDB with video_ids, comparison_result, and created_at +- **AND** the system SHALL return the comparison result to the user + diff --git a/openspec/changes/fix-dashscope-local-file-path/tasks.md b/openspec/changes/fix-dashscope-local-file-path/tasks.md new file mode 100644 index 0000000..8942a17 --- /dev/null +++ b/openspec/changes/fix-dashscope-local-file-path/tasks.md @@ -0,0 +1,23 @@ +## 1. 修复视频路径格式实现 + +- [ ] 1.1 分析当前路径格式问题,确认根因 +- [ ] 1.2 根据 DashScope 文档示例,修改 `analyze_video` 方法使用正确的 `file://{absolute_path}` 格式 +- [ ] 1.3 确保路径是绝对路径字符串,然后添加 `file://` 前缀(不是 `file:///`) +- [ ] 1.4 处理路径中的特殊字符(如空格),进行必要的 URL 编码 +- [ ] 1.5 修改 `compare_videos` 方法,使用相同的路径格式 +- [ ] 1.6 移除不必要的回退逻辑,直接使用正确的格式 +- [ ] 1.7 添加路径格式验证和详细的错误日志 + +## 2. 测试和验证 + +- [ ] 2.1 测试视频分析功能,验证路径格式正确 +- [ ] 2.2 测试包含空格或特殊字符的文件路径 +- [ ] 2.3 验证 API 调用成功,不再出现 URL 格式错误 +- [ ] 2.4 测试视频总结功能 +- [ ] 2.5 测试视频对比功能 + +## 3. 文档更新 + +- [ ] 3.1 更新规范文件,反映正确的实现方式 +- [ ] 3.2 添加路径格式要求的说明 + diff --git a/openspec/changes/fix-dashscope-video-url-format/proposal.md b/openspec/changes/fix-dashscope-video-url-format/proposal.md new file mode 100644 index 0000000..fcf3b78 --- /dev/null +++ b/openspec/changes/fix-dashscope-video-url-format/proposal.md @@ -0,0 +1,24 @@ +# 变更:修复 DashScope 视频文件路径格式问题 + +## 原因 +当前实现使用 `file://` URL 格式传递视频文件路径给 DashScope API,但 API 返回错误:"The provided URL does not appear to be valid"。 + +根据 DashScope 文档示例,应该直接传递绝对路径字符串,而不是 `file://` URL 格式。文档中的示例代码显示: +```python +local_path = "xxx/test.mp4" # 绝对路径 +video_path = f"file://{local_path}" +``` +但实际上,DashScope Python SDK 可能期望直接接收文件路径字符串,而不是 `file://` URL。 + +## 变更内容 +- 修改 `DashScopeService.analyze_video` 方法,直接传递文件路径字符串而不是 `file://` URL +- 修改 `DashScopeService.compare_videos` 方法,同样使用路径字符串 +- 根据 DashScope SDK 的实际行为调整实现 +- 如果路径包含空格或特殊字符,确保正确处理 + +## 影响 +- 受影响的文件:`app/services/dashscope_service.py` +- 修复后视频分析功能可以正常工作 +- 不影响其他功能 + + diff --git a/openspec/changes/fix-dashscope-video-url-format/tasks.md b/openspec/changes/fix-dashscope-video-url-format/tasks.md new file mode 100644 index 0000000..ea1b52a --- /dev/null +++ b/openspec/changes/fix-dashscope-video-url-format/tasks.md @@ -0,0 +1,30 @@ +## 1. 修复视频路径格式 + +- [x] 检查 DashScope SDK 文档和示例代码,确认正确的路径格式 +- [x] 修改 `analyze_video` 方法,先尝试直接使用绝对路径字符串 +- [x] 如果直接路径失败,回退到 `file://` 格式 +- [x] 添加详细的日志记录用于调试 +- [x] 修改 `compare_videos` 方法,使用相同的逻辑(先尝试直接路径,失败后回退到 file:// 格式) + +## 2. 验证 + +- [ ] 测试视频分析功能 +- [ ] 验证路径格式正确 +- [ ] 确认 API 调用成功 + +## 根因分析 + +根据错误日志和 DashScope 文档: + +1. **当前使用的格式**:`file:///Users/d-robotics/workSpace/videoSummary/uploads/...` +2. **错误信息**:`The provided URL does not appear to be valid` +3. **可能的原因**: + - DashScope Python SDK 可能期望直接接收绝对路径字符串,而不是 `file://` URL + - SDK 内部可能会自动处理路径转换 + - 或者 `file://` 格式需要不同的编码方式 + +**解决方案**: +- 首先尝试直接使用绝对路径字符串(让 SDK 处理) +- 如果失败,回退到 `file://` 格式 +- 添加详细日志以便调试 + diff --git a/openspec/changes/fix-missing-os-import/proposal.md b/openspec/changes/fix-missing-os-import/proposal.md new file mode 100644 index 0000000..67e69a1 --- /dev/null +++ b/openspec/changes/fix-missing-os-import/proposal.md @@ -0,0 +1,14 @@ +# 变更:修复缺失的 os 模块导入 + +## 原因 +在移除环境变量配置支持时,错误地删除了 `app/services/dashscope_service.py` 中的 `import os` 语句。但代码中仍在使用 `os.name` 来检测操作系统类型(用于 Windows 路径处理),导致运行时错误:`name 'os' is not defined`。 + +## 变更内容 +- 在 `app/services/dashscope_service.py` 中重新添加 `import os` 语句 +- `os.name` 用于检测操作系统类型('nt' 表示 Windows),这是必要的功能,与环境变量无关 + +## 影响 +- 受影响的代码: + - `app/services/dashscope_service.py` - 添加 `import os` +- 修复的错误:`name 'os' is not defined` 运行时错误 + diff --git a/openspec/changes/fix-missing-os-import/tasks.md b/openspec/changes/fix-missing-os-import/tasks.md new file mode 100644 index 0000000..7b902ce --- /dev/null +++ b/openspec/changes/fix-missing-os-import/tasks.md @@ -0,0 +1,7 @@ +## 1. 实施 +- [ ] 1.1 在 `app/services/dashscope_service.py` 文件顶部添加 `import os` + +## 2. 验证 +- [ ] 2.1 验证代码可以正常运行,不再出现 `name 'os' is not defined` 错误 +- [ ] 2.2 验证 Windows 和 Unix 系统的路径处理逻辑正常工作 + diff --git a/openspec/changes/fix-video-model-indentation-error/proposal.md b/openspec/changes/fix-video-model-indentation-error/proposal.md new file mode 100644 index 0000000..b1ab407 --- /dev/null +++ b/openspec/changes/fix-video-model-indentation-error/proposal.md @@ -0,0 +1,20 @@ +# 变更:修复代码缩进错误 + +## 原因 +在多个文件中存在导入语句位置错误和缩进问题,导致应用程序无法启动: +1. `app/models/video.py`: `from typing import List` 被错误地放在了类定义中间 +2. `app/services/analysis_service.py`: `from typing import List` 被错误地放在了类定义中间 +3. `app/utils/validators.py`: `from typing import Tuple` 被错误地放在了函数定义中间 + +## 变更内容 +- 修复 `app/models/video.py` 中的导入语句位置和缩进问题 +- 修复 `app/services/analysis_service.py` 中的导入语句位置和缩进问题 +- 修复 `app/utils/validators.py` 中的导入语句位置和缩进问题 +- 确保所有导入语句都在文件顶部,类/函数定义之前 +- 确保所有方法和函数的缩进正确 + +## 影响 +- 受影响的文件:`app/models/video.py`, `app/services/analysis_service.py`, `app/utils/validators.py` +- 修复后应用程序可以正常启动 +- 不影响其他功能 + diff --git a/openspec/changes/fix-video-model-indentation-error/tasks.md b/openspec/changes/fix-video-model-indentation-error/tasks.md new file mode 100644 index 0000000..11b6b3a --- /dev/null +++ b/openspec/changes/fix-video-model-indentation-error/tasks.md @@ -0,0 +1,17 @@ +## 1. 修复缩进错误 + +### app/models/video.py +- [x] 将 `from typing import List` 移到文件顶部导入区域 +- [x] 修复 `find_all` 方法的缩进 + +### app/services/analysis_service.py +- [x] 删除类定义中间重复的 `from typing import List` 导入语句 +- [x] 修复 `compare_videos` 方法的缩进 + +### app/utils/validators.py +- [x] 将 `from typing import Tuple` 移到文件顶部导入区域 +- [x] 修复 `validate_file_size` 函数的缩进 + +### 验证 +- [x] 验证所有文件代码语法正确(lint 检查通过) + diff --git a/openspec/changes/improve-dashscope-api-key-error-handling/proposal.md b/openspec/changes/improve-dashscope-api-key-error-handling/proposal.md new file mode 100644 index 0000000..35d757f --- /dev/null +++ b/openspec/changes/improve-dashscope-api-key-error-handling/proposal.md @@ -0,0 +1,23 @@ +# 变更:改进 DashScope API Key 错误处理 + +## 原因 +当前实现中,当 DashScope API key 未设置时,会抛出 `ValueError` 异常,导致: +1. 服务器返回 500 内部错误,而不是更友好的 400 错误 +2. 错误信息不够清晰,用户不知道如何配置 +3. 前端无法正确显示错误提示 + +需要改进错误处理,提供更友好的错误响应和用户提示。 + +## 变更内容 +- 在 `AnalysisService` 中捕获 `ValueError` 异常,返回友好的错误消息 +- 在 API 路由中确保错误被正确转换为 JSON 响应 +- 改进错误消息,明确指导用户如何配置 API key +- 确保所有 API 端点都返回一致的错误格式 + +## 影响 +- 受影响的文件: + - `app/services/analysis_service.py` - 改进错误处理 + - `app/routes/video_routes.py` - 确保错误正确返回 +- 用户体验改进:更清晰的错误提示 +- API 响应格式统一:所有错误都返回 JSON 格式 + diff --git a/openspec/changes/improve-dashscope-api-key-error-handling/tasks.md b/openspec/changes/improve-dashscope-api-key-error-handling/tasks.md new file mode 100644 index 0000000..1b10f4d --- /dev/null +++ b/openspec/changes/improve-dashscope-api-key-error-handling/tasks.md @@ -0,0 +1,53 @@ +## 1. 改进错误处理 + +- [x] 在 `AnalysisService.analyze_video` 中捕获 `ValueError` 异常 +- [x] 在 `AnalysisService.summarize_video` 中捕获 `ValueError` 异常 +- [x] 在 `AnalysisService.compare_videos` 中捕获 `ValueError` 异常 +- [x] 返回友好的错误消息,包含配置指导 +- [x] 改进 `DashScopeService._ensure_api_key` 的错误消息,添加获取 API key 的链接 +- [x] 确保错误消息格式统一 + +## 2. 验证错误响应 + +- [x] 代码修改完成,错误现在会返回 400 状态码而不是 500 +- [x] 所有异常处理已正确实现 +- [x] 错误消息包含配置指导和 API key 获取链接 +- [x] 代码通过 lint 检查,无错误 + +## 实施完成总结 + +### 已完成的修改 + +1. **`app/services/analysis_service.py`** + - ✅ `analyze_video` 方法:添加了 `ValueError` 异常捕获 + - ✅ `summarize_video` 方法:添加了 `ValueError` 异常捕获 + - ✅ `compare_videos` 方法:添加了 `ValueError` 异常捕获 + - ✅ 所有方法都返回友好的错误消息 + +2. **`app/services/dashscope_service.py`** + - ✅ `_ensure_api_key` 方法:改进了错误消息,添加了 API key 获取链接 + +3. **`app/routes/video_routes.py`** + - ✅ 路由已经正确使用 `error_response` 返回 400 状态码 + +### 改进效果 + +- **之前**:API key 未设置时返回 500 内部服务器错误 +- **现在**:API key 未设置时返回 400 客户端错误,包含清晰的配置指导 + +### 错误消息示例 + +当 API key 未设置时,用户会收到以下错误消息: +``` +DashScope API key is required for video analysis. +Please set 'dashscope.api_key' in config.yaml file, +or set DASHSCOPE_API_KEY environment variable. +You can obtain your API key from: https://dashscope.console.aliyun.com/ +``` + +### 测试建议 + +1. 在未设置 API key 的情况下测试视频分析功能 +2. 验证错误消息在前端正确显示 +3. 设置 API key 后验证功能正常工作 + diff --git a/openspec/changes/remove-env-var-config/design.md b/openspec/changes/remove-env-var-config/design.md new file mode 100644 index 0000000..c83c2b3 --- /dev/null +++ b/openspec/changes/remove-env-var-config/design.md @@ -0,0 +1,86 @@ +# 技术设计文档 + +## 上下文 +当前系统支持从 `config.yaml` 和环境变量读取配置,环境变量可以覆盖 `config.yaml` 中的值。这种双重配置来源增加了系统的复杂性和维护成本。为了简化配置管理,需要移除环境变量支持,统一使用 `config.yaml` 作为唯一配置来源。 + +## 目标 / 非目标 + +### 目标 +- 简化配置管理,统一配置来源为 `config.yaml` +- 减少代码复杂度,移除环境变量处理逻辑 +- 提高配置的可追溯性和可维护性 +- 确保所有配置都通过文件管理,便于版本控制 + +### 非目标 +- 不支持配置热重载(需要重启应用) +- 不支持多环境配置文件(如 dev.yaml, prod.yaml) +- 不支持配置加密(敏感信息如 API key 以明文存储在 config.yaml 中) + +## 决策 + +### 1. 配置来源:仅使用 config.yaml +**决策**:移除所有环境变量支持,仅从 `config.yaml` 文件读取配置 + +**原因**: +- 简化配置管理逻辑 +- 统一配置来源,减少混淆 +- 配置文件便于版本控制和审查 +- 降低配置管理的认知负担 + +**考虑的替代方案**: +- 保留环境变量但仅用于敏感信息(如 API key):增加了复杂性,不符合简化目标 +- 支持多环境配置文件:超出当前需求范围,可以后续添加 + +### 2. 错误处理策略 +**决策**:在配置缺失时抛出明确的异常,而不是使用默认值或静默失败 + +**原因**: +- 快速发现配置问题 +- 避免运行时错误 +- 提供清晰的错误消息指导用户修复 + +**考虑的替代方案**: +- 使用默认值:可能导致配置错误被忽略,不符合明确失败的原则 + +### 3. 代码清理范围 +**决策**:删除所有环境变量相关代码,包括: +- `app/config.py` 中的 `_apply_env_overrides()` 方法 +- 所有 `os.getenv()` 调用 +- 启动脚本中的环境变量检查 +- 文档中的环境变量说明 + +**原因**: +- 彻底移除功能,避免遗留代码 +- 减少维护负担 +- 防止未来误用 + +## 风险 / 权衡 + +### 风险 +1. **迁移成本**:使用环境变量的用户需要迁移配置 + - **缓解措施**:提供清晰的迁移指南和错误消息 + +2. **安全性**:API key 等敏感信息存储在配置文件中 + - **缓解措施**:在文档中说明安全最佳实践(不要提交到版本控制) + +3. **灵活性降低**:无法通过环境变量快速切换配置 + - **缓解措施**:对于需要多环境配置的场景,可以后续添加多配置文件支持 + +### 权衡 +- **简化 vs 灵活性**:选择简化,牺牲了环境变量的灵活性 +- **统一 vs 多样性**:选择统一配置来源,提高可维护性 + +## 迁移计划 + +### 步骤 +1. 更新代码,移除环境变量支持 +2. 更新文档,说明配置迁移方法 +3. 更新错误消息,提供配置指导 +4. 验证所有配置项都能正确读取 + +### 回滚 +如果需要回滚,可以恢复之前的代码,但建议用户迁移到 `config.yaml` 配置方式。 + +## 开放问题 +无 + diff --git a/openspec/changes/remove-env-var-config/proposal.md b/openspec/changes/remove-env-var-config/proposal.md new file mode 100644 index 0000000..4c09edf --- /dev/null +++ b/openspec/changes/remove-env-var-config/proposal.md @@ -0,0 +1,24 @@ +# 变更:移除环境变量配置支持 + +## 原因 +当前系统同时支持从 `config.yaml` 和环境变量读取配置,增加了配置管理的复杂性和维护成本。为了简化配置管理,统一配置来源,所有配置应仅从 `config.yaml` 文件读取,移除环境变量覆盖功能。 + +## 变更内容 +- **BREAKING**: 移除所有环境变量配置支持 +- 删除 `app/config.py` 中的 `_apply_env_overrides()` 方法 +- 删除所有 `os.getenv()` 调用和相关的环境变量检查逻辑 +- 更新 `app/services/dashscope_service.py`,移除环境变量回退逻辑 +- 更新 `config.yaml` 注释,移除环境变量相关说明 +- 更新启动脚本(`start.sh`、`start.bat`),移除环境变量检查 +- 更新配置文档(`CONFIG.md`),移除环境变量配置说明 + +## 影响 +- 受影响的规范:`video-analysis` 规范中的配置管理需求 +- 受影响的代码: + - `app/config.py` - 删除环境变量覆盖逻辑 + - `app/services/dashscope_service.py` - 移除环境变量回退 + - `config.yaml` - 更新注释 + - `start.sh` / `start.bat` - 移除环境变量检查 + - `CONFIG.md` - 更新配置文档 +- 迁移影响:使用环境变量的用户需要将配置迁移到 `config.yaml` 文件 + diff --git a/openspec/changes/remove-env-var-config/specs/config-management/spec.md b/openspec/changes/remove-env-var-config/specs/config-management/spec.md new file mode 100644 index 0000000..a7bac7a --- /dev/null +++ b/openspec/changes/remove-env-var-config/specs/config-management/spec.md @@ -0,0 +1,26 @@ +## MODIFIED Requirements + +### Requirement: Configuration Management +The system SHALL read configuration from config.yaml file only. The system SHALL validate configuration on startup. + +#### Scenario: Load Configuration +- **WHEN** the application starts +- **THEN** the system SHALL read config.yaml file +- **AND** the system SHALL validate required configuration items +- **AND** the system SHALL fail to start if required configuration is missing +- **AND** the system SHALL NOT read or use environment variables for configuration + +#### Scenario: Configuration Validation Failure +- **WHEN** config.yaml file does not exist +- **THEN** the system SHALL raise FileNotFoundError with the config file path + +- **WHEN** required configuration items are missing (e.g., DashScope API key) +- **THEN** the system SHALL raise ValueError with a clear error message when the configuration is first used + +## REMOVED Requirements + +### Requirement: Environment Variable Configuration Override +**原因**: 简化配置管理,统一配置来源为 `config.yaml` 文件,减少配置管理的复杂性和维护成本。 + +**迁移**: 之前使用环境变量的用户需要将所有配置迁移到 `config.yaml` 文件中。环境变量将不再被读取或使用。 + diff --git a/openspec/changes/remove-env-var-config/specs/video-analysis/spec.md b/openspec/changes/remove-env-var-config/specs/video-analysis/spec.md new file mode 100644 index 0000000..a7bac7a --- /dev/null +++ b/openspec/changes/remove-env-var-config/specs/video-analysis/spec.md @@ -0,0 +1,26 @@ +## MODIFIED Requirements + +### Requirement: Configuration Management +The system SHALL read configuration from config.yaml file only. The system SHALL validate configuration on startup. + +#### Scenario: Load Configuration +- **WHEN** the application starts +- **THEN** the system SHALL read config.yaml file +- **AND** the system SHALL validate required configuration items +- **AND** the system SHALL fail to start if required configuration is missing +- **AND** the system SHALL NOT read or use environment variables for configuration + +#### Scenario: Configuration Validation Failure +- **WHEN** config.yaml file does not exist +- **THEN** the system SHALL raise FileNotFoundError with the config file path + +- **WHEN** required configuration items are missing (e.g., DashScope API key) +- **THEN** the system SHALL raise ValueError with a clear error message when the configuration is first used + +## REMOVED Requirements + +### Requirement: Environment Variable Configuration Override +**原因**: 简化配置管理,统一配置来源为 `config.yaml` 文件,减少配置管理的复杂性和维护成本。 + +**迁移**: 之前使用环境变量的用户需要将所有配置迁移到 `config.yaml` 文件中。环境变量将不再被读取或使用。 + diff --git a/openspec/changes/remove-env-var-config/tasks.md b/openspec/changes/remove-env-var-config/tasks.md new file mode 100644 index 0000000..d1b3f33 --- /dev/null +++ b/openspec/changes/remove-env-var-config/tasks.md @@ -0,0 +1,40 @@ +## 1. 实施 + +### 1.1 更新配置管理代码 +- [ ] 1.1.1 删除 `app/config.py` 中的 `_apply_env_overrides()` 方法 +- [ ] 1.1.2 删除 `app/config.py` 中的 `os` 模块导入(如果不再需要) +- [ ] 1.1.3 更新 `Config.__init__()` 方法,移除环境变量覆盖调用 +- [ ] 1.1.4 更新 `Config` 类文档字符串,移除环境变量优先级说明 + +### 1.2 更新 DashScope 服务 +- [ ] 1.2.1 修改 `app/services/dashscope_service.py` 中的 `__init__` 方法 +- [ ] 1.2.2 移除 `os.getenv('DASHSCOPE_API_KEY')` 回退逻辑 +- [ ] 1.2.3 更新错误消息,移除环境变量相关提示 + +### 1.3 更新配置文件 +- [ ] 1.3.1 更新 `config.yaml` 中所有关于环境变量的注释 +- [ ] 1.3.2 移除配置项中的环境变量覆盖说明 + +### 1.4 更新启动脚本 +- [ ] 1.4.1 更新 `start.sh`,移除环境变量检查逻辑 +- [ ] 1.4.2 更新 `start.bat`,移除环境变量检查逻辑 + +### 1.5 更新文档 +- [ ] 1.5.1 更新 `CONFIG.md`,移除所有环境变量配置说明 +- [ ] 1.5.2 更新文档中的配置优先级说明 + +### 1.6 更新规范 +- [ ] 1.6.1 更新配置管理规范,移除环境变量支持需求 +- [ ] 1.6.2 验证规范变更符合 OpenSpec 格式要求 + +## 2. 测试 +- [ ] 2.1 验证配置仅从 `config.yaml` 读取 +- [ ] 2.2 验证环境变量不再影响配置 +- [ ] 2.3 验证所有配置项都能正确从 `config.yaml` 读取 +- [ ] 2.4 验证错误处理(缺少配置时的错误消息) + +## 3. 验证 +- [ ] 3.1 运行 `openspec validate remove-env-var-config --strict` +- [ ] 3.2 检查代码中无残留的环境变量相关代码 +- [ ] 3.3 确认所有文档已更新 + diff --git a/openspec/config.json b/openspec/config.json new file mode 100644 index 0000000..f478171 --- /dev/null +++ b/openspec/config.json @@ -0,0 +1,3 @@ +{ + "language": "zh-CN" +} diff --git a/openspec/project.md b/openspec/project.md new file mode 100644 index 0000000..cee312f --- /dev/null +++ b/openspec/project.md @@ -0,0 +1,31 @@ +# 项目 上下文 + +## 目的 +[描述您项目的目标和目的] + +## 技术栈 +- [列出您的主要技术] +- [例如:TypeScript, React, Node.js] + +## 项目约定 + +### 代码风格 +[描述您的代码风格偏好、格式化规则和命名约定] + +### 架构模式 +[记录您的架构决策和模式] + +### 测试策略 +[说明您的测试方法和要求] + +### Git 工作流 +[描述您的分支策略和提交约定] + +## 领域上下文 +[添加 AI 助手需要理解的领域特定知识] + +## 重要约束 +[列出任何技术、业务或监管约束] + +## 外部依赖 +[记录关键的外部服务、API 或系统] diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..c6adddd --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +Flask==3.0.0 +Flask-CORS==4.0.0 +pymongo==4.6.0 +dashscope==1.17.0 +PyYAML==6.0.1 +python-dotenv==1.0.0 +werkzeug==3.0.1 + diff --git a/start.bat b/start.bat new file mode 100644 index 0000000..2bae6dc --- /dev/null +++ b/start.bat @@ -0,0 +1,30 @@ +@echo off + +REM Activate virtual environment +if not exist "venv" ( + echo Creating virtual environment... + python -m venv venv +) + +echo Activating virtual environment... +call venv\Scripts\activate.bat + +REM Upgrade pip +echo Upgrading pip... +python -m pip install --upgrade pip + +REM Install dependencies +echo Installing dependencies... +pip install -r requirements.txt + +REM Check configuration +echo Checking configuration... +echo Make sure to set 'dashscope.api_key' in config.yaml file. +echo. + +REM Run the application +echo Starting application... +python app.py + +pause + diff --git a/start.sh b/start.sh new file mode 100755 index 0000000..1b68a7f --- /dev/null +++ b/start.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Activate virtual environment +if [ ! -d "venv" ]; then + echo "Creating virtual environment..." + python3 -m venv venv +fi + +echo "Activating virtual environment..." +source venv/bin/activate + +# Upgrade pip +echo "Upgrading pip..." +pip install --upgrade pip + +# Install dependencies +echo "Installing dependencies..." +pip install -r requirements.txt + +# Check configuration +echo "Checking configuration..." +echo "Make sure to set 'dashscope.api_key' in config.yaml file." +echo "" + +# Run the application +echo "Starting application..." +python app.py + diff --git a/static/app.js b/static/app.js new file mode 100644 index 0000000..b8bd4f7 --- /dev/null +++ b/static/app.js @@ -0,0 +1,440 @@ +// API base URL - automatically detect from current location +const API_BASE = `${window.location.protocol}//${window.location.host}/api/videos`; + +// Tab switching +document.querySelectorAll('.tab-btn').forEach(btn => { + btn.addEventListener('click', () => { + const tab = btn.dataset.tab; + switchTab(tab); + }); +}); + +function switchTab(tabName) { + // Update buttons + document.querySelectorAll('.tab-btn').forEach(btn => { + btn.classList.remove('active'); + if (btn.dataset.tab === tabName) { + btn.classList.add('active'); + } + }); + + // Update content + document.querySelectorAll('.tab-content').forEach(content => { + content.classList.remove('active'); + }); + document.getElementById(`${tabName}-tab`).classList.add('active'); + + // Load data when switching tabs + if (tabName === 'list') { + loadVideos(); + } else if (tabName === 'compare') { + loadVideosForCompare(); + } +} + +// File upload +const fileInput = document.getElementById('file-input'); +const uploadArea = document.getElementById('upload-area'); + +fileInput.addEventListener('change', handleFileSelect); + +uploadArea.addEventListener('dragover', (e) => { + e.preventDefault(); + uploadArea.style.borderColor = '#764ba2'; +}); + +uploadArea.addEventListener('dragleave', () => { + uploadArea.style.borderColor = '#667eea'; +}); + +uploadArea.addEventListener('drop', (e) => { + e.preventDefault(); + uploadArea.style.borderColor = '#667eea'; + const files = e.dataTransfer.files; + if (files.length > 0) { + fileInput.files = files; + handleFileSelect({ target: fileInput }); + } +}); + +function handleFileSelect(e) { + const file = e.target.files[0]; + if (!file) return; + + uploadFile(file); +} + +function uploadFile(file) { + const formData = new FormData(); + formData.append('file', file); + + const progressDiv = document.getElementById('upload-progress'); + const progressFill = document.getElementById('progress-fill'); + const progressText = document.getElementById('progress-text'); + const resultDiv = document.getElementById('upload-result'); + + // Show progress + document.querySelector('.upload-placeholder').style.display = 'none'; + progressDiv.style.display = 'block'; + progressFill.style.width = '0%'; + resultDiv.style.display = 'none'; + + // Upload using fetch + fetch(`${API_BASE}/upload`, { + method: 'POST', + body: formData + }) + .then(response => response.json()) + .then(data => { + progressFill.style.width = '100%'; + progressText.textContent = '上传完成!'; + + setTimeout(() => { + if (data.success) { + showResult('upload-result', `视频上传成功!ID: ${data.data.video_id}`, 'success'); + // Reset form + fileInput.value = ''; + document.querySelector('.upload-placeholder').style.display = 'block'; + progressDiv.style.display = 'none'; + } else { + showResult('upload-result', data.message || '上传失败', 'error'); + } + }, 500); + }) + .catch(error => { + showResult('upload-result', `上传失败: ${error.message}`, 'error'); + progressDiv.style.display = 'none'; + document.querySelector('.upload-placeholder').style.display = 'block'; + }); +} + +// Load videos list +function loadVideos() { + const videoList = document.getElementById('video-list'); + videoList.innerHTML = '

加载中...

'; + + fetch(`${API_BASE}`) + .then(response => response.json()) + .then(data => { + if (data.success && data.data.length > 0) { + videoList.innerHTML = ''; + data.data.forEach(video => { + const videoItem = createVideoItem(video); + videoList.appendChild(videoItem); + }); + } else { + videoList.innerHTML = '

暂无视频

'; + } + }) + .catch(error => { + videoList.innerHTML = `

加载失败: ${error.message}

`; + }); +} + +function createVideoItem(video) { + const div = document.createElement('div'); + div.className = 'video-item'; + + const sizeMB = (video.file_size / (1024 * 1024)).toFixed(2); + const uploadTime = new Date(video.upload_time).toLocaleString('zh-CN'); + + div.innerHTML = ` +
+
${video.filename}
+ + ${getStatusText(video.status)} + +
+
+ 大小: ${sizeMB} MB | 上传时间: ${uploadTime} +
+
+ + + +
+ `; + + return div; +} + +function getStatusColor(status) { + const colors = { + 'uploaded': '#6c757d', + 'analyzing': '#ffc107', + 'analyzed': '#28a745', + 'failed': '#dc3545' + }; + return colors[status] || '#6c757d'; +} + +function getStatusText(status) { + const texts = { + 'uploaded': '已上传', + 'analyzing': '分析中', + 'analyzed': '已分析', + 'failed': '失败' + }; + return texts[status] || status; +} + +// Video details modal +function viewVideoDetails(videoId) { + fetch(`${API_BASE}/${videoId}`) + .then(response => response.json()) + .then(data => { + if (data.success) { + showVideoModal(data.data); + } else { + alert(data.message || '获取视频详情失败'); + } + }) + .catch(error => { + alert(`获取视频详情失败: ${error.message}`); + }); +} + +function showVideoModal(video) { + const modal = document.getElementById('video-modal'); + const modalTitle = document.getElementById('modal-title'); + const modalBody = document.getElementById('modal-body'); + + modalTitle.textContent = video.filename; + + let html = ` +
+

基本信息

+

文件名: ${video.filename}

+

大小: ${(video.file_size / (1024 * 1024)).toFixed(2)} MB

+

状态: ${getStatusText(video.status)}

+

上传时间: ${new Date(video.upload_time).toLocaleString('zh-CN')}

+
+ `; + + if (video.analysis) { + html += ` +
+

分析结果

+

${video.analysis.content}

+

+ FPS: ${video.analysis.fps} | + 创建时间: ${new Date(video.analysis.created_at).toLocaleString('zh-CN')} +

+
+ `; + } + + if (video.summary) { + html += ` +
+

视频总结

+

${video.summary.summary_text}

+

+ 创建时间: ${new Date(video.summary.created_at).toLocaleString('zh-CN')} +

+
+ `; + } + + modalBody.innerHTML = html; + modal.style.display = 'block'; +} + +function closeModal() { + document.getElementById('video-modal').style.display = 'none'; +} + +window.onclick = function(event) { + const modal = document.getElementById('video-modal'); + if (event.target === modal) { + closeModal(); + } +} + +// Analyze video +function analyzeVideo(videoId) { + if (!confirm('确定要分析这个视频吗?这可能需要一些时间。')) { + return; + } + + // Show loading message + const loadingMsg = document.createElement('div'); + loadingMsg.id = 'analysis-loading'; + loadingMsg.style.cssText = 'position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: white; padding: 20px; border-radius: 8px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); z-index: 10000;'; + loadingMsg.innerHTML = '

正在分析视频,请稍候...

'; + document.body.appendChild(loadingMsg); + + fetch(`${API_BASE}/${videoId}/analyze`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({}) + }) + .then(response => response.json()) + .then(data => { + // Remove loading message + const loadingEl = document.getElementById('analysis-loading'); + if (loadingEl) { + loadingEl.remove(); + } + + if (data.success) { + // Refresh video list first + loadVideos(); + // Then automatically open video details to show the analysis + setTimeout(() => { + viewVideoDetails(videoId); + }, 500); + } else { + alert(data.message || '分析失败'); + } + }) + .catch(error => { + // Remove loading message + const loadingEl = document.getElementById('analysis-loading'); + if (loadingEl) { + loadingEl.remove(); + } + alert(`分析失败: ${error.message}`); + }); +} + +// Summarize video +function summarizeVideo(videoId) { + if (!confirm('确定要生成视频总结吗?这可能需要一些时间。')) { + return; + } + + // Show loading message + const loadingMsg = document.createElement('div'); + loadingMsg.id = 'summary-loading'; + loadingMsg.style.cssText = 'position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: white; padding: 20px; border-radius: 8px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); z-index: 10000;'; + loadingMsg.innerHTML = '

正在生成视频总结,请稍候...

'; + document.body.appendChild(loadingMsg); + + fetch(`${API_BASE}/${videoId}/summarize`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({}) + }) + .then(response => response.json()) + .then(data => { + // Remove loading message + const loadingEl = document.getElementById('summary-loading'); + if (loadingEl) { + loadingEl.remove(); + } + + if (data.success) { + // Refresh video list first + loadVideos(); + // Then automatically open video details to show the summary + setTimeout(() => { + viewVideoDetails(videoId); + }, 500); + } else { + alert(data.message || '总结生成失败'); + } + }) + .catch(error => { + // Remove loading message + const loadingEl = document.getElementById('summary-loading'); + if (loadingEl) { + loadingEl.remove(); + } + alert(`总结生成失败: ${error.message}`); + }); +} + +// Compare videos +function loadVideosForCompare() { + const compareList = document.getElementById('compare-video-list'); + compareList.innerHTML = '

加载中...

'; + + fetch(`${API_BASE}`) + .then(response => response.json()) + .then(data => { + if (data.success && data.data.length > 0) { + compareList.innerHTML = ''; + data.data.forEach(video => { + const checkbox = document.createElement('div'); + checkbox.className = 'video-checkbox-item'; + checkbox.innerHTML = ` + + + `; + compareList.appendChild(checkbox); + }); + } else { + compareList.innerHTML = '

暂无视频,请先上传视频

'; + } + }) + .catch(error => { + compareList.innerHTML = `

加载失败: ${error.message}

`; + }); +} + +function updateCompareButton() { + const checked = document.querySelectorAll('#compare-video-list input[type="checkbox"]:checked'); + const compareBtn = document.getElementById('compare-btn'); + compareBtn.disabled = checked.length < 2; +} + +function compareVideos() { + const checked = document.querySelectorAll('#compare-video-list input[type="checkbox"]:checked'); + if (checked.length < 2) { + alert('请至少选择2个视频进行对比'); + return; + } + + if (!confirm(`确定要对比这 ${checked.length} 个视频吗?这可能需要一些时间。`)) { + return; + } + + const videoIds = Array.from(checked).map(cb => cb.value); + const resultDiv = document.getElementById('compare-result'); + resultDiv.innerHTML = '

对比中,请稍候...

'; + resultDiv.className = 'result-message'; + resultDiv.style.display = 'block'; + + fetch(`${API_BASE}/compare`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ video_ids: videoIds }) + }) + .then(response => response.json()) + .then(data => { + if (data.success) { + resultDiv.className = 'result-message success'; + resultDiv.innerHTML = ` +

对比结果

+
${data.data.comparison_result}
+ `; + } else { + resultDiv.className = 'result-message error'; + resultDiv.textContent = data.message || '对比失败'; + } + }) + .catch(error => { + resultDiv.className = 'result-message error'; + resultDiv.textContent = `对比失败: ${error.message}`; + }); +} + +function showResult(elementId, message, type) { + const element = document.getElementById(elementId); + element.textContent = message; + element.className = `result-message ${type}`; + element.style.display = 'block'; +} + +// Initialize +document.addEventListener('DOMContentLoaded', () => { + loadVideos(); +}); + diff --git a/static/index.html b/static/index.html new file mode 100644 index 0000000..7ff201b --- /dev/null +++ b/static/index.html @@ -0,0 +1,81 @@ + + + + + + 视频分析与总结系统 + + + +
+
+

视频分析与总结系统

+
+ + + + +
+
+

上传视频

+
+ +
+

点击或拖拽视频文件到此处上传

+ +
+ +
+
+
+
+ + +
+
+

视频列表

+ +
+

加载中...

+
+
+
+ + +
+
+

视频对比

+
+
+ +
+
+ +
+
+
+
+
+ + + + + + + + diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..3fed91c --- /dev/null +++ b/static/style.css @@ -0,0 +1,382 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + min-height: 100vh; + padding: 20px; +} + +.container { + max-width: 1200px; + margin: 0 auto; + background: white; + border-radius: 12px; + box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2); + overflow: hidden; +} + +header { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + color: white; + padding: 30px; + text-align: center; +} + +header h1 { + font-size: 2.5em; + font-weight: 600; +} + +.tabs { + display: flex; + background: #f5f5f5; + border-bottom: 2px solid #e0e0e0; +} + +.tab-btn { + flex: 1; + padding: 15px 20px; + background: none; + border: none; + cursor: pointer; + font-size: 16px; + font-weight: 500; + color: #666; + transition: all 0.3s; +} + +.tab-btn:hover { + background: #e8e8e8; + color: #333; +} + +.tab-btn.active { + background: white; + color: #667eea; + border-bottom: 3px solid #667eea; +} + +.tab-content { + display: none; + padding: 30px; +} + +.tab-content.active { + display: block; +} + +.upload-section, .list-section, .compare-section { + max-width: 800px; + margin: 0 auto; +} + +h2 { + margin-bottom: 20px; + color: #333; + font-size: 1.8em; +} + +.upload-area { + border: 3px dashed #667eea; + border-radius: 8px; + padding: 40px; + text-align: center; + background: #f9f9f9; + transition: all 0.3s; + cursor: pointer; +} + +.upload-area:hover { + border-color: #764ba2; + background: #f0f0f0; +} + +.upload-placeholder p { + margin-bottom: 20px; + color: #666; + font-size: 16px; +} + +.btn { + padding: 12px 24px; + border: none; + border-radius: 6px; + font-size: 16px; + font-weight: 500; + cursor: pointer; + transition: all 0.3s; +} + +.btn-primary { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + color: white; +} + +.btn-primary:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4); +} + +.btn-secondary { + background: #6c757d; + color: white; + margin-bottom: 20px; +} + +.btn-secondary:hover { + background: #5a6268; +} + +.btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.upload-progress { + margin-top: 20px; +} + +.progress-bar { + width: 100%; + height: 30px; + background: #e0e0e0; + border-radius: 15px; + overflow: hidden; + margin-bottom: 10px; +} + +.progress-fill { + height: 100%; + background: linear-gradient(90deg, #667eea 0%, #764ba2 100%); + width: 0%; + transition: width 0.3s; + border-radius: 15px; +} + +.result-message { + margin-top: 20px; + padding: 15px; + border-radius: 6px; + display: none; +} + +.result-message.success { + background: #d4edda; + color: #155724; + border: 1px solid #c3e6cb; + display: block; +} + +.result-message.error { + background: #f8d7da; + color: #721c24; + border: 1px solid #f5c6cb; + display: block; +} + +.video-list { + margin-top: 20px; +} + +.video-item { + background: #f8f9fa; + border: 1px solid #e0e0e0; + border-radius: 8px; + padding: 20px; + margin-bottom: 15px; + transition: all 0.3s; +} + +.video-item:hover { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + transform: translateY(-2px); +} + +.video-item-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 10px; +} + +.video-item-title { + font-size: 18px; + font-weight: 600; + color: #333; +} + +.video-item-meta { + color: #666; + font-size: 14px; + margin-bottom: 10px; +} + +.video-item-actions { + display: flex; + gap: 10px; + margin-top: 15px; +} + +.btn-small { + padding: 8px 16px; + font-size: 14px; +} + +.btn-info { + background: #17a2b8; + color: white; +} + +.btn-info:hover { + background: #138496; +} + +.btn-success { + background: #28a745; + color: white; +} + +.btn-success:hover { + background: #218838; +} + +.loading { + text-align: center; + padding: 40px; + color: #666; +} + +.compare-controls { + margin-bottom: 30px; +} + +.video-selector { + margin-bottom: 20px; +} + +.video-selector label { + display: block; + margin-bottom: 10px; + font-weight: 500; + color: #333; +} + +.video-checkboxes { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + gap: 10px; + max-height: 300px; + overflow-y: auto; + padding: 15px; + background: #f8f9fa; + border-radius: 6px; +} + +.video-checkbox-item { + display: flex; + align-items: center; + padding: 10px; + background: white; + border-radius: 4px; + border: 1px solid #e0e0e0; +} + +.video-checkbox-item input[type="checkbox"] { + margin-right: 10px; + width: 18px; + height: 18px; + cursor: pointer; +} + +.compare-result-content { + background: #f8f9fa; + padding: 20px; + border-radius: 6px; + margin-top: 20px; + white-space: pre-wrap; + line-height: 1.6; +} + +/* Modal */ +.modal { + display: none; + position: fixed; + z-index: 1000; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + overflow: auto; +} + +.modal-content { + background-color: white; + margin: 5% auto; + padding: 30px; + border-radius: 12px; + width: 90%; + max-width: 800px; + max-height: 80vh; + overflow-y: auto; + position: relative; +} + +.close { + color: #aaa; + float: right; + font-size: 28px; + font-weight: bold; + cursor: pointer; + position: absolute; + right: 20px; + top: 20px; +} + +.close:hover { + color: #000; +} + +.modal-body { + margin-top: 20px; +} + +.detail-section { + margin-bottom: 20px; +} + +.detail-section h3 { + color: #667eea; + margin-bottom: 10px; +} + +.detail-section p { + color: #666; + line-height: 1.6; +} + +@media (max-width: 768px) { + header h1 { + font-size: 1.8em; + } + + .tab-btn { + font-size: 14px; + padding: 12px 10px; + } + + .upload-area { + padding: 20px; + } + + .video-item-header { + flex-direction: column; + align-items: flex-start; + } +} + diff --git a/uploads/.gitkeep b/uploads/.gitkeep new file mode 100644 index 0000000..98969b0 --- /dev/null +++ b/uploads/.gitkeep @@ -0,0 +1,2 @@ +# This file keeps the uploads directory in git +