From 4b242590aa11f3b14006007eb505092ada9d60d3 Mon Sep 17 00:00:00 2001 From: Paul Payne Date: Fri, 22 Aug 2025 14:53:05 -0700 Subject: [PATCH 1/5] Put KTA on project for a deploy. --- .../.cspell/custom-dictionary-workspace.txt | 1 + .../project-assistant/.vscode/settings.json | 10 +- assistants/project-assistant/CLAUDE.md | 192 ++- assistants/project-assistant/README.md | 205 ++- .../assistant/agentic/__init__.py | 25 + .../assistant/agentic/act.py | 214 +++ .../agentic/coordinator_next_action.py | 115 ++ .../assistant/agentic/create_invitation.py | 91 ++ .../agentic/detect_audience_and_takeaways.py | 113 ++ .../agentic/detect_coordinator_actions.py | 109 ++ .../detect_information_request_needs.py} | 70 +- .../agentic/detect_knowledge_package_gaps.py | 132 ++ .../assistant/agentic/focus.py | 98 ++ .../assistant/agentic/respond.py | 435 ++++++ .../assistant/agentic/team_welcome.py | 112 ++ .../assistant/agentic/update_digest.py | 101 ++ ...ansfer.svg => icon-knowledge-transfer.svg} | 0 .../project-assistant/assistant/assistant.py | 605 +++++--- .../assistant/command_processor.py | 1126 -------------- .../project-assistant/assistant/common.py | 41 + .../project-assistant/assistant/config.py | 179 +-- .../assistant/conversation_clients.py | 25 +- .../assistant/conversation_project_link.py | 131 -- .../project-assistant/assistant/data.py | 274 ++++ .../assistant/domain/__init__.py | 25 + .../assistant/domain/audience_manager.py | 59 + .../conversation_preferences_manager.py | 54 + .../domain/information_request_manager.py | 212 +++ .../domain/knowledge_brief_manager.py | 62 + .../domain/knowledge_digest_manager.py | 69 + .../domain/learning_objectives_manager.py | 406 ++++++ .../assistant/domain/share_manager.py | 395 +++++ .../assistant/domain/tasks_manager.py | 56 + .../assistant/domain/transfer_manager.py | 34 + .../project-assistant/assistant/errors.py | 21 + .../assistant/{project_files.py => files.py} | 240 +-- .../project-assistant/assistant/logging.py | 48 +- .../assistant/notifications.py | 179 +++ .../assistant/project_common.py | 80 - .../assistant/project_data.py | 344 ----- .../assistant/project_manager.py | 1296 ----------------- .../assistant/project_notifications.py | 224 --- .../assistant/project_storage.py | 373 ----- .../assistant/project_storage_models.py | 43 - .../assistant/prompt_utils.py | 487 +++++++ .../project-assistant/assistant/respond.py | 614 -------- .../assistant/state_inspector.py | 311 ---- .../project-assistant/assistant/storage.py | 356 +++++ .../assistant/string_utils.py | 141 +- .../assistant/team_welcome.py | 126 -- .../text_includes/actor_instructions.md | 61 + .../assistant/text_includes/assistant_info.md | 42 + .../assistant/text_includes/card_content.md | 10 +- .../coordinator_instructions copy.md | 111 ++ .../text_includes/coordinator_instructions.md | 48 + .../coordinator_instructions.txt | 22 - .../text_includes/coordinator_role.txt | 12 - .../text_includes/create_invitation.md | 10 + .../text_includes/detect_audience.md | 19 + .../detect_coordinator_actions.md | 9 + .../detect_information_request_needs.md | 29 + .../detect_knowledge_package_gaps.md | 16 + .../assistant/text_includes/focus.md | 41 + .../knowledge_digest_instructions.txt | 10 + .../text_includes/project_assistant_info.md | 67 - .../project_information_request_detection.txt | 32 - .../text_includes/team_instructions.txt | 67 +- .../assistant/text_includes/team_role.txt | 10 - .../assistant/text_includes/to_do.md | 175 +++ .../text_includes/update_knowledge_brief.md | 1 + .../text_includes/update_knowledge_digest.md | 29 + .../welcome_message_generation.txt | 16 +- .../text_includes/whiteboard_instructions.txt | 15 - .../text_includes/whiteboard_prompt.txt | 21 - .../project-assistant/assistant/tools.py | 1176 --------------- .../assistant/tools/__init__.py | 147 ++ .../project-assistant/assistant/tools/base.py | 19 + .../tools/conversation_preferences.py | 30 + .../assistant/tools/information_requests.py | 165 +++ .../assistant/tools/learning_objectives.py | 105 ++ .../assistant/tools/learning_outcomes.py | 232 +++ .../assistant/tools/progress_tracking.py | 88 ++ .../assistant/tools/share_setup.py | 158 ++ .../assistant/tools/system_reminders.py | 1 + .../assistant/tools/tasks.py | 89 ++ .../project-assistant/assistant/tools/todo.py | 61 + .../assistant/ui_tabs/__init__.py | 11 + .../assistant/ui_tabs/brief.py | 121 ++ .../assistant/ui_tabs/common.py | 91 ++ .../assistant/ui_tabs/debug.py | 114 ++ .../assistant/ui_tabs/learning.py | 158 ++ .../assistant/ui_tabs/sharing.py | 167 +++ .../project-assistant/assistant/utils.py | 64 +- .../docs/ASSISTANT_LIBRARY_NOTES.md | 94 -- assistants/project-assistant/docs/DESIGN.md | 259 ---- assistants/project-assistant/docs/JTBD.md | 286 ++++ .../project-assistant/docs/WORKBENCH_NOTES.md | 474 ------ .../docs/design/PXL_20250814_190140267.jpg | Bin 0 -> 1162121 bytes .../project-assistant/docs/design/actions.md | 9 + .../docs/design/control_options.md | 52 + .../project-assistant/docs/design/design.md | 131 ++ .../docs/design/inference.md | 53 + .../project-assistant/docs/how-kta-works.md | 61 + .../docs/knowledge-transfer-goals.md | 32 + .../docs/learning_assistance.md | 8 + .../CLAUDE_PROMPTS.md | 4 + .../transfer_state.md | 231 +++ .../opportunities-of-knowledge-transfer.md | 43 + ...owledge-transfer-assistant.code-workspace} | 17 +- assistants/project-assistant/pyproject.toml | 23 +- .../project-assistant/test_inspector.py | 56 - .../tests/test_artifact_loading.py | 107 +- .../project-assistant/tests/test_inspector.py | 73 + .../tests/test_project_manager.py | 214 --- .../tests/test_project_storage.py | 478 ------ .../tests/test_share_manager.py | 295 ++++ .../tests/test_share_storage.py | 484 ++++++ ...t_project_tools.py => test_share_tools.py} | 223 ++- .../project-assistant/tests/test_team_mode.py | 98 +- assistants/project-assistant/uv.lock | 4 - 120 files changed, 9674 insertions(+), 8664 deletions(-) create mode 100644 assistants/project-assistant/.cspell/custom-dictionary-workspace.txt create mode 100644 assistants/project-assistant/assistant/agentic/__init__.py create mode 100644 assistants/project-assistant/assistant/agentic/act.py create mode 100644 assistants/project-assistant/assistant/agentic/coordinator_next_action.py create mode 100644 assistants/project-assistant/assistant/agentic/create_invitation.py create mode 100644 assistants/project-assistant/assistant/agentic/detect_audience_and_takeaways.py create mode 100644 assistants/project-assistant/assistant/agentic/detect_coordinator_actions.py rename assistants/project-assistant/assistant/{project_analysis.py => agentic/detect_information_request_needs.py} (62%) create mode 100644 assistants/project-assistant/assistant/agentic/detect_knowledge_package_gaps.py create mode 100644 assistants/project-assistant/assistant/agentic/focus.py create mode 100644 assistants/project-assistant/assistant/agentic/respond.py create mode 100644 assistants/project-assistant/assistant/agentic/team_welcome.py create mode 100644 assistants/project-assistant/assistant/agentic/update_digest.py rename assistants/project-assistant/assistant/assets/{icon_context_transfer.svg => icon-knowledge-transfer.svg} (100%) delete mode 100644 assistants/project-assistant/assistant/command_processor.py create mode 100644 assistants/project-assistant/assistant/common.py delete mode 100644 assistants/project-assistant/assistant/conversation_project_link.py create mode 100644 assistants/project-assistant/assistant/data.py create mode 100644 assistants/project-assistant/assistant/domain/__init__.py create mode 100644 assistants/project-assistant/assistant/domain/audience_manager.py create mode 100644 assistants/project-assistant/assistant/domain/conversation_preferences_manager.py create mode 100644 assistants/project-assistant/assistant/domain/information_request_manager.py create mode 100644 assistants/project-assistant/assistant/domain/knowledge_brief_manager.py create mode 100644 assistants/project-assistant/assistant/domain/knowledge_digest_manager.py create mode 100644 assistants/project-assistant/assistant/domain/learning_objectives_manager.py create mode 100644 assistants/project-assistant/assistant/domain/share_manager.py create mode 100644 assistants/project-assistant/assistant/domain/tasks_manager.py create mode 100644 assistants/project-assistant/assistant/domain/transfer_manager.py create mode 100644 assistants/project-assistant/assistant/errors.py rename assistants/project-assistant/assistant/{project_files.py => files.py} (70%) create mode 100644 assistants/project-assistant/assistant/notifications.py delete mode 100644 assistants/project-assistant/assistant/project_common.py delete mode 100644 assistants/project-assistant/assistant/project_data.py delete mode 100644 assistants/project-assistant/assistant/project_manager.py delete mode 100644 assistants/project-assistant/assistant/project_notifications.py delete mode 100644 assistants/project-assistant/assistant/project_storage.py delete mode 100644 assistants/project-assistant/assistant/project_storage_models.py create mode 100644 assistants/project-assistant/assistant/prompt_utils.py delete mode 100644 assistants/project-assistant/assistant/respond.py delete mode 100644 assistants/project-assistant/assistant/state_inspector.py create mode 100644 assistants/project-assistant/assistant/storage.py delete mode 100644 assistants/project-assistant/assistant/team_welcome.py create mode 100644 assistants/project-assistant/assistant/text_includes/actor_instructions.md create mode 100644 assistants/project-assistant/assistant/text_includes/assistant_info.md create mode 100644 assistants/project-assistant/assistant/text_includes/coordinator_instructions copy.md create mode 100644 assistants/project-assistant/assistant/text_includes/coordinator_instructions.md delete mode 100644 assistants/project-assistant/assistant/text_includes/coordinator_instructions.txt delete mode 100644 assistants/project-assistant/assistant/text_includes/coordinator_role.txt create mode 100644 assistants/project-assistant/assistant/text_includes/create_invitation.md create mode 100644 assistants/project-assistant/assistant/text_includes/detect_audience.md create mode 100644 assistants/project-assistant/assistant/text_includes/detect_coordinator_actions.md create mode 100644 assistants/project-assistant/assistant/text_includes/detect_information_request_needs.md create mode 100644 assistants/project-assistant/assistant/text_includes/detect_knowledge_package_gaps.md create mode 100644 assistants/project-assistant/assistant/text_includes/focus.md create mode 100644 assistants/project-assistant/assistant/text_includes/knowledge_digest_instructions.txt delete mode 100644 assistants/project-assistant/assistant/text_includes/project_assistant_info.md delete mode 100644 assistants/project-assistant/assistant/text_includes/project_information_request_detection.txt delete mode 100644 assistants/project-assistant/assistant/text_includes/team_role.txt create mode 100644 assistants/project-assistant/assistant/text_includes/to_do.md create mode 100644 assistants/project-assistant/assistant/text_includes/update_knowledge_brief.md create mode 100644 assistants/project-assistant/assistant/text_includes/update_knowledge_digest.md delete mode 100644 assistants/project-assistant/assistant/text_includes/whiteboard_instructions.txt delete mode 100644 assistants/project-assistant/assistant/text_includes/whiteboard_prompt.txt delete mode 100644 assistants/project-assistant/assistant/tools.py create mode 100644 assistants/project-assistant/assistant/tools/__init__.py create mode 100644 assistants/project-assistant/assistant/tools/base.py create mode 100644 assistants/project-assistant/assistant/tools/conversation_preferences.py create mode 100644 assistants/project-assistant/assistant/tools/information_requests.py create mode 100644 assistants/project-assistant/assistant/tools/learning_objectives.py create mode 100644 assistants/project-assistant/assistant/tools/learning_outcomes.py create mode 100644 assistants/project-assistant/assistant/tools/progress_tracking.py create mode 100644 assistants/project-assistant/assistant/tools/share_setup.py create mode 100644 assistants/project-assistant/assistant/tools/system_reminders.py create mode 100644 assistants/project-assistant/assistant/tools/tasks.py create mode 100644 assistants/project-assistant/assistant/tools/todo.py create mode 100644 assistants/project-assistant/assistant/ui_tabs/__init__.py create mode 100644 assistants/project-assistant/assistant/ui_tabs/brief.py create mode 100644 assistants/project-assistant/assistant/ui_tabs/common.py create mode 100644 assistants/project-assistant/assistant/ui_tabs/debug.py create mode 100644 assistants/project-assistant/assistant/ui_tabs/learning.py create mode 100644 assistants/project-assistant/assistant/ui_tabs/sharing.py delete mode 100644 assistants/project-assistant/docs/ASSISTANT_LIBRARY_NOTES.md delete mode 100644 assistants/project-assistant/docs/DESIGN.md create mode 100644 assistants/project-assistant/docs/JTBD.md delete mode 100644 assistants/project-assistant/docs/WORKBENCH_NOTES.md create mode 100644 assistants/project-assistant/docs/design/PXL_20250814_190140267.jpg create mode 100644 assistants/project-assistant/docs/design/actions.md create mode 100644 assistants/project-assistant/docs/design/control_options.md create mode 100644 assistants/project-assistant/docs/design/design.md create mode 100644 assistants/project-assistant/docs/design/inference.md create mode 100644 assistants/project-assistant/docs/how-kta-works.md create mode 100644 assistants/project-assistant/docs/knowledge-transfer-goals.md create mode 100644 assistants/project-assistant/docs/learning_assistance.md rename assistants/project-assistant/docs/{ => notable_claude_conversations}/CLAUDE_PROMPTS.md (76%) create mode 100644 assistants/project-assistant/docs/notable_claude_conversations/transfer_state.md create mode 100644 assistants/project-assistant/docs/opportunities-of-knowledge-transfer.md rename assistants/project-assistant/{project-assistant.code-workspace => knowledge-transfer-assistant.code-workspace} (81%) delete mode 100644 assistants/project-assistant/test_inspector.py create mode 100644 assistants/project-assistant/tests/test_inspector.py delete mode 100644 assistants/project-assistant/tests/test_project_manager.py delete mode 100644 assistants/project-assistant/tests/test_project_storage.py create mode 100644 assistants/project-assistant/tests/test_share_manager.py create mode 100644 assistants/project-assistant/tests/test_share_storage.py rename assistants/project-assistant/tests/{test_project_tools.py => test_share_tools.py} (56%) diff --git a/assistants/project-assistant/.cspell/custom-dictionary-workspace.txt b/assistants/project-assistant/.cspell/custom-dictionary-workspace.txt new file mode 100644 index 000000000..255951c23 --- /dev/null +++ b/assistants/project-assistant/.cspell/custom-dictionary-workspace.txt @@ -0,0 +1 @@ +agentic diff --git a/assistants/project-assistant/.vscode/settings.json b/assistants/project-assistant/.vscode/settings.json index 39a26c721..c9cf50d36 100644 --- a/assistants/project-assistant/.vscode/settings.json +++ b/assistants/project-assistant/.vscode/settings.json @@ -26,7 +26,6 @@ "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true }, - "python.analysis.autoFormatStrings": true, "python.analysis.autoImportCompletions": true, "python.analysis.diagnosticMode": "workspace", "python.analysis.fixAll": ["source.unusedImports"], @@ -42,7 +41,6 @@ "source.formatDocument": "explicit" } }, - "ruff.nativeServer": "on", "search.exclude": { "**/.venv": true, "**/.data": true, @@ -58,6 +56,10 @@ "uv.lock" ], "cSpell.words": [ + "addopts", + "agentic", + "asctime", + "asyncio", "Codespaces", "contentsafety", "debugpy", @@ -68,13 +70,16 @@ "Excalidraw", "fastapi", "GIPHY", + "insightfully", "jsonschema", "Langchain", + "levelname", "modelcontextprotocol", "moderations", "mzxrai", "openai", "pdfplumber", + "pycache", "pydantic", "pyproject", "pyright", @@ -83,6 +88,7 @@ "semanticworkbenchteam", "tiktoken", "updown", + "venv", "virtualenvs", "webresearch" ] diff --git a/assistants/project-assistant/CLAUDE.md b/assistants/project-assistant/CLAUDE.md index b68114c61..d35027dd4 100644 --- a/assistants/project-assistant/CLAUDE.md +++ b/assistants/project-assistant/CLAUDE.md @@ -2,28 +2,170 @@ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. -# Semantic Workbench Developer Guidelines - -## Common Commands -* Build/Install: `make install` (recursive for all subdirectories) -* Format: `make format` (runs ruff formatter) -* Lint: `make lint` (runs ruff linter) -* Type-check: `make type-check` (runs pyright) -* Test: `make test` (runs pytest) -* Single test: `uv run pytest tests/test_file.py::test_function -v` - -## Code Style -### Python -* Indentation: 4 spaces -* Line length: 120 characters -* Imports: stdlib → third-party → local, alphabetized within groups -* Naming: `snake_case` for functions/variables, `CamelCase` for classes, `UPPER_SNAKE_CASE` for constants -* Types: Use type annotations consistently; prefer Union syntax (`str | None`) for Python 3.10+ -* Documentation: Triple-quote docstrings with param/return descriptions - -## Tools -* Python: Uses uv for environment/dependency management -* Linting/Formatting: Ruff (Python) -* Type checking: Pyright (Python) -* Testing: pytest (Python) -* Package management: uv (Python)Ok. \ No newline at end of file +# Knowledge Transfer Assistant + +A sophisticated dual-mode assistant that facilitates collaborative knowledge sharing between Coordinators (knowledge creators) and Team members (knowledge receivers) within the Semantic Workbench platform. + +## Core Architecture + +### Dual-Mode Operation +The assistant operates in two distinct modes with role-specific capabilities: + +1. **Coordinator Mode**: Creates and manages knowledge packages, responds to information requests, shares files +2. **Team Mode**: Accesses shared knowledge, requests information, tracks learning progress + +### Cross-Conversation Communication +The system manages three types of conversations: +- **Coordinator Conversation**: Personal workspace for knowledge creation +- **Shareable Team Conversation**: Template conversation (never directly used) +- **Team Conversation(s)**: Individual conversations for each team member + +### Key Components + +- **Knowledge Transfer Manager** (`assistant/domain/`): Orchestrates the entire knowledge transfer lifecycle +- **Share Manager** (`assistant/files.py`): Handles file synchronization across conversations +- **Storage System** (`assistant/storage.py`, `assistant/storage_models.py`): Persistent state management +- **UI Tabs** (`assistant/ui-tabs/`): Real-time visual dashboards showing transfer status +- **Notification System** (`assistant/notifications.py`): Cross-conversation communication + +### Core Artifacts +- **Knowledge Brief**: Introductory overview for team members +- **Knowledge Digest**: Auto-updating LLM-generated information repository +- **Learning Objectives**: Structured goals with specific outcomes +- **Information Requests**: Team member questions with priority levels + +## Development Commands + +### Basic Operations +```bash +# Install dependencies +make install + +# Run all tests +make test + +# Run specific test with verbose output +uv run pytest tests/test_file.py::test_function -v + +# Manual inspector test +python tests/test_inspector.py + +# Type checking +make type-check + +# Code quality +make lint +make format +``` + +### Assistant Management +```bash +# Start assistant service +make start + +# Docker operations +make docker-build +make docker-run-local +``` + +## Project Structure + +### Core Implementation (`/assistant/`) +- `assistant.py`: Main assistant with dual-role event handling +- `config.py`: Role-specific prompt templates and configuration +- `storage.py` & `storage_models.py`: Persistent state management +- `conversation_share_link.py`: Cross-conversation linking and synchronization +- `files.py`: File synchronization via ShareFilesManager +- `respond.py`: Response generation logic +- `common.py`: Role detection and common utilities + +### Agentic (`/assistant/agentic/`) +- `team_welcome.py`: Team welcome message generation +- `coordinator_support.py`: Coordinator guidance and support +- `analysis.py`: Analysis functionality + +### Domain Logic (`/assistant/domain/`) +- `share_manager.py`: Share creation, joining, and cross-conversation coordination (`ShareManager` class) +- `knowledge_brief_manager.py`: Brief creation and management (`KnowledgeBriefManager` class) +- `knowledge_digest_manager.py`: Auto-updating digest system (`KnowledgeDigestManager` class) +- `learning_objectives_manager.py`: Learning goal tracking (`LearningObjectivesManager` class) +- `information_request_manager.py`: Team question handling (`InformationRequestManager` class) +- `audience_manager.py`: Audience definition and management (`AudienceManager` class) + +### Tools (`/assistant/tools/`) +- `information_requests.py`: Information request handling +- `learning_objectives.py`: Learning objective management +- `learning_outcomes.py`: Outcome tracking +- `progress_tracking.py`: Transfer progress monitoring +- `share_setup.py`: Share link creation + +### UI Tabs (`/assistant/ui-tabs/`) +- `brief.py`: Knowledge transfer status dashboard +- `learning.py`: Learning objectives tracking +- `sharing.py`: Sharing status monitoring +- `debug.py`: Debug information panel + +### Configuration (`/assistant/text_includes/`) +Role-specific prompts and instruction templates: +- `coordinator_role.txt` & `coordinator_instructions.txt`: Coordinator mode configuration +- `team_role.txt` & `team_instructions.txt`: Team mode configuration +- `knowledge_digest_prompt.txt`: LLM prompts for digest generation + +## Key Dependencies + +- `semantic-workbench-assistant`: Core assistant framework +- `assistant-extensions[attachments]`: File attachment support with dashboard cards +- `content-safety`: Content moderation capabilities +- `openai-client`: LLM integration for knowledge digest generation + +## Development Guidelines + +### Code Philosophy +The project follows a "wabi-sabi" philosophy emphasizing: +- Ruthless simplicity with minimal abstractions +- Present-moment focus rather than future-proofing +- Trust in emergence from simple, well-defined components +- Direct library integration with minimal wrappers + +### Code Style +- Use 4 spaces for indentation +- Maximum line length: 120 characters +- Follow PEP 8 naming conventions +- Use type annotations consistently +- Write docstrings for functions and classes + +### Quality Assurance +Always run the full quality check before submitting changes: +```bash +make lint && make type-check && make test +``` + +### Important Development Notes +- Use `uv` for all Python script execution to ensure correct environment +- Keep ConversationRole enum consistent across all files +- Use Optional typing for parameters that might be None +- Update tests when changing functionality - never skip or remove tests +- Access logs in `.data/logs/` directory (timestamped, latest sorted last) +- Never make git commits - leave that to QA review process + +## Testing + +The test suite covers: +- Artifact loading and management (`test_artifact_loading.py`) +- Inspector functionality (`test_inspector.py`) +- File sharing and synchronization (`test_share_manager.py`) +- Storage system operations (`test_share_storage.py`) +- Tool functionality (`test_share_tools.py`) +- Team mode operations (`test_team_mode.py`) + +Run tests with: +```bash +# All tests +make test + +# Specific test file +uv run pytest tests/test_share_manager.py -v + +# Single test function +uv run pytest tests/test_share_manager.py::test_file_sync -v +``` \ No newline at end of file diff --git a/assistants/project-assistant/README.md b/assistants/project-assistant/README.md index 2b63e2813..99e93b653 100644 --- a/assistants/project-assistant/README.md +++ b/assistants/project-assistant/README.md @@ -1,52 +1,62 @@ -# Project Assistant +# Knowledge Transfer Assistant -A dual-mode context transfer system that facilitates collaborative projects between Coordinators and Team members in the Semantic Workbench. +A dual-mode context transfer system that facilitates collaborative knowledge sharing between Coordinators and Team members in the Semantic Workbench. ## Overview -The Project Assistant is designed to bridge the information gap between project Coordinators and Team members by providing a structured communication system with shared artifacts, real-time updates, and bidirectional information flow. It enables: +The Knowledge Transfer Assistant is designed to bridge the information gap between Coordinators and Team members by providing a structured communication system with shared artifacts, real-time updates, and bidirectional information flow. It enables: -- **Project Definition**: Coordinators can create detailed project briefs with goals and success criteria -- **Information Sharing**: Knowledge transfer between separate conversations -- **Information Requests**: Team members can request information or assistance from Coordinators -- **Progress Tracking**: Real-time project dashboard updates and completion criteria -- **Inspector Panel**: Visual dashboard showing project state and progress +- **Knowledge Organization**: Coordinators can structure and organize complex information for sharing +- **Dual-Mode Operation**: Single assistant with context-aware Coordinator and Team modes +- **Information Sharing**: Knowledge transfer between separate conversations with automatic synchronization +- **Information Requests**: Bidirectional communication system for team member questions +- **Progress Tracking**: Real-time knowledge transfer dashboard updates and completion tracking +- **Inspector Panels**: Multiple specialized visual dashboards showing knowledge transfer state, learning objectives, and debug information + +## Terminology + +- **share**: The space enveloping all of the coordinator and team data. +- **knowledge package**: The information to be transferred from the coordinator(s) to team. +- **knowledge transfer**: The process of transferring knowledge from the coordinator(s) to team. +- **assistant mode**: Whether the assistant is currently in helping-coordinator or helping-team-member mode. ## Key Features -### Conversation Types and Dual Mode Operation +### Conversation Types and Dual Mode Operation -The Project Assistant creates and manages three distinct types of conversations: +The Knowledge Transfer Assistant creates and manages three distinct types of conversations: -1. **Coordinator Conversation**: The personal conversation used by the project coordinator/owner to create and manage the project. +1. **Coordinator Conversation**: The personal conversation used by the knowledge transfer coordinator/owner to create and manage the knowledge base. 2. **Shareable Team Conversation**: A template conversation that's automatically created along with a share URL. This conversation is never directly used - it serves as the template for creating individual team conversations when users click the share link. -3. **Team Conversation(s)**: Individual conversations for team members, created when they redeem the share URL. Each team member gets their own personal conversation connected to the project. +3. **Team Conversation(s)**: Individual conversations for team members, created when they redeem the share URL. Each team member gets their own personal conversation connected to the knowledge transfer. The assistant operates in two distinct modes with different capabilities: -1. **Coordinator Mode (Planning Stage)** - - Create project briefs with clear goals and success criteria - - Maintain an auto-updating project whiteboard with critical information +1. **Coordinator Mode** + - Create and organize knowledge briefs with learning objectives + - Maintain an auto-updating knowledge digest with critical information - Provide guidance and respond to information requests - - Control the "Ready for Working" milestone when project definition is complete + - Share files and context with team members + - Manage knowledge transfer completion tracking -2. **Team Mode (Working Stage)** - - Access project brief and project whiteboard - - Mark success criteria as completed - - Log requests for information or assistance from Coordinators - - Update project dashboard with progress information - - Report project completion when all criteria are met +2. **Team Mode** + - Access knowledge brief and knowledge digest + - Request information or assistance from Coordinators + - Update knowledge transfer status with progress information + - Synchronize shared files from the coordinator + - Explore knowledge share context and learning objectives ### Key Artifacts -The system manages several core artifacts that support project operations: +The system manages several core artifacts that support knowledge transfer operations: -- **Project Brief**: Details project goals and success criteria -- **Project Whiteboard**: Dynamically updated information repository that captures key project context -- **Information Requests**: Documented information needs from Team members -- **Project Dashboard**: Real-time progress tracking and state information +- **Project Brief**: Details knowledge goals and success criteria +- **Knowledge Digest**: Dynamically updated information repository that captures key knowledge share context +- **Learning Objectives**: Structured goals with specific learning outcomes +- **Information Requests**: Documented information needs from Team members with priority levels +- **Project Dashboard**: Real-time progress tracking and state information across multiple inspector panels ### State Management @@ -54,72 +64,80 @@ The assistant uses a multi-layered state management approach: - **Cross-Conversation Linking**: Connects Coordinator and Team conversations - **File Synchronization**: Automatic file sharing between conversations, including when files are uploaded by Coordinators or when team members return to a conversation -- **Inspector Panel**: Real-time visual status dashboard for project progress +- **Inspector Panel**: Real-time visual status dashboard for knowledge transfer progress - **Conversation-Specific Storage**: Each conversation maintains role-specific state ## Usage -### Commands - -#### Common Commands -- `/status` - View current project status and progress -- `/info [brief|whiteboard|requests|all]` - View project information - -#### Coordinator Commands -- `/create-project | ` - Create a new project -- `/add-goal | | [criteria1;criteria2;...]` - Add a project goal -- `/add-kb-section | <content>` - Add whiteboard content manually -- `/ready-for-working` - Mark project as ready for team operations -- `/invite` - Generate project invitation for team members -- `/resolve <request-id> | <resolution>` - Resolve an information request - -#### Team Commands -- `/join <invitation-code>` - Join an existing project -- `/request-info <title> | <description> | [priority]` - Create information request -- `/update-status <status> | <progress> | <message>` - Update project status -- `/complete-criteria <goal-index> <criteria-index>` - Mark criterion as complete -- `/complete-project` - Report project completion ### Workflow 1. **Coordinator Preparation**: - - Create project brief with goals and success criteria - - The project whiteboard automatically updates with key information - - Generate invitation link for team members - - Mark project as ready for working + - Create knowledge brief with learning objectives and outcomes + - The knowledge digest automatically updates with key information from conversations + - Share invitation link with team members + - Upload relevant files for team access + - Define knowledge transfer audience and organize knowledge structure 2. **Team Operations**: - - Join project using invitation link - - Review project brief and whiteboard content - - Execute project tasks and track progress - - Create information requests when information is needed - - Mark criteria as completed when achieved - - Report project completion when all goals are met + - Join the knowledge transfer using invitation link + - Review knowledge brief and knowledge digest content + - Request additional information with priority levels + - Update knowledge transfer status with progress information + - Synchronize files from coordinator automatically 3. **Collaborative Cycle**: - - Coordinator responds to information requests - - Team updates project status with progress - - Both sides can view project status and progress via inspector panel + - Coordinator responds to information requests with detailed resolutions + - Team updates knowledge transfer status with progress tracking + - Both sides can view knowledge transfer status and progress via multiple inspector panels + - Real-time synchronization of knowledge transfer state across all conversations ## Development ### Project Structure - `/assistant/`: Core implementation files - - `chat.py`: Main assistant implementation with event handlers - - `project_tools.py`: Tool functions for the LLM to use - - `state_inspector.py`: Inspector panel implementation - - `project_manager.py`: Project state and artifact management - - `artifact_messaging.py`: Cross-conversation artifact sharing - - `command_processor.py`: Command handling logic + - `assistant.py`: Main assistant implementation with dual-role event handling + - `manager.py`: Project state and artifact management (KnowledgeTransferManager) + - `conversation_share_link.py`: Cross-conversation linking and synchronization + - `storage.py` & `storage_models.py`: Persistent state management + - `config.py`: Role-specific prompt templates and configuration + - `tools.py`: Assistant tools and LLM functions + - `files.py`: File synchronization and management (ShareManager) + - `notifications.py`: Cross-conversation notification system + - `data.py`: Data models for knowledge transfer entities + - `conversation_clients.py`: Conversation client management + - `analysis.py`: Analysis functionality + - `team_welcome.py`: Team welcome message generation + - `utils.py`: General utility functions + - `string_utils.py`: String utility functions + - `common.py`: Common utilities and role detection + - `respond.py`: Response generation + - `logging.py`: Logging configuration + - `inspectors/`: Inspector panel components + - `brief.py`: Brief inspector for knowledge transfer status + - `learning.py`: Learning objectives inspector + - `sharing.py`: Sharing status inspector + - `debug.py`: Debug inspector + - `common.py`: Common inspector utilities + - `text_includes/`: Role-specific prompts and instruction templates + - `assets/`: SVG icons and visual assets - `/docs/`: Documentation files - `DESIGN.md`: System design and architecture - `DEV_GUIDE.md`: Development guidelines + - `JTBD.md`: Jobs-to-be-done analysis - `ASSISTANT_LIBRARY_NOTES.md`: Notes on the assistant library - `WORKBENCH_NOTES.md`: Workbench state management details + - `notable_claude_conversations/`: Archived design conversations -- `/tests/`: Test files covering key functionality +- `/tests/`: Comprehensive test suite + - `test_artifact_loading.py`: Artifact loading and management tests + - `test_inspector.py`: State inspector functionality tests + - `test_share_manager.py`: File sharing and synchronization tests + - `test_share_storage.py`: Storage system tests + - `test_share_tools.py`: Tool functionality tests + - `test_team_mode.py`: Team mode operation tests ### Development Commands @@ -130,21 +148,52 @@ make install # Run tests make test +# Single test with verbose output +uv run pytest tests/test_file.py::test_function -v + +# Manual inspector test +python tests/test_inspector.py + # Type checking make type-check -# Linting +# Linting and formatting make lint -``` +make format -## Architecture +# Docker operations +make docker-build +make docker-run-local -The Project Assistant leverages the Semantic Workbench Assistant library for core functionality and extends it with: +# Start assistant service +make start +``` -1. **Cross-Conversation Communication**: Using the conversation sharing API -2. **Artifact Management**: Structured data models for project information -3. **State Inspection**: Real-time project status dashboard -4. **Tool-based Interaction**: LLM functions for project tasks -5. **Role-Specific Experiences**: Tailored interfaces for Coordinator and Team roles +## Architecture -The system follows a centralized artifact storage model with event-driven updates to keep all conversations synchronized. +The Knowledge Transfer Assistant leverages the Semantic Workbench Assistant library and extends it with: + +### Key Dependencies +- `semantic-workbench-assistant`: Core assistant framework +- `assistant-extensions[attachments]`: File attachment support with dashboard cards +- `content-safety`: Content moderation capabilities +- `openai-client`: LLM integration for knowledge digest generation + +### Architectural Components +1. **Cross-Conversation Communication**: Advanced conversation sharing and synchronization +2. **Artifact Management**: Structured data models for briefs, objectives, and requests +3. **Multi-Panel State Inspection**: Specialized inspector panels for different knowledge transfer aspects +4. **Tool-based Interaction**: Comprehensive LLM functions for knowledge transfer operations +5. **Role-Specific Experiences**: Context-aware interfaces for Coordinator and Team modes +6. **Auto-Updating Knowledge Digest**: LLM-powered automatic extraction of key information +7. **File Synchronization**: Automatic file sharing and synchronization across conversations + +### Design Philosophy +The system follows a **wabi-sabi philosophy** emphasizing: +- Ruthless simplicity with minimal abstractions +- Present-moment focus rather than future-proofing +- Trust in emergence from simple, well-defined components +- Direct library integration with minimal wrappers +- Pragmatic trust in external systems + +The architecture uses a centralized artifact storage model with event-driven updates and real-time UI synchronization to keep all conversations coordinated. diff --git a/assistants/project-assistant/assistant/agentic/__init__.py b/assistants/project-assistant/assistant/agentic/__init__.py new file mode 100644 index 000000000..8c387d466 --- /dev/null +++ b/assistants/project-assistant/assistant/agentic/__init__.py @@ -0,0 +1,25 @@ +from types import SimpleNamespace + +from .act import act +from .coordinator_next_action import get_coordinator_next_action_suggestion +from .create_invitation import create_invitation +from .detect_audience_and_takeaways import detect_audience_and_takeaways +from .detect_coordinator_actions import detect_coordinator_actions +from .detect_information_request_needs import detect_information_request_needs +from .detect_knowledge_package_gaps import detect_knowledge_package_gaps +from .focus import focus +from .team_welcome import generate_team_welcome_message +from .update_digest import update_digest + +agentic = SimpleNamespace( + act=act, + create_invitation=create_invitation, + detect_audience_and_takeaways=detect_audience_and_takeaways, + detect_coordinator_actions=detect_coordinator_actions, + detect_information_request_needs=detect_information_request_needs, + detect_knowledge_package_gaps=detect_knowledge_package_gaps, + focus=focus, + generate_team_welcome_message=generate_team_welcome_message, + get_coordinator_next_action_suggestion=get_coordinator_next_action_suggestion, + update_digest=update_digest, +) diff --git a/assistants/project-assistant/assistant/agentic/act.py b/assistants/project-assistant/assistant/agentic/act.py new file mode 100644 index 000000000..cf3136843 --- /dev/null +++ b/assistants/project-assistant/assistant/agentic/act.py @@ -0,0 +1,214 @@ +from textwrap import dedent +from typing import Any, ClassVar + +import openai_client +from assistant_extensions.attachments import AttachmentsExtension +from openai import BaseModel +from openai_client import num_tokens_from_messages +from openai_client.errors import CompletionError +from openai_client.tools import complete_with_tool_calls +from pydantic import ConfigDict, Field +from semantic_workbench_api_model.workbench_model import ( + MessageType, + NewConversationMessage, +) +from semantic_workbench_assistant.assistant_app import ( + ConversationContext, +) + +from assistant.config import assistant_config +from assistant.data import InformationRequestSource, InspectorTab, NewInformationRequest +from assistant.domain.information_request_manager import InformationRequestManager +from assistant.domain.share_manager import ShareManager +from assistant.logging import logger +from assistant.notifications import Notifications +from assistant.prompt_utils import ( + ContextSection, + ContextStrategy, + Instructions, + Prompt, + TokenBudget, + add_context_to_prompt, +) +from assistant.tools import ShareTools +from assistant.utils import load_text_include + + +class ActorOutput(BaseModel): + """ + Attributes: + response: The response from the assistant. + """ + + accomplishments: str = Field( + description="A summary of all the actions performed and their results.", + ) + user_information_requests: list[NewInformationRequest] = Field( + description="A list of all the information needed from the user to resolve tasks.", + ) + model_config: ClassVar[ConfigDict] = ConfigDict(extra="forbid") + + +async def act( + context: ConversationContext, + attachments_extension: AttachmentsExtension, + metadata: dict[str, Any], +) -> ActorOutput | None: + """ + Work, work, work, work, work... + """ + + if "debug" not in metadata: + metadata["debug"] = {} + debug = metadata["debug"] + + config = await assistant_config.get(context.assistant) + model = config.request_config.openai_model + role = await ShareManager.get_conversation_role(context) + debug["role"] = role + token_budget = TokenBudget(config.request_config.max_tokens) + + instructions = load_text_include("actor_instructions.md") + instructions = Instructions(instructions) + prompt = Prompt( + instructions=instructions, + context_strategy=ContextStrategy.MULTI, + ) + sections = [ + ContextSection.KNOWLEDGE_INFO, + ContextSection.KNOWLEDGE_BRIEF, + ContextSection.TARGET_AUDIENCE, + # ContextSection.LEARNING_OBJECTIVES, + ContextSection.KNOWLEDGE_DIGEST, + ContextSection.INFORMATION_REQUESTS, + # ContextSection.SUGGESTED_NEXT_ACTIONS, + ContextSection.ATTACHMENTS, + ContextSection.TASKS, + ContextSection.COORDINATOR_CONVERSATION, + ] + await add_context_to_prompt( + prompt, + context=context, + role=role, + model=model, + token_limit=config.request_config.max_tokens, + attachments_extension=attachments_extension, + attachments_config=config.attachments_config, + attachments_in_system_message=False, + include=sections, + ) + + # Calculate token count for all prompt so far. + completion_messages = prompt.messages() + token_budget.add( + num_tokens_from_messages( + model=model, + messages=completion_messages, + ) + ) + + content = "" + async with openai_client.create_client(config.service_config) as client: + try: + completion_args = { + "messages": completion_messages, + "model": model, + "max_tokens": config.request_config.response_tokens, + "temperature": 0.7, + "response_format": ActorOutput, + } + debug["completion_args"] = openai_client.serializable(completion_args) + + response, _ = await complete_with_tool_calls( + async_client=client, + completion_args=completion_args, + tool_functions=ShareTools(context).act_tools(), + metadata=debug, + max_tool_call_rounds=32, + ) + + if response and response.choices and response.choices[0].message.parsed: + output: ActorOutput | None = response.choices[0].message.parsed + debug["completion_response"] = openai_client.serializable(response.model_dump()) + + if output and output.accomplishments: + for req in output.user_information_requests: + await InformationRequestManager.create_information_request( + context=context, + title=req.title, + description=req.description, + priority=req.priority, + source=InformationRequestSource.INTERNAL, + ) + # if output.accomplishments: + await context.send_messages( + NewConversationMessage( + content=output.accomplishments, + message_type=MessageType.notice, + metadata=metadata, + ) + ) + await Notifications.notify_state_update( + context, + [InspectorTab.DEBUG], + ) + + return output + + except CompletionError as e: + logger.exception(f"Exception occurred calling OpenAI chat completion: {e}") + debug["error"] = str(e) + if isinstance(e.body, dict) and "message" in e.body: + content = e.body.get("message", e.message) + elif e.message: + content = e.message + else: + content = "An error occurred while processing your request." + await context.send_messages( + NewConversationMessage( + content=content, + message_type=MessageType.notice, + metadata=metadata, + ) + ) + return + + +def get_formatted_token_count(tokens: int) -> str: + # if less than 1k, return the number of tokens + # if greater than or equal to 1k, return the number of tokens in k + # use 1 decimal place for k + # drop the decimal place if the number of tokens in k is a whole number + if tokens < 1000: + return str(tokens) + else: + tokens_in_k = tokens / 1000 + if tokens_in_k.is_integer(): + return f"{int(tokens_in_k)}k" + else: + return f"{tokens_in_k:.1f}k" + + +def get_token_usage_message( + max_tokens: int, + total_tokens: int, + request_tokens: int, + completion_tokens: int, +) -> str: + """ + Generate a display friendly message for the token usage, to be added to the footer items. + """ + + return dedent(f""" + Tokens used: {get_formatted_token_count(total_tokens)} + ({get_formatted_token_count(request_tokens)} in / {get_formatted_token_count(completion_tokens)} out) + of {get_formatted_token_count(max_tokens)} ({int(total_tokens / max_tokens * 100)}%) + """).strip() + + +def get_response_duration_message(response_duration: float) -> str: + """ + Generate a display friendly message for the response duration, to be added to the footer items. + """ + + return f"Response time: {response_duration:.2f} seconds" diff --git a/assistants/project-assistant/assistant/agentic/coordinator_next_action.py b/assistants/project-assistant/assistant/agentic/coordinator_next_action.py new file mode 100644 index 000000000..d70881559 --- /dev/null +++ b/assistants/project-assistant/assistant/agentic/coordinator_next_action.py @@ -0,0 +1,115 @@ +""" +Coordinator support and helper functions for Knowledge Transfer Assistant. + +Provides next action suggestions and other coordinator utilities. +""" + +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.data import RequestStatus +from assistant.domain import ShareManager, TransferManager +from assistant.logging import logger + + +async def get_coordinator_next_action_suggestion( + context: ConversationContext, +) -> str | None: + """ + Generate next action suggestions for the coordinator based on the knowledge transfer state. + + This output is passed to the assistant and helps guide the conversation toward completing or improving + the knowledge share in a helpful, structured way. + + Returns: + A user-facing suggestion string, or None if no suggestion is needed. + """ + try: + share_id = await ShareManager.get_share_id(context) + if not share_id: + logger.warning("No share ID found for this conversation") + return None + + share = await ShareManager.get_share(context) + if not share: + return None + + brief = share.brief + requests = share.requests + active_requests = [r for r in requests if r.status == RequestStatus.NEW] + + # 1. Unresolved requests come first + if active_requests: + request = active_requests[0] + return ( + f"There are {len(active_requests)} unanswered questions from team members. " + f'One of them is: "{request.title}" Let\'s work on answering it.' + ) + + # 2. Audience not yet defined + if not share.audience: + return ( + "Let's start by defining who your audience is. Who is this knowledge for, and what's their background?" + ) + + # 3. Knowledge not yet organized + # if not share.knowledge_organized: + # return ( + # "Next, let's organize your knowledge. Upload any relevant files or describe the knowledge " + # "you want to transfer. When you're ready, I can mark the knowledge as organized." + # ) + + # 4. Brief not yet written + if not brief: + return ( + "Your knowledge share-out needs a short introduction that will orient your team. " + "Let's write a knowledge brief next. The knowledge brief helps your team understand " + "the purpose of this knowledge transfer and will be visible to all team members in their side panel." + ) + + # 5. If intended to have outcomes but none defined yet + if share.is_intended_to_accomplish_outcomes and not share.learning_objectives: + return ( + "Would you like your team to achieve any specific outcomes? If so, let's define some learning objectives. " # noqa: E501 + "If not, you can mark this share-out as 'exploratory' instead." + ) + + # 6. Objectives exist, but missing outcomes + if share.is_intended_to_accomplish_outcomes: + incomplete_objectives = [obj for obj in share.learning_objectives if not obj.learning_outcomes] + if incomplete_objectives: + name = incomplete_objectives[0].name + return ( + f"The learning objective '{name}' doesn't have any outcomes yet. " + f"Let's define what your team should accomplish to meet it." + ) + + # 7. Ready for transfer but not yet shared + if TransferManager.is_ready_for_transfer(share) and not TransferManager.is_actively_sharing(share): + return ( + "Your knowledge is ready to share. Would you like to create a message and generate the invitation link?" + ) + + # 8. Actively sharing - monitor and support ongoing transfer + if TransferManager.is_actively_sharing(share): + if share.is_intended_to_accomplish_outcomes and not TransferManager._is_transfer_complete(share): + team_count = len(share.team_conversations) + return ( + f"Great! Your knowledge is being shared with {team_count} team member" + f"{'s' if team_count != 1 else ''}. You can continue improving the knowledge share or " + f"respond to information requests as they come in." + ) + else: + return ( + "Your knowledge transfer is in progress. You can continue improving the knowledge share or " + "respond to information requests as they come in." + ) + + # 9. Default: General support + return ( + "Your knowledge share is available. You can continue improving it or " + "respond to new information requests as they come in." + ) + + except Exception as e: + logger.exception(f"Error generating next action suggestion: {e}") + return None diff --git a/assistants/project-assistant/assistant/agentic/create_invitation.py b/assistants/project-assistant/assistant/agentic/create_invitation.py new file mode 100644 index 000000000..9f8390b79 --- /dev/null +++ b/assistants/project-assistant/assistant/agentic/create_invitation.py @@ -0,0 +1,91 @@ +from typing import Any + +import openai_client +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.config import assistant_config +from assistant.domain.share_manager import ShareManager +from assistant.logging import convert_to_serializable, logger +from assistant.notifications import Notifications +from assistant.prompt_utils import ( + ContextSection, + ContextStrategy, + Instructions, + Prompt, + add_context_to_prompt, +) +from assistant.utils import load_text_include + + +async def create_invitation(context: ConversationContext) -> str: + debug: dict[str, Any] = { + "context": convert_to_serializable(context.to_dict()), + } + + config = await assistant_config.get(context.assistant) + + # Set up prompt instructions. + instruction_text = load_text_include("create_invitation.md") + instructions = Instructions(instruction_text) + prompt = Prompt( + instructions=instructions, + context_strategy=ContextStrategy.MULTI, + ) + + # Add prompt context. + role = await ShareManager.get_conversation_role(context) + await add_context_to_prompt( + prompt, + context=context, + role=role, + model=config.request_config.openai_model, + token_limit=config.request_config.max_tokens, + attachments_config=config.attachments_config, + attachments_in_system_message=True, + include=[ + ContextSection.KNOWLEDGE_INFO, + ContextSection.KNOWLEDGE_BRIEF, + # ContextSection.TASKS, + ContextSection.TARGET_AUDIENCE, + # ContextSection.LEARNING_OBJECTIVES, + ContextSection.KNOWLEDGE_DIGEST, + # ContextSection.INFORMATION_REQUESTS, + # ContextSection.SUGGESTED_NEXT_ACTIONS, + ContextSection.COORDINATOR_CONVERSATION, + ContextSection.ATTACHMENTS, + ], + ) + + # Chat completion + async with openai_client.create_client(config.service_config) as client: + try: + completion_args = { + "messages": prompt.messages(), + "model": config.request_config.openai_model, + "max_tokens": 500, + "temperature": 0.8, + } + debug["completion_args"] = openai_client.serializable(completion_args) + + # LLM call + response = await client.chat.completions.create( + **completion_args, + ) + openai_client.validate_completion(response) + debug["completion_response"] = openai_client.serializable(response.model_dump()) + + # Response + if response and response.choices and response.choices[0].message.content: + output: str = response.choices[0].message.content + if output: + await Notifications.notify(context, f"Generated invitation.\n\n{output}", debug_data=debug) + return output + else: + logger.warning("Empty response from LLM while generating invitation.") + + except Exception as e: + logger.exception(f"Failed to make OpenIA call: {e}") + debug["error"] = str(e) + + # logger.debug(f"{__name__}: {debug}") + return "Failed to generate invitation." diff --git a/assistants/project-assistant/assistant/agentic/detect_audience_and_takeaways.py b/assistants/project-assistant/assistant/agentic/detect_audience_and_takeaways.py new file mode 100644 index 000000000..576278368 --- /dev/null +++ b/assistants/project-assistant/assistant/agentic/detect_audience_and_takeaways.py @@ -0,0 +1,113 @@ +from typing import Any + +import openai_client +from assistant_extensions.attachments import AttachmentsExtension +from pydantic import BaseModel +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.config import assistant_config +from assistant.data import InspectorTab, NewTaskInfo +from assistant.domain.share_manager import ShareManager +from assistant.domain.tasks_manager import TasksManager +from assistant.logging import logger +from assistant.notifications import Notifications +from assistant.prompt_utils import ( + ContextSection, + ContextStrategy, + Instructions, + Prompt, + add_context_to_prompt, +) +from assistant.utils import load_text_include + + +async def detect_audience_and_takeaways( + context: ConversationContext, attachments_extension: AttachmentsExtension +) -> None: + debug: dict[str, Any] = { + "context": context.to_dict(), + } + + config = await assistant_config.get(context.assistant) + + # Set up prompt instructions. + instruction_text = load_text_include("detect_audience.md") + instructions = Instructions(instruction_text) + prompt = Prompt( + instructions=instructions, + context_strategy=ContextStrategy.MULTI, + ) + + # Add prompt context. + role = await ShareManager.get_conversation_role(context) + await add_context_to_prompt( + prompt, + context=context, + role=role, + model=config.request_config.openai_model, + token_limit=config.request_config.max_tokens, + attachments_extension=attachments_extension, + attachments_config=config.attachments_config, + attachments_in_system_message=True, + include=[ + # ContextSection.KNOWLEDGE_INFO, + # ContextSection.KNOWLEDGE_BRIEF, + ContextSection.TARGET_AUDIENCE, + ContextSection.LEARNING_OBJECTIVES, + # ContextSection.KNOWLEDGE_DIGEST, + # ContextSection.INFORMATION_REQUESTS, + # ContextSection.SUGGESTED_NEXT_ACTIONS, + ContextSection.COORDINATOR_CONVERSATION, + ContextSection.ATTACHMENTS, + ContextSection.TASKS, + ], + ) + + class Output(BaseModel): + """Output class to hold the generated tasks.""" + + tasks: list[ + NewTaskInfo + ] # Tasks related to the audience and takeaways. One task per item. If there are no tasks to be added, this will be an empty list. #noqa: E501 + + # Chat completion + async with openai_client.create_client(config.service_config) as client: + try: + completion_args = { + "messages": prompt.messages(), + "model": config.request_config.openai_model, + "max_tokens": 500, + "temperature": 0.8, + "response_format": Output, + } + debug["completion_args"] = openai_client.serializable(completion_args) + + # LLM call + response = await client.beta.chat.completions.parse( + **completion_args, + ) + openai_client.validate_completion(response) + debug["completion_response"] = openai_client.serializable(response.model_dump()) + + # Response + if response and response.choices and response.choices[0].message.parsed: + output: Output = response.choices[0].message.parsed + if output.tasks: + await TasksManager.add_tasks(context, output.tasks) + await Notifications.notify( + context, + f"Added {len(output.tasks)} tasks related to the audience and takeaways.", + debug_data=debug, + ) + await Notifications.notify_state_update( + context, + [InspectorTab.DEBUG], + ) + else: + logger.warning("Empty response from LLM for welcome message generation") + + except Exception as e: + logger.exception(f"Failed to make OpenIA call: {e}") + debug["error"] = str(e) + + # logger.debug(f"{__name__}: {debug}") diff --git a/assistants/project-assistant/assistant/agentic/detect_coordinator_actions.py b/assistants/project-assistant/assistant/agentic/detect_coordinator_actions.py new file mode 100644 index 000000000..ab83a3a08 --- /dev/null +++ b/assistants/project-assistant/assistant/agentic/detect_coordinator_actions.py @@ -0,0 +1,109 @@ +from typing import Any + +import openai_client +from assistant_extensions.attachments import AttachmentsExtension +from pydantic import BaseModel +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.config import assistant_config +from assistant.data import InspectorTab +from assistant.domain.share_manager import ShareManager +from assistant.domain.tasks_manager import TasksManager +from assistant.logging import logger +from assistant.notifications import Notifications +from assistant.prompt_utils import ( + ContextSection, + ContextStrategy, + Instructions, + Prompt, + add_context_to_prompt, +) +from assistant.utils import load_text_include + + +async def detect_coordinator_actions(context: ConversationContext, attachments_extension: AttachmentsExtension) -> None: + debug: dict[str, Any] = { + "context": context.to_dict(), + } + + config = await assistant_config.get(context.assistant) + + # Set up prompt instructions. + instruction_text = load_text_include("detect_coordinator_actions.md") + instructions = Instructions(instruction_text) + prompt = Prompt( + instructions=instructions, + context_strategy=ContextStrategy.MULTI, + ) + + # Add prompt context. + role = await ShareManager.get_conversation_role(context) + await add_context_to_prompt( + prompt, + context=context, + role=role, + model=config.request_config.openai_model, + token_limit=config.request_config.max_tokens, + attachments_extension=attachments_extension, + attachments_config=config.attachments_config, + attachments_in_system_message=True, + include=[ + ContextSection.KNOWLEDGE_INFO, + ContextSection.KNOWLEDGE_BRIEF, + ContextSection.TASKS, + ContextSection.TARGET_AUDIENCE, + ContextSection.LEARNING_OBJECTIVES, + ContextSection.KNOWLEDGE_DIGEST, + ContextSection.INFORMATION_REQUESTS, + # ContextSection.SUGGESTED_NEXT_ACTIONS, + ContextSection.COORDINATOR_CONVERSATION, + ContextSection.ATTACHMENTS, + ], + ) + + class Output(BaseModel): + """Output class to hold the additional tasks.""" + + tasks: list[ + str + ] # Additional tasks that should be completed. If there are no additional tasks needed, this will be an empty list. #noqa: E501 + + # Chat completion + async with openai_client.create_client(config.service_config) as client: + try: + completion_args = { + "messages": prompt.messages(), + "model": config.request_config.openai_model, + "max_tokens": 500, + "temperature": 0.7, + "response_format": Output, + } + debug["completion_args"] = openai_client.serializable(completion_args) + + # LLM call + response = await client.beta.chat.completions.parse( + **completion_args, + ) + openai_client.validate_completion(response) + debug["completion_response"] = openai_client.serializable(response.model_dump()) + + # Response + if response and response.choices and response.choices[0].message.parsed: + output: Output = response.choices[0].message.parsed + if output.tasks: + await TasksManager.add_tasks(context, output.tasks) + await Notifications.notify( + context, f"Added {len(output.tasks)} tasks related to the process.", debug_data=debug + ) + await Notifications.notify_state_update( + context, + [InspectorTab.DEBUG], + ) + else: + logger.warning("Empty response from LLM for welcome message generation") + + except Exception as e: + logger.exception(f"Failed to make OpenIA call: {e}") + debug["error"] = str(e) + + # logger.debug(f"{__name__}: {debug}") diff --git a/assistants/project-assistant/assistant/project_analysis.py b/assistants/project-assistant/assistant/agentic/detect_information_request_needs.py similarity index 62% rename from assistants/project-assistant/assistant/project_analysis.py rename to assistants/project-assistant/assistant/agentic/detect_information_request_needs.py index 7b06474b2..4b47bf7b9 100644 --- a/assistants/project-assistant/assistant/project_analysis.py +++ b/assistants/project-assistant/assistant/agentic/detect_information_request_needs.py @@ -1,22 +1,22 @@ """ -Analysis and detection functions for the project assistant. +Analysis and detection functions for the knowledge transfer assistant. -This module contains functions for analyzing messages and project content +This module contains functions for analyzing messages and knowledge transfer content to detect specific conditions, such as information request needs. """ import json -from typing import Any, Dict, List +from typing import Any import openai_client from openai.types.chat import ChatCompletionMessageParam from semantic_workbench_assistant.assistant_app import ConversationContext -from .config import assistant_config -from .logging import logger +from assistant.config import assistant_config +from assistant.logging import convert_to_serializable, logger -async def detect_information_request_needs(context: ConversationContext, message: str) -> Dict[str, Any]: +async def detect_information_request_needs(context: ConversationContext, message: str) -> dict[str, Any]: """ Analyze a user message in context of recent chat history to detect potential information request needs. Uses an LLM for sophisticated detection. @@ -28,74 +28,46 @@ async def detect_information_request_needs(context: ConversationContext, message Returns: Dict with detection results including is_information_request, confidence, and other metadata """ - debug: Dict[str, Any] = { + debug: dict[str, Any] = { "message": message, - "context": context, + "context": convert_to_serializable(context.to_dict()), } - # Get config via assistant config config = await assistant_config.get(context.assistant) - # Check if we're in a test environment (Missing parts of context) - if not hasattr(context, "assistant") or context.assistant is None: - return { - "is_information_request": False, - "reason": "Unable to perform detection in test environment - missing context", - "confidence": 0.0, - "debug": debug, - } - - # Get the config - config = await assistant_config.get(context.assistant) - - # Verify service_config is available - if not config.service_config: - logger.warning("No service_config available for LLM-based detection") - return { - "is_information_request": False, - "reason": "LLM detection unavailable - missing service configuration", - "confidence": 0.0, - "debug": debug, - } - - # Get recent conversation history (up to 10 messages) + # Get chat history chat_history = [] try: - # Get recent messages to provide context messages_response = await context.get_messages(limit=10) if messages_response and messages_response.messages: - # Format messages for the LLM for msg in messages_response.messages: - # Format the sender name sender_name = "Team Member" if msg.sender.participant_id == context.assistant.id: sender_name = "Assistant" - - # Add to chat history role = "user" if sender_name == "Team Member" else "assistant" chat_history.append({"role": role, "content": f"{sender_name}: {msg.content}"}) - - # Reverse to get chronological order chat_history.reverse() except Exception as e: logger.warning(f"Could not retrieve chat history: {e}") - # Continue without history if we can't get it try: - # Create chat completion with history context async with openai_client.create_client(config.service_config) as client: - # Prepare messages array with system prompt and chat history - messages: List[ChatCompletionMessageParam] = [ - {"role": "system", "content": config.prompt_config.project_information_request_detection} + messages: list[ChatCompletionMessageParam] = [ + { + "role": "system", + "content": config.prompt_config.detect_information_request_needs, + } ] - # Add chat history if available if chat_history: for history_msg in chat_history: messages.append({"role": history_msg["role"], "content": history_msg["content"]}) # Add the current message for analysis - explicitly mark as the latest message - messages.append({"role": "user", "content": f"Latest message from Team Member: {message}"}) + messages.append({ + "role": "user", + "content": f"Latest message from Team Member: {message}", + }) completion_args = { "model": "gpt-3.5-turbo", @@ -104,9 +76,8 @@ async def detect_information_request_needs(context: ConversationContext, message "max_tokens": 500, "temperature": 0.2, # Low temperature for more consistent analysis } - debug["completion_args"] = openai_client.make_completion_args_serializable(completion_args) + debug["completion_args"] = openai_client.serializable(completion_args) - # Make the API call response = await client.chat.completions.create( **completion_args, ) @@ -125,6 +96,7 @@ async def detect_information_request_needs(context: ConversationContext, message "is_information_request": False, "reason": "Failed to parse LLM response", "confidence": 0.0, + "debug": debug, } else: logger.warning("Empty response from LLM for information request detection") @@ -139,7 +111,7 @@ async def detect_information_request_needs(context: ConversationContext, message debug["error"] = str(e) return { "is_information_request": False, - "reason": f"LLM detection error: {str(e)}", + "reason": f"LLM detection error: {e!s}", "confidence": 0.0, "debug": debug, } diff --git a/assistants/project-assistant/assistant/agentic/detect_knowledge_package_gaps.py b/assistants/project-assistant/assistant/agentic/detect_knowledge_package_gaps.py new file mode 100644 index 000000000..0cf0c071e --- /dev/null +++ b/assistants/project-assistant/assistant/agentic/detect_knowledge_package_gaps.py @@ -0,0 +1,132 @@ +from typing import Any + +import openai_client +from assistant_extensions.attachments import AttachmentsExtension +from pydantic import BaseModel +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.config import assistant_config +from assistant.data import InspectorTab, NewTaskInfo, TaskStatus +from assistant.domain.share_manager import ShareManager +from assistant.domain.tasks_manager import TasksManager +from assistant.logging import convert_to_serializable, logger +from assistant.notifications import Notifications +from assistant.prompt_utils import ( + ContextSection, + ContextStrategy, + Instructions, + Prompt, + add_context_to_prompt, +) +from assistant.utils import load_text_include + + +async def detect_knowledge_package_gaps( + context: ConversationContext, attachments_extension: AttachmentsExtension +) -> None: + debug: dict[str, Any] = { + "context": convert_to_serializable(context.to_dict()), + } + + config = await assistant_config.get(context.assistant) + + share = await ShareManager.get_share(context) + if ( + share.digest is None + and share.tasks + and not any(task.content == "The user must define the knowledge package content." for task in share.tasks) + ): + task = NewTaskInfo( + content="The user must define the knowledge package content.", + status=TaskStatus.PENDING, + ) + await TasksManager.add_tasks(context, [task]) + await Notifications.notify_state_update( + context, + [InspectorTab.DEBUG], + ) + return + + # Set up prompt instructions. + instruction_text = load_text_include("detect_knowledge_package_gaps.md") + instructions = Instructions(instruction_text) + prompt = Prompt( + instructions=instructions, + context_strategy=ContextStrategy.MULTI, + ) + + # Add prompt context. + role = await ShareManager.get_conversation_role(context) + await add_context_to_prompt( + prompt, + context=context, + role=role, + model=config.request_config.openai_model, + token_limit=config.request_config.max_tokens, + attachments_extension=attachments_extension, + attachments_config=config.attachments_config, + attachments_in_system_message=True, + include=[ + # ContextSection.KNOWLEDGE_INFO, + ContextSection.KNOWLEDGE_BRIEF, + ContextSection.TASKS, + ContextSection.TARGET_AUDIENCE, + # ContextSection.LEARNING_OBJECTIVES, + ContextSection.KNOWLEDGE_DIGEST, + ContextSection.INFORMATION_REQUESTS, + # ContextSection.SUGGESTED_NEXT_ACTIONS, + ContextSection.COORDINATOR_CONVERSATION, + ContextSection.ATTACHMENTS, + ], + ) + + class Output(BaseModel): + """Identified knowledge gaps.""" + + gaps: list[str] # Gaps in the knowledge package that need to be addressed. + + # Chat completion + async with openai_client.create_client(config.service_config) as client: + try: + completion_args = { + "messages": prompt.messages(), + "model": config.request_config.openai_model, + "max_tokens": 500, + "temperature": 0.8, + "response_format": Output, + } + debug["completion_args"] = openai_client.serializable(completion_args) + + # LLM call + response = await client.beta.chat.completions.parse( + **completion_args, + ) + openai_client.validate_completion(response) + debug["completion_response"] = openai_client.serializable(response.model_dump()) + + # Response + if response and response.choices and response.choices[0].message.parsed: + output: Output = response.choices[0].message.parsed + if output.gaps: + task_contents = [f"Ask the user about: {gap.strip()}" for gap in output.gaps if gap.strip()] + tasks = [NewTaskInfo(content=content) for content in task_contents] + await TasksManager.add_tasks(context, tasks) + await Notifications.notify( + context, f"Added {len(tasks)} tasks related to the knowledge content.", debug_data=debug + ) + await Notifications.notify_state_update( + context, + [InspectorTab.DEBUG], + ) + else: + await Notifications.notify( + context, "No knowledge gaps identified. All required information is present.", debug_data=debug + ) + else: + logger.warning("Empty response from LLM for welcome message generation") + + except Exception as e: + logger.exception(f"Failed to make OpenIA call: {e}") + debug["error"] = str(e) + + # logger.debug(f"{__name__}: {debug}") diff --git a/assistants/project-assistant/assistant/agentic/focus.py b/assistants/project-assistant/assistant/agentic/focus.py new file mode 100644 index 000000000..626163233 --- /dev/null +++ b/assistants/project-assistant/assistant/agentic/focus.py @@ -0,0 +1,98 @@ +from typing import Any + +import openai_client +from assistant_extensions.attachments import AttachmentsExtension +from pydantic import BaseModel +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.config import assistant_config +from assistant.data import InspectorTab +from assistant.domain.tasks_manager import TasksManager +from assistant.logging import logger +from assistant.notifications import Notifications +from assistant.prompt_utils import ( + ContextStrategy, + DataContext, + Instructions, + Prompt, +) +from assistant.utils import load_text_include + + +async def focus(context: ConversationContext, attachments_extension: AttachmentsExtension) -> None: + debug: dict[str, Any] = { + "context": context.to_dict(), + } + + config = await assistant_config.get(context.assistant) + + # Set up prompt instructions. + instruction_text = load_text_include("focus.md") + instructions = Instructions(instruction_text) + prompt = Prompt( + instructions=instructions, + context_strategy=ContextStrategy.MULTI, + ) + + tasks = await TasksManager.get_tasks(context) + if tasks: + tasks_data = "\n\n".join("- " + thought for thought in tasks) + prompt.contexts.append( + DataContext( + "Consulting Tasks", + tasks_data, + "The consultant's current task list for the knowledge transfer consulting project.", + ) + ) + else: + prompt.contexts.append( + DataContext( + "Consulting Tasks", + "[]", + "The consultant has no current tasks for the knowledge transfer consulting project.", + ) + ) + + class Output(BaseModel): + """Output class to hold the generated tasks.""" + + reasoning: str # Reasoning behind how you are focusing the task list. + focused_tasks: list[str] # Focused task list for the knowledge transfer consultant. + + # Chat completion + async with openai_client.create_client(config.service_config) as client: + try: + completion_args = { + "messages": prompt.messages(), + "model": config.request_config.openai_model, + "max_tokens": 500, + "temperature": 0.8, + "response_format": Output, + } + debug["completion_args"] = openai_client.serializable(completion_args) + + # LLM call + response = await client.beta.chat.completions.parse( + **completion_args, + ) + openai_client.validate_completion(response) + debug["completion_response"] = openai_client.serializable(response.model_dump()) + + # Response + if response and response.choices and response.choices[0].message.parsed: + output: Output = response.choices[0].message.parsed + if output.focused_tasks: + await TasksManager.set_task_list(context, output.focused_tasks) + await Notifications.notify(context, "Focused the task list.", debug_data=debug) + await Notifications.notify_state_update( + context, + [InspectorTab.DEBUG], + ) + else: + logger.warning("Empty response from LLM for welcome message generation") + + except Exception as e: + logger.exception(f"Failed to make OpenIA call: {e}") + debug["error"] = str(e) + + # logger.debug(f"{__name__}: {debug}") diff --git a/assistants/project-assistant/assistant/agentic/respond.py b/assistants/project-assistant/assistant/agentic/respond.py new file mode 100644 index 000000000..0e5a81bc5 --- /dev/null +++ b/assistants/project-assistant/assistant/agentic/respond.py @@ -0,0 +1,435 @@ +import time +from textwrap import dedent +from typing import Any, ClassVar + +import openai_client +from assistant_extensions.attachments import AttachmentsExtension +from openai import BaseModel +from openai.types.chat import ( + ChatCompletionAssistantMessageParam, + ChatCompletionMessageParam, + ChatCompletionSystemMessageParam, + ChatCompletionUserMessageParam, +) +from openai_client import num_tokens_from_messages +from openai_client.completion import assistant_message_from_completion +from openai_client.errors import CompletionError +from openai_client.tools import complete_with_tool_calls +from pydantic import ConfigDict, Field +from semantic_workbench_api_model.workbench_model import ( + ConversationMessage, + ConversationParticipantList, + MessageType, + NewConversationMessage, +) +from semantic_workbench_assistant.assistant_app import ( + ConversationContext, +) + +from assistant.config import assistant_config +from assistant.data import ConversationRole +from assistant.domain.conversation_preferences_manager import ( + ConversationPreferencesManager, +) +from assistant.domain.share_manager import ShareManager +from assistant.logging import logger +from assistant.prompt_utils import ( + ContextSection, + ContextStrategy, + DataContext, + Instructions, + Prompt, + TokenBudget, + add_context_to_prompt, +) +from assistant.tools import ShareTools +from assistant.utils import load_text_include + +SILENCE_TOKEN = "{{SILENCE}}" + + +def format_message(participants: ConversationParticipantList, message: ConversationMessage) -> str: + """Consistent formatter that includes the participant name for multi-participant and name references""" + conversation_participant = next( + (participant for participant in participants.participants if participant.id == message.sender.participant_id), + None, + ) + participant_name = conversation_participant.name if conversation_participant else "unknown" + message_datetime = message.timestamp.strftime("%Y-%m-%d %H:%M:%S") + return f"[{participant_name} - {message_datetime}]: {message.content}" + + +class CoordinatorOutput(BaseModel): + """ + Attributes: + response: The response from the assistant. + """ + + response: str = Field( + description="The response from the assistant. The response should not duplicate information from the excerpt but may refer to it.", # noqa: E501 + ) + + model_config: ClassVar[ConfigDict] = ConfigDict(extra="forbid") + + +class TeamOutput(BaseModel): + """ + Attributes: + citations: A list of citations from which the response is generated. There should always be at least one citation, but it can be empty if the assistant has no relevant information to cite. + excerpt: A verbatim excerpt from one of the cited works that illustrates why this response was given. It should have enough context to get a good idea of what's in that part of the cited work. DO NOT excerpt from CONVERSATION or DIGEST, only from attachments. If there is no relevant excerpt, this will be None. If there is special formatting in the excerpt, remove it as the excerpt will be displayed in quotes in a chat message and should not contain any formatting that would not be supported in a chat message (e.g. markdown). + next_step_suggestion: Suggest more areas to explore using content from the knowledge digest to ensure your conversation covers all of the relevant information. + """ # noqa: E501 + + citations: list[str] = Field( + description="A list of citations from which the response is generated. There should always be at least one citation, but it can be empty if the assistant has no relevant information to cite.", # noqa: E501 + ) + excerpt: str | None = Field( + description="A verbatim excerpt from one of the cited works that illustrates why this response was given. It should have enough context to get a good idea of what's in that part of the cited work. DO NOT excerpt from CONVERSATION or KNOWLEDGE_DIGEST, only from attachments. If there is no relevant excerpt, this will be None. If there is special formatting in the excerpt, remove it as the excerpt will be displayed in quotes in a chat message and should not contain any formatting that would not be supported in a chat message (e.g. markdown).", # noqa: E501 + ) + response: str = Field( + description="The response from the assistant. The response should not duplicate information from the excerpt but may refer to it.", # noqa: E501 + ) + next_step_suggestion: str = Field( + description="Suggest more areas to explore using content from the knowledge digest to ensure your conversation covers all of the relevant information. For example: 'Would you like to explore ... next?'.", # noqa: E501 + ) + + model_config: ClassVar[ConfigDict] = ConfigDict(extra="forbid") + + +async def respond_to_conversation( + context: ConversationContext, + new_message: ConversationMessage, + attachments_extension: AttachmentsExtension, + metadata: dict[str, Any], + user_information_requests: list[str] | None = None, +) -> ChatCompletionAssistantMessageParam | None: + """ + Respond to a conversation message. + """ + if "debug" not in metadata: + metadata["debug"] = {} + + config = await assistant_config.get(context.assistant) + model = config.request_config.openai_model + role = await ShareManager.get_conversation_role(context) + metadata["debug"]["role"] = role + token_budget = TokenBudget(config.request_config.max_tokens) + + ## + ## INSTRUCTIONS + ## + + # Add role-specific instructions. + if role == ConversationRole.COORDINATOR: + role_specific_instructions = config.prompt_config.coordinator_instructions + else: + role_specific_instructions = config.prompt_config.team_instructions + instructions = Instructions(role_specific_instructions) + + # Add knowledge digest instructions. + instructions.add_subsection( + Instructions( + load_text_include("knowledge_digest_instructions.txt"), + "Assistant's Knowledge Digest", + ) + ) + + # If this is a multi-participant conversation, add a note about the participants. + participants = await context.get_participants(include_inactive=True) + if len(participants.participants) > 2: + participant_text = ( + "\n\n" + f"There are {len(participants.participants)} participants in the conversation," + " including you as the assistant and the following users:" + + ",".join([ + f' "{participant.name}"' + for participant in participants.participants + if participant.id != context.assistant.id + ]) + + "\n\nYou do not need to respond to every message. Do not respond if the last thing said was a closing" + " statement such as 'bye' or 'goodbye', or just a general acknowledgement like 'ok' or 'thanks'. Do not" + f' respond as another user in the conversation, only as "{context.assistant.name}".' + " Sometimes the other users need to talk amongst themselves and that is ok. If the conversation seems to" + f' be directed at you or the general audience, go ahead and respond.\n\nSay "{SILENCE_TOKEN}" to skip' + " your turn." + ) + instructions.add_subsection(Instructions(participant_text, "Multi-participant conversation instructions")) + + # Add conversation preferences instructions. + communication_style = await ConversationPreferencesManager.get_preferred_communication_style(context) + instructions.add_subsection(Instructions(communication_style, "Preferred Communication Style")) + + prompt = Prompt( + instructions=instructions, + context_strategy=ContextStrategy.MULTI, + ) + if role == ConversationRole.TEAM: + prompt.output_format = "Respond as JSON with your response in the `response` field and all citations in the `citations` field. In the `next_step_suggestion` field, suggest more areas to explore using content from the assistant whiteboard to ensure your conversation covers all of the relevant information." # noqa: E501 + + ## + ## CONTEXT + ## + + sections = [ + ContextSection.KNOWLEDGE_INFO, + ContextSection.KNOWLEDGE_BRIEF, + ContextSection.TARGET_AUDIENCE, + # ContextSection.LEARNING_OBJECTIVES, + ContextSection.KNOWLEDGE_DIGEST, + ContextSection.INFORMATION_REQUESTS, + # ContextSection.SUGGESTED_NEXT_ACTIONS, + ContextSection.ATTACHMENTS, + ContextSection.TASKS, + ] + if role == ConversationRole.TEAM: + sections.append(ContextSection.COORDINATOR_CONVERSATION) + + await add_context_to_prompt( + prompt, + context=context, + role=role, + model=model, + token_limit=config.request_config.max_tokens, + attachments_extension=attachments_extension, + attachments_config=config.attachments_config, + attachments_in_system_message=False, + include=sections, + ) + + user_information_requests_data = "- ".join(user_information_requests) if user_information_requests else "None" + prompt.contexts.append( + DataContext( + "Information Needed from the User", + user_information_requests_data, + ) + ) + + # Calculate token count for all prompt so far. + completion_messages = prompt.messages() + token_budget.add( + num_tokens_from_messages( + model=model, + messages=completion_messages, + ) + ) + + ### + ### USER MESSAGE + ### + + if new_message.sender.participant_id == context.assistant.id: + user_message: ChatCompletionMessageParam = ChatCompletionAssistantMessageParam( + role="assistant", + content=format_message(participants, new_message), + ) + else: + user_message: ChatCompletionMessageParam = ChatCompletionUserMessageParam( + role="user", + content=format_message(participants, new_message), + ) + + token_budget.add( + num_tokens_from_messages( + model=model, + messages=[user_message], + ) + ) + + ### + ### HISTORY MESSAGES + ### + + history_messages: list[ChatCompletionMessageParam] = [] + before_message_id = new_message.id + history_token_budget = TokenBudget(token_budget.remaining()) + + # Fetch messages from the workbench in batches that will fit our token budget. + under_budget = True + while under_budget: + # Get a batch of messages + messages_response = await context.get_messages( + before=before_message_id, + limit=100, + message_types=[MessageType.chat], + ) + messages_list = messages_response.messages + if not messages_list or len(messages_list) == 0: + break + before_message_id = messages_list[0].id + + for msg in reversed(messages_list): + if msg.sender.participant_id == context.assistant.id: + # For assistant messages, include help suggestions as part of the message content + message_content = format_message(participants, msg) + if msg.metadata and "help" in msg.metadata: + message_content += f"\n\n[Next step?: {msg.metadata['help']}]" + + current_message = ChatCompletionAssistantMessageParam( + role="assistant", + content=message_content, + ) + else: + current_message = ChatCompletionUserMessageParam( + role="user", + content=format_message(participants, msg), + ) + + current_message_tokens = num_tokens_from_messages( + model=model, + messages=[current_message], + ) + + if history_token_budget.fits(current_message_tokens): + history_messages = [current_message, *history_messages] + history_token_budget.add(current_message_tokens) + else: + under_budget = False + break + + if not under_budget: + break + + # Add all chat messages. + completion_messages.extend(history_messages) + completion_messages.append(user_message) + + # Add a system message to indicate attachments are a part of the new message. + if new_message.filenames and len(new_message.filenames) > 0: + attachment_message = ChatCompletionSystemMessageParam( + role="system", + content=f"Attachment(s): {', '.join(new_message.filenames)}", + ) + completion_messages.append(attachment_message) + token_budget.add( + num_tokens_from_messages( + model=model, + messages=[attachment_message], + ) + ) + + ## + ## Final token count check + ## + token_counts = {"total": token_budget.used, "max": token_budget.budget} + metadata["debug"]["token_usage"] = token_counts # For debug. + metadata["token_counts"] = token_counts # For footer. + if token_budget.remaining() < 0: + raise ValueError( + f"You've exceeded the token limit of {token_budget.budget} in this conversation " + f"({token_budget.used}). Try removing some attachments." + ) + + ## + ## MAKE THE LLM CALL + ## + + content = "" + async with openai_client.create_client(config.service_config) as client: + try: + completion_args = { + "messages": completion_messages, + "model": model, + "max_tokens": config.request_config.response_tokens, + "response_format": CoordinatorOutput if role == ConversationRole.COORDINATOR else TeamOutput, + } + + share_tools = ShareTools(context) + tool_functions = ( + share_tools.conversationalist_tools() + if role == ConversationRole.COORDINATOR + else share_tools.team_tools() + ) + response_start_time = time.time() + completion_response, _ = await complete_with_tool_calls( + async_client=client, + completion_args=completion_args, + tool_functions=tool_functions, + metadata=metadata["debug"], + max_tool_call_rounds=32, + ) + response_end_time = time.time() + footer_items = [] + + # Add the token usage message to the footer items + if completion_response: + response_tokens = completion_response.usage.completion_tokens if completion_response.usage else 0 + request_tokens = token_budget.used + footer_items.append( + get_token_usage_message( + max_tokens=config.request_config.max_tokens, + total_tokens=request_tokens + response_tokens, + request_tokens=request_tokens, + completion_tokens=response_tokens, + ) + ) + + await context.update_conversation( + metadata={ + "token_counts": { + "total": request_tokens + response_tokens, + "max": config.request_config.max_tokens, + } + } + ) + + footer_items.append(get_response_duration_message(response_end_time - response_start_time)) + metadata["footer_items"] = footer_items + return assistant_message_from_completion(completion_response) if completion_response else None + + except CompletionError as e: + logger.exception(f"Exception occurred calling OpenAI chat completion: {e}") + metadata["debug"]["error"] = str(e) + if isinstance(e.body, dict) and "message" in e.body: + content = e.body.get("message", e.message) + elif e.message: + content = e.message + else: + content = "An error occurred while processing your request." + await context.send_messages( + NewConversationMessage( + content=content, + message_type=MessageType.notice, + metadata=metadata, + ) + ) + return + + +def get_formatted_token_count(tokens: int) -> str: + # if less than 1k, return the number of tokens + # if greater than or equal to 1k, return the number of tokens in k + # use 1 decimal place for k + # drop the decimal place if the number of tokens in k is a whole number + if tokens < 1000: + return str(tokens) + else: + tokens_in_k = tokens / 1000 + if tokens_in_k.is_integer(): + return f"{int(tokens_in_k)}k" + else: + return f"{tokens_in_k:.1f}k" + + +def get_token_usage_message( + max_tokens: int, + total_tokens: int, + request_tokens: int, + completion_tokens: int, +) -> str: + """ + Generate a display friendly message for the token usage, to be added to the footer items. + """ + + return dedent(f""" + Tokens used: {get_formatted_token_count(total_tokens)} + ({get_formatted_token_count(request_tokens)} in / {get_formatted_token_count(completion_tokens)} out) + of {get_formatted_token_count(max_tokens)} ({int(total_tokens / max_tokens * 100)}%) + """).strip() + + +def get_response_duration_message(response_duration: float) -> str: + """ + Generate a display friendly message for the response duration, to be added to the footer items. + """ + + return f"Response time: {response_duration:.2f} seconds" diff --git a/assistants/project-assistant/assistant/agentic/team_welcome.py b/assistants/project-assistant/assistant/agentic/team_welcome.py new file mode 100644 index 000000000..a4f098779 --- /dev/null +++ b/assistants/project-assistant/assistant/agentic/team_welcome.py @@ -0,0 +1,112 @@ +""" +Analysis and detection functions for the knowledge transfer assistant. + +This module contains functions for analyzing messages and knowledge transfer +share content to detect specific conditions, such as information request needs. +""" + +from textwrap import dedent +from typing import Any + +import openai_client +from openai.types.chat import ChatCompletionMessageParam +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.config import assistant_config +from assistant.domain.share_manager import ShareManager +from assistant.logging import logger +from assistant.utils import load_text_include + + +async def generate_team_welcome_message( + context: ConversationContext, +) -> tuple[str, dict[str, Any]]: + """ + Generates a welcome message for the team based on the knowledge transfer information. + """ + debug: dict[str, Any] = {} + + config = await assistant_config.get(context.assistant) + + try: + share = await ShareManager.get_share(context) + except Exception as e: + logger.error(f"Failed to get share for welcome message generation: {e}") + return config.team_config.default_welcome_message, debug + + share_data: dict[str, str] = {} + + # Knowledge Brief + briefing = share.brief + brief_text = "" + if briefing: + brief_text = dedent(f""" + ### Knowledge Brief + + #### {briefing.title} + + {briefing.content} + """) + share_data["briefing"] = brief_text + + # Learning Objectives + if share and share.learning_objectives: + brief_text += "\n#### LEARNING OBJECTIVES:\n\n" + + for i, objective in enumerate(share.learning_objectives): + brief_text += f"{i + 1}. **{objective.name}** - {objective.description}\n" + if objective.learning_outcomes: + for criterion in objective.learning_outcomes: + check = "⬜" + brief_text += f" {check} {criterion.description}\n" + brief_text += "\n" + share_data["learning_objectives"] = brief_text + + # Knowledge Digest + knowledge_digest = share.digest + if knowledge_digest and knowledge_digest.content: + knowledge_digest_text = load_text_include("knowledge_digest_instructions.txt") + dedent(f""" + KNOWLEDGE DIGEST CONTENT: + ```markdown + {knowledge_digest.content} + ``` + + """) + share_data["knowledge_digest"] = knowledge_digest_text + share_data["knowledge_digest"] = knowledge_digest_text + + try: + # Chat completion + async with openai_client.create_client(config.service_config) as client: + share_info = "\n\n## KNOWLEDGE SHARE INFORMATION\n\n" + "\n".join(share_data.values()) + + instructions = f"{config.prompt_config.welcome_message_generation}\n\n{share_info}" + messages: list[ChatCompletionMessageParam] = [ + {"role": "system", "content": instructions}, + ] + + completion_args = { + "model": config.request_config.openai_model, + "messages": messages, + "max_tokens": 500, + "temperature": 0.7, # Low temperature for more consistent analysis + } + debug["completion_args"] = openai_client.serializable(completion_args) + + # LLM call + response = await client.chat.completions.create( + **completion_args, + ) + debug["completion_response"] = response.model_dump() + + # Response + if response and response.choices and response.choices[0].message.content: + return response.choices[0].message.content, debug + else: + logger.warning("Empty response from LLM for welcome message generation") + return config.team_config.default_welcome_message, debug + + except Exception as e: + logger.error(f"Failed to generate welcome message: {e}") + debug["error"] = str(e) + return config.team_config.default_welcome_message, debug diff --git a/assistants/project-assistant/assistant/agentic/update_digest.py b/assistants/project-assistant/assistant/agentic/update_digest.py new file mode 100644 index 000000000..180fa440a --- /dev/null +++ b/assistants/project-assistant/assistant/agentic/update_digest.py @@ -0,0 +1,101 @@ +import re +from typing import Any +from venv import logger + +import openai_client +from assistant_extensions.attachments import AttachmentsExtension +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.config import assistant_config +from assistant.data import InspectorTab +from assistant.domain import KnowledgeDigestManager +from assistant.domain.share_manager import ShareManager +from assistant.notifications import Notifications +from assistant.prompt_utils import ContextSection, ContextStrategy, Instructions, Prompt, add_context_to_prompt + + +async def update_digest(context: ConversationContext, attachments_extension: AttachmentsExtension) -> None: + debug: dict[str, Any] = { + "context": context.to_dict(), + } + + config = await assistant_config.get(context.assistant) + + # Set up prompt instructions. + instruction_text = config.prompt_config.update_knowledge_digest + instructions = Instructions(instruction_text) + prompt = Prompt( + instructions=instructions, + context_strategy=ContextStrategy.MULTI, + ) + + # Add prompt context. + role = await ShareManager.get_conversation_role(context) + await add_context_to_prompt( + prompt, + context=context, + role=role, + model=config.request_config.openai_model, + token_limit=config.request_config.max_tokens, + attachments_extension=attachments_extension, + attachments_config=config.attachments_config, + attachments_in_system_message=True, + include=[ + # ContextSection.KNOWLEDGE_INFO, + ContextSection.KNOWLEDGE_BRIEF, + # ContextSection.TASKS, + ContextSection.TARGET_AUDIENCE, + ContextSection.LEARNING_OBJECTIVES, + ContextSection.KNOWLEDGE_DIGEST, + # ContextSection.INFORMATION_REQUESTS, + # ContextSection.SUGGESTED_NEXT_ACTIONS, + ContextSection.COORDINATOR_CONVERSATION, + ContextSection.ATTACHMENTS, + ], + ) + + async with openai_client.create_client(config.service_config, api_version="2024-06-01") as client: + try: + completion_args = { + "messages": prompt.messages(), + "model": config.request_config.openai_model, + "max_tokens": config.coordinator_config.max_digest_tokens, + "temperature": 0.7, + } + debug["completion_args"] = openai_client.serializable(completion_args) + response = await client.chat.completions.create(**completion_args) + openai_client.validate_completion(response) + debug["completion_response"] = openai_client.serializable(response.model_dump()) + + # Extract the knowledge digest content from the response. + content = response.choices[0].message.content or "" + + if content == "<OK_AS_IS/>": + logger.info("Knowledge digest is already up to date, no changes made.", extra={"debug": debug}) + return + + match = re.search(r"<KNOWLEDGE_DIGEST>(.*?)</KNOWLEDGE_DIGEST>", content, re.DOTALL) + digest_content = match.group(1).strip() if match else content + if not digest_content: + logger.error("No content extracted from knowledge digest LLM analysis", extra={"debug": debug}) + debug["digest_content"] = digest_content + + # Save the knowledge digest. + await KnowledgeDigestManager.update_knowledge_digest( + context=context, + content=digest_content, + is_auto_generated=True, + ) + + # Use this for debugging in the Semantic Workbench UI. + await Notifications.notify(context, "Updated knowledge digest.", debug_data=debug) + await Notifications.notify_state_update( + context, + [InspectorTab.DEBUG], + ) + + except Exception as e: + debug["error"] = str(e) + logger.exception(f"Failed to make OpenIA call: {e}", extra={"debug": debug}) + + # logger.debug(f"{__name__}: {debug}") diff --git a/assistants/project-assistant/assistant/assets/icon_context_transfer.svg b/assistants/project-assistant/assistant/assets/icon-knowledge-transfer.svg similarity index 100% rename from assistants/project-assistant/assistant/assets/icon_context_transfer.svg rename to assistants/project-assistant/assistant/assets/icon-knowledge-transfer.svg diff --git a/assistants/project-assistant/assistant/assistant.py b/assistants/project-assistant/assistant/assistant.py index 11c8835c4..cce4e21ba 100644 --- a/assistants/project-assistant/assistant/assistant.py +++ b/assistants/project-assistant/assistant/assistant.py @@ -4,8 +4,8 @@ import asyncio import pathlib -from enum import Enum -from typing import Any +import re +from typing import TYPE_CHECKING, Any from assistant_extensions import attachments, dashboard_card, navigator from content_safety.evaluators import CombinedContentSafetyEvaluator @@ -27,31 +27,31 @@ ConversationContext, ) -from assistant.command_processor import command_registry -from assistant.respond import respond_to_conversation -from assistant.team_welcome import generate_team_welcome_message -from assistant.utils import ( - DEFAULT_TEMPLATE_ID, - load_text_include, -) +if TYPE_CHECKING: + pass +from .agentic import agentic +from .agentic.respond import ( + SILENCE_TOKEN, + CoordinatorOutput, + TeamOutput, + respond_to_conversation, +) from .config import assistant_config -from .conversation_project_link import ConversationProjectManager +from .data import ConversationRole, InspectorTab, LogEntryType +from .domain import ShareManager +from .files import ShareFilesManager from .logging import logger -from .project_common import detect_assistant_role -from .project_data import LogEntryType -from .project_files import ProjectFileManager -from .project_manager import ProjectManager -from .project_notifications import ProjectNotifier -from .project_storage import ProjectStorage -from .project_storage_models import ConversationRole -from .state_inspector import ProjectInspectorStateProvider +from .notifications import Notifications +from .ui_tabs import BriefInspector, DebugInspector, LearningInspector, SharingInspector +from .utils import ( + DEFAULT_TEMPLATE_ID, + load_text_include, +) service_id = "project-assistant.made-exploration" service_name = "Project Assistant" -service_description = ( - "A mediator assistant that facilitates project management between project coordinators and a team." -) +service_description = "A mediator assistant that facilitates sharing knowledge between parties." async def content_evaluator_factory( @@ -71,17 +71,20 @@ async def content_evaluator_factory( content_interceptor=content_safety, capabilities={AssistantCapability.supports_conversation_files}, inspector_state_providers={ - "project_status": ProjectInspectorStateProvider(assistant_config), + InspectorTab.BRIEF: BriefInspector(assistant_config), + InspectorTab.LEARNING: LearningInspector(assistant_config), + InspectorTab.SHARING: SharingInspector(assistant_config), + InspectorTab.DEBUG: DebugInspector(assistant_config), }, - additional_templates=[], assistant_service_metadata={ **dashboard_card.metadata( dashboard_card.TemplateConfig( - enabled=False, + enabled=True, template_id=DEFAULT_TEMPLATE_ID, - background_color="rgb(140, 200, 140)", + background_color="rgb(198, 177, 222)", icon=dashboard_card.image_to_url( - pathlib.Path(__file__).parent / "assets" / "icon.svg", "image/svg+xml" + pathlib.Path(__file__).parent / "assets" / "icon-knowledge-transfer.svg", + "image/svg+xml", ), card_content=dashboard_card.CardContent( content_type="text/markdown", @@ -90,7 +93,7 @@ async def content_evaluator_factory( ), ), **navigator.metadata_for_assistant_navigator({ - "default": load_text_include("project_assistant_info.md"), + "default": load_text_include("assistant_info.md"), }), }, ) @@ -100,66 +103,91 @@ async def content_evaluator_factory( app = assistant.fastapi_app() -class ConversationType(Enum): - COORDINATOR = "coordinator" - TEAM = "team" - SHAREABLE_TEMPLATE = "shareable_template" - - @assistant.events.conversation.on_created_including_mine async def on_conversation_created(context: ConversationContext) -> None: """ The assistant manages three types of conversations: - 1. Coordinator Conversation: The main conversation used by the project coordinator + 1. Coordinator Conversation: The main conversation used by the knowledge coordinator 2. Shareable Team Conversation: A template conversation that has a share URL and is never directly used 3. Team Conversation(s): Individual conversations for team members created when they redeem the share URL """ - # Get conversation to access metadata + conversation = await context.get_conversation() + + # We can't pick up the role from the share data yet, so + # we need to determine the role based on the conversation metadata. conversation_metadata = conversation.metadata or {} + share_id = conversation_metadata.get("share_id") + if not share_id: + role = ConversationRole.COORDINATOR + else: + if conversation.imported_from_conversation_id: + role = ConversationRole.TEAM + else: + role = ConversationRole.SHAREABLE_TEMPLATE - config = await assistant_config.get(context.assistant) + # Now handle the new conversation based on its role. + match role: + case ConversationRole.COORDINATOR: + try: + # In the beginning, we created a share... + share_id = await ShareManager.create_share(context) + + # And it was good. So we then created a sharable conversation that we use as a template. + share_url = await ShareManager.create_shareable_team_conversation(context=context, share_id=share_id) + + # Pop open the inspector panel. + await context.send_conversation_state_event( + AssistantStateEvent( + state_id="brief", + event="focus", + state=None, + ) + ) - ## - ## Figure out what type of conversation this is. - ## + # Run task-detection agents. + audience_task = asyncio.create_task( + agentic.detect_audience_and_takeaways(context, attachments_extension) + ) + gaps_task = asyncio.create_task(agentic.detect_knowledge_package_gaps(context, attachments_extension)) + audience_task.add_done_callback(lambda t: t.exception() if t.done() and t.exception() else None) + gaps_task.add_done_callback(lambda t: t.exception() if t.done() and t.exception() else None) + await asyncio.gather(audience_task, gaps_task, return_exceptions=True) + + # Kick off the task actor. + metadata: dict[str, Any] = { + "debug": { + "share_id": share_id, + } + } + await agentic.act(context, attachments_extension, metadata) + + # Prepare a generic welcome message. + config = await assistant_config.get(context.assistant) + welcome_message = config.coordinator_config.welcome_message.format( + share_url=share_url or "<Share URL generation failed>" + ) + except Exception as e: + welcome_message = f"I'm having trouble setting up your knowledge transfer. Please try again or contact support if the issue persists. {e!s}" # noqa: E501 - conversation_type = ConversationType.COORDINATOR + await context.send_messages( + NewConversationMessage( + content=welcome_message, + message_type=MessageType.chat, + ) + ) - # Coordinator conversations will not have a project_id or - # is_team_conversation flag in the metadata. So, if they are there, we just - # need to decide if it's a shareable template or a team conversation. - project_id = conversation_metadata.get("project_id") - if conversation_metadata.get("is_team_conversation", False) and project_id: - # If this conversation was imported from another, it indicates it's from - # share redemption. - if conversation.imported_from_conversation_id: - conversation_type = ConversationType.TEAM - # TODO: This might work better for detecting a redeemed link, but - # hasn't been validated. - - # if conversation_metadata.get("share_redemption") and conversation_metadata.get("share_redemption").get( - # "conversation_share_id" - # ): - # conversation_type = ConversationType.TEAM - else: - conversation_type = ConversationType.SHAREABLE_TEMPLATE - - ## - ## Handle the conversation based on its type - ## - match conversation_type: - case ConversationType.SHAREABLE_TEMPLATE: - if not project_id: - logger.error("No project ID found for shareable team conversation.") + case ConversationRole.SHAREABLE_TEMPLATE: + # Associate the shareable template with a share ID + if not share_id: + logger.error("No share ID found for shareable team conversation.") return - - await ConversationProjectManager.associate_conversation_with_project(context, project_id) + await ShareManager.set_conversation_role(context, share_id, ConversationRole.SHAREABLE_TEMPLATE) return - case ConversationType.TEAM: - if not project_id: - logger.error("No project ID found for team conversation.") + case ConversationRole.TEAM: + if not share_id: + logger.error("No share ID found for team conversation.") return # I'd put status messages here, but the attachment's extension is causing race conditions. @@ -170,13 +198,10 @@ async def on_conversation_created(context: ConversationContext) -> None: ) ) - await ConversationProjectManager.associate_conversation_with_project(context, project_id) - - # Synchronize files. - await ProjectFileManager.synchronize_files_to_team_conversation(context=context, project_id=project_id) + await ShareManager.set_conversation_role(context, share_id, ConversationRole.TEAM) + await ShareFilesManager.synchronize_files_to_team_conversation(context=context, share_id=share_id) - # Generate a welcome message. - welcome_message, debug = await generate_team_welcome_message(context) + welcome_message, debug = await agentic.generate_team_welcome_message(context) await context.send_messages( NewConversationMessage( content=welcome_message, @@ -191,7 +216,7 @@ async def on_conversation_created(context: ConversationContext) -> None: # Pop open the inspector panel. await context.send_conversation_state_event( AssistantStateEvent( - state_id="project_status", + state_id="brief", event="focus", state=None, ) @@ -199,37 +224,61 @@ async def on_conversation_created(context: ConversationContext) -> None: return - case ConversationType.COORDINATOR: - try: - project_id = await ProjectManager.create_project(context) - # A basic brief to start with. +@assistant.events.conversation.on_updated +async def on_conversation_updated(context: ConversationContext) -> None: + """ + Handle conversation updates (including title changes) and sync with shareable template. + """ + try: + conversation = await context.get_conversation() + role = await ShareManager.get_conversation_role(context) + if role != ConversationRole.COORDINATOR: + return - await ProjectManager.update_project_brief( - context=context, - title=f"New {config.Project_or_Context}", - description="_This project brief is displayed in the side panel of all of your team members' conversations, too. Before you share links to your team, ask your assistant to update the brief with whatever details you'd like here. What will help your teammates get off to a good start as they begin working on your project?_", - ) + shared_conversation_id = await ShareManager.get_shared_conversation_id(context) + if not shared_conversation_id: + return - # Create a team conversation with a share URL - share_url = await ProjectManager.create_shareable_team_conversation( - context=context, project_id=project_id + # Update the shareable template conversation's title if needed. + try: + target_context = context.for_conversation(shared_conversation_id) + target_conversation = await target_context.get_conversation() + if target_conversation.title != conversation.title: + await target_context.update_conversation_title(conversation.title) + logger.debug( + f"Updated conversation {shared_conversation_id} title from '{target_conversation.title}' to '{conversation.title}'" # noqa: E501 ) + else: + logger.debug(f"Conversation {shared_conversation_id} title already matches: '{conversation.title}'") + except Exception as title_update_error: + logger.error(f"Error updating conversation {shared_conversation_id} title: {title_update_error}") - welcome_message = config.coordinator_config.welcome_message.format( - share_url=share_url or "<Share URL generation failed>" - ) + except Exception as e: + logger.error(f"Error syncing conversation title: {e}") - except Exception as e: - welcome_message = f"I'm having trouble setting up your project. Please try again or contact support if the issue persists. {str(e)}" - # Send the welcome message - await context.send_messages( - NewConversationMessage( - content=welcome_message, - message_type=MessageType.chat, +async def store_coordinator_message(context: ConversationContext, message: ConversationMessage) -> None: + async with context.set_status("jotting..."): + try: + sender_name = "Coordinator" + if message.sender: + participants = await context.get_participants() + for participant in participants.participants: + if participant.id == message.sender.participant_id: + sender_name = participant.name + break + + await ShareManager.append_coordinator_message( + context=context, + message_id=str(message.id), + content=message.content, + sender_name=sender_name, + is_assistant=message.sender.participant_role == ParticipantRole.assistant, + timestamp=message.timestamp, ) - ) + except Exception as e: + logger.exception(f"Error storing Coordinator message for Team access: {e}") @assistant.events.conversation.message.chat.on_created @@ -245,54 +294,184 @@ async def on_message_created( } try: - project_id = await ProjectManager.get_project_id(context) - metadata["debug"]["project_id"] = project_id + share = await ShareManager.get_share(context) + metadata["debug"]["share_id"] = share.share_id + is_user_message = message.sender.participant_role == ParticipantRole.user + user_information_requests: list[str] | None = None + + # Save coordinator-role user messages for team access. + role = await ShareManager.get_conversation_role(context) + if role == ConversationRole.COORDINATOR and is_user_message: + await store_coordinator_message(context, message) + + if message.message_type == MessageType.chat and is_user_message: + async with context.set_status("pondering..."): + if role == ConversationRole.COORDINATOR: + # Update knowledge digest. + digest_task = asyncio.create_task(agentic.update_digest(context, attachments_extension)) + digest_task.add_done_callback(lambda t: t.exception() if t.done() and t.exception() else None) + + parallel_tasks = [] + + # Solicit audience and audience takeaway tasks. + audience_task = asyncio.create_task( + agentic.detect_audience_and_takeaways(context, attachments_extension) + ) + audience_task.add_done_callback(lambda t: t.exception() if t.done() and t.exception() else None) + parallel_tasks.append(audience_task) + + # Solicit knowledge package gap tasks. + gaps_task = asyncio.create_task( + agentic.detect_knowledge_package_gaps(context, attachments_extension) + ) + gaps_task.add_done_callback(lambda t: t.exception() if t.done() and t.exception() else None) + parallel_tasks.append(gaps_task) + + # Detect coordinator actions + # coordinator_actions_task = asyncio.create_task( + # agentic.detect_coordinator_actions(context, attachments_extension) + # ) + # coordinator_actions_task.add_done_callback( + # lambda t: t.exception() if t.done() and t.exception() else None + # ) + + # Run all of the tasks in parallel and wait for their return. + await asyncio.gather(*parallel_tasks, return_exceptions=True) + + # task5 = asyncio.create_task(agentic.focus(context, attachments_extension)) + # task5.add_done_callback(lambda t: t.exception() if t.done() and t.exception() else None) + + # Now, let's act on all the tasks. + await agentic.act(context, attachments_extension, metadata) + + if role == ConversationRole.TEAM: + # For team role, analyze message for possible information request needs. + # Send a notification if we think it might be one. + detection_result = await agentic.detect_information_request_needs(context, message.content) + + if ( + detection_result.get("is_information_request", False) + and detection_result.get("confidence", 0) > 0.8 + ): + suggested_title = detection_result.get("potential_title", "") + suggested_priority = detection_result.get("suggested_priority", "medium") + potential_description = detection_result.get("potential_description", "") + reason = detection_result.get("reason", "") + + # TODO: replace this with the sub-agent creating tasks. + await context.send_messages( + NewConversationMessage( + content=( + f"**Potential _Information Request_ Detected**\n\n" + f"You might need information from the knowledge coordinator. {reason}\n\n" + f"Would you like me to create an information request?\n" + f"**Title:** {suggested_title}\n" + f"**Description:** {potential_description}\n" + f"**Priority:** {suggested_priority}\n\n" + ), + message_type=MessageType.notice, + metadata={"debug": detection_result}, + ) + ) + + # Generate message. + response = await respond_to_conversation( + context, + new_message=message, + attachments_extension=attachments_extension, + metadata=metadata, + user_information_requests=user_information_requests, + ) + content = "" + if response: + content = str(response.get("content", "")) + + # strip out the username from the response + if content.startswith("["): + content = re.sub(r"\[.*\]:\s", "", content) + + # If there are more than one user participants in the conversation, we need + # to check if the model chose to remain silent. + if content and content.replace(" ", "") == SILENCE_TOKEN: + config = await assistant_config.get(context.assistant) + if config.enable_debug_output: + metadata["debug"]["silence_token"] = True + metadata["debug"]["silence_token_response"] = (content,) + await context.send_messages( + NewConversationMessage( + message_type=MessageType.notice, + content="[assistant chose to remain silent]", + metadata=metadata, + ) + ) + return - # If this is a Coordinator conversation, store the message for Team access - async with context.set_status("jotting..."): - role = await detect_assistant_role(context) - if role == ConversationRole.COORDINATOR and message.message_type == MessageType.chat: + # Prepare response. + response_parts: list[str] = [] + if not content: + return try: - if project_id: - # Get the sender's name - sender_name = "Coordinator" - if message.sender: - participants = await context.get_participants() - for participant in participants.participants: - if participant.id == message.sender.participant_id: - sender_name = participant.name - break - - # Store the message for Team access - ProjectStorage.append_coordinator_message( - project_id=project_id, - message_id=str(message.id), - content=message.content, - sender_name=sender_name, - is_assistant=message.sender.participant_role == ParticipantRole.assistant, - timestamp=message.timestamp, + if role == ConversationRole.TEAM: + output_model = TeamOutput.model_validate_json(content) + if output_model.response: + response_parts.append(output_model.response) + + if output_model.excerpt: + output_model.excerpt = output_model.excerpt.strip().strip('"') + response_parts.append(f'> _"{output_model.excerpt}"_ (excerpt)') + + if output_model.citations: + citations = ", ".join(output_model.citations) + response_parts.append(f"Sources: _{citations}_") + + if output_model.next_step_suggestion: + metadata["help"] = output_model.next_step_suggestion + + if role == ConversationRole.COORDINATOR: + output_model = CoordinatorOutput.model_validate_json(content) + if output_model.response: + response_parts.append(output_model.response) + # if output_model.next_step_suggestion: + # metadata["help"] = output_model.next_step_suggestion + + await context.send_messages( + NewConversationMessage( + content="\n\n".join(response_parts), + message_type=MessageType.chat, + metadata=metadata, ) - except Exception as e: - # Don't fail message handling if storage fails - logger.exception(f"Error storing Coordinator message for Team access: {e}") - - async with context.set_status("pondering..."): - await respond_to_conversation( - context, - new_message=message, - attachments_extension=attachments_extension, - metadata=metadata, - ) + ) + + # Save valid assistant responses for team access. + await store_coordinator_message( + context, + ConversationMessage( + id=message.id, + content_type=message.content_type, + content="\n\n".join(response_parts), + sender=message.sender, + timestamp=message.timestamp, + message_type=MessageType.chat, + filenames=[], + metadata={}, + has_debug_data=False, + ), + ) - # If the message is from a Coordinator, update the whiteboard in the background - if role == ConversationRole.COORDINATOR and message.message_type == MessageType.chat: - asyncio.create_task(ProjectManager.auto_update_whiteboard(context)) + except Exception as e: + metadata["debug"]["error"] = str(e) + logger.exception(f"exception occurred parsing json response: {e}") + NewConversationMessage( + content="I'm sorry, I encountered an error while processing the response.", + message_type=MessageType.notice, + metadata=metadata, + ) except Exception as e: logger.exception(f"Error handling message: {e}") await context.send_messages( NewConversationMessage( - content=f"Error: {str(e)}", + content=f"Error: {e!s}", message_type=MessageType.notice, metadata={"generated_content": False, **metadata}, ) @@ -312,20 +491,14 @@ async def on_command_created( try: metadata = {"debug": {"content_safety": event.data.get(content_safety.metadata_key, {})}} - # Process the command using the command processor - role = await detect_assistant_role(context) - command_processed = await command_registry.process_command(context, message, role.value) - - # If the command wasn't recognized or processed, respond normally - if not command_processed: - await respond_to_conversation( - context, - new_message=message, - attachments_extension=attachments_extension, - metadata=metadata, - ) + # Respond to the conversation + await respond_to_conversation( + context, + new_message=message, + attachments_extension=attachments_extension, + metadata=metadata, + ) finally: - # update the participant status to indicate the assistant is done thinking await context.update_participant_me(UpdateParticipant(status=None)) @@ -339,74 +512,62 @@ async def on_file_created( Handle when a file is created in the conversation. For Coordinator files: - 1. Store a copy in project storage + 1. Store a copy in share storage 2. Synchronize to all Team conversations For Team files: - 1. Use as-is without copying to project storage + 1. Use as-is without copying to share storage """ try: - project_id = await ProjectManager.get_project_id(context) - if not project_id or not file.filename: - logger.warning( - f"No project ID found or missing filename: project_id={project_id}, filename={file.filename}" - ) + if not file.filename: + logger.warning(f"No share found or missing filename. filename={file.filename}") return - role = await detect_assistant_role(context) - - # Use ProjectFileManager for file operations + share = await ShareManager.get_share(context) + role = await ShareManager.get_conversation_role(context) # Process based on role if role == ConversationRole.COORDINATOR: # For Coordinator files: - # 1. Store in project storage (marked as coordinator file) + # 1. Store in share storage (marked as coordinator file) - success = await ProjectFileManager.copy_file_to_project_storage( + success = await ShareFilesManager.copy_file_to_share_storage( context=context, - project_id=project_id, + share_id=share.share_id, file=file, is_coordinator_file=True, ) if not success: - logger.error(f"Failed to copy file to project storage: {file.filename}") + logger.error(f"Failed to copy file to share storage: {file.filename}") return # 2. Synchronize to all Team conversations # Get all Team conversations - team_conversations = await ProjectFileManager.get_team_conversations(context, project_id) + team_conversations = await ShareFilesManager.get_team_conversations(context, share.share_id) if team_conversations: for team_conv_id in team_conversations: - await ProjectFileManager.copy_file_to_conversation( + await ShareFilesManager.copy_file_to_conversation( context=context, - project_id=project_id, + share_id=share.share_id, filename=file.filename, target_conversation_id=team_conv_id, ) # 3. Update all UIs but don't send notifications to reduce noise - await ProjectNotifier.notify_project_update( - context=context, - project_id=project_id, - update_type="file_created", - message=f"Coordinator shared a file: {file.filename}", - data={"filename": file.filename}, - send_notification=False, # Don't send notification to reduce noise - ) + await Notifications.notify_all_state_update(context, [InspectorTab.DEBUG]) # Team files don't need special handling as they're already in the conversation - # Log file creation to project log for all files - await ProjectStorage.log_project_event( + # Log file creation to knowledge transfer log for all files + await ShareManager.log_share_event( context=context, - project_id=project_id, entry_type="file_shared", message=f"File shared: {file.filename}", metadata={ "file_id": getattr(file, "id", ""), "filename": file.filename, - "is_coordinator_file": role.value == "coordinator", + "is_coordinator_file": role == ConversationRole.COORDINATOR, }, ) @@ -421,56 +582,45 @@ async def on_file_updated( file: workbench_model.File, ) -> None: try: - # Get project ID - project_id = await ProjectManager.get_project_id(context) - if not project_id or not file.filename: + if not file.filename: return - role = await detect_assistant_role(context) + share = await ShareManager.get_share(context) + role = await ShareManager.get_conversation_role(context) if role == ConversationRole.COORDINATOR: # For Coordinator files: - # 1. Update in project storage - success = await ProjectFileManager.copy_file_to_project_storage( + # 1. Update in share storage + success = await ShareFilesManager.copy_file_to_share_storage( context=context, - project_id=project_id, + share_id=share.share_id, file=file, is_coordinator_file=True, ) if not success: - logger.error(f"Failed to update file in project storage: {file.filename}") + logger.error(f"Failed to update file in share storage: {file.filename}") return - team_conversations = await ProjectFileManager.get_team_conversations(context, project_id) + team_conversations = await ShareFilesManager.get_team_conversations(context, share.share_id) for team_conv_id in team_conversations: - await ProjectFileManager.copy_file_to_conversation( + await ShareFilesManager.copy_file_to_conversation( context=context, - project_id=project_id, + share_id=share.share_id, filename=file.filename, target_conversation_id=team_conv_id, ) # 3. Update all UIs but don't send notifications to reduce noise - await ProjectNotifier.notify_project_update( - context=context, - project_id=project_id, - update_type="file_updated", - message=f"Coordinator updated a file: {file.filename}", - data={"filename": file.filename}, - send_notification=False, # Don't send notification to reduce noise - ) - # Team files don't need special handling + await Notifications.notify_all_state_update(context, [InspectorTab.DEBUG]) - # Log file update to project log for all files - await ProjectStorage.log_project_event( + await ShareManager.log_share_event( context=context, - project_id=project_id, entry_type="file_shared", message=f"File updated: {file.filename}", metadata={ "file_id": getattr(file, "id", ""), "filename": file.filename, - "is_coordinator_file": role.value == "coordinator", + "is_coordinator_file": role == ConversationRole.COORDINATOR, }, ) @@ -485,43 +635,33 @@ async def on_file_deleted( file: workbench_model.File, ) -> None: try: - # Get project ID - project_id = await ProjectManager.get_project_id(context) - if not project_id or not file.filename: + if not file.filename: return - role = await detect_assistant_role(context) + share = await ShareManager.get_share(context) + role = await ShareManager.get_conversation_role(context) if role == ConversationRole.COORDINATOR: # For Coordinator files: - # 1. Delete from project storage - success = await ProjectFileManager.delete_file_from_project_storage( - context=context, project_id=project_id, filename=file.filename + # 1. Delete from share storage + success = await ShareFilesManager.delete_file_from_knowledge_share_storage( + context=context, share_id=share.share_id, filename=file.filename ) if not success: - logger.error(f"Failed to delete file from project storage: {file.filename}") + logger.error(f"Failed to delete file from share storage: {file.filename}") # 2. Update all UIs about the deletion but don't send notifications to reduce noise - await ProjectNotifier.notify_project_update( - context=context, - project_id=project_id, - update_type="file_deleted", - message=f"Coordinator deleted a file: {file.filename}", - data={"filename": file.filename}, - send_notification=False, # Don't send notification to reduce noise - ) + await Notifications.notify_all_state_update(context, [InspectorTab.DEBUG]) # Team files don't need special handling - # Log file deletion to project log for all files - await ProjectStorage.log_project_event( + await ShareManager.log_share_event( context=context, - project_id=project_id, entry_type="file_deleted", message=f"File deleted: {file.filename}", metadata={ "file_id": getattr(file, "id", ""), "filename": file.filename, - "is_coordinator_file": role.value == "coordinator", + "is_coordinator_file": role == ConversationRole.COORDINATOR, }, ) @@ -542,25 +682,24 @@ async def on_participant_joined( # Open the Brief tab (state inspector). await context.send_conversation_state_event( AssistantStateEvent( - state_id="project_status", + state_id="brief", event="focus", state=None, ) ) - role = await detect_assistant_role(context) + role = await ShareManager.get_conversation_role(context) if role != ConversationRole.TEAM: return - project_id = await ConversationProjectManager.get_associated_project_id(context) - if not project_id: + share_id = await ShareManager.get_share_id(context) + if not share_id: return - await ProjectFileManager.synchronize_files_to_team_conversation(context=context, project_id=project_id) + await ShareFilesManager.synchronize_files_to_team_conversation(context=context, share_id=share_id) - await ProjectStorage.log_project_event( + await ShareManager.log_share_event( context=context, - project_id=project_id, entry_type=LogEntryType.PARTICIPANT_JOINED, message=f"Participant joined: {participant.name}", metadata={ diff --git a/assistants/project-assistant/assistant/command_processor.py b/assistants/project-assistant/assistant/command_processor.py deleted file mode 100644 index 58a35c892..000000000 --- a/assistants/project-assistant/assistant/command_processor.py +++ /dev/null @@ -1,1126 +0,0 @@ -""" -Command processor for the project assistant. - -This module provides a unified framework for processing commands in the project assistant. -It defines a command registry, command handlers for both Coordinator and Team modes, and authorization -controls based on user roles. -""" - -import logging -from typing import Any, Awaitable, Callable, Dict, List, Optional - -from semantic_workbench_api_model.workbench_model import ( - ConversationMessage, - MessageType, - NewConversationMessage, -) -from semantic_workbench_assistant.assistant_app import ConversationContext - -from .conversation_project_link import ConversationProjectManager -from .project_data import ( - RequestPriority, - RequestStatus, -) -from .project_manager import ProjectManager -from .project_notifications import ProjectNotifier -from .project_storage import ProjectStorage -from .project_storage_models import ConversationRole - -logger = logging.getLogger(__name__) - -# Command handler function type -CommandHandlerType = Callable[[ConversationContext, ConversationMessage, List[str]], Awaitable[None]] - - -class CommandRegistry: - """Registry for command handlers with authorization controls.""" - - def __init__(self): - """Initialize the command registry.""" - self.commands: Dict[str, Dict[str, Any]] = {} - - def register_command( - self, - command_name: str, - handler: CommandHandlerType, - description: str, - usage: str, - example: str, - authorized_roles: Optional[List[str]] = None, - ) -> None: - """ - Register a command handler. - - Args: - command_name: The command name (without the '/') - handler: The function that handles the command - description: A brief description of what the command does - usage: The command usage format - example: An example of how to use the command - authorized_roles: List of roles that can use this command (None for all) - """ - self.commands[command_name] = { - "handler": handler, - "description": description, - "usage": usage, - "example": example, - "authorized_roles": authorized_roles, - } - - def is_authorized(self, command_name: str, role: str) -> bool: - """ - Check if a role is authorized to use a command. - - Args: - command_name: The command name - role: The user role - - Returns: - True if authorized, False otherwise - """ - if command_name not in self.commands: - return False - - authorized_roles = self.commands[command_name]["authorized_roles"] - if authorized_roles is None: - return True # Command available to all roles - - return role in authorized_roles - - def get_command_help(self, command_name: str) -> Optional[Dict[str, str]]: - """ - Get help information for a command. - - Args: - command_name: The command name - - Returns: - Dictionary with help information or None if command not found - """ - if command_name not in self.commands: - return None - - return { - "description": self.commands[command_name]["description"], - "usage": self.commands[command_name]["usage"], - "example": self.commands[command_name]["example"], - } - - def get_commands_for_role(self, role: str) -> Dict[str, Dict[str, Any]]: - """ - Get all commands available for a specific role. - - Args: - role: The user role - - Returns: - Dictionary of commands available to the role - """ - return {name: cmd for name, cmd in self.commands.items() if self.is_authorized(name, role)} - - async def process_command(self, context: ConversationContext, message: ConversationMessage, role: str) -> bool: - """ - Process a command message. - - Args: - context: The conversation context - message: The command message - role: The user's role (coordinator or team) - - Returns: - True if command was processed, False otherwise - """ - # Split the command and extract the command name - content = message.content.strip() - if not content.startswith("/"): - return False - - # Extract command name and arguments - parts = content.split() - command_name = parts[0][1:] # Remove the '/' prefix - args = parts[1:] if len(parts) > 1 else [] - - # Check if command exists - if command_name not in self.commands: - await context.send_messages( - NewConversationMessage( - content=f"Unknown command: /{command_name}. Type /help to see available commands.", - message_type=MessageType.notice, - ) - ) - return True - - # Check if user is authorized to use this command - if not self.is_authorized(command_name, role): - await context.send_messages( - NewConversationMessage( - content=f"The /{command_name} command is only available to {' or '.join(self.commands[command_name]['authorized_roles'])} roles. You are in {role.upper()} mode.", - message_type=MessageType.notice, - ) - ) - return True - - try: - # Execute the command handler - await self.commands[command_name]["handler"](context, message, args) - return True - except Exception as e: - logger.exception(f"Error processing command /{command_name}: {e}") - await context.send_messages( - NewConversationMessage( - content=f"Error processing command /{command_name}: {str(e)}", - message_type=MessageType.notice, - ) - ) - return True - - -# Initialize the command registry -command_registry = CommandRegistry() - - -# Command handler implementations - - -async def handle_help_command(context: ConversationContext, message: ConversationMessage, args: List[str]) -> None: - """Handle the help command.""" - # Get the conversation's role - from .conversation_project_link import ConversationProjectManager - - # First check conversation metadata - conversation = await context.get_conversation() - metadata = conversation.metadata or {} - setup_complete = metadata.get("setup_complete", False) - assistant_mode = metadata.get("assistant_mode", "setup") - metadata_role = metadata.get("project_role") - - # First check if project ID exists - if it does, setup should be considered complete - project_id = await ProjectManager.get_project_id(context) - if project_id: - # If we have a project ID, we should never show the setup instructions - setup_complete = True - - # If metadata doesn't reflect this, try to get actual role - if not metadata.get("setup_complete", False): - role = await ConversationProjectManager.get_conversation_role(context) - if role: - metadata_role = role.value - else: - # Default to team mode if we can't determine role - metadata_role = "team" - - # Special handling for setup mode - only if we truly have no project - if not setup_complete and assistant_mode == "setup" and not project_id: - # If a specific command is specified, show detailed help for that command - if args: - command_name = args[0] - if command_name.startswith("/"): - command_name = command_name[1:] # Remove the '/' prefix - - # For setup mode, only show help for setup commands - setup_commands = ["start-coordinator", "join", "help"] - - if command_name in setup_commands: - help_info = command_registry.get_command_help(command_name) - if help_info: - await context.send_messages( - NewConversationMessage( - content=f"""## Help: /{command_name} - -{help_info["description"]} - -**Usage:** {help_info["usage"]} - -**Example:** {help_info["example"]} -""", - message_type=MessageType.chat, - ) - ) - return - - # If not a setup command, show generic message - await context.send_messages( - NewConversationMessage( - content=f"The /{command_name} command is not available in setup mode. Please first use `/start-coordinator` or `/join` to establish your role.", - message_type=MessageType.notice, - ) - ) - return - - # Show setup-specific help - help_text = """## Project Assistant - -This assistant is automatically set up to help you with your project: - -- As a Coordinator: This conversation is your personal conversation for managing the project -- As a Team Member: This conversation is for collaborating on the project with others - -No setup commands needed! You're already good to go. - -Type `/help` to see all available commands for your role. -""" - - await context.send_messages( - NewConversationMessage( - content=help_text, - message_type=MessageType.chat, - ) - ) - return - - # Normal (non-setup) help processing - # Use the role from metadata, which is always the authoritative source - # Log the role for debugging - logger.debug(f"Role detection in help command - Metadata role: {metadata_role}") - - # Use the role from metadata or default to coordinator - role = metadata_role or "coordinator" # Default to coordinator if not set - - # If a specific command is specified, show detailed help for that command - if args: - command_name = args[0] - if command_name.startswith("/"): - command_name = command_name[1:] # Remove the '/' prefix - - help_info = command_registry.get_command_help(command_name) - - if help_info and command_registry.is_authorized(command_name, role): - await context.send_messages( - NewConversationMessage( - content=f"""## Help: /{command_name} - -{help_info["description"]} - -**Usage:** {help_info["usage"]} - -**Example:** {help_info["example"]} -""", - message_type=MessageType.chat, - ) - ) - else: - await context.send_messages( - NewConversationMessage( - content=f"No help available for command /{command_name} or you're not authorized to use it.", - message_type=MessageType.notice, - ) - ) - return - - # Otherwise show all available commands for the current role - available_commands = command_registry.get_commands_for_role(role) - - # Format help text based on role - if role == ConversationRole.COORDINATOR.value: - help_text = "## Assistant Commands (Coordinator Mode)\n\n" - else: - help_text = "## Assistant Commands (Team Mode)\n\n" - - # Group commands by category - project_commands = [] - whiteboard_commands = [] - request_commands = [] - team_commands = [] - status_commands = [] - info_commands = [] - - for name, cmd in available_commands.items(): - command_entry = f"- `/{name}`: {cmd['description']}" - - if "create-brief" in name or "add-goal" in name: - project_commands.append(command_entry) - elif "whiteboard" in name: - whiteboard_commands.append(command_entry) - elif "request" in name: - request_commands.append(command_entry) - elif "invite" in name or "join" in name or "list-participants" in name: - team_commands.append(command_entry) - elif "status" in name or "update" in name: - status_commands.append(command_entry) - else: - info_commands.append(command_entry) - - # Add sections to help text if they have commands - if project_commands: - help_text += "### Project Configuration\n" + "\n".join(project_commands) + "\n\n" - - if whiteboard_commands: - help_text += "### Whiteboard Management\n" + "\n".join(whiteboard_commands) + "\n\n" - - if team_commands: - help_text += "### Team Management\n" + "\n".join(team_commands) + "\n\n" - - if request_commands: - help_text += "### Information Request Management\n" + "\n".join(request_commands) + "\n\n" - - if status_commands: - help_text += "### Status Management\n" + "\n".join(status_commands) + "\n\n" - - if info_commands: - help_text += "### Information\n" + "\n".join(info_commands) + "\n\n" - - # Add role-specific guidance - if role == ConversationRole.COORDINATOR.value: - help_text += ( - "As a Coordinator, you are responsible for defining the project and responding to team member requests." - ) - else: - help_text += "As a Team member, you can access project information, request information, and report progress on project goals." - - await context.send_messages( - NewConversationMessage( - content=help_text, - message_type=MessageType.chat, - ) - ) - - -async def handle_create_brief_command( - context: ConversationContext, message: ConversationMessage, args: List[str] -) -> None: - """Handle the create-brief command.""" - # Parse the command - content = message.content.strip()[len("/create-brief") :].strip() - - if not content or "|" not in content: - await context.send_messages( - NewConversationMessage( - content="Please provide a brief title and description in the format: `/create-brief Title|Description here`", - message_type=MessageType.notice, - ) - ) - return - - # Extract title and description - try: - title, description = content.split("|", 1) - title = title.strip() - description = description.strip() - - if not title or not description: - raise ValueError("Both name and description are required") - - # Create the brief without sending a notification (we'll send our own) - briefing = await ProjectManager.update_project_brief(context, title, description, send_notification=False) - - if briefing: - await context.send_messages( - NewConversationMessage( - content=f"Brief '{title}' updated successfully.", - message_type=MessageType.chat, - ) - ) - else: - await context.send_messages( - NewConversationMessage( - content="Failed to update brief. Please try again.", - message_type=MessageType.notice, - ) - ) - except Exception as e: - logger.exception(f"Error updating brief: {e}") - await context.send_messages( - NewConversationMessage( - content=f"Error updating brief: {str(e)}", - message_type=MessageType.notice, - ) - ) - - -async def handle_add_goal_command(context: ConversationContext, message: ConversationMessage, args: List[str]) -> None: - """Handle the add-goal command.""" - # Parse the command - content = message.content.strip()[len("/add-goal") :].strip() - - if not content or "|" not in content: - await context.send_messages( - NewConversationMessage( - content="Please provide a goal name, description, and success criteria in the format: `/add-goal Goal Name|Goal description|Success criteria 1;Success criteria 2`", - message_type=MessageType.notice, - ) - ) - return - - # Extract goal details - try: - parts = content.split("|") - - if len(parts) < 2: - raise ValueError("Goal name and description are required") - - goal_name = parts[0].strip() - goal_description = parts[1].strip() - - # Parse success criteria if provided - success_criteria = [] - if len(parts) > 2 and parts[2].strip(): - criteria_list = parts[2].strip().split(";") - success_criteria = [c.strip() for c in criteria_list if c.strip()] - - if not goal_name or not goal_description: - raise ValueError("Both goal name and description are required") - - # Get project ID - project_id = await ConversationProjectManager.get_associated_project_id(context) - if not project_id: - await context.send_messages( - NewConversationMessage( - content="You are not associated with a project. Please create one first with `/create-brief`.", - message_type=MessageType.notice, - ) - ) - return - - # Use the dedicated method to add a goal to the project - goal = await ProjectManager.add_project_goal( - context=context, - goal_name=goal_name, - goal_description=goal_description, - success_criteria=success_criteria, - ) - - if goal: - # Notify all linked conversations about the update - await ProjectNotifier.notify_project_update( - context=context, - project_id=project_id, - update_type="briefing", - message=f"Goal added to project: {goal_name}", - ) - - # Build success criteria message - criteria_msg = "" - if success_criteria: - criteria_list = "\n".join([f"- {c}" for c in success_criteria]) - criteria_msg = f"\n\nSuccess Criteria:\n{criteria_list}" - - await context.send_messages( - NewConversationMessage( - content=f"Goal '{goal_name}' added successfully.{criteria_msg}", - message_type=MessageType.chat, - ) - ) - else: - await context.send_messages( - NewConversationMessage( - content="Failed to add new goal. Please try again.", - message_type=MessageType.notice, - ) - ) - except Exception as e: - logger.exception(f"Error adding goal: {e}") - await context.send_messages( - NewConversationMessage( - content=f"Error adding goal: {str(e)}", - message_type=MessageType.notice, - ) - ) - - -async def handle_request_info_command( - context: ConversationContext, message: ConversationMessage, args: List[str] -) -> None: - """Handle the request-info command.""" - # Parse the command - content = message.content.strip()[len("/request-info") :].strip() - - if not content or "|" not in content: - await context.send_messages( - NewConversationMessage( - content="Please provide a request title and description in the format: `/request-info Request Title|Description of what you need|priority` (priority is optional: low, medium, high, critical)", - message_type=MessageType.notice, - ) - ) - return - - # Extract request details - try: - parts = content.split("|") - - title = parts[0].strip() - description = parts[1].strip() if len(parts) > 1 else "" - priority_str = parts[2].strip().lower() if len(parts) > 2 else "medium" - - if not title or not description: - raise ValueError("Both request title and description are required") - - # Map priority string to enum - priority_map = { - "low": RequestPriority.LOW, - "medium": RequestPriority.MEDIUM, - "high": RequestPriority.HIGH, - "critical": RequestPriority.CRITICAL, - } - priority = priority_map.get(priority_str, RequestPriority.MEDIUM) - - # Create the information request - success, request = await ProjectManager.create_information_request( - context=context, title=title, description=description, priority=priority - ) - - if success and request: - await context.send_messages( - NewConversationMessage( - content=f"Information request '{title}' created successfully with {priority_str} priority. The Coordinator has been notified and will respond to your request.", - message_type=MessageType.chat, - ) - ) - else: - await context.send_messages( - NewConversationMessage( - content="Failed to create information request. Please try again.", - message_type=MessageType.notice, - ) - ) - except Exception as e: - logger.exception(f"Error creating information request: {e}") - await context.send_messages( - NewConversationMessage( - content=f"Error creating information request: {str(e)}", - message_type=MessageType.notice, - ) - ) - - -async def handle_update_status_command( - context: ConversationContext, message: ConversationMessage, args: List[str] -) -> None: - """Handle the update-status command.""" - # Parse the command - content = message.content.strip()[len("/update-status") :].strip() - - if not content: - await context.send_messages( - NewConversationMessage( - content="Please provide status information in the format: `/update-status status|progress|message` (e.g., `/update-status in_progress|75|Making good progress on objectives`)", - message_type=MessageType.notice, - ) - ) - return - - # Extract status details - try: - parts = content.split("|") - - status = parts[0].strip() if parts else None - progress_str = parts[1].strip() if len(parts) > 1 else None - status_message = parts[2].strip() if len(parts) > 2 else None - - # Convert progress to int if provided - progress = None - if progress_str: - try: - progress = int(progress_str) - # Ensure progress is between 0-100 - progress = max(0, min(100, progress)) - except ValueError: - progress = None - - # Update the project status - success, status_obj = await ProjectManager.update_project_state( - context=context, state=status, status_message=status_message - ) - - if success and status_obj: - # Format progress as percentage if available - progress_text = f" ({progress}% complete)" if progress is not None else "" - - await context.send_messages( - NewConversationMessage( - content=f"Project status updated to '{status}'{progress_text}. All project participants will see this update.", - message_type=MessageType.chat, - ) - ) - else: - await context.send_messages( - NewConversationMessage( - content="Failed to update project status. Please try again.", - message_type=MessageType.notice, - ) - ) - except Exception as e: - logger.exception(f"Error updating project status: {e}") - await context.send_messages( - NewConversationMessage( - content=f"Error updating project status: {str(e)}", - message_type=MessageType.notice, - ) - ) - - -async def handle_resolve_request_command( - context: ConversationContext, message: ConversationMessage, args: List[str] -) -> None: - """Handle the resolve-request command.""" - # Parse the command - content = message.content.strip()[len("/resolve-request") :].strip() - - if not content or "|" not in content: - await context.send_messages( - NewConversationMessage( - content="Please provide a request ID and resolution in the format: `/resolve-request request_id|Resolution information here`", - message_type=MessageType.notice, - ) - ) - return - - try: - # Extract request ID and resolution - request_id, resolution = content.split("|", 1) - request_id = request_id.strip() - resolution = resolution.strip() - - if not request_id or not resolution: - raise ValueError("Both request ID and resolution are required") - - # Show all information requests if the user doesn't know the ID - if request_id.lower() == "list": - await context.send_messages( - NewConversationMessage( - content="Here are the active information requests:", - message_type=MessageType.notice, - ) - ) - - # Get information requests - requests = await ProjectManager.get_information_requests(context) - - # Filter for active requests - active_requests = [r for r in requests if r.status != RequestStatus.RESOLVED] - - if active_requests: - request_list = ["## Active Information Requests\n"] - - for request in active_requests: - request_list.append(f"**ID**: `{request.request_id}`") - request_list.append(f"**Title**: {request.title}") - request_list.append(f"**Priority**: {request.priority.value}") - request_list.append(f"**Description**: {request.description}") - request_list.append("") - - await context.send_messages( - NewConversationMessage( - content="\n".join(request_list), - message_type=MessageType.chat, - ) - ) - else: - await context.send_messages( - NewConversationMessage( - content="No active information requests found.", - message_type=MessageType.notice, - ) - ) - return - - # Resolve the information request - success, info_request = await ProjectManager.resolve_information_request( - context=context, request_id=request_id, resolution=resolution - ) - - if success and info_request: - await context.send_messages( - NewConversationMessage( - content=f"Information request '{info_request.title}' has been resolved. The Team has been notified.", - message_type=MessageType.chat, - ) - ) - else: - await context.send_messages( - NewConversationMessage( - content="Failed to resolve the information request. Make sure the request ID is correct and the request is not already resolved.", - message_type=MessageType.notice, - ) - ) - - # Suggest listing all requests to help the user - await context.send_messages( - NewConversationMessage( - content="Use `/resolve-request list|` to view all information requests and their IDs.", - message_type=MessageType.notice, - ) - ) - except Exception as e: - logger.exception(f"Error resolving information request: {e}") - await context.send_messages( - NewConversationMessage( - content=f"Error resolving information request: {str(e)}", - message_type=MessageType.notice, - ) - ) - - -async def handle_project_info_command( - context: ConversationContext, message: ConversationMessage, args: List[str] -) -> None: - """Handle the project-info command.""" - # Parse the command - content = " ".join(args).strip().lower() - - try: - # Determine which information to show - info_type = content if content else "all" - - if info_type not in ["all", "brief", "whiteboard", "status", "requests"]: - await context.send_messages( - NewConversationMessage( - content="Please specify what information you want to see: `/project-info [brief|whiteboard|status|requests]`", - message_type=MessageType.notice, - ) - ) - return - - # Get the requested information - output = [] - - # Always show project ID at the top for easy access - project_id = await ProjectManager.get_project_id(context) - if project_id: - # Check if Coordinator or Team - role = await ProjectManager.get_project_role(context) - if role == ConversationRole.COORDINATOR: - # For Coordinator, make it prominent with instructions - output.append(f"## Project ID: `{project_id}`") - output.append(f"_Share this ID with team members so they can join using_ `/join {project_id}`\n") - else: - # For Team, just show the ID - output.append(f"## Project ID: `{project_id}`\n") - - # Get brief if requested - if info_type in ["all", "brief"]: - briefing = await ProjectManager.get_project_brief(context) - - if briefing: - # Format briefing information - output.append(f"## Brief: {briefing.title}") - output.append(f"\n{briefing.description}\n") - - # Get project to access goals - if project_id: - project = ProjectStorage.read_project(project_id) - if project and project.goals: - output.append("\n### Goals:\n") - - for i, goal in enumerate(project.goals): - # Count completed criteria - completed = sum(1 for c in goal.success_criteria if c.completed) - total = len(goal.success_criteria) - - output.append(f"{i + 1}. **{goal.name}** - {goal.description}") - - if goal.success_criteria: - output.append(f" Progress: {completed}/{total} criteria complete") - output.append(" Success Criteria:") - - for j, criterion in enumerate(goal.success_criteria): - status = "✅" if criterion.completed else "⬜" - output.append(f" {status} {criterion.description}") - - output.append("") - - # Get project whiteboard if requested - if info_type in ["all", "whiteboard"]: - whiteboard = await ProjectManager.get_project_whiteboard(context) - - if whiteboard and whiteboard.content: - output.append("\n## Project Whiteboard\n") - output.append(whiteboard.content) - output.append("") - - if whiteboard.is_auto_generated: - output.append("*This whiteboard content is automatically updated by the assistant.*") - else: - output.append("*This whiteboard content has been manually edited.*") - - output.append("") - elif info_type == "whiteboard": - output.append("\n## Project Whiteboard\n") - output.append( - "*No whiteboard content available yet. Content will be automatically generated as the project progresses.*" - ) - - # Get project status if requested - if info_type in ["all", "status"]: - project_info = await ProjectManager.get_project_info(context) - - if project_info: - output.append("\n## Project Status\n") - output.append(f"**Current Status**: {project_info.state.value}") - - if project_info.status_message: - output.append(f"**Status Message**: {project_info.status_message}") - - # Success criteria status can be calculated from the brief if needed later - elif info_type == "status": - output.append("\n## Project Status\n") - output.append("*No project status defined yet. Update status with `/update-status`.*") - - # Get information requests if requested - if info_type in ["all", "requests"]: - requests = await ProjectManager.get_information_requests(context) - - if requests: - output.append("\n## Information Requests\n") - - # Group requests by status - active_requests = [r for r in requests if r.status != RequestStatus.RESOLVED] - resolved_requests = [r for r in requests if r.status == RequestStatus.RESOLVED] - - if active_requests: - output.append("### Active Requests\n") - - for request in active_requests: - priority_marker = { - RequestPriority.LOW.value: "🔹", - RequestPriority.MEDIUM.value: "🔶", - RequestPriority.HIGH.value: "🔴", - RequestPriority.CRITICAL.value: "⚠️", - }.get(request.priority.value, "🔹") - - # Include request ID for easy reference when resolving - output.append(f"{priority_marker} **{request.title}** ({request.status.value})") - output.append(f" ID: `{request.request_id}`") - output.append(f" {request.description}") - - if request.updates: - last_update = request.updates[-1] - output.append(f" *Last update: {last_update.get('message', '')}*") - - output.append("") - - if resolved_requests and info_type == "requests": - output.append("### Resolved Requests\n") - - for request in resolved_requests[:5]: # Show only the 5 most recent - output.append(f"✅ **{request.title}** ({request.status.value})") - output.append(f" ID: `{request.request_id}`") - - if request.resolution: - output.append(f" Resolution: {request.resolution}") - - output.append("") - elif info_type == "requests": - output.append("\n## Information Requests\n") - output.append("*No information requests created yet. Request information with `/request-info`.*") - - # If no data was found for any category - if not output: - output.append("No project information found. Start by creating a brief with `/create-brief`.") - - # Send the formatted information - await context.send_messages( - NewConversationMessage( - content="\n".join(output), - message_type=MessageType.chat, - ) - ) - - except Exception as e: - logger.exception(f"Error displaying project info: {e}") - await context.send_messages( - NewConversationMessage( - content=f"Error displaying project information: {str(e)}", - message_type=MessageType.notice, - ) - ) - - -async def handle_list_participants_command( - context: ConversationContext, message: ConversationMessage, args: List[str] -) -> None: - """Handle the list-participants command.""" - try: - # Get project ID - project_id = await ConversationProjectManager.get_associated_project_id(context) - if not project_id: - await context.send_messages( - NewConversationMessage( - content="You are not associated with a project.", - message_type=MessageType.notice, - ) - ) - return - - # Get all linked conversations - linked_conversation_ids = await ConversationProjectManager.get_linked_conversations(context) - - if not linked_conversation_ids: - await context.send_messages( - NewConversationMessage( - content="No linked conversations found. Invite participants with the `/invite` command.", - message_type=MessageType.notice, - ) - ) - return - - # Get participant information for all linked conversations - output = ["## Project Participants\n"] - - # First add information about this conversation - participants = await context.get_participants() - - output.append("### Coordinator Team\n") - for participant in participants.participants: - if participant.id != context.assistant.id: - output.append(f"- {participant.name}") - - # In the simplified implementation, we don't have detail about the linked conversations - # For a more complete implementation, we would need to get information - # about each linked conversation - - # For now, just report that we have no other team members - output.append("\n*No team members yet. Invite team members with the `/invite` command.*") - - # Send the information - await context.send_messages( - NewConversationMessage( - content="\n".join(output), - message_type=MessageType.chat, - ) - ) - - except Exception as e: - logger.exception(f"Error listing participants: {e}") - await context.send_messages( - NewConversationMessage( - content=f"Error listing participants: {str(e)}", - message_type=MessageType.notice, - ) - ) - - -# File synchronization command handler -async def handle_sync_files_command( - context: ConversationContext, message: ConversationMessage, args: List[str] -) -> None: - """ - Handle the sync-files command which synchronizes shared files from Coordinator to Team. - - This is primarily for Team members to explicitly request a file sync - if they suspect files are out of sync or missing. - """ - try: - # Get project ID - project_id = await ProjectManager.get_project_id(context) - if not project_id: - await context.send_messages( - NewConversationMessage( - content="You are not associated with a project. Please join a project first.", - message_type=MessageType.notice, - ) - ) - return - - # Import the file manager - from .project_files import ProjectFileManager - - # Start sync with a simple message - await context.send_messages( - NewConversationMessage( - content="Synchronizing files from project...", - message_type=MessageType.notice, - ) - ) - - # Perform synchronization directly - this handles all error messaging - await ProjectFileManager.synchronize_files_to_team_conversation(context=context, project_id=project_id) - - except Exception as e: - logger.exception(f"Error synchronizing files: {e}") - await context.send_messages( - NewConversationMessage( - content=f"Error synchronizing files: {str(e)}", - message_type=MessageType.notice, - ) - ) - - -# General commands (available to all) -command_registry.register_command( - "help", - handle_help_command, - "Get help with available commands", - "/help [command]", - "/help project-info", - None, # Available to all roles -) - -command_registry.register_command( - "project-info", - handle_project_info_command, - "View project information", - "/project-info [brief|whiteboard|status|requests]", - "/project-info brief", - None, # Available to all roles -) - -# Team management commands -# Note: Manual project joining with /join is no longer needed - users just click the share URL - -command_registry.register_command( - "list-participants", - handle_list_participants_command, - "List all project participants", - "/list-participants", - "/list-participants", - ["coordinator"], # Only Coordinator can list participants -) - - -# Coordinator commands -command_registry.register_command( - "create-brief", - handle_create_brief_command, - "Create a brief", - "/create-brief Title|Description", - "/create-brief Website Redesign|We need to modernize our company website to improve user experience and conversions.", - ["coordinator"], # Only Coordinator can create briefs -) - -command_registry.register_command( - "add-goal", - handle_add_goal_command, - "Add a goal", - "/add-goal Goal Name|Goal description|Success criterion 1;Success criterion 2", - "/add-goal Redesign Homepage|Create a new responsive homepage|Design approved by stakeholders;Mobile compatibility verified", - ["coordinator"], # Only Coordinator can add goals -) - - -command_registry.register_command( - "resolve-request", - handle_resolve_request_command, - "Resolve an information request", - "/resolve-request request_id|Resolution information", - "/resolve-request abc123|The API documentation can be found at docs.example.com/api", - ["coordinator"], # Only Coordinator can resolve requests -) - -# Team commands -command_registry.register_command( - "request-info", - handle_request_info_command, - "Request information or assistance from the Coordinator", - "/request-info Request Title|Request description|priority", - "/request-info Need API Documentation|I need access to the API documentation for integration|high", - ["team"], # Only team can create requests -) - -command_registry.register_command( - "update-status", - handle_update_status_command, - "Update project status and progress", - "/update-status status|progress|message", - "/update-status in_progress|50|Completed homepage wireframes, working on mobile design", - ["team"], # Only team can update status -) - -# File synchronization command (primarily for team members) -command_registry.register_command( - "sync-files", - handle_sync_files_command, - "Synchronize shared files from the project to this conversation", - "/sync-files", - "/sync-files", - ["team"], # Primarily for team members -) diff --git a/assistants/project-assistant/assistant/common.py b/assistants/project-assistant/assistant/common.py new file mode 100644 index 000000000..71d566d47 --- /dev/null +++ b/assistants/project-assistant/assistant/common.py @@ -0,0 +1,41 @@ +""" +Common utilities shared between knowledge transfer assistant modes. + +This module provides shared functionality for team and coordinator conversation handlers, +helping to reduce code duplication and maintain consistency. +""" + +from semantic_workbench_assistant.assistant_app import ConversationContext + +from .data import LogEntryType +from .domain.share_manager import ShareManager + + +async def log_transfer_action( + context: ConversationContext, + entry_type: LogEntryType, + message: str, + related_entity_id: str | None = None, + additional_metadata: dict | None = None, +) -> None: + """ + Log an action to the knowledge transfer log. + + This utility function handles retrieving the share ID and logging the event + using the appropriate storage mechanism. It's used by both Coordinator and Team mode + handlers to maintain consistent logging. + + Args: + context: The conversation context + entry_type: Type of log entry + message: Human-readable description of the action + related_entity_id: Optional ID of a related entity (e.g., request ID) + additional_metadata: Optional additional metadata to include in the log + """ + await ShareManager.log_share_event( + context=context, + entry_type=entry_type.value, + message=message, + related_entity_id=related_entity_id, + metadata=additional_metadata, + ) diff --git a/assistants/project-assistant/assistant/config.py b/assistants/project-assistant/assistant/config.py index 47fbe28f1..507819b1e 100644 --- a/assistants/project-assistant/assistant/config.py +++ b/assistants/project-assistant/assistant/config.py @@ -14,7 +14,7 @@ class RequestConfig(BaseModel): model_config = ConfigDict( - title="Response Generation", + title="Response generation", json_schema_extra={ "required": ["max_tokens", "response_tokens", "openai_model"], }, @@ -23,7 +23,7 @@ class RequestConfig(BaseModel): max_tokens: Annotated[ int, Field( - title="Max Tokens", + title="Max tokens", description=( "The maximum number of tokens to use for both the prompt and response. Current max supported by OpenAI" " is 128k tokens, but varies by model (https://platform.openai.com/docs/models)" @@ -34,7 +34,7 @@ class RequestConfig(BaseModel): response_tokens: Annotated[ int, Field( - title="Response Tokens", + title="Response tokens", description=( "The number of tokens to use for the response, will reduce the number of tokens available for the" " prompt. Current max supported by OpenAI is 4096 tokens (https://platform.openai.com/docs/models)" @@ -45,82 +45,69 @@ class RequestConfig(BaseModel): coordinator_conversation_token_limit: Annotated[ int, Field( - title="Coordinator Conversation Token Limit", + title="Coordinator conversation token limit", description="The maximum number of tokens to use for the coordinator conversation history.", ), ] = 4000 openai_model: Annotated[ str, - Field(title="OpenAI Model", description="The OpenAI model to use for generating responses."), - ] = "gpt-4o" + Field( + title="OpenAI model", + description="The OpenAI model to use for generating responses.", + ), + ] = "gpt-4.1" class PromptConfig(BaseModel): model_config = ConfigDict( - title="Prompt Templates", + title="Prompt templates", json_schema_extra={ "required": [ - "coordinator_role", "coordinator_instructions", - "team_role", "team_instructions", - "whiteboard_prompt", - "project_information_request_detection", + "share_information_request_detection", + "update_knowledge_digest", + "welcome_message_generation", ], }, ) - coordinator_role: Annotated[ - str, - Field( - title="Coordinator Role", - description="The role of the coordinator assistant. This is added to the prompt when in coordinator mode.", - ), - UISchema(widget="textarea"), - ] = load_text_include("coordinator_role.txt") - coordinator_instructions: Annotated[ str, Field( - title="Coordinator Instructions", - description="The instructions to give the coordinator assistant. This is added to the prompt when in coordinator mode.", - ), - UISchema(widget="textarea"), - ] = load_text_include("coordinator_instructions.txt") - - team_role: Annotated[ - str, - Field( - title="Team Role", - description="The role of the team assistant. This is added to the prompt when in team member mode.", + title="Coordinator instructions", + description="The instructions to give the coordinator assistant. This is added to the prompt when in coordinator mode.", # noqa: E501 ), UISchema(widget="textarea"), - ] = load_text_include("team_role.txt") + ] = load_text_include("coordinator_instructions.md") team_instructions: Annotated[ str, Field( - title="Team Instructions", - description="The instructions to give the team assistant. This is added to the prompt when in team member mode.", + title="Team instructions", + description="The instructions to give the team assistant. This is added to the prompt when in team member mode.", # noqa: E501 ), UISchema(widget="textarea"), ] = load_text_include("team_instructions.txt") - project_information_request_detection: Annotated[ + detect_information_request_needs: Annotated[ str, Field( - title="Information Request Detection Prompt", - description="The prompt used to detect information requests in project assistant mode.", + title="Information Request detection prompt", + description="The prompt used to detect information requests in knowledge transfer mode.", ), UISchema(widget="textarea"), - ] = load_text_include("project_information_request_detection.txt") + ] = load_text_include("detect_information_request_needs.md") - whiteboard_prompt: Annotated[ + update_knowledge_digest: Annotated[ str, - Field(title="Whiteboard Prompt", description="The prompt used to generate whiteboard content."), + Field( + title="Knowledge Digest update prompt", + description="The prompt used to generate updated knowledge digest content.", + ), UISchema(widget="textarea"), - ] = load_text_include("whiteboard_prompt.txt") + ] = load_text_include("update_knowledge_digest.md") welcome_message_generation: Annotated[ str, @@ -134,9 +121,9 @@ class PromptConfig(BaseModel): class CoordinatorConfig(BaseModel): model_config = ConfigDict( - title="Coordinator Configuration", + title="Coordinator configuration", json_schema_extra={ - "required": ["welcome_message", "prompt_for_files"], + "required": ["welcome_message", "preferred_communication_style", "max_digest_tokens"], }, ) @@ -144,70 +131,79 @@ class CoordinatorConfig(BaseModel): str, Field( title="Coordinator Welcome Message", - description="The message to display when a coordinator starts a new project. {share_url} will be replaced with the actual URL.", + description="The message to display when a coordinator starts a new knowledge transfer. {share_url} will be replaced with the actual URL.", # noqa: E501 ), UISchema(widget="textarea"), - ] = """# Welcome to the Project Assistant + ] = """# Welcome to Knowledge Transfer -This conversation is your personal conversation as the project coordinator. +Welcome! I'm here to help you capture and share knowledge in a way that others can easily explore and understand. +Think of me as your personal knowledge bridge - I'll help you: -**To invite team members to your project, copy and share this link with them:** -[Join Team Conversation]({share_url}) +- 📚 Organize your thoughts - whether from documents, code, research papers, or brainstorming sessions +- 🔄 Establish shared understanding - I'll ask questions to ensure we're aligned on what matters most +- 🎯 Define learning objectives - so we can track progress and outcomes +- 🔍 Make your knowledge interactive - so others can explore the "why" behind decisions, alternatives considered, + and deeper context -I've created a brief for your project. Let's start by updating it with your project goals and details.""" +Simply share your content or ideas, tell me who needs to understand them, and what aspects you want to highlight. +I'll capture what knowledge you give me so it can be shared with your team members for them to explore at their own pace. - prompt_for_files: Annotated[ - str, +In the side panel, you can see your "knowledge brief". This brief will be shared with your team members and will +help them understand the content of your knowledge transfer. You can ask me to update it at any time. + +To get started, let's discuss your audience. Who are you going to be sharing your knowledge with?""" # noqa: E501 + + max_digest_tokens: Annotated[ + int, Field( - title="File Upload Prompt", - description="The message used to prompt project coordinators to upload relevant files.", + title="Maximum digest tokens", + description=("The number of tokens to use for the knowledge digest. Default: 4096"), ), - UISchema(widget="textarea"), - ] = "To begin building your project context, would you like to upload any relevant files like documents, images, or data that your team will need? You can drag and drop files directly into this conversation." + ] = 4_096 - list_participants_command: Annotated[ + preferred_communication_style: Annotated[ str, Field( - title="List Participants Command", - description="The command project coordinators can use to list all participants (without the slash).", + title="Preferred communication style", + description="The preferred communication style for the assistant. This is used to tailor responses.", ), - ] = "list-participants" + UISchema(widget="textarea"), + ] = "Speak plainly. Keep your responses short and concise to create a more collaborative dynamic. Use no filler words or unnecessary content." # noqa: E501 class TeamConfig(BaseModel): model_config = ConfigDict( - title="Team Member Configuration", + title="Team-member configuration", json_schema_extra={ - "required": ["default_welcome_message", "status_command"], + "required": ["default_welcome_message", "preferred_communication_style"], }, ) default_welcome_message: Annotated[ str, Field( - title="Team Welcome Message", - description="The message to display when a user joins a project as a Team member. Shown after successfully joining a project.", + title="Team Welcome message", + description="The message to display when a user joins a knowledge transfer as a Team member. Shown after successfully joining a knowledge transfer.", # noqa: E501 ), UISchema(widget="textarea"), - ] = "# Welcome to Your Team Conversation\n\nYou've joined this project as a team member. This is your personal conversation for working on the project. You can communicate with the assistant, make information requests, and track your progress here." + ] = "# Welcome to Your Team Conversation\n\nYou've joined as a team member. This is your personal conversation for exploring the knowledge share. You can communicate with the assistant, make information requests, and track your progress here." # noqa: E501 - status_command: Annotated[ + preferred_communication_style: Annotated[ str, Field( - title="Status Command", - description="The command project participants can use to check project status (without the slash).", + title="Preferred communication style", + description="The preferred communication style for the assistant. This is used to tailor responses.", ), - ] = "project-status" + UISchema(widget="textarea"), + ] = "Speak plainly. Keep your responses short and concise to create a more collaborative dynamic. Use no filler words or unnecessary content. Users tend to not want to read long answers and will skip over text. Let the user ask for longer information as needed." # noqa: E501 # Base Assistant Configuration - shared by all templates class AssistantConfigModel(BaseModel): - project_or_context: Annotated[str, UISchema(widget="hidden")] = "project" - Project_or_Context: Annotated[str, UISchema(widget="hidden")] = "Project" enable_debug_output: Annotated[ bool, Field( - title="Include Debug Output", + title="Include debug output", description="Include debug output on conversation messages.", ), ] = False @@ -215,7 +211,7 @@ class AssistantConfigModel(BaseModel): prompt_config: Annotated[ PromptConfig, Field( - title="Prompt Configuration", + title="Prompt configuration", description="Configuration for prompt templates used throughout the assistant.", ), ] = PromptConfig() @@ -223,7 +219,7 @@ class AssistantConfigModel(BaseModel): request_config: Annotated[ RequestConfig, Field( - title="Request Configuration", + title="Request configuration", ), ] = RequestConfig() @@ -232,14 +228,14 @@ class AssistantConfigModel(BaseModel): content_safety_config: Annotated[ CombinedContentSafetyEvaluatorConfig, Field( - title="Content Safety Configuration", + title="Content Safety configuration", ), ] = CombinedContentSafetyEvaluatorConfig() attachments_config: Annotated[ AttachmentsConfigModel, Field( - title="Attachments Configuration", + title="Attachments configuration", description="Configuration for handling file attachments in messages.", ), ] = AttachmentsConfigModel() @@ -248,47 +244,26 @@ class AssistantConfigModel(BaseModel): auto_sync_files: Annotated[ bool, Field( - title="Auto-sync Files", + title="Auto-sync files", description="Automatically synchronize files between linked conversations.", ), ] = True - track_progress: Annotated[ - bool, - Field( - title="Track Progress", - description="Track project progress with goals, criteria completion, and overall project state.", - ), - ] = True - - proactive_guidance: Annotated[ - bool, - Field( - title="Proactive Guidance", - description="Proactively guide project coordinators through context building.", - ), - ] = True - coordinator_config: Annotated[ CoordinatorConfig, Field( - title="Coordinator Configuration", - description="Configuration for project coordinators.", + title="Coordinator configuration", + description="Configuration for knowledge transfer coordinators.", ), ] = CoordinatorConfig() team_config: Annotated[ TeamConfig, Field( - title="Team Configuration", - description="Configuration for project team members.", + title="Team configuration", + description="Configuration for knowledge transfer team members.", ), ] = TeamConfig() -assistant_config = BaseModelAssistantConfig( - AssistantConfigModel, - additional_templates={ - "knowledge_transfer": AssistantConfigModel, - }, -) +assistant_config = BaseModelAssistantConfig(AssistantConfigModel) diff --git a/assistants/project-assistant/assistant/conversation_clients.py b/assistants/project-assistant/assistant/conversation_clients.py index d945811f0..846caaf03 100644 --- a/assistants/project-assistant/assistant/conversation_clients.py +++ b/assistants/project-assistant/assistant/conversation_clients.py @@ -1,21 +1,20 @@ """ Project assistant functionality for cross-conversation communication. -This module handles the project assistant's core functionality for managing +This module handles the knowledge transfer assistant's core functionality for managing communication between conversations. It provides utilities for creating temporary contexts and accessing other conversations. """ -from typing import Any, Optional, Tuple +from typing import Any from semantic_workbench_api_model.workbench_service_client import ConversationAPIClient from semantic_workbench_assistant.assistant_app import ConversationContext from semantic_workbench_assistant.storage import read_model -from .conversation_project_link import ConversationProjectManager +from .data import ConversationRole, ConversationShareInfo from .logging import logger -from .project_storage import ProjectStorageManager -from .project_storage_models import ConversationRole +from .storage import ShareStorageManager class ConversationClientManager: @@ -23,7 +22,7 @@ class ConversationClientManager: Manages API clients for accessing other conversations. This utility class provides methods for creating API clients and temporary contexts - that can be used to interact with other conversations in the same project. + that can be used to interact with other conversations in the same knowledge transfer. """ @staticmethod @@ -34,14 +33,14 @@ def get_conversation_client(context: ConversationContext, conversation_id: str) return context.for_conversation(conversation_id)._conversation_client @staticmethod - async def get_coordinator_client_for_project( - context: ConversationContext, project_id: str - ) -> Tuple[Optional[Any], Optional[str]]: + async def get_coordinator_client_for_share( + context: ConversationContext, share_id: str + ) -> tuple[Any | None, str | None]: """ - Gets a client for accessing the Coordinator conversation for a project. + Gets a client for accessing the Coordinator conversation for a knowledge transfer. """ # Look for the Coordinator conversation directory - coordinator_dir = ProjectStorageManager.get_project_dir(project_id) / ConversationRole.COORDINATOR + coordinator_dir = ShareStorageManager.get_share_dir(share_id) / ConversationRole.COORDINATOR if not coordinator_dir.exists(): return None, None @@ -53,7 +52,7 @@ async def get_coordinator_client_for_project( return None, None # Read the role information to get the Coordinator conversation ID - role_data = read_model(role_file, ConversationProjectManager.ConversationRoleInfo) + role_data = read_model(role_file, ConversationShareInfo) if not role_data or not role_data.conversation_id: return None, None @@ -71,7 +70,7 @@ async def get_coordinator_client_for_project( @staticmethod async def create_temporary_context_for_conversation( source_context: ConversationContext, target_conversation_id: str - ) -> Optional[ConversationContext]: + ) -> ConversationContext | None: """ Creates a temporary context for the target conversation ID. """ diff --git a/assistants/project-assistant/assistant/conversation_project_link.py b/assistants/project-assistant/assistant/conversation_project_link.py deleted file mode 100644 index 8178d2f6e..000000000 --- a/assistants/project-assistant/assistant/conversation_project_link.py +++ /dev/null @@ -1,131 +0,0 @@ -""" -Manages associations between conversations and projects. - -This module handles the linking of conversations to projects, -defining roles (Coordinator/Team) and maintaining relationships. -""" - -from typing import List, Optional - -from pydantic import BaseModel -from semantic_workbench_assistant.assistant_app import ConversationContext -from semantic_workbench_assistant.storage import read_model, write_model - -from .logging import logger -from .project_storage import ProjectStorageManager -from .project_storage_models import ConversationRole - - -class ConversationProjectManager: - """Manages the association between conversations and projects.""" - - class ConversationRoleInfo(BaseModel): - """Stores a conversation's role in a project.""" - - project_id: str - role: ConversationRole - conversation_id: str - - class ProjectAssociation(BaseModel): - """Stores a conversation's project association.""" - - project_id: str - - @staticmethod - async def get_linked_conversations(context: ConversationContext) -> List[str]: - """ - Gets all conversations linked to this one through the same project. - """ - try: - # Get project ID - project_id = await ConversationProjectManager.get_associated_project_id(context) - if not project_id: - return [] - - # Get the linked conversations directory - linked_dir = ProjectStorageManager.get_linked_conversations_dir(project_id) - if not linked_dir.exists(): - return [] - - # Get all conversation files in the directory - result = [] - conversation_id = str(context.id) - - # Each file in the directory represents a linked conversation - # The filename itself is the conversation ID - for file_path in linked_dir.glob("*"): - if file_path.is_file(): - # The filename is the conversation ID - conv_id = file_path.name - if conv_id != conversation_id: - result.append(conv_id) - - return result - - except Exception as e: - logger.error(f"Error getting linked conversations: {e}") - return [] - - @staticmethod - async def set_conversation_role(context: ConversationContext, project_id: str, role: ConversationRole) -> None: - """ - Sets the role of a conversation in a project. - """ - role_data = ConversationProjectManager.ConversationRoleInfo( - project_id=project_id, role=role, conversation_id=str(context.id) - ) - role_path = ProjectStorageManager.get_conversation_role_file_path(context) - write_model(role_path, role_data) - - @staticmethod - async def get_conversation_role(context: ConversationContext) -> Optional[ConversationRole]: - """ - Gets the role of a conversation in a project. - """ - role_path = ProjectStorageManager.get_conversation_role_file_path(context) - role_data = read_model(role_path, ConversationProjectManager.ConversationRoleInfo) - - if role_data: - return role_data.role - - return None - - @staticmethod - async def associate_conversation_with_project(context: ConversationContext, project_id: str) -> None: - """ - Associates a conversation with a project. - """ - logger.debug(f"Associating conversation {context.id} with project {project_id}") - - try: - # 1. Store the project association in the conversation's storage directory - project_data = ConversationProjectManager.ProjectAssociation(project_id=project_id) - project_path = ProjectStorageManager.get_conversation_project_file_path(context) - logger.debug(f"Writing project association to {project_path}") - write_model(project_path, project_data) - - # 2. Register this conversation in the project's linked_conversations directory - linked_dir = ProjectStorageManager.get_linked_conversations_dir(project_id) - logger.debug(f"Registering in linked_conversations directory: {linked_dir}") - conversation_file = linked_dir / str(context.id) - - # Touch the file to create it if it doesn't exist - # We don't need to write any content to it, just its existence is sufficient - conversation_file.touch(exist_ok=True) - logger.debug(f"Created conversation link file: {conversation_file}") - except Exception as e: - logger.error(f"Error associating conversation with project: {e}") - raise - - @staticmethod - async def get_associated_project_id(context: ConversationContext) -> Optional[str]: - """ - Gets the project ID associated with a conversation. - """ - project_path = ProjectStorageManager.get_conversation_project_file_path(context) - project_data = read_model(project_path, ConversationProjectManager.ProjectAssociation) - - if project_data: - return project_data.project_id - - return None diff --git a/assistants/project-assistant/assistant/data.py b/assistants/project-assistant/assistant/data.py new file mode 100644 index 000000000..8b2b6c4db --- /dev/null +++ b/assistants/project-assistant/assistant/data.py @@ -0,0 +1,274 @@ +""" +Data models for knowledge transfer share entities (briefs, information requests, logs, etc.) + +This module provides the core data structures for the knowledge transfer assistant, +without any artifact abstraction or unnecessary complexity. +""" + +import uuid +from datetime import UTC, datetime +from enum import Enum +from typing import Any + +from pydantic import BaseModel, Field + + +class ConversationRole(str, Enum): + COORDINATOR = "coordinator" + TEAM = "team" + SHAREABLE_TEMPLATE = "shareable_template" + + +class ConversationShareInfo(BaseModel): + share_id: str + conversation_id: str + role: ConversationRole + + +class ConversationPreferences(BaseModel): + """ + Preferences for a conversation, such as preferred communication style. + This is used to store user preferences for how they want to interact with the assistant. + """ + + preferred_communication_style: str | None = None + + +class InspectorTab(str, Enum): + BRIEF = "brief" + LEARNING = "learning" + SHARING = "sharing" + DEBUG = "debug" + + +class RequestPriority(str, Enum): + LOW = "low" + MEDIUM = "medium" + HIGH = "high" + CRITICAL = "critical" + + +class RequestStatus(str, Enum): + NEW = "new" + ACKNOWLEDGED = "acknowledged" + IN_PROGRESS = "in_progress" + RESOLVED = "resolved" + DEFERRED = "deferred" + + +class BaseEntity(BaseModel): + version: int = 1 + created_at: datetime = Field(default_factory=lambda: datetime.now(UTC)) + updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC)) + created_by: str + updated_by: str + conversation_id: str + + +class LearningOutcomeAchievement(BaseModel): + outcome_id: str + achieved: bool = True + achieved_at: datetime = Field(default_factory=lambda: datetime.now(UTC)) + + +class TeamConversationInfo(BaseModel): + conversation_id: str + redeemer_user_id: str + redeemer_name: str + joined_at: datetime = Field(default_factory=lambda: datetime.now(UTC)) + last_active_at: datetime = Field(default_factory=lambda: datetime.now(UTC)) + outcome_achievements: list[LearningOutcomeAchievement] = Field(default_factory=list) + + +class LearningOutcome(BaseModel): + id: str = Field(default_factory=lambda: str(uuid.uuid4())) + description: str + + +class LearningObjective(BaseModel): + id: str = Field(default_factory=lambda: str(uuid.uuid4())) + name: str + description: str + priority: int = 1 + learning_outcomes: list[LearningOutcome] = Field(default_factory=list) + + +class KnowledgeBrief(BaseEntity): + title: str + content: str + timeline: str | None = None + + +class KnowledgeDigest(BaseEntity): + content: str = "" + is_auto_generated: bool = True + + +class InformationRequestSource(str, Enum): + INTERNAL = "internal" # Some subsystem or tool added this request. + TEAM = "team" + + +class InformationRequest(BaseEntity): + request_id: str = Field(default_factory=lambda: str(uuid.uuid4())) + source: InformationRequestSource = InformationRequestSource.INTERNAL + title: str + description: str + priority: RequestPriority = RequestPriority.MEDIUM + status: RequestStatus = RequestStatus.NEW + related_objective_ids: list[str] = Field(default_factory=list) + resolution: str | None = None + resolved_at: datetime | None = None + resolved_by: str | None = None + + # History of status updates and comments + updates: list[dict[str, Any]] = Field(default_factory=list) + + +class NewInformationRequest(BaseModel): + """ + Represents a new information request to be created. + This is used to capture requests for additional information. + """ + + title: str + description: str + priority: RequestPriority + + class Config: + extra = "forbid" + + +class LogEntryType(str, Enum): + # Brief-related events + BRIEFING_CREATED = "briefing_created" + BRIEFING_UPDATED = "briefing_updated" + + # Learning Objective-related events + LEARNING_OBJECTIVE_ADDED = "learning_objective_added" + LEARNING_OBJECTIVE_DELETED = "learning_objective_deleted" + LEARNING_OBJECTIVE_UPDATED = "learning_objective_updated" + + # Information request lifecycle events + REQUEST_CREATED = "request_created" + REQUEST_UPDATED = "request_updated" + REQUEST_DELETED = "request_deleted" + + # Project state and progress events + STATUS_CHANGED = "status_changed" + OUTCOME_ATTAINED = "outcome_attained" + REQUEST_RESOLVED = "request_resolved" + LEARNING_OBJECTIVE_ACCOMPLISHED = "learning_objective_accomplished" + + # Participant events + PARTICIPANT_JOINED = "participant_joined" + PARTICIPANT_LEFT = "participant_left" + + # Share lifecycle events + SHARE_STARTED = "share_started" + SHARE_COMPLETED = "share_completed" + SHARE_ABORTED = "share_aborted" + + # Miscellaneous events + SHARE_INFORMATION_UPDATE = "share_information_update" + FILE_SHARED = "file_shared" + FILE_DELETED = "file_deleted" + KNOWLEDGE_DIGEST_UPDATE = "knowledge_digest_update" + CUSTOM = "custom" + + +class LogEntry(BaseModel): + id: str = Field(default_factory=lambda: str(uuid.uuid4())) + timestamp: datetime = Field(default_factory=lambda: datetime.now(UTC)) + entry_type: LogEntryType + user_id: str + user_name: str + related_entity_id: str | None = None + entity_type: str | None = None + message: str + metadata: dict | None = None + + +class ShareLog(BaseModel): + entries: list[LogEntry] = Field(default_factory=list) # Chronological list of log entries + + +class TaskStatus(str, Enum): + """ + Enum for the status of a task. + """ + + PENDING = "pending" # Task not yet started + IN_PROGRESS = "in_progress" # Currently working on (limit to ONE task at a time) + COMPLETED = "completed" # Task finished successfully + CANCELLED = "cancelled" # Task no longer needed + + +class TaskPriority(str, Enum): + """ + Enum for the priority of a task. + """ + + LOW = "low" + MEDIUM = "medium" + HIGH = "high" + + +class NewTaskInfo(BaseModel): + """ + A class to represent a new task to be added. + """ + + content: str # Description of the task + priority: TaskPriority = TaskPriority.MEDIUM # Default priority is 'medium' + status: TaskStatus = TaskStatus.PENDING # Default status is 'pending' + + +class TaskInfo(BaseModel): + task_id: str + content: str + status: TaskStatus + priority: TaskPriority + + +class Share(BaseModel): + share_id: str + coordinator_conversation_id: str | None = None + shared_conversation_id: str | None = None + team_conversations: dict[str, TeamConversationInfo] = Field(default_factory=dict) + share_url: str | None = None + version: int = 1 + created_at: datetime = Field(default_factory=lambda: datetime.now(UTC)) + updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC)) + updated_by: str | None = None + + # Knowledge Package components + audience: str | None = None + audience_takeaways: list[str] = Field(default_factory=list) + learning_objectives: list[LearningObjective] = Field(default_factory=list) + brief: KnowledgeBrief | None + preferred_communication_style: str | None = None + digest: KnowledgeDigest | None + + # Lifecycle + is_intended_to_accomplish_outcomes: bool = True + next_learning_actions: list[str] = Field(default_factory=list) + # knowledge_organized: bool = False + requests: list[InformationRequest] = Field(default_factory=list) + tasks: list[TaskInfo] = Field(default_factory=list) + + log: ShareLog | None = Field(default_factory=lambda: ShareLog()) + + +class CoordinatorConversationMessage(BaseModel): + message_id: str + content: str + sender_name: str + timestamp: datetime = Field(default_factory=lambda: datetime.now(UTC)) + is_assistant: bool = False + + +class CoordinatorConversationMessages(BaseModel): + knowledge_share_id: str + last_updated: datetime = Field(default_factory=lambda: datetime.now(UTC)) + messages: list[CoordinatorConversationMessage] = Field(default_factory=list) diff --git a/assistants/project-assistant/assistant/domain/__init__.py b/assistants/project-assistant/assistant/domain/__init__.py new file mode 100644 index 000000000..73d924834 --- /dev/null +++ b/assistants/project-assistant/assistant/domain/__init__.py @@ -0,0 +1,25 @@ +""" +Manager directory for Knowledge Transfer Assistant. + +This module provides the main KnowledgeTransferManager class for project management. +""" + +from .audience_manager import AudienceManager +from .information_request_manager import InformationRequestManager +from .knowledge_brief_manager import KnowledgeBriefManager +from .knowledge_digest_manager import KnowledgeDigestManager +from .learning_objectives_manager import LearningObjectivesManager +from .share_manager import ShareManager +from .tasks_manager import TasksManager +from .transfer_manager import TransferManager + +__all__ = [ + "AudienceManager", + "InformationRequestManager", + "KnowledgeBriefManager", + "KnowledgeDigestManager", + "LearningObjectivesManager", + "ShareManager", + "TasksManager", + "TransferManager", +] diff --git a/assistants/project-assistant/assistant/domain/audience_manager.py b/assistants/project-assistant/assistant/domain/audience_manager.py new file mode 100644 index 000000000..560c0c9e2 --- /dev/null +++ b/assistants/project-assistant/assistant/domain/audience_manager.py @@ -0,0 +1,59 @@ +""" +Knowledge transfer lifecycle management for Knowledge Transfer Assistant. + +Handles knowledge transfer state updates, completion, and lifecycle operations. +""" + +from datetime import UTC, datetime + +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.data import LogEntryType + +from .share_manager import ShareManager + + +class AudienceManager: + @staticmethod + async def update_audience( + context: ConversationContext, + audience_description: str, + ) -> None: + """ + Update the target audience description for a knowledge share. + """ + share = await ShareManager.get_share(context) + share.audience = audience_description.strip() + share.updated_at = datetime.now(UTC) + await ShareManager.set_share(context, share) + + await ShareManager.log_share_event( + context=context, + entry_type=LogEntryType.STATUS_CHANGED.value, + message=f"Updated target audience: {audience_description}", + metadata={ + "audience": audience_description, + }, + ) + + @staticmethod + async def update_audience_takeaways( + context: ConversationContext, + takeaways: list[str], + ) -> None: + """ + Update the key takeaways for the target audience. + """ + share = await ShareManager.get_share(context) + share.audience_takeaways = takeaways + share.updated_at = datetime.now(UTC) + await ShareManager.set_share(context, share) + + await ShareManager.log_share_event( + context=context, + entry_type=LogEntryType.STATUS_CHANGED.value, + message=f"Updated audience takeaways: {takeaways}", + metadata={ + "takeaways": takeaways, + }, + ) diff --git a/assistants/project-assistant/assistant/domain/conversation_preferences_manager.py b/assistants/project-assistant/assistant/domain/conversation_preferences_manager.py new file mode 100644 index 000000000..3a28424dd --- /dev/null +++ b/assistants/project-assistant/assistant/domain/conversation_preferences_manager.py @@ -0,0 +1,54 @@ +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.config import assistant_config +from assistant.data import ConversationPreferences, ConversationRole, InspectorTab +from assistant.domain.share_manager import ShareManager +from assistant.notifications import Notifications +from assistant.storage import ConversationStorage + + +class ConversationPreferencesManager: + @staticmethod + async def update_preferred_communication_style( + context: ConversationContext, + preferred_communication_style: str, + ) -> None: + """ + Update the preferences for a conversation. + """ + preferences = ConversationStorage.read_conversation_preferences(context) + + # Set the default preferences based on the assistant config. + if not preferences: + config = await assistant_config.get(context.assistant) + role = await ShareManager.get_conversation_role(context) + if role == ConversationRole.COORDINATOR: + style = config.coordinator_config.preferred_communication_style + else: + style = config.team_config.preferred_communication_style + preferences = ConversationPreferences( + preferred_communication_style=style, + ) + + preferences.preferred_communication_style = preferred_communication_style.strip() + ConversationStorage.write_conversation_preferences(context, preferences) + + await Notifications.notify(context, "Preferred communication style updated.") + await Notifications.notify_all_state_update(context, [InspectorTab.DEBUG]) + + @staticmethod + async def get_preferred_communication_style(context: ConversationContext) -> str: + """ + Get the preferred communication style for a conversation. + """ + preferences = ConversationStorage.read_conversation_preferences(context) + if preferences and preferences.preferred_communication_style: + return preferences.preferred_communication_style + + # Return the default from the assistant config if not set. + config = await assistant_config.get(context.assistant) + role = await ShareManager.get_conversation_role(context) + if role == ConversationRole.COORDINATOR: + return config.coordinator_config.preferred_communication_style + else: + return config.team_config.preferred_communication_style diff --git a/assistants/project-assistant/assistant/domain/information_request_manager.py b/assistants/project-assistant/assistant/domain/information_request_manager.py new file mode 100644 index 000000000..7234b73c5 --- /dev/null +++ b/assistants/project-assistant/assistant/domain/information_request_manager.py @@ -0,0 +1,212 @@ +from datetime import UTC, datetime + +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.data import ( + InformationRequest, + InformationRequestSource, + InspectorTab, + LogEntryType, + RequestPriority, + RequestStatus, +) +from assistant.logging import logger +from assistant.notifications import Notifications +from assistant.storage import ShareStorage +from assistant.utils import get_current_user_id + +from .share_manager import ShareManager + + +class InformationRequestManager: + """Manages information request operations.""" + + @staticmethod + async def get_information_requests( + context: ConversationContext, + ) -> list[InformationRequest]: + """Gets all information requests for the current conversation's share.""" + share_id = await ShareManager.get_share_id(context) + return ShareStorage.get_all_information_requests(share_id) + + @staticmethod + async def create_information_request( + context: ConversationContext, + title: str, + description: str, + priority: RequestPriority = RequestPriority.MEDIUM, + related_objective_ids: list[str] | None = None, + source: InformationRequestSource = InformationRequestSource.INTERNAL, + ) -> InformationRequest: + share_id = await ShareManager.get_share_id(context) + current_user_id = await get_current_user_id(context) + + information_request = InformationRequest( + title=title, + description=description, + priority=priority, + related_objective_ids=related_objective_ids or [], + created_by=current_user_id, + updated_by=current_user_id, + conversation_id=str(context.id), + source=source, + ) + + ShareStorage.write_information_request(share_id, information_request) + + await ShareManager.log_share_event( + context=context, + entry_type=LogEntryType.REQUEST_CREATED.value, + message=f"Created information request: {title}", + related_entity_id=information_request.request_id, + metadata={ + "priority": priority.value, + "request_id": information_request.request_id, + }, + ) + + await Notifications.notify_self_and_other(context, share_id, f"Information request '{title}' was created") + await Notifications.notify_all_state_update(context, [InspectorTab.SHARING]) + + return information_request + + @staticmethod + async def resolve_information_request( + context: ConversationContext, + request_id: str, + resolution: str, + ) -> InformationRequest: + share_id = await ShareManager.get_share_id(context) + current_user_id = await get_current_user_id(context) + + information_request = ShareStorage.read_information_request(share_id, request_id) + if not information_request: + # Try to find it in all requests + all_requests = ShareStorage.get_all_information_requests(share_id) + for request in all_requests: + if request.request_id == request_id: + information_request = request + break + + if not information_request: + raise ValueError(f"Information request {request_id} not found") + + # Check if already resolved + if information_request.status == RequestStatus.RESOLVED: + logger.warning(f"Information request {request_id} is already resolved") + return information_request + + # Update the request + information_request.status = RequestStatus.RESOLVED + information_request.resolution = resolution + information_request.resolved_at = datetime.now(UTC) + information_request.resolved_by = current_user_id + + # Add to history + information_request.updates.append({ + "timestamp": datetime.now(UTC).isoformat(), + "user_id": current_user_id, + "message": f"Request resolved: {resolution}", + "status": RequestStatus.RESOLVED.value, + }) + + # Update metadata + information_request.updated_at = datetime.now(UTC) + information_request.updated_by = current_user_id + information_request.version += 1 + + # Save the updated request + ShareStorage.write_information_request(share_id, information_request) + + # Log the resolution + await ShareManager.log_share_event( + context=context, + entry_type=LogEntryType.REQUEST_RESOLVED.value, + message=f"Resolved information request: {information_request.title}", + related_entity_id=information_request.request_id, + metadata={ + "resolution": resolution, + "request_title": information_request.title, + "request_priority": information_request.priority.value + if hasattr(information_request.priority, "value") + else information_request.priority, + }, + ) + + await Notifications.notify_all_state_update(context, [InspectorTab.SHARING]) + await Notifications.notify_self_and_other( + context, + share_id, + f"Information request '{information_request.title}' has been resolved: {resolution}", + information_request.conversation_id if information_request.conversation_id != str(context.id) else None, + ) + + return information_request + + @staticmethod + async def delete_information_request( + context: ConversationContext, + request_id: str, + ) -> str: + """ + Delete an information request. + + Args: + context: Current conversation context + request_id: ID of the request to delete + + Returns: + Success message + """ + share_id = await ShareManager.get_share_id(context) + current_user_id = await get_current_user_id(context) + + # Get information request by ID + cleaned_request_id = request_id.strip().replace('"', "").replace("'", "") + information_request = ShareStorage.read_information_request(share_id, cleaned_request_id) + if not information_request: + raise ValueError(f"Information request with ID '{request_id}' not found") + + # Check ownership - only allow deletion by the creator + if information_request.conversation_id != str(context.id): + raise PermissionError("You can only delete information requests that you created") + + # Get user info for logging + participants = await context.get_participants() + current_username = "Team Member" + for participant in participants.participants: + if participant.role == "user": + current_username = participant.name + break + + request_title = information_request.title + actual_request_id = information_request.request_id + + # Log the deletion + await ShareManager.log_share_event( + context=context, + entry_type=LogEntryType.REQUEST_DELETED.value, + message=f"Information request '{request_title}' was deleted by {current_username}", + related_entity_id=actual_request_id, + metadata={ + "request_title": request_title, + "deleted_by": current_user_id, + "deleted_by_name": current_username, + }, + ) + + # Delete the information request from the main share data + share = await ShareManager.get_share(context) + if share and share.requests: + share.requests = [req for req in share.requests if req.request_id != actual_request_id] + await ShareManager.set_share(context, share) + + # Notify about the deletion + await Notifications.notify_self_and_other( + context, + share_id, + f"Information request '{request_title}' has been deleted.", + ) + await Notifications.notify_all_state_update(context, [InspectorTab.SHARING]) + + return f"Information request '{request_title}' has been successfully deleted." diff --git a/assistants/project-assistant/assistant/domain/knowledge_brief_manager.py b/assistants/project-assistant/assistant/domain/knowledge_brief_manager.py new file mode 100644 index 000000000..75aa2959b --- /dev/null +++ b/assistants/project-assistant/assistant/domain/knowledge_brief_manager.py @@ -0,0 +1,62 @@ +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.data import InspectorTab, KnowledgeBrief, LogEntryType +from assistant.notifications import Notifications +from assistant.storage import ShareStorage +from assistant.utils import get_current_user_id + +from .share_manager import ShareManager + + +class KnowledgeBriefManager: + """Manages knowledge brief operations.""" + + @staticmethod + async def get_knowledge_brief( + context: ConversationContext, + ) -> KnowledgeBrief | None: + share_id = await ShareManager.get_share_id(context) + return ShareStorage.read_knowledge_brief(share_id) + + @staticmethod + async def update_knowledge_brief( + context: ConversationContext, + title: str, + content: str, + timeline: str | None = None, + ) -> KnowledgeBrief: + share_id = await ShareManager.get_share_id(context) + current_user_id = await get_current_user_id(context) + + brief = KnowledgeBrief( + title=title, + content=content, + timeline=timeline, + created_by=current_user_id, + updated_by=current_user_id, + conversation_id=str(context.id), + ) + + ShareStorage.write_knowledge_brief(share_id, brief) + + # Check if this is a creation or an update + existing_brief = ShareStorage.read_knowledge_brief(share_id) + if existing_brief: + # This is an update + await ShareManager.log_share_event( + context=context, + entry_type=LogEntryType.BRIEFING_UPDATED.value, + message=f"Updated brief: {title}", + ) + else: + # This is a creation + await ShareManager.log_share_event( + context=context, + entry_type=LogEntryType.BRIEFING_CREATED.value, + message=f"Created brief: {title}", + ) + + await Notifications.notify_all(context, share_id, "Knowledge brief has been updated", {"content": content}) + await Notifications.notify_all_state_update(context, [InspectorTab.BRIEF]) + + return brief diff --git a/assistants/project-assistant/assistant/domain/knowledge_digest_manager.py b/assistants/project-assistant/assistant/domain/knowledge_digest_manager.py new file mode 100644 index 000000000..45ece3b67 --- /dev/null +++ b/assistants/project-assistant/assistant/domain/knowledge_digest_manager.py @@ -0,0 +1,69 @@ +from datetime import UTC, datetime + +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.data import InspectorTab, KnowledgeDigest, LogEntryType +from assistant.notifications import Notifications +from assistant.storage import ShareStorage +from assistant.utils import get_current_user_id + +from .share_manager import ShareManager + + +class KnowledgeDigestManager: + """Manages knowledge digest operations.""" + + @staticmethod + async def get_knowledge_digest( + context: ConversationContext, + ) -> KnowledgeDigest | None: + share_id = await ShareManager.get_share_id(context) + if not share_id: + return None + return ShareStorage.read_knowledge_digest(share_id) + + @staticmethod + async def update_knowledge_digest( + context: ConversationContext, + content: str, + is_auto_generated: bool = True, + ) -> None: + share_id = await ShareManager.get_share_id(context) + current_user_id = await get_current_user_id(context) + + digest = ShareStorage.read_knowledge_digest(share_id) + is_new = False + + if not digest: + digest = KnowledgeDigest( + created_by=current_user_id, + updated_by=current_user_id, + conversation_id=str(context.id), + content="", + ) + is_new = True + + digest.content = content + digest.is_auto_generated = is_auto_generated + digest.updated_at = datetime.now(UTC) + digest.updated_by = current_user_id + digest.version += 1 + ShareStorage.write_knowledge_digest(share_id, digest) + + # Log the update + event_type = LogEntryType.KNOWLEDGE_DIGEST_UPDATE + update_type = "auto-generated" if is_auto_generated else "manual" + message = f"{'Created' if is_new else 'Updated'} knowledge digest ({update_type})" + + await ShareManager.log_share_event( + context=context, + entry_type=event_type.value, + message=message, + ) + + await Notifications.notify_all_state_update( + context, + [InspectorTab.BRIEF], + ) + + return diff --git a/assistants/project-assistant/assistant/domain/learning_objectives_manager.py b/assistants/project-assistant/assistant/domain/learning_objectives_manager.py new file mode 100644 index 000000000..140f73036 --- /dev/null +++ b/assistants/project-assistant/assistant/domain/learning_objectives_manager.py @@ -0,0 +1,406 @@ +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.data import ( + InspectorTab, + LearningObjective, + LearningOutcome, + LearningOutcomeAchievement, + LogEntryType, + Share, +) +from assistant.notifications import Notifications + +from .share_manager import ShareManager + + +class LearningObjectivesManager: + """Manages learning objectives and outcomes operations.""" + + @staticmethod + async def add_learning_objective( + context: ConversationContext, + objective_name: str, + description: str, + outcomes: list[str] | None = None, + priority: int = 1, + ) -> LearningObjective | None: + criterion_objects = [] + if outcomes: + for criterion in outcomes: + criterion_objects.append(LearningOutcome(description=criterion)) + + new_learning_objective = LearningObjective( + name=objective_name, + description=description, + priority=priority, + learning_outcomes=criterion_objects, + ) + + share = await ShareManager.get_share(context) + share.learning_objectives.append(new_learning_objective) + await ShareManager.set_share(context, share) + + await ShareManager.log_share_event( + context=context, + entry_type=LogEntryType.LEARNING_OBJECTIVE_ADDED.value, + message=f"Added learning objective: {objective_name}", + ) + + await Notifications.notify_all(context, share.share_id, f"Learning objective '{objective_name}' was added") + await Notifications.notify_all_state_update(context, [InspectorTab.LEARNING, InspectorTab.BRIEF]) + + return new_learning_objective + + @staticmethod + async def update_learning_objective( + context: ConversationContext, + objective_id: str, + objective_name: str | None = None, + description: str | None = None, + ) -> str: + """ + Update an existing learning objective's name or description. + + Returns: + Success message + """ + share = await ShareManager.get_share(context) + if not share.learning_objectives: + raise ValueError("No learning objectives found") + + # Find objective by ID + objective = None + for obj in share.learning_objectives: + if obj.id == objective_id: + objective = obj + break + if not objective: + raise ValueError("Learning objective not found") + + original_name = objective.name + changes_made = [] + + # Update fields if provided + if objective_name and objective_name.strip(): + objective.name = objective_name.strip() + changes_made.append(f"name: '{original_name}' → '{objective_name.strip()}'") + + if description and description.strip(): + objective.description = description.strip() + changes_made.append("description updated") + + if not changes_made: + return "No changes specified" + + await ShareManager.set_share(context, share) + + changes_text = ", ".join(changes_made) + await ShareManager.log_share_event( + context=context, + entry_type=LogEntryType.LEARNING_OBJECTIVE_UPDATED.value, + message=f"Updated learning objective '{objective.name}': {changes_text}", + metadata={ + "objective_id": objective_id, + "objective_name": objective.name, + "changes": changes_text, + }, + ) + + await Notifications.notify_all( + context, share.share_id, f"Learning objective '{objective.name}' has been updated" + ) + await Notifications.notify_all_state_update(context, [InspectorTab.LEARNING, InspectorTab.BRIEF]) + + return f"Learning objective '{objective.name}' has been successfully updated: {changes_text}." + + @staticmethod + async def delete_learning_objective( + context: ConversationContext, + objective_id: str, + ) -> str: + """ + Delete a learning objective by ID. + + Returns: + Success message + """ + share = await ShareManager.get_share(context) + if not share.learning_objectives: + raise ValueError("No learning objectives found") + + # Find objective by ID + objective = None + objective_index = -1 + for idx, obj in enumerate(share.learning_objectives): + if obj.id == objective_id: + objective = obj + objective_index = idx + break + + if not objective: + raise ValueError("Learning objective not found.") + + objective_name = objective.name + + # Clean up any achievement records for all outcomes in this objective across all team conversations + for outcome in objective.learning_outcomes: + for team_info in share.team_conversations.values(): + team_info.outcome_achievements = [ + achievement + for achievement in team_info.outcome_achievements + if achievement.outcome_id != outcome.id + ] + + # Remove the objective from the share + share.learning_objectives.pop(objective_index) + + await ShareManager.set_share(context, share) + + await ShareManager.log_share_event( + context=context, + entry_type=LogEntryType.LEARNING_OBJECTIVE_UPDATED.value, + message=f"Deleted learning objective '{objective_name}' and all its outcomes", + metadata={ + "objective_id": objective_id, + "objective_name": objective_name, + "outcomes_count": len(objective.learning_outcomes), + }, + ) + + await Notifications.notify_all( + context, share.share_id, f"Learning objective '{objective_name}' has been deleted" + ) + await Notifications.notify_all_state_update(context, [InspectorTab.LEARNING, InspectorTab.BRIEF]) + + return f"Learning objective '{objective_name}' has been successfully deleted from the knowledge share." + + @staticmethod + async def get_learning_outcomes( + context: ConversationContext, + ) -> list[LearningOutcome]: + share = await ShareManager.get_share(context) + + objectives = share.learning_objectives + outcomes = [] + for objective in objectives: + outcomes.extend(objective.learning_outcomes) + + return outcomes + + @staticmethod + async def add_learning_outcome( + context: ConversationContext, + objective_id: str, + outcome_description: str, + ) -> str: + """ + Add a new learning outcome to an existing learning objective. + + Returns: + Success message + """ + share = await ShareManager.get_share(context) + if not share.learning_objectives: + raise ValueError("No learning objectives found. Please add objectives before adding outcomes.") + + objective = None + for obj in share.learning_objectives: + if obj.id == objective_id: + objective = obj + break + + if objective is None: + raise ValueError("Learning objective not found") + + new_outcome = LearningOutcome(description=outcome_description.strip()) + objective.learning_outcomes.append(new_outcome) + await ShareManager.set_share(context, share) + + await ShareManager.log_share_event( + context=context, + entry_type=LogEntryType.LEARNING_OBJECTIVE_UPDATED.value, + message=f"Added learning outcome to objective '{objective.name}': {outcome_description}", + metadata={ + "objective_id": objective_id, + "objective_name": objective.name, + "outcome_added": outcome_description, + "outcome_id": new_outcome.id, + }, + ) + + await Notifications.notify_all( + context, + share.share_id, + f"Learning outcome '{outcome_description}' has been added", + ) + await Notifications.notify_all_state_update(context, [InspectorTab.LEARNING, InspectorTab.BRIEF]) + + return f"Learning outcome added successfully to objective '{objective.name}': {outcome_description}" + + @staticmethod + async def update_learning_outcome( + context: ConversationContext, + outcome_id: str, + new_description: str, + ) -> str: + """ + Update the description of an existing learning outcome. + + Returns: + Success message + """ + share = await ShareManager.get_share(context) + if not share.learning_objectives: + raise ValueError("No learning objectives found. Please add objectives before updating outcomes.") + + # Find the outcome by ID across all objectives + objective = None + outcome = None + for obj in share.learning_objectives: + for out in obj.learning_outcomes: + if out.id == outcome_id: + objective = obj + outcome = out + break + if outcome: + break + + if outcome is None or objective is None: + # Collect available outcome IDs for error message + available_outcome_ids = [] + for obj in share.learning_objectives: + for out in obj.learning_outcomes: + available_outcome_ids.append(out.id) + raise ValueError("Learning outcome not found.") + + old_description = outcome.description + + outcome.description = new_description.strip() + await ShareManager.set_share(context, share) + + await ShareManager.log_share_event( + context=context, + entry_type=LogEntryType.LEARNING_OBJECTIVE_UPDATED.value, + message="Updated learning outcome.", + metadata={ + "objective_id": objective.id, + "objective_name": objective.name, + "outcome_id": outcome_id, + "old_description": old_description, + "new_description": new_description, + }, + ) + + await Notifications.notify_all( + context, share.share_id, f"Learning outcome '{new_description}' has been updated" + ) + await Notifications.notify_all_state_update(context, [InspectorTab.LEARNING, InspectorTab.BRIEF]) + + return f"Learning outcome updated successfully in objective '{objective.name}': {new_description}" + + @staticmethod + async def delete_learning_outcome( + context: ConversationContext, + outcome_id: str, + ) -> str: + """ + Delete a learning outcome from a learning objective. + + Returns: + Success message + """ + share = await ShareManager.get_share(context) + if not share.learning_objectives: + raise ValueError("No learning objectives found. Please add objectives before deleting outcomes.") + + # Find the outcome by ID across all objectives + objective = None + outcome_to_delete = None + outcome_index = -1 + for obj in share.learning_objectives: + for idx, out in enumerate(obj.learning_outcomes): + if out.id == outcome_id: + objective = obj + outcome_to_delete = out + outcome_index = idx + break + if outcome_to_delete: + break + + if outcome_to_delete is None or objective is None: + # Collect available outcome IDs for error message + available_outcome_ids = [] + for obj in share.learning_objectives: + for out in obj.learning_outcomes: + available_outcome_ids.append(out.id) + raise ValueError("Learning outcome not found.") + + deleted_description = outcome_to_delete.description + + # Remove the outcome from the objective + objective.learning_outcomes.pop(outcome_index) + + # Clean up any achievement records for this outcome across all team conversations + for team_info in share.team_conversations.values(): + team_info.outcome_achievements = [ + achievement for achievement in team_info.outcome_achievements if achievement.outcome_id != outcome_id + ] + + await ShareManager.set_share(context, share) + + await ShareManager.log_share_event( + context=context, + entry_type=LogEntryType.LEARNING_OBJECTIVE_UPDATED.value, + message=f"Deleted learning outcome from objective '{objective.name}': {deleted_description}", + metadata={ + "objective_id": objective.id, + "objective_name": objective.name, + "outcome_index": outcome_index, + "outcome_id": outcome_id, + "deleted_description": deleted_description, + }, + ) + + await Notifications.notify_all( + context, + share.share_id, + f"Learning outcome '{deleted_description}' has been removed", + ) + await Notifications.notify_all_state_update(context, [InspectorTab.LEARNING, InspectorTab.BRIEF]) + + return f"Learning outcome deleted successfully from objective '{objective.name}': {deleted_description}" + + @staticmethod + def get_achievements_for_conversation(share: Share, conversation_id: str) -> list[LearningOutcomeAchievement]: + team_conv = share.team_conversations.get(conversation_id) + return team_conv.outcome_achievements if team_conv else [] + + @staticmethod + def get_completion_for_conversation(share: Share, conversation_id: str) -> tuple[int, int]: + achievements = LearningObjectivesManager.get_achievements_for_conversation(share, conversation_id) + achieved_outcome_ids = {a.outcome_id for a in achievements if a.achieved} + + total_outcomes = sum(len(obj.learning_outcomes) for obj in share.learning_objectives) + achieved_outcomes = len(achieved_outcome_ids) + + return achieved_outcomes, total_outcomes + + @staticmethod + def is_outcome_achieved_by_conversation(share: Share, outcome_id: str, conversation_id: str) -> bool: + achievements = LearningObjectivesManager.get_achievements_for_conversation(share, conversation_id) + return any(a.outcome_id == outcome_id and a.achieved for a in achievements) + + @staticmethod + def get_overall_completion(share: Share) -> tuple[int, int]: + """ + Get overall completion across all team conversations. + Returns: + Tuple of (unique_achieved_outcomes, total_outcomes) across all team conversations + """ + all_achieved_outcomes = set() + for team_conv in share.team_conversations.values(): + achieved_ids = {a.outcome_id for a in team_conv.outcome_achievements if a.achieved} + all_achieved_outcomes.update(achieved_ids) + + total_outcomes = sum(len(obj.learning_outcomes) for obj in share.learning_objectives) + return len(all_achieved_outcomes), total_outcomes diff --git a/assistants/project-assistant/assistant/domain/share_manager.py b/assistants/project-assistant/assistant/domain/share_manager.py new file mode 100644 index 000000000..b2355f847 --- /dev/null +++ b/assistants/project-assistant/assistant/domain/share_manager.py @@ -0,0 +1,395 @@ +import uuid +from csv import Error +from datetime import UTC, datetime + +from semantic_workbench_api_model.workbench_model import ( + ConversationPermission, + NewConversation, + NewConversationShare, +) +from semantic_workbench_assistant.assistant_app import ConversationContext +from semantic_workbench_assistant.storage import read_model, write_model + +from assistant.data import ( + ConversationRole, + ConversationShareInfo, + CoordinatorConversationMessages, + Share, + ShareLog, + TeamConversationInfo, +) +from assistant.errors import NoShareException, NoShareFoundError +from assistant.logging import logger +from assistant.storage import ShareStorage, ShareStorageManager +from assistant.utils import get_current_user + + +class ShareManager: + """Manages knowledge share creation, joining, and basic operations.""" + + @staticmethod + async def create_share(context: ConversationContext) -> str: + """ + Creates a new knowledge share and associates the current conversation with it. + + This is the initial step in knowledge transfer creation. It: + 1. Generates a unique knowledge share ID + 2. Associates the current conversation with that share + 3. Sets the current conversation as Coordinator for the share + 4. Creates empty share data structures (brief, knowledge digest, etc.) + 5. Logs the creation event + + After creating a share, the Coordinator should proceed to create a knowledge brief + with specific learning objectives and success criteria. + + Args: + context: Current conversation context containing user/assistant information + + Returns: + Tuple of (success, share_id) where: + - success: Boolean indicating if the creation was successful + - share_id: If successful, the UUID of the newly created share + """ + + share_id = str(uuid.uuid4()) + + share_dir = ShareStorageManager.get_share_dir(share_id) + logger.debug(f"Created share directory: {share_dir}") + + share = Share( + share_id=share_id, + coordinator_conversation_id=str(context.id), + brief=None, + digest=None, + ) + + ShareStorage.write_share(share_id, share) + logger.debug(f"Created and saved knowledge share: {share}") + + # Associate the conversation with the share + logger.debug(f"Associating conversation {context.id} with share {share_id}") + await ShareManager.set_conversation_role(context, share_id, ConversationRole.COORDINATOR) + + # No need to set conversation role in share storage, as we use metadata + logger.debug(f"Conversation {context.id} is Coordinator for share {share_id}") + + return share_id + + @staticmethod + async def set_conversation_role(context: ConversationContext, share_id: str, role: ConversationRole) -> None: + """ + Sets the role of a conversation in a knowledge transfer share. + """ + role_data = ConversationShareInfo(share_id=share_id, role=role, conversation_id=str(context.id)) + role_path = ShareStorageManager.get_conversation_role_file_path(context) + write_model(role_path, role_data) + + @staticmethod + async def get_conversation_role( + context: ConversationContext, + ) -> ConversationRole: + """ + Gets the role of a conversation in a knowledge transfer. + """ + role_path = ShareStorageManager.get_conversation_role_file_path(context) + role_data = read_model(role_path, ConversationShareInfo) + if role_data: + return role_data.role + return ConversationRole.COORDINATOR + + @staticmethod + async def create_shareable_team_conversation(context: ConversationContext, share_id: str) -> str: + """ + Creates a new shareable team conversation template. + + This creates a new conversation owned by the same user as the current conversation, + intended to be used as a shareable team conversation template. This is NOT a + conversation that anyone will directly use. Instead, it's a template that gets + copied when team members redeem the share URL, creating their own individual + team conversations. + + The conversation is tagged with metadata indicating its purpose and gets a + share URL that can be used by team members to join the knowledge transfer. + + Args: + context: Current conversation context + share_id: ID of the share + + Returns: + share_url: URL for joining a team conversation + """ + + new_conversation = NewConversation( + metadata={ + "share_id": share_id, + }, + ) + owner_id, _ = await get_current_user(context) + logger.debug(f"Creating shareable conversation with owner {owner_id}") + conversation = await context._conversations_client.create_conversation_with_owner( + new_conversation=new_conversation, owner_id=owner_id + ) + if not conversation or not conversation.id: + raise ValueError("Failed to create shareable conversation") + logger.debug(f"Created shareable team conversation: {conversation.id}") + + # Create a share link for the new conversation + new_share_link = NewConversationShare( + conversation_id=conversation.id, + label="Join Team Conversation", + conversation_permission=ConversationPermission.read, + metadata={ + "share_id": share_id, + "is_team_conversation": True, + "showDuplicateAction": True, + "show_duplicate_action": True, + }, + ) + share_link = await context._conversations_client.create_conversation_share_with_owner( + new_conversation_share=new_share_link, owner_id=owner_id + ) + + share_url = f"/conversation-share/{share_link.id}/redeem" + + # Capture the new conversation and conversation share link ids in the share. + share = await ShareManager.get_share(context) + share.shared_conversation_id = str(conversation.id) + share.share_url = share_url + share.updated_at = datetime.now(UTC) + ShareStorage.write_share(share_id, share) + return share_url + + @staticmethod + async def get_shared_conversation_id(context: ConversationContext) -> str | None: + """ + Retrieves the share ID and finds the associated shareable template conversation ID. + """ + try: + share = await ShareManager.get_share(context) + if not share.shared_conversation_id: + return None + return share.shared_conversation_id + except Exception as e: + logger.error(f"Error getting shared conversation ID: {e}") + return None + + @staticmethod + async def join_share( + context: ConversationContext, + share_id: str, + role: ConversationRole = ConversationRole.TEAM, + ) -> None: + """ + Joins an existing share. + + Args: + context: Current conversation context + share_id: ID of the share to join + role: Role for this conversation (COORDINATOR or TEAM) + """ + if not ShareStorageManager.share_exists(share_id): + raise ValueError(f"Cannot join share: share {share_id} does not exist") + + # Associate the conversation with the share + await ShareManager.set_conversation_role(context, share_id, role) + + # Role is set in metadata, not in storage + + logger.info(f"Joined share {share_id} as {role.value}") + + @staticmethod + async def get_share_id(context: ConversationContext) -> str: + try: + share_path = ShareStorageManager.get_conversation_role_file_path(context) + share_data = read_model(share_path, ConversationShareInfo) + if share_data: + return share_data.share_id + else: + raise NoShareException + except Error as e: + raise NoShareFoundError(str(e)) from e + + @staticmethod + async def get_share(context: ConversationContext) -> Share: + """Gets the share information for the current conversation's share.""" + try: + share_id = await ShareManager.get_share_id(context) + share = ShareStorage.read_share(share_id) + if share: + # Load the separate log file if not already loaded + if not share.log: + share.log = ShareStorage.read_share_log(share_id) + return share + else: + raise NoShareException + except Error as e: + raise NoShareFoundError(str(e)) from e + + @staticmethod + async def set_share(context: ConversationContext, share: Share) -> None: + """ + Sets the share information for the current conversation's share. + + This updates the share data in storage, including the log if it exists. + """ + share_id = await ShareManager.get_share_id(context) + ShareStorage.write_share(share_id, share) + + # If the log exists, write it as well + if share.log: + ShareStorage.write_share_log(share_id, share.log) + + @staticmethod + async def get_linked_conversations(context: ConversationContext) -> list[str]: + """ + Gets all conversations linked to this one through the same knowledge transfer share. + """ + try: + share = await ShareManager.get_share(context) + conversations = [] + + # Add coordinator conversation + if share.coordinator_conversation_id: + conversations.append(share.coordinator_conversation_id) + + # Add shared template conversation (though usually excluded from notifications) + if share.shared_conversation_id and share.shared_conversation_id: + conversations.append(share.shared_conversation_id) + + # Add all team conversations + for conversation_id in share.team_conversations: + conversations.append(conversation_id) + + return [] + + except Exception as e: + logger.error(f"Error getting linked conversations: {e}") + return [] + + @staticmethod + async def _capture_redeemer_info(context: ConversationContext, share_id: str) -> None: + """ + Captures the redeemer (first non-assistant participant) information and stores it in the knowledge share. + Only captures info for actual team member conversations, not coordinator or shared conversations. + """ + try: + share = ShareStorage.read_share(share_id) + if not share: + logger.warning(f"Could not load knowledge share {share_id} to capture redeemer info") + return + + conversation_id = str(context.id) + + # Skip if this is the coordinator conversation + if conversation_id == share.coordinator_conversation_id: + logger.debug(f"Skipping redeemer capture for coordinator conversation {conversation_id}") + return + + # Skip if this is the shared conversation template + if conversation_id == share.shared_conversation_id: + logger.debug(f"Skipping redeemer capture for shared conversation template {conversation_id}") + return + + # If we get here, it's a team member conversation - capture redeemer info + # Get current user information (the redeemer) + user_id, user_name = await get_current_user(context) + + if not user_id or not user_name: + logger.warning(f"Could not identify redeemer for conversation {conversation_id}") + return + + team_conversation_info = TeamConversationInfo( + conversation_id=conversation_id, + redeemer_user_id=user_id, + redeemer_name=user_name, + ) + share.team_conversations[conversation_id] = team_conversation_info + ShareStorage.write_share(share_id, share) + logger.debug(f"Captured redeemer info for team conversation {conversation_id}: {user_name} ({user_id})") + + except Exception as e: + logger.error(f"Error capturing redeemer info: {e}") + # Don't re-raise - this is not critical for the association process + + @staticmethod + async def get_share_log( + context: ConversationContext, + ) -> ShareLog | None: + """Gets the knowledge transfer log for the current conversation's share.""" + try: + share_id = await ShareManager.get_share_id(context) + return ShareStorage.read_share_log(share_id) + except Error as e: + logger.error(f"Error reading share log: {e}") + return None + + @staticmethod + async def append_coordinator_message( + context: ConversationContext, + message_id: str, + content: str, + sender_name: str, + is_assistant: bool = False, + timestamp: datetime | None = None, + ) -> None: + """ + Appends a message to the coordinator conversation log. + + This is used to log messages sent by the coordinator in the knowledge transfer process. + """ + try: + share_id = await ShareManager.get_share_id(context) + ShareStorage.append_coordinator_message( + share_id=share_id, + message_id=message_id, + content=content, + sender_name=sender_name, + is_assistant=is_assistant, + timestamp=timestamp or datetime.now(UTC), + ) + except Exception as e: + logger.error(f"Error appending coordinator message: {e}") + + @staticmethod + async def get_coordinator_conversation( + context: ConversationContext, + ) -> CoordinatorConversationMessages | None: + """ + Gets the coordinator conversation. + """ + share_id = await ShareManager.get_share_id(context) + if share_id: + return ShareStorage.read_coordinator_conversation(share_id) + return None + + @staticmethod + async def log_share_event( + context: ConversationContext, + entry_type: str, + message: str, + related_entity_id: str | None = None, + metadata: dict | None = None, + ) -> None: + """ + Logs an event to the knowledge transfer log. + + Args: + context: Current conversation context + entry_type: Type of log entry + message: Log message + related_entity_id: Optional ID of a related entity + metadata: Optional additional metadata + """ + try: + share_id = await ShareManager.get_share_id(context) + + await ShareStorage.log_share_event( + context=context, + share_id=share_id, + entry_type=entry_type, + message=message, + related_entity_id=related_entity_id, + metadata=metadata, + ) + except Error as e: + logger.error(f"Error logging share event: {e}") diff --git a/assistants/project-assistant/assistant/domain/tasks_manager.py b/assistants/project-assistant/assistant/domain/tasks_manager.py new file mode 100644 index 000000000..86d717eb9 --- /dev/null +++ b/assistants/project-assistant/assistant/domain/tasks_manager.py @@ -0,0 +1,56 @@ +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.data import NewTaskInfo, TaskInfo +from assistant.domain.share_manager import ShareManager +from assistant.storage import ShareStorage + + +class TasksManager: + @staticmethod + async def get_tasks( + context: ConversationContext, + ) -> list[TaskInfo]: + share_id = await ShareManager.get_share_id(context) + if not share_id: + return [] + return ShareStorage.read_tasks(share_id) + + @staticmethod + async def add_tasks( + context: ConversationContext, + tasks: list[NewTaskInfo], + ) -> None: + share_id = await ShareManager.get_share_id(context) + if not share_id: + return + ShareStorage.add_tasks(share_id, tasks) + + @staticmethod + async def update_task( + context: ConversationContext, + task: TaskInfo, + ) -> None: + share_id = await ShareManager.get_share_id(context) + if not share_id: + return + ShareStorage.update_task(share_id, task) + + @staticmethod + async def remove_task( + context: ConversationContext, + task_id: str, + ) -> None: + share_id = await ShareManager.get_share_id(context) + if not share_id: + return + ShareStorage.remove_task(share_id, task_id) + + @staticmethod + async def set_task_list( + context: ConversationContext, + tasks: list[TaskInfo], + ) -> None: + share_id = await ShareManager.get_share_id(context) + if not share_id: + return + ShareStorage.set_all_tasks(share_id, tasks) diff --git a/assistants/project-assistant/assistant/domain/transfer_manager.py b/assistants/project-assistant/assistant/domain/transfer_manager.py new file mode 100644 index 000000000..60adc7c0f --- /dev/null +++ b/assistants/project-assistant/assistant/domain/transfer_manager.py @@ -0,0 +1,34 @@ +from assistant.data import Share + +from .learning_objectives_manager import LearningObjectivesManager + + +class TransferManager: + @staticmethod + def is_ready_for_transfer(share: Share) -> bool: + # has_basic_requirements = share.knowledge_organized and share.brief is not None and share.audience is not None + has_basic_requirements = share.audience and share.audience_takeaways and share.brief + if not has_basic_requirements: + return False + + if not share.is_intended_to_accomplish_outcomes: + return True + + return bool(share.learning_objectives) and any(bool(obj.learning_outcomes) for obj in share.learning_objectives) + + @staticmethod + def is_actively_sharing(share: Share) -> bool: + return TransferManager.is_ready_for_transfer(share) and len(share.team_conversations) > 0 + + @staticmethod + def _is_transfer_complete(share: Share) -> bool: + """ + Check if knowledge transfer is complete (all outcomes achieved by at least one team member). + Returns: + True if all learning outcomes have been achieved by at least one team conversation + """ + if not share.is_intended_to_accomplish_outcomes: + return False + + achieved_outcomes, total_outcomes = LearningObjectivesManager.get_overall_completion(share) + return total_outcomes > 0 and achieved_outcomes == total_outcomes diff --git a/assistants/project-assistant/assistant/errors.py b/assistants/project-assistant/assistant/errors.py new file mode 100644 index 000000000..711a98950 --- /dev/null +++ b/assistants/project-assistant/assistant/errors.py @@ -0,0 +1,21 @@ +# Define an Exception class for no share found +class NoShareFoundError(Exception): + """Exception raised when no active knowledge share is found.""" + + def __init__(self, message: str): + super().__init__(message) + self.message = message + + +NoShareException = NoShareFoundError("No active share found.") + + +class NoUserFoundError(Exception): + """Exception raised when no user is found in the context.""" + + def __init__(self, message: str): + super().__init__(message) + self.message = message + + +NoUserException = NoUserFoundError("No user found in the context.") diff --git a/assistants/project-assistant/assistant/project_files.py b/assistants/project-assistant/assistant/files.py similarity index 70% rename from assistants/project-assistant/assistant/project_files.py rename to assistants/project-assistant/assistant/files.py index 421867011..a8ff1792d 100644 --- a/assistants/project-assistant/assistant/project_files.py +++ b/assistants/project-assistant/assistant/files.py @@ -9,20 +9,20 @@ import io import pathlib from datetime import datetime -from typing import Dict, List, Optional from pydantic import BaseModel, Field from semantic_workbench_api_model import workbench_model -from semantic_workbench_api_model.workbench_model import MessageType, NewConversationMessage +from semantic_workbench_api_model.workbench_model import ( + MessageType, + NewConversationMessage, +) from semantic_workbench_assistant.assistant_app import ConversationContext from .conversation_clients import ConversationClientManager -from .conversation_project_link import ConversationProjectManager +from .data import ConversationRole, LogEntryType +from .domain.share_manager import ShareManager from .logging import logger -from .project_common import detect_assistant_role -from .project_data import LogEntryType -from .project_storage import ProjectStorage, ProjectStorageManager, read_model, write_model -from .project_storage_models import ConversationRole +from .storage import ShareStorageManager, read_model, write_model # Define helper function for safe logging without 'filename' conflict @@ -42,8 +42,8 @@ def safe_extra(log_data): return safe_data -class ProjectFile(BaseModel): - """Metadata for a file shared within a project.""" +class ShareFile(BaseModel): + """Metadata for a file shared within a share.""" file_id: str filename: str @@ -56,79 +56,79 @@ class ProjectFile(BaseModel): is_coordinator_file: bool = True # Whether this file was created by Coordinator -class ProjectFileCollection(BaseModel): - """Collection of file metadata for a project.""" +class ShareCollection(BaseModel): + """Collection of file metadata for a share.""" - files: List[ProjectFile] = Field(default_factory=list) + files: list[ShareFile] = Field(default_factory=list) -class ProjectFileManager: +class ShareFilesManager: """ - Manages shared project files. + Manages shared knowledge transfer files. Provides functionality for copying files between conversations and maintaining - a synchronized file repository for each project. + a synchronized file repository for each knowledge share. """ @staticmethod - def get_project_files_dir(project_id: str) -> pathlib.Path: + def get_share_files_dir(share_id: str) -> pathlib.Path: """ - Gets the directory for project files. + Gets the directory for share files. """ - project_dir = ProjectStorageManager.get_project_dir(project_id) - files_dir = project_dir / "files" + share_dir = ShareStorageManager.get_share_dir(share_id) + files_dir = share_dir / "files" files_dir.mkdir(parents=True, exist_ok=True) return files_dir @staticmethod - def get_file_metadata_path(project_id: str) -> pathlib.Path: + def get_file_metadata_path(share_id: str) -> pathlib.Path: """ Gets the path to the file metadata JSON. """ - files_dir = ProjectFileManager.get_project_files_dir(project_id) + files_dir = ShareFilesManager.get_share_files_dir(share_id) return files_dir / "file_metadata.json" @staticmethod - def get_file_path(project_id: str, filename: str) -> pathlib.Path: + def get_file_path(share_id: str, filename: str) -> pathlib.Path: """ - Gets the path to a specific file in the project. + Gets the path to a specific file in the share. """ - files_dir = ProjectFileManager.get_project_files_dir(project_id) + files_dir = ShareFilesManager.get_share_files_dir(share_id) return files_dir / filename @staticmethod - def read_file_metadata(project_id: str) -> ProjectFileCollection: + def read_file_metadata(share_id: str) -> ShareCollection: """ - Reads file metadata for a project. + Reads file metadata for a share. """ - path = ProjectFileManager.get_file_metadata_path(project_id) - return read_model(path, ProjectFileCollection) or ProjectFileCollection( + path = ShareFilesManager.get_file_metadata_path(share_id) + return read_model(path, ShareCollection) or ShareCollection( files=[], ) @staticmethod - def write_file_metadata(project_id: str, metadata: ProjectFileCollection) -> pathlib.Path: + def write_file_metadata(share_id: str, metadata: ShareCollection) -> pathlib.Path: """ - Writes file metadata for a project. + Writes file metadata for a share. """ - path = ProjectFileManager.get_file_metadata_path(project_id) + path = ShareFilesManager.get_file_metadata_path(share_id) write_model(path, metadata) return path @staticmethod - async def copy_file_to_project_storage( + async def copy_file_to_share_storage( context: ConversationContext, - project_id: str, + share_id: str, file: workbench_model.File, is_coordinator_file: bool = True, ) -> bool: """ - Copies a file from a conversation to project storage. + Copies a file from a conversation to share storage. """ # Create safe log data for debugging log_extra = { "file_name": file.filename, - "project_id": project_id, + "share_id": share_id, "conversation_id": str(context.id), "file_size": getattr(file, "file_size", 0), "is_coordinator_file": is_coordinator_file, @@ -140,10 +140,13 @@ async def copy_file_to_project_storage( logger.error("Missing filename in file metadata", extra=safe_extra(log_extra)) return False - # Check if project storage directory exists - files_dir = ProjectFileManager.get_project_files_dir(project_id) + # Check if share storage directory exists + files_dir = ShareFilesManager.get_share_files_dir(share_id) if not files_dir.exists(): - logger.debug(f"Creating project files directory: {files_dir}", extra=safe_extra(log_extra)) + logger.debug( + f"Creating knowledge transfer files directory: {files_dir}", + extra=safe_extra(log_extra), + ) files_dir.mkdir(parents=True, exist_ok=True) # Read the file from the conversation with error handling @@ -157,36 +160,43 @@ async def copy_file_to_project_storage( buffer_size = buffer.tell() if buffer_size == 0: logger.error( - "Failed to read file content from conversation - buffer is empty", extra=safe_extra(log_extra) + "Failed to read file content from conversation - buffer is empty", + extra=safe_extra(log_extra), ) return False except Exception as read_error: - logger.error(f"Error reading file from conversation: {read_error}", extra=safe_extra(log_extra)) + logger.error( + f"Error reading file from conversation: {read_error}", + extra=safe_extra(log_extra), + ) return False buffer.seek(0) - # Write the file to project storage - file_path = ProjectFileManager.get_file_path(project_id, file.filename) + # Write the file to share storage + file_path = ShareFilesManager.get_file_path(share_id, file.filename) try: - with open(file_path, "wb") as f: + with file_path.open("wb") as f: f.write(buffer.getvalue()) # Verify file was written if not file_path.exists() or file_path.stat().st_size == 0: logger.error( - "Failed to write file to project storage - file is missing or empty", + "Failed to write file to share storage - file is missing or empty", extra=safe_extra(log_extra), ) return False except Exception as write_error: - logger.error(f"Error writing file to project storage: {write_error}", extra=safe_extra(log_extra)) + logger.error( + f"Error writing file to share storage: {write_error}", + extra=safe_extra(log_extra), + ) return False # Store file metadata - file_metadata = ProjectFile( + file_metadata = ShareFile( file_id=str(getattr(file, "id", "")), filename=file.filename, content_type=file.content_type, @@ -200,62 +210,80 @@ async def copy_file_to_project_storage( # Add to metadata collection with error handling try: - metadata_path = ProjectFileManager.get_file_metadata_path(project_id) - logger.debug(f"Reading metadata from {metadata_path}", extra=safe_extra(log_extra)) + metadata_path = ShareFilesManager.get_file_metadata_path(share_id) + logger.debug( + f"Reading metadata from {metadata_path}", + extra=safe_extra(log_extra), + ) - metadata = read_model(metadata_path, ProjectFileCollection) + metadata = read_model(metadata_path, ShareCollection) if not metadata: # Create new collection - metadata = ProjectFileCollection( + metadata = ShareCollection( files=[], ) # Check if file already exists in collection - existing_idx = next((i for i, f in enumerate(metadata.files) if f.filename == file.filename), None) + existing_idx = next( + (i for i, f in enumerate(metadata.files) if f.filename == file.filename), + None, + ) if existing_idx is not None: metadata.files[existing_idx] = file_metadata else: metadata.files.append(file_metadata) # Save metadata - ProjectFileManager.write_file_metadata(project_id, metadata) + ShareFilesManager.write_file_metadata(share_id, metadata) # Verify metadata was written if not metadata_path.exists(): - logger.error(f"Failed to write metadata file {metadata_path}", extra=safe_extra(log_extra)) + logger.error( + f"Failed to write metadata file {metadata_path}", + extra=safe_extra(log_extra), + ) return False # Final check - verify file appears in metadata - verification_metadata = read_model(metadata_path, ProjectFileCollection) + verification_metadata = read_model(metadata_path, ShareCollection) if not verification_metadata: - logger.error("Metadata file exists but can't be read", extra=safe_extra(log_extra)) + logger.error( + "Metadata file exists but can't be read", + extra=safe_extra(log_extra), + ) return False file_exists_in_metadata = any(f.filename == file.filename for f in verification_metadata.files) if not file_exists_in_metadata: logger.error( - f"File metadata doesn't contain entry for {file.filename}", extra=safe_extra(log_extra) + f"File metadata doesn't contain entry for {file.filename}", + extra=safe_extra(log_extra), ) return False except Exception as metadata_error: - logger.error(f"Error updating metadata: {metadata_error}", extra=safe_extra(log_extra)) + logger.error( + f"Error updating metadata: {metadata_error}", + extra=safe_extra(log_extra), + ) return False return True except Exception as e: - logger.exception(f"Error copying file to project storage: {e}", extra=safe_extra(log_extra)) + logger.exception(f"Error copying file to share storage: {e}", extra=safe_extra(log_extra)) return False @staticmethod - async def delete_file_from_project_storage(context: ConversationContext, project_id: str, filename: str) -> bool: + async def delete_file_from_knowledge_share_storage( + context: ConversationContext, share_id: str, filename: str + ) -> bool: """ - Deletes a file from project storage. + Deletes a file from share storage. """ try: # Get the file path - file_path = ProjectFileManager.get_file_path(project_id, filename) + file_path = ShareFilesManager.get_file_path(share_id, filename) if not file_path.exists(): return True # File doesn't exist, nothing to delete @@ -263,8 +291,8 @@ async def delete_file_from_project_storage(context: ConversationContext, project file_path.unlink() # Update metadata - metadata_path = ProjectFileManager.get_file_metadata_path(project_id) - metadata = read_model(metadata_path, ProjectFileCollection) + metadata_path = ShareFilesManager.get_file_metadata_path(share_id) + metadata = read_model(metadata_path, ShareCollection) if not metadata: return True # No metadata to update @@ -272,29 +300,29 @@ async def delete_file_from_project_storage(context: ConversationContext, project metadata.files = [f for f in metadata.files if f.filename != filename] # Save metadata - ProjectFileManager.write_file_metadata(project_id, metadata) + ShareFilesManager.write_file_metadata(share_id, metadata) # Also notify Team conversations to delete their copies - await ProjectFileManager.notify_team_conversations_file_deleted( - context=context, project_id=project_id, filename=filename + await ShareFilesManager.notify_team_conversations_file_deleted( + context=context, share_id=share_id, filename=filename ) return True except Exception as e: - logger.exception(f"Error deleting file from project storage: {e}") + logger.exception(f"Error deleting file from share storage: {e}") return False @staticmethod async def notify_team_conversations_file_deleted( - context: ConversationContext, project_id: str, filename: str + context: ConversationContext, share_id: str, filename: str ) -> None: """ Notifies Team conversations to delete a file that was deleted by the Coordinator. """ try: # Get Team conversations - team_conversations = await ProjectFileManager.get_team_conversations(context, project_id) + team_conversations = await ShareFilesManager.get_team_conversations(context, share_id) if not team_conversations: return @@ -328,24 +356,24 @@ async def notify_team_conversations_file_deleted( @staticmethod async def copy_file_to_conversation( context: ConversationContext, - project_id: str, + share_id: str, filename: str, target_conversation_id: str, ) -> bool: """ - Copies a file from project storage to a target conversation. + Copies a file from share storage to a target conversation. """ try: - # Check if the file exists in project storage - file_path = ProjectFileManager.get_file_path(project_id, filename) + # Check if the file exists in share storage + file_path = ShareFilesManager.get_file_path(share_id, filename) if not file_path.exists(): - logger.warning(f"File {filename} not found in project storage") + logger.warning(f"File {filename} not found in share storage") return False # Get file metadata - metadata = ProjectFileManager.read_file_metadata(project_id) + metadata = ShareFilesManager.read_file_metadata(share_id) if not metadata: - logger.warning(f"No file metadata found for project {project_id}") + logger.warning(f"No file metadata found for share {share_id}") return False # Find the file metadata @@ -362,7 +390,7 @@ async def copy_file_to_conversation( # Read the file content try: - with open(file_path, "rb") as f: + with file_path.open("rb") as f: file_bytes = f.read() if not file_bytes: @@ -398,7 +426,11 @@ async def copy_file_to_conversation( # Upload the file try: file_content.seek(0) # Reset position to start of file - await target_client.write_file(filename=filename, file_content=file_content, content_type=content_type) + await target_client.write_file( + filename=filename, + file_content=file_content, + content_type=content_type, + ) logger.debug(f"Successfully uploaded file {filename}") return True except Exception as upload_error: @@ -410,21 +442,21 @@ async def copy_file_to_conversation( return False @staticmethod - async def get_team_conversations(context: ConversationContext, project_id: str) -> List[str]: + async def get_team_conversations(context: ConversationContext, share_id: str) -> list[str]: """ - Gets all Team conversation IDs for a project. + Gets all Team conversation IDs for a share. """ try: # Get linked conversations - linked_conversations = await ConversationProjectManager.get_linked_conversations(context) + linked_conversations = await ShareManager.get_linked_conversations(context) # Filter for team conversations team_conversations = [] for conv_id in linked_conversations: # Check if this is a team conversation - temp_context = await ProjectFileManager.create_temporary_context(context, conv_id) + temp_context = await ShareFilesManager.create_temporary_context(context, conv_id) if temp_context: - role = await ConversationProjectManager.get_conversation_role(temp_context) + role = await ShareManager.get_conversation_role(temp_context) if role == ConversationRole.TEAM: team_conversations.append(conv_id) @@ -437,7 +469,7 @@ async def get_team_conversations(context: ConversationContext, project_id: str) @staticmethod async def create_temporary_context( source_context: ConversationContext, target_conversation_id: str - ) -> Optional[ConversationContext]: + ) -> ConversationContext | None: """ Creates a temporary context for a target conversation. """ @@ -453,15 +485,15 @@ async def create_temporary_context( @staticmethod async def synchronize_files_to_team_conversation( context: ConversationContext, - project_id: str, + share_id: str, ) -> None: """ - Synchronize all project files to a Team conversation. + Synchronize all share files to a Team conversation. """ - logger.debug(f"Starting file synchronization for project {project_id}") + logger.debug(f"Starting file synchronization for share {share_id}") - # Get file metadata for the project - metadata = ProjectFileManager.read_file_metadata(project_id) + # Get file metadata for the share + metadata = ShareFilesManager.read_file_metadata(share_id) if not metadata or not metadata.files: # No metadata found @@ -493,9 +525,9 @@ async def synchronize_files_to_team_conversation( continue # Try to copy the file - success = await ProjectFileManager.copy_file_to_conversation( + success = await ShareFilesManager.copy_file_to_conversation( context=context, - project_id=project_id, + share_id=share_id, filename=file_meta.filename, target_conversation_id=str(context.id), ) @@ -535,9 +567,8 @@ async def synchronize_files_to_team_conversation( f"Synchronized files to Team conversation: {len(successful_files)} new, {len(skipped_files)} existing" ) - await ProjectStorage.log_project_event( + await ShareManager.log_share_event( context=context, - project_id=project_id, entry_type=LogEntryType.FILE_SHARED, message=sync_message, metadata={ @@ -548,13 +579,13 @@ async def synchronize_files_to_team_conversation( ) @staticmethod - async def get_shared_files(context: ConversationContext, project_id: str) -> Dict[str, ProjectFile]: + async def get_shared_files(context: ConversationContext, share_id: str) -> dict[str, ShareFile]: """ - Gets all shared files for a project with filename as key. + Gets all shared files for a share with filename as key. """ try: - # Get file metadata for the project - metadata = ProjectFileManager.read_file_metadata(project_id) + # Get file metadata for the share + metadata = ShareFilesManager.read_file_metadata(share_id) if not metadata or not metadata.files: return {} @@ -567,15 +598,15 @@ async def get_shared_files(context: ConversationContext, project_id: str) -> Dic return {} @staticmethod - async def process_file_update_notification( - context: ConversationContext, project_id: str, update_type: str, filename: str + async def process_share_update_notification( + context: ConversationContext, share_id: str, update_type: str, filename: str ) -> bool: """ Processes a file update notification in a Team conversation. """ try: # First verify that this is a Team conversation - role = await detect_assistant_role(context) + role = await ShareManager.get_conversation_role(context) if role != ConversationRole.TEAM: logger.warning("Only Team conversations should process file update notifications") @@ -583,9 +614,12 @@ async def process_file_update_notification( # Process based on update type if update_type == "file_created" or update_type == "file_updated": - # Synchronize the specific file from project storage - success = await ProjectFileManager.copy_file_to_conversation( - context=context, project_id=project_id, filename=filename, target_conversation_id=str(context.id) + # Synchronize the specific file from share storage + success = await ShareFilesManager.copy_file_to_conversation( + context=context, + share_id=share_id, + filename=filename, + target_conversation_id=str(context.id), ) action = "added" if update_type == "file_created" else "updated" diff --git a/assistants/project-assistant/assistant/logging.py b/assistants/project-assistant/assistant/logging.py index 75186da65..2e865454a 100644 --- a/assistants/project-assistant/assistant/logging.py +++ b/assistants/project-assistant/assistant/logging.py @@ -1,23 +1,22 @@ """ -Logging utilities for project assistant. +Logging utilities for knowledge transfer assistant. -This module provides enhanced logging capabilities for the project assistant, +This module provides enhanced logging capabilities for the knowledge transfer assistant, including JSON formatting and file logging. """ import json import logging -import os import platform from datetime import datetime from pathlib import Path -from typing import Any, Dict, Optional +from typing import Any from uuid import UUID from pydantic import BaseModel # Configure the root logger -logger = logging.getLogger("project-assistant") +logger = logging.getLogger("knowledge-transfer-assistant") logger.setLevel(logging.DEBUG) # Ensure propagation is enabled to allow logs to reach the root handler @@ -75,7 +74,7 @@ def format(self, record) -> str: "timestamp": self.formatTime(record, self.datefmt), "level": record.levelname, "conversation_id": record_dict.get("conversation_id", None), - "project_id": record_dict.get("project_id", None), + "share_id": record_dict.get("share_id", None), "message": record.getMessage(), "data": record_dict.get("data", None), "module": record.module, @@ -100,7 +99,7 @@ def format(self, record) -> str: "message", "asctime", "conversation_id", - "project_id", + "share_id", "data", ] } @@ -121,24 +120,21 @@ def format(self, record) -> str: return json.dumps(simple_record) -def setup_file_logging(log_dir: Optional[str] = None) -> Path: +def setup_file_logging(log_dir: str | None = None) -> Path: """ Set up file logging with JSON formatting. Args: - log_dir: Directory for log files. If None, uses the project's .data/logs/ directory + log_dir: Directory for log files. If None, uses the knowledge transfer's .data/logs/ directory Returns: Path to the log file """ - # By default, store logs in the project's .data directory if log_dir is None: - # Get the directory where the current module is located current_file = Path(__file__) - project_dir = current_file.parent.parent # Go up to project-assistant directory - log_path = project_dir / ".data" / "logs" + share_dir = current_file.parent.parent + log_path = share_dir / ".data" / "logs" else: - # Use the provided directory log_path = Path(log_dir) # Ensure directory exists @@ -146,8 +142,8 @@ def setup_file_logging(log_dir: Optional[str] = None) -> Path: # Create log file path with timestamp to avoid conflicts timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - log_file = log_path / f"project_assistant_{timestamp}.json" - line_log_file = log_path / f"project_assistant_{timestamp}.log" # Add a regular log file too + log_file = log_path / f"log_{timestamp}.json" + line_log_file = log_path / f"log_{timestamp}.log" # Add a regular log file too try: # Remove any existing file handlers to avoid duplicates @@ -172,7 +168,7 @@ def setup_file_logging(log_dir: Optional[str] = None) -> Path: extra={ "system": platform.system(), "python_version": platform.python_version(), - "app": "project-assistant", + "app": "knowledge-transfer-assistant", "path": str(log_file.absolute()), }, ) @@ -186,8 +182,8 @@ def setup_file_logging(log_dir: Optional[str] = None) -> Path: try: import stat - os.chmod(log_file, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH) - os.chmod(line_log_file, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH) + Path(log_file).chmod(stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH) + Path(line_log_file).chmod(stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH) except Exception as e: logger.warning(f"Could not set log file permissions: {e}") print(f"Permission error: {e}") @@ -200,11 +196,11 @@ def setup_file_logging(log_dir: Optional[str] = None) -> Path: try: # Try a different subfolder in the .data directory current_file = Path(__file__) - project_dir = current_file.parent.parent # Go up to project-assistant directory - fallback_dir = project_dir / ".data" / "fallback_logs" - os.makedirs(fallback_dir, exist_ok=True) - log_file = Path(fallback_dir) / f"project_assistant_{timestamp}.json" - line_log_file = Path(fallback_dir) / f"project_assistant_{timestamp}.log" + share_dir = current_file.parent.parent + fallback_dir = share_dir / ".data" / "fallback_logs" + Path(fallback_dir).mkdir(parents=True, exist_ok=True) + log_file = Path(fallback_dir) / f"log_{timestamp}.json" + line_log_file = Path(fallback_dir) / f"log_{timestamp}.log" json_file_handler = logging.FileHandler(log_file) json_file_handler.setLevel(logging.DEBUG) @@ -225,7 +221,7 @@ def setup_file_logging(log_dir: Optional[str] = None) -> Path: return log_file -def extra_data(data: Any) -> Dict[str, Any]: +def extra_data(data: Any) -> dict[str, Any]: """ Helper function to prepare extra data for log messages. @@ -253,4 +249,4 @@ def extra_data(data: Any) -> Dict[str, Any]: # Make extra_data available for import -__all__ = ["setup_file_logging", "extra_data", "logger"] +__all__ = ["extra_data", "logger", "setup_file_logging"] diff --git a/assistants/project-assistant/assistant/notifications.py b/assistants/project-assistant/assistant/notifications.py new file mode 100644 index 000000000..baa0c592f --- /dev/null +++ b/assistants/project-assistant/assistant/notifications.py @@ -0,0 +1,179 @@ +from typing import Any + +from semantic_workbench_api_model.workbench_model import ( + AssistantStateEvent, + MessageType, + NewConversationMessage, +) +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.domain.share_manager import ShareManager + +from .conversation_clients import ConversationClientManager +from .data import InspectorTab +from .logging import logger + + +class Notifications: + @staticmethod + async def notify(context: ConversationContext, message: str, debug_data: dict[str, Any] | None = None) -> None: + """Send text message notification to current conversation only.""" + await context.send_messages( + NewConversationMessage( + content=message, + message_type=MessageType.notice, + debug_data=debug_data, + ) + ) + + @staticmethod + async def notify_self_and_other( + context: ConversationContext, + share_id: str, + message: str, + other_conversation_id: str | None = None, + ) -> None: + """ + Send text message notification to current conversation and one other. + + If called from team conversation: notifies team + coordinator + If called from coordinator: notifies coordinator + specified other_conversation_id + """ + # Always notify current conversation + await Notifications.notify(context, message) + + share = await ShareManager.get_share(context) + if not share: + return + + current_id = str(context.id) + + # Determine the other conversation to notify + if other_conversation_id: + target_id = other_conversation_id + elif share.coordinator_conversation_id and share.coordinator_conversation_id != current_id: + target_id = share.coordinator_conversation_id + else: + return + + try: + client = ConversationClientManager.get_conversation_client(context, target_id) + await client.send_messages( + NewConversationMessage( + content=message, + message_type=MessageType.notice, + ) + ) + except Exception as e: + logger.error(f"Failed to notify conversation {target_id}: {e}") + + @staticmethod + async def notify_all( + context: ConversationContext, share_id: str, message: str, debug_data: dict[str, Any] | None = None + ) -> None: + """Send text message notification to all knowledge transfer conversations.""" + + if debug_data is None: + debug_data = {} + + share = await ShareManager.get_share(context) + if not share: + return + + # Always notify current conversation + await Notifications.notify(context, message) + + current_id = str(context.id) + + # Notify coordinator conversation + if share.coordinator_conversation_id and share.coordinator_conversation_id != current_id: + try: + client = ConversationClientManager.get_conversation_client(context, share.coordinator_conversation_id) + await client.send_messages( + NewConversationMessage( + content=message, + message_type=MessageType.notice, + debug_data=debug_data, + ) + ) + except Exception as e: + logger.error(f"Failed to notify coordinator conversation: {e}") + + # Notify all team conversations + for conv_id in share.team_conversations: + if conv_id != current_id and conv_id != share.coordinator_conversation_id: + try: + client = ConversationClientManager.get_conversation_client(context, conv_id) + await client.send_messages( + NewConversationMessage( + content=message, + message_type=MessageType.notice, + ) + ) + except Exception as e: + logger.error(f"Failed to notify conversation {conv_id}: {e}") + + # State Update Notifications (UI refreshes) + + @staticmethod + async def notify_state_update(context: ConversationContext, tabs: list[InspectorTab]) -> None: + """Send state update notifications to refresh UI in current conversation only.""" + for tab in tabs: + state_event = AssistantStateEvent( + state_id=tab.value, + event="updated", + state=None, + ) + await context.send_conversation_state_event(state_event) + + @staticmethod + async def notify_all_state_update(context: ConversationContext, tabs: list[InspectorTab]) -> None: + """Send state update notifications to refresh UI across all share conversations.""" + + # Refresh current conversation first + await Notifications.notify_state_update(context, tabs) + + # Refresh other conversations + share = await ShareManager.get_share(context) + if not share: + return + + current_id = str(context.id) + assistant_id = context.assistant.id + + # Refresh coordinator conversation + if share.coordinator_conversation_id and share.coordinator_conversation_id != current_id: + try: + client = ConversationClientManager.get_conversation_client(context, share.coordinator_conversation_id) + + for tab in tabs: + state_event = AssistantStateEvent( + state_id=tab.value, + event="updated", + state=None, + ) + await client.send_conversation_state_event( + state_event=state_event, + assistant_id=assistant_id, + ) + except Exception as e: + logger.error(f"Failed to refresh coordinator conversation UI: {e}") + + # Refresh all team conversations + for conv_id in share.team_conversations: + if conv_id != current_id and conv_id != share.coordinator_conversation_id: + try: + client = ConversationClientManager.get_conversation_client(context, conv_id) + + for tab in tabs: + state_event = AssistantStateEvent( + state_id=tab.value, + event="updated", + state=None, + ) + await client.send_conversation_state_event( + state_event=state_event, + assistant_id=assistant_id, + ) + except Exception as e: + logger.error(f"Failed to refresh conversation {conv_id} UI: {e}") diff --git a/assistants/project-assistant/assistant/project_common.py b/assistants/project-assistant/assistant/project_common.py deleted file mode 100644 index 800067ef8..000000000 --- a/assistants/project-assistant/assistant/project_common.py +++ /dev/null @@ -1,80 +0,0 @@ -""" -Common utilities shared between project assistant modes. - -This module provides shared functionality for team and coordinator conversation handlers, -helping to reduce code duplication and maintain consistency. -""" - -from typing import Dict, Optional - -from semantic_workbench_assistant.assistant_app import ConversationContext - -from .conversation_project_link import ConversationProjectManager -from .logging import logger -from .project_data import LogEntryType -from .project_storage import ProjectStorage -from .project_storage_models import ConversationRole - - -async def detect_assistant_role(context: ConversationContext) -> ConversationRole: - """ - Detects whether this conversation is in Coordinator or Team mode. - - This method examines the conversation metadata to determine the role - of the current conversation in the project. The role is always stored - in the conversation metadata as "project_role". - - Args: - context: The conversation context to examine - - Returns: - ConversationRole.COORDINATOR or ConversationRole.TEAM - """ - try: - conversation = await context.get_conversation() - metadata = conversation.metadata or {} - role_str = metadata.get("project_role", "coordinator") - - if role_str == "team": - return ConversationRole.TEAM - else: - return ConversationRole.COORDINATOR - except Exception as e: - logger.exception(f"Error detecting assistant role: {e}") - # Default to coordinator role if we can't determine - return ConversationRole.COORDINATOR - - -async def log_project_action( - context: ConversationContext, - entry_type: LogEntryType, - message: str, - related_entity_id: Optional[str] = None, - additional_metadata: Optional[Dict] = None, -) -> None: - """ - Log an action to the project log. - - This utility function handles retrieving the project ID and logging the event - using the appropriate storage mechanism. It's used by both Coordinator and Team mode - handlers to maintain consistent logging. - - Args: - context: The conversation context - entry_type: Type of log entry - message: Human-readable description of the action - related_entity_id: Optional ID of a related entity (e.g., request ID) - additional_metadata: Optional additional metadata to include in the log - """ - project_id = await ConversationProjectManager.get_associated_project_id(context) - if not project_id: - return - - await ProjectStorage.log_project_event( - context=context, - project_id=project_id, - entry_type=entry_type.value, - message=message, - related_entity_id=related_entity_id, - metadata=additional_metadata, - ) diff --git a/assistants/project-assistant/assistant/project_data.py b/assistants/project-assistant/assistant/project_data.py deleted file mode 100644 index 33d1aec32..000000000 --- a/assistants/project-assistant/assistant/project_data.py +++ /dev/null @@ -1,344 +0,0 @@ -""" -Data models for project entities (briefs, information requests, logs, etc.) - -This module provides the core data structures for the project assistant, -without any artifact abstraction or unnecessary complexity. -""" - -import uuid -from datetime import datetime -from enum import Enum -from typing import Any, Dict, List, Optional - -from pydantic import BaseModel, Field - - -class ProjectState(str, Enum): - """ - States for project progression. - - The project state represents the current phase of the project lifecycle. - Projects follow a standard flow: PLANNING -> READY_FOR_WORKING -> IN_PROGRESS -> COMPLETED. - ABORTED is a terminal state that can be reached from any other state if the project is canceled. - """ - - PLANNING = "planning" # Initial state - Coordinator is defining the project brief and goals - READY_FOR_WORKING = "ready_for_working" # Project is defined and ready for team members to begin work - IN_PROGRESS = "in_progress" # Team members are actively working on the project - COMPLETED = "completed" # Project goals have been achieved and the project is complete - ABORTED = "aborted" # Project was terminated early or canceled - - -class RequestPriority(str, Enum): - """ - Priority levels for information requests. - - Defines the urgency of a request from a team member to the Coordinator. - Higher priority requests should be addressed more quickly by the Coordinator. - MEDIUM is the default priority for most requests. - """ - - LOW = "low" # Non-urgent request, can be addressed when convenient - MEDIUM = "medium" # Standard priority for most requests - HIGH = "high" # Urgent request requiring prompt attention - CRITICAL = "critical" # Highest priority, requires immediate attention from the Coordinator - - -class RequestStatus(str, Enum): - """ - Status options for information requests. - - Represents the lifecycle of an information request from creation to resolution. - Requests typically progress from NEW -> ACKNOWLEDGED -> IN_PROGRESS -> RESOLVED. - DEFERRED indicates requests that will be addressed later. - """ - - NEW = "new" # Request has been created but not yet acknowledged by the Coordinator - ACKNOWLEDGED = "acknowledged" # Coordinator has seen the request but hasn't started working on it - IN_PROGRESS = "in_progress" # Coordinator is actively working on the request - RESOLVED = "resolved" # Coordinator has provided a resolution to the request - DEFERRED = "deferred" # Request handling has been postponed to a later time - - -class LogEntryType(str, Enum): - """ - Types of log entries in the project log. - - These entry types categorize all events that can occur during a project. - Log entries provide a chronological history of actions and events in the project, - allowing both Coordinators and team members to track progress and changes. - """ - - # Brief-related events - BRIEFING_CREATED = "briefing_created" - BRIEFING_UPDATED = "briefing_updated" - - # Goal-related events - GOAL_ADDED = "goal_added" - GOAL_DELETED = "goal_deleted" - - # Information request deletion event - REQUEST_DELETED = "request_deleted" - - # Information request lifecycle events - REQUEST_CREATED = "request_created" - REQUEST_UPDATED = "request_updated" - REQUEST_RESOLVED = "request_resolved" - - # Project state and progress events - STATUS_CHANGED = "status_changed" - GOAL_COMPLETED = "goal_completed" - CRITERION_COMPLETED = "criterion_completed" - - # Participant events - PARTICIPANT_JOINED = "participant_joined" - PARTICIPANT_LEFT = "participant_left" - - # Project lifecycle events - PROJECT_STARTED = "project_started" - PROJECT_COMPLETED = "project_completed" - PROJECT_ABORTED = "project_aborted" - - # Miscellaneous events - MILESTONE_PASSED = "milestone_passed" - INFORMATION_UPDATE = "information_update" - FILE_SHARED = "file_shared" - FILE_DELETED = "file_deleted" - KB_UPDATE = "kb_update" - CUSTOM = "custom" - - -class BaseEntity(BaseModel): - """ - Base class for all project entities. - - Provides common fields and behavior that all project-related data models inherit. - This ensures consistency in how entities are created, versioned, and tracked. - All derived classes will have proper timestamps and creator information. - """ - - version: int = 1 - created_at: datetime = Field(default_factory=datetime.utcnow) - updated_at: datetime = Field(default_factory=datetime.utcnow) - created_by: str # User ID - updated_by: str # User ID - conversation_id: str # Source conversation ID - - -class SuccessCriterion(BaseModel): - """ - A specific measurable criterion that defines project success. - - Success criteria are individual checkpoints that must be completed - to achieve a project goal. Each criterion represents a concrete, - verifiable action or condition that can be marked as completed. - - When all success criteria for all goals are completed, the project - can be considered successful. Team members typically report when - criteria have been met. - """ - - id: str = Field(default_factory=lambda: str(uuid.uuid4())) # Unique identifier for the criterion - description: str # Clear, specific description of what needs to be accomplished - completed: bool = False # Whether this criterion has been met - completed_at: Optional[datetime] = None # When the criterion was marked as completed - completed_by: Optional[str] = None # User ID of the person who completed the criterion - - -class ProjectGoal(BaseModel): - """ - A specific goal for the project with associated success criteria. - - Project goals represent the major objectives that need to be accomplished - for the project to be successful. Each goal consists of a name, description, - priority level, and a list of specific success criteria that define when - the goal can be considered complete. - - Goals are typically set by the Coordinator during project planning and then tracked - by both the Coordinator and team members throughout the project. - """ - - id: str = Field(default_factory=lambda: str(uuid.uuid4())) # Unique identifier for the goal - name: str # Short, clear name of the goal - description: str # Detailed description of what the goal entails - priority: int = 1 # Priority level (1 = highest priority, increasing numbers = lower priority) - success_criteria: List[SuccessCriterion] = Field(default_factory=list) # List of criteria to meet - - -class ProjectBrief(BaseEntity): - """ - A thorough, comprehensive documentation of the project or context to be transferred, - containing all relevant information necessary for understanding and execution. - - The brief is the primary document that defines the project or context. - It serves as the central reference for both the Coordinator and team members - to understand what needs to be accomplished and why, or in the case of context transfer, - what information needs to be preserved and communicated. - - In the standard project configuration, it includes project goals, success criteria, - and complete context. In context transfer configuration, it focuses on capturing - comprehensive context through detailed description and additional_context fields. - - Created by the Coordinator during the PLANNING phase, the brief must be - completed before the project can move to the READY_FOR_WORKING state. - Once team operations begin, the brief can still be updated, - but major changes should be communicated to all participants. - """ - - title: str # Short, distinctive title for the project or context bundle to transfer - description: str # Comprehensive description of the project's or context's purpose, scope, and context - timeline: Optional[str] = None # Expected timeline or deadline information (not used in context transfer mode) - additional_context: Optional[str] = ( - None # Detailed supplementary information for project participants or context transfer - ) - - -class ProjectWhiteboard(BaseEntity): - """ - A dynamic whiteboard that gets automatically updated as the coordinator assembles their project. - - The project whiteboard captures and maintains important project context that emerges during - conversations. It is automatically updated after each assistant message by analyzing - the conversation history and extracting key information. - - Unlike a traditional knowledge base with separate sections, the whiteboard is a single - consolidated view that shows the most relevant information for the project. It serves as - a dynamic, evolving source of truth that all team members can reference. - """ - - content: str = "" # Markdown content for the whiteboard - is_auto_generated: bool = True # Whether the content was auto-generated or manually edited - - -class InformationRequest(BaseEntity): - """ - A specific information need or blocker submitted by team members - that requires Coordinator support to resolve. - - Information requests are the primary communication mechanism for team members - to request assistance, information, or resources from the Coordinator. They represent - questions, blockers, or needs that arise during project execution. - - The lifecycle of an information request typically follows: - 1. Created by a team member (NEW status) - 2. Seen by the Coordinator (ACKNOWLEDGED status) - 3. Worked on by the Coordinator (IN_PROGRESS status) - 4. Completed with a resolution (RESOLVED status) - - Requests can also be DEFERRED for later handling or CANCELLED if no longer relevant. - The request priority helps the Coordinator prioritize which requests to handle first. - """ - - # Request identification - request_id: str = Field(default_factory=lambda: str(uuid.uuid4())) # Unique ID for this request - - # Request details - title: str # Short summary of the request - description: str # Detailed explanation of what is needed - priority: RequestPriority = RequestPriority.MEDIUM # Urgency level of the request - status: RequestStatus = RequestStatus.NEW # Current status in the request lifecycle - - # Reference to the related goal(s) if applicable - related_goal_ids: List[str] = Field(default_factory=list) # IDs of project goals this request relates to - - # Resolution information - resolution: Optional[str] = None # The answer or solution provided by the Coordinator - resolved_at: Optional[datetime] = None # When the request was resolved - resolved_by: Optional[str] = None # User ID of the Coordinator who resolved this request - - # Updates and comments on this request - updates: List[Dict[str, Any]] = Field(default_factory=list) # History of status updates and comments - - -class LogEntry(BaseModel): - """ - Individual entry in the project log. - - Log entries record all significant events that occur during a project. - Each entry has a specific type, message, and associated metadata. - - The chronological sequence of log entries forms a complete audit trail - of the project's progress, actions taken, and events that occurred. - This provides accountability and helps with post-project review. - - Log entries are typically created automatically by the system when - certain actions are taken, but can also be manually added by participants. - """ - - id: str = Field(default_factory=lambda: str(uuid.uuid4())) # Unique identifier for this log entry - timestamp: datetime = Field(default_factory=datetime.utcnow) # When this entry was created - entry_type: LogEntryType # The category/type of this log entry - message: str # Human-readable description of what happened - user_id: str # ID of the user who performed the action or triggered the event - user_name: str # Name of the user, for display purposes - - # Optional additional context for the entry - related_entity_id: Optional[str] = None # ID of related entity (e.g., information request ID) - entity_type: Optional[str] = None # Type of related entity (e.g., "information_request", "goal") - metadata: Optional[Dict] = None # Additional structured data about the event - - -class ProjectLog(BaseModel): - """ - A chronological record of all actions and interactions during the project, - including updates and progress reports. - - The project log serves as the comprehensive history of everything that - happened during a project. It contains a chronological list of log entries - describing actions, state changes, and significant events. - - The log is used for: - - Real-time monitoring of project activity - - Post-project review and analysis - - Accountability and documentation purposes - - Tracking the sequence of events leading to outcomes - - Both the Coordinator and team members can view the project log, providing transparency - into what has occurred during the project. - """ - - entries: List[LogEntry] = Field(default_factory=list) # Chronological list of log entries - - -class ProjectInfo(BaseModel): - """ - Core information about a project. - - This model stores essential project metadata that doesn't fit into other - specific models like brief or whiteboard. It's the central reference point - for project identification, state, and team collaboration settings. - """ - - project_id: str # Unique identifier for the project - state: ProjectState = ProjectState.PLANNING # Current project lifecycle state - coordinator_conversation_id: Optional[str] = None # ID of the coordinator's conversation - team_conversation_id: Optional[str] = None # ID of the team conversation - share_url: Optional[str] = None # Shareable URL for inviting users to the team conversation - created_at: datetime = Field(default_factory=datetime.utcnow) - updated_at: datetime = Field(default_factory=datetime.utcnow) - updated_by: Optional[str] = None # User ID who last updated the project info - status_message: Optional[str] = None # Custom status message about the project - progress_percentage: Optional[int] = None # Current progress percentage (0-100) - next_actions: List[str] = Field(default_factory=list) # List of next actions planned - version: int = 1 # Version counter for tracking changes - completed_criteria: int = 0 # Count of completed success criteria - total_criteria: int = 0 # Total count of success criteria - lifecycle: Dict[str, Any] = Field(default_factory=dict) # Lifecycle metadata - - -class Project(BaseModel): - """ - A comprehensive representation of a project, including its brief, whiteboard, - information requests, logs, and other related entities. - - This model encapsulates all the components that make up a project, - providing a single point of access to all relevant information. - It serves as the main interface for interacting with the project data. - """ - - info: Optional[ProjectInfo] - brief: Optional[ProjectBrief] - goals: List[ProjectGoal] = Field(default_factory=list) - requests: List[InformationRequest] = Field(default_factory=list) - whiteboard: Optional[ProjectWhiteboard] - log: Optional[ProjectLog] = Field(default_factory=lambda: ProjectLog()) diff --git a/assistants/project-assistant/assistant/project_manager.py b/assistants/project-assistant/assistant/project_manager.py deleted file mode 100644 index d4df4bd2f..000000000 --- a/assistants/project-assistant/assistant/project_manager.py +++ /dev/null @@ -1,1296 +0,0 @@ -""" -Project management logic for working with project data. - -This module provides the core business logic for working with project data -""" - -import re -import uuid -from datetime import datetime -from typing import List, Optional, Tuple - -import openai_client -from semantic_workbench_api_model.workbench_model import ( - ConversationPermission, - MessageType, - NewConversation, - NewConversationMessage, - NewConversationShare, - ParticipantRole, -) -from semantic_workbench_assistant.assistant_app import ConversationContext - -from .config import assistant_config -from .conversation_clients import ConversationClientManager -from .conversation_project_link import ConversationProjectManager -from .logging import logger -from .project_data import ( - InformationRequest, - LogEntryType, - Project, - ProjectBrief, - ProjectGoal, - ProjectInfo, - ProjectLog, - ProjectState, - ProjectWhiteboard, - RequestPriority, - RequestStatus, - SuccessCriterion, -) -from .project_notifications import ProjectNotifier -from .project_storage import ProjectStorage, ProjectStorageManager -from .project_storage_models import ConversationRole -from .utils import get_current_user, require_current_user - - -class ProjectManager: - """ - Manages the creation, modification, and lifecycle of projects. - - The ProjectManager provides a centralized set of operations for working with project data. - It handles all the core business logic for interacting with projects, ensuring that - operations are performed consistently and following the proper rules and constraints. - - This class implements the primary interface for both Coordinators and team members to interact - with project entities like briefs, information requests, and knowledge bases. It abstracts - away the storage details and provides a clean API for project operations. - - All methods are implemented as static methods to facilitate easy calling from - different parts of the codebase without requiring instance creation. - """ - - @staticmethod - async def create_shareable_team_conversation(context: ConversationContext, project_id: str) -> str: - """ - Creates a new shareable team conversation template. - - This creates a new conversation owned by the same user as the current conversation, - intended to be used as a shareable team conversation template. This is NOT a - conversation that anyone will directly use. Instead, it's a template that gets - copied when team members redeem the share URL, creating their own individual - team conversations. - - The conversation is tagged with metadata indicating its purpose and gets a - share URL that can be used by team members to join the project. - - Args: - context: Current conversation context - project_id: ID of the project - - Returns: - share_url: URL for joining a team conversation - """ - - # Get the current user ID to set as owner - user_id, _ = await get_current_user(context) - if not user_id: - raise ValueError("Cannot create team conversation: no user found") - - new_conversation = NewConversation( - metadata={ - "is_team_conversation": True, - "project_id": project_id, - "setup_complete": True, - "project_role": "team", - "assistant_mode": "team", - }, - ) - client = context._conversations_client - conversation = await client.create_conversation_with_owner(new_conversation=new_conversation, owner_id=user_id) - - if not conversation or not conversation.id: - raise ValueError("Failed to create team conversation") - - new_share = NewConversationShare( - conversation_id=conversation.id, - label="Join Team Conversation", - conversation_permission=ConversationPermission.read, - metadata={ - "project_id": project_id, - "is_team_conversation": True, - "showDuplicateAction": True, - "show_duplicate_action": True, - }, - ) - share = await context._conversations_client.create_conversation_share_with_owner( - new_conversation_share=new_share, owner_id=user_id - ) - - share_url = f"/conversation-share/{share.id}/redeem" - - # Store team conversation info in ProjectInfo - project_info = ProjectStorage.read_project_info(project_id) - if project_info: - project_info.team_conversation_id = str(conversation.id) - project_info.share_url = share_url - project_info.updated_at = datetime.utcnow() - ProjectStorage.write_project_info(project_id, project_info) - else: - raise ValueError(f"Project info not found for project ID: {project_id}") - - return share_url - - @staticmethod - async def create_project(context: ConversationContext) -> str: - """ - Creates a new project and associates the current conversation with it. - - This is the initial step in project creation. It: - 1. Generates a unique project ID - 2. Associates the current conversation with that project - 3. Sets the current conversation as Coordinator for the project - 4. Creates empty project data structures (brief, whiteboard, etc.) - 5. Logs the project creation event - - After creating a project, the Coordinator should proceed to create a project brief - with specific goals and success criteria. - - Args: - context: Current conversation context containing user/assistant information - - Returns: - Tuple of (success, project_id) where: - - success: Boolean indicating if the creation was successful - - project_id: If successful, the UUID of the newly created project - """ - - # Generate a unique project ID - project_id = str(uuid.uuid4()) - - # Create the project directory structure first - project_dir = ProjectStorageManager.get_project_dir(project_id) - logger.debug(f"Created project directory: {project_dir}") - - # Create and save the initial project info - project_info = ProjectInfo(project_id=project_id, coordinator_conversation_id=str(context.id)) - - # Save the project info - ProjectStorage.write_project_info(project_id, project_info) - logger.debug(f"Created and saved project info: {project_info}") - - # Associate the conversation with the project - logger.debug(f"Associating conversation {context.id} with project {project_id}") - await ConversationProjectManager.associate_conversation_with_project(context, project_id) - - # No need to set conversation role in project storage, as we use metadata - logger.debug(f"Conversation {context.id} is Coordinator for project {project_id}") - - # Ensure linked_conversations directory exists - linked_dir = ProjectStorageManager.get_linked_conversations_dir(project_id) - logger.debug(f"Ensured linked_conversations directory exists: {linked_dir}") - - return project_id - - @staticmethod - async def join_project( - context: ConversationContext, - project_id: str, - role: ConversationRole = ConversationRole.TEAM, - ) -> bool: - """ - Joins an existing project. - - Args: - context: Current conversation context - project_id: ID of the project to join - role: Role for this conversation (COORDINATOR or TEAM) - - Returns: - True if joined successfully, False otherwise - """ - try: - # Check if project exists - if not ProjectStorageManager.project_exists(project_id): - logger.error(f"Cannot join project: project {project_id} does not exist") - return False - - # Associate the conversation with the project - await ConversationProjectManager.associate_conversation_with_project(context, project_id) - - # Role is set in metadata, not in storage - - logger.info(f"Joined project {project_id} as {role.value}") - return True - - except Exception as e: - logger.exception(f"Error joining project: {e}") - return False - - @staticmethod - async def get_project_id(context: ConversationContext) -> Optional[str]: - """ - Gets the project ID associated with the current conversation. - - Every conversation that's part of a project has an associated project ID. - This method retrieves that ID, which is used for accessing project-related - data structures. - - Args: - context: Current conversation context - - Returns: - The project ID string if the conversation is part of a project, None otherwise - """ - return await ConversationProjectManager.get_associated_project_id(context) - - @staticmethod - async def get_project_role(context: ConversationContext) -> Optional[ConversationRole]: - """ - Gets the role of the current conversation in its project. - - Each conversation participating in a project has a specific role: - - COORDINATOR: The primary conversation that created and manages the project - - TEAM: Conversations where team members are carrying out the project tasks - - This method examines the conversation metadata to determine the role - of the current conversation in the project. The role is stored in the - conversation metadata as "project_role". - - Args: - context: Current conversation context - - Returns: - The role (ProjectRole.COORDINATOR or ProjectRole.TEAM) if the conversation - is part of a project, None otherwise - """ - try: - conversation = await context.get_conversation() - metadata = conversation.metadata or {} - role_str = metadata.get("project_role", "coordinator") - - if role_str == "team": - return ConversationRole.TEAM - elif role_str == "coordinator": - return ConversationRole.COORDINATOR - else: - return None - except Exception as e: - logger.exception(f"Error detecting project role: {e}") - # Default to None if we can't determine - return None - - @staticmethod - async def get_project_brief(context: ConversationContext) -> Optional[ProjectBrief]: - """ - Gets the project brief for the current conversation's project. - - The project brief contains the core information about the project: - name, description, goals, and success criteria. This is the central - document that defines what the project is trying to accomplish. - - Args: - context: Current conversation context - - Returns: - The ProjectBrief object if found, None if the conversation is not - part of a project or if no brief has been created yet - """ - project_id = await ProjectManager.get_project_id(context) - if not project_id: - return None - - return ProjectStorage.read_project_brief(project_id) - - @staticmethod - async def update_project_brief( - context: ConversationContext, - title: str, - description: str, - timeline: Optional[str] = None, - additional_context: Optional[str] = None, - send_notification: bool = True, - ) -> Optional[ProjectBrief]: - """ - Creates or updates a project brief for the current project. - - The project brief is the primary document that defines the project for team members. - - Goals should be managed separately through add_project_goal and are not handled by this method. - - Args: - context: A reference to the conversation context object - title: Short, descriptive name for the project - description: Comprehensive description of the project's purpose - timeline: Optional information about project timeline/deadlines - additional_context: Optional additional information relevant to the project - send_notification: Whether to send a notification about the brief update (default: True) - - Returns: - The updated ProjectBrief object if successful, None otherwise - """ - # Get project ID - project_id = await ProjectManager.get_project_id(context) - if not project_id: - logger.error("Cannot update brief: no project associated with this conversation") - return - # Get user information - current_user_id = await require_current_user(context, "update brief") - if not current_user_id: - return - - # Create the project brief - brief = ProjectBrief( - title=title, - description=description, - timeline=timeline, - additional_context=additional_context, - created_by=current_user_id, - updated_by=current_user_id, - conversation_id=str(context.id), - ) - - # Save the brief - ProjectStorage.write_project_brief(project_id, brief) - - # Check if this is a creation or an update - existing_brief = ProjectStorage.read_project_brief(project_id) - if existing_brief: - # This is an update - await ProjectStorage.log_project_event( - context=context, - project_id=project_id, - entry_type=LogEntryType.BRIEFING_UPDATED.value, - message=f"Updated brief: {title}", - ) - else: - # This is a creation - await ProjectStorage.log_project_event( - context=context, - project_id=project_id, - entry_type=LogEntryType.BRIEFING_CREATED.value, - message=f"Created brief: {title}", - ) - - # Only notify if send_notification is True - if send_notification: - # Notify linked conversations - await ProjectNotifier.notify_project_update( - context=context, - project_id=project_id, - update_type="brief", - message=f"Brief created: {title}", - ) - - return brief - - @staticmethod - async def get_project_state( - context: ConversationContext, - ) -> Optional[ProjectState]: - """Gets the project state for the current conversation's project.""" - project_id = await ProjectManager.get_project_id(context) - if not project_id: - return None - - # Get the project info which contains state information - project_info = ProjectStorage.read_project_info(project_id) - if not project_info: - return None - - return project_info.state - - @staticmethod - async def add_project_goal( - context: ConversationContext, - goal_name: str, - goal_description: str, - success_criteria: Optional[List[str]] = None, - priority: int = 1, - ) -> Optional[ProjectGoal]: - """ - Adds a goal to the project. - - Args: - context: Current conversation context - goal_name: Name of the goal - goal_description: Description of the goal - success_criteria: List of success criteria strings (optional) - priority: Priority of the goal (default: 1) - - Returns: - The created ProjectGoal if successful, None otherwise - """ - # Get project ID - project_id = await ProjectManager.get_project_id(context) - if not project_id: - logger.error("Cannot add goal: no project associated with this conversation") - return None - - # Get user information - current_user_id = await require_current_user(context, "add goal") - if not current_user_id: - return None - - # Create success criteria objects if provided - criterion_objects = [] - if success_criteria: - for criterion in success_criteria: - criterion_objects.append(SuccessCriterion(description=criterion)) - - # Create the new goal - new_goal = ProjectGoal( - name=goal_name, - description=goal_description, - priority=priority, - success_criteria=criterion_objects, - ) - - # Get the existing project - project = ProjectStorage.read_project(project_id) - if not project: - # Create a new project if it doesn't exist - project = Project( - info=None, - brief=None, - goals=[new_goal], - whiteboard=None, - requests=[], - ) - else: - # Add the goal to the existing project - project.goals.append(new_goal) - - # Save the updated project - ProjectStorage.write_project(project_id, project) - - # Log the goal addition - await ProjectStorage.log_project_event( - context=context, - project_id=project_id, - entry_type=LogEntryType.GOAL_ADDED.value, - message=f"Added goal: {goal_name}", - ) - - # Notify linked conversations - await ProjectNotifier.notify_project_update( - context=context, - project_id=project_id, - update_type="goal", - message=f"Goal added: {goal_name}", - ) - - return new_goal - - @staticmethod - async def delete_project_goal( - context: ConversationContext, - goal_index: int, - ) -> Tuple[bool, Optional[str]]: - """ - Deletes a goal from the project. - - Args: - context: Current conversation context - goal_index: The index of the goal to delete (0-based) - - Returns: - Tuple of (success, goal_name_or_error_message) - """ - # Get project ID - project_id = await ProjectManager.get_project_id(context) - if not project_id: - logger.error("Cannot delete goal: no project associated with this conversation") - return False, "No project associated with this conversation." - - # Get user information - current_user_id = await require_current_user(context, "delete goal") - if not current_user_id: - return False, "Could not identify current user." - - # Get the existing project - project = ProjectStorage.read_project(project_id) - if not project or not project.goals: - return False, "No project goals found." - - # Validate index - if goal_index < 0 or goal_index >= len(project.goals): - return ( - False, - f"Invalid goal index {goal_index}. Valid indexes are 0 to {len(project.goals) - 1}. There are {len(project.goals)} goals.", - ) - - # Get the goal to delete - goal = project.goals[goal_index] - goal_name = goal.name - - # Remove the goal from the list - project.goals.pop(goal_index) - - # Save the updated project - ProjectStorage.write_project(project_id, project) - - # Log the goal deletion - await ProjectStorage.log_project_event( - context=context, - project_id=project_id, - entry_type=LogEntryType.GOAL_DELETED.value, - message=f"Deleted goal: {goal_name}", - ) - - # Notify linked conversations - await ProjectNotifier.notify_project_update( - context=context, - project_id=project_id, - update_type="goal", - message=f"Goal deleted: {goal_name}", - ) - - # Update project info with new criteria counts - project_info = ProjectStorage.read_project_info(project_id) - if project_info: - # Count all completed criteria - completed_criteria = 0 - total_criteria = 0 - - # Get the updated project to access goals - updated_project = ProjectStorage.read_project(project_id) - if updated_project and updated_project.goals: - for g in updated_project.goals: - total_criteria += len(g.success_criteria) - completed_criteria += sum(1 for c in g.success_criteria if c.completed) - - # Update project info with criteria stats - project_info.completed_criteria = completed_criteria - project_info.total_criteria = total_criteria - - # Calculate progress percentage - if total_criteria > 0: - project_info.progress_percentage = int((completed_criteria / total_criteria) * 100) - else: - project_info.progress_percentage = 0 - - # Update metadata - project_info.updated_at = datetime.utcnow() - project_info.updated_by = current_user_id - project_info.version += 1 - - # Save the updated project info - ProjectStorage.write_project_info(project_id, project_info) - - # Update all project UI inspectors - await ProjectStorage.refresh_all_project_uis(context, project_id) - - return True, goal_name - - @staticmethod - async def get_project_criteria(context: ConversationContext) -> List[SuccessCriterion]: - """ - Gets the success criteria for the current conversation's project. - - Args: - context: Current conversation context - completed_only: If True, only return completed criteria - - Returns: - List of SuccessCriterion objects - """ - project_id = await ProjectManager.get_project_id(context) - if not project_id: - return [] - - # Get the project which contains goals and success criteria - project = ProjectStorage.read_project(project_id) - if not project: - return [] - - goals = project.goals - criteria = [] - for goal in goals: - # Add success criteria from each goal - criteria.extend(goal.success_criteria) - - return criteria - - @staticmethod - async def update_project_info( - context: ConversationContext, - state: Optional[str] = None, - progress: Optional[int] = None, - status_message: Optional[str] = None, - next_actions: Optional[List[str]] = None, - ) -> Optional[ProjectInfo]: - """ - Updates the project info with state, progress, status message, and next actions. - - Args: - context: Current conversation context - state: Optional project state - progress: Optional progress percentage (0-100) - status_message: Optional status message - next_actions: Optional list of next actions - - Returns: - Tuple of (success, project_info) - """ - # Get project ID - project_id = await ProjectManager.get_project_id(context) - if not project_id: - logger.error("Cannot update project info: no project associated with this conversation") - return None - - # Get user information - current_user_id = await require_current_user(context, "update project info") - if not current_user_id: - return None - - # Get existing project info - project_info = ProjectStorage.read_project_info(project_id) - if not project_info: - logger.error(f"Cannot update project info: no project info found for {project_id}") - return None - - # Apply updates - if state: - project_info.state = ProjectState(state) - - if status_message: - project_info.status_message = status_message - - if progress is not None: - project_info.progress_percentage = progress - - if next_actions: - if not hasattr(project_info, "next_actions"): - project_info.next_actions = [] - project_info.next_actions = next_actions - - # Update metadata - project_info.updated_at = datetime.utcnow() - project_info.updated_by = current_user_id - - # Increment version if it exists - if hasattr(project_info, "version"): - project_info.version += 1 - - # Save the project info - ProjectStorage.write_project_info(project_id, project_info) - - # Log the update - event_type = LogEntryType.STATUS_CHANGED - message = f"Updated project status to {project_info.state.value}" - if progress is not None: - message += f" ({progress}% complete)" - - await ProjectStorage.log_project_event( - context=context, - project_id=project_id, - entry_type=event_type.value, - message=message, - metadata={ - "state": project_info.state.value, - "status_message": status_message, - "progress": progress, - }, - ) - - # Notify linked conversations - await ProjectNotifier.notify_project_update( - context=context, - project_id=project_id, - update_type="project_info", - message=f"Project status updated: {project_info.state.value}", - ) - - return project_info - - @staticmethod - async def update_project_state( - context: ConversationContext, - state: Optional[str] = None, - status_message: Optional[str] = None, - ) -> Tuple[bool, Optional[ProjectInfo]]: - """ - Updates the project state and status message. - - Args: - context: Current conversation context - state: Optional project state - status_message: Optional status message - - Returns: - Tuple of (success, project_info) - """ - try: - # Get project ID - project_id = await ProjectManager.get_project_id(context) - if not project_id: - logger.error("Cannot update project state: no project associated with this conversation") - return False, None - - # Get user information - current_user_id = await require_current_user(context, "update project state") - if not current_user_id: - return False, None - - # Get existing project info - project_info = ProjectStorage.read_project_info(project_id) - if not project_info: - logger.error(f"Cannot update project state: no project info found for {project_id}") - return False, None - - # Apply updates - if state: - project_info.state = ProjectState(state) - - if status_message: - project_info.status_message = status_message - - # Update metadata - project_info.updated_at = datetime.utcnow() - - # Save the project info - ProjectStorage.write_project_info(project_id, project_info) - - # Log the update - event_type = LogEntryType.STATUS_CHANGED - message = f"Updated project state to {project_info.state.value}" - - await ProjectStorage.log_project_event( - context=context, - project_id=project_id, - entry_type=event_type.value, - message=message, - metadata={ - "state": project_info.state.value, - "status_message": status_message, - }, - ) - - # Notify linked conversations - await ProjectNotifier.notify_project_update( - context=context, - project_id=project_id, - update_type="project_state", - message=f"Project state updated: {project_info.state.value}", - ) - - return True, project_info - - except Exception as e: - logger.exception(f"Error updating project state: {e}") - return False, None - - @staticmethod - async def get_information_requests( - context: ConversationContext, - ) -> List[InformationRequest]: - """Gets all information requests for the current conversation's project.""" - project_id = await ProjectManager.get_project_id(context) - if not project_id: - return [] - - return ProjectStorage.get_all_information_requests(project_id) - - @staticmethod - async def create_information_request( - context: ConversationContext, - title: str, - description: str, - priority: RequestPriority = RequestPriority.MEDIUM, - related_goal_ids: Optional[List[str]] = None, - ) -> Tuple[bool, Optional[InformationRequest]]: - """ - Creates a new information request. - - Args: - context: Current conversation context - title: Title of the request - description: Description of the request - priority: Priority level - related_goal_ids: Optional list of related goal IDs - - Returns: - Tuple of (success, information_request) - """ - try: - # Get project ID - project_id = await ProjectManager.get_project_id(context) - if not project_id: - logger.error("Cannot create information request: no project associated with this conversation") - return False, None - - # Get user information - current_user_id = await require_current_user(context, "create information request") - if not current_user_id: - return False, None - - # Create the information request - information_request = InformationRequest( - title=title, - description=description, - priority=priority, - related_goal_ids=related_goal_ids or [], - created_by=current_user_id, - updated_by=current_user_id, - conversation_id=str(context.id), - ) - - # Save the request - ProjectStorage.write_information_request(project_id, information_request) - - # Log the creation - await ProjectStorage.log_project_event( - context=context, - project_id=project_id, - entry_type=LogEntryType.REQUEST_CREATED.value, - message=f"Created information request: {title}", - related_entity_id=information_request.request_id, - metadata={ - "priority": priority.value, - "request_id": information_request.request_id, - }, - ) - - # For high priority requests, we could update project info or add an indicator - # in the future if needed - - # Notify linked conversations - await ProjectNotifier.notify_project_update( - context=context, - project_id=project_id, - update_type="information_request", - message=f"New information request: {title} (Priority: {priority.value})", - ) - - # Update all project UI inspectors - await ProjectStorage.refresh_all_project_uis(context, project_id) - - return True, information_request - - except Exception as e: - logger.exception(f"Error creating information request: {e}") - return False, None - - @staticmethod - async def resolve_information_request( - context: ConversationContext, - request_id: str, - resolution: str, - ) -> Tuple[bool, Optional[InformationRequest]]: - """ - Resolves an information request. - - Args: - context: Current conversation context - request_id: ID of the request to resolve - resolution: Resolution information - - Returns: - Tuple of (success, information_request) - """ - try: - # Get project ID - project_id = await ProjectManager.get_project_id(context) - if not project_id: - logger.error("Cannot resolve information request: no project associated with this conversation") - return False, None - - # Get user information - current_user_id = await require_current_user(context, "resolve information request") - if not current_user_id: - return False, None - - # Get the information request - information_request = ProjectStorage.read_information_request(project_id, request_id) - if not information_request: - # Try to find it in all requests - all_requests = ProjectStorage.get_all_information_requests(project_id) - for request in all_requests: - if request.request_id == request_id: - information_request = request - break - - if not information_request: - logger.error(f"Information request {request_id} not found") - return False, None - - # Check if already resolved - if information_request.status == RequestStatus.RESOLVED: - logger.warning(f"Information request {request_id} is already resolved") - return True, information_request - - # Update the request - information_request.status = RequestStatus.RESOLVED - information_request.resolution = resolution - information_request.resolved_at = datetime.utcnow() - information_request.resolved_by = current_user_id - - # Add to history - information_request.updates.append({ - "timestamp": datetime.utcnow().isoformat(), - "user_id": current_user_id, - "message": f"Request resolved: {resolution}", - "status": RequestStatus.RESOLVED.value, - }) - - # Update metadata - information_request.updated_at = datetime.utcnow() - information_request.updated_by = current_user_id - information_request.version += 1 - - # Save the updated request - ProjectStorage.write_information_request(project_id, information_request) - - # Log the resolution - await ProjectStorage.log_project_event( - context=context, - project_id=project_id, - entry_type=LogEntryType.REQUEST_RESOLVED.value, - message=f"Resolved information request: {information_request.title}", - related_entity_id=information_request.request_id, - metadata={ - "resolution": resolution, - "request_title": information_request.title, - "request_priority": information_request.priority.value - if hasattr(information_request.priority, "value") - else information_request.priority, - }, - ) - - # High priority request has been resolved, could update project info - # in the future if needed - - # Notify linked conversations - await ProjectNotifier.notify_project_update( - context=context, - project_id=project_id, - update_type="information_request_resolved", - message=f"Information request resolved: {information_request.title}", - ) - - # Send direct notification to requestor's conversation - if information_request.conversation_id != str(context.id): - try: - # Get client for requestor's conversation - client = ConversationClientManager.get_conversation_client( - context, information_request.conversation_id - ) - - # Send notification message - await client.send_messages( - NewConversationMessage( - content=f"Coordinator has resolved your request '{information_request.title}': {resolution}", - message_type=MessageType.notice, - ) - ) - except Exception as e: - logger.warning(f"Could not send notification to requestor: {e}") - - # Update all project UI inspectors - await ProjectStorage.refresh_all_project_uis(context, project_id) - - return True, information_request - - except Exception as e: - logger.exception(f"Error resolving information request: {e}") - return False, None - - @staticmethod - async def get_project_log(context: ConversationContext) -> Optional[ProjectLog]: - """Gets the project log for the current conversation's project.""" - project_id = await ProjectManager.get_project_id(context) - if not project_id: - return None - - return ProjectStorage.read_project_log(project_id) - - @staticmethod - async def get_project(context: ConversationContext) -> Optional[Project]: - """Gets the project information for the current conversation's project.""" - project_id = await ProjectManager.get_project_id(context) - if not project_id: - return None - project = Project( - info=ProjectStorage.read_project_info(project_id), - brief=ProjectStorage.read_project_brief(project_id), - whiteboard=ProjectStorage.read_project_whiteboard(project_id), - requests=ProjectStorage.get_all_information_requests(project_id), - log=ProjectStorage.read_project_log(project_id), - ) - return project - - @staticmethod - async def get_project_info(context: ConversationContext, project_id: Optional[str] = None) -> Optional[ProjectInfo]: - """ - Gets the project information including share URL and team conversation details. - - Args: - context: Current conversation context - project_id: Optional project ID (if not provided, will be retrieved from context) - - Returns: - ProjectInfo object or None if not found - """ - try: - # Get project ID if not provided - if not project_id: - project_id = await ProjectManager.get_project_id(context) - if not project_id: - return None - - # Read project info - project_info = ProjectStorage.read_project_info(project_id) - return project_info - - except Exception as e: - logger.exception(f"Error getting project info: {e}") - return None - - @staticmethod - async def get_project_whiteboard( - context: ConversationContext, - ) -> Optional[ProjectWhiteboard]: - """Gets the project whiteboard for the current conversation's project.""" - project_id = await ProjectManager.get_project_id(context) - if not project_id: - return None - - return ProjectStorage.read_project_whiteboard(project_id) - - @staticmethod - async def update_whiteboard( - context: ConversationContext, - content: str, - is_auto_generated: bool = True, - send_notification: bool = False, # Add parameter to control notifications - ) -> Tuple[bool, Optional[ProjectWhiteboard]]: - """ - Updates the project whiteboard content. - - Args: - context: Current conversation context - content: Whiteboard content in markdown format - is_auto_generated: Whether the content was automatically generated - send_notification: Whether to send notifications about the update (default: False) - - Returns: - Tuple of (success, project_kb) - """ - try: - # Get project ID - project_id = await ProjectManager.get_project_id(context) - if not project_id: - logger.error("Cannot update whiteboard: no project associated with this conversation") - return False, None - - # Get user information - current_user_id = await require_current_user(context, "update whiteboard") - if not current_user_id: - return False, None - - # Get existing whiteboard or create new one - whiteboard = ProjectStorage.read_project_whiteboard(project_id) - is_new = False - - if not whiteboard: - whiteboard = ProjectWhiteboard( - created_by=current_user_id, - updated_by=current_user_id, - conversation_id=str(context.id), - content="", - ) - is_new = True - - # Update the content - whiteboard.content = content - whiteboard.is_auto_generated = is_auto_generated - - # Update metadata - whiteboard.updated_at = datetime.utcnow() - whiteboard.updated_by = current_user_id - whiteboard.version += 1 - - # Save the whiteboard - ProjectStorage.write_project_whiteboard(project_id, whiteboard) - - # Log the update - event_type = LogEntryType.KB_UPDATE - update_type = "auto-generated" if is_auto_generated else "manual" - message = f"{'Created' if is_new else 'Updated'} project whiteboard ({update_type})" - - await ProjectStorage.log_project_event( - context=context, - project_id=project_id, - entry_type=event_type.value, - message=message, - ) - - # Only notify linked conversations if explicitly requested - # This prevents auto-updates from generating notifications - if send_notification: - await ProjectNotifier.notify_project_update( - context=context, - project_id=project_id, - update_type="project_whiteboard", - message="Project whiteboard updated", - ) - else: - # Just refresh the UI without sending notifications - await ProjectStorage.refresh_all_project_uis(context, project_id) - - return True, whiteboard - - except Exception as e: - logger.exception(f"Error updating whiteboard: {e}") - return False, None - - @staticmethod - async def auto_update_whiteboard( - context: ConversationContext, - ) -> Tuple[bool, Optional[ProjectWhiteboard]]: - """ - Automatically updates the whiteboard by analyzing chat history. - - This method: - 1. Retrieves recent conversation messages - 2. Sends them to the LLM with a prompt to extract important info - 3. Updates the whiteboard with the extracted content - - Args: - context: Current conversation context - chat_history: Recent chat messages to analyze - - Returns: - Tuple of (success, project_kb) - """ - try: - messages = await context.get_messages() - chat_history = messages.messages - - # Get project ID - project_id = await ProjectManager.get_project_id(context) - if not project_id: - logger.error("Cannot auto-update whiteboard: no project associated with this conversation") - return False, None - - # Get user information for storage purposes - current_user_id = await require_current_user(context, "auto-update whiteboard") - if not current_user_id: - return False, None - - # Skip if no messages to analyze - if not chat_history: - logger.warning("No chat history to analyze for whiteboard update") - return False, None - - # Format the chat history for the prompt - chat_history_text = "" - for msg in chat_history: - sender_type = ( - "User" if msg.sender and msg.sender.participant_role == ParticipantRole.user else "Assistant" - ) - chat_history_text += f"{sender_type}: {msg.content}\n\n" - - # Get config for the LLM call - config = await assistant_config.get(context.assistant) - - # Construct the whiteboard prompt with the chat history - whiteboard_prompt = f""" - {config.prompt_config.whiteboard_prompt} - - <CHAT_HISTORY> - {chat_history_text} - </CHAT_HISTORY> - """ - - # Create a completion with the whiteboard prompt - async with openai_client.create_client(config.service_config, api_version="2024-06-01") as client: - completion = await client.chat.completions.create( - model=config.request_config.openai_model, - messages=[{"role": "user", "content": whiteboard_prompt}], - max_tokens=2500, # Limiting to 2500 tokens to keep whiteboard content manageable - ) - - # Extract the content from the completion - content = completion.choices[0].message.content or "" - - # Extract just the whiteboard content - whiteboard_content = "" - - # Look for content between <WHITEBOARD> tags - match = re.search(r"<WHITEBOARD>(.*?)</WHITEBOARD>", content, re.DOTALL) - if match: - whiteboard_content = match.group(1).strip() - else: - # If no tags, use the whole content - whiteboard_content = content.strip() - - # Only update if we have content - if not whiteboard_content: - logger.warning("No content extracted from whiteboard LLM analysis") - return False, None - - # Update the whiteboard with the extracted content - # Use send_notification=False to avoid sending notifications for automatic updates - return await ProjectManager.update_whiteboard( - context=context, - content=whiteboard_content, - is_auto_generated=True, - send_notification=False, - ) - - except Exception as e: - logger.exception(f"Error auto-updating whiteboard: {e}") - return False, None - - @staticmethod - async def complete_project( - context: ConversationContext, - summary: Optional[str] = None, - ) -> Tuple[bool, Optional[ProjectInfo]]: - """ - Completes a project and updates the project state. - - Args: - context: Current conversation context - summary: Optional summary of project results - - Returns: - Tuple of (success, project_info) - """ - try: - # Get project ID - project_id = await ProjectManager.get_project_id(context) - if not project_id: - logger.error("Cannot complete project: no project associated with this conversation") - return False, None - - # Get role - only Coordinator can complete a project - role = await ProjectManager.get_project_role(context) - if role != ConversationRole.COORDINATOR: - logger.error("Only Coordinator can complete a project") - return False, None - - # Update project state to completed - status_message = summary if summary else "Project completed successfully" - success, project_info = await ProjectManager.update_project_state( - context=context, - state=ProjectState.COMPLETED.value, - status_message=status_message, - ) - - if not success or not project_info: - return False, None - - # Add completion entry to the log - await ProjectStorage.log_project_event( - context=context, - project_id=project_id, - entry_type=LogEntryType.PROJECT_COMPLETED.value, - message=f"Project completed: {status_message}", - ) - - # Notify linked conversations with emphasis - await ProjectNotifier.notify_project_update( - context=context, - project_id=project_id, - update_type="project_completed", - message=f"🎉 PROJECT COMPLETED: {status_message}", - ) - - return True, project_info - - except Exception as e: - logger.exception(f"Error completing project: {e}") - return False, None diff --git a/assistants/project-assistant/assistant/project_notifications.py b/assistants/project-assistant/assistant/project_notifications.py deleted file mode 100644 index 48969e034..000000000 --- a/assistants/project-assistant/assistant/project_notifications.py +++ /dev/null @@ -1,224 +0,0 @@ -""" -Project notification and UI refresh functionality. - -This module handles notifications between conversations and UI refresh events -for the project assistant, ensuring all participants stay in sync. -""" - -from typing import Any, Dict, Optional - -from semantic_workbench_api_model.workbench_model import AssistantStateEvent, MessageType, NewConversationMessage -from semantic_workbench_assistant.assistant_app import ConversationContext - -from .logging import logger -from .project_storage import ProjectStorage - - -class ProjectNotifier: - """Handles notifications between conversations for project updates.""" - - @staticmethod - async def send_notice_to_linked_conversations(context: ConversationContext, project_id: str, message: str) -> None: - """ - Sends a notice message to all linked conversations except: - 1. The current conversation - 2. The shareable team conversation template (used only for creating the share URL) - - NOTE: The shareable team conversation is NEVER used directly by any user. - It's just a template that gets copied when team members redeem the share URL - to create their own individual team conversations. We exclude it from notifications - because no one will ever see those notifications. - - This method does NOT refresh any UI inspector panels. - - Args: - context: Current conversation context - project_id: ID of the project - message: Notification message to send - """ - # Import ConversationClientManager locally to avoid circular imports - from .conversation_clients import ConversationClientManager - from .conversation_project_link import ConversationProjectManager - - # Get conversation IDs in the same project - linked_conversations = await ConversationProjectManager.get_linked_conversations(context) - current_conversation_id = str(context.id) - - # Get the shareable team conversation ID from project info - # This is the conversation created by the coordinator for sharing, - # not an actual user conversation - shareable_conversation_id = None - project_info = ProjectStorage.read_project_info(project_id) - if project_info and project_info.team_conversation_id: - shareable_conversation_id = project_info.team_conversation_id - - # Send notification to each linked conversation, excluding current and shareable conversation - for conv_id in linked_conversations: - # Skip current conversation and the shareable team conversation - if conv_id != current_conversation_id and ( - not shareable_conversation_id or conv_id != shareable_conversation_id - ): - try: - # Get client for the target conversation - client = ConversationClientManager.get_conversation_client(context, conv_id) - - # Send the notification - await client.send_messages( - NewConversationMessage( - content=message, - message_type=MessageType.notice, - metadata={ - "debug": { - "project_id": project_id, - "message": message, - "sender": str(context.id), - } - }, - ) - ) - logger.debug(f"Sent notification to conversation {conv_id}") - except Exception as e: - logger.error(f"Failed to notify conversation {conv_id}: {e}") - - @staticmethod - async def notify_project_update( - context: ConversationContext, - project_id: str, - update_type: str, - message: str, - data: Optional[Dict[str, Any]] = None, - send_notification: bool = True, # Add parameter to control notifications - ) -> None: - """ - Complete project update: sends notices to all conversations and refreshes all UI inspector panels. - - This method: - 1. Sends a notice message to the current conversation (if send_notification=True) - 2. Sends the same notice message to all linked conversations (if send_notification=True) - 3. Refreshes UI inspector panels for all conversations in the project - - Use this for important project updates that need both user notification AND UI refresh. - Set send_notification=False for frequent updates (like file syncs, whiteboard updates) to - avoid notification spam. - - Args: - context: Current conversation context - project_id: ID of the project - update_type: Type of update (e.g., 'brief', 'project_info', 'information_request', etc.) - message: Notification message to display to users - data: Optional additional data related to the update - send_notification: Whether to send notifications (default: True) - """ - - # Only send notifications if explicitly requested - if send_notification: - # Notify all linked conversations with the same message - await ProjectNotifier.send_notice_to_linked_conversations(context, project_id, message) - - # Always refresh all project UI inspector panels to keep UI in sync - # This will update the UI without sending notifications - await ProjectStorage.refresh_all_project_uis(context, project_id) - - -async def refresh_current_ui(context: ConversationContext) -> None: - """ - Refreshes only the current conversation's UI inspector panel. - - Use this when a change only affects the local conversation's view - and doesn't need to be synchronized with other conversations. - """ - - # Create the state event - state_event = AssistantStateEvent( - state_id="project_status", # Must match the inspector_state_providers key in chat.py - event="updated", - state=None, - ) - - # Send the event to the current context - await context.send_conversation_state_event(state_event) - - -async def refresh_all_project_uis(context: ConversationContext, project_id: str) -> None: - """ - Refreshes the UI inspector panels of all conversations in a project except the - shareable team conversation template. - - There are three types of conversations in the system: - 1. Coordinator Conversation - The main conversation for the project owner - 2. Shareable Team Conversation Template - Only used to generate the share URL, never directly used by any user - 3. Team Conversation(s) - Individual conversations for each team member - - This sends a state event to all relevant conversations (Coordinator and all active team members) - involved in the project to refresh their inspector panels, ensuring all - participants have the latest information without sending any text notifications. - - The shareable team conversation template is excluded because no user will ever see it - - it only exists to create the share URL that team members can use to join. - - Use this when project data has changed and all UIs need to be updated, - but you don't want to send notification messages to users. - - Args: - context: Current conversation context - project_id: The project ID - """ - # Import ConversationClientManager locally to avoid circular imports - from .conversation_clients import ConversationClientManager - from .conversation_project_link import ConversationProjectManager - - try: - # First update the current conversation's UI - await refresh_current_ui(context) - - # Get the shareable team conversation ID from project info to exclude it - shareable_conversation_id = None - project_info = ProjectStorage.read_project_info(project_id) - if project_info and project_info.team_conversation_id: - shareable_conversation_id = project_info.team_conversation_id - - # Get Coordinator client and update Coordinator if not the current conversation - ( - coordinator_client, - coordinator_conversation_id, - ) = await ConversationClientManager.get_coordinator_client_for_project(context, project_id) - if coordinator_client and coordinator_conversation_id: - try: - state_event = AssistantStateEvent(state_id="project_status", event="updated", state=None) - # Get assistant ID from context - assistant_id = context.assistant.id - await coordinator_client.send_conversation_state_event(assistant_id, state_event) - logger.debug( - f"Sent state event to Coordinator conversation {coordinator_conversation_id} to refresh inspector" - ) - except Exception as e: - logger.warning(f"Error sending state event to Coordinator: {e}") - - # Get all team conversation clients and update them - linked_conversations = await ConversationProjectManager.get_linked_conversations(context) - current_id = str(context.id) - - for conv_id in linked_conversations: - # Skip current conversation, coordinator conversation, and shareable conversation - if ( - conv_id != current_id - and (not coordinator_conversation_id or conv_id != coordinator_conversation_id) - and (not shareable_conversation_id or conv_id != shareable_conversation_id) - ): - try: - # Get client for the conversation - client = ConversationClientManager.get_conversation_client(context, conv_id) - - # Send state event to refresh the inspector panel - state_event = AssistantStateEvent(state_id="project_status", event="updated", state=None) - # Get assistant ID from context - assistant_id = context.assistant.id - await client.send_conversation_state_event(assistant_id, state_event) - except Exception as e: - logger.warning(f"Error sending state event to conversation {conv_id}: {e}") - continue - elif conv_id == shareable_conversation_id: - logger.info(f"Skipping UI update for shareable conversation: {conv_id}") - - except Exception as e: - logger.warning(f"Error notifying all project UIs: {e}") diff --git a/assistants/project-assistant/assistant/project_storage.py b/assistants/project-assistant/assistant/project_storage.py deleted file mode 100644 index b7f7e606d..000000000 --- a/assistants/project-assistant/assistant/project_storage.py +++ /dev/null @@ -1,373 +0,0 @@ -""" -Project storage management module. - -Provides direct access to project data with a clean, simple storage approach. -""" - -import pathlib -from datetime import datetime -from typing import Any, Dict, List, Optional - -from semantic_workbench_assistant import settings -from semantic_workbench_assistant.assistant_app import ConversationContext -from semantic_workbench_assistant.assistant_app.context import storage_directory_for_context -from semantic_workbench_assistant.storage import read_model, write_model - -# Import inside functions to avoid circular imports -from .project_data import ( - InformationRequest, - LogEntry, - LogEntryType, - Project, - ProjectBrief, - ProjectInfo, - ProjectLog, - ProjectWhiteboard, -) -from .project_storage_models import CoordinatorConversationMessage, CoordinatorConversationStorage -from .utils import get_current_user - - -class ProjectStorageManager: - """Manages storage paths and access for project data.""" - - PROJECTS_ROOT = "projects" - - # File names for project entities - PROJECT_INFO_FILE = "project.json" - PROJECT_BRIEF_FILE = "brief.json" - PROJECT_LOG_FILE = "log.json" - PROJECT_WHITEBOARD_FILE = "whiteboard.json" - COORDINATOR_CONVERSATION_FILE = "coordinator_conversation.json" - PROJECT_FILE = "project_data.json" - - @staticmethod - def get_projects_root() -> pathlib.Path: - """Gets the root path for all projects.""" - return pathlib.Path(settings.storage.root) / ProjectStorageManager.PROJECTS_ROOT - - @staticmethod - def get_project_dir(project_id: str) -> pathlib.Path: - """Gets the directory for a specific project.""" - projects_root = ProjectStorageManager.get_projects_root() - project_dir = projects_root / project_id - project_dir.mkdir(parents=True, exist_ok=True) - return project_dir - - @staticmethod - def get_linked_conversations_dir(project_id: str) -> pathlib.Path: - """Gets the directory that tracks linked conversations for a project.""" - project_dir = ProjectStorageManager.get_project_dir(project_id) - linked_dir = project_dir / "linked_conversations" - linked_dir.mkdir(parents=True, exist_ok=True) - return linked_dir - - @staticmethod - def get_project_info_path(project_id: str) -> pathlib.Path: - """Gets the path to the project info file.""" - project_dir = ProjectStorageManager.get_project_dir(project_id) - return project_dir / ProjectStorageManager.PROJECT_INFO_FILE - - @staticmethod - def get_brief_path(project_id: str) -> pathlib.Path: - """Gets the path to the project brief file.""" - project_dir = ProjectStorageManager.get_project_dir(project_id) - return project_dir / ProjectStorageManager.PROJECT_BRIEF_FILE - - @staticmethod - def get_project_log_path(project_id: str) -> pathlib.Path: - """Gets the path to the project log file.""" - project_dir = ProjectStorageManager.get_project_dir(project_id) - return project_dir / ProjectStorageManager.PROJECT_LOG_FILE - - @staticmethod - def get_project_whiteboard_path(project_id: str) -> pathlib.Path: - """Gets the path to the project whiteboard file.""" - project_dir = ProjectStorageManager.get_project_dir(project_id) - return project_dir / ProjectStorageManager.PROJECT_WHITEBOARD_FILE - - @staticmethod - def get_coordinator_conversation_path(project_id: str) -> pathlib.Path: - """Gets the path to the Coordinator conversation file.""" - project_dir = ProjectStorageManager.get_project_dir(project_id) - return project_dir / ProjectStorageManager.COORDINATOR_CONVERSATION_FILE - - @staticmethod - def get_project_path(project_id: str) -> pathlib.Path: - """Gets the path to the complete Project data file.""" - project_dir = ProjectStorageManager.get_project_dir(project_id) - return project_dir / ProjectStorageManager.PROJECT_FILE - - @staticmethod - def get_information_requests_dir(project_id: str) -> pathlib.Path: - """Gets the directory containing all information requests.""" - project_dir = ProjectStorageManager.get_project_dir(project_id) - requests_dir = project_dir / "requests" - requests_dir.mkdir(parents=True, exist_ok=True) - return requests_dir - - @staticmethod - def get_information_request_path(project_id: str, request_id: str) -> pathlib.Path: - """Gets the path to an information request file.""" - requests_dir = ProjectStorageManager.get_information_requests_dir(project_id) - return requests_dir / f"{request_id}.json" - - @staticmethod - def project_exists(project_id: str) -> bool: - """Checks if a project exists.""" - project_dir = ProjectStorageManager.get_projects_root() / project_id - return project_dir.exists() - - @staticmethod - def get_conversation_role_file_path(context: ConversationContext) -> pathlib.Path: - """Gets the path to the file that stores a conversation's role in projects.""" - storage_dir = storage_directory_for_context(context) - storage_dir.mkdir(parents=True, exist_ok=True) - return storage_dir / "project_role.json" - - @staticmethod - def get_conversation_project_file_path(context: ConversationContext) -> pathlib.Path: - """Gets the path to the file that stores a conversation's project association.""" - storage_dir = storage_directory_for_context(context) - storage_dir.mkdir(parents=True, exist_ok=True) - file_path = storage_dir / "project_association.json" - return file_path - - -class ProjectStorage: - """Unified storage operations for project data.""" - - @staticmethod - def read_project_info(project_id: str) -> Optional[ProjectInfo]: - """Reads the project info.""" - path = ProjectStorageManager.get_project_info_path(project_id) - return read_model(path, ProjectInfo) - - @staticmethod - def write_project_info(project_id: str, info: ProjectInfo) -> pathlib.Path: - """Writes the project info.""" - path = ProjectStorageManager.get_project_info_path(project_id) - write_model(path, info) - return path - - @staticmethod - def read_project_brief(project_id: str) -> Optional[ProjectBrief]: - """Reads the project brief.""" - path = ProjectStorageManager.get_brief_path(project_id) - return read_model(path, ProjectBrief) - - @staticmethod - def write_project_brief(project_id: str, brief: ProjectBrief) -> pathlib.Path: - """Writes the project brief.""" - path = ProjectStorageManager.get_brief_path(project_id) - write_model(path, brief) - return path - - @staticmethod - def read_project_log(project_id: str) -> Optional[ProjectLog]: - """Reads the project log.""" - path = ProjectStorageManager.get_project_log_path(project_id) - return read_model(path, ProjectLog) - - @staticmethod - def write_project_log(project_id: str, log: ProjectLog) -> pathlib.Path: - """Writes the project log.""" - path = ProjectStorageManager.get_project_log_path(project_id) - write_model(path, log) - return path - - @staticmethod - def read_project_whiteboard(project_id: str) -> Optional[ProjectWhiteboard]: - """Reads the project whiteboard.""" - path = ProjectStorageManager.get_project_whiteboard_path(project_id) - return read_model(path, ProjectWhiteboard) - - @staticmethod - def read_coordinator_conversation(project_id: str) -> Optional[CoordinatorConversationStorage]: - """Reads the Coordinator conversation messages for a project.""" - path = ProjectStorageManager.get_coordinator_conversation_path(project_id) - return read_model(path, CoordinatorConversationStorage) - - @staticmethod - def write_coordinator_conversation(project_id: str, conversation: CoordinatorConversationStorage) -> pathlib.Path: - """Writes the Coordinator conversation messages to storage.""" - path = ProjectStorageManager.get_coordinator_conversation_path(project_id) - write_model(path, conversation) - return path - - @staticmethod - def append_coordinator_message( - project_id: str, - message_id: str, - content: str, - sender_name: str, - is_assistant: bool = False, - timestamp: Optional[datetime] = None, - ) -> None: - """ - Appends a message to the Coordinator conversation storage. - - Args: - project_id: The ID of the project - message_id: The ID of the message - content: The message content - sender_name: The name of the sender - is_assistant: Whether the message is from the assistant - timestamp: The timestamp of the message (defaults to now) - """ - # Get existing conversation or create new one - conversation = ProjectStorage.read_coordinator_conversation(project_id) - if not conversation: - conversation = CoordinatorConversationStorage(project_id=project_id) - - # Create new message - new_message = CoordinatorConversationMessage( - message_id=message_id, - content=content, - sender_name=sender_name, - timestamp=timestamp or datetime.utcnow(), - is_assistant=is_assistant, - ) - - # Add to conversation (only keep most recent 50 messages) - conversation.messages.append(new_message) - if len(conversation.messages) > 50: - conversation.messages = conversation.messages[-50:] - - conversation.last_updated = datetime.utcnow() - - # Save the updated conversation - ProjectStorage.write_coordinator_conversation(project_id, conversation) - - @staticmethod - def write_project_whiteboard(project_id: str, whiteboard: ProjectWhiteboard) -> pathlib.Path: - """Writes the project whiteboard.""" - path = ProjectStorageManager.get_project_whiteboard_path(project_id) - write_model(path, whiteboard) - return path - - @staticmethod - def read_information_request(project_id: str, request_id: str) -> Optional[InformationRequest]: - """Reads an information request.""" - path = ProjectStorageManager.get_information_request_path(project_id, request_id) - return read_model(path, InformationRequest) - - @staticmethod - def write_information_request(project_id: str, request: InformationRequest) -> pathlib.Path: - """Writes an information request.""" - # Information requests must have an ID - if not request.request_id: - raise ValueError("Information request must have a request_id") - - path = ProjectStorageManager.get_information_request_path(project_id, request.request_id) - write_model(path, request) - return path - - @staticmethod - def read_project(project_id: str) -> Optional[Project]: - """Reads the complete Project data.""" - path = ProjectStorageManager.get_project_path(project_id) - return read_model(path, Project) - - @staticmethod - def write_project(project_id: str, project: Project) -> pathlib.Path: - """Writes the complete Project data.""" - path = ProjectStorageManager.get_project_path(project_id) - write_model(path, project) - return path - - @staticmethod - def get_all_information_requests(project_id: str) -> List[InformationRequest]: - """Gets all information requests for a project.""" - dir_path = ProjectStorageManager.get_information_requests_dir(project_id) - requests = [] - - if not dir_path.exists(): - return requests - - for file_path in dir_path.glob("*.json"): - request = read_model(file_path, InformationRequest) - if request: - requests.append(request) - - # Sort by updated_at timestamp, newest first - requests.sort(key=lambda r: r.updated_at, reverse=True) - return requests - - @staticmethod - async def refresh_current_ui(context: ConversationContext) -> None: - """ - Refreshes only the current conversation's UI inspector panel. - - This function is now a wrapper that calls the implementation in project_notifications.py. - """ - from .project_notifications import refresh_current_ui - - await refresh_current_ui(context) - - @staticmethod - async def refresh_all_project_uis(context: ConversationContext, project_id: str) -> None: - """ - Refreshes the UI inspector panels of all conversations in a project. - - This function is now a wrapper that calls the implementation in project_notifications.py. - """ - from .project_notifications import refresh_all_project_uis - - await refresh_all_project_uis(context, project_id) - - @staticmethod - async def log_project_event( - context: ConversationContext, - project_id: str, - entry_type: str, - message: str, - related_entity_id: Optional[str] = None, - metadata: Optional[Dict[str, Any]] = None, - ) -> bool: - """ - Logs an event to the project log. - - Args: - context: Current conversation context - project_id: ID of the project - entry_type: Type of log entry - message: Log message - related_entity_id: Optional ID of a related entity (e.g., information request) - metadata: Optional additional metadata - - Returns: - True if the log entry was added successfully, False otherwise - """ - # Get user information - user_id, user_name = await get_current_user(context) - - if not user_id: - return False - - # Default user name if none found - user_name = user_name or "Unknown User" - - # Create a log entry - entry = LogEntry( - entry_type=LogEntryType(entry_type), - message=message, - user_id=user_id, - user_name=user_name, - related_entity_id=related_entity_id, - metadata=metadata or {}, - ) - - # Get existing log or create a new one - log = ProjectStorage.read_project_log(project_id) - if not log: - log = ProjectLog( - entries=[], - ) - - # Add the entry and update metadata - log.entries.append(entry) - - # Save the updated log - ProjectStorage.write_project_log(project_id, log) - return True diff --git a/assistants/project-assistant/assistant/project_storage_models.py b/assistants/project-assistant/assistant/project_storage_models.py deleted file mode 100644 index 81aec687e..000000000 --- a/assistants/project-assistant/assistant/project_storage_models.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -Models for project storage entities. - -This module contains data models specific to storage operations, -separate from the core project data models. -""" - -from datetime import datetime -from enum import Enum -from typing import List - -from pydantic import BaseModel, Field - - -class ConversationRole(str, Enum): - """ - Enumeration of conversation roles in a project. - - This enum represents the role that a conversation plays in a project, - either as a Coordinator (managing the project) or as a Team member - (participating in the project). - """ - - COORDINATOR = "coordinator" - TEAM = "team" - - -class CoordinatorConversationMessage(BaseModel): - """Model for storing a message from Coordinator conversation for Team access.""" - - message_id: str - content: str - sender_name: str - timestamp: datetime = Field(default_factory=datetime.utcnow) - is_assistant: bool = False - - -class CoordinatorConversationStorage(BaseModel): - """Model for storing a collection of Coordinator conversation messages.""" - - project_id: str - last_updated: datetime = Field(default_factory=datetime.utcnow) - messages: List[CoordinatorConversationMessage] = Field(default_factory=list) \ No newline at end of file diff --git a/assistants/project-assistant/assistant/prompt_utils.py b/assistants/project-assistant/assistant/prompt_utils.py new file mode 100644 index 000000000..92b52be12 --- /dev/null +++ b/assistants/project-assistant/assistant/prompt_utils.py @@ -0,0 +1,487 @@ +import json +from dataclasses import dataclass, field +from enum import Enum +from typing import Protocol + +import openai_client +from assistant_extensions.attachments import ( + AttachmentsConfigModel, + AttachmentsExtension, +) +from openai.types.chat import ( + ChatCompletionMessageParam, +) +from pydantic import BaseModel, Field +from semantic_workbench_assistant.assistant_app import ( + ConversationContext, +) + +from assistant.data import ( + ConversationRole, + CoordinatorConversationMessage, + RequestStatus, +) +from assistant.domain.learning_objectives_manager import LearningObjectivesManager +from assistant.domain.share_manager import ShareManager +from assistant.domain.tasks_manager import TasksManager +from assistant.ui_tabs.common import get_priority_emoji, get_status_emoji + + +def create_system_message(content: str, delimiter: str | None = None) -> ChatCompletionMessageParam: + if delimiter: + delimiter = delimiter.strip().upper().replace(" ", "_") + content = f"<{delimiter}>\n{content}\n</{delimiter}>" + + message: ChatCompletionMessageParam = { + "role": "system", + "content": content, + } + return message + + +class Instructions: + """ + A class to represent a section of a prompt. + """ + + def __init__( + self, + content: str, + title: str | None = None, + ) -> None: + self.title = title + self.content = content + self.level = 0 + self.subsections: list[Instructions] = [] + + def add_subsection(self, subsection: "Instructions") -> None: + """ + Add a subsection to the prompt section. + """ + subsection.level = self.level + 1 + self.subsections.append(subsection) + + def __str__(self) -> str: + s = "" + if self.title: + hashes = "#" * (self.level + 1) + s += f"{hashes} {self.title}\n\n" + s += self.content + if self.subsections: + s += "\n\n" + "\n\n".join(str(subsection) for subsection in self.subsections) + + return s + + +class Context(Protocol): + def message(self) -> ChatCompletionMessageParam: + raise NotImplementedError + + def content(self) -> str: + raise NotImplementedError + + def name(self) -> str: + raise NotImplementedError + + +class ChatCompletionMessageContext(Context): + def __init__(self, message: ChatCompletionMessageParam, name: str | None) -> None: + self._message = message + self._name = name or "Attachment" + + def message(self) -> ChatCompletionMessageParam: + return self._message + + def content(self) -> str: + return f"<{self._name}>\n{self._message.get('content')}\n</{self._name}>" + + def name(self) -> str: + return self._name + + +class DataContext(Context): + def __init__(self, name: str, data: str, description: str | None = None) -> None: + self._name = name + self.description = description + self.data = data + + def message(self) -> ChatCompletionMessageParam: + return create_system_message(self.content(), self._name) + + def content(self) -> str: + s = self.data + if self.description: + s = f"{self.description}\n\n'''\n{self.data}\n'''" + return s + + def name(self) -> str: + return self._name + + +class ContextStrategy(Enum): + SINGLE = "single" # Put all context chunks in a single message. + MULTI = "multi" # Put each context chunk in its own message. + + +@dataclass +class Prompt: + instructions: Instructions + output_format: str | None = None + reasoning_steps: str | None = None + examples: str | None = None + contexts: list[Context] = field(default_factory=list) + context_strategy: ContextStrategy = ContextStrategy.SINGLE + final_instructions: str | None = None + + def messages(self) -> list[ChatCompletionMessageParam]: + parts = [ + str(self.instructions), + ] + if self.reasoning_steps: + parts.append("# Reasoning Steps") + parts.append(self.reasoning_steps) + if self.output_format: + parts.append("# Output Format") + parts.append(self.output_format) + if self.examples: + parts.append("# Examples") + parts.append(self.examples) + if self.contexts and self.context_strategy == ContextStrategy.SINGLE: + parts.append("# Context") + for context in self.contexts: + parts.append(f"## {context.name()}") + parts.append(context.content()) + s = "\n\n".join(parts) + if self.final_instructions: + s += "\n\n" + self.final_instructions + + messages = [ + create_system_message(s), + ] + + if self.contexts and self.context_strategy == ContextStrategy.MULTI: + for context in self.contexts: + messages.append(context.message()) + + return messages + + +class TokenBudget: + def __init__(self, budget: int) -> None: + self.budget = budget + self.used = 0 + + def add(self, tokens: int) -> None: + self.used += tokens + + def remaining(self) -> int: + return self.budget - self.used + + def is_under_budget(self) -> bool: + return self.remaining() > 0 + + def is_over_budget(self) -> bool: + return self.remaining() < 0 + + def fits(self, tokens: int) -> bool: + return self.remaining() >= tokens + + +class ContextSection(Enum): + """ + Enum to represent different sections of the conversation context. + """ + + KNOWLEDGE_INFO = "knowledge_info" + KNOWLEDGE_BRIEF = "knowledge_brief" + TARGET_AUDIENCE = "target_audience" + LEARNING_OBJECTIVES = "learning_objectives" + KNOWLEDGE_DIGEST = "knowledge_digest" + INFORMATION_REQUESTS = "information_requests" + SUGGESTED_NEXT_ACTIONS = "suggested_next_actions" + COORDINATOR_CONVERSATION = "coordinator_conversation" + ATTACHMENTS = "attachments" + TASKS = "tasks" + + +async def add_context_to_prompt( + prompt: Prompt, + context: ConversationContext, + role: ConversationRole, + model: str, + token_limit: int, + attachments_extension: AttachmentsExtension | None = None, + attachments_config: AttachmentsConfigModel | None = None, + attachments_in_system_message: bool = False, + include: list[ContextSection] | None = None, +) -> None: + if include is None: + return + + share = await ShareManager.get_share(context) + + if ContextSection.TASKS in include: + tasks = await TasksManager.get_tasks(context) + if tasks: + tasks_data = json.dumps([task.model_dump() for task in tasks]) + prompt.contexts.append( + DataContext( + "Task List", + tasks_data, + ) + ) + + if ContextSection.KNOWLEDGE_INFO in include: + share_info_text = share.model_dump_json( + indent=2, + exclude={ + "brief", + "learning_objectives", + "audience_takeaways", + "preferred_communication_style", + "digest", + "next_learning_actions", + "requests", + "tasks", + "log", + }, + ) + prompt.contexts.append(DataContext("Knowledge Share Info", share_info_text)) + + if ContextSection.KNOWLEDGE_BRIEF in include and share and share.brief: + brief_text = "" + brief_text = f"**Title:** {share.brief.title}\n**Description:** {share.brief.content}" + prompt.contexts.append( + DataContext( + "Knowledge Brief", + brief_text, + ) + ) + + if ContextSection.TARGET_AUDIENCE in include and role == ConversationRole.COORDINATOR and share: + if share.audience: + audience_context = share.audience + + if share.audience_takeaways: + audience_context += "\n\n**Intended takeaways for this audience:**\n" + audience_context += "\n".join(f"- {takeaway}" for takeaway in share.audience_takeaways) + else: + audience_context += "\n\n**Note:** No specific takeaways defined for this audience. Please define them to help guide the knowledge transfer process." # noqa: E501 + + if not share.is_intended_to_accomplish_outcomes: + audience_context += "\n\n**Note:** This knowledge package is intended for general exploration, not specific learning outcomes." # noqa: E501 + else: + audience_context = "The intended audience for this knowledge transfer has not been defined yet. Please define it to help guide the knowledge transfer process." # noqa: E501 + + prompt.contexts.append( + DataContext( + "Target Audience", + audience_context, + ) + ) + + # Learning objectives + if ContextSection.LEARNING_OBJECTIVES in include and share and share.learning_objectives: + learning_objectives_text = "" + conversation_id = str(context.id) + + # Show progress based on role + if role == ConversationRole.COORDINATOR: + # Coordinator sees overall progress across all team members + achieved_overall, total_overall = LearningObjectivesManager.get_overall_completion(share) + learning_objectives_text += ( + f"Overall Progress: {achieved_overall}/{total_overall} outcomes achieved by team members\n\n" + ) + else: + # Team member sees their personal progress + if conversation_id in share.team_conversations: + achieved_personal, total_personal = LearningObjectivesManager.get_completion_for_conversation( + share, conversation_id + ) + progress_pct = int(achieved_personal / total_personal * 100) if total_personal > 0 else 0 + learning_objectives_text += ( + f"My Progress: {achieved_personal}/{total_personal} outcomes achieved ({progress_pct}%)\n\n" + ) + + learning_objectives = {} + for objective in share.learning_objectives: + learning_objectives[objective.id] = objective.model_dump() + learning_objectives_text = json.dumps( + learning_objectives, + indent=2, + ) + + prompt.contexts.append( + DataContext( + "Learning Objectives", + learning_objectives_text, + ) + ) + + if ContextSection.KNOWLEDGE_DIGEST in include and share and share.digest and share.digest.content: + prompt.contexts.append( + DataContext( + "Knowledge digest", + share.digest.content, + "The assistant-maintained knowledge digest.", + ) + ) + + if ContextSection.INFORMATION_REQUESTS in include and share: + all_requests = share.requests + if role == ConversationRole.COORDINATOR: + active_requests = [r for r in all_requests if r.status != RequestStatus.RESOLVED] + if active_requests: + coordinator_requests = "" + for req in active_requests[:10]: # Limit to 10 for brevity + priority_emoji = get_priority_emoji(req.priority) + status_emoji = get_status_emoji(req.status) + coordinator_requests = f"{priority_emoji} **{req.title}** {status_emoji}\n" + coordinator_requests += f" **Request ID:** `{req.request_id}`\n" + coordinator_requests += f" **Description:** {req.description}\n\n" + + if len(active_requests) > 10: + coordinator_requests += f"*...and {len(active_requests) - 10} more requests.*\n" + else: + coordinator_requests = "No active information requests." + prompt.contexts.append( + DataContext( + "Information Requests", + coordinator_requests, + ) + ) + else: # team role + information_requests_info = "" + my_requests = [] + + # Filter for requests from this conversation that aren't resolved. + my_requests = [ + r for r in all_requests if r.conversation_id == str(context.id) and r.status != RequestStatus.RESOLVED + ] + + if my_requests: + information_requests_info = "" + for req in my_requests: + information_requests_info += ( + f"- **{req.title}** (ID: `{req.request_id}`, Priority: {req.priority})\n" + ) + else: + information_requests_info = "No active information requests." + + prompt.contexts.append( + DataContext( + "Information Requests", + information_requests_info, + ) + ) + + # if ContextSection.SUGGESTED_NEXT_ACTIONS in include and share and role == ConversationRole.COORDINATOR: + # next_action_suggestion = await get_coordinator_next_action_suggestion(context) + # if next_action_suggestion: + # prompt.contexts.append( + # DataContext( + # "Suggested Next Actions", + # next_action_suggestion, + # "Actions the coordinator should consider taking based on the current knowledge transfer state.", + # ) + # ) + + # Figure out the token budget so far. + token_budget = TokenBudget(token_limit) + token_budget.add( + openai_client.num_tokens_from_messages( + model=model, + messages=prompt.messages(), + ) + ) + + # Coordinator conversation + if ContextSection.COORDINATOR_CONVERSATION in include: + coordinator_conversation = await ShareManager.get_coordinator_conversation(context) + if coordinator_conversation: + # Limit messages to the configured max token count. + total_coordinator_conversation_tokens = 0 + selected_coordinator_conversation_messages: list[CoordinatorConversationMessage] = [] + for msg in reversed(coordinator_conversation.messages): + tokens = openai_client.num_tokens_from_string(msg.model_dump_json(), model=model) + if total_coordinator_conversation_tokens + tokens > token_limit: + break + selected_coordinator_conversation_messages.append(msg) + total_coordinator_conversation_tokens += tokens + + class CoordinatorMessageList(BaseModel): + messages: list[CoordinatorConversationMessage] = Field(default_factory=list) + + selected_coordinator_conversation_messages.reverse() + coordinator_message_list = CoordinatorMessageList(messages=selected_coordinator_conversation_messages) + coordinator_message_list_data = coordinator_message_list.model_dump_json() + + if attachments_in_system_message: + prompt.contexts.append( + DataContext( + "Message History" if role == ConversationRole.COORDINATOR else "Coordinator Conversation", + coordinator_message_list_data, + ) + ) + else: + if role == ConversationRole.COORDINATOR: + coordinator_message_list_data = ( + f"<MESSAGE_HISTORY>{coordinator_message_list_data}</MESSAGE_HISTORY>" + ) + else: + coordinator_message_list_data = ( + f"<COORDINATOR_CONVERSATION>{coordinator_message_list_data}</COORDINATOR_CONVERSATION>" + ) + prompt.contexts.append(DataContext("Attachment", coordinator_message_list_data)) + + # TODO: To get exact token count, we should add delimiters. + token_budget.add( + openai_client.num_tokens_from_string( + model=model, + string=coordinator_message_list_data, + ) + ) + + # Attachments + if ContextSection.ATTACHMENTS in include and share and attachments_config and attachments_extension: + # Generate the attachment messages. + # TODO: This will exceed the token limit if there are too many attachments. + + attachment_messages: list[ChatCompletionMessageParam] = openai_client.convert_from_completion_messages( + await attachments_extension.get_completion_messages_for_attachments( + context, + config=attachments_config, + ) + ) + + if attachments_in_system_message: + attachments_data = "\n\n".join(f"{msg['content']}" for msg in attachment_messages if "content" in msg) + prompt.contexts.append( + DataContext( + "Attachments", + attachments_data, + "The attachments provided by the user.", + ) + ) + # TODO: To get exact token count, we should add delimiters. + token_budget.add( + openai_client.num_tokens_from_string( + model=model, + string=attachments_data, + ) + ) + + else: + for a in attachment_messages: + prompt.contexts.append( + ChatCompletionMessageContext( + name="Attachment", + message=a, + ) + ) + token_budget.add( + openai_client.num_tokens_from_messages( + model=model, + messages=attachment_messages, + ) + ) diff --git a/assistants/project-assistant/assistant/respond.py b/assistants/project-assistant/assistant/respond.py deleted file mode 100644 index 920c116c1..000000000 --- a/assistants/project-assistant/assistant/respond.py +++ /dev/null @@ -1,614 +0,0 @@ -import re -import time -from textwrap import dedent -from typing import Any, Dict, List - -import openai_client -from assistant_extensions.attachments import AttachmentsExtension -from openai import BaseModel -from openai.types.chat import ( - ChatCompletionAssistantMessageParam, - ChatCompletionMessageParam, - ChatCompletionSystemMessageParam, - ChatCompletionUserMessageParam, -) -from openai_client import num_tokens_from_messages -from openai_client.completion import message_content_from_completion -from openai_client.tools import complete_with_tool_calls -from pydantic import Field -from semantic_workbench_api_model.workbench_model import ( - ConversationMessage, - ConversationParticipantList, - MessageType, - NewConversationMessage, -) -from semantic_workbench_assistant.assistant_app import ( - ConversationContext, -) - -from .config import assistant_config -from .logging import logger -from .project_analysis import detect_information_request_needs -from .project_common import detect_assistant_role -from .project_data import RequestStatus -from .project_manager import ProjectManager -from .project_storage import ProjectStorage -from .project_storage_models import ConversationRole, CoordinatorConversationMessage -from .string_utils import Context, ContextStrategy, Instructions, Prompt, TokenBudget, render -from .tools import ProjectTools -from .utils import load_text_include - -SILENCE_TOKEN = "{{SILENCE}}" - - -def format_message(participants: ConversationParticipantList, message: ConversationMessage) -> str: - """Consistent formatter that includes the participant name for multi-participant and name references""" - conversation_participant = next( - (participant for participant in participants.participants if participant.id == message.sender.participant_id), - None, - ) - participant_name = conversation_participant.name if conversation_participant else "unknown" - message_datetime = message.timestamp.strftime("%Y-%m-%d %H:%M:%S") - return f"[{participant_name} - {message_datetime}]: {message.content}" - - -async def respond_to_conversation( - context: ConversationContext, - new_message: ConversationMessage, - attachments_extension: AttachmentsExtension, - metadata: Dict[str, Any], -) -> None: - """ - Respond to a conversation message. - """ - if "debug" not in metadata: - metadata["debug"] = {} - - # Config - config = await assistant_config.get(context.assistant) - model = config.request_config.openai_model - - # Requirements - role = await detect_assistant_role(context) - metadata["debug"]["role"] = role - project_id = await ProjectManager.get_project_id(context) - if not project_id: - raise ValueError("Project ID not found in context") - - token_budget = TokenBudget(config.request_config.max_tokens) - - ## - ## INSTRUCTIONS - ## - - # Add role-specific instructions. - if role == ConversationRole.COORDINATOR: - assistant_role = config.prompt_config.coordinator_role - role_specific_instructions = config.prompt_config.coordinator_instructions - else: - assistant_role = config.prompt_config.team_role - role_specific_instructions = config.prompt_config.team_instructions - instructions = Instructions(role_specific_instructions) - - # Add whiteboard instructions. - instructions.add_subsection( - Instructions( - render(load_text_include("whiteboard_instructions.txt"), {"project_or_context": config.project_or_context}), - "Assistant Whiteboard", - ) - ) - - # If this is a multi-participant conversation, add a note about the participants. - participants = await context.get_participants(include_inactive=True) - if len(participants.participants) > 2: - participant_text = ( - "\n\n" - f"There are {len(participants.participants)} participants in the conversation," - " including you as the assistant and the following users:" - + ",".join([ - f' "{participant.name}"' - for participant in participants.participants - if participant.id != context.assistant.id - ]) - + "\n\nYou do not need to respond to every message. Do not respond if the last thing said was a closing" - " statement such as 'bye' or 'goodbye', or just a general acknowledgement like 'ok' or 'thanks'. Do not" - f' respond as another user in the conversation, only as "{context.assistant.name}".' - " Sometimes the other users need to talk amongst themselves and that is ok. If the conversation seems to" - f' be directed at you or the general audience, go ahead and respond.\n\nSay "{SILENCE_TOKEN}" to skip' - " your turn." - ) - instructions.add_subsection(Instructions(participant_text, "Multi-participant conversation instructions")) - - prompt = Prompt( - role=assistant_role, - instructions=instructions, - context_strategy=ContextStrategy.MULTI, - output_format="Respond as JSON with your response in the `response` field and all citations in the `citations` field. In the `next_step_suggestion` field, suggest more areas to explore using content from the assistant whiteboard to ensure your conversation covers all of the relevant information.", - ) - - ### - ### Context - ### - - # Project info - project_info = ProjectStorage.read_project_info(project_id) - if project_info: - project_info_text = project_info.model_dump_json(indent=2) - prompt.contexts.append(Context(f"{config.Project_or_Context} Info", project_info_text)) - - # Brief - briefing = ProjectStorage.read_project_brief(project_id) - project_brief_text = "" - if briefing: - project_brief_text = f"**Title:** {briefing.title}\n**Description:** {briefing.description}" - prompt.contexts.append( - Context( - f"{config.Project_or_Context} Brief", - project_brief_text, - ) - ) - - # Project goals - project = ProjectStorage.read_project(project_id) - if project and project.goals: - goals_text = "" - for i, goal in enumerate(project.goals): - # Count completed criteria - completed = sum(1 for c in goal.success_criteria if c.completed) - total = len(goal.success_criteria) - - project_brief_text += f"{i + 1}. **{goal.name}** - {goal.description}\n" - if goal.success_criteria: - goals_text += f" Progress: {completed}/{total} criteria complete\n" - for criterion in goal.success_criteria: - check = "✅" if criterion.completed else "⬜" - goals_text += f" {check} {criterion.description}\n" - prompt.contexts.append( - Context( - "Project Goals", - goals_text, - ) - ) - - # Whiteboard - whiteboard = ProjectStorage.read_project_whiteboard(project_id) - if whiteboard and whiteboard.content: - prompt.contexts.append(Context("Assistant Whiteboard", whiteboard.content, "The assistant's whiteboard")) - - # Information requests - all_requests = ProjectStorage.get_all_information_requests(project_id) - if role == ConversationRole.COORDINATOR: - active_requests = [r for r in all_requests if r.status != RequestStatus.RESOLVED] - if active_requests: - coordinator_requests = "> 📋 **Use the request ID (not the title) with resolve_information_request()**\n\n" - for req in active_requests[:10]: # Limit to 10 for brevity - priority_marker = { - "low": "🔹", - "medium": "🔶", - "high": "🔴", - "critical": "⚠️", - }.get(req.priority.value, "🔹") - - coordinator_requests += f"{priority_marker} **{req.title}** ({req.status.value})\n" - coordinator_requests += f" **Request ID:** `{req.request_id}`\n" - coordinator_requests += f" **Description:** {req.description}\n\n" - - if len(active_requests) > 10: - coordinator_requests += f'*...and {len(active_requests) - 10} more requests. Use get_project_info(info_type="requests") to see all.*\n' - else: - coordinator_requests = "No active information requests." - prompt.contexts.append( - Context( - "Information Requests", - coordinator_requests, - ) - ) - else: # team role - information_requests_info = "" - my_requests = [] - - # Filter for requests from this conversation that aren't resolved. - my_requests = [ - r for r in all_requests if r.conversation_id == str(context.id) and r.status != RequestStatus.RESOLVED - ] - - if my_requests: - information_requests_info = "" - for req in my_requests: - information_requests_info += f"- **{req.title}** (ID: `{req.request_id}`, Priority: {req.priority})\n" - information_requests_info += ( - '\nYou can delete any of these requests using `delete_information_request(request_id="the_id")`\n' - ) - else: - information_requests_info = "No active information requests." - - prompt.contexts.append( - Context( - "Information Requests", - information_requests_info, - ) - ) - - # Calculate token count for all system messages so far. - completion_messages = prompt.messages() - token_budget.add( - num_tokens_from_messages( - model=model, - messages=completion_messages, - ) - ) - - ### - ### Coordinator conversation as an attachment. - ### - - # Get the coordinator conversation and add it as an attachment. - coordinator_conversation = ProjectStorage.read_coordinator_conversation(project_id) - if coordinator_conversation: - # Limit messages to the configured max token count. - total_coordinator_conversation_tokens = 0 - selected_coordinator_conversation_messages: List[CoordinatorConversationMessage] = [] - for msg in reversed(coordinator_conversation.messages): - tokens = openai_client.num_tokens_from_string(msg.model_dump_json(), model=model) - if ( - total_coordinator_conversation_tokens + tokens - > config.request_config.coordinator_conversation_token_limit - ): - break - selected_coordinator_conversation_messages.append(msg) - total_coordinator_conversation_tokens += tokens - - # Create a new coordinator conversation system message with the selected messages. - class CoordinatorMessageList(BaseModel): - messages: List[CoordinatorConversationMessage] = Field(default_factory=list) - - selected_coordinator_conversation_messages.reverse() - coordinator_message_list = CoordinatorMessageList(messages=selected_coordinator_conversation_messages) - coordinator_conversation_message = ChatCompletionSystemMessageParam( - role="system", - content=( - f"<ATTACHMENT><FILENAME>CoordinatorConversation.json</FILENAME><CONTENT>{coordinator_message_list.model_dump_json()}</CONTENT>" - ), - ) - completion_messages.append(coordinator_conversation_message) - - token_budget.add( - num_tokens_from_messages( - model=model, - messages=[coordinator_conversation_message], - ) - ) - - ### - ### ATTACHMENTS - ### - - # TODO: A better pattern here might be to keep the attachements as user - # in the proper flow of the conversation rather than as . - - # Generate the attachment messages. - attachment_messages: List[ChatCompletionMessageParam] = openai_client.convert_from_completion_messages( - await attachments_extension.get_completion_messages_for_attachments( - context, - config=config.attachments_config, - ) - ) - - # TODO: This will exceed the token limit if there are too many attachments. - # We do give them a warning below, though, and tell them to remove - # attachments if this happens. - - token_budget.add( - num_tokens_from_messages( - model=model, - messages=attachment_messages, - ) - ) - completion_messages.extend(attachment_messages) - - ### - ### USER MESSAGE - ### - - if new_message.sender.participant_id == context.assistant.id: - user_message: ChatCompletionMessageParam = ChatCompletionAssistantMessageParam( - role="assistant", - content=format_message(participants, new_message), - ) - else: - user_message: ChatCompletionMessageParam = ChatCompletionUserMessageParam( - role="user", - content=format_message(participants, new_message), - ) - - token_budget.add( - num_tokens_from_messages( - model=model, - messages=[user_message], - ) - ) - - ### - ### HISTORY MESSAGES - ### - - history_messages: list[ChatCompletionMessageParam] = [] - before_message_id = new_message.id - history_token_budget = TokenBudget(token_budget.remaining()) - - # Fetch messages from the workbench in batches that will fit our token budget. - under_budget = True - while under_budget: - # Get a batch of messages - messages_response = await context.get_messages( - before=before_message_id, - limit=100, - message_types=[MessageType.chat], - ) - messages_list = messages_response.messages - if not messages_list or len(messages_list) == 0: - break - before_message_id = messages_list[0].id - - for msg in reversed(messages_list): - if msg.sender.participant_id == context.assistant.id: - current_message = ChatCompletionAssistantMessageParam( - role="assistant", - content=format_message(participants, msg), - ) - else: - current_message = ChatCompletionUserMessageParam( - role="user", - content=format_message(participants, msg), - ) - - current_message_tokens = num_tokens_from_messages( - model=model, - messages=[current_message], - ) - - if history_token_budget.fits(current_message_tokens): - history_messages = [current_message] + history_messages - history_token_budget.add(current_message_tokens) - else: - under_budget = False - break - - if not under_budget: - break - - # Add all chat messages. - completion_messages.extend(history_messages) - completion_messages.append(user_message) - - # Add a system message to indicate attachments are a part of the new message. - if new_message.filenames and len(new_message.filenames) > 0: - attachment_message = ChatCompletionSystemMessageParam( - role="system", - content=f"Attachment(s): {', '.join(new_message.filenames)}", - ) - completion_messages.append(attachment_message) - token_budget.add( - num_tokens_from_messages( - model=model, - messages=[attachment_message], - ) - ) - - ## - ## Final token count check - ## - token_counts = {"total": token_budget.used, "max": token_budget.budget} - metadata["debug"]["token_usage"] = token_counts # For debug. - metadata["token_counts"] = token_counts # For footer. - if token_budget.remaining() < 0: - raise ValueError( - f"You've exceeded the token limit of {token_budget.budget} in this conversation " - f"({token_budget.used}). Try removing some attachments." - ) - - # For team role, analyze message for possible information request needs. - # Send a notification if we think it might be one. - if role is ConversationRole.TEAM: - detection_result = await detect_information_request_needs(context, new_message.content) - - if detection_result.get("is_information_request", False) and detection_result.get("confidence", 0) > 0.8: - suggested_title = detection_result.get("potential_title", "") - suggested_priority = detection_result.get("suggested_priority", "medium") - potential_description = detection_result.get("potential_description", "") - reason = detection_result.get("reason", "") - - suggestion = ( - f"**Potential _Information Request_ Detected**\n\n" - f"It appears that you might need information from the {config.project_or_context} coordinator. {reason}\n\n" - f"Would you like me to create an information request?\n" - f"**Title:** {suggested_title}\n" - f"**Description:** {potential_description}\n" - f"**Priority:** {suggested_priority}\n\n" - ) - - await context.send_messages( - NewConversationMessage( - content=suggestion, - message_type=MessageType.notice, - metadata={"debug": detection_result}, - ) - ) - metadata["debug"]["detection_result"] = detection_result - - ## - ## MAKE THE LLM CALL - ## - - class Output(BaseModel): - """ - Attributes: - citations: A list of citations from which the response is generated. There should always be at least one citation, but it can be empty if the assistant has no relevant information to cite. - excerpt: A verbatim excerpt from one of the cited works that illustrates why this response was given. It should have enough context to get a good idea of what's in that part of the cited work. If there is no relevant excerpt, this will be None. - next_step_suggestion: Suggest more areas to explore using content from the assistant whiteboard to ensure your conversation covers all of the relevant information. - """ - - citations: list[str] = Field( - description="A list of citations from which the response is generated. There should always be at least one citation, but it can be empty if the assistant has no relevant information to cite.", - ) - excerpt: str | None = Field( - description="A verbatim excerpt from one of the cited works that illustrates why this response was given. It should have enough context to get a good idea of what's in that part of the cited work. If there is no relevant excerpt, this will be None.", - ) - response: str = Field( - description="The response from the assistant.", - ) - next_step_suggestion: str = Field( - description="Suggest more areas to explore using content from the assistant whiteboard to ensure your conversation covers all of the relevant information. For example: 'Would you like to explore ... next?'.", - ) - - model_config = { - "extra": "forbid" # This sets additionalProperties=false in the schema - } - - async with openai_client.create_client(config.service_config) as client: - try: - completion_args = { - "messages": completion_messages, - "model": model, - "max_tokens": config.request_config.response_tokens, - "response_format": Output, - } - - project_tools = ProjectTools(context, role) - response_start_time = time.time() - completion_response, additional_messages = await complete_with_tool_calls( - async_client=client, - completion_args=completion_args, - tool_functions=project_tools.tool_functions, - metadata=metadata["debug"], - ) - response_end_time = time.time() - footer_items = [] - - # Add the token usage message to the footer items - if completion_response: - response_tokens = completion_response.usage.completion_tokens if completion_response.usage else 0 - request_tokens = token_budget.used - footer_items.append( - get_token_usage_message( - max_tokens=config.request_config.max_tokens, - total_tokens=request_tokens + response_tokens, - request_tokens=request_tokens, - completion_tokens=response_tokens, - ) - ) - - await context.update_conversation( - metadata={ - "token_counts": { - "total": request_tokens + response_tokens, - "max": config.request_config.max_tokens, - } - } - ) - - footer_items.append(get_response_duration_message(response_end_time - response_start_time)) - metadata["footer_items"] = footer_items - - content = message_content_from_completion(completion_response) - if not content: - content = "I've processed your request, but couldn't generate a proper response." - - except Exception as e: - logger.exception(f"exception occurred calling openai chat completion: {e}") - content = "An error occurred while calling the OpenAI API. Is it configured correctly?" - metadata["debug"]["error"] = str(e) - - if content: - # strip out the username from the response - if isinstance(content, str) and content.startswith("["): - content = re.sub(r"\[.*\]:\s", "", content) - - # check for the silence token, in case the model chooses not to respond - # model sometimes puts extra spaces in the response, so remove them - # when checking for the silence token - if isinstance(content, str) and content.replace(" ", "") == SILENCE_TOKEN: - # normal behavior is to not respond if the model chooses to remain silent - # but we can override this behavior for debugging purposes via the assistant config - if config.enable_debug_output: - metadata["debug"]["silence_token"] = True - metadata["debug"]["silence_token_response"] = (content,) - await context.send_messages( - NewConversationMessage( - message_type=MessageType.notice, - content="[assistant chose to remain silent]", - metadata=metadata, - ) - ) - return - - # Prepare response and citations. - response_parts: list[str] = [] - try: - output_model = Output.model_validate_json(content) - if output_model.response: - response_parts.append(output_model.response) - - if role == ConversationRole.TEAM and output_model.excerpt: - output_model.excerpt = output_model.excerpt.strip().strip('"') - response_parts.append(f'> _"{output_model.excerpt}"_ (excerpt)') - - if role == ConversationRole.TEAM and output_model.next_step_suggestion: - response_parts.append(output_model.next_step_suggestion) - - if role == ConversationRole.TEAM and output_model.citations: - citations = ", ".join(output_model.citations) - response_parts.append(f"Sources: _{citations}_") - - except Exception as e: - logger.exception(f"exception occurred parsing json response: {e}") - metadata["debug"]["error"] = str(e) - response_parts.append(content) - - await context.send_messages( - NewConversationMessage( - content="\n\n".join(response_parts), - message_type=MessageType.chat, - metadata=metadata, - ) - ) - - -def get_formatted_token_count(tokens: int) -> str: - # if less than 1k, return the number of tokens - # if greater than or equal to 1k, return the number of tokens in k - # use 1 decimal place for k - # drop the decimal place if the number of tokens in k is a whole number - if tokens < 1000: - return str(tokens) - else: - tokens_in_k = tokens / 1000 - if tokens_in_k.is_integer(): - return f"{int(tokens_in_k)}k" - else: - return f"{tokens_in_k:.1f}k" - - -def get_token_usage_message( - max_tokens: int, - total_tokens: int, - request_tokens: int, - completion_tokens: int, -) -> str: - """ - Generate a display friendly message for the token usage, to be added to the footer items. - """ - - return dedent(f""" - Tokens used: {get_formatted_token_count(total_tokens)} - ({get_formatted_token_count(request_tokens)} in / {get_formatted_token_count(completion_tokens)} out) - of {get_formatted_token_count(max_tokens)} ({int(total_tokens / max_tokens * 100)}%) - """).strip() - - -def get_response_duration_message(response_duration: float) -> str: - """ - Generate a display friendly message for the response duration, to be added to the footer items. - """ - - return f"Response time: {response_duration:.2f} seconds" diff --git a/assistants/project-assistant/assistant/state_inspector.py b/assistants/project-assistant/assistant/state_inspector.py deleted file mode 100644 index e798a2d26..000000000 --- a/assistants/project-assistant/assistant/state_inspector.py +++ /dev/null @@ -1,311 +0,0 @@ -""" -Project assistant inspector state provider. - -This module provides the state inspector provider for the project assistant -to display project information in the workbench UI's inspector panel. -""" - -import logging -from typing import Any, List - -from semantic_workbench_assistant.assistant_app import ( - AssistantConversationInspectorStateDataModel, - ConversationContext, -) - -from .conversation_project_link import ConversationProjectManager -from .project_common import detect_assistant_role -from .project_data import RequestStatus -from .project_manager import ProjectManager -from .project_storage import ProjectStorage -from .project_storage_models import ConversationRole - -logger = logging.getLogger(__name__) - - -class ProjectInspectorStateProvider: - """ - Inspector state provider for project information. - - This provider displays project-specific information in the inspector panel - including project state, brief, goals, and information requests based on the - user's role (Coordinator or Team). - - The content displayed is adapted based on the template configuration: - - Default: Shows brief, goals, criteria, and request status - - Context Transfer: Focuses on knowledge context without goals or progress tracking - """ - - # Default display name and description - display_name = "Status" - description = "" - - def __init__(self, config_provider) -> None: - self.config_provider = config_provider - - async def is_enabled(self, context: ConversationContext) -> bool: - return True - - async def get(self, context: ConversationContext) -> AssistantConversationInspectorStateDataModel: - """ - Get project information for display in the inspector panel. - """ - - # State variables that will determine the content to display. - conversation_role = await detect_assistant_role(context) - - # Determine the conversation's role and project - project_id = await ConversationProjectManager.get_associated_project_id(context) - if not project_id: - return AssistantConversationInspectorStateDataModel( - data={"content": "No active project. Start a conversation to create one."} - ) - - # Get project information - brief = await ProjectManager.get_project_brief(context) - project_info = await ProjectManager.get_project_info(context) - - if conversation_role == ConversationRole.COORDINATOR: - markdown = await self._format_coordinator_markdown( - project_id, conversation_role, brief, project_info, context - ) - else: - markdown = await self._format_team_markdown(project_id, conversation_role, brief, project_info, context) - - return AssistantConversationInspectorStateDataModel(data={"content": markdown}) - - async def _format_coordinator_markdown( - self, - project_id: str, - role: ConversationRole, - brief: Any, - project_info: Any, - context: ConversationContext, - ) -> str: - """Format project information as markdown for Coordinator role""" - - lines: List[str] = [] - - # Get the project - project = ProjectStorage.read_project(project_id) - - lines.append("**Role:** Coordinator") - - stage_label = "Planning Stage" - if project_info and project_info.state: - if project_info.state.value == "planning": - stage_label = "Planning Stage" - elif project_info.state.value == "ready_for_working": - stage_label = "Ready for Working" - elif project_info.state.value == "in_progress": - stage_label = "Working Stage" - elif project_info.state.value == "completed": - stage_label = "Completed Stage" - elif project_info.state.value == "aborted": - stage_label = "Aborted Stage" - lines.append(f"**Status:** {stage_label}") - - if project_info and project_info.status_message: - lines.append(f"**Status Message:** {project_info.status_message}") - - lines.append("") - - lines.append("Project Brief") - - title = brief.title if brief else "Untitled" - lines.append(f"### {title}") - lines.append("") - - if brief and brief.description: - lines.append(brief.description) - lines.append("") - - # In context transfer mode, show additional context in a dedicated section - if brief.additional_context: - lines.append("## Additional Context") - lines.append(brief.additional_context) - lines.append("") - - # Add goals section if available and progress tracking is enabled - if project and project.goals: - lines.append("## Goals") - for goal in project.goals: - criteria_complete = sum(1 for c in goal.success_criteria if c.completed) - criteria_total = len(goal.success_criteria) - lines.append(f"### {goal.name}") - lines.append(goal.description) - lines.append(f"**Progress:** {criteria_complete}/{criteria_total} criteria complete") - - if goal.success_criteria: - lines.append("") - lines.append("#### Success Criteria:") - for criterion in goal.success_criteria: - status_emoji = "✅" if criterion.completed else "⬜" - lines.append(f"- {status_emoji} {criterion.description}") - lines.append("") - - # Add information requests section - requests = await ProjectManager.get_information_requests(context) - # Filter out resolved requests - requests = [req for req in requests if req.status != RequestStatus.RESOLVED] - if requests: - lines.append("## Information Requests") - lines.append(f"**Open requests:** {len(requests)}") - lines.append("") - - for request in requests[:5]: # Show only first 5 requests - priority_emoji = "🔴" - if hasattr(request.priority, "value"): - priority = request.priority.value - else: - priority = request.priority - - if priority == "low": - priority_emoji = "🔹" - elif priority == "medium": - priority_emoji = "🔶" - elif priority == "high": - priority_emoji = "🔴" - elif priority == "critical": - priority_emoji = "⚠️" - - lines.append(f"{priority_emoji} **{request.title}** ({request.status})") - lines.append(request.description) - lines.append("") - else: - lines.append("## Information Requests") - lines.append("No open information requests.") - lines.append("") - - # Share URL section - project_info = await ProjectManager.get_project_info(context, project_id) - share_url = project_info.share_url if project_info else None - if share_url: - lines.append("## Share") - lines.append("") - # Display the share URL as a properly formatted link - lines.append("**Share this link with your team members:**") - lines.append(f"[Knowledge Transfer link]({share_url})") - lines.append("") - lines.append("The link never expires and can be used by multiple team members.") - lines.append("") - - return "\n".join(lines) - - async def _format_team_markdown( - self, - project_id: str, - role: ConversationRole, - brief: Any, - project_info: Any, - context: ConversationContext, - ) -> str: - """Format project information as markdown for Team role""" - - lines: List[str] = [] - - # Get the project - project = ProjectStorage.read_project(project_id) - - lines.append("**Role:** Team") - - # Determine stage based on project status - stage_label = "Working Stage" - if project_info and project_info.state: - if project_info.state.value == "planning": - stage_label = "Planning Stage" - elif project_info.state.value == "ready_for_working": - stage_label = "Working Stage" - elif project_info.state.value == "in_progress": - stage_label = "Working Stage" - elif project_info.state.value == "completed": - stage_label = "Completed Stage" - elif project_info.state.value == "aborted": - stage_label = "Aborted Stage" - lines.append(f"**Status:** {stage_label}") - - # Add status message if available - if project_info and project_info.status_message: - lines.append(f"**Status Message:** {project_info.status_message}") - - lines.append("") - - # Add project description and additional context if available - lines.append("## Brief") - - title = brief.title if brief else "Untitled" - lines.append(f"### {title}") - lines.append("") - - if brief and brief.description: - lines.append(brief.description) - lines.append("") - - # In context transfer mode, show additional context in a dedicated section - if brief.additional_context: - lines.append("## Additional Context") - lines.append(brief.additional_context) - lines.append("") - - # Add goals section with checkable criteria if progress tracking is enabled - if project and project.goals: - lines.append("## Objectives") - for goal in project.goals: - criteria_complete = sum(1 for c in goal.success_criteria if c.completed) - criteria_total = len(goal.success_criteria) - lines.append(f"### {goal.name}") - lines.append(goal.description) - lines.append(f"**Progress:** {criteria_complete}/{criteria_total} criteria complete") - - if goal.success_criteria: - lines.append("") - lines.append("#### Success Criteria:") - for criterion in goal.success_criteria: - status_emoji = "✅" if criterion.completed else "⬜" - completion_info = "" - if criterion.completed and hasattr(criterion, "completed_at") and criterion.completed_at: - completion_info = f" (completed on {criterion.completed_at.strftime('%Y-%m-%d')})" - lines.append(f"- {status_emoji} {criterion.description}{completion_info}") - lines.append("") - - # Add my information requests section - requests = await ProjectManager.get_information_requests(context) - my_requests = [r for r in requests if r.conversation_id == str(context.id)] - if my_requests: - lines.append("## My Information Requests") - pending = [r for r in my_requests if r.status != "resolved"] - resolved = [r for r in my_requests if r.status == "resolved"] - - if pending: - lines.append("### Pending Requests:") - for request in pending[:3]: # Show only first 3 pending requests - priority_emoji = "🔶" # default medium - if hasattr(request.priority, "value"): - priority = request.priority.value - else: - priority = request.priority - - if priority == "low": - priority_emoji = "🔹" - elif priority == "medium": - priority_emoji = "🔶" - elif priority == "high": - priority_emoji = "🔴" - elif priority == "critical": - priority_emoji = "⚠️" - - lines.append(f"{priority_emoji} **{request.title}** ({request.status})") - lines.append("") - - if resolved: - lines.append("### Resolved Requests:") - for request in resolved[:3]: # Show only first 3 resolved requests - lines.append(f"✅ **{request.title}**") - if hasattr(request, "resolution") and request.resolution: - lines.append(f" *Resolution:* {request.resolution}") - lines.append("") - else: - lines.append("## Information Requests") - lines.append("You haven't created any information requests yet.") - - return "\n".join(lines) diff --git a/assistants/project-assistant/assistant/storage.py b/assistants/project-assistant/assistant/storage.py new file mode 100644 index 000000000..8e5483215 --- /dev/null +++ b/assistants/project-assistant/assistant/storage.py @@ -0,0 +1,356 @@ +import pathlib +import uuid +from datetime import UTC, datetime +from typing import Any + +from semantic_workbench_assistant import settings +from semantic_workbench_assistant.assistant_app import ConversationContext +from semantic_workbench_assistant.assistant_app.context import ( + storage_directory_for_context, +) +from semantic_workbench_assistant.storage import read_model, write_model + +from assistant.errors import NoShareException +from assistant.logging import logger + +# Import inside functions to avoid circular imports +from .data import ( + ConversationPreferences, + CoordinatorConversationMessage, + CoordinatorConversationMessages, + InformationRequest, + KnowledgeBrief, + KnowledgeDigest, + LogEntry, + LogEntryType, + NewTaskInfo, + Share, + ShareLog, + TaskInfo, +) +from .utils import get_current_user + + +class ShareStorageManager: + """Manages storage paths and access for knowledge transfer data.""" + + SHARES_ROOT = "shares" + SHARE_LOG_FILE = "log.json" + COORDINATOR_CONVERSATION_FILE = "coordinator_conversation.json" + SHARE_FILE = "share_data.json" + + @staticmethod + def get_shares_root() -> pathlib.Path: + """Gets the root path for all shares.""" + return pathlib.Path(settings.storage.root) / ShareStorageManager.SHARES_ROOT + + @staticmethod + def get_share_dir(share_id: str) -> pathlib.Path: + """Gets the directory for a specific share.""" + shares_root = ShareStorageManager.get_shares_root() + share_dir = shares_root / share_id + share_dir.mkdir(parents=True, exist_ok=True) + return share_dir + + @staticmethod + def get_share_log_path(share_id: str) -> pathlib.Path: + """Gets the path to the knowledge transfer log file.""" + share_dir = ShareStorageManager.get_share_dir(share_id) + return share_dir / ShareStorageManager.SHARE_LOG_FILE + + @staticmethod + def get_coordinator_conversation_path(share_id: str) -> pathlib.Path: + """Gets the path to the Coordinator conversation file.""" + share_dir = ShareStorageManager.get_share_dir(share_id) + return share_dir / ShareStorageManager.COORDINATOR_CONVERSATION_FILE + + @staticmethod + def get_share_path(share_id: str) -> pathlib.Path: + """Gets the path to the complete data file.""" + share_dir = ShareStorageManager.get_share_dir(share_id) + return share_dir / ShareStorageManager.SHARE_FILE + + @staticmethod + def share_exists(share_id: str) -> bool: + """Checks if a share exists.""" + share_dir = ShareStorageManager.get_shares_root() / share_id + return share_dir.exists() + + @staticmethod + def get_conversation_role_file_path(context: ConversationContext) -> pathlib.Path: + """Gets the path to the file that stores a conversation's role in the share.""" + storage_dir = storage_directory_for_context(context) + storage_dir.mkdir(parents=True, exist_ok=True) + return storage_dir / "share_role.json" + + +class ConversationStorage: + @staticmethod + def get_conversation_preferences_file_path( + context: ConversationContext, + ) -> pathlib.Path: + """Gets the path to the file that stores conversation preferences.""" + storage_dir = storage_directory_for_context(context) + storage_dir.mkdir(parents=True, exist_ok=True) + return storage_dir / "conversation_preferences.json" + + @staticmethod + def read_conversation_preferences( + context: ConversationContext, + ) -> ConversationPreferences | None: + path = ConversationStorage.get_conversation_preferences_file_path(context) + return read_model(path, ConversationPreferences) + + @staticmethod + def write_conversation_preferences( + context: ConversationContext, preferences: ConversationPreferences + ) -> None: + path = ConversationStorage.get_conversation_preferences_file_path(context) + write_model(path, preferences) + + +class ShareStorage: + @staticmethod + def read_share(share_id: str) -> Share | None: + path = ShareStorageManager.get_share_path(share_id) + return read_model(path, Share) + + @staticmethod + def write_share(share_id: str, share: Share) -> pathlib.Path: + path = ShareStorageManager.get_share_path(share_id) + write_model(path, share) + return path + + @staticmethod + def read_tasks(share_id: str) -> list[TaskInfo]: + share = ShareStorage.read_share(share_id) + if not share: + return [] + return share.tasks + + @staticmethod + def add_tasks(share_id: str, tasks: list[NewTaskInfo]) -> None: + share = ShareStorage.read_share(share_id) + if not share: + raise NoShareException + tasks_with_ids = [ + TaskInfo(**task.model_dump(), task_id=str(uuid.uuid4())) for task in tasks + ] + share.tasks.extend(tasks_with_ids) + ShareStorage.write_share(share_id, share) + + @staticmethod + def update_task(share_id: str, task: TaskInfo) -> None: + share = ShareStorage.read_share(share_id) + if not share: + raise NoShareException + tasks = [] + for existing_task in share.tasks: + if existing_task.task_id == task.task_id: + tasks.append(task) + else: + tasks.append(existing_task) + share.tasks = tasks + ShareStorage.write_share(share_id, share) + + @staticmethod + def remove_task(share_id: str, task_id: str) -> None: + share = ShareStorage.read_share(share_id) + if not share: + raise NoShareException + share.tasks = [task for task in share.tasks if task.task_id != task_id] + ShareStorage.write_share(share_id, share) + + @staticmethod + def set_all_tasks(share_id: str, tasks: list[TaskInfo]) -> None: + share = ShareStorage.read_share(share_id) + if not share: + raise NoShareException + share.tasks = tasks + ShareStorage.write_share(share_id, share) + + @staticmethod + def read_knowledge_brief(share_id: str) -> KnowledgeBrief | None: + share = ShareStorage.read_share(share_id) + return share.brief if share else None + + @staticmethod + def write_knowledge_brief(share_id: str, brief: KnowledgeBrief) -> pathlib.Path: + share = ShareStorage.read_share(share_id) + if not share: + raise NoShareException + share.brief = brief + return ShareStorage.write_share(share_id, share) + + @staticmethod + def read_share_log(share_id: str) -> ShareLog | None: + path = ShareStorageManager.get_share_log_path(share_id) + return read_model(path, ShareLog) + + @staticmethod + def write_share_log(share_id: str, log: ShareLog) -> pathlib.Path: + path = ShareStorageManager.get_share_log_path(share_id) + write_model(path, log) + return path + + @staticmethod + def read_knowledge_digest(share_id: str) -> KnowledgeDigest | None: + share = ShareStorage.read_share(share_id) + return share.digest if share else None + + @staticmethod + def read_coordinator_conversation( + share_id: str, + ) -> CoordinatorConversationMessages | None: + path = ShareStorageManager.get_coordinator_conversation_path(share_id) + return read_model(path, CoordinatorConversationMessages) + + @staticmethod + def write_coordinator_conversation( + share_id: str, conversation: CoordinatorConversationMessages + ) -> pathlib.Path: + path = ShareStorageManager.get_coordinator_conversation_path(share_id) + write_model(path, conversation) + return path + + @staticmethod + def append_coordinator_message( + share_id: str, + message_id: str, + content: str, + sender_name: str, + is_assistant: bool = False, + timestamp: datetime | None = None, + ) -> None: + """ + Appends a message to the Coordinator conversation storage. + """ + conversation = ShareStorage.read_coordinator_conversation(share_id) + if not conversation: + conversation = CoordinatorConversationMessages(knowledge_share_id=share_id) + + new_message = CoordinatorConversationMessage( + message_id=message_id, + content=content, + sender_name=sender_name, + timestamp=timestamp or datetime.now(UTC), + is_assistant=is_assistant, + ) + + conversation.messages.append(new_message) + if len(conversation.messages) > 50: + conversation.messages = conversation.messages[-50:] + + conversation.last_updated = datetime.now(UTC) + + ShareStorage.write_coordinator_conversation(share_id, conversation) + + @staticmethod + def write_knowledge_digest(share_id: str, digest: KnowledgeDigest) -> pathlib.Path: + share = ShareStorage.read_share(share_id) + if not share: + raise NoShareException + share.digest = digest + return ShareStorage.write_share(share_id, share) + + @staticmethod + def read_information_request( + share_id: str, request_id: str + ) -> InformationRequest | None: + share = ShareStorage.read_share(share_id) + if not share: + raise NoShareException + if not share.requests: + return None + for request in share.requests: + if request.request_id == request_id: + return request + return None + + @staticmethod + def write_information_request( + share_id: str, request: InformationRequest + ) -> pathlib.Path: + # Information requests must have an ID + if not request.request_id: + raise ValueError("Information request must have a request_id") + share = ShareStorage.read_share(share_id) + if not share: + raise NoShareException + + # Update existing request or add new one + existing_requests = share.requests or [] + updated = False + for i, existing_request in enumerate(existing_requests): + if existing_request.request_id == request.request_id: + existing_requests[i] = request + updated = True + break + if not updated: + existing_requests.append(request) + + share.requests = existing_requests + return ShareStorage.write_share(share_id, share) + + @staticmethod + def get_all_information_requests(share_id: str) -> list[InformationRequest]: + share = ShareStorage.read_share(share_id) + if not share: + return [] + + # Sort by updated_at timestamp, newest first + requests = share.requests or [] + # requests.sort(key=lambda r: r.updated_at, reverse=True) + return requests + + @staticmethod + async def log_share_event( + context: ConversationContext, + share_id: str, + entry_type: str, + message: str, + related_entity_id: str | None = None, + metadata: dict[str, Any] | None = None, + ) -> None: + """ + Logs an event to the log. + + Args: + context: Current conversation context + share_id: ID of the share + entry_type: Type of log entry + message: Log message + related_entity_id: Optional ID of a related entity (e.g., information request) + metadata: Optional additional metadata + + Returns: + True if the log entry was added successfully, False otherwise + """ + user_id, user_name = await get_current_user(context) + if not user_id: + return + + entry = LogEntry( + entry_type=LogEntryType(entry_type), + message=message, + user_id=user_id, + user_name=user_name or "Unknown User", + related_entity_id=related_entity_id, + metadata=metadata or {}, + ) + + try: + log = ShareStorage.read_share_log(share_id) + if not log: + log = ShareLog( + entries=[], + ) + log.entries.append(entry) + ShareStorage.write_share_log(share_id, log) + except Exception as e: + logger.exception( + f"Failed to log share event for share {share_id}: {e}", + exc_info=True, + ) + return + return diff --git a/assistants/project-assistant/assistant/string_utils.py b/assistants/project-assistant/assistant/string_utils.py index a9bcb7892..56f0639e9 100644 --- a/assistants/project-assistant/assistant/string_utils.py +++ b/assistants/project-assistant/assistant/string_utils.py @@ -1,12 +1,9 @@ -from dataclasses import dataclass, field -from enum import Enum -from typing import Any, List +from typing import Any from liquid import Template -from openai.types.chat import ChatCompletionMessageParam -def render(template: str, vars: dict[str, Any]) -> str: +def render(template: str, vars: dict[str, Any] = {}) -> str: """ Format a string with the given variables using the Liquid template engine. """ @@ -16,137 +13,3 @@ def render(template: str, vars: dict[str, Any]) -> str: liquid_template = Template(template) parsed = liquid_template.render(**vars) return parsed - - -def create_system_message(content: str, delimiter: str | None = None) -> ChatCompletionMessageParam: - if delimiter: - content = f"<{delimiter}>\n{content}\n</{delimiter}>" - - message: ChatCompletionMessageParam = { - "role": "system", - "content": content, - } - return message - - -class Instructions: - """ - A class to represent a section of a prompt. - """ - - def __init__( - self, - content: str, - title: str | None = None, - ) -> None: - self.title = title - self.content = content - self.level = 0 - self.subsections: list[Instructions] = [] - - def add_subsection(self, subsection: "Instructions") -> None: - """ - Add a subsection to the prompt section. - """ - subsection.level = self.level + 1 - self.subsections.append(subsection) - - def __str__(self) -> str: - s = "" - if self.title: - hashes = "#" * (self.level + 1) - s += f"{hashes} {self.title}\n\n" - s += self.content - if self.subsections: - s += "\n\n" + "\n\n".join(str(subsection) for subsection in self.subsections) - - return s - - -class Context: - def __init__(self, name: str, data: str, description: str | None = None) -> None: - self.name = name - self.description = description - self.data = data - - def message(self) -> ChatCompletionMessageParam: - return create_system_message(self.content(), self.name) - - def content(self) -> str: - s = self.data - if self.description: - s = f"{self.description}\n\n'''\n{self.data}\n'''" - return s - - -class ContextStrategy(Enum): - SINGLE = "single" # Put all contexts in a single message. - MULTI = "multi" # Put each context in its own message. - - -@dataclass -class Prompt: - role: str - instructions: Instructions - output_format: str | None = None - reasoning_steps: str | None = None - examples: str | None = None - contexts: List[Context] = field(default_factory=list) - context_strategy: ContextStrategy = ContextStrategy.SINGLE - final_instructions: str | None = None - - def messages(self) -> list[ChatCompletionMessageParam]: - parts = [ - "# Role and Objective", - self.role, - "# Instructions", - str(self.instructions), - ] - if self.reasoning_steps: - parts.append("# Reasoning Steps") - parts.append(self.reasoning_steps) - if self.output_format: - parts.append("# Output Format") - parts.append(self.output_format) - if self.examples: - parts.append("# Examples") - parts.append(self.examples) - if self.contexts and self.context_strategy == ContextStrategy.SINGLE: - parts.append("# Context") - for context in self.contexts: - parts.append(f"## {context.name}") - parts.append(context.content()) - s = "\n\n".join(parts) - if self.final_instructions: - s += "\n\n" + self.final_instructions - - messages = [ - create_system_message(s), - ] - - if self.contexts and self.context_strategy == ContextStrategy.MULTI: - for context in self.contexts: - messages.append(context.message()) - - return messages - - -class TokenBudget: - def __init__(self, budget: int) -> None: - self.budget = budget - self.used = 0 - - def add(self, tokens: int) -> None: - self.used += tokens - - def remaining(self) -> int: - return self.budget - self.used - - def is_under_budget(self) -> bool: - return self.remaining() > 0 - - def is_over_budget(self) -> bool: - return self.remaining() < 0 - - def fits(self, tokens: int) -> bool: - return self.remaining() >= tokens diff --git a/assistants/project-assistant/assistant/team_welcome.py b/assistants/project-assistant/assistant/team_welcome.py deleted file mode 100644 index fe34eae1d..000000000 --- a/assistants/project-assistant/assistant/team_welcome.py +++ /dev/null @@ -1,126 +0,0 @@ -""" -Analysis and detection functions for the project assistant. - -This module contains functions for analyzing messages and project content -to detect specific conditions, such as information request needs. -""" - -from textwrap import dedent -from typing import Any, Dict, List - -import openai_client -from openai.types.chat import ChatCompletionMessageParam -from semantic_workbench_assistant.assistant_app import ConversationContext - -from assistant.project_manager import ProjectManager -from assistant.project_storage import ProjectStorage - -from .config import assistant_config -from .logging import logger - - -async def generate_team_welcome_message(context: ConversationContext) -> tuple[str, dict[str, Any]]: - """ - Geneates a welcome message for the team based on the project information. - """ - debug: Dict[str, Any] = {} - - config = await assistant_config.get(context.assistant) - - # Get project data - - project_id = await ProjectManager.get_project_id(context) - if not project_id: - raise ValueError("Project ID not found in context") - - project_data: dict[str, str] = {} - - # Briefing - briefing = ProjectStorage.read_project_brief(project_id) - project_brief_text = "" - if briefing: - project_brief_text = dedent(f""" - ### BRIEF - **Title:** {briefing.title} - **Description:** {briefing.description} - """) - project_data["briefing"] = project_brief_text - - # Goals - project = ProjectStorage.read_project(project_id) - if project and project.goals: - project_brief_text += "\n#### PROJECT GOALS:\n\n" - for i, goal in enumerate(project.goals): - completed = sum(1 for c in goal.success_criteria if c.completed) - total = len(goal.success_criteria) - project_brief_text += f"{i + 1}. **{goal.name}** - {goal.description}\n" - if goal.success_criteria: - project_brief_text += f" Progress: {completed}/{total} criteria complete\n" - for j, criterion in enumerate(goal.success_criteria): - check = "✅" if criterion.completed else "⬜" - project_brief_text += f" {check} {criterion.description}\n" - project_brief_text += "\n" - project_data["goals"] = project_brief_text - - # Whiteboard - whiteboard = ProjectStorage.read_project_whiteboard(project_id) - if whiteboard and whiteboard.content: - whiteboard_text = dedent(f""" - ### ASSISTANT WHITEBOARD - KEY PROJECT KNOWLEDGE - The whiteboard contains critical project information that has been automatically extracted from previous conversations. - It serves as a persistent memory of important facts, decisions, and context that you should reference when responding. - - Key characteristics of this whiteboard: - - It contains the most essential information about the project that should be readily available - - It has been automatically curated to focus on high-value content relevant to the project - - It is maintained and updated as the conversation progresses - - It should be treated as a trusted source of contextual information for this project - - When using the whiteboard: - - Prioritize this information when addressing questions or providing updates - - Reference it to ensure consistency in your responses across the conversation - - Use it to track important details that might otherwise be lost in the conversation history - - WHITEBOARD CONTENT: - ```markdown - {whiteboard.content} - ``` - - """) - project_data["whiteboard"] = whiteboard_text - - try: - # Chat completion - async with openai_client.create_client(config.service_config) as client: - project_info = "\n\n## CURRENT PROJECT INFORMATION\n\n" + "\n".join(project_data.values()) - - instructions = f"{config.prompt_config.welcome_message_generation}\n\n{project_info}" - messages: List[ChatCompletionMessageParam] = [ - {"role": "system", "content": instructions}, - ] - - completion_args = { - "model": config.request_config.openai_model, - "messages": messages, - "max_tokens": 500, - "temperature": 0.7, # Low temperature for more consistent analysis - } - debug["completion_args"] = openai_client.make_completion_args_serializable(completion_args) - - # LLM call - response = await client.chat.completions.create( - **completion_args, - ) - debug["completion_response"] = response.model_dump() - - # Response - if response and response.choices and response.choices[0].message.content: - return response.choices[0].message.content, debug - else: - logger.warning("Empty response from LLM for welcome message generation") - return config.team_config.default_welcome_message, debug - - except Exception as e: - logger.error(f"Failed to generate welcome message: {e}") - debug["error"] = str(e) - return config.team_config.default_welcome_message, debug diff --git a/assistants/project-assistant/assistant/text_includes/actor_instructions.md b/assistants/project-assistant/assistant/text_includes/actor_instructions.md new file mode 100644 index 000000000..7e19e9a7a --- /dev/null +++ b/assistants/project-assistant/assistant/text_includes/actor_instructions.md @@ -0,0 +1,61 @@ +# Role and Objective + +You are an autonomous AI assistant named the "Knowledge Transfer Assistant". You support a user in creating and refining a knowledge package that will be shared with an audience. + +You are an agent - keep going until you can no longer resolve any more tasks without additional input, before ending your turn and yielding back to the user. Only terminate your turn when you are sure that all tasks are solved or you need additional input from the user. + +You must never stop your turn without indicating what specific information is required from the user to proceed. + +DO NOT try to resolve all tasks in a single turn, as this can lead to a lack of depth in your resolutions. Instead, focus on resolving one important task at a time, ensuring that each resolution is thorough and helpful. + +You MUST plan extensively before each function call, and reflect extensively on the outcomes of the previous function calls. DO NOT do this entire process by making function calls only, as this can impair your ability to solve the problem and think insightfully. + +# Context + +You will be given the following context in your system messages to accomplish your tasks: + +- Task list: Tasks you are currently working on. You should work until all tasks are resolved. +- Audience and audience takeaways. +- Message history: This is the complete history of messages between the assistant and the user. Pay attention to the recent messages to help figure out what to do. +- Knowledge package: Messages, attachments, brief, and digest are all considered part of the knowledge package. They are all shared with the audience. +- Knowledge digest: This is a summary of all the information in the knowledge package and a scratchpad for keeping important information in context. +- Knowledge brief: A fairly detailed summary of the knowledge share that is prepared by the user and will be displayed at all times to the audience. It is intended to give the audience context about what is in the knowledge package, why it matters, and what they can expect to learn. +- Information requests: Information that we have asked the user about already and are awaiting a response. + +# Instructions + +## Tasks + +- Review the message history (<MESSAGE_HISTORY>) and task list (<TASK_LIST>). Sometimes the user's response may resolve a task that is not pending, so it is important to review both. +- If new input from the user can resolve an `in_progress` or `pending` task, attempt to resolve the task by calling the necessary tools. +- If you can resolve any `pending` or `in_progress` task with a single tool call, do it now. +- Track your progress on tasks using the `update_task` tool. + - Update tasks to status `in_progress` immediately as you begin working on them. + - Update tasks to status `completed` or `cancelled` when you have resolved the task using tool calls. +- Tasks may require user input. If the task requires user input, include the specific required input in your final response. Don't repeat asks for information. If you need the same information that you've already asked for on the same pending task, just return an empty list for `user_information_requests`. +- If a task has been resolved, IMMEDIATELY start working on the next task. + - If there are other `in_progress` tasks, select one of them. + - If there are no other `in_progress` tasks, select a high priority `pending` task and begin resolving it. +- Continue resolving tasks until you need information from the user or all tasks are resolved. + +1. **Task States**: Use these states to track progress: + - pending: Task not yet started + - in_progress: Currently working on (limit to ONE task at a time) + - completed: Task finished successfully + - cancelled: Task no longer needed + +2. **Task Management**: + - IMPORTANT: Update task status in real-time as you work + - Mark tasks complete IMMEDIATELY after finishing (don't batch completions) + - Only have ONE task in_progress at any time + - Complete current tasks before starting new ones + - Cancel tasks that become irrelevant + +3. **Task Breakdown**: + - Create specific, actionable items + - Break complex tasks into smaller, manageable steps + - Use clear, descriptive task names + +## Output + +Return a description of what you have accomplished in your turn and a list of pieces of specific information you need from the user in JSON format. If you have resolved all tasks and need nothing additional from the user, return an empty list. diff --git a/assistants/project-assistant/assistant/text_includes/assistant_info.md b/assistants/project-assistant/assistant/text_includes/assistant_info.md new file mode 100644 index 000000000..2e3d6bac7 --- /dev/null +++ b/assistants/project-assistant/assistant/text_includes/assistant_info.md @@ -0,0 +1,42 @@ +# Knowledge Transfer Assistant + +## Overview + +The Knowledge Transfer Assistant helps teams share knowledge efficiently between a coordinator and team members. It provides a structured way to capture, organize, and transfer complex information across conversations while maintaining a central knowledge repository accessible to all participants. + +## Key Features + +- **Dual-role knowledge sharing**: Different interfaces for the knowledge coordinator and team members. +- **Centralized knowledge space**: Automatically organized information repository. +- **Auto-updating knowledge digest**: Dynamic capture of key information about the knowledge package from coordinator conversations. +- **Information requests**: Team members can request specific information from coordinators. +- **File sharing**: Automatic synchronization of uploaded files across team conversations. + +## How to Use the Knowledge Transfer Assistant + +### For Knowledge Coordinators + +1. **Define the audience**: Who you are sharing to impacts the knowledge gathered. +2. **Build the knowledge package**: Share information, upload relevant files, and answer questions. +3. **Create the knowledge brief**: Create a knowledge brief that will be used to introduce team members to the content of the shared knowledge. +4. Optionally, **Define knowledge objectives and outcomes**: If you want to make sure your audience learns specific things, you can specify what they are. +5. **Share with team**: Generate an invitation link to share with team members who need access. +6. **Respond to requests**: Address information requests from team members as they arise. +7. **Update information**: Continue to refine and expand the knowledge base as needed. + +### For Team Members + +1. **Join a knowledge space**: Use the invitation link provided by the coordinator to join. +2. **Explore shared knowledge**: Review the knowledge brief, learning objectives, and uploaded files. +3. **Meet learning objectives and outcomes**: Make sure you learned what was intended to be transferred. +4. **Request information**: Create requests when you need additional details or clarification. + +## Common Use Cases + +- **Onboarding new team members**: Share essential company knowledge and processes +- **Subject matter expert knowledge capture**: Document expertise from key individuals +- **Research findings distribution**: Share research outcomes with broader teams +- **Documentation collaboration**: Work together on comprehensive documentation +- **Process knowledge transfer**: Explain complex workflows and procedures + +The Knowledge Transfer Assistant is designed to streamline knowledge sharing, reduce information gaps, and create a persistent, structured knowledge space that teams can reference over time. diff --git a/assistants/project-assistant/assistant/text_includes/card_content.md b/assistants/project-assistant/assistant/text_includes/card_content.md index 76f809f9a..cfbc8fe59 100644 --- a/assistants/project-assistant/assistant/text_includes/card_content.md +++ b/assistants/project-assistant/assistant/text_includes/card_content.md @@ -1,6 +1,6 @@ -Keep your team aligned and productive +Use an assistant to capture and transfer knowledge to others -- Coordinate projects across teams -- Track tasks and deadlines automatically -- Run more effective meetings -- Ensure information accessibility +- Remove burden of gathering knowledge +- Share with one or more recipients +- Remove yourself from the learning loop +- Make sure learning objectives are achieved diff --git a/assistants/project-assistant/assistant/text_includes/coordinator_instructions copy.md b/assistants/project-assistant/assistant/text_includes/coordinator_instructions copy.md new file mode 100644 index 000000000..607b13b4b --- /dev/null +++ b/assistants/project-assistant/assistant/text_includes/coordinator_instructions copy.md @@ -0,0 +1,111 @@ +# Role and Objective + +You are an autonomous AI assistant named the "Knowledge Transfer Assistant" that supports a user in creating and refining a knowledge package that will be shared with an audience. You are an expert in knowledge transfer and management, and your primary goal is to help the user assemble, organize, and refine the knowledge package. + +Please keep going until the user's query is completely resolved, before ending your turn and yielding back to the user. Only terminate your turn when you are sure that the problem is solved. + +You are driven to guide the user by the state of the knowledge share as captured below, and, importantly, by tasks on your task list. You should always refer your task list and attempt to resolve tasks as you are guiding the user. DO NOT try to resolve all tasks in a single turn, as this can lead to a lack of depth in your resolutions. Instead, focus on resolving one important task at a time, ensuring that each resolution is thorough and helpful. + +If you are not sure about attachment content or knowledge package structure pertaining to the user’s request, gather the relevant information: do NOT guess or make up an answer. + +You MUST plan extensively before each function call, and reflect extensively on the outcomes of the previous function calls. DO NOT do this entire process by making function calls only, as this can impair your ability to solve the problem and think insightfully. + +Your purpose is to guide the user through the knowledge transfer process, helping them assemble and organize the knowledge share and the knowledge package. + +After the knowledge package is shared, continue supporting the user by helping respond to information requests and updating the package as needed. + +# Instructions + +## Information Requests + +- If there are active `NEW` information requests, alert the user and ask for input to resolve them. + +## Tasks + +- Collaborate with the user to complete tasks from your task list. +- Don't disrupt the current flow of the conversation, but if a natural transition occurs in the conversation, work on the next most important task. +- If you can resolve any task by simply executing one of your tools, do so in the current turn. +- Once a task is completed, remove it from the task list by using the `mark_task_completed` tool. + +## Knowledge Share Definition + +### Audience Definition + +- The "audience" is the people who the knowledge package will be shared with. +- Help the user describe who the knowledge is for and their level of experience. +- If the audience is not yet or vaguely defined, prompt the user to describe who the knowledge is for. +- Use your `update_audience` tool to update the audience definition as you learn more about the intended audience. +- Update the audience proactively as the user provides more information. Don't ask for permission. +- Help the user define intended audience takeaways. This is important to have up-front so we can figure out how to organize the knowledge package and what to include in the brief. + +### Learning Objectives + +- If the user intends to accomplish outcomes: + - Help define **Learning Objectives** with names, descriptions, and priority. + - Help define **Learning Outcomes** (specific, measurable items under each objective). + - Help ensure every objective has at least one outcome. + - You must run tools to add update the learning objectives and outcomes. It is not enough to just reply that you added/updated. You must use your tools to do so. +- If the package is for general exploration (i.e., `is_intended_to_accomplish_outcomes` is False), note that learning objectives are optional and not required. +- Ask if the user wants to define specific learning objectives and outcomes for their audience. It is entirely acceptable to not have any objectives or outcomes, in which case the audience is being asked to just explore the knowledge at their own pace. + - If yes, help create them and ensure that each objective includes at least one outcome. + - If no, confirm that the package is intended for general exploration. + +### Invitation + +- Help the user write a short message and generate a customized invitation link to send to audience members. +- The message should be in the user's voice as they will copy and paste it into communication tools like SMS, Microsoft Teams, or email. +- It shouldn't include all the details about the knowledge share, just a brief statement about what it is, why they should be interested to check it out, and the invitation link. +- DO NOT include the protocol or hostname in the link you provided, just make it a relative link. Examples: + - [New project knowledge share-out](/conversation-share/a5b400d4-b8c4-4484-ae83-dad98fe49b06/redeem) + - [Learning about MADE](/conversation-share/12345678-1234-1234-1234-123456789012/redeem) + - [Our Knowledge Base](/conversation-share/abcdef12-3456-7890-abcd-ef1234567890/redeem) + +### Knowledge Brief + +- The "knowledge brief" is a fairly detailed summary of the knowledge share that is prepared by the user and will be displayed at all times to the audience. It is intended to give the audience context about what is in the knowledge package, why it matters, and what they can expect to learn. +- If a knowledge brief has not been created, help the user write one. +- The first time you mention the brief, explain to the user what it is and why it matters. +- When the user asks you to update the brief, use the `update_brief` tool to do so. Do NOT say you updated the brief unless you have first successfully used the tool to do so. +- Update the brief proactively as the user provides more information. Don't ask for permission. +- When talking about the brief, there is no need to explain its contents. The user can see it in their side panel. +- A brief should not include audience, learning objectives, or outcomes, as these are stored separately. + +## Knowledge Package (chat messages and attached files) + +- Assist the user in uploading and/or describing the knowledge to be shared. The "knowledge package" includes what is talked about in the chat, attached files, the brief, and the knowledge digest. +- When files are uploaded, acknowledge the upload and summarize the file contents if possible. +- Everything the intended audience needs to know should be included in the knowledge package. +- Help the user fill in gaps in the knowledge package as needed: + - Ensure the audience can takeaway what the user intends. + - If learning objectives are defined, ensure that the knowledge package covers all required outcomes. + - This step is CRUCIAL to ensure that the knowledge package is comprehensive and allows the audience to meet the takeaways and learning objectives. + +## Conversation Flow + +Allow the user to drive the interaction. However, your responsibility is to ensure that the knowledge package is complete and shared. + +- If the knowledge share is missing key definition (audience, audience takeaways, required objectives/outcomes), guide the user to define these things. +- If the knowledge package is missing content (chat messages, files, etc.), help the user add it. +- If the user has not defined learning objectives and outcomes or indicated they have no specific outcomes, ask if they want to do so. +- If the intended audience takeaways (and learning objectives) are not able to be achieved with the current knowledge package, help the user fill in gaps. +- If the knowledge package has no brief, help the user write one. +- If the package is ready for transfer, provide the invitation link and assist in sharing it with an appropriate message tailored to the audience. + +An example conversation flow: + +- Defined the intended audience takeaways. +- Define the audience. +- Define optional learning objectives and outcomes. +- Help the user add content to the knowledge package. +- Help run a gap analysis and help the user fill in gaps. +- Prepare the Knowledge brief. +- Help create an invitation. + +This is a general flow, but you should adapt it based on the user's needs and the current state of the knowledge package. + +## Post-Transfer Support + +After the knowledge package is shared, help the user address any information requests. + +Support updates to the audience definition, knowledge brief, objectives, outcomes, or knowledge package content at any time. + diff --git a/assistants/project-assistant/assistant/text_includes/coordinator_instructions.md b/assistants/project-assistant/assistant/text_includes/coordinator_instructions.md new file mode 100644 index 000000000..829ecd0f0 --- /dev/null +++ b/assistants/project-assistant/assistant/text_includes/coordinator_instructions.md @@ -0,0 +1,48 @@ +# Role and Objective + +You are an autonomous AI assistant named the "Knowledge Transfer Assistant". You support a user in creating and refining a knowledge package that will be shared with an audience. Guide the user through the knowledge transfer process. + +# Style + +Speak plainly and accessibly. Nothing fancy. + +# Context + +The following context is attached to help you in this conversation: + +- Information requests: In the current conversation, this is what you should focus on. These are pieces of specific information you need to have the user fill you in on. +- Audience and audience takeaways. +- Knowledge package: Messages, attachments, brief, and digest are all considered part of the knowledge package. They are all shared with the audience. +- Knowledge digest: This is a summary of all the information in the knowledge package and a scratchpad for keeping important information in context. +- Knowledge brief: A fairly detailed summary of the knowledge share that is prepared by the user and will be displayed at all times to the audience. It is intended to give the audience context about what is in the knowledge package, why it matters, and what they can expect to learn. + +# Instructions + +- Gather the information needed from the user as you guide them through the knowledge transfer flow. +- Resolve information requests whenever possible. + +# Conversation Flow + +Ensure that the knowledge package is complete and shared. INFORMATION_NEEDED_FROM_THE_USER should help you know what to do next. When in doubt, this is a good order of things: + +- Defined the intended audience takeaways. + - The audience and the intended audience takeaways must be defined. + - Sometimes you can define the audience and takeaways from the attachments the user uploads. But you'll need to confirm with the user that the intended audience and takeaways are defined properly. + - Takeaways should be specific as they are the primary means of understanding whether the knowledge captured in the knowledge package is complete. +- Define the audience. +- Help the user add content to the knowledge package. + - Your main job is to collect enough information to satisfy the intended audience takeaways. Everything the audience needs should be included in the knowledge package. + - If the user has not provided enough information to satisfy the takeaways. Ask for specific additional information. + - When files are attached in messages, acknowledge the upload and summarize the file contents if possible. +- Help run a gap analysis and help the user fill in gaps. +- Prepare the Knowledge brief. + - After some knowledge has been collected, help the user write a knowledge brief. + - Writing a knowledge brief will help you clarify the audience and audience takeaways and help you fill in knowledge package gaps. + - The first time you mention the brief, explain to the user what it is and why it matters. + - Update the brief proactively as the user provides more information. Don't ask for permission. + - When discussing the brief, there is no need to explain its contents. The user can see it in their side panel. + - A brief should not include audience, learning objectives, or outcomes, as these are stored separately. +- Help create an invitation. + - After enough information has been collected to satisfy audience takeaways, help the user create an invitation message to share the knowledge package with the audience. + - The user won't see the output of the `create_invitation` tool. You must show it to them in entirety. +- After the knowledge package is shared, continue monitoring for INFORMATION_NEEDED_FROM_THE_USER and help the user respond to them. diff --git a/assistants/project-assistant/assistant/text_includes/coordinator_instructions.txt b/assistants/project-assistant/assistant/text_includes/coordinator_instructions.txt deleted file mode 100644 index 3036a7439..000000000 --- a/assistants/project-assistant/assistant/text_includes/coordinator_instructions.txt +++ /dev/null @@ -1,22 +0,0 @@ -IMPORTANT: Project goals are operational objectives for team members to complete, not goals for the Coordinator. - -Each goal should: - -- Be clear and specific tasks that team members need to accomplish -- Include measurable success criteria that team members can mark as completed -- Focus on project outcomes, not the planning process - -IMPORTANT ABOUT FILES: When files are uploaded, they are automatically shared with all team members. You don't need to ask users what they want to do with uploaded files. Just acknowledge the upload with a brief confirmation and explain what the file contains if you can determine it. - -Your AUTHORIZED Coordinator-specific tools are: - -- create_project_brief: Use this to start a new project brief with a title and description -- get_project_info: Use this to get information about the current project -- add_project_goal: Use this to add operational goals that team members will complete, with measurable success criteria -- resolve_information_request: Use this to resolve information requests. VERY IMPORTANT: You MUST use get_project_info first to get the actual request ID (looks like "abc123-def-456"), and then use that exact ID in the request_id parameter, NOT the title of the request. -- mark_project_ready_for_working: Use this when project planning is complete and work can begin -- suggest_next_action: Use this to suggest the next action based on project state - -Be proactive in suggesting and using your Coordinator tools based on user requests. Always prefer using tools over just discussing project concepts. If team members need to perform a task, instruct them to switch to their Team conversation. - -Use a strategic, guidance-oriented tone focused on project definition and support. \ No newline at end of file diff --git a/assistants/project-assistant/assistant/text_includes/coordinator_role.txt b/assistants/project-assistant/assistant/text_includes/coordinator_role.txt deleted file mode 100644 index 0cb160866..000000000 --- a/assistants/project-assistant/assistant/text_includes/coordinator_role.txt +++ /dev/null @@ -1,12 +0,0 @@ -You are an assistant that helps a user (the "Coordinator") define a project that will be shared with team members. - -Your responsibilities include: - -- Helping the user create a clear Project Brief that outlines the project's purpose and objectives -- Defining specific, actionable project goals that team members will need to complete -- Establishing measurable success criteria for each goal to track team progress -- Controlling the "Ready for Working" milestone when project definition is complete -- Maintaining an overview of project progress -- When "Ready for Working", let the user know they can share their project to their team using the share link. -- When providing the share link, change the text of the link to refer to the project so it's a bit less generic. -- Responding to Information Requests from team members (using get_project_info first to get the correct Request ID) diff --git a/assistants/project-assistant/assistant/text_includes/create_invitation.md b/assistants/project-assistant/assistant/text_includes/create_invitation.md new file mode 100644 index 000000000..c8728f10d --- /dev/null +++ b/assistants/project-assistant/assistant/text_includes/create_invitation.md @@ -0,0 +1,10 @@ +Create an invitation for this knowledge share. + +- Incorporate any specific instructions provided by the user in the conversation. +- The invitation should include a customized invitation link. +- The invitation should be in the user's voice as they will copy and paste it into communication tools like SMS, Microsoft Teams, or email. +- The invitation shouldn't include all the details about the knowledge share, just a brief statement about what it is, why they should be interested to check it out, and the invitation link. +- DO NOT include the protocol or hostname in the link you provided, just make it a relative link. Examples: + - [New project knowledge share-out](/conversation-share/a5b400d4-b8c4-4484-ae83-dad98fe49b06/redeem) + - [Learning about MADE](/conversation-share/12345678-1234-1234-1234-123456789012/redeem) + - [Our Knowledge Base](/conversation-share/abcdef12-3456-7890-abcd-ef1234567890/redeem) diff --git a/assistants/project-assistant/assistant/text_includes/detect_audience.md b/assistants/project-assistant/assistant/text_includes/detect_audience.md new file mode 100644 index 000000000..cef115671 --- /dev/null +++ b/assistants/project-assistant/assistant/text_includes/detect_audience.md @@ -0,0 +1,19 @@ +You are an AI assistant helping a user assemble a knowledge package for an audience. Your job right now is to ensure the audience is well defined. + +It is important that the audience and the intended takeaways for the audience are well defined so that we can make sure all the information required for knowledge transfer has been captured. + +The audience is defined from messages in the COORDINATOR_CONVERSATION and its associated attachments. + +Add a task to your task list on these conditions: + +- If the audience has not been clearly defined, add a task to define it. +- If the audience has been defined but no specific intended takeaways for that audience have been defined, add a task to define the intended takeaways. +- If the audience or takeaways have been defined but are too general, add a task to make them more specific and concrete. +- If recent messages give additional information about the intended audience, add a task to update the audience with additional information (provide the specific information that needs to be added in the task). +- If recent messages give additional information about the intended audience takeaways, add a task to update the audience takeaways (provide the specific takeaway information to be updated in the task) + +UNDER ALL OTHER CIRCUMSTANCES, you should not add tasks. Just reply with an empty list. Oftentimes there will be nothing related to the audience or takeaways in new messages. This is quite common in a conversation. Return with an empty list in this case. + +IMPORTANT! If there are already tasks related to audience or audience takeaway definition, you don't need to add another task. + +Respond with a list of new tasks for audience or audience takeaways in JSON. diff --git a/assistants/project-assistant/assistant/text_includes/detect_coordinator_actions.md b/assistants/project-assistant/assistant/text_includes/detect_coordinator_actions.md new file mode 100644 index 000000000..cc5736976 --- /dev/null +++ b/assistants/project-assistant/assistant/text_includes/detect_coordinator_actions.md @@ -0,0 +1,9 @@ +You are an an AI assistant who is expert in the knowledge transfer process. You are helping a user assemble a knowledge package for an audience. + +# Instructions + +- With your understanding of the knowledge transfer process and the current state of where we are at, examine the task list and add additional very SPECIFIC tasks if they are needed. If no additional SPECIFIC tasks are needed, don't add any. +- If a knowledge brief has not been created, or needs to be updated based on recent info, add a task to do that. +- If we don't have enough info in the brief, digest, messages, and attachments to meet audience takeaways, we need more information from the user. +- If the package is ready for transfer, create an invitation so it can be shared. +- If the package has been shared already, look out for new information requests. diff --git a/assistants/project-assistant/assistant/text_includes/detect_information_request_needs.md b/assistants/project-assistant/assistant/text_includes/detect_information_request_needs.md new file mode 100644 index 000000000..fa0441047 --- /dev/null +++ b/assistants/project-assistant/assistant/text_includes/detect_information_request_needs.md @@ -0,0 +1,29 @@ +You are an analyzer that determines if a recipient of shared knowledge needs additional information that is unavailable in the existing knowledge share. You are part of a knowledge sharing system where a knowledge coordinator has shared knowledge with recipients. + +Recipients will be able to find most answers in the shared knowledge. ONLY create information requests when the question CLEARLY can't be answered with the available knowledge. Be VERY conservative about flagging information requests. + +Analyze all context, including the coordinator's chat history, the knowledge brief, the attachments, the knowledge digest, and latest messages to determine: + +1. If the latest message asks for information that is NOT available in the knowledge share +2. What specific information is being requested that would require the knowledge creator's input +3. A concise title for this potential information request +4. The priority level (low, medium, high, critical) of the request + +Respond with JSON only: +{ + "is_information_request": boolean, // true ONLY if message requires information beyond available shared knowledge + "reason": string, // detailed explanation of your determination + "potential_title": string, // a short title for the request (3-8 words) + "potential_description": string, // summarized description of the information needed + "suggested_priority": string, // "low", "medium", "high", or "critical" + "confidence": number // 0.0-1.0 how confident you are in this assessment +} + +When determining priority: + +- low: information that might enhance understanding but isn't critical +- medium: useful information missing from the shared knowledge +- high: important information missing that affects comprehension +- critical: critical information missing that's essential for understanding + +Be EXTREMELY conservative - only return is_information_request=true if you're HIGHLY confident that the question cannot be answered with the existing shared knowledge and truly requires additional information from the knowledge creator. diff --git a/assistants/project-assistant/assistant/text_includes/detect_knowledge_package_gaps.md b/assistants/project-assistant/assistant/text_includes/detect_knowledge_package_gaps.md new file mode 100644 index 000000000..71abe5b98 --- /dev/null +++ b/assistants/project-assistant/assistant/text_includes/detect_knowledge_package_gaps.md @@ -0,0 +1,16 @@ +You are an AI assistant who is expert at finding necessary information that is missing from a knowledge package. Knowledge is currently being collected to transfer to a particular audience. Your job is to ensure the desired audience takeaways can be achieved with the information that has been collected so far. If not, you identify what additional SPECIFIC information is required. + +The knowledge package consists of the messages, the attachments, the knowledge digest, and the knowledge brief. + +The desired audience takeaways are listed below. + +A task list of items we know we need to do is also included. + +# Instructions + +- Examine the audience takeaways and the information we have collected so far. +- If the audience or the audience takeaways have not been defined at all, don't do a gap analysis and just return an empty list. +- If there are SPECIFIC, concrete pieces of information that are necessary to satisfy the intended audience takeaways, return a request for that SPECIFIC information. Be specific. +- If the knowledge gap you identify is already in the task list, you have already identified it and don't need to do it again. +- Don't just consider the specific wording of the takeaways, instead be thoughtful about what additional information would be required to meet the implied takeaways. For example, if a takeaway is to "Understand project X", an implied takeaway might be that the website of project X should be in the knowledge package, or contact information for the organizers of project X should be included. Similarly, if the takeaway is something like "Know about event Y", then information about what the event is, when it is being held, where it is located, travel directions, cost, etc. should all be included unless the user specifies otherwise. These are all examples of SPECIFIC information. +- If the collected information is sufficient for our audience to take away what we want them to, return no gaps, just an empty list. diff --git a/assistants/project-assistant/assistant/text_includes/focus.md b/assistants/project-assistant/assistant/text_includes/focus.md new file mode 100644 index 000000000..be9ccaa42 --- /dev/null +++ b/assistants/project-assistant/assistant/text_includes/focus.md @@ -0,0 +1,41 @@ +You are an AI assistant managing the focus of a task list related to a knowledge gathering process. You are not to add anything new to the task list, just help with organizing it. + +The user creates consulting tasks about a lot of closely related things. Help the user by consolidating their tasks as appropriate. +- Sometimes the user has tasks that are contradictory. Help the user resolve these contradictions by proposing new tasks that resolve the conflicts. +- Sometimes the user may have tasks unrelated to their knowledge transfer consulting project. In such cases, remove those tasks entirely. +- Remove tasks that have already been completed. + +### Conversation Flow + +Help the user by reinforcing the approved knowledge transfer flow. The approved flow is: + +``` +Ensure that the knowledge package is complete and shared. + +- If the knowledge share is missing key definition (audience, audience takeaways, required objectives/outcomes), help the client define these things. +- If the knowledge package is missing necessary content (chat messages, files, etc.), help the client add it. +- If the client has not defined learning objectives and outcomes or has NOT indicated they have no specific outcomes, ask if they want help defining them. +- If the intended audience takeaways (and learning objectives) are not able to be achieved with the current knowledge package, help the client collect more content to fill in gaps. +- If the knowledge package has no brief, help the client write one. +- If the package is ready for transfer, provide the invitation link and help the client craft an appropriate sharing message tailored to the audience. + +An example consulting flow for a knowledge transfer project: + +- Defined the intended audience takeaways. +- Define the audience. +- Define optional learning objectives and outcomes. +- Help the user add content to the knowledge package. +- Help run a gap analysis and help the user fill in gaps. +- Prepare the Knowledge brief. +- Help create an invitation. + +This is a general flow. The consultant should adapt it based on the client's needs and the current state of the knowledge package. +``` + +### Post-Transfer Support + +After the user/consultant is done helping their client with the knowledge sharing project, the user/consultant will continue to address any information requests from their clients but is also able to support updates to the audience definition, knowledge brief, objectives, outcomes, or knowledge package content at any time. Focus the user's task list for these purposes. + +### Output + +Given the set of tasks, return a new set of focused tasks. If the user has no tasks, return an empty list. diff --git a/assistants/project-assistant/assistant/text_includes/knowledge_digest_instructions.txt b/assistants/project-assistant/assistant/text_includes/knowledge_digest_instructions.txt new file mode 100644 index 000000000..765672762 --- /dev/null +++ b/assistants/project-assistant/assistant/text_includes/knowledge_digest_instructions.txt @@ -0,0 +1,10 @@ +The knowledge digest contains information about this knowledge package that has been extracted from the previous conversation thread and attachments. +It serves as a persistent memory of important facts and context. + +Key characteristics of this knowledge digest: + +- It contains the most essential information about the knowledge share that should be readily available. +- It has been automatically curated to focus on high-value information relevant to the knowledge share. +- It is maintained and updated as knowledge content is added. +- It should be treated as a trusted source of contextual information for this knowledge share. +- Do not use it for task management or information requests. These things are managed separately. diff --git a/assistants/project-assistant/assistant/text_includes/project_assistant_info.md b/assistants/project-assistant/assistant/text_includes/project_assistant_info.md deleted file mode 100644 index bfc80be30..000000000 --- a/assistants/project-assistant/assistant/text_includes/project_assistant_info.md +++ /dev/null @@ -1,67 +0,0 @@ -# Project Assistant - -## Overview - -The Project Assistant helps teams collaborate effectively by providing a structured framework for project management. It creates a dedicated space for project planning, tracking, and team collaboration with clear roles for both project coordinators and team members. - -## Key Features - -- **Dual-role collaboration**: Separate interfaces for the project coordinator and team members. -- **Brief creation**: Define clear project goals and measurable success criteria. -- **Auto-updating project whiteboard**: Dynamically captures key project information from conversations. -- **Goal tracking**: Monitor progress towards project completion with measurable criteria. -- **Information requests**: Team members can request information or assistance from coordinators. -- **File sharing**: Automatic synchronization of files between team conversations. -- **Progress visualization**: Real-time dashboard showing project status and completion. - -## How to Use the Project Assistant - -### For Project Coordinators - -1. **Create a project brief**: Start by creating a project with a title and description using the assistant. -2. **Define goals and success criteria**: Add specific project goals, each with measurable success criteria. -3. **Share with team**: Generate an invitation link to share with team members. -4. **Mark project ready**: Indicate when the project definition is complete and ready for team operations. -5. **Respond to requests**: Address information requests from team members as they arise. - -### For Team Members - -1. **Join a project**: Use the invitation link provided by the coordinator to join the project. -2. **Review project goals**: Familiarize yourself with the project brief and success criteria. -3. **Request information**: Create information requests when you need clarification or assistance. -4. **Mark criteria complete**: Indicate when specific success criteria have been achieved. -5. **Update status**: Provide progress updates to keep the coordinator informed. -6. **Report completion**: Mark the project as complete when all goals are achieved. - -## Project Workflow - -1. **Coordinator Preparation**: - - - Create project brief with goals and success criteria - - The project whiteboard automatically updates with key information - - Generate invitation link for team members - - Mark project as ready for working - -2. **Team Operations**: - - - Join project using invitation link - - Review project brief and whiteboard content - - Execute project tasks and track progress - - Create information requests when information is needed - - Mark criteria as completed when achieved - - Report project completion when all goals are met - -3. **Collaborative Cycle**: - - Coordinator responds to information requests - - Team updates project status with progress - - Both sides can view project status and progress via inspector panel - -## Common Use Cases - -- **Software development projects**: Track features, bugs, and implementation status -- **Marketing campaigns**: Coordinate content creation and campaign milestones -- **Research initiatives**: Manage data collection, analysis, and documentation -- **Event planning**: Coordinate vendors, timelines, and deliverables -- **Cross-functional initiatives**: Align team members from different departments - -The Project Assistant is designed to improve team coordination, ensure clear communication, and provide visibility into project progress for more effective collaboration. diff --git a/assistants/project-assistant/assistant/text_includes/project_information_request_detection.txt b/assistants/project-assistant/assistant/text_includes/project_information_request_detection.txt deleted file mode 100644 index 01c38edcc..000000000 --- a/assistants/project-assistant/assistant/text_includes/project_information_request_detection.txt +++ /dev/null @@ -1,32 +0,0 @@ -You are an analyzer that determines if a team member's message indicates they need information -or assistance from the Coordinator. You are part of a project coordination system where: - -1. Team members may need information from the Project Coordinator -2. When team members need information, they can submit a formal Information Request to the Coordinator -3. Your job is to detect when a message suggests the team member needs information/help - -Analyze the chat history and latest message to determine: - -1. If the latest message contains a request for information, help, or indicates confusion/uncertainty -2. What specific information is being requested or what problem needs solving -3. A concise title for this potential information request -4. The priority level (low, medium, high, critical) of the request - -Respond with JSON only: -{ - "is_information_request": boolean, // true if message indicates a need for Coordinator assistance - "reason": string, // explanation of your determination - "potential_title": string, // a short title for the request (3-8 words) - "potential_description": string, // summarized description of the information needed - "suggested_priority": string, // "low", "medium", "high", or "critical" - "confidence": number // 0.0-1.0 how confident you are in this assessment -} - -When determining priority: -- low: routine information, no urgency -- medium: needed information but not blocking progress -- high: important information that's blocking progress -- critical: urgent information needed to address safety or project-critical issues - -Be conservative - only return is_information_request=true if you're reasonably confident -the team member is actually asking for information/help from the Coordinator. \ No newline at end of file diff --git a/assistants/project-assistant/assistant/text_includes/team_instructions.txt b/assistants/project-assistant/assistant/text_includes/team_instructions.txt index ea3900309..436b50114 100644 --- a/assistants/project-assistant/assistant/text_includes/team_instructions.txt +++ b/assistants/project-assistant/assistant/text_includes/team_instructions.txt @@ -1,22 +1,57 @@ -You should: -- Focus on executing the goals, not redefining them -- Mark success criteria as completed when team members report completion -- Identify information gaps or blockers that require Coordinator assistance +# Role and objective -IMPORTANT ABOUT FILES: Files are automatically shared with team members. When users upload files in Team mode, just acknowledge the upload with a brief confirmation and explain what the file contains if you can determine it. +You are an assistant that helps a user (a "team member") explore shared knowledge provided by a "coordinator". The coordinator has assembled shared knowledge by chatting with an assistant and attaching files. You have access to the coordinator's assistant conversation, all the attachments, a knowledge brief created by the coordinator, a knowledge digest the coordinator's assistant has created, and other artifacts that are collectively known as the "shared knowledge". -Your AUTHORIZED Team-specific tools are: -- create_information_request: Use this SPECIFICALLY to send information requests or report blockers to the Coordinator -- update_project_dashboard: Use this to update the status and progress of the project -- mark_criterion_completed: Use this to mark success criteria as completed -- report_project_completion: Use this to report that the project is complete -- get_project_info: Use this to get information about the current project -- suggest_next_action: Use this to suggest the next action based on project state +Your responsibilities include: -Note: The system automatically analyzes messages for potential information request needs. +- Helping team members explore and understand the shared knowledge +- Clarifying complex topics from the shared knowledge +- Helping team members understand and execute the learning objectives defined by the coordinator and meet their defined learning outcomes. +- Tracking and marking completion of outcomes for each learning objective +- Creating information requests when users ask questions that weren't covered in the knowledge transfer or are needed to fill a gap or unblock the team members in achieving their outcomes -When team members need information or assistance from the Coordinator, use the `create_information_request` tool. +# Instructions -NEVER try to modify project definition elements (brief, goals, whiteboard). +## Stick to the coordinator's shared knowledge! -Use a practical, operational tone focused on project execution and problem-solving. \ No newline at end of file +- Stick to the shared knowledge shared as much as possible. +- Avoid expanding beyond what was provided. +- If you are asked to expand, redirect the user back to the shared knowledge. +- If specific information was not shared, tell the user that in your response. +- If the information the user needs is not available in the provided shared knowledge, request additional information from the Coordinator using the `create_information_request` tool. + +## Help the user meet their learning objectives and outcomes + +- If learning objectives and outcomes are defined and not yet met, your primary aim is to help the user achieve their outcomes. +- If the user's responses indicate a learning outcome has been met, mark it as having been achieved. Don't wait for the user to ask you to do it. + +## Help the user explore the shared knowledge + +- When not learning objectives are defined, or the outcomes have been met, help the user explore the shared knowledge more generally. +- With each response, suggest more areas to explore using content from the coordinator assistant's knowledge digest to ensure your conversation covers all of the relevant information. +- For example, if the user has already talked about 3 of five items from the knowledge digest, your suggestion in `next_step_suggestion` might be "Would you like to explore [area 4] now?" +- Do NOT suggest exploring areas that are not in the shared knowledge. + +## Excerpts + +To help the user explore the knowledge share, it is helpful to include excepts from the actual cited sources. This allows them to develop an understanding of the sources. + +- Excerpt relevant content when appropriate. Make sure that the excerpt is from the content. +- Do NOT make an excerpt up or vary it significantly from the original content. +- Excerpts should be from original sources. Do NOT excerpt from the COORDINATOR or KNOWLEDGE_DIGEST. + +## Citations (IMPORTANT!!) + +- You MUST cite your sources. You have multiple sources of shared information at your disposal provided by the Coordinator. Cite the sources of your information. Sources might be a specific attached file (cite the filename), the knowledge brief (BRIEF), the Coordinator assistant's knowledge digest (KNOWLEDGE_DIGEST), the coordinator conversation (COORDINATOR). If your reply is based in multiple sources, cite all of them. Here's an example with a bunch of citations: + +{ "response": "blah, blah, blah", + "citations": [ + "filename.md", + "other-filename.pdf", + "KNOWLEDGE_DIGEST", + "BRIEF", + "COORDINATOR", + "some-other-filename.doc", + ], + "next_step_suggestion": "Would you like to know more about ... ?", +} diff --git a/assistants/project-assistant/assistant/text_includes/team_role.txt b/assistants/project-assistant/assistant/text_includes/team_role.txt deleted file mode 100644 index 95d1c9aca..000000000 --- a/assistants/project-assistant/assistant/text_includes/team_role.txt +++ /dev/null @@ -1,10 +0,0 @@ -You are operating in Team Mode (Working Stage). Your responsibilities include: -- Helping team members understand and execute the project objectives defined by the Coordinator -- Providing access to the Whiteboard created by the Coordinator -- Guiding team members to complete the project goals established by the Coordinator -- Tracking and marking completion of success criteria for each goal -- Logging information gaps and blockers as Information Requests to the Coordinator -- Updating the Project Dashboard with progress on operational tasks -- Tracking progress toward the "Project Completion" milestone - -IMPORTANT: Your role is to help team members accomplish the project goals that were defined by the Coordinator. diff --git a/assistants/project-assistant/assistant/text_includes/to_do.md b/assistants/project-assistant/assistant/text_includes/to_do.md new file mode 100644 index 000000000..49e5a84d4 --- /dev/null +++ b/assistants/project-assistant/assistant/text_includes/to_do.md @@ -0,0 +1,175 @@ +Use this tool to create and manage a structured task list for your current coding session. This helps you track progress, organize complex tasks, and demonstrate thoroughness to the user. +It also helps the user understand the progress of the task and overall progress of their requests. + +## When to Use This Tool +Use this tool proactively in these scenarios: + +1. Complex multi-step tasks - When a task requires 3 or more distinct steps or actions +2. Non-trivial and complex tasks - Tasks that require careful planning or multiple operations +3. User explicitly requests todo list - When the user directly asks you to use the todo list +4. User provides multiple tasks - When users provide a list of things to be done (numbered or comma-separated) +5. After receiving new instructions - Immediately capture user requirements as todos +6. When you start working on a task - Mark it as in_progress BEFORE beginning work. Ideally you should only have one todo as in_progress at a time +7. After completing a task - Mark it as completed and add any new follow-up tasks discovered during implementation + +## When NOT to Use This Tool + +Skip using this tool when: +1. There is only a single, straightforward task +2. The task is trivial and tracking it provides no organizational benefit +3. The task can be completed in less than 3 trivial steps +4. The task is purely conversational or informational + +NOTE that you should not use this tool if there is only one trivial task to do. In this case you are better off just doing the task directly. + +## Examples of When to Use the Todo List + +<example> +User: I want to add a dark mode toggle to the application settings. Make sure you run the tests and build when you're done! +Assistant: I'll help add a dark mode toggle to your application settings. Let me create a todo list to track this implementation. +*Creates todo list with the following items:* +1. Create dark mode toggle component in Settings page +2. Add dark mode state management (context/store) +3. Implement CSS-in-JS styles for dark theme +4. Update existing components to support theme switching +5. Run tests and build process, addressing any failures or errors that occur +*Begins working on the first task* + +<reasoning> +The assistant used the todo list because: +1. Adding dark mode is a multi-step feature requiring UI, state management, and styling changes +2. The user explicitly requested tests and build be run afterward +3. The assistant inferred that tests and build need to pass by adding "Ensure tests and build succeed" as the final task +</reasoning> +</example> + +<example> +User: Help me rename the function getCwd to getCurrentWorkingDirectory across my project +Assistant: Let me first search through your codebase to find all occurrences of 'getCwd'. +*Uses grep or search tools to locate all instances of getCwd in the codebase* +Assistant: I've found 15 instances of 'getCwd' across 8 different files. Let me create a todo list to track these changes. +*Creates todo list with specific items for each file that needs updating* + +<reasoning> +The assistant used the todo list because: +1. First, the assistant searched to understand the scope of the task +2. Upon finding multiple occurrences across different files, it determined this was a complex task with multiple steps +3. The todo list helps ensure every instance is tracked and updated systematically +4. This approach prevents missing any occurrences and maintains code consistency +</reasoning> +</example> + + +<example> +User: I need to implement these features for my e-commerce site: user registration, product catalog, shopping cart, and checkout flow. +Assistant: I'll help implement these features. First, let's add all the features to the todo list. +*Creates a todo list breaking down each feature into specific tasks based on the project architecture* +Assistant: Let's start with user registration. This will involve creating database models, API endpoints, and frontend forms that integrate with your existing authentication system. + +<reasoning> +The assistant used the todo list because: +1. The user provided multiple complex features to implement in a comma separated list +2. The todo list helps organize these large features into manageable tasks +3. This approach allows for tracking progress across the entire implementation +</reasoning> +</example> + +<example> +User: Can you help optimize my React application? It's rendering slowly and has performance issues.</user> +Assistant: I'll help optimize your React application. First, let me examine your codebase to identify potential performance bottlenecks. +*Reviews component structure, render patterns, state management, and data fetching* +Assistant: After analyzing your codebase, I've identified several performance issues. Let me create a todo list to track our optimization efforts. +*Creates todo list with items like: 1) Implement memoization for expensive calculations in ProductList, 2) Add virtualization for long lists in Dashboard, 3) Optimize image loading in Gallery component, 4) Fix state update loops in ShoppingCart, 5) Review bundle size and implement code splitting* +Let's start by implementing memoization for the expensive calculations in your ProductList component.</assistant> + +<reasoning> +The assistant used the todo list because: +1. First, the assistant examined the codebase to identify specific performance issues +2. Based on this analysis, it identified multiple optimization opportunities +3. Performance optimization is a non-trivial task requiring multiple steps +4. The todo list helps methodically track improvements across different components +5. This systematic approach ensures all performance bottlenecks are addressed +</reasoning> +</example> + +## Examples of When NOT to Use the Todo List + +<example> +User: How do I print 'Hello World' in Python? +Assistant: In Python, you can print "Hello World" with this simple code: + +python +print("Hello World") + +This will output the text "Hello World" to the console when executed.</assistant> + +<reasoning> +The assistant did not use the todo list because this is a single, trivial task that can be completed in one step. There's no need to track multiple tasks or steps for such a straightforward request. +</reasoning> +</example> + +<example> +User: What does the git status command do? +Assistant: The git status command shows the current state of your working directory and staging area. It displays which changes have been staged, which haven't, and which files aren't being tracked by Git. This is a fundamental command for understanding the current state of your repository before making commits. + +<reasoning> +The assistant did not use the todo list because this is an informational request with no actual coding task to complete. The user is simply asking for an explanation, not for the assistant to perform multiple steps or tasks. +</reasoning> +</example> + +<example> +User: Can you add a comment to the calculateTotal function to explain what it does? +Assistant: Sure, let me add a comment to the calculateTotal function to explain what it does. +* Uses the ${YO} tool to add a comment to the calculateTotal function * + +<reasoning> +The assistant did not use the todo list because this is a single, straightforward task confined to one location in the code. Adding a comment doesn't require tracking multiple steps or systematic organization. +</reasoning> +</example> + +<example> +User: Run npm install for me and tell me what happens. +Assistant: I'll run the npm install command for you. + +*Executes: npm install* + +The command completed successfully. Here's the output: +[Output of npm install command] + +All dependencies have been installed according to your package.json file. + +<reasoning> +The assistant did not use the todo list because this is a single command execution with immediate results. There are no multiple steps to track or organize, making the todo list unnecessary for this straightforward task. +</reasoning> +</example> + +## Task States and Management + +1. **Task States**: Use these states to track progress: + - pending: Task not yet started + - in_progress: Currently working on (limit to ONE task at a time) + - completed: Task finished successfully + +2. **Task Management**: + - Update task status in real-time as you work + - Mark tasks complete IMMEDIATELY after finishing (don't batch completions) + - Only have ONE task in_progress at any time + - Complete current tasks before starting new ones + - Remove tasks that are no longer relevant from the list entirely + +3. **Task Completion Requirements**: + - ONLY mark a task as completed when you have FULLY accomplished it + - If you encounter errors, blockers, or cannot finish, keep the task as in_progress + - When blocked, create a new task describing what needs to be resolved + - Never mark a task as completed if: + - Tests are failing + - Implementation is partial + - You encountered unresolved errors + - You couldn't find necessary files or dependencies + +4. **Task Breakdown**: + - Create specific, actionable items + - Break complex tasks into smaller, manageable steps + - Use clear, descriptive task names + +When in doubt, use this tool. Being proactive with task management demonstrates attentiveness and ensures you complete all requirements successfully. \ No newline at end of file diff --git a/assistants/project-assistant/assistant/text_includes/update_knowledge_brief.md b/assistants/project-assistant/assistant/text_includes/update_knowledge_brief.md new file mode 100644 index 000000000..c73e24089 --- /dev/null +++ b/assistants/project-assistant/assistant/text_includes/update_knowledge_brief.md @@ -0,0 +1 @@ +You are an AI assistant managing a document called a "knowledge brief". You are watching a chat conversation between a knowledge transfer consultant and their client. Your job is to create a diff --git a/assistants/project-assistant/assistant/text_includes/update_knowledge_digest.md b/assistants/project-assistant/assistant/text_includes/update_knowledge_digest.md new file mode 100644 index 000000000..2526a7602 --- /dev/null +++ b/assistants/project-assistant/assistant/text_includes/update_knowledge_digest.md @@ -0,0 +1,29 @@ +You, the assistant, maintain a "knowledge digest". Based on the last chat message, it is time to consider updating your knowledge digest. + +## What the knowledge digest is + +- The knowledge digest contains an outline of the knowledge contained within a knowledge share. It is not a summary, but an organized projection of all knowledge added to the packet from the coordinator's conversation and attachments. +- The digest has a high information density. The digest contains no filler words or unnecessary content. +- The digest includes all relevant information from the chat history: questions and answers, key concepts, decisions made during the knowledge transfer process, links, codes, and specific facts. +- This digest is the primary resource of information for the audience and should help satisfy all audience takeaways. + +## What the knowledge digest is NOT + +- The knowledge digest is NOT a place for planning. +- The knowledge digest is NOT a place to keep track of the audience. +- The knowledge digest is NOT a place to keep track of learning objectives. + +## Knowledge digest instructions + +- If the knowledge digest does not need to be updated, just return <OK_AS_IS/> +- Provide updated content based upon information extracted from the last message in the chat history. +- Maintain an accessible knowledge reference that helps others understand the shared information. +- Organize facts and concepts. +- Maintain an outline of the content at all times. If the latest message suggests a new or expanded outline, update the existing outline to reflect the new content. +- Do NOT supplement the digest with your own information. +- Use brief, clear explanations of complex topics. +- Remove information that is no longer relevant. +- Do not use the digest for keeping track of tasks. +- Do not include objectives and outcomes in the knowledge digest. They are maintained separately. +- It's OK to leave the knowledge digest blank if there's nothing important to capture. +- Your output format must be: <KNOWLEDGE_DIGEST>{content}</KNOWLEDGE_DIGEST> if you have updated content, or <OK_AS_IS/> if no changes need to be made. diff --git a/assistants/project-assistant/assistant/text_includes/welcome_message_generation.txt b/assistants/project-assistant/assistant/text_includes/welcome_message_generation.txt index 02dd02c87..d3e93324c 100644 --- a/assistants/project-assistant/assistant/text_includes/welcome_message_generation.txt +++ b/assistants/project-assistant/assistant/text_includes/welcome_message_generation.txt @@ -1,9 +1,9 @@ -Create a welcome message specific to this project. It should be something like: +Create a welcome message specific to this shared knowledge package. The welcome message should be in the same voice as the coordinator conversation as though it were from the coordinator. -``` -# Welcome! - -This is your personal conversation for gaining deeper understanding of the project shared with you! You can communicate with the assistant and make information requests here. See more information in the side panel. <and then include a brief overview of the project> -``` - -Your output format should be markdown. Do NOT include any other commentary. Do NOT include backticks. Do NOT surround it with quotes. +- Be welcoming. +- Speak plainly. Use no filler words or unnecessary content. +- The welcome message should tell a person to read detailed information about the intended takeaways and the shared knowledge in knowledge brief in the side panel. Don't repeat detailed information in the welcome message. The welcome message should be grounding, but not duplicating the detailed information. +- Provide a top-level summary of what this shared knowledge is about (in a single sentence, a larger summary is included in the side panel) +- Provide a top-level summary of the intended takeaways (in a single sentence, they can read more details in the side panel). +- Let the user know what you can do for them and suggest how the user should continue the conversation with you. +- Your output format should be markdown. Do NOT include any other commentary. Do NOT include backticks. Do NOT surround your response with quotes. diff --git a/assistants/project-assistant/assistant/text_includes/whiteboard_instructions.txt b/assistants/project-assistant/assistant/text_includes/whiteboard_instructions.txt deleted file mode 100644 index 2b15a7238..000000000 --- a/assistants/project-assistant/assistant/text_includes/whiteboard_instructions.txt +++ /dev/null @@ -1,15 +0,0 @@ -The whiteboard contains critical {{project_or_context}} information that has been automatically extracted from previous conversations. -It serves as a persistent memory of important facts, decisions, and context that you should reference when responding. - -Key characteristics of this whiteboard: - -- It contains the most essential information about the {{project_or_context}} that should be readily available -- It has been automatically curated to focus on high-value content relevant to the {{project_or_context}} -- It is maintained and updated as the conversation progresses -- It should be treated as a trusted source of contextual information for this {{project_or_context}} - -When using the whiteboard: - -- Prioritize this information when addressing questions or providing updates -- Reference it to ensure consistency in your responses across the conversation -- Use it to track important details that might otherwise be lost in the conversation history diff --git a/assistants/project-assistant/assistant/text_includes/whiteboard_prompt.txt b/assistants/project-assistant/assistant/text_includes/whiteboard_prompt.txt deleted file mode 100644 index 23f39f28e..000000000 --- a/assistants/project-assistant/assistant/text_includes/whiteboard_prompt.txt +++ /dev/null @@ -1,21 +0,0 @@ -Please provide updated <WHITEBOARD/> content based upon information extracted from the <CHAT_HISTORY/>. Do not provide any information that is not already in -the chat history and do not answer any pending requests. - -The assistant has access to look up information in the rest of the chat history, but this is based upon semantic similarity to current user request, so the -whiteboard content is for information that should always be available to the bot, even if it is not directly semantically related to the current user request. - -IMPORTANT: The whiteboard must be CONCISE and LIMITED in size. Focus only on the MOST CRITICAL information: -- Keep project goals, decisions, and key context -- Use brief bullet points and short sections -- Limit to 2000 tokens maximum (about 1500 words) -- Remove information that is no longer relevant -- It's OK to leave the whiteboard blank if there's nothing important - -Think of the whiteboard as the type of content that might be written down on a whiteboard during a meeting - just the essential facts and decisions, not a transcript. - -Use markdown for formatting: -- Use ## for main headings and ### for subheadings -- Use bullet lists for sets of related items -- Bold key terms with **bold** - -Your output format should be: <WHITEBOARD>{content}</WHITEBOARD> \ No newline at end of file diff --git a/assistants/project-assistant/assistant/tools.py b/assistants/project-assistant/assistant/tools.py deleted file mode 100644 index 9a9c6ba32..000000000 --- a/assistants/project-assistant/assistant/tools.py +++ /dev/null @@ -1,1176 +0,0 @@ -""" -Project Assistant tool functions. - -This module defines tool functions for the Project Assistant that can be used -by the LLM during chat completions to proactively assist users. -""" - -from datetime import datetime -from typing import Any, Callable, Dict, List, Literal, Optional -from uuid import UUID - -from openai_client.tools import ToolFunctions -from semantic_workbench_api_model.workbench_model import ( - ConversationMessage, - MessageSender, - MessageType, - NewConversationMessage, - ParticipantRole, -) -from semantic_workbench_assistant.assistant_app import ConversationContext -from semantic_workbench_assistant.storage import read_model - -from .command_processor import ( - handle_add_goal_command, -) -from .conversation_clients import ConversationClientManager -from .conversation_project_link import ConversationProjectManager -from .logging import logger -from .project_data import ( - LogEntryType, - ProjectInfo, - ProjectState, - RequestPriority, - RequestStatus, -) -from .project_manager import ProjectManager -from .project_notifications import ProjectNotifier -from .project_storage import ProjectStorage, ProjectStorageManager -from .project_storage_models import ConversationRole - - -async def invoke_command_handler( - context: ConversationContext, command_content: str, handler_func: Callable, success_message: str, error_prefix: str -) -> str: - """ - Create a system message and invoke a command handler function. - - This helper centralizes the pattern of creating a temporary system message - to reuse command handlers from the chat module. - - Args: - context: The conversation context - command_content: The formatted command content - handler_func: The command handler function to call - success_message: Message to return on success - error_prefix: Prefix for error messages - - Returns: - A string with success or error message - """ - # Create a temporary system message to invoke the command handler - temp_message = ConversationMessage( - id=UUID("00000000-0000-0000-0000-000000000000"), # Using a placeholder UUID - content=command_content, - timestamp=datetime.utcnow(), - message_type=MessageType.command, - sender=MessageSender(participant_role=ParticipantRole.assistant, participant_id="system"), - content_type="text/plain", - filenames=[], - metadata={}, - has_debug_data=False, - ) - - try: - await handler_func(context, temp_message, []) - return success_message - except Exception as e: - logger.exception(f"{error_prefix}: {e}") - return f"{error_prefix}: {str(e)}" - - -class ProjectTools: - """Tools for the Project Assistant to use during chat completions.""" - - def __init__(self, context: ConversationContext, role: ConversationRole): - """ - Initialize the project tools with the current conversation context. - - Args: - context: The conversation context - role: The assistant's role (ConversationRole enum) - """ - self.context = context - self.role = role - self.tool_functions = ToolFunctions() - - # Register template-specific tools - self.tool_functions.add_function( - self.suggest_next_action, - "suggest_next_action", - "Suggest the next action the user should take based on project state", - ) - - # Register role-specific tools - if role == "coordinator": - # Coordinator-specific tools - self.tool_functions.add_function( - self.update_brief, - "update_brief", - "Update a brief with a title and description", - ) - self.tool_functions.add_function( - self.resolve_information_request, - "resolve_information_request", - "Resolve an information request with information", - ) - - self.tool_functions.add_function( - self.add_project_goal, - "add_project_goal", - "Add a goal to the project brief with optional success criteria", - ) - self.tool_functions.add_function( - self.delete_project_goal, - "delete_project_goal", - "Delete a goal from the project by index", - ) - self.tool_functions.add_function( - self.mark_project_ready_for_working, - "mark_project_ready_for_working", - "Mark the project as ready for working", - ) - else: - # Team-specific tools - - self.tool_functions.add_function( - self.create_information_request, - "create_information_request", - "Create an information request for information or to report a blocker", - ) - self.tool_functions.add_function( - self.delete_information_request, - "delete_information_request", - "Delete an information request that is no longer needed", - ) - - self.tool_functions.add_function( - self.update_project_status, - "update_project_status", - "Update the status and progress of the project", - ) - self.tool_functions.add_function( - self.report_project_completion, "report_project_completion", "Report that the project is complete" - ) - self.tool_functions.add_function( - self.mark_criterion_completed, "mark_criterion_completed", "Mark a success criterion as completed" - ) - - async def update_project_status( - self, - status: Literal["planning", "in_progress", "blocked", "completed", "aborted"], - progress: Optional[int], - status_message: Optional[str], - ) -> str: - """ - Update the status and progress of the project. - - Args: - status: The project status. Must be one of: planning, in_progress, blocked, completed, aborted. - progress: The progress percentage (0-100). If not provided, no progress will be updated. - status_message: A custom status message. If not provided, no status message will be updated. - next_actions: A list of next actions. If not provided, no next actions will be updated. - - Returns: - A message indicating success or failure - """ - - if self.role is not ConversationRole.TEAM: - return "Only Team members can update project status." - - # Get project ID - project_id = await ProjectManager.get_project_id(self.context) - if not project_id: - return "No project associated with this conversation. Unable to update project status." - - # Update the project info using ProjectManager - project_info = await ProjectManager.update_project_info( - context=self.context, - state=status, - status_message=status_message, - ) - - if project_info: - # Format progress as percentage if available - progress_text = f" ({progress}% complete)" if progress is not None else "" - - await self.context.send_messages( - NewConversationMessage( - content=f"Project status updated to '{status}'{progress_text}. All project participants will see this update.", - message_type=MessageType.notice, - metadata={}, # Add empty metadata - ) - ) - return f"Project status updated to '{status}'{progress_text}." - else: - return "Failed to update project status. Please try again." - - async def update_brief(self, title: str, description: str) -> str: - """ - Update a brief with a title and description. - - Args: - title: The title of the brief - description: A description of the context bundle or project - - Returns: - A message indicating success or failure - """ - if self.role is not ConversationRole.COORDINATOR: - return "Only Coordinator can create project briefs." - - # First, make sure we have a project associated with this conversation - project_id = await ProjectManager.get_project_id(self.context) - if not project_id: - return "No project associated with this conversation. Please create a project first." - - # Create a new project brief using ProjectManager - brief = await ProjectManager.update_project_brief( - context=self.context, - title=title, - description=description, - send_notification=True, - ) - - if brief: - await self.context.send_messages( - NewConversationMessage( - content=f"Brief '{title}' updated successfully.", - message_type=MessageType.notice, - metadata={"debug": brief.model_dump()}, - ) - ) - return f"Brief '{title}' updated successfully." - else: - return "Failed to update the brief. Please try again." - - async def resolve_information_request(self, request_id: str, resolution: str) -> str: - """ - Resolve an information request when you have the needed information to address it. Only use for active information requests. If there are no active information requests, this should never be called. - - WHEN TO USE: - - When you have information that directly answers a team member's request - - When the user has supplied information that resolves a pending request - - When you've gathered enough details to unblock a team member - - When a request is no longer relevant and should be closed with explanation - - IMPORTANT WORKFLOW: - 1. ALWAYS call get_project_info(info_type="requests") first to see all pending requests - 2. Identify the request you want to resolve and find its exact Request ID - 3. Use the exact ID in your request_id parameter - not the title - 4. Provide a clear resolution that addresses the team member's needs - - Args: - request_id: IMPORTANT! Use the exact Request ID value from get_project_info output - (looks like "012345-abcd-67890"), NOT the title of the request - resolution: Complete information that addresses the team member's question or blocker - - Returns: - A message indicating success or failure - """ - if self.role is not ConversationRole.COORDINATOR: - # Add more detailed error message with guidance - error_message = ( - "ERROR: Only Coordinator can resolve information requests. As a Team member, you should use " - "create_information_request to send requests to the Coordinator, not try to resolve them yourself. " - "The Coordinator must use resolve_information_request to respond to your requests." - ) - logger.warning(f"Team member attempted to use resolve_information_request: {request_id}") - return error_message - - # Get project ID - project_id = await ProjectManager.get_project_id(self.context) - if not project_id: - return "No project associated with this conversation. Unable to resolve information request." - - # Resolve the information request using ProjectManager - success, information_request = await ProjectManager.resolve_information_request( - context=self.context, request_id=request_id, resolution=resolution - ) - - if success and information_request: - return f"Information request '{information_request.title}' has been resolved." - else: - logger.warning(f"Failed to resolve information request. Invalid ID provided: '{request_id}'") - return f'''ERROR: Could not resolve information request with ID "{request_id}". - -IMPORTANT STEPS TO RESOLVE INFORMATION REQUESTS: -1. FIRST run get_project_info(info_type="requests") to see the full list of requests -2. Find the request you want to resolve and copy its exact Request ID (looks like "abc123-def-456") -3. Then use resolve_information_request with the EXACT ID from step 2, NOT the title of the request - -Example: resolve_information_request(request_id="abc123-def-456", resolution="Your solution here")"''' - - async def create_information_request( - self, title: str, description: str, priority: Literal["low", "medium", "high", "critical"] - ) -> str: - """ - Create an information request to send to the Coordinator for information that is unavailable to you or to report a blocker. - - WHEN TO USE: - - When you need specific information or clarification from the Coordinator - - When encountering a blocker that prevents progress on a goal - - When requesting additional resources or documentation - - When you need a decision from the project Coordinator - - When a user expressly asks for information or help with something unclear - - Set an appropriate priority based on how critical the information is: - - "low": Nice to have, not blocking progress - - "medium": Important but not immediate - - "high": Important and somewhat urgent - - "critical": Completely blocked, cannot proceed without this information - - Args: - title: A concise, clear title that summarizes what information is needed - description: A detailed explanation of what information is needed and why it's important - priority: The priority level - must be one of: low, medium, high, critical - - Returns: - A message indicating success or failure - """ - if self.role is not ConversationRole.TEAM: - return "Only Team members can create information requests." - - # Get project ID - project_id = await ProjectManager.get_project_id(self.context) - if not project_id: - return "No project associated with this conversation. Unable to create information request." - - # Set default priority if not provided - if priority is None: - priority = "medium" - - # Map priority string to enum - priority_map = { - "low": RequestPriority.LOW, - "medium": RequestPriority.MEDIUM, - "high": RequestPriority.HIGH, - "critical": RequestPriority.CRITICAL, - } - priority_enum = priority_map.get(priority.lower(), RequestPriority.MEDIUM) - - # Create the information request using ProjectManager - success, request = await ProjectManager.create_information_request( - context=self.context, title=title, description=description, priority=priority_enum - ) - - if success and request: - await self.context.send_messages( - NewConversationMessage( - content=f"Information request '{title}' created successfully with {priority} priority. The Coordinator has been notified.", - message_type=MessageType.notice, - metadata={}, # Add empty metadata - ) - ) - return f"Information request '{title}' created successfully. The Coordinator has been notified." - else: - return "Failed to create information request. Please try again." - - async def delete_information_request(self, request_id: str) -> str: - """ - Delete an information request that is no longer needed. - This completely removes the request from the system. - - Args: - request_id: ID of the request to delete - - Returns: - Message indicating success or failure - """ - if self.role is not ConversationRole.TEAM: - return "This tool is only available to Team members." - - # Get project ID - project_id = await ProjectManager.get_project_id(self.context) - if not project_id: - logger.warning("No project ID found for this conversation") - return "No project associated with this conversation. Unable to delete information request." - - try: - cleaned_request_id = request_id.strip() - cleaned_request_id = cleaned_request_id.replace('"', "").replace("'", "") - - # Read the information request - information_request = ProjectStorage.read_information_request(project_id, cleaned_request_id) - - if not information_request: - # Try to find it in all requests with improved matching algorithm - all_requests = ProjectStorage.get_all_information_requests(project_id) - matching_request = None - - available_ids = [req.request_id for req in all_requests if req.conversation_id == str(self.context.id)] - - # Try to normalize the request ID to a UUID format - normalized_id = cleaned_request_id - # Remove any "uuid:" prefix if present - if normalized_id.startswith("uuid:"): - normalized_id = normalized_id[5:] - - # Check if the ID contains hyphens already, if not try to format it - if "-" not in normalized_id and len(normalized_id) >= 32: - # Try to format in standard UUID format (8-4-4-4-12) - try: - formatted_id = f"{normalized_id[0:8]}-{normalized_id[8:12]}-{normalized_id[12:16]}-{normalized_id[16:20]}-{normalized_id[20:32]}" - logger.debug(f"Reformatted ID without hyphens to: {formatted_id}") - normalized_id = formatted_id - except Exception as e: - logger.warning(f"Failed to reformat ID: {e}") - - # For each request, try multiple matching strategies - for req in all_requests: - # Only consider requests from this conversation - if req.conversation_id != str(self.context.id): - continue - - # Get string representations of request_id to compare - req_id_str = str(req.request_id).lower() - req_id_clean = req_id_str.replace("-", "") - normalized_id_clean = normalized_id.replace("-", "") - - logger.debug(f"Comparing against request: {req_id_str}") - - # Multiple matching strategies, from most specific to least - if any([ - # Exact match - req_id_str == normalized_id, - # Match ignoring hyphens - req_id_clean == normalized_id_clean, - # Check for UUID format variations - req_id_str == normalized_id.lower(), - # Partial match (if one is substring of the other) - len(normalized_id) >= 6 and normalized_id in req_id_str, - len(req_id_str) >= 6 and req_id_str in normalized_id, - # Match on first part of UUID (at least 8 chars) - len(normalized_id) >= 8 and normalized_id[:8] == req_id_str[:8] and len(req_id_clean) >= 30, - ]): - matching_request = req - break - - if matching_request: - information_request = matching_request - request_id = matching_request.request_id - else: - logger.warning( - f"Failed deletion attempt - request ID '{request_id}' not found in project {project_id}" - ) - if available_ids: - id_examples = ", ".join([f"`{id[:8]}...`" for id in available_ids[:3]]) - return f"Information request with ID '{request_id}' not found. Your available requests have IDs like: {id_examples}. Please check and try again with the exact ID." - else: - return f"Information request with ID '{request_id}' not found. You don't have any active requests to delete." - - if information_request.conversation_id != str(self.context.id): - return "You can only delete information requests that you created. This request was created by another conversation." - - # Get current user info for logging - participants = await self.context.get_participants() - current_user_id = None - current_username = None - - for participant in participants.participants: - if participant.role == "user": - current_user_id = participant.id - current_username = participant.name - break - - if not current_user_id: - current_user_id = "team-system" - current_username = "Team Member" - - # Log the deletion before removing the request - request_title = information_request.title - - # Store the actual request ID from the information_request object for reliable operations - actual_request_id = information_request.request_id - - # Log the deletion in the project log - await ProjectStorage.log_project_event( - context=self.context, - project_id=project_id, - entry_type=LogEntryType.REQUEST_DELETED.value, - message=f"Information request '{request_title}' was deleted by {current_username}", - related_entity_id=actual_request_id, - metadata={ - "request_title": request_title, - "deleted_by": current_user_id, - "deleted_by_name": current_username, - }, - ) - - # Delete the information request - implementing deletion logic by removing the file - # Using ProjectStorage instead of direct path access - # Create information requests directory path and remove the specific file - - request_path = ProjectStorageManager.get_information_request_path(project_id, actual_request_id) - if request_path.exists(): - request_path.unlink() # Delete the file - - # Notify Coordinator about the deletion - try: - # Get Coordinator conversation ID - - coordinator_dir = ProjectStorageManager.get_project_dir(project_id) / ConversationRole.COORDINATOR.value - if coordinator_dir.exists(): - role_file = coordinator_dir / "conversation_role.json" - if role_file.exists(): - role_data = read_model(role_file, ConversationProjectManager.ConversationRoleInfo) - if role_data: - coordinator_conversation_id = role_data.conversation_id - - # Notify Coordinator - - client = ConversationClientManager.get_conversation_client( - self.context, coordinator_conversation_id - ) - await client.send_messages( - NewConversationMessage( - content=f"Team member ({current_username}) has deleted their request: '{request_title}'", - message_type=MessageType.notice, - ) - ) - except Exception as e: - logger.warning(f"Could not notify Coordinator about deleted request: {e}") - # Not critical, so we continue - - # Update all project UI inspectors - await ProjectStorage.refresh_all_project_uis(self.context, project_id) - - return f"Information request '{request_title}' has been successfully deleted." - - except Exception as e: - logger.exception(f"Error deleting information request: {e}") - return f"Error deleting information request: {str(e)}. Please try again later." - - async def add_project_goal(self, goal_name: str, goal_description: str, success_criteria: List[str]) -> str: - """ - Add a goal to the project brief with measurable success criteria. - - Project goals should be operational objectives that team members will need to complete. - Each goal must have clear, measurable success criteria that team members can mark as completed. - - WHEN TO USE: - - When defining actionable goals that team members need to accomplish - - When breaking down project requirements into specific, achievable objectives - - After creating a project brief, before marking the project ready for working - - When users ask to add or define goals, objectives, or tasks for the project - - Args: - goal_name: A concise, clear name for the goal (e.g., "Implement User Authentication") - goal_description: A detailed description explaining what needs to be accomplished - success_criteria: List of specific, measurable criteria that indicate when the goal is complete - (e.g., ["User login form created", "Password reset functionality implemented"]) - - Returns: - A message indicating success or failure - """ - - if self.role is not ConversationRole.COORDINATOR: - return "Only Coordinator can add project goals." - - # Get project ID - project_id = await ProjectManager.get_project_id(self.context) - if not project_id: - return "No project associated with this conversation. Please create a project brief first." - - # Get existing project brief - brief = await ProjectManager.get_project_brief(self.context) - if not brief: - return "No project brief found. Please create one first with create_project_brief." - - # Use the formatted command processor from chat.py to leverage existing functionality - criteria_str = "" - if len(success_criteria) > 0: - criteria_str = "|" + ";".join(success_criteria) - - command_content = f"/add-goal {goal_name}|{goal_description}{criteria_str}" - - return await invoke_command_handler( - context=self.context, - command_content=command_content, - handler_func=handle_add_goal_command, - success_message=f"Goal '{goal_name}' added to project brief successfully.", - error_prefix="Error adding goal", - ) - - async def delete_project_goal(self, goal_index: int) -> str: - """ - Delete a goal from the project by index. - - WHEN TO USE: - - When a user explicitly requests to remove or delete a specific project goal - - When goals need to be reorganized and redundant/obsolete goals removed - - When a goal was added by mistake or is no longer relevant to the project - - Only before marking the project as ready for working - - NOTE: This action is irreversible and will remove all success criteria associated with the goal. - First use get_project_info() to see the list of goals and their indices before deletion. - - Args: - goal_index: The index of the goal to delete (0-based integer). Use get_project_info() first to see the - correct indices of goals. For example, to delete the first goal, use goal_index=0. - - Returns: - A message indicating success or failure - """ - - if self.role is not ConversationRole.COORDINATOR: - return "Only Coordinator can delete project goals." - - # Get project ID - validate project exists - project_id = await ProjectManager.get_project_id(self.context) - if not project_id: - return "No project associated with this conversation." - - # Call the ProjectManager method to delete the goal - success, result = await ProjectManager.delete_project_goal( - context=self.context, - goal_index=goal_index, - ) - - if success: - # Notify the user about the successful deletion - await self.context.send_messages( - NewConversationMessage( - content=f"Goal '{result}' has been successfully deleted from the project.", - message_type=MessageType.notice, - ) - ) - return f"Goal '{result}' has been successfully deleted from the project." - else: - # Return the error message - return f"Error deleting goal: {result}" - - async def mark_criterion_completed(self, goal_index: int, criterion_index: int) -> str: - """ - Mark a success criterion as completed for tracking project progress. - - WHEN TO USE: - - When the user reports completing a specific task or deliverable - - When evidence has been provided that a success criterion has been met - - When a milestone for one of the project goals has been achieved - - When tracking progress and updating the project status - - Each completed criterion moves the project closer to completion. When all criteria - are completed, the project can be marked as complete. - - IMPORTANT: Always use get_project_info() first to see the current goals, criteria, and their indices - before marking anything as complete. - - Args: - goal_index: The index of the goal (0-based integer) from get_project_info() output - criterion_index: The index of the criterion within the goal (0-based integer) - - Returns: - A message indicating success or failure - """ - - if self.role is not ConversationRole.TEAM: - return "Only Team members can mark criteria as completed." - - # Get project ID - project_id = await ProjectManager.get_project_id(self.context) - if not project_id: - return "No project associated with this conversation. Unable to mark criterion as completed." - - # Get existing project brief - brief = await ProjectManager.get_project_brief(self.context) - if not brief: - return "No project brief found." - - # Using 0-based indexing directly, no adjustment needed - - # Get the project to access goals - project = ProjectStorage.read_project(project_id) - if not project or not project.goals: - return "No project goals found." - - # Validate indices - if goal_index < 0 or goal_index >= len(project.goals): - return f"Invalid goal index {goal_index}. Valid indexes are 0 to {len(project.goals) - 1}. There are {len(project.goals)} goals." - - goal = project.goals[goal_index] - - if criterion_index < 0 or criterion_index >= len(goal.success_criteria): - return f"Invalid criterion index {criterion_index}. Valid indexes for goal '{goal.name}' are 0 to {len(goal.success_criteria) - 1}. Goal '{goal.name}' has {len(goal.success_criteria)} criteria." - - # Update the criterion - criterion = goal.success_criteria[criterion_index] - - if criterion.completed: - return f"Criterion '{criterion.description}' is already marked as completed." - - # Get current user information - participants = await self.context.get_participants() - current_user_id = None - - for participant in participants.participants: - if participant.role == "user": - current_user_id = participant.id - break - - if not current_user_id: - return "Could not identify current user." - - # Mark as completed - criterion.completed = True - criterion.completed_at = datetime.utcnow() - criterion.completed_by = current_user_id - - # Save the updated project with the completed criterion - ProjectStorage.write_project(project_id, project) - - # Log the criterion completion - await ProjectStorage.log_project_event( - context=self.context, - project_id=project_id, - entry_type=LogEntryType.CRITERION_COMPLETED.value, - message=f"Success criterion completed: {criterion.description}", - related_entity_id=None, - metadata={"goal_name": goal.name, "criterion_description": criterion.description}, - ) - - # Update project info - project_info = ProjectStorage.read_project_info(project_id) - - if project_info: - # Count all completed criteria - completed_criteria = 0 - total_criteria = 0 - - # Get the project to access goals - project = ProjectStorage.read_project(project_id) - if project and project.goals: - for g in project.goals: - total_criteria += len(g.success_criteria) - completed_criteria += sum(1 for c in g.success_criteria if c.completed) - - # Update project info with criteria stats - project_info.completed_criteria = completed_criteria - project_info.total_criteria = total_criteria - - # Calculate progress percentage - if total_criteria > 0: - project_info.progress_percentage = int((completed_criteria / total_criteria) * 100) - - # Update metadata - project_info.updated_at = datetime.utcnow() - project_info.updated_by = current_user_id - project_info.version += 1 - - # Save the updated project info - ProjectStorage.write_project_info(project_id, project_info) - - # Notify linked conversations with a message - await ProjectNotifier.notify_project_update( - context=self.context, - project_id=project_id, - update_type="project_info", - message=f"Success criterion '{criterion.description}' for goal '{goal.name}' has been marked as completed.", - ) - - # Update all project UI inspectors - await ProjectStorage.refresh_all_project_uis(self.context, project_id) - - # Check if all criteria are completed for project completion - # Count all completed criteria again to check for completion - completed = 0 - total = 0 - - # Get the project to access goals - project = ProjectStorage.read_project(project_id) - if project and project.goals: - for g in project.goals: - total += len(g.success_criteria) - completed += sum(1 for c in g.success_criteria if c.completed) - - if completed == total and total > 0: - # Automatically complete the project - success, project_info = await ProjectManager.complete_project( - context=self.context, - summary=f"All {total} success criteria have been completed! Project has been automatically marked as complete.", - ) - - if success: - await self.context.send_messages( - NewConversationMessage( - content="🎉 All success criteria have been completed! The project has been automatically marked as complete.", - message_type=MessageType.notice, - ) - ) - else: - await self.context.send_messages( - NewConversationMessage( - content="🎉 All success criteria have been completed! Would you like me to formally complete the project?", - message_type=MessageType.notice, - ) - ) - - await self.context.send_messages( - NewConversationMessage( - content=f"Success criterion '{criterion.description}' for goal '{goal.name}' has been marked as completed.", - message_type=MessageType.notice, - ) - ) - - return f"Criterion '{criterion.description}' for goal '{goal.name}' marked as completed." - - async def mark_project_ready_for_working(self) -> str: - """ - Mark the project as ready for working. - This is a milestone function that transitions from Planning Stage to Working Stage. - - Returns: - A message indicating success or failure - """ - - if self.role is not ConversationRole.COORDINATOR: - return "Only Coordinator can mark a project as ready for working." - - # Get project ID - project_id = await ProjectManager.get_project_id(self.context) - if not project_id: - return "No project associated with this conversation. Unable to mark project as ready for working." - - # Get existing project brief, whiteboard, and project - brief = ProjectStorage.read_project_brief(project_id) - whiteboard = ProjectStorage.read_project_whiteboard(project_id) - project = ProjectStorage.read_project(project_id) - - if not brief: - return "No project brief found. Please create one before marking as ready for working." - - if not project or not project.goals: - return "Project has no goals. Please add at least one goal before marking as ready for working." - - # Check if at least one goal has success criteria - has_criteria = False - for goal in project.goals: - if goal.success_criteria: - has_criteria = True - break - - if not has_criteria: - return "No success criteria defined. Please add at least one success criterion to a goal before marking as ready for working." - - # Check if whiteboard has content - if not whiteboard or not whiteboard.content: - return "Project whiteboard is empty. Content will be automatically generated as the project progresses." - - # Get or create project info - project_info = ProjectStorage.read_project_info(project_id) - - # Get current user information - participants = await self.context.get_participants() - current_user_id = None - - for participant in participants.participants: - if participant.role == "user": - current_user_id = participant.id - break - - if not current_user_id: - return "Could not identify current user." - - if not project_info: - # Create new project info if it doesn't exist - project_info = ProjectInfo( - project_id=project_id, - coordinator_conversation_id=str(self.context.id), - state=ProjectState.PLANNING, - created_at=datetime.utcnow(), - updated_at=datetime.utcnow(), - ) - - # Update state to ready_for_working - if isinstance(project_info, dict): - # Handle the dict case for backward compatibility - project_info["state"] = ProjectState.READY_FOR_WORKING - project_info["status_message"] = "Project is now ready for team operations" - project_info["updated_at"] = datetime.utcnow() - else: - # Handle the ProjectInfo case - project_info.state = ProjectState.READY_FOR_WORKING - project_info.status_message = "Project is now ready for team operations" - project_info.updated_at = datetime.utcnow() - - # Save the updated project info - ProjectStorage.write_project_info(project_id, project_info) - - # Log the milestone transition - await ProjectStorage.log_project_event( - context=self.context, - project_id=project_id, - entry_type=LogEntryType.MILESTONE_PASSED.value, - message="Project marked as READY FOR WORKING", - metadata={"milestone": "ready_for_working"}, - ) - - # Notify linked conversations with a message - await ProjectNotifier.notify_project_update( - context=self.context, - project_id=project_id, - update_type="project_info", - message="🔔 **Project Milestone Reached**: Coordinator has marked the project as READY FOR WORKING. All project information is now available and you can begin team operations.", - ) - - # Update all project UI inspectors - await ProjectStorage.refresh_all_project_uis(self.context, project_id) - - await self.context.send_messages( - NewConversationMessage( - content="🎯 Project has been marked as READY FOR WORKING. Team members have been notified and can now begin operations.", - message_type=MessageType.chat, - ) - ) - - return "Project successfully marked as ready for team operations." - - async def report_project_completion(self) -> str: - """ - Report that the project is complete, concluding the project lifecycle. - - WHEN TO USE: - - When all success criteria for all goals have been marked as completed - - When the user confirms the project deliverables are finished and ready - - When the project objectives have been fully achieved - - When it's time to formally conclude the project - - This is a significant milestone that indicates the project has successfully - completed all its goals. Before using this tool, verify that all success criteria - have been marked as completed using get_project_info(). - - Returns: - A message indicating success or failure - """ - - if self.role is not ConversationRole.TEAM: - return "Only Team members can report project completion." - - # Get project ID - project_id = await ProjectManager.get_project_id(self.context) - if not project_id: - return "No project associated with this conversation. Unable to report project completion." - - # Get existing project info - project_info = ProjectStorage.read_project_info(project_id) - if not project_info: - return "No project information found. Cannot complete project without project information." - - # Check if all criteria are completed - if getattr(project_info, "completed_criteria", 0) < getattr(project_info, "total_criteria", 0): - remaining = project_info.total_criteria - project_info.completed_criteria - return f"Cannot complete project - {remaining} success criteria are still pending completion." - - # Get current user information - participants = await self.context.get_participants() - current_user_id = None - - for participant in participants.participants: - if participant.role == "user": - current_user_id = participant.id - break - - if not current_user_id: - return "Could not identify current user." - - # Update project info to completed - project_info.state = ProjectState.COMPLETED - project_info.progress_percentage = 100 - project_info.status_message = "Project is now complete" - - # Add lifecycle metadata - if not hasattr(project_info, "lifecycle") or not project_info.lifecycle: - project_info.lifecycle = {} - - project_info.lifecycle["project_completed"] = True - project_info.lifecycle["project_completed_time"] = datetime.utcnow().isoformat() - project_info.lifecycle["project_completed_by"] = current_user_id - - # Update metadata - project_info.updated_at = datetime.utcnow() - project_info.updated_by = current_user_id - project_info.version += 1 - - # Save the updated project info - ProjectStorage.write_project_info(project_id, project_info) - - # Log the milestone transition - await ProjectStorage.log_project_event( - context=self.context, - project_id=project_id, - entry_type=LogEntryType.PROJECT_COMPLETED.value, - message="Project marked as COMPLETED", - metadata={"milestone": "project_completed"}, - ) - - # Notify linked conversations with a message - await ProjectNotifier.notify_project_update( - context=self.context, - project_id=project_id, - update_type="project_completed", - message="🎉 **Project Complete**: Team has reported that all project objectives have been achieved. The project is now complete.", - ) - - # Update all project UI inspectors - await ProjectStorage.refresh_all_project_uis(self.context, project_id) - - await self.context.send_messages( - NewConversationMessage( - content="🎉 **Project Complete**: All objectives have been achieved and the project is now complete. The Coordinator has been notified.", - message_type=MessageType.chat, - ) - ) - - return "Project successfully marked as complete. All participants have been notified." - - async def suggest_next_action(self) -> Dict[str, Any]: - """ - Suggest the next action the user should take based on project state. - - Returns: - Dict with suggestion details - """ - # Get project ID - project_id = await ProjectManager.get_project_id(self.context) - if not project_id: - logger.warning("No project ID found for this conversation") - return { - "suggestion": "no_project", - "reason": "No project associated with this conversation. Unable to suggest next action.", - "priority": "low", - "function": None, - } - - project_info = ProjectStorage.read_project_info(project_id) - if not project_info: - return { - "suggestion": "no_project_info", - "reason": "No project information found. Unable to suggest next action.", - "priority": "low", - "function": None, - } - - # Get project state information - brief = ProjectStorage.read_project_brief(project_id) - project = ProjectStorage.read_project(project_id) - requests = ProjectStorage.get_all_information_requests(project_id) - - # Check if project brief exists - if not brief: - if self.role is ConversationRole.COORDINATOR: - return { - "suggestion": "create_project_brief", - "reason": "No project brief found. Start by creating one.", - "priority": "high", - "function": "create_project_brief", - "parameters": {"name": "", "description": ""}, - } - else: - return { - "suggestion": "wait_for_coordinator", - "reason": "No project brief found. The Coordinator needs to create one before you can proceed.", - "priority": "medium", - "function": None, - } - - # Check if goals exist - if not project or not project.goals: - if self.role is ConversationRole.COORDINATOR: - return { - "suggestion": "add_project_goal", - "reason": "Project has no goals. Add at least one goal with success criteria.", - "priority": "high", - "function": "add_project_goal", - "parameters": {"goal_name": "", "goal_description": "", "success_criteria": []}, - } - else: - return { - "suggestion": "wait_for_goals", - "reason": "Project has no goals. The Coordinator needs to add goals before you can proceed.", - "priority": "medium", - "function": None, - } - - # Check project info if project is ready for working - ready_for_working = project_info.state == ProjectState.READY_FOR_WORKING - - if not ready_for_working and self.role is ConversationRole.COORDINATOR: - # Check if it's ready to mark as ready for working - has_goals = bool(project and project.goals) - has_criteria = bool( - project and project.goals and any(bool(goal.success_criteria) for goal in project.goals) - ) - - if has_goals and has_criteria: - return { - "suggestion": "mark_ready_for_working", - "reason": "Project information is complete. Mark it as ready for team operations.", - "priority": "medium", - "function": "mark_project_ready_for_working", - "parameters": {}, - } - - # Check for unresolved information requests for Coordinator - if self.role is ConversationRole.COORDINATOR: - active_requests = [r for r in requests if r.status == RequestStatus.NEW] - if active_requests: - request = active_requests[0] # Get the first unresolved request - return { - "suggestion": "resolve_information_request", - "reason": f"There are {len(active_requests)} unresolved information requests. Consider resolving '{request.title}'.", - "priority": "high" - if request.priority in [RequestPriority.HIGH, RequestPriority.CRITICAL] - else "medium", - "function": "resolve_information_request", - "parameters": {"request_id": request.request_id, "resolution": ""}, - } - - # For team, check if all criteria are completed for project completion - criteria = await ProjectManager.get_project_criteria(self.context) - incomplete_criteria = [criterion for criterion in criteria if not criterion.completed] - - if self.role is ConversationRole.TEAM and not incomplete_criteria: - return { - "suggestion": "report_project_completion", - "reason": "All success criteria have been completed. Report project completion.", - "priority": "medium", - "function": "report_project_completion", - "parameters": {}, - } - - # For team, suggest marking criteria as completed if any are pending - if self.role is ConversationRole.TEAM and incomplete_criteria: - # Get the project to access goals - project = ProjectStorage.read_project(project_id) - if project and project.goals: - # Find the first uncompleted criterion - for goal_index, goal in enumerate(project.goals): - for criterion_index, criterion in enumerate(goal.success_criteria): - if not criterion.completed: - return { - "suggestion": "mark_criterion_completed", - "reason": "Update progress by marking completed success criteria.", - "priority": "low", - "function": "mark_criterion_completed", - "parameters": { - "goal_index": goal_index, # 0-based indexing - "criterion_index": criterion_index, # 0-based indexing - }, - } - - # Default suggestions based on role - if self.role is ConversationRole.COORDINATOR: - return { - "suggestion": "monitor_progress", - "reason": "Monitor team operations and respond to any new information requests.", - "priority": "low", - "function": None, - } - else: - return { - "suggestion": "update_status", - "reason": "Continue team operations and update project progress as you make advancements.", - "priority": "low", - "function": "update_project_info", - "parameters": {"status": "in_progress"}, - } diff --git a/assistants/project-assistant/assistant/tools/__init__.py b/assistants/project-assistant/assistant/tools/__init__.py new file mode 100644 index 000000000..8f2d67117 --- /dev/null +++ b/assistants/project-assistant/assistant/tools/__init__.py @@ -0,0 +1,147 @@ +""" +Tools directory for Knowledge Transfer Assistant. + +This module provides the ShareTools class that aggregates all tool functionality +and registers role-specific tools with the LLM. +""" + +from openai_client.tools import ToolFunctions +from semantic_workbench_assistant.assistant_app import ConversationContext + +from assistant.tools.conversation_preferences import ConversationPreferencesTools +from assistant.tools.tasks import TaskTools + +from .information_requests import InformationRequestTools +from .learning_outcomes import LearningOutcomeTools +from .progress_tracking import ProgressTrackingTools +from .share_setup import ShareSetupTools + + +class ShareTools: + """Tools for the Knowledge Transfer Assistant to use during chat completions.""" + + def __init__(self, context: ConversationContext): + self.context = context + self._tool_instances = None + + def act_tools(self) -> ToolFunctions: + fns = ToolFunctions() + + # fns.add_function( + # InformationRequestTools(self.context).request_information_from_user, + # "request_information_from_user", + # ) + + fns.add_function( + TaskTools(self.context).add_task, + "add_task", + ) + + fns.add_function( + TaskTools(self.context).update_task, + "update_task", + ) + + fns.add_function( + ShareSetupTools(self.context).update_audience, + "update_audience", + ) + + fns.add_function( + ShareSetupTools(self.context).update_audience_takeaways, + "update_audience_takeaways", + ) + + fns.add_function( + ShareSetupTools(self.context).update_brief, + "update_brief", + ) + + fns.add_function( + ShareSetupTools(self.context).create_invitation_message, + "create_invitation_message", + ) + + # tool_functions.add_function( + # ShareSetupTools(self.context).set_knowledge_organized, + # "set_knowledge_organized", + # ) + + # tool_functions.add_function( + # ShareSetupTools(self.context).set_learning_intention, + # "set_learning_intention", + # ) + # tool_functions.add_function( + # LearningObjectiveTools(self.context).add_learning_objective, + # "add_learning_objective", + # ) + # tool_functions.add_function( + # LearningObjectiveTools(self.context).update_learning_objective, + # "update_learning_objective", + # ) + # tool_functions.add_function( + # LearningObjectiveTools(self.context).delete_learning_objective, + # "delete_learning_objective", + # ) + + # tool_functions.add_function( + # LearningOutcomeTools(self.context).add_learning_outcome, + # "add_learning_outcome", + # ) + # tool_functions.add_function( + # LearningOutcomeTools(self.context).update_learning_outcome, + # "update_learning_outcome", + # ) + # tool_functions.add_function( + # LearningOutcomeTools(self.context).delete_learning_outcome, + # "delete_learning_outcome", + # "Delete a learning outcome by outcome ID", + # ) + + return fns + + def conversationalist_tools(self) -> ToolFunctions: + """Return coordinator-specific tool functions.""" + fns = ToolFunctions() + + fns.add_function( + InformationRequestTools(self.context).request_information_from_user, + "request_information_from_user", + ) + + fns.add_function( + InformationRequestTools(self.context).resolve_information_request, + "resolve_information_request", + ) + + return fns + + def team_tools(self) -> ToolFunctions: + """Return team-specific tool functions.""" + tool_functions = ToolFunctions() + + tool_functions.add_function( + ConversationPreferencesTools(self.context).update_preferred_communication_style, + "update_preferred_communication_style", + ) + tool_functions.add_function( + InformationRequestTools(self.context).request_information_from_coordinator, + "create_information_request", + ) + tool_functions.add_function( + InformationRequestTools(self.context).delete_information_request, + "delete_information_request", + ) + tool_functions.add_function( + LearningOutcomeTools(self.context).mark_learning_outcome_achieved, + "mark_learning_outcome_achieved", + ) + tool_functions.add_function( + ProgressTrackingTools(self.context).report_transfer_completion, + "report_transfer_completion", + ) + + return tool_functions + + +__all__ = ["ShareTools"] diff --git a/assistants/project-assistant/assistant/tools/base.py b/assistants/project-assistant/assistant/tools/base.py new file mode 100644 index 000000000..a1426443e --- /dev/null +++ b/assistants/project-assistant/assistant/tools/base.py @@ -0,0 +1,19 @@ +""" +Base classes for Knowledge Transfer Assistant tools. +""" + +from semantic_workbench_assistant.assistant_app import ConversationContext + + +class ToolsBase: + """Base class for tool functionality.""" + + def __init__(self, context: ConversationContext): + """ + Initialize the tools base with the current conversation context. + + Args: + context: The conversation context + role: The assistant's role (ConversationRole enum) + """ + self.context = context diff --git a/assistants/project-assistant/assistant/tools/conversation_preferences.py b/assistants/project-assistant/assistant/tools/conversation_preferences.py new file mode 100644 index 000000000..e914c9c51 --- /dev/null +++ b/assistants/project-assistant/assistant/tools/conversation_preferences.py @@ -0,0 +1,30 @@ +""" +Project setup tools for Knowledge Transfer Assistant. + +Tools for configuring knowledge shares. +""" + +from assistant.domain.conversation_preferences_manager import ConversationPreferencesManager + +from .base import ToolsBase + + +class ConversationPreferencesTools(ToolsBase): + async def update_preferred_communication_style(self, style: str) -> str: + """ + Update the preferred communication style for the conversation. + + Args: + style: The preferred communication style to set. This should include all of the users instructions about how the assistant should communicate with the user. It is not just a single style, but a comprehensive set of instructions. + + Returns: + A message indicating success or failure + """ # noqa: E501 + try: + await ConversationPreferencesManager.update_preferred_communication_style( + context=self.context, + preferred_communication_style=style, + ) + return "Preferred conversation style updated successfully" + except Exception as e: + return f"Failed to update preferred conversation style: {e!s}" diff --git a/assistants/project-assistant/assistant/tools/information_requests.py b/assistants/project-assistant/assistant/tools/information_requests.py new file mode 100644 index 000000000..8f47e2fc4 --- /dev/null +++ b/assistants/project-assistant/assistant/tools/information_requests.py @@ -0,0 +1,165 @@ +""" +Information request tools for Knowledge Transfer Assistant. + +Tools for creating, managing, and resolving information requests between coordinators and team members. +""" + +from typing import Literal + +from assistant.data import InformationRequestSource, RequestPriority +from assistant.domain import InformationRequestManager +from assistant.logging import logger + +from .base import ToolsBase + + +class InformationRequestTools(ToolsBase): + """Tools for managing information requests.""" + + async def request_information_from_coordinator( + self, + title: str, + description: str, + priority: Literal["low", "medium", "high", "critical"], + ) -> str: + """ + Create an information request to send to the Coordinator for information that is unavailable to you or to report a blocker. + + WHEN TO USE: + - When you need specific information or clarification from the Coordinator + - When encountering a blocker that prevents progress on satisfying an intended takeaway + - When requesting additional resources or documentation + - When you need a decision from the Coordinator + - When a user expressly asks for information or help with something unclear + + Set an appropriate priority based on how critical the information is: + - "low": Nice to have, not blocking progress + - "medium": Important but not immediate + - "high": Important and somewhat urgent + - "critical": Completely blocked, cannot proceed without this information + + Args: + title: A concise, clear title that summarizes what information is needed + description: A detailed explanation of what information is needed and why it's important + priority: The priority level - must be one of: low, medium, high, critical + + Returns: + A message indicating success or failure + """ # noqa: E501 + + priority_map = { + "low": RequestPriority.LOW, + "medium": RequestPriority.MEDIUM, + "high": RequestPriority.HIGH, + "critical": RequestPriority.CRITICAL, + } + priority_enum = priority_map.get(priority.lower(), RequestPriority.MEDIUM) + + try: + await InformationRequestManager.create_information_request( + context=self.context, + title=title, + description=description, + priority=priority_enum, + source=InformationRequestSource.TEAM, + ) + return f"Information request '{title}' created successfully. The Coordinator has been notified." + except Exception as e: + logger.exception(f"Failed to create information request: {e}") + return f"Failed to create information request: {e!s}" + + async def request_information_from_user( + self, + title: str, + description: str, + priority: Literal["low", "medium", "high", "critical"], + ) -> str: + """ + Request specific information from the user that you don't already have access to so that you can complete a task. + + WHEN TO USE: + - When you need specific information or clarification from the user to complete a task. + - When encountering a blocker that prevents progress on a task. + - When requesting additional resources or documentation. + - When you need a decision from the user. + + Set an appropriate priority based on how critical the information is: + - "low": Nice to have, not blocking progress. + - "medium": Important but not immediate. + - "high": Important and somewhat urgent. + - "critical": Completely blocked, cannot proceed without this information. + + Args: + title: A concise, clear title that summarizes what information is needed. + description: A detailed explanation of what specific information is needed and why it's important. + priority: The priority level - must be one of: low, medium, high, critical. + + Returns: + A message indicating success or failure + """ # noqa: E501 + + priority_map = { + "low": RequestPriority.LOW, + "medium": RequestPriority.MEDIUM, + "high": RequestPriority.HIGH, + "critical": RequestPriority.CRITICAL, + } + priority_enum = priority_map.get(priority.lower(), RequestPriority.MEDIUM) + + try: + await InformationRequestManager.create_information_request( + context=self.context, + title=title, + description=description, + priority=priority_enum, + source=InformationRequestSource.INTERNAL, + ) + return f"Information request '{title}' created successfully. The Coordinator has been notified." + except Exception as e: + logger.exception(f"Failed to create information request: {e}") + return f"Failed to create information request: {e!s}" + + async def resolve_information_request(self, request_id: str, resolution: str) -> str: + """ + Resolve an information request when you have the needed information to address it. Only use for active information requests. If there are no active information requests, this should never be called. + + WHEN TO USE: + - When you already have information that directly answers the request. + - When you have gathered enough details to answer the request. + - When a request is no longer relevant and should be closed with explanation. + + Args: + request_id: The UUID of the information request to resolve + resolution: Complete information that addresses the request + + Returns: + A message indicating success or failure + """ # noqa: E501 + try: + information_request = await InformationRequestManager.resolve_information_request( + context=self.context, request_id=request_id, resolution=resolution + ) + return f"Information request '{information_request.title}' has been resolved." + except Exception as e: + logger.exception(f"Failed to resolve information request: {e}") + return f"ERROR: Could not resolve information request with ID '{request_id}': {e!s}" + + async def delete_information_request(self, request_id: str) -> str: + """ + Delete an information request that is no longer needed. + This completely removes the request from the system. + + Args: + request_id: ID of the request to delete + + Returns: + Message indicating success or failure + """ + try: + message = await InformationRequestManager.delete_information_request( + context=self.context, request_id=request_id + ) + return message + except Exception as e: + logger.exception(f"Failed to delete information request: {e}") + return f"Failed to delete information request: {e!s}" diff --git a/assistants/project-assistant/assistant/tools/learning_objectives.py b/assistants/project-assistant/assistant/tools/learning_objectives.py new file mode 100644 index 000000000..4362ae6cf --- /dev/null +++ b/assistants/project-assistant/assistant/tools/learning_objectives.py @@ -0,0 +1,105 @@ +""" +Learning objectives management tools for Knowledge Transfer Assistant. + +Tools for creating, updating, and managing learning objectives and outcomes. +""" + +from assistant.domain import LearningObjectivesManager +from assistant.logging import logger + +from .base import ToolsBase + + +class LearningObjectiveTools(ToolsBase): + """Tools for managing learning objectives and outcomes.""" + + async def add_learning_objective(self, objective_name: str, description: str, learning_outcomes: list[str]) -> str: + """ + Add a learning objective with measurable learning outcomes. + + - Learning objectives should define what knowledge areas learners need to understand. + - Each objective must have clear, measurable learning outcomes that learners can mark as achieved. + + WHEN TO USE: + - When defining what knowledge areas team members need to understand + - When breaking down knowledge requirements into specific, learnable objectives + - After creating a knowledge brief, before marking the transfer ready for learning + - When users ask to add or define learning objectives or knowledge areas + + Args: + objective_name: A concise, clear name for the learning objective (e.g., "Understanding User Authentication") + description: A detailed description explaining what knowledge needs to be understood + learning_outcomes: List of specific, measurable outcomes that indicate when the objective is achieved + (e.g., ["Can explain authentication flow", "Can implement password security"]) + + Returns: + A message indicating success or failure + """ + objective = await LearningObjectivesManager.add_learning_objective( + context=self.context, + objective_name=objective_name, + description=description, + outcomes=learning_outcomes, + ) + + if objective: + return f"Learning objective '{objective_name}' added to knowledge brief successfully." + else: + return "Failed to add learning objective. Please try again." + + async def update_learning_objective( + self, + objective_id: str, + objective_name: str, + description: str, + ) -> str: + """ + Update an existing learning objective's name or description. + + Args: + objective_id: The UUID of the learning objective to update + objective_name: New name for the objective (empty string to keep current name) + description: New description (empty string to keep current description) + + Returns: + A message indicating success or failure + """ + try: + message = await LearningObjectivesManager.update_learning_objective( + context=self.context, + objective_id=objective_id, + objective_name=objective_name if objective_name.strip() else None, + description=description if description.strip() else None, + ) + return message + except Exception as e: + logger.exception(f"Failed to update learning objective: {e}") + return f"Failed to update learning objective: {e!s}" + + async def delete_learning_objective(self, objective_id: str) -> str: + """ + Delete a learning objective from the knowledge package by ID. + + WHEN TO USE: + - When a user explicitly requests to remove or delete a specific learning objective + - When objectives need to be reorganized and redundant/obsolete objectives removed + - When an objective was added by mistake or is no longer relevant to the knowledge transfer + - Only before marking the knowledge package as ready for transfer + + NOTE: This action is irreversible and will remove all learning outcomes associated with the objective. + + Args: + objective_id: The UUID of the learning objective to delete. + + Returns: + A message indicating success or failure + """ + try: + message = await LearningObjectivesManager.delete_learning_objective( + context=self.context, + objective_id=objective_id, + ) + return message + except Exception as e: + logger.exception(f"Failed to delete learning objective: {e}") + return f"Failed to delete learning objective: {e!s}" diff --git a/assistants/project-assistant/assistant/tools/learning_outcomes.py b/assistants/project-assistant/assistant/tools/learning_outcomes.py new file mode 100644 index 000000000..4d27a8f6e --- /dev/null +++ b/assistants/project-assistant/assistant/tools/learning_outcomes.py @@ -0,0 +1,232 @@ +""" +Learning outcomes management tools for Knowledge Transfer Assistant. + +Tools for managing individual learning outcomes within objectives. +""" + +from datetime import UTC, datetime + +from semantic_workbench_api_model.workbench_model import ( + MessageType, + NewConversationMessage, +) + +from assistant.data import ( + InspectorTab, + LearningOutcomeAchievement, + LogEntryType, +) +from assistant.domain import LearningObjectivesManager, ShareManager, TransferManager +from assistant.logging import logger +from assistant.notifications import Notifications +from assistant.utils import get_current_user_id + +from .base import ToolsBase + + +class LearningOutcomeTools(ToolsBase): + """Tools for managing learning outcomes.""" + + async def add_learning_outcome(self, objective_id: str, outcome_description: str) -> str: + """ + Add a new learning outcome to an existing learning objective. + + WHEN TO USE: + - When you need to add additional measurable outcomes to an existing objective + - When refining objectives by breaking them down into more specific outcomes + - When expanding the scope of an objective with new learning goals + - When iteratively developing learning objectives based on feedback + + Args: + objective_id: The UUID of the learning objective to add the outcome to + outcome_description: Clear, specific description of what needs to be understood or accomplished + + Returns: + A message indicating success or failure + """ + try: + message = await LearningObjectivesManager.add_learning_outcome( + context=self.context, + objective_id=objective_id, + outcome_description=outcome_description, + ) + return message + except Exception as e: + logger.exception(f"Failed to add learning outcome: {e}") + return f"Failed to add learning outcome: {e!s}" + + async def update_learning_outcome(self, outcome_id: str, new_description: str) -> str: + """ + Update the description of an existing learning outcome. + + WHEN TO USE: + - When clarifying or improving the wording of an existing outcome + - When making outcomes more specific or measurable + - When correcting errors in outcome descriptions + - When refining outcomes based on feedback or better understanding + + Args: + outcome_id: The unique ID of the learning outcome to update + new_description: New description for the learning outcome + + Returns: + A message indicating success or failure + """ + try: + message = await LearningObjectivesManager.update_learning_outcome( + context=self.context, + outcome_id=outcome_id, + new_description=new_description, + ) + return message + except Exception as e: + logger.exception(f"Failed to update learning outcome: {e}") + return f"Failed to update learning outcome: {e!s}" + + async def delete_learning_outcome(self, outcome_id: str) -> str: + """ + Delete a learning outcome from a learning objective. + + WHEN TO USE: + - When an outcome is no longer relevant or necessary + - When consolidating redundant outcomes + - When removing outcomes that were added by mistake + - When simplifying objectives by removing overly specific outcomes + + NOTE: This action is irreversible. + + Args: + outcome_id: The unique ID of the learning outcome to delete + + Returns: + A message indicating success or failure + """ + try: + message = await LearningObjectivesManager.delete_learning_outcome( + context=self.context, + outcome_id=outcome_id, + ) + return message + except Exception as e: + logger.exception(f"Failed to delete learning outcome: {e}") + return f"Failed to delete learning outcome: {e!s}" + + async def mark_learning_outcome_achieved(self, objective_id: str, outcome_id: str) -> str: + """ + Mark a learning outcome as achieved for tracking knowledge transfer progress. + + WHEN TO USE: + - When the user reports completing a specific learning task or deliverable + - When evidence has been provided that a learning outcome has been met + - When a milestone for one of the learning objectives has been achieved + - When tracking progress and updating the transfer status + + Each completed outcome moves the knowledge transfer closer to completion. When all outcomes are achieved, the transfer can be marked as complete. + + Args: + objective_id: The UUID of the learning objective + outcome_id: The UUID of the learning outcome within the objective + + Returns: + A message indicating success or failure + """ # noqa: E501 + try: + share = await ShareManager.get_share(self.context) + brief = share.brief + if not brief: + return "No knowledge brief found." + + # Find the objective by ID + objective = None + for obj in share.learning_objectives: + if obj.id == objective_id: + objective = obj + break + if not objective: + return f"Learning objective with ID '{objective_id}' not found." + + # Find the outcome by ID within the objective + outcome = None + for out in objective.learning_outcomes: + if out.id == outcome_id: + outcome = out + break + + if not outcome: + return f"Learning outcome with ID '{outcome_id}' not found in objective '{objective.name}'." + + conversation_id = str(self.context.id) + + # Check if already achieved by this conversation + if LearningObjectivesManager.is_outcome_achieved_by_conversation(share, outcome.id, conversation_id): + return f"Outcome '{outcome.description}' is already marked as achieved by this team member." + + # Ensure team conversation info exists + if conversation_id not in share.team_conversations: + return "Team conversation not properly registered. Please contact the coordinator." + + # Create achievement record + achievement = LearningOutcomeAchievement( + outcome_id=outcome.id, achieved=True, achieved_at=datetime.now(UTC) + ) + + # Add achievement to team conversation's achievements + share.team_conversations[conversation_id].outcome_achievements.append(achievement) + + # Update team conversation's last active timestamp + share.team_conversations[conversation_id].last_active_at = datetime.now(UTC) + + # Update metadata + current_user_id = await get_current_user_id(self.context) + share.updated_at = datetime.now(UTC) + share.updated_by = current_user_id + share.version += 1 + + # Save the updated knowledge package + await ShareManager.set_share(self.context, share) + + # Log the outcome achievement + await ShareManager.log_share_event( + context=self.context, + entry_type=LogEntryType.OUTCOME_ATTAINED.value, + message=f"Learning outcome achieved: {outcome.description}", + related_entity_id=None, + metadata={ + "objective_name": objective.name, + "outcome_description": outcome.description, + }, + ) + + # Notify linked conversations with a message + await Notifications.notify_all( + self.context, + share.share_id, + f"Learning outcome '{outcome.description}' for objective '{objective.name}' has been achieved.", + ) + await Notifications.notify_all_state_update( + self.context, + [InspectorTab.LEARNING, InspectorTab.BRIEF], + ) + + # Check if all outcomes are achieved for transfer completion + # Get the knowledge package to check completion status + if TransferManager._is_transfer_complete(share): + await self.context.send_messages( + NewConversationMessage( + content="🎉 All learning outcomes have been achieved! The knowledge transfer has been automatically marked as complete.", # noqa: E501 + message_type=MessageType.notice, + ) + ) + + await self.context.send_messages( + NewConversationMessage( + content=f"Learning outcome '{outcome.description}' for objective '{objective.name}' has been marked as achieved.", # noqa: E501 + message_type=MessageType.notice, + ) + ) + + return f"Learning outcome '{outcome.description}' for objective '{objective.name}' marked as achieved." + + except Exception as e: + logger.exception(f"Error marking learning outcome as achieved: {e}") + return "An error occurred while marking the learning outcome as achieved. Please try again later." diff --git a/assistants/project-assistant/assistant/tools/progress_tracking.py b/assistants/project-assistant/assistant/tools/progress_tracking.py new file mode 100644 index 000000000..ead7913ce --- /dev/null +++ b/assistants/project-assistant/assistant/tools/progress_tracking.py @@ -0,0 +1,88 @@ +""" +Progress tracking tools for Knowledge Transfer Assistant. + +Tools for tracking learning progress and completing knowledge transfer activities. +""" + +from datetime import UTC, datetime + +from semantic_workbench_api_model.workbench_model import ( + MessageType, + NewConversationMessage, +) + +from assistant.data import ( + InspectorTab, + LogEntryType, +) +from assistant.domain import LearningObjectivesManager, ShareManager +from assistant.logging import logger +from assistant.notifications import Notifications +from assistant.utils import get_current_user_id + +from .base import ToolsBase + + +class ProgressTrackingTools(ToolsBase): + """Tools for tracking learning progress.""" + + async def report_transfer_completion(self) -> str: + """ + Report that the knowledge transfer is complete, concluding the transfer lifecycle. + + WHEN TO USE: + - When all learning outcomes for all objectives have been marked as achieved + - When the user confirms the knowledge has been successfully learned + - When the learning objectives have been fully achieved + - When it's time to formally conclude the knowledge transfer + + This is a significant milestone that indicates the knowledge transfer has successfully achieved all its learning objectives. Before using this tool, verify that all learning outcomes have been marked as achieved. + + Returns: + A message indicating success or failure + """ # noqa: E501 + try: + share = await ShareManager.get_share(self.context) + + # Check if all outcomes are achieved + achieved_outcomes, total_outcomes = LearningObjectivesManager.get_overall_completion(share) + if achieved_outcomes < total_outcomes: + remaining = total_outcomes - achieved_outcomes + return ( + f"Cannot complete knowledge transfer - {remaining} learning outcomes are still pending achievement." + ) + + current_user_id = await get_current_user_id(self.context) + share.updated_at = datetime.now(UTC) + share.updated_by = current_user_id + share.version += 1 + await ShareManager.set_share(self.context, share) + + # Log the milestone transition + await ShareManager.log_share_event( + context=self.context, + entry_type=LogEntryType.SHARE_COMPLETED.value, + message="Transfer marked as COMPLETED", + metadata={"milestone": "transfer_completed"}, + ) + + # Notify linked conversations with a message + await Notifications.notify_all( + self.context, + share.share_id, + "🎉 **Knowledge Transfer Complete**: Team has reported that all learning objectives have been achieved. The knowledge transfer is now complete.", # noqa: E501 + ) + await Notifications.notify_all_state_update(self.context, [InspectorTab.BRIEF]) + + await self.context.send_messages( + NewConversationMessage( + content="🎉 **Knowledge Transfer Complete**: All learning objectives have been achieved and the knowledge transfer is now complete. The Coordinator has been notified.", # noqa: E501 + message_type=MessageType.chat, + ) + ) + + return "Knowledge transfer successfully marked as complete. All participants have been notified." + + except Exception as e: + logger.exception(f"Error reporting transfer completion: {e}") + return "An error occurred while reporting transfer completion. Please try again later." diff --git a/assistants/project-assistant/assistant/tools/share_setup.py b/assistants/project-assistant/assistant/tools/share_setup.py new file mode 100644 index 000000000..0dc881a6a --- /dev/null +++ b/assistants/project-assistant/assistant/tools/share_setup.py @@ -0,0 +1,158 @@ +""" +Project setup tools for Knowledge Transfer Assistant. + +Tools for configuring knowledge shares. +""" + +from datetime import UTC, datetime + +from assistant import agentic +from assistant.data import InspectorTab +from assistant.domain.audience_manager import AudienceManager +from assistant.domain.knowledge_brief_manager import KnowledgeBriefManager +from assistant.domain.share_manager import ShareManager +from assistant.notifications import Notifications + +from .base import ToolsBase + + +class ShareSetupTools(ToolsBase): + """Tools for the knowledge transfer setup and configuration.""" + + async def update_audience(self, audience_description: str) -> str: + """ + Update the target audience description for this knowledge transfer. + + Args: + audience_description: Description of the intended audience and their existing knowledge level + + Returns: + A message indicating success or failure + """ + try: + await AudienceManager.update_audience( + context=self.context, + audience_description=audience_description, + ) + await Notifications.notify(self.context, "Audience updated.") + await Notifications.notify_all_state_update(self.context, [InspectorTab.DEBUG]) + return "Audience updated successfully" + except Exception as e: + return f"Failed to update audience: {e!s}" + + async def update_audience_takeaways(self, takeaways: list[str]) -> str: + """ + Update the key takeaways for the target audience. + + Args: + takeaways: List of key takeaways for the audience. Takeaways should be concise and directly related to the audience and what the user wants them to learn or understand. + + Returns: + A message indicating success or failure + """ # noqa: E501 + try: + await AudienceManager.update_audience_takeaways( + context=self.context, + takeaways=takeaways, + ) + await Notifications.notify(self.context, "Audience takeaways updated.") + await Notifications.notify_all_state_update(self.context, [InspectorTab.BRIEF]) + return "Audience takeaways updated successfully" + except Exception as e: + return f"Failed to update audience takeaways: {e!s}" + + # async def set_knowledge_organized(self, is_organized: bool) -> str: + # """ + # Mark that all necessary knowledge has been captured and organized for transfer. + + # This indicates that the coordinator has uploaded files, shared information through conversation, and confirmed that all necessary knowledge for the transfer has been captured. This is required before the knowledge package can move to the "Ready for Transfer" state. # noqa: E501 + + # Args: + # is_organized: True if knowledge is organized and ready, False to + # mark as currently unorganized + + # Returns: + # A message indicating success or failure + # """ + # try: + # share = await ShareManager.get_share(self.context) + # share.knowledge_organized = is_organized + # share.updated_at = datetime.now(UTC) + # await ShareManager.set_share(self.context, share) + + # if is_organized: + # guidance = "Knowledge is now marked as organized and ready. You can proceed to create your brief and set up learning objectives." # noqa: E501 + # else: + # guidance = "Knowledge is now marked as incomplete. Continue organizing your knowledge by uploading files or describing it in conversation." # noqa: E501 + # return f"Knowledge organization status updated successfully. {guidance}" + + # except Exception as e: + # return f"Failed to update knowledge organization status: {e!s}" + + async def update_brief(self, title: str, content: str) -> str: + """ + Update a brief with a title and content. The brief should avoid + filler words and unnecessary content. + + Args: + title: The title of the brief description: A description of the + knowledge share to be given to recipients as context. + content: The content of the brief. + + Returns: + A message indicating success or failure + """ + try: + await KnowledgeBriefManager.update_knowledge_brief( + context=self.context, + title=title, + content=content, + ) + return "Brief updated successfully." + except Exception as e: + return f"Failed to update brief: {e!s}" + + async def set_learning_intention(self, is_for_specific_outcomes: bool) -> str: + """ + Set or update whether this knowledge package is intended for specific learning outcomes or general exploration. If intended for learning and an objective or outcome was provided, you should run the add_learning_objective function next (don't wait). + + Args: + is_for_specific_outcomes: True if this package should have learning + objectives and outcomes, False if this is for general exploration + + Returns: + A message indicating success or failure + """ # noqa: E501 + try: + share = await ShareManager.get_share(self.context) + share.is_intended_to_accomplish_outcomes = is_for_specific_outcomes + share.updated_at = datetime.now(UTC) + await ShareManager.set_share(self.context, share) + await Notifications.notify(self.context, "Knowledge share learning intention set.") + + # Provide appropriate guidance based on the choice + if is_for_specific_outcomes: + guidance = "This knowledge package is now set for specific learning outcomes. You'll need to add learning objectives with measurable outcomes." # noqa: E501 + else: + guidance = "This knowledge package is now set for general exploration. No specific learning objectives are required." # noqa: E501 + + return f"Learning intention updated successfully. {guidance}" + + except Exception as e: + return f"Failed to update learning intention: {e!s}" + + async def create_invitation_message(self) -> str: + """ + Create an invitation message to send to audience members for the knowledge transfer. + + Args: + invitation_text: The text of the invitation to be sent to the audience. + + Returns: + A message indicating success or failure + """ + try: + invitation = await agentic.create_invitation(self.context) + return invitation + except Exception as e: + return f"Failed to create invitation: {e!s}" diff --git a/assistants/project-assistant/assistant/tools/system_reminders.py b/assistants/project-assistant/assistant/tools/system_reminders.py new file mode 100644 index 000000000..adc6fd92c --- /dev/null +++ b/assistants/project-assistant/assistant/tools/system_reminders.py @@ -0,0 +1 @@ +kick_todo_usage = "The TodoWrite tool hasn't been used recently. If you're working on tasks that would benefit from tracking progress, consider using the TodoWrite tool to track progress. Only use it if it's relevant to the current work." # noqa: E501 diff --git a/assistants/project-assistant/assistant/tools/tasks.py b/assistants/project-assistant/assistant/tools/tasks.py new file mode 100644 index 000000000..3cd373e0c --- /dev/null +++ b/assistants/project-assistant/assistant/tools/tasks.py @@ -0,0 +1,89 @@ +from assistant.data import InspectorTab, NewTaskInfo, TaskInfo, TaskPriority, TaskStatus +from assistant.domain.tasks_manager import TasksManager +from assistant.logging import logger +from assistant.notifications import Notifications + +from .base import ToolsBase + + +class TaskTools(ToolsBase): + async def add_task(self, status: str, priority: str, content: str) -> str: + """ + Add a new task to the task list. + + Args: + status (str): The new status of the task. pending, in_progress, completed, or cancelled. + priority (TaskPriority): The new priority of the task. low, medium, or high. + content (str): The content of the task to update. + + Returns: + Message indicating success or failure + """ + try: + task_info = NewTaskInfo( + status=TaskStatus(status), + priority=TaskPriority(priority), + content=content, + ) + await TasksManager.add_tasks(self.context, [task_info]) + await Notifications.notify( + self.context, + "Task added.", + debug_data={"task_info": task_info}, + ) + await Notifications.notify_state_update(self.context, [InspectorTab.DEBUG]) + return "Task added successfully." + except Exception as e: + logger.exception(f"Failed to add task: {e}") + return f"Failed to add task: {e!s}" + + async def update_task(self, task_id: str, status: str, priority: str, content: str) -> str: + """ + Update a task's status, priority, or content. Use this for managing the task list. This should be called every time work has been done on a task or when the task needs to be updated. + + Args: + status (str): The new status of the task. pending, in_progress, completed, or cancelled. + priority (TaskPriority): The new priority of the task. low, medium, or high. + content (str): The content of the task to update. + + Returns: + Message indicating success or failure + """ # noqa: E501 + try: + task_info = TaskInfo( + task_id=task_id, + status=TaskStatus(status), + priority=TaskPriority(priority), + content=content, + ) + await TasksManager.update_task(self.context, task_info) + await Notifications.notify( + self.context, + "Task updated.", + debug_data={"task_info": task_info}, + ) + await Notifications.notify_state_update(self.context, [InspectorTab.DEBUG]) + return f"Task {task_info.task_id} updated successfully." + except Exception as e: + logger.exception(f"Failed to update task: {e}") + return f"Failed to update task: {e!s}" + + async def delete_task(self, task_id: str) -> str: + """ + Mark a task completed. This should be called EVERY TIME a task has been completed. + Args: + task (str): The task UUID to mark completed. + Returns: + Message indicating success or failure + """ + try: + await TasksManager.remove_task(self.context, task_id) + await Notifications.notify(self.context, "Task marked completed.", debug_data={"task": task_id}) + await Notifications.notify_state_update(self.context, [InspectorTab.DEBUG]) + message = f"Task marked completed: {task_id}" + logger.info(message) + return "Marked completed." + except Exception as e: + message = f"Failed to mark task completed: {e!s}" + logger.exception(message) + return message diff --git a/assistants/project-assistant/assistant/tools/todo.py b/assistants/project-assistant/assistant/tools/todo.py new file mode 100644 index 000000000..672b9fe2b --- /dev/null +++ b/assistants/project-assistant/assistant/tools/todo.py @@ -0,0 +1,61 @@ +import uuid +from enum import Enum + +from pydantic import BaseModel, Field + + +class ToDoItemStatus(Enum): + """ + Enum for the status of a to-do item. + """ + + PENDING = "pending" + IN_PROGRESS = "in_progress" + COMPLETED = "completed" + + +class ToDoItemPriority(Enum): + """ + Enum for the priority of a to-do item. + """ + + HIGH = "high" + MEDIUM = "medium" + LOW = "low" + + +class ToDoItem(BaseModel): + """ + A class to represent a single to-do item. + """ + + id: str = Field(default_factory=lambda: str(uuid.uuid4())) # Unique identifier + content: str + priority: str = "medium" # Default priority is 'medium' + status: str = "pending" # Default status is 'pending' + + +class ToDoList(BaseModel): + """ + A class to represent a to-do list. + """ + + items: list[ToDoItem] = Field(default_factory=list) + + def add(self, todo: ToDoItem) -> None: + """ + Add a new to-do item. + """ + self.items.append(todo) + + def remove(self, id: str) -> None: + """ + Remove a to-do item. + """ + self.items = [item for item in self.items if item.id != id] + + def list(self) -> list[ToDoItem]: + """ + List all to-do items. + """ + return self.items diff --git a/assistants/project-assistant/assistant/ui_tabs/__init__.py b/assistants/project-assistant/assistant/ui_tabs/__init__.py new file mode 100644 index 000000000..04dfb8671 --- /dev/null +++ b/assistants/project-assistant/assistant/ui_tabs/__init__.py @@ -0,0 +1,11 @@ +""" +Inspector modules for the Knowledge Transfer Assistant. Provide different views +of the knowledge transfer state in the workbench UI. +""" + +from .brief import BriefInspector +from .debug import DebugInspector +from .learning import LearningInspector +from .sharing import SharingInspector + +__all__ = ["BriefInspector", "DebugInspector", "LearningInspector", "SharingInspector"] diff --git a/assistants/project-assistant/assistant/ui_tabs/brief.py b/assistants/project-assistant/assistant/ui_tabs/brief.py new file mode 100644 index 000000000..027bd6654 --- /dev/null +++ b/assistants/project-assistant/assistant/ui_tabs/brief.py @@ -0,0 +1,121 @@ +""" +Brief inspector for knowledge transfer status and brief information. +""" + +from semantic_workbench_assistant.assistant_app import ( + AssistantConversationInspectorStateDataModel, + ConversationContext, +) + +from assistant.data import ConversationRole, Share +from assistant.domain.share_manager import ShareManager + +from .common import get_stage_label + +# Default instructional text to show when no brief has been created +DEFAULT_BRIEF_INSTRUCTION = "_This knowledge brief is displayed in the side panel of all of your team members' conversations, too. Before you share links to your team, ask your assistant to update the brief with whatever details you'd like here. What will help your teammates get off to a good start as they explore the knowledge you are sharing?_" # noqa: E501 + + +class BriefInspector: + """ + Inspector for knowledge transfer status and brief information. + + Shows role, stage, status message, and knowledge brief content. + """ + + display_name = "📋 Brief" + description = "Knowledge share overview" + state_id = "brief" + + def __init__(self, config_provider) -> None: + self.config_provider = config_provider + + async def is_enabled(self, context: ConversationContext) -> bool: + return True + + async def get(self, context: ConversationContext) -> AssistantConversationInspectorStateDataModel: + """Get brief and status information for display.""" + + share = await ShareManager.get_share(context) + + conversation_role = await ShareManager.get_conversation_role(context) + if conversation_role == ConversationRole.COORDINATOR: + markdown = await self._format_coordinator_brief(share) + else: + markdown = await self._format_team_brief(share) + + return AssistantConversationInspectorStateDataModel(data={"content": markdown}) + + async def _format_coordinator_brief( + self, + share: Share, + ) -> str: + """Format brief information for coordinator.""" + + lines: list[str] = [] + + # Stage + stage_label = get_stage_label(share, for_coordinator=True) + lines.append(f"**Stage:** {stage_label}") + + # Audience and takeaways + lines.append("## Audience") + lines.append(share.audience if share.audience else "_No audience defined._") + + if share.audience_takeaways: + lines.append("### Key Takeaways") + lines.append("") + for takeaway in share.audience_takeaways: + lines.append(f"- {takeaway}") + lines.append("") + + brief = share.brief + if brief and brief.title: + title = brief.title + lines.append(f"## {title}") + lines.append("") + else: + lines.append("## Knowledge Brief") + lines.append("") + + if brief and brief.content: + lines.append(brief.content) + lines.append("") + else: + lines.append(DEFAULT_BRIEF_INSTRUCTION) + lines.append("") + + return "\n".join(lines) + + async def _format_team_brief(self, share: Share) -> str: + """Format brief information for team members.""" + + lines: list[str] = [] + + # Stage + stage_label = get_stage_label(share, for_coordinator=False) + lines.append(f"**Stage:** {stage_label}") + + brief = share.brief + if brief: + title = brief.title + lines.append(f"## {title}") + lines.append("") + + if share.audience_takeaways: + lines.append("### Key Takeaways") + lines.append("") + for takeaway in share.audience_takeaways: + lines.append(f"- {takeaway}") + lines.append("") + + if brief and brief.content: + lines.append(brief.content) + lines.append("") + else: + lines.append("## Knowledge Brief") + lines.append("") + lines.append("_The coordinator is still setting up the knowledge brief. Check back soon!_") + lines.append("") + + return "\n".join(lines) diff --git a/assistants/project-assistant/assistant/ui_tabs/common.py b/assistants/project-assistant/assistant/ui_tabs/common.py new file mode 100644 index 000000000..c60c7b88f --- /dev/null +++ b/assistants/project-assistant/assistant/ui_tabs/common.py @@ -0,0 +1,91 @@ +""" +Common utilities for inspector modules. +""" + +from assistant.data import RequestPriority, RequestStatus, Share, TaskPriority, TaskStatus +from assistant.domain import TransferManager + + +def get_status_emoji(status: RequestStatus) -> str: + """Get emoji representation for request status.""" + status_emojis = { + RequestStatus.NEW: "🆕", # New + RequestStatus.ACKNOWLEDGED: "👀", # Acknowledged/Seen + RequestStatus.IN_PROGRESS: "⚡", # In Progress + RequestStatus.RESOLVED: "✅", # Resolved/Complete + RequestStatus.DEFERRED: "⏸️", # Deferred/Paused + } + return status_emojis.get(status, "❓") # Unknown status fallback + + +def task_priority_emoji(priority: TaskPriority) -> str: + """Get emoji representation for task priority.""" + priority_emojis = { + TaskPriority.LOW: "🔹", # Low priority - blue diamond + TaskPriority.MEDIUM: "🔶", # Medium priority - orange diamond + TaskPriority.HIGH: "🔴", # High priority - red circle + } + return priority_emojis.get(priority, "🔹") # Default to low priority emoji + + +def task_status_emoji(status: TaskStatus) -> str: + """Get emoji representation for task status.""" + status_emojis = { + TaskStatus.PENDING: "⏳", # Pending - hourglass + TaskStatus.IN_PROGRESS: "⚙️", # In Progress - gear + TaskStatus.COMPLETED: "✅", # Completed - check mark + TaskStatus.CANCELLED: "❌", # Cancelled - cross mark + } + return status_emojis.get(status, "❓") # Unknown status fallback + + +def get_priority_emoji(priority: RequestPriority) -> str: + """Get emoji representation for request priority.""" + priority_emojis = { + RequestPriority.LOW: "🔹", # Low priority - blue diamond + RequestPriority.MEDIUM: "🔶", # Medium priority - orange diamond + RequestPriority.HIGH: "🔴", # High priority - red circle + RequestPriority.CRITICAL: "⚠️", # Critical priority - warning sign + } + return priority_emojis.get(priority, "🔹") # Default to low priority emoji + + +def get_stage_label(share: Share, for_coordinator: bool = True) -> str: + """ + Get a human-readable stage label based on current share state. + + Args: + share: The knowledge share to get label for + for_coordinator: Whether to return coordinator-focused or team-focused labels + + Returns: + str: Stage label with emoji + """ + if for_coordinator: + # Coordinator perspective + if not share.audience: + return "🎯 Defining Audience" + # elif not share.knowledge_organized: + # return "📋 Organizing Knowledge" + elif not share.brief: + return "📝 Creating Brief" + elif share.is_intended_to_accomplish_outcomes and not share.learning_objectives: + return "📚 Adding Objectives" + elif not TransferManager.is_ready_for_transfer(share): + return "📋 Finalizing Setup" + elif share.is_intended_to_accomplish_outcomes and TransferManager._is_transfer_complete(share): + return "✅ Transfer Complete" + elif TransferManager.is_actively_sharing(share): + return "📤 Sharing in Progress" + else: + return "🚀 Ready for Transfer" + else: + # Team perspective + if not TransferManager.is_ready_for_transfer(share): + return "⏳ Knowledge Being Organized" + elif not share.is_intended_to_accomplish_outcomes: + return "🔍 Exploring Knowledge" + elif share.is_intended_to_accomplish_outcomes: + return "🎯 Active Learning" + else: + return "🎯 Active Learning" diff --git a/assistants/project-assistant/assistant/ui_tabs/debug.py b/assistants/project-assistant/assistant/ui_tabs/debug.py new file mode 100644 index 000000000..51ce23a66 --- /dev/null +++ b/assistants/project-assistant/assistant/ui_tabs/debug.py @@ -0,0 +1,114 @@ +""" +Debug inspector for internal assistant state and knowledge digest. +""" + +from semantic_workbench_assistant.assistant_app import ( + AssistantConversationInspectorStateDataModel, + ConversationContext, +) + +from assistant.data import ConversationRole, Share +from assistant.domain import KnowledgeDigestManager, ShareManager, TransferManager +from assistant.domain.conversation_preferences_manager import ConversationPreferencesManager +from assistant.domain.tasks_manager import TasksManager +from assistant.ui_tabs.common import task_priority_emoji, task_status_emoji + + +class DebugInspector: + """ + Inspector for debug information and internal assistant state. + + Shows the knowledge digest and other internal information maintained by the assistant. + """ + + display_name = "🐛 Debug" + description = "Internal assistant state and knowledge digest" + state_id = "debug" + + def __init__(self, config_provider) -> None: + self.config_provider = config_provider + + async def is_enabled(self, context: ConversationContext) -> bool: + return True + + async def get(self, context: ConversationContext) -> AssistantConversationInspectorStateDataModel: + """Get debug information for display.""" + + # Get share information + share = await ShareManager.get_share(context) + markdown = await self._format_debug_info(context, share) + return AssistantConversationInspectorStateDataModel(data={"content": markdown}) + + async def _format_debug_info(self, context: ConversationContext, share: Share) -> str: + """Format debug information including knowledge digest.""" + + lines: list[str] = [] + + lines.append("## Debug Information") + lines.append("_This panel shows internal information maintained by the assistant. This data is automatically") + lines.append("generated and updated by the assistant and is not directly editable by users._") + lines.append("") + + # Share metadata + share = await ShareManager.get_share(context) + lines.append("## Share Metadata") + lines.append(f"- **Share ID:** `{share.share_id}`") + lines.append(f"- **Created:** {share.created_at.strftime('%Y-%m-%d %H:%M:%S')}") + lines.append(f"- **Last Updated:** {share.updated_at.strftime('%Y-%m-%d %H:%M:%S')}") + lines.append(f"- **Team Conversations:** {len(share.team_conversations) if share.team_conversations else 0}") + lines.append(f"- **Learning Objectives:** {len(share.learning_objectives) if share.learning_objectives else 0}") + # lines.append(f"- **Knowledge Organized:** {share.knowledge_organized}") + lines.append(f"- **Ready for Transfer:** {TransferManager.is_ready_for_transfer(share)}") + lines.append(f"- **Actively Sharing:** {TransferManager.is_actively_sharing(share)}") + if share.coordinator_conversation_id: + lines.append(f"- **Conversation ID:** `{share.coordinator_conversation_id}`") + lines.append("") + + # Conversation metadata + lines.append("## Conversation Metadata") + role_type = await ShareManager.get_conversation_role(context) + role = "Coordinator" if role_type == ConversationRole.COORDINATOR else "Team Member" + lines.append(f"- **Role:** {role}") + style = await ConversationPreferencesManager.get_preferred_communication_style(context) + lines.append(f"- **Preferred Communication Style:** {style}") + + # Tasks + lines.append("## Assistant task list") + tasks = await TasksManager.get_tasks(context) + if tasks: + for task in tasks: + lines.append(f"- {task_status_emoji(task.status)} {task_priority_emoji(task.priority)} {task.content}") + lines.append("") + else: + lines.append("_No tasks recorded yet._") + + # knowledge digest + try: + digest = await KnowledgeDigestManager.get_knowledge_digest(context) + + lines.append("## Knowledge Digest") + lines.append("") + lines.append("The knowledge digest is an internal summary of the conversation that the assistant") + lines.append("maintains to help understand the context and key information being shared. It is") + lines.append("automatically updated as the conversation progresses.") + lines.append("") + + if digest and digest.content: + lines.append("### Current Digest Content") + lines.append("") + lines.append("```markdown") + lines.append(digest.content) + lines.append("```") + lines.append("") + else: + lines.append("_No knowledge digest has been generated yet. The assistant will create and update_") + lines.append("_this automatically as the conversation develops._") + lines.append("") + + except Exception as e: + lines.append("## Knowledge Digest") + lines.append("") + lines.append(f"**Error retrieving knowledge digest:** {e!s}") + lines.append("") + + return "\n".join(lines) diff --git a/assistants/project-assistant/assistant/ui_tabs/learning.py b/assistants/project-assistant/assistant/ui_tabs/learning.py new file mode 100644 index 000000000..a2c6ce64f --- /dev/null +++ b/assistants/project-assistant/assistant/ui_tabs/learning.py @@ -0,0 +1,158 @@ +""" +Learning inspector for learning objectives and progress tracking. +""" + +from typing import Any + +from semantic_workbench_assistant.assistant_app import ( + AssistantConversationInspectorStateDataModel, + ConversationContext, +) + +from assistant.data import ConversationRole +from assistant.domain import LearningObjectivesManager, ShareManager + + +class LearningInspector: + """ + Inspector for learning objectives and progress tracking. + + Shows learning objectives, outcomes, and completion progress. + """ + + display_name = "🎯 Learning" + description = "Learning objectives and progress tracking" + state_id = "objectives" + + def __init__(self, config_provider) -> None: + self.config_provider = config_provider + + async def is_enabled(self, context: ConversationContext) -> bool: + return True + + async def get(self, context: ConversationContext) -> AssistantConversationInspectorStateDataModel: + """Get learning objectives and progress information.""" + + conversation_role = await ShareManager.get_conversation_role(context) + + # Get share information + share_id = await ShareManager.get_share_id(context) + if not share_id: + return AssistantConversationInspectorStateDataModel( + data={"content": "No active knowledge package. Start a conversation to create one."} + ) + + share = await ShareManager.get_share(context) + + if conversation_role == ConversationRole.COORDINATOR: + markdown = await self._format_coordinator_objectives(share, context) + else: + markdown = await self._format_team_objectives(share, context) + + return AssistantConversationInspectorStateDataModel(data={"content": markdown}) + + async def _format_coordinator_objectives(self, share: Any, context: ConversationContext) -> str: + """Format learning objectives for coordinator.""" + + lines: list[str] = [] + + if not share or not share.learning_objectives: + lines.append("## Learning Objectives") + lines.append( + "_No learning objectives have been set up yet. When shared, the assistant will help your recipients explore the knowledge in a more open way, helping them discover the important aspects of the knowledge without specific objectives or outcomes. If you would like to have a more formal process, ask your assistant to help you create learning objectives and outcomes._" # noqa: E501 + ) + return "\n".join(lines) + + # Overall progress summary + total_outcomes = sum(len(obj.learning_outcomes) for obj in share.learning_objectives if obj.learning_outcomes) + if total_outcomes > 0 and share.team_conversations: + lines.append("## Team Progress") + for conv_id, team_conv in share.team_conversations.items(): + achieved, total = LearningObjectivesManager.get_completion_for_conversation(share, conv_id) + progress_pct = int(achieved / total * 100) if total > 0 else 0 + lines.append(f"- **{team_conv.redeemer_name}**: {achieved}/{total} outcomes ({progress_pct}%)") + + # Detailed objectives + lines.append("## Learning Objectives") + for objective in share.learning_objectives: + lines.append(f"### 🎯 {objective.name}") + lines.append(objective.description) + + if objective.learning_outcomes: + lines.append("#### Learning Outcomes") + for criterion in objective.learning_outcomes: + # Check if any team conversation has achieved this outcome + achieved_by_any = any( + LearningObjectivesManager.is_outcome_achieved_by_conversation(share, criterion.id, conv_id) + for conv_id in share.team_conversations + ) + status_emoji = "✅" if achieved_by_any else "⬜" + + # Show progress ratio for team completion + achieved_count = 0 + total_team_count = len(share.team_conversations) + + for conv_id in share.team_conversations: + if LearningObjectivesManager.is_outcome_achieved_by_conversation(share, criterion.id, conv_id): + achieved_count += 1 + + achievement_info = "" + if total_team_count > 0: + achievement_info = f" ({achieved_count}/{total_team_count})" + + lines.append(f"- {status_emoji} {criterion.description}{achievement_info}") + + return "\n".join(lines) + + async def _format_team_objectives(self, share: Any, context: ConversationContext) -> str: + """Format learning objectives for team members.""" + + lines: list[str] = [] + + if not share or not share.learning_objectives: + lines.append("## Learning Objectives") + lines.append( + "_The coordinator hasn't set up specific learning objectives for this shared knowledge. " + "Enjoy exploring at your own pace! " + "The assistant will guide you towards important information as you go._" + ) + return "\n".join(lines) + + lines.append("## Learning Objectives") + + # Show my personal progress + conversation_id = str(context.id) + achieved_outcomes, total_outcomes = LearningObjectivesManager.get_completion_for_conversation( + share, conversation_id + ) + progress_pct = int(achieved_outcomes / total_outcomes * 100) if total_outcomes > 0 else 0 + lines.append(f"**My Progress:** {achieved_outcomes}/{total_outcomes} outcomes achieved ({progress_pct}%)") + + for objective in share.learning_objectives: + lines.append(f"### 🎯 {objective.name}") + lines.append(objective.description) + + if objective.learning_outcomes: + lines.append("") + lines.append("#### Learning Outcomes") + for criterion in objective.learning_outcomes: + # Check if I've achieved this outcome + achieved_by_me = LearningObjectivesManager.is_outcome_achieved_by_conversation( + share, criterion.id, conversation_id + ) + status_emoji = "✅" if achieved_by_me else "⬜" + + completion_info = "" + if achieved_by_me: + # Find my achievement record + my_achievements = LearningObjectivesManager.get_achievements_for_conversation( + share, conversation_id + ) + for achievement in my_achievements: + if achievement.outcome_id == criterion.id and achievement.achieved: + completion_info = f" (achieved on {achievement.achieved_at.strftime('%Y-%m-%d')})" + break + + lines.append(f"- {status_emoji} {criterion.description}{completion_info}") + + return "\n".join(lines) diff --git a/assistants/project-assistant/assistant/ui_tabs/sharing.py b/assistants/project-assistant/assistant/ui_tabs/sharing.py new file mode 100644 index 000000000..33c9d0d53 --- /dev/null +++ b/assistants/project-assistant/assistant/ui_tabs/sharing.py @@ -0,0 +1,167 @@ +""" +Sharing inspector for information requests and responses. +""" + +from typing import Any + +from semantic_workbench_assistant.assistant_app import ( + AssistantConversationInspectorStateDataModel, + ConversationContext, +) + +from assistant.data import ConversationRole, RequestStatus +from assistant.domain import ( + InformationRequestManager, + LearningObjectivesManager, + ShareManager, +) + +from .common import get_priority_emoji, get_status_emoji + + +class SharingInspector: + """ + Inspector for information requests and responses. + + Shows pending and resolved information requests. + """ + + display_name = "🔗 Sharing" + description = "Sharing and information requests" + state_id = "requests" + + def __init__(self, config_provider) -> None: + self.config_provider = config_provider + + async def is_enabled(self, context: ConversationContext) -> bool: + return True + + async def get(self, context: ConversationContext) -> AssistantConversationInspectorStateDataModel: + """Get information requests for display.""" + + conversation_role = await ShareManager.get_conversation_role(context) + + # Get share information + share_id = await ShareManager.get_share_id(context) + if not share_id: + return AssistantConversationInspectorStateDataModel( + data={"content": "No active knowledge package. Start a conversation to create one."} + ) + + requests = await InformationRequestManager.get_information_requests(context) + + if conversation_role == ConversationRole.COORDINATOR: + markdown = await self._format_coordinator_requests(requests, context) + else: + markdown = await self._format_team_requests(requests, context) + + return AssistantConversationInspectorStateDataModel(data={"content": markdown}) + + async def _format_coordinator_requests(self, requests: list[Any], context: ConversationContext) -> str: + """Format sharing information and requests for coordinator.""" + + lines: list[str] = [] + + # Share URL section at the top + share = await ShareManager.get_share(context) + share_url = share.share_url if share else None + if share_url: + lines.append("## Share Link") + lines.append("") + lines.append("**Share this link with your team members:**") + lines.append(f"[Knowledge Transfer link]({share_url})") + lines.append("") + lines.append("The link never expires and can be used by multiple team members.") + lines.append("") + + # Filter requests by status + pending_requests = [req for req in requests if req.status != RequestStatus.RESOLVED] + resolved_requests = [req for req in requests if req.status == RequestStatus.RESOLVED] + + lines.append("## Information Requests") + lines.append("") + + if pending_requests: + lines.append(f"### Open Requests ({len(pending_requests)})") + lines.append("") + + for request in pending_requests: + priority_emoji = get_priority_emoji(request.priority) + status_emoji = get_status_emoji(request.status) + lines.append(f"{priority_emoji} **{request.title}** {status_emoji}") + lines.append(f"*From:* {request.conversation_id}") + lines.append(request.description) + lines.append("") + + if resolved_requests: + lines.append(f"### Resolved Requests ({len(resolved_requests)})") + lines.append("") + + for request in resolved_requests[:5]: # Show only first 5 resolved + lines.append(f"✅ **{request.title}**") + lines.append(f"*From:* {request.conversation_id}") + if hasattr(request, "resolution") and request.resolution: + lines.append(f"*Resolution:* {request.resolution}") + lines.append("") + + if not pending_requests and not resolved_requests: + lines.append("No information requests yet.") + lines.append("") + lines.append("_Team members can ask questions and create information requests that will appear here._") + + # Team summary + if share and share.team_conversations: + lines.append("## Team Summary") + lines.append(f"**Active team members:** {len(share.team_conversations)}") + lines.append("") + + for conv_id, team_conv in share.team_conversations.items(): + achieved, total = LearningObjectivesManager.get_completion_for_conversation(share, conv_id) + progress_pct = int(achieved / total * 100) if total > 0 else 0 + lines.append(f"- **{team_conv.redeemer_name}**: {achieved}/{total} outcomes ({progress_pct}%)") + lines.append(f" Joined: {team_conv.joined_at.strftime('%Y-%m-%d %H:%M')}") + lines.append(f" Last active: {team_conv.last_active_at.strftime('%Y-%m-%d %H:%M')}") + lines.append("") + + return "\n".join(lines) + + async def _format_team_requests(self, requests: list[Any], context: ConversationContext) -> str: + """Format sharing information and requests for team members.""" + + lines: list[str] = [] + + # Filter to my requests only + my_requests = [r for r in requests if r.conversation_id == str(context.id)] + + lines.append("## My Information Requests") + + if my_requests: + pending = [r for r in my_requests if r.status != "resolved"] + resolved = [r for r in my_requests if r.status == "resolved"] + + if pending: + lines.append(f"### Pending Requests ({len(pending)})") + lines.append("") + for request in pending: + priority_emoji = get_priority_emoji(request.priority) + status_emoji = get_status_emoji(request.status) + lines.append(f"{priority_emoji} **{request.title}** {status_emoji}") + lines.append(request.description) + lines.append("") + + if resolved: + lines.append(f"### Resolved Requests ({len(resolved)})") + lines.append("") + for request in resolved: + lines.append(f"✅ **{request.title}**") + if hasattr(request, "resolution") and request.resolution: + lines.append(f"*Resolution:* {request.resolution}") + lines.append("") + else: + lines.append("You haven't created any information requests yet.") + lines.append("") + lines.append( + "_Your assistant will help you create information requests to the knowledge coordinator if it is unable to answer your questions directly._" # noqa: E501 + ) + + return "\n".join(lines) diff --git a/assistants/project-assistant/assistant/utils.py b/assistants/project-assistant/assistant/utils.py index 4f92e30cf..008b88020 100644 --- a/assistants/project-assistant/assistant/utils.py +++ b/assistants/project-assistant/assistant/utils.py @@ -1,21 +1,21 @@ """ -Utility functions for the project assistant module. +Utility functions for the knowledge transfer assistant module. -This module provides common utility functions used across the project assistant +This module provides common utility functions used across the knowledge transfer assistant codebase, helping to reduce code duplication and maintain consistency. """ import pathlib -from typing import Optional, Tuple from semantic_workbench_assistant.assistant_app import ConversationContext -from .logging import logger +from assistant.errors import NoUserException +from assistant.string_utils import render DEFAULT_TEMPLATE_ID = "default" -def load_text_include(filename) -> str: +def load_text_include(filename: str, replacements: dict[str, str] = {}) -> str: """ Helper for loading an include from a text file. @@ -25,26 +25,15 @@ def load_text_include(filename) -> str: Returns: The content of the text file """ - # Get directory relative to this module directory = pathlib.Path(__file__).parent - - # Get the file path for the prompt file file_path = directory / "text_includes" / filename + text = file_path.read_text() + return render(text, replacements) - # Read the prompt from the file - return file_path.read_text() - - -async def get_current_user(context: ConversationContext) -> Tuple[Optional[str], Optional[str]]: - """ - Extract the current user ID and name from the conversation context. - Args: - context: The conversation context to extract user information from - - Returns: - A tuple containing (user_id, user_name), both may be None if no user is found - """ +async def get_current_user( + context: ConversationContext, +) -> tuple[str, str | None]: participants = await context.get_participants() user_id = None user_name = None @@ -55,37 +44,12 @@ async def get_current_user(context: ConversationContext) -> Tuple[Optional[str], user_name = participant.name break - return user_id, user_name - + if not user_id: + raise NoUserException -async def get_current_user_id(context: ConversationContext) -> Optional[str]: - """ - Extract just the current user ID from the conversation context. + return user_id, user_name - Args: - context: The conversation context to extract user information from - Returns: - The user ID, or None if no user is found - """ +async def get_current_user_id(context: ConversationContext) -> str: user_id, _ = await get_current_user(context) return user_id - - -async def require_current_user(context: ConversationContext, operation_name: str) -> Optional[str]: - """ - Extract the current user ID and log an error if none is found. - - Args: - context: The conversation context to extract user information from - operation_name: Name of the operation requiring a user, for error logging - - Returns: - The user ID, or None if no user is found (after logging an error) - """ - user_id = await get_current_user_id(context) - - if not user_id: - logger.error(f"Cannot {operation_name}: no user found in conversation") - - return user_id diff --git a/assistants/project-assistant/docs/ASSISTANT_LIBRARY_NOTES.md b/assistants/project-assistant/docs/ASSISTANT_LIBRARY_NOTES.md deleted file mode 100644 index 5fc670ba1..000000000 --- a/assistants/project-assistant/docs/ASSISTANT_LIBRARY_NOTES.md +++ /dev/null @@ -1,94 +0,0 @@ -# Semantic Workbench Assistant Library - -This document provides an overview of the Semantic Workbench Assistant library found in `/workspaces/semanticworkbench/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant`. - -## Overview - -The semantic-workbench-assistant library provides a framework for building assistants that integrate with the Semantic Workbench platform. It handles communication protocols, state management, event handling, and provides an abstraction layer that simplifies assistant development. - -## Key Components - -### Core Classes - -- **AssistantApp**: The main entry point for creating assistants with event subscriptions. - - Configures service metadata, capabilities, and providers - - Initializes event handling system - - Creates the FastAPI application - -- **ConversationContext**: Interface for interacting with conversations - - Manages messages, files, and conversation state - - Provides methods for conversation operations - - Integrates with the Workbench client for API operations - -- **AssistantContext**: Holds information about the assistant identity - -### State Management - -- **File-based persistence**: - - `storage.py` provides `read_model()` and `write_model()` for serializing Pydantic models to files - - Models are stored as JSON in a configurable storage directory - - `storage_directory_for_context()` creates unique paths for each assistant/conversation - -- **Context objects**: - - `AssistantContext` and `ConversationContext` serve as state containers - - Conversation-specific operations are accessed through the context - -### Communication - -- **Event-driven architecture**: - - Assistants subscribe to conversation events (messages, participants, files) - - Asynchronous event processing queues decouple event reception from handling - - Event system notifies the assistant of changes to track state - -- **API Integration**: - - Uses a client to communicate with the Workbench service - - Provides methods for sending messages, managing files, and updating state - -## Usage for Project Assistant - -For the Project Assistant, the library provides: - -1. **File storage mechanisms** for persisting project state between sessions -2. **Context objects** for accessing conversation data and performing operations -3. **Event handling** for reacting to changes in conversations -4. **Cross-conversation capabilities** through API clients -5. **Abstraction layer** for Workbench service integration - -## Implementation Details - -### Storage Pattern - -```python -# Example of reading/writing models -from semantic_workbench_assistant.storage import read_model, write_model - -# Write a model to storage -def save_state(context, data): - path = storage_directory_for_context(context) / "project_data.json" - write_model(path, data) - -# Read a model from storage -def load_state(context, model_class): - path = storage_directory_for_context(context) / "project_data.json" - return read_model(path, model_class) -``` - -### Context Usage - -```python -# Example of context methods -async def process_message(context: ConversationContext, message): - # Send a response - await context.send_messages(NewConversationMessage( - content="Processing your request", - message_type=MessageType.chat - )) - - # Access files - files = await context.get_files() - - # Update conversation state - await context.send_conversation_state_event( - AssistantStateEvent(state_id="project_dashboard", event="updated", state=None) - ) -``` \ No newline at end of file diff --git a/assistants/project-assistant/docs/DESIGN.md b/assistants/project-assistant/docs/DESIGN.md deleted file mode 100644 index 9ad66bffd..000000000 --- a/assistants/project-assistant/docs/DESIGN.md +++ /dev/null @@ -1,259 +0,0 @@ -# Project Assistant Implementation Plan - -## Overview - -The Project Assistant is designed as a dual-role context transfer system that facilitates knowledge transfer between different conversations in the Semantic Workbench. It provides a structured way for Coordinators to create project information and Team members to access it, with bidirectional updates and communication. - -## System Design - -### Configuration Templates - -The Project Assistant supports two different configuration templates within a unified codebase. The templates modify the behavior of the assistants considerably, so we basically have two different assistants with this single assistant codebase. - -1. **Default Template (Project Assistant)**: - - Full project management capabilities with tracking features - - Includes goals, success criteria, and project state monitoring - - Tracks progress of project tasks and completion status - - Uses "Project Assistant" branding and terminology - - Provides comprehensive project dashboard with status tracking - - Focuses on project management workflow with sequential stages - -2. **Context Transfer Template (Context Transfer Assistant)**: - - Simplified knowledge sharing without project tracking features - - Designed for knowledge transfer without formal project structure - - No goals or success criteria tracking - - Uses "Context Transfer Assistant" branding and terminology - - Maintains core information request capabilities without project stages - - Different welcome messages and UI labels appropriate for knowledge sharing - -The system automatically adapts its behavior, prompts, and UI based on which template is selected during assistant instantiation, while maintaining a unified codebase and consistent architecture. - -Some features remain in both assistant configurations: - -- Both assistants maintain a "whiteboard" internally to build up context of the project (the "project" for the Context Transfer Assistant is to transfer the context well, while for the Project Assistant it is a project in a more formal sense). The whiteboard is updated by the assistant each time they reply to the user. The whiteboard is distinct from the project information dashboard which is a collaboration between the user and the assistant. -- Both assistants syncronize project information and files between coordinators and team members. -- Both assistants facilitate the creation of information requests by team members, and the answering of information requests by the coordinators. -- Both assistants can speak conversationally and run their own sets of tools. - -### Conversation Structure - -The Project Assistant (in both configurations) manages three distinct types of conversations: - -1. **Coordinator Conversation**: - - Created when a user first interacts with the Project Assistant - - Acts as the personal workspace for the project owner/coordinator - - Contains private communication between the coordinator and the assistant - - Stores the link to the shareable team conversation - - Used for high-level project management and planning - -2. **Shareable Team Conversation**: - - Automatically created when a coordinator starts a new project - - Never directly used by any user - serves as a template only - - Has a share URL associated with it - - When team members click the share link, they get a copy of this conversation - - Contains project-specific setup and metadata - -3. **Team Conversation(s)**: - - Created when a team member redeems the share URL - - Each team member gets their own personal conversation - - All team conversations are linked to the same project - - Used for team members to work on the project, make information requests, etc. - - Automatically set up with the team member role - -### Conversation Roles - -Within each configuration template, the Project Assistant supports two distinct conversation roles: - -1. **Coordinator Role**: - - Knowledge Base Development: Collection and organization of project-critical information - - Information Request Resolution: Coordinator resolves information requests from team members - - **In Default Template**: - - Project Brief Creation with goals and success criteria - - Project Preparation with staged milestones - - "Ready for Working" milestone management - - **In Context Transfer Template**: - - Knowledge organization without formal project stages - - Focus on information structuring without tracking progress - -2. **Team Member Role**: - - Information Access: Team members interact with the shared Knowledge Base - - Request Management: Team members create and delete information requests as needed - - **In Default Template**: - - Progress Tracking with criteria completion - - Dashboard updates with completion status - - Support for "Project Completion" milestone - - **In Context Transfer Template**: - - Knowledge exploration without progress tracking - - Information requests without formal project stages - -For both configuration templates, the system supports an iterative and asynchronous workflow where the team members' operations and the coordinator's support activities can occur concurrently. The default template provides a comprehensive project dashboard with status tracking, while the context transfer template focuses on knowledge exchange without formal project stages. - -### Key Architectural Features - -1. **Simplified Invitation System**: - - Uses Semantic Workbench features to clone new team conversations from shareable conversations. The coordinator gives the team members redeemable share links out-of-band. - -2. **Comprehensive LLM Context**: - - Project data (brief, info, whiteboard, requests) embedded directly in prompts - - Role-specific formatting to highlight relevant information - - Dynamic listing of information requests with proper ID formatting - - Intelligent truncation to manage context length - - Improves response quality by reducing the need for tool calls - -3. **Robust Information Request Management**: - - Complete lifecycle from creation to deletion - - Enhanced UUID handling with multiple matching strategies - - Conversation-based ownership controls - - Role-appropriate visibility of requests - - Proper notification for all parties - -4. **Coordinator Conversation Sharing**: - - Selective Coordinator conversation message sharing with team members - - Storage in a centralized JSON file for all team members to access - - Automatic capture of both user and assistant messages - - Metadata preservation including sender name and timestamp - - Limited to recent messages (last 50) to prevent excessive storage - - Team members can view Coordinator discussions for better context awareness - -## Data - -The Project Assistant manages several key entities that work together to provide a cohesive experience: - -1. **Project Brief**: A clear, concise statement of the project, including goals, success criteria, and high-level context necessary for the Team to start. Owned by Coordinator, with individual success criteria that can be marked complete by Team members. - -2. **Project Whiteboard**: A dynamic, automatically updated knowledge repository that captures key information from conversations. The whiteboard is continuously updated as the coordinator interacts with the assistant, extracting and organizing essential project context. It's formatted in Markdown and made available to all team members without requiring manual maintenance. - -3. **Project Info**: Core metadata and state information about the project, including its unique ID, name, current lifecycle state, conversation IDs, share URL, and status messages. This model serves as the central reference point for project identification and collaboration settings. It replaced the previous dashboard entity to eliminate duplication and provide cleaner separation between data and UI. - -4. **Information Requests**: A concise, prioritized list of Team needs—specifically unresolved blockers, missing information, or required resources—logged for Coordinator review and resolution. Created and deletable by Team members, resolved by Coordinator, with robust UUID-based identification. - -5. **Project Log**: A chronological record of all actions and interactions during the project, including updates to the project whiteboard, creation and deletion of information requests, and progress reports from the team. Maintained by the system, visible to both coordinator and team members. - -6. **Coordinator Conversation Storage**: A selective representation of key Coordinator conversation messages made accessible to Team members for context. Includes both user and assistant messages with metadata, limited to the most recent 50 messages to prevent excessive storage growth, with proper attribution of message sources. - -The State Inspector UI component (visible tab in the Semantic Workbench) dynamically composes information from these entities to present a unified view, rather than relying on a single "dashboard" entity. This decoupling of data from UI allows for more flexible presentation and eliminates redundancy. - -## Storage Architecture - -The Project Assistant leverages the Semantic Workbench Assistant library's storage capabilities to maintain project state and artifacts. The storage architecture is structured as follows: - -``` -projects/ -├── project_id_1/ -│ ├── linked_conversations/ # Directory tracking all linked conversations -│ │ ├── conversation_id_1 # Empty file - just presence indicates linkage -│ │ ├── conversation_id_2 # Empty file for another linked conversation -│ │ └── ... # One file per linked conversation -│ ├── requests/ # Information requests directory -│ │ ├── request_id_1.json # Individual request files -│ │ └── request_id_2.json # Each with a unique UUID -│ ├── project.json # Core project information -│ ├── brief.json # Brief data -│ ├── whiteboard.json # Automatically updated knowledge content -│ ├── log.json # Chronological event log -│ └── coordinator_conversation.json # Recent coordinator messages for team access -└── project_id_2/ - └── ... -``` - -Additionally, conversation-specific data is stored in the assistant library's context-specific storage. This provides the mechanism for the assistant to know which project it is a part of: - -``` -.data/assistants/{assistant_id}/conversations/{conversation_id}/ -├── project_role.json # Role of this conversation (coordinator or team) -└── project_association.json # Project this conversation is associated with -``` - -Key implementation details: - -- Using the assistant library's `storage_directory_for_context()` to generate unique storage paths -- Storing Pydantic models via the library's `read_model()` and `write_model()` functions -- Each project gets a unique folder containing all shared project data -- Conversation roles and project associations tracked in conversation-specific storage -- Linked conversations tracked with empty files in a special directory -- Information requests stored as individual files with UUID-based filenames -- Auto-updating whiteboard maintained with AI-processed conversation content -- Coordinator conversation messages stored centrally with a maximum of 50 recent messages -- Project log maintained as a single growing JSON file with chronological entries -- Clean separation between conversation-specific and shared project data - -## Role-Based Behavior - -The project assistant provides a customized experience based on whether the user is in Coordinator or Team mode: - -### Coordinator Role - -- Creates and updates the Project Brief with goals and success criteria -- Contributes to the auto-updating Project Whiteboard through conversations -- Shares a unique project URL with team members for easy access -- Receives and resolves Information Requests from team members -- Sees all active requests from all team members with their priorities -- Controls milestone transitions (in default template) -- Receives notifications when team members delete their requests -- Gets comprehensive project data directly in the LLM prompt context - -### Team Member Role - -- Works with the Project Whiteboard that's automatically updated based on coordinator conversations -- Creates Information Requests when encountering information gaps or blockers -- Deletes Information Requests that are no longer needed -- Joins projects by redeeming the share URL provided by the coordinator -- Views requests from other team members in read-only mode -- Reports on progress and findings -- Marks individual success criteria as completed (in default template) -- Views recent coordinator conversations for additional context -- Gets comprehensive project data directly in the LLM prompt context - -## Data Models - -Five key entity types provide the foundation for project communication: - -1. **Project Brief**: - - Project name and description - - Goals with priority levels - - Success criteria with completion tracking - - Individual criterion completion with timestamp and attribution - - Version tracking for modifications - -2. **Project Whiteboard**: - - Dynamically generated and auto-updated content - - AI-powered synthesis of conversation content - - Simplified Markdown formatting for readability - - Version tracking with timestamps - - Automatic organization of key information - - Content truncation to maintain manageable size (limited to ~2000 tokens) - - Updated after each assistant message in coordinator conversations - -3. **Project Info**: - - Unique project identifier and name - - Current project state tracking (planning, ready_for_working, in_progress, completed, aborted) - - Coordinator and team conversation IDs - - Shareable invitation URL for team members - - Status messages and custom project notes - - Creation and update timestamps - - Serves as the central reference for project metadata - - Replaced previous dashboard entity to decouple data from UI - -4. **Information Requests**: - - Prioritized information needs (low, medium, high, critical) - - Status tracking (new, acknowledged, in_progress, resolved, deferred) - - Complete request lifecycle (creation, deletion) - - UUID-based identification with flexible matching - - Resolution information and update history - - Conversation-based ownership controls - -5. **Project Log**: - - Chronological record of all events - - Rich categorization system with specialized entry types - - Attribution of actions to specific users - - Metadata for event context - - Events for milestone transitions, request handling, and whiteboard updates - - Request deletion tracking - - Full history of all project activities - -6. **Coordinator Conversation Storage**: - - Shared access to coordinator conversation for team members - - Content and sender metadata preservation - - Limited message history (most recent 50 messages) - - Automatic pruning of older messages - - Includes both user and assistant messages diff --git a/assistants/project-assistant/docs/JTBD.md b/assistants/project-assistant/docs/JTBD.md new file mode 100644 index 000000000..5ca32d5e4 --- /dev/null +++ b/assistants/project-assistant/docs/JTBD.md @@ -0,0 +1,286 @@ +# Knowledge Transfer User Jobs and Outcomes + +## 💰 Job 1: Offload Knowledge + +“Get what's in my head (or docs) into other people.” +“Get what's in my head (or docs) into a system to share.” + +### 🙋 Target User: Producer + +Knowledge workers who use AI assistants to support complex cognitive tasks. This includes roles like product managers, researchers, technical leads, consultants, and operations strategists who frequently need to: + +* Delegate operational or repetitive work +* Preserve or transfer internal knowledge + +These users are technically literate and open to using AI, but often encounter friction, ambiguity, or lack of trust when doing so. + +### Examples + +* Brian fleshing out his ideas and gathering ideas and developing them. +* Sometimes it's important to know HOW someone else wants us to think about it. + +### 🧭 Offload Knowledge Outcomes by Job Step + +#### 1. Identify What to Offload + +* Minimize time to determine which knowledge is valuable to preserve +* Maximize ability to identify redundant information that you don't need to offload again. +* Minimize effort to identify knowledge that is at risk of being lost. Users are rarely prompted or supported in recognizing what’s ephemeral, especially tacit or role-specific knowledge. +* Maximize clarity on what knowledge others will want or will need in the future. Predicting downstream needs is difficult without clear collaboration or communication loops. + +#### 2. Extract Knowledge + +* Maximize completeness of the captured knowledge. AI often captures surface-level information, missing nuance, assumptions, or rationale. +* Minimize risk of omitting tacit or hard-to-articulate information. Tacit knowledge is inherently hard to extract, especially if not prompted well. Tools don't scaffold reflection. +* Minimize effort required to capture contextual details. Context is scattered across tools, meetings, and tacit knowledge — it’s rarely captured systematically. +* Minimize time required to transfer knowledge from a person or doc. + +#### 3. Structure and Store + +* Maximize clarity of how preserved knowledge is organized. +* Maximize consistency in labeling or tagging knowledge. +* Minimize time to structure knowledge into a consistent and understandable format +* Maximize ability to associate related knowledge items + +#### 4. Validate and Refine + +* Maximize ability to identify gaps. +* Maximize ability to identify outdated information. +* Maximize confidence that preserved knowledge reflects current thinking. +* Minimize effort to review knowledge for accuracy and clarity +* Minimize effort to review the knowledge organization for accuracy and clarity (e.g., are the most important things captured in reasonable ways) + +#### 5. Retrieve and Reuse + +* Maximize trust that retrieved knowledge is accurate and complete +* Minimize duplication of effort due to inaccessible or unknown knowledge. +* Minimize time to locate relevant preserved knowledge +* Maximize ability to reuse preserved knowledge in different contexts + +#### 6. Hand-off Knowledge + +* Minimize friction in handing off knowledge to consumers. +* Maximize consumer adoption (they are busy, want a certain tone, etc.; they are often caught "off guard" with a message "out of the blue" asking them to spend time on some knowledge. The ask needs to be clear and give them assurance that they can accomplish it productively). + +#### 7. Support knowledge consumers + +* Minimize time spent supporting followup questions from consumers. +* Minimize time spent answering question repeatedly. + +--- + +## 💰 Job 2: Learn Knowledge + +“Go from unfamiliar to well-informed, without needing a human tutor.” +"Know what someone else knows." + +### 🙋 Target User: Learner + +Knowledge workers who use AI assistants to support complex cognitive tasks. This includes roles like product managers, researchers, technical leads, consultants, and operations strategists who frequently need to ramp up quickly in new domains. + +These users are technically literate and open to using AI, but often encounter friction, ambiguity, or lack of trust when doing so. + +### 🧭 Learn Knowledge Outcomes by Job Map Step + +#### 1. Define the Scope + +* Minimize time it takes to know where to start. +* Minimize time to identify the core topics within the subject. +* Minimize risk of including out-of-scope material +* Maximize clarity on the boundaries of the subject +* Minimize risk of missing prerequisite concepts +* Maximize relevancy to my own context. "What of this is worth using?" + +#### 2. Find Learning Resources + +* Minimize time to locate credible, comprehensive resources. "The people who have the information I need aren't available." +* Maximize coverage of essential topics across selected materials +* Minimize effort to organize resources for access and review +* Minimize risk of relying on low-quality or outdated information + +#### 3. Build Understanding + +* Minimize time to grasp each new concept +* Maximize ability to explain concepts in one’s own words +* Maximize clarity of relationships between subtopics +* Maximize retention of key ideas over time + +#### 4. Validate Understanding + +* Minimize time to detect gaps or misconceptions. “I’m not sure if I’ve learned enough or covered everything important.” +* Maximize accuracy of self-assessment. "Did I get get it all? Am I done?" +* Maximize ability to apply knowledge in practical contexts. "I think I get it... oh... nope." +* Minimize risk of forgetting critical information. “I forget what I learned before I get to use it.” + +--- + +## 💰 Job 3: Explore a knowledge space + +“Gain clarity and insights by exploring a defined knowledge space.” +"Understand what's in someone else's head." + +### 🙋 Target User: Explorer + +Knowledge workers who use AI assistants to support complex cognitive tasks. This includes roles like product managers, researchers, technical leads, consultants, and operations strategists who frequently need to explore large bodies of information with confidence. + +These users are technically literate and open to using AI, but often encounter friction, ambiguity, or lack of trust when doing so. + +### Examples of Explore Job + +* With Cortex, people wanted the ideas from Brian to see how they would impact them + +### 🧭 Outcomes by Job Map Step + +#### 1. Define the knowledge area to explore + +* Increase clarity on the boundaries of the topic +* Decrease ambiguity in scoping unfamiliar domains. “I’m unsure if I’m exploring the right domain or if my scope is too broad or narrow.” +* Increase confidence that the area aligns with the problem being solved. “It’s mentally taxing to judge whether content is actually relevant to my goals.” + +#### 2. Identify sources and entry points + +* Increase speed of locating credible, relevant sources +* Improve understanding of the structure of the knowledge corpus +* Decrease effort to evaluate trustworthiness of sources. “It takes too much time and effort to figure out which sources I can trust.” +* Increase discoverability of expert-recommended or AI-curated entry points. “It’s hard to know where to start or what path to follow.” +* Increase confidence that the sources reflect current thinking or trends + +#### 3. Formulate exploration questions or goals + +* Decrease time to generate meaningful questions. “It’s hard to know what questions to ask or how to phrase them meaningfully.” +* Increase clarity of what to ask or look for next. +* Improve ability to map questions to available information types +* Decrease mental load in articulating precise, actionable questions + +#### 4. Assess relevance of information + +* Decrease effort to filter out irrelevant material. “There’s too much low-value information—makes it hard to find insights.” +* Increase precision of information aligned with questions +* Increase recall of information aligned with questions +* Increase speed of determining whether a piece of information answers a question +* Decrease cognitive effort in resolving conflicting information. “I get conflicting answers and don’t know how to resolve or interpret them.” +* Improve consistency in how relevance is judged across sources + +#### 5. Navigate or query the corpus + +* Increase efficiency of traversing the material +* Decrease time spent retracing steps or revisiting already-covered ground +* Increase responsiveness of the AI to follow-up questions or pivots +* Improve transparency in how paths through the information are constructed. “The AI doesn’t make it clear why it’s showing certain information or how it's reasoning.” + +#### 6. Supplement the corpus + +* Decrease effort in getting extra-corpus info. "I don't see anything here about X, so I have to have a meeting with Brian." + +#### 7. Capture discoveries and insights + +* Improve ability to retain and retrieve key findings. “I can’t easily remember or retrieve what I’ve already discovered.” +* Decrease effort required to synthesize takeaways into shareable form. “It’s hard to convert my findings into something I can share with others.” +* Increase support for connecting findings across different documents or contexts. +* Improve ability to separate raw data from insights or interpretations. “Even after reading, I struggle to summarize or synthesize key takeaways.” + +#### 8. Adjust direction based on findings + +* Decrease lag between learning something new and pivoting focus +* Increase ability to track why and when direction changed. “I lose track of how my thinking evolved or why I changed direction.” +* Decrease friction in iteratively refining exploration goals +* Improve visibility into emerging patterns or subtopics + +#### 9. Conclude with a sense of completeness + +* Increase confidence that key areas were explored. “I don’t know what’s missing or what I didn’t get to.” “There’s no signal to tell me whether I’ve covered what matters.” +* Increase clarity on what was *not* explored and why +* Decrease uncertainty about whether sufficient depth was achieved. “I’m not confident that I’ve covered the important areas or reached sufficient depth.” +* Improve ability to summarize progress and open questions for handoff or future work + +## Greatest Unmet Needs + +1. Explorer/Learner: Maximize trust that retrieved knowledge is accurate and complete +2. Producer: Minimize effort required to capture contextual details +3. Learner: Minimize time to detect gaps or misconceptions +4. Producer: Minimize risk of omitting tacit or hard-to-articulate information +5. Explorer: Increase confidence that the area aligns with the problem being solved +6. Learner/Explorer: Minimize time to locate credible, comprehensive resources +7. Producer: Minimize time to determine which knowledge is valuable to preserve +8. Producer: Maximize clarity on what knowledge others will want or will need in the future +9. Explorer: Improve transparency in how paths through the information are constructed +10. Explorer/Learner: Improve ability to separate raw data from insights or interpretations + +## 🔧 Recommended Feature Additions + +### 🏗️ For Producers + +(helping them offload rich, complete, reusable knowledge) + +✅ 1. Contextual Capture Prompts +→ Prompt producers for details like rationale, audience, assumptions, so tacit knowledge isn’t lost. +(Unmet needs: capturing context, tacit knowledge) + +✅ 2. Tacit Knowledge Extraction Mode +→ Activate a deeper reflection mode with targeted questions to surface hidden expertise. +(Unmet needs: omitting tacit info, future needs clarity) + +✅ ~~3. Guided Scoping for Producers +→ Early on, help producers decide *what* to offload by suggesting domains or themes. +(Unmet need: determining valuable knowledge)~~ + +✅ 4. Future-Use Persona Prompting +→ Let producers tag likely consumer types (e.g., new hires, partners), so the assistant extracts relevant info for *their* needs. +(Unmet need: clarity on future knowledge use) + +✅ 5. Auto-Gap Detection & Feedback +→ After initial capture, show missing pieces based on templates or common gaps. +(Unmet need: detecting knowledge gaps) + +### 🧭 For Explorers + +(helping them navigate and extract insights confidently) + +✅ 6. Problem Alignment Check-in +→ Before exploring, assistant confirms the explorer’s goal and recalibrates if needed. +(Unmet need: aligning area to problem) + +✅ 7. Path Transparency Overlay +→ Show a “breadcrumb” of how the assistant arrived at an answer — which sources, notes, or logic it used. +(Unmet need: transparency in reasoning) + +### 📚 For Learners + +(helping them ramp up faster and more confidently) + +✅ 8. Corpus Quality Report +→ Provide a snapshot upfront: what’s in the corpus, what’s missing, and how current it is. +(Unmet need: locating credible resources, setting scope) + +✅ 9. Auto-Synthesis Layer with Raw/Insight Split +→ Give both raw excerpts and synthesized takeaways in responses or briefs. +(Unmet need: separating raw data from interpretation) + +✅ 10. Confidence Scoring on Retrieved Answers +→ Attach confidence levels and explain why the assistant is sure (or unsure) about each answer. +(Unmet need: trust in answer accuracy) + +## Paul's take + +### Features for Producer assistance + +* Make the producer assistant more analytical. Interrogate for details like rationale, audience, assumptions, so tacit knowledge isn’t lost. +* Have the producer assistant Activate a deeper reflection mode with targeted questions to surface hidden expertise. +* Audience definition: Let producers tag likely consumer types (e.g., new hires, partners), so the assistant extracts relevant info for *their* needs. +* Make knowledge consumption modal: Learner or Explorer. If learner, determine what items really must be part of the curriculum (what the learner should know). +* Knowledge gap detection: After initial capture, show missing pieces based on templates or common gaps. + +### Features for Explorer assistance + +* Upfront snapshot: Explain to explorers: what’s in the corpus, what’s missing, and how current it is. +* Exploration goals: Before exploring, assistant confirms the explorer’s goal and recalibrates if needed. + +### Features for Learner assistance + +* Curriculum intro: Explain to learners what they will be learning (and what they will not be learning). +* Keep track of what the learner has been exposed to or not in the curriculum. +* Quiz the learner on the curriculum to ensure knowledge transfer. + +### Features for both Learners and Explorer assistance + +* Excerpts: Give both raw excerpts and synthesized takeaways in responses or briefs. diff --git a/assistants/project-assistant/docs/WORKBENCH_NOTES.md b/assistants/project-assistant/docs/WORKBENCH_NOTES.md deleted file mode 100644 index 81e6ba24e..000000000 --- a/assistants/project-assistant/docs/WORKBENCH_NOTES.md +++ /dev/null @@ -1,474 +0,0 @@ -# Semantic Workbench State Management - -This document provides an overview of the state management facilities available in the Semantic Workbench ecosystem that can be leveraged by assistants. - -## Architectural Overview - -```mermaid -graph TD - subgraph "Workbench Service" - DB[(SQL Database)] - FileStore[(File Storage)] - API[API Endpoints] - Events[Event System] - end - - subgraph "Assistant Instance" - AState[Assistant State API] - AStorage[Storage Directory] - EventHandler[Event Handler] - end - - subgraph "Conversation" - Messages[Messages] - Metadata[Message Metadata] - ConvFiles[Conversation Files] - end - - API <--> AState - API <--> Messages - API <--> ConvFiles - API <--> Metadata - FileStore <--> ConvFiles - DB <--> Messages - DB <--> Metadata - Events ---> EventHandler - EventHandler ---> AState - AState ---> AStorage - - classDef persistent fill:#b7e1cd,stroke:#82c3a6 - classDef transient fill:#f8cecc,stroke:#b85450 - classDef storage fill:#d5e8d4,stroke:#82b366 - - class DB,FileStore,AStorage persistent - class Events transient - class ConvFiles,AState storage -``` - -## State Storage Locations - -```mermaid -graph LR - subgraph "Persistent Storage" - DB[(SQL Database<br>PostgreSQL/SQLite)] - FileStore[(File Storage<br>Binary Files)] - LocalFS[(Local Filesystem<br>JSON Files)] - end - - subgraph "State Types" - Messages[Messages] - MsgMeta[Message Metadata] - ConvFiles[Conversation Files] - AssistState[Assistant State API] - PrivateState[Private Assistant Data] - end - - Messages --> DB - MsgMeta --> DB - ConvFiles --> FileStore - AssistState --> DB - PrivateState --> LocalFS - - classDef db fill:#dae8fc,stroke:#6c8ebf - classDef file fill:#d5e8d4,stroke:#82b366 - classDef local fill:#ffe6cc,stroke:#d79b00 - - class DB db - class FileStore file - class LocalFS local -``` - -## Conversation-level State Management - -### Message Metadata - -- **Key Mechanism**: Each message can include arbitrary metadata as JSON -- **Storage**: Persisted in the database with the message -- **Special Fields**: - - `attribution`: Source information displayed after the sender - - `href`: Makes message a hyperlink - - `debug`: Debug information accessible through UI inspection - - `footer_items`: Additional information displayed in the message footer - - `tool_calls`: Structured representation of tool invocations - - `tool_result`: Results from tool executions -- **Usage**: Primary method for assistants to store structured data -- **Limitations**: Cannot be used to transfer large amounts of data (practical limit around 100KB) - -### Files/Attachments - -- **Model**: Files are represented as `File` and `FileVersion` entities in the database -- **Storage**: Files are stored in a filesystem-based storage system managed by the Workbench service -- **Versioning**: - - Built-in version tracking for files with the same name - - All files with the same name in a conversation are treated as versions of the same file - - No way for users to explicitly designate a file with the same name as a new file rather than a new version -- **Access**: - - Files are visible in the conversation UI for users - - Files can be attached to messages via the `filenames` property - - Files can be uploaded, downloaded, and deleted through the UI -- **Permissions**: Files inherit conversation permissions -- **Limitations**: - - No direct UI for viewing or managing different versions of a file - - No way for users to specify storage at the assistant level versus conversation level - -### Conversation Sharing - -- **Usage**: Enables controlled access to conversation content -- **Details**: See SHARING.md for comprehensive details on the sharing mechanism - -### Events System - -- **Purpose**: Propagates changes to all conversation participants -- **Model**: `ConversationEvent` defines various event types -- **Types**: Message created/deleted, participant changes, etc. -- **Delivery**: Events delivered through Server-Sent Events (SSE) -- **Storage**: Events are not stored persistently - they are transient objects -- **Connection Requirements**: Recipients must be actively connected to receive events -- **Durability**: No event replay mechanism - events missed during disconnection are lost permanently -- **Limitations**: Cannot be relied upon for critical state synchronization due to potential message loss - -```mermaid -sequenceDiagram - participant User as User - participant Assistant as Assistant - participant API as Workbench API - participant Events as Event System - participant DB as Database - - Note over User,DB: Both connected - - User->>API: Send message - API->>DB: Store message - API->>Events: Generate message_created event - Events->>User: Notify via SSE - Events->>Assistant: Notify via SSE - - Note over User,DB: Assistant disconnects - - User->>API: Edit message - API->>DB: Update message - API->>Events: Generate message_updated event - Events->>User: Notify via SSE - Events--xAssistant: Event lost (disconnected) - - Note over User,DB: Assistant reconnects - - Assistant->>API: Get conversation - API->>DB: Query messages - API->>Assistant: Return current state - - Note over User,DB: No automatic notification<br/>about missed events -``` - -## Assistant-level State Management - -### Assistant State API - -- **Type**: Server-side state managed by the Workbench service -- **Model**: Assistants maintain state via `StateResponseModel` in the database -- **Structure**: Structured data represented as JSON schema -- **UI Integration**: UI schema maintained for display formatting in Workbench UI -- **Description**: State descriptions provide user-facing information -- **Persistence**: State persisted in the central SQL database (PostgreSQL/SQLite) -- **Access**: Accessible via REST API endpoints in the Workbench service -- **Visibility**: Can be exposed to users through UI integrations - -### Assistant Storage Directory - -- **Type**: Local filesystem storage specific to each assistant instance -- **Purpose**: Private storage for assistant-specific data -- **Location**: Typically `.data/assistants/[assistant-id]` directory -- **Implementation**: Created and managed by `storage.py` in semantic-workbench-assistant -- **Content**: Pydantic models serialized to JSON files via `write_model` function -- **Visibility**: Not exposed to users through the UI -- **Usage**: Appropriate for: - - Private cross-conversation data - - Assistant-specific configuration - - Cached or derived data - - Data that doesn't need UI visibility - -### Configuration - -- **Storage**: Assistant configuration stored in metadata -- **Scope**: Configuration specific to each assistant instance -- **Access**: Available through assistant service APIs - -## Cross-conversation Communication - -### Cross-Conversation Access - -- Allows assistants to interact with multiple conversations simultaneously -- Requires proper permissions and active participant records -- Managed through the conversation sharing system -- See SHARING.md for comprehensive details on: - - Permission models and enforcement - - User vs. assistant access patterns - - Conversation sharing mechanisms - - Principal and participant relationships - -### File Transfer - -- **Mechanism**: Files must be explicitly copied between conversations -- **Process**: - 1. Read file content from source conversation - 2. Create new file with same name in target conversation - 3. This creates a completely separate file, not linked to the original -- **Versioning**: Version history doesn't transfer between conversations - -```mermaid -sequenceDiagram - participant ConvA as Conversation A - participant API as Workbench API - participant ConvB as Conversation B - participant FSA as File Storage A - participant FSB as File Storage B - - Note over ConvA,FSB: File Transfer Process - - ConvA->>API: Request file content<br/>(conversation_id_A, filename) - API->>FSA: Retrieve file content - FSA->>API: Return file content - API->>ConvA: File content - - ConvA->>API: Upload to conversation B<br/>(conversation_id_B, filename, content) - API->>FSB: Store file content - API->>ConvB: Create file record - - Note over ConvA,FSB: Result: Two independent files with<br/>same name but separate version history -``` - -### Participant Model - -- **Types**: User participants and assistant participants -- **Status**: Online/offline status tracking -- **Permissions**: Read/write access controls -- **Events**: Participant join/leave events - -## File Storage Architecture - -### Storage System - -- **Physical Storage**: Files stored in filesystem managed by Workbench service -- **Reference System**: Messages and conversations reference files by name -- **Uniqueness**: Files are uniquely identified by the combination of conversation ID and filename -- **UI Integration**: Only conversation-level files are shown in the UI - -```mermaid -graph TD - subgraph "File Management System" - FileDB[(File Database)] - FileStore[(Physical File Storage)] - end - - subgraph "Conversation 1" - Conv1[Conversation ID: 1] - File1A["File: report.pdf (v1)"] - File1B["File: report.pdf (v2)"] - Conv1 --- File1A - Conv1 --- File1B - end - - subgraph "Conversation 2" - Conv2[Conversation ID: 2] - File2["File: report.pdf (v1)"] - Conv2 --- File2 - end - - subgraph "Message References" - Msg1["Message 1: with filenames=['report.pdf']"] - Msg2["Message 2: with filenames=['report.pdf']"] - end - - File1A -- "Version 1" --> FileStore - File1B -- "Version 2" --> FileStore - File2 -- "Version 1" --> FileStore - - File1A --> FileDB - File1B --> FileDB - File2 --> FileDB - - Msg1 -. "References latest version (v2)" .-> File1B - Msg2 -. "References latest version (v1)" .-> File2 - - classDef conversation fill:#f9f,stroke:#333,stroke-width:2px - classDef file fill:#bbf,stroke:#333 - classDef storage fill:#bfb,stroke:#333 - classDef message fill:#fbb,stroke:#333 - - class Conv1,Conv2 conversation - class File1A,File1B,File2 file - class FileDB,FileStore storage - class Msg1,Msg2 message -``` - -### File Versioning - -- **Automatic Versioning**: When a file with the same name is uploaded to a conversation, it's treated as a new version -- **Version Control**: The system maintains version numbers and history -- **Access Control**: API allows requesting specific versions or defaulting to latest -- **Conflict Management**: No built-in conflict resolution for simultaneous updates - -```mermaid -sequenceDiagram - participant User1 as User 1 - participant Conv as Conversation - participant DB as Database - participant FS as File Storage - - User1->>Conv: Upload "report.pdf" (v1) - Conv->>DB: Create file record<br/>conversation_id: 123<br/>filename: "report.pdf"<br/>version: 1 - Conv->>FS: Store file content with<br/>hash-based path - - Note over User1,FS: Later... - - User1->>Conv: Upload new "report.pdf" - Conv->>DB: Find existing file with<br/>same name in conversation - Conv->>DB: Create new version<br/>conversation_id: 123<br/>filename: "report.pdf"<br/>version: 2 - Conv->>FS: Store new content with<br/>different hash-based path - - Note over User1,FS: Request file - - User1->>Conv: Request "report.pdf" - Conv->>DB: Find file, get latest version (v2) - Conv->>FS: Retrieve content for version 2 - Conv->>User1: Return file content -``` - -### File Naming - -- **Namespace**: Filenames must be unique within a conversation -- **Constraints**: Database enforces uniqueness via constraints -- **Workaround**: To have logically different files with the same name, users must use different filenames (e.g., "report-v2.pdf") - -## Data Export/Import - -### Serialization - -- Both conversations and assistants support export/import -- Data can be transferred between instances while maintaining relationships -- Export includes messages, files, and metadata - -### Persistence - -- Database uses SQLModel with async SQLAlchemy -- Supports both SQLite and PostgreSQL databases - -## Access Patterns - -### Direct API Calls - -- Assistants can make authenticated API calls to the Workbench service -- API endpoints available for conversation, message, and file operations - -### Message Commands - -- Assistants can respond to commands embedded in messages -- Command responses can include structured data in metadata - -### Event Subscriptions - -- Assistants can subscribe to conversation events -- Real-time notifications of changes to conversations -- Requires maintaining active connections to receive events -- No guarantee of delivery - events during disconnections are lost -- Cannot be used as a reliable state synchronization mechanism - -## Best Practices - -### State Persistence - -- Use message metadata for small conversation-specific state (<100KB) -- Use assistant state for cross-conversation persistence that needs UI integration -- Use files for larger structured data or binary content that users should see -- Use assistant storage directory for private cross-conversation data - -```mermaid -graph TD - State[State to Store] - - State -- "Small, conversation-specific<br/>(<100KB)" --> MessageMeta[Message Metadata] - State -- "Shared across conversations<br/>UI integration needed" --> AssistantState[Assistant State API] - State -- "Large data<br/>Binary content<br/>User visibility needed" --> Files[Conversation Files] - State -- "Cross-conversation<br/>Private to assistant<br/>No UI needed" --> LocalStorage[Assistant Storage Directory] - - MessageMeta --> Persist[(Database)] - AssistantState --> Persist - Files --> FileStore[(File Storage)] - LocalStorage --> Disk[(Local Filesystem)] - - classDef decision fill:#f5a9b8,stroke:#333 - classDef storage fill:#dae8fc,stroke:#6c8ebf - classDef persist fill:#d5e8d4,stroke:#82b366 - - class State decision - class MessageMeta,AssistantState,Files,LocalStorage storage - class Persist,FileStore,Disk persist -``` - -### Sharing Information - -- Use conversation sharing for explicit permission grants -- Leverage the API for controlled cross-conversation access -- Use message metadata for lightweight information transfer -- For file sharing between conversations, implement explicit copy mechanisms - -```mermaid -flowchart TD - Coordinator[Coordinator Conversation] - Team[Team Conversation] - - subgraph "Information Sharing Options" - direction TB - A[Message Metadata] - B[File Transfer] - C[Cross-conversation Messages] - D[Assistant State] - end - - Coordinator -- "Small data<br/>(<100KB)" --> A --> Team - Coordinator -- "Large/structured data<br/>User visibility" --> B --> Team - Coordinator -- "Real-time notifications" --> C --> Team - Coordinator -- "Persistent shared state" --> D --> Team - - classDef conv fill:#f9f,stroke:#333 - classDef option fill:#bbf,stroke:#333 - - class Coordinator,Team conv - class A,B,C,D option -``` - -### Avoiding State Conflicts - -- Establish clear ownership of data to prevent conflicting updates -- Use versioning for tracking changes over time -- Implement conflict detection and resolution for collaborative scenarios -- Use timestamps to determine the most recent updates - -```mermaid -sequenceDiagram - participant ConvA as Conversation A - participant Central as Central State - participant ConvB as Conversation B - - Note over ConvA,ConvB: State Synchronization Pattern - - ConvA->>Central: Read current state - ConvA->>ConvA: Local modifications - ConvA->>Central: Write with version check - Central-->>ConvA: Update confirmed (v1) - - ConvB->>Central: Read current state (v1) - ConvB->>ConvB: Local modifications - - ConvA->>Central: Read current state (v1) - ConvA->>ConvA: More local modifications - ConvA->>Central: Write with version check - Central-->>ConvA: Update confirmed (v2) - - ConvB->>Central: Write with version check (v1) - Central--xConvB: Conflict detected (current v2) - ConvB->>Central: Read current state (v2) - ConvB->>ConvB: Merge changes - ConvB->>Central: Write with version check (v2) - Central-->>ConvB: Update confirmed (v3) -``` \ No newline at end of file diff --git a/assistants/project-assistant/docs/design/PXL_20250814_190140267.jpg b/assistants/project-assistant/docs/design/PXL_20250814_190140267.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4cce1d332ecbde3381ab87e70fed2c16fc5234ae GIT binary patch literal 1162121 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%0AvF=x? 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ⅇ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≻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%0D<(jrd#^ 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%0A_2;H(r*40|R}y649nycWO=na3F`smW>}BzGS- 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ƙc-$Dm;kXE=;JBcnyFD$WQ80KF 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�eh-a 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 Ofn5atzYrk*9{4{@*h;_v literal 0 HcmV?d00001 diff --git a/assistants/project-assistant/docs/design/actions.md b/assistants/project-assistant/docs/design/actions.md new file mode 100644 index 000000000..e4684fd8a --- /dev/null +++ b/assistants/project-assistant/docs/design/actions.md @@ -0,0 +1,9 @@ +# Actions + +It is important that when actions can be taken they are. Sometimes a single response should result in numerous actions. + +I'm not sure... maybe more rigorous instructions about taking multiple actions, maybe maintain action lists and make sure they all get taken, maybe evaluate if there were any actions we could have taken but didn't, and then do them. + +I don't recall off the top of my head, but the idea is to use gpt-4-mini to ask "was there a promise to call a tool in the last assistant response, if so what tool call should we make" when we got the last message that didn't include a tool, then if so go run the tool and inject the results into the conversation history as if the original llm had made the call... I had to do this for the early reasoning models that really just never wanted to call tools. Maybe look and see if I did it in Explorer or Codespace Assistant? + +4.1 \ No newline at end of file diff --git a/assistants/project-assistant/docs/design/control_options.md b/assistants/project-assistant/docs/design/control_options.md new file mode 100644 index 000000000..024ffbd51 --- /dev/null +++ b/assistants/project-assistant/docs/design/control_options.md @@ -0,0 +1,52 @@ +# Designing KTA assistant architecture + +## The simple job at hand + +Help prepare a knowledge package. +- Define audience and takeaways + +## Task organization breakdown + +- ToDo (structured task list) +- Tasks +- Tool calls + +## Types of context + +- kt-process: The knowledge transfer process while in coordinator role. +- share: state of the knowledge share +- kb: State of the knowledge base +- messages: previous conversation +- task-list + +## Different roles/recipes/types-of-assistants + +### Task completer + +- Role: Conversational assistant +- Instructions + - Collaborate with user to complete tasks. +- Context + - kt-process + - share + - kb + - messages +- Tools +- Output + +- Audience +- Knowledge Base management +- Gaps detector +- Invitation +- Information requests +- Knowledge digest +- Knowledge brief +- Welcome message generation + +## Thoughts + +- Should the +- Who executes? + - If the agents... they need to do so reliably and give a trace. + +"Now I should start thinking about..." diff --git a/assistants/project-assistant/docs/design/design.md b/assistants/project-assistant/docs/design/design.md new file mode 100644 index 000000000..17642c05d --- /dev/null +++ b/assistants/project-assistant/docs/design/design.md @@ -0,0 +1,131 @@ +# Knowledge Transfer + +## Clear separation of state + +- Conversation state: messages and attachments +- Knowledge Base meta for the assistant to guide the producer conversation + - Audience + - takeaways + - Objectives and outcomes + - Gaps +- Knowledge Base + - Digest + - Brief + - Files + - Facts + +## Producer assistance + +- Active listening +- Stage aware (audience, takeaways, kb prep, objectives/outcomes, brief, share msg) +- Use multi-agent feedback (ultra-think, panel of experts); especially on kb prep +- Produces KB + - Use grounding eval against all generated docs. + - Make kb docs visible for user modification. + +## Semantics vs Style + +### Semantics Approaches + +Fact lists + +Concepts + +Markdown (trees) + +## Knowledge Base Approaches + +Documents + +Trees + +Graphs + +## Producer Assistance + + + +## Learning Styles + +Maintaining preferences of the learner, such as: + +- visual or concrete examples +- pacing +- academic or plain-speaking +- open exploration or guided (preferred learning modes) + +## Learning Modes + +### Explorer + +The knowledge base is explored by the consumer asking the assistant to help in whichever way the consumer would like. + +### Self-guided Curriculum + +Learning objectives and outcomes are set by the producer. The progression is suggested, but the learner can go in any order. The system tracks when outcomes have been achieved. + +### Interviewee + +The producer/assistant creates a list of concepts or topics that the user will be taken through, progressing through Bloom's Taxonomy for each. + +## Issues + +Fluff + +Style. + +How is this better than one long doc? + +## Other things to try + +- Using Bloom's taxonomy to instruct the assistant for what it should do on the next turn. +- Scoring the user's taxonomy level on a given topic. +- Breaking larger corpus into lists of topics. +- Engaged/Frustrated/Confused detection. +- Engaged/Frustrated response adaptation. +- Learning style adaptation (concrete examples vs visual diagrams) +- Learner pace preference adaptation (faster/slower) +- Topic prerequisite detection (detecting which topics should be covered first) +- Response pattern rotation + + ## Related Research + + You’ve hit on a fundamental issue! The pre-AI-winter symbolic AI folks absolutely did make this distinction - they saw content/information as separable from its presentation/style. This shows up in several key areas of literature: + +Classical AI/Knowledge Representation: + +- Minsky’s Frames (1974) - attempted to separate semantic content from surface realization +- Schank’s Conceptual Dependency Theory - tried to represent meaning independent of linguistic form +- Knowledge Interchange Format (KIF) - explicitly designed to separate logical content from syntactic presentation + +Linguistics/Philosophy: + +- Frege’s sense/reference distinction - the foundational idea that meaning exists apart from expression +- Chomsky’s deep structure vs. surface structure - competence vs. performance +- Grice’s work on implicature - what’s said vs. what’s meant + +Modern tensions: + +The “distributional hypothesis” that underlies modern NLP (“you shall know a word by the company it keeps”) fundamentally entangles meaning with usage patterns. Some relevant recent work: + +- “Language Models are Few-Shot Learners” (GPT-3 paper) shows style and content are learned together +- Work on disentangled representations (like style transfer research) tries to separate these again +- Prompt engineering literature increasingly recognizes that HOW you ask affects WHAT you get + +The irony is that the old symbolic approaches failed partly because they couldn’t handle the messiness of natural language, while modern approaches succeed by embracing that messiness - but lose the clean content/style separation in the process. + +The knowledge representation vs. connectionist debate has some fascinating historical documents. +https://arxiv.org/pdf/1703.00955 + +“Toward Controlled Generation of Text” by Hu et al. (ICML 2017) is a singular representative study that directly addresses the content/style disentanglement issue in neural language models. + +This paper is particularly relevant because it: + +1. Explicitly tackles disentanglement: The paper aims at generating plausible text sentences whose attributes are controlled by learning disentangled latent representations with designated semantics +1. Separates content from style: The model augments unstructured variables z with a set of structured variables c each of which targets a salient and independent semantic feature of sentences +1. Addresses the core problem: The authors note that varying individual code may result in unexpected variation of other unspecified attributes besides the desired one - exactly the entanglement problem you’re describing +1. Introduces explicit independence constraints: To ensure true disentanglement, they introduce the independency constraint which separates these attributes with c by enforcing them to be fully captured by the unstructured part z + +The paper demonstrates this separation empirically - when they control for sentiment (a “style” attribute), other aspects like subject matter and tone (the “content”) remain unchanged when their independence constraint is active. Without it, changing the style inadvertently changes the content as well. + +This work bridges the gap between the symbolic AI tradition (which had clean content/style separation but couldn’t handle natural language well) and modern neural approaches (which handle language well but entangle everything together). It’s a foundational paper in the area of controllable text generation that directly addresses your concern about the lack of distinction between information and style in LLMs. diff --git a/assistants/project-assistant/docs/design/inference.md b/assistants/project-assistant/docs/design/inference.md new file mode 100644 index 000000000..98beda64f --- /dev/null +++ b/assistants/project-assistant/docs/design/inference.md @@ -0,0 +1,53 @@ +# Inference + +Sub-agents should be watching for information they are responsible for gathering. When they see some, they should confirm with the user that they should take action with it. + +Instead of just writing out the next suggested action, we should see if there is already info in the context for it, and suggest as more of a proposal than just "let's talk about X next". In other words, don't ask open-ended questions. + +Things the assistant should infer at appropriate times: + +- On production side: + - What are the takeaways? + - Who is the audience? + - What is the user's preferred communication style? + - What should be in the brief (what all is included in this knowledge share?) + - Are there any learning objectives or learning outcomes that make sense to be tracked for the consumers? + - Are there any gaps in the shared knowledge that need to be filled in? + - What are the overall topics of this knowledge share that we need to make sure are transferred clearly? + - How might the user want to communicate this share to others (taking into account the audience, takeaways, communication style, etc.)? +- On the consumer side: + - How well is this consumer doing in progressing through the information? + - Have they met the learning objectives and outcomes? + - Have they grokked the takeaways? + - Has the info they asked about actually been shared? Should I create a request? + - Is the consumer exhibiting any confusion? + - Is the consumer progressing through bloom on all important topics? + - What is the user's preferred communication style? + +## BK's original message + +I have a pattern that I'd like to explore for improving our experience developing assistants. There are times where assistants need to gather info from a user but likely has enough context from the current conversation history, attachments, etc., to make a pretty "educated guess" and infer the right answer. For example, we may want to capture information about the desired audience for a document or knowledge transfer session so that we can use that to inform other processes in our assistant guidance and/or workflow. Instead of explicitly asking the user for this, maybe we do something that will let us do more of the work for the user. + +Let's take the example of what you just asked me here. You gave me a whole bunch of things up front. You let me know what all you can help with, you asked me to share my content or ideas, but then you also ask me about my audience. You talk about the knowledge brief (which btw, I don't see yet, is that a bug? You said, 'In the side panel, you can see your "knowledge brief"'.) and let me know I can ask you to update it at any time (is that burden on me now, or is it optional for me because really you are managing it? I hope it's the latter, I'm hoping you can do more for me and reduce my burden). Then you close with once again asking me about the audience. + +Ok, so that's a LOT to take in on the first interaction of the conversation. That's also a lot of text to read, and honestly this is the first time I've read it ALL and I have heard from others that they would just skim this much content and move right to chatting, so we should think about how to support that WHEN (not IF) it happens... + +But regardless, what if we took a different approach, what if we instead asked purely about the content or ideas - or even better yet, since the whole point of this experience is that we're trying to transfer knowledge to someone else (or many others), maybe we should start with asking what the desired takeaways are for those we're going to share it with; then you can be more helpful in making sure you have what you need from me to do so (tip: for THIS conversation, my takeaway that I want for my recipients is that they understand the proposed feature I want to have implemented and that you have enough info to answer their questions on the "why" behind it, etc.) + +Ok, so if asked for that kind of context _first_, then it seems when we actually want/need the audience info (don't think it's critical on the first interaction), there MAY be a lot of contextual hints to at least point us in the right direction. Look at what I've said so far... I have indicated a takeaway that includes implementing a feature within our assistant code, so that says a LOT about who are audience IS and also who it ISN'T for this particular conversation. I bet you could probably even assert something like "Let's talk about your audience, it appears we want to target developers would implement these features in code <... etc.>, is this correct? Is there anything else you want to tell me?" from that info. + +If you do that, then here is the impact on the user felt experience. If it's wrong, it's not really much more work for the user to share what the actual audience is than the current approach of asking the very open-ended question "Who are you going to be sharing your knowledge with?" I suspect, however, that every conversation will have at least some hints and even with the least contextual hints, what you infer and assert may be better than the blank-slate question and allow for users to provide feedback and tweak it - or, in the ideal case, you nail it and the user can just say "yep" and continue on. Win! We call this "designing for failure with AI" and it's the idea that we want to use AI in smart ways when we can, but we should assume we're going to be wrong and put it into place in ways were we're not creating extra burden for the user for how they would already do a thing (in this case, answering a fully open-ended question from the assistant about the target audience), but in the cases where we are right can be delighters for the user, or in cases like this with NL, "degrees" of being right or partially so can be somewhere on the spectrum between and at least reduce user burden and potentially help make it easier for them to answer. + +There are many other places where this could apply just in the knowledge transfer scenario. For example, we also care about the communication style that users on both side (the knowledge transfer coordinator and the recipients) would benefit from you using with them. Sure, again we could ask them directly, OR after a few interactions we could take cues from how they are interacting with you and then follow the same infer/assert but confirm pattern. We might apply the same approach if asked to create a blurb to paste into other conversations/docs/emails with the share link to get a better feel for what level of detail, tone, etc. to put into that. + +So here is my proposal. Since this is a pattern I expect exists more frequently than we realize, let's start looking for it more often and let's consider how we make any code we write for this as something more reusable in that way. I generally think it should go something like this: + +* Identify the scenario in which we want to try this out within the flow of a conversation/workflow +* Have some level of conversation to build up some context +* Hook into whatever assistant response flow we have designed that would allow us to determine "when" we are ready to invoke this behavior and then do so +* Pass that conversation history (and relevant attachments, etc.) into an LLM call that asks for a response that could be returned as the next assistant message that infers the answer to the question we have, asserts it to the user in an observational way while also confirming with them if it is correct or feedback that is needed +* Insert that message into the conversation history as the assistant and let the conversation/workflow proceed as before + +By doing this as a sub-step, with a separate context + instructions than the general conversation/workflow or assistant response flow, we can both build and receive a more focused request as we use the LLM. Also, this makes for a nice way to abstract this out for re-use. It can become a function that is called, pass in the right context + instruction and insert the message back into the conversation, making it easy to do more often and also to later invest more in the "under the hood" of that function if/as needed. + +Ok, that's a lot, let's start there and see where we're at. What do you think? Do you have enough to answer any reasonable questions you would expect from our recipients of this knowledge transfer, and do you have enough to propose a plan for how they would build it, in collaboration with them providing more context on their code, etc.? \ No newline at end of file diff --git a/assistants/project-assistant/docs/how-kta-works.md b/assistants/project-assistant/docs/how-kta-works.md new file mode 100644 index 000000000..fcf096827 --- /dev/null +++ b/assistants/project-assistant/docs/how-kta-works.md @@ -0,0 +1,61 @@ +# Understanding how the Knowledge Transfer Assistant + +The Knowledge Transfer Assistant isn't simply a chat conversation with an assistant. + +It uses a "more code than model", recipe-inspired approach that runs "meta-cognitive operations" to create an assistant that guides users through the knowledge transfer process. + +The Knowledge Transfer Assistant is an assistant experience that runs within _MADE: Exploration's_ Semantic Workbench. + +## How it works + +The Knowledge Transfer Assistant uses a multi-conversation architecture to separate knowledge creation from knowledge consumption, addressing the confusion that arises when multiple participants work in the same shared conversation. + +### Dual-Conversation Architecture + +The system operates through two conversation types: + +1. **Coordinator Conversation**: Where knowledge creators collaborate to structure and package their knowledge +2. **Team Conversations**: Individual conversations created for each team member who joins the knowledge transfer + +### Knowledge Artifacts + +The system structures informal knowledge into four transferable artifacts: + +- **Knowledge Brief**: Context, scope, and timeline summary +- **Knowledge Digest**: An organized outline of all knowledge from coordinator conversations and attachments, automatically updated by LLM analysis. Contains high information density with key concepts, decisions, facts, and context—serving as the primary knowledge reference for team members +- **Learning Objectives**: Structured goals with measurable outcomes +- **Information Requests**: Bidirectional Q&A channel with priority levels + +### Cross-Conversation Communication + +Isolated conversations communicate through centralized components: + +- **Share Storage**: Maintains knowledge packages and progress across conversations +- **Share Manager**: Creates shareable team conversations via secure URLs +- **Notifications System**: Enables updates between coordinators and team members +- **File Synchronization**: Propagates documents across relevant conversations + +### User Experience + +**Coordinators:** +- Navigate to https://semantic-workbench.azurewebsites.net/ and start a new conversation with the Knowledge Transfer Assistant. +- The assistant will guide you through: + - Define learning objectives + - Develop content through natural conversation and file attachments + - Create a knowledge brief and invitation messages for your team members + - Share the provided Share Link with your team members. +- Monitor team progress via real-time dashboards and notifications +- Respond to information requests + +**Team Members:** +- Join a new conversation via the coordinator-provided share URL, creating individual conversation +- Receive personalized welcome and knowledge brief +- Work through objectives with assistant guidance +- Access synchronized files and updated digest +- Submit questions through information requests + +### Technical Implementation + +The system uses orchestration logic to coordinate multiple AI assistants rather than relying on a single large model. This enables role-specific assistant behavior, persistent state across conversation boundaries, and real-time synchronization between coordinator and team conversations. + +The architecture allows multiple team members to join knowledge transfers independently while maintaining separation between knowledge creation and consumption workflows. diff --git a/assistants/project-assistant/docs/knowledge-transfer-goals.md b/assistants/project-assistant/docs/knowledge-transfer-goals.md new file mode 100644 index 000000000..fdf962bd8 --- /dev/null +++ b/assistants/project-assistant/docs/knowledge-transfer-goals.md @@ -0,0 +1,32 @@ +# Goals for the Knowledge Transfer Assistant + +## Core idea + +Assist users in synthesizing knowledge from data and ideas and transfer that knowledge to others. + +## Shortcomings of existing solutions + +- Even though assistants can help do this well, it normally requires the user to have the idea to use an assistant this way and to guide the assistant through the process. +- While we had previously used shared (single) assistant conversations to do this, it was confusing for users to all work in the same conversation. +- Users could opt to instead create a copy of the original conversation, but that suffered due to the fact that it was now disconnected from any ongoing development in each of the conversations. + +## Our solution + +### Give both knowledge producers and knowledge learners individual conversations + +This solution addresses all of these items with a creative take on the scenario through separate conversations with an assistant that has built-in guidance and ability to work across all of the conversations. + +Splitting the producer/consumer (or coordinator/team) conversations unlocked many more interesting benefits: + +- Multiple producers can collaborate within a single conversation to set up the knowledge share. +- The knowledge share can be transferred to multiple recipients. +- Since each conversation has its own assistant, we have the assistants manage communication between producers and consumers through "information requests". +- Each conversation assistant can adopt a communication style preferred by it's users. + +### Learning progress + +In order to guide consumers through the knowledge transfer experience, we introduced the idea of "learning objectives" and "learning outcomes". The producer and their assistant can define what objectives and outcomes they desire their learning audience to achieve. The learners are assisted by their assistant in achieving those outcomes. The assistants guide them through their material at a pace and way that they prefer. When learners achieve outcomes, the producers are notified. This provides clear feedback to all parties of the progression through the knowledge transfer. + +## Read more about the problem space + +See [Knowledge Transfer Jobs-to-be-done](./JTBD.md) diff --git a/assistants/project-assistant/docs/learning_assistance.md b/assistants/project-assistant/docs/learning_assistance.md new file mode 100644 index 000000000..7ae0e4cb2 --- /dev/null +++ b/assistants/project-assistant/docs/learning_assistance.md @@ -0,0 +1,8 @@ +# Instructions for the Learning Assistant + +- Identify 2 to 3 concrete opportunities and "how to's" for using the Knowledge Transfer Assistant for the user that are customized to the needs & opportunities specific to that user. +- Find out more about what the user does and help them ideate where this assistant could help. +- After brainstorming, provide the user with specific steps: + - How to create a new Knowledge Transfer Assistant experience. + - Help them understand what kinds of files could be uploaded to benefit this. + - Help them understand what prompts/things-to-say they could use to help them get the ball rolling. diff --git a/assistants/project-assistant/docs/CLAUDE_PROMPTS.md b/assistants/project-assistant/docs/notable_claude_conversations/CLAUDE_PROMPTS.md similarity index 76% rename from assistants/project-assistant/docs/CLAUDE_PROMPTS.md rename to assistants/project-assistant/docs/notable_claude_conversations/CLAUDE_PROMPTS.md index 51966fcc5..9b60bcee9 100644 --- a/assistants/project-assistant/docs/CLAUDE_PROMPTS.md +++ b/assistants/project-assistant/docs/notable_claude_conversations/CLAUDE_PROMPTS.md @@ -7,3 +7,7 @@ │ we have a copy difference between the two templates, the copy should be located in config.py. - Let's keep working on the project-assistant project (assistants/project-assistant). Please reread the notes in docs/DESIGN.md for the big picture. Also, as we work on code, please respect the docs/DEV_GUIDE.md and check out some notes on relevant libraries at docs/ASSISTANT_LIBRARY_NOTES.md, and docs/WORKBENCH_NOTES.md. I have recorded our most recent work in docs/WORKING.md. Once you have read all those, let me know and I'll tell you what we're working on now. - You have access to logs in .data/logs. We're trying to fix the missing welcome message after a share link is redeemed. You can see what code we've changed using git recently to add more logging. Check out the code and logs and help me figure out why welcome messages aren't getting added on shared team conversations. +- Excellent. Let's move on to another feature. I'd like to add a new optional string field to KnowledgePackage named "audience". The suggest_next_action function should suggest defining the audience as one of + the first things for the user to do when the assistant is in coordinator role. The point is to understand who the expected audience of the knowledge transfer is and how much they already know on the topic so + that the assistant can help the coordinator ensure the information gathered in the knowledge package is sufficient. +- I would like to do a data refactor. Currently, the share_data.json (which is a reflection of KnowledgePackage in assistant/data.py) stores whether learning outcomes have been achieved in the learning objective definitions themselves. This is wrong because we may have multiple redemptions from different individuals. What we actually need to do is capture the first participant in a conversation (other than an assistant) as the "redeemer" that conversation and then track their outcome achievements with their own data record. Currently, we are tracking a redemption as a "linked_conversations" attribute in the assistant's .data directory. Perhaps we should track that along with other information about redeemed conversations in the share_data.json, too, perhaps under a key named "team_conversations". WDYT? Give me a proposal and a list of changes that wou need to be made. diff --git a/assistants/project-assistant/docs/notable_claude_conversations/transfer_state.md b/assistants/project-assistant/docs/notable_claude_conversations/transfer_state.md new file mode 100644 index 000000000..725cd0dda --- /dev/null +++ b/assistants/project-assistant/docs/notable_claude_conversations/transfer_state.md @@ -0,0 +1,231 @@ +> Nice. So, if the coordinator is getting suggestions for the next action based on the state of the share, do we really need to idea of KnowledgePackage.transfer_state? Please think deeply about how we are using + transfer_state and give me a recommendation of whether to keep it or not. + +✻ Thinking… + + The user is asking me to think deeply about the usage of transfer_state in the KnowledgePackage model and whether we really need it now that we have the next action suggestion system in place. + + Let me analyze how transfer_state is currently being used: + + 1. Current transfer states: + - ORGANIZING: Initial state - Coordinator is capturing and organizing knowledge + - READY_FOR_TRANSFER: Knowledge is organized and ready for team members to access + - ACTIVE_TRANSFER: Team members are actively learning and exploring the knowledge + - COMPLETED: Learning objectives have been achieved and the transfer is complete + - ARCHIVED: Knowledge package was archived or is no longer active + 2. Where transfer_state is used: + Let me search for usages of transfer_state in the codebase to understand how it's being used. + + From what I can see in the manager.py snippet: + +- Line 1353: ready_for_transfer = package.transfer_state == KnowledgeTransferState.READY_FOR_TRANSFER +- It's used to check if the package is ready for transfer + + Let me think about this more systematically: + + Arguments for keeping transfer_state: + + 1. Explicit state tracking: It provides a clear, explicit way to track where the knowledge transfer process is + 2. Multi-conversation coordination: Since there are coordinator and team conversations, the transfer_state could help coordinate between them + 3. UI/Dashboard purposes: The state could be useful for showing progress in dashboards or UIs + 4. Workflow gates: It could serve as a gate to prevent certain actions until the package is ready + 5. Audit trail: It provides a clear audit trail of progression through phases + 6. External integrations: Other systems might need to know the state of the transfer + + Arguments for removing transfer_state: + + 1. Redundant with suggestion system: The next action suggestions already encode the logic about what should happen next based on the current state + + 2. Derivable from other fields: The state could be derived from other fields like brief existence, objectives, and achieved outcomes + 3. Manual maintenance burden: Updating transfer_state manually could lead to synchronization issues with actual progress + 4. Simpler model: Removing it would streamline the data model + 5. Implicit vs explicit: Current state can be determined implicitly from existing data without explicit state management + + Key considerations: + I need to investigate how team conversations coordinate and track completion effectively without an explicit transfer state. The challenge lies in creating a robust mechanism for tracking knowledge transfer + progress that doesn't rely on manual state updates. + + Potential state derivation strategies emerge from examining different transfer stages: + +- Organizing state links directly to document completeness +- Ready for transfer indicates all prerequisite information exists +- Completion could be automatically detected through learning outcome achievement +- Archiving might require a genuine manual intervention + + The critical question centers on whether the transfer_state provides unique functionality beyond what can be achieved through intelligent suggestion systems and derived state tracking. + + Current implementation suggests the primary purpose involves readiness verification for transfer initiation. However, several nuanced considerations complicate simple state elimination: + +- Team access control requires precise state management +- Share URL generation needs clear readiness criteria +- Tracking state transitions provides valuable historical context +- Manual coordinator interventions demand flexible state definitions + + A streamlined approach involves reducing transfer states to four core stages: draft, published, completed, and archived. This strategy simplifies state management while preserving essential workflow + flexibility, allowing the suggestion system to handle intermediate organizational complexities. + + I'll investigate the codebase thoroughly to confirm comprehensive understanding of transfer_state usage before finalizing recommendations. + +● Bash(rg "transfer_state" . -A 2 -B 2) + ⎿ ./assistant/state_inspector.py- # Display knowledge transfer stage + ./assistant/state_inspector.py- stage_label = "📋 Organizing Knowledge" + ./assistant/state_inspector.py: if share_info and share_info.transfer_state: + ./assistant/state_inspector.py: if share_info.transfer_state == KnowledgeTransferState.ORGANIZING: + … +157 lines (ctrl+r to expand) + +✻ Thinking… + + Now I have a comprehensive view of how transfer_state is used across the codebase. Let me analyze each usage: + + Current Usages of transfer_state: + + 1. State Inspector (assistant/state_inspector.py) + +- Shows different stage labels for coordinators and team members based on the transfer_state +- This is purely cosmetic/informational + + 2. Data Model (assistant/data.py) + +- Defines the field with default value ORGANIZING + + 3. Command Processor (assistant/command_processor.py) + +- Shows current status in share info display +- Again, purely informational + + 4. Tools (assistant/tools.py) + +- Sets initial state to ORGANIZING when creating a new package +- Updates to READY_FOR_TRANSFER when marking ready +- Updates to COMPLETED when knowledge transfer is finished +- These are explicit state transitions triggered by tool calls + + 5. Manager (assistant/manager.py) + +- Returns current transfer state +- Updates transfer state when status is changed +- Logs state changes +- Checks if package is ready for transfer - this is the main logic use + + 6. Tests + +- Various test setups and assertions + + Analysis: + + Looking at this usage, I can see several patterns: + + Informational/Display uses (could be derived): + +- State inspector labels +- Command processor status display +- These just show the current state to users + + State transition tracking (explicit state management): + +- Tools that explicitly move between states +- Manager methods that update state +- Logging of state changes + + Business logic (the key question): + +- The main business logic use is in manager.py line 1353: ready_for_transfer = package.transfer_state == KnowledgeTransferState.READY_FOR_TRANSFER +- This gates whether certain suggestions are made + + Key insights: + + 1. The business logic use is minimal - it's really just checking if the state is READY_FOR_TRANSFER + + 2. Most uses are informational - showing labels and status to users + 3. State transitions are explicit - tools deliberately move between states + 4. The ready-for-transfer check could be derived from other conditions + + I'm exploring potential alternative approaches to state management. The current state tracking seems overly complex for its actual usage. Most state changes appear to be manual tool-driven transitions, with + minimal automated logic. + + The core challenge is determining precise conditions for state changes. Potential improvements could involve more dynamic, condition-based state transitions that automatically update based on knowledge transfer + completeness and prerequisite fulfillment. + + Interesting observations emerge about the granularity of state tracking. While multiple states exist, the actual business logic relies on very simple binary checks - essentially whether a package is ready for + transfer or not. + + The recommendation leans towards simplifying the state management system, potentially removing explicit state tracking in favor of dynamically derived conditions that reflect the package's actual progress. + + Key arguments favor removing the transfer state: the suggestion system provides more intelligent, condition-based guidance, and maintaining a separate state field introduces unnecessary complexity. The + proposed approach shifts from static state checking to a more dynamic, action-oriented model where coordinators focus on determining the next appropriate step. + + Transition strategies include replacing explicit state checks with methods that evaluate current conditions, and updating display mechanisms to show derived state labels. This approach creates a more flexible, + maintainable system that relies on actual package conditions rather than potentially outdated state markers. + + The core principle is establishing a single source of truth through intelligent suggestion logic, reducing maintenance overhead and creating a more intuitive workflow for coordinators. + +● Looking at the codebase usage of transfer_state, I can see it's used in several places. Let me analyze whether we actually need it: + +● Bash(rg -A 5 -B 5 "ready_for_transfer.*transfer_state" assistant/) + ⎿ assistant/manager.py- return ( + assistant/manager.py- "Knowledge package has no learning objectives. Add at least one learning objective with outcomes." + assistant/manager.py- ) + assistant/manager.py- + … +7 lines (ctrl+r to expand) + +✻ Thinking… + + Perfect! This confirms my analysis. The main business logic use of transfer_state is just to check if it equals READY_FOR_TRANSFER, and then the code immediately does its own logic to determine if it's + actually ready (has_objectives and has_outcomes). + + This is a perfect example of why the explicit state is redundant - the code is already deriving the actual readiness from the data conditions. + +● Recommendation: Remove transfer_state + + After analyzing the codebase usage, I strongly recommend removing the transfer_state field. Here's my reasoning: + + Current Usage Analysis: + + 1. Business Logic (1 place): Only used in manager.py to check == READY_FOR_TRANSFER, but then immediately derives actual readiness from data conditions anyway + 2. Display/Informational (3 places): + - State inspector labels + - Command processor status display + - Logging messages + 3. State Transitions (3 places): + - Tools explicitly set states during workflow + + Why Remove It: + + 1. Redundant with Suggestion System: The next action suggestions already encode the intelligent progression logic based on actual data conditions + 2. Derived State is Better: The "readiness" check in your code already derives state from actual conditions (has_objectives, has_outcomes, etc.) rather than trusting the stored state + 3. Maintenance Burden: Risk of state getting out of sync with reality - the stored state could say "READY_FOR_TRANSFER" but actually be missing objectives + 4. Simpler Mental Model: Instead of "what state am I in?", coordinators think "what should I do next?" which is more actionable + 5. Single Source of Truth: The suggestion logic should be the authoritative source of what happens next + + How to Replace It: + + 1. Business Logic: Replace the transfer_state check with a helper method: + def is_ready_for_transfer(package: KnowledgePackage) -> bool: + return (package.brief is not None and + package.learning_objectives and + any(obj.learning_outcomes for obj in package.learning_objectives)) + 2. Display Logic: State inspector can show derived labels: + def get_stage_label(package: KnowledgePackage) -> str: + if not package.brief: + return "📋 Creating Brief" + elif not package.audience: + return "🎯 Defining Audience" + elif not package.learning_objectives: + return "📚 Adding Objectives" + elif not is_ready_for_transfer(package): + return "📋 Organizing Knowledge" + else: + return "🚀 Ready for Transfer" + 3. Simple Archive Flag: Add a boolean archived: bool = False for packages that are explicitly archived + + Benefits: + +- ✅ Simpler data model (one less field to manage) +- ✅ Always accurate state (derived from actual conditions) +- ✅ Consistent with suggestion system (single source of workflow logic) +- ✅ Less maintenance (no risk of state/reality mismatch) +- ✅ More flexible (can easily change progression logic without state migration) + + The suggestion system you've built is already providing intelligent, context-aware guidance. The explicit transfer_state field is now redundant and potentially error-prone. + + Should I proceed with removing it? diff --git a/assistants/project-assistant/docs/opportunities-of-knowledge-transfer.md b/assistants/project-assistant/docs/opportunities-of-knowledge-transfer.md new file mode 100644 index 000000000..7f8394448 --- /dev/null +++ b/assistants/project-assistant/docs/opportunities-of-knowledge-transfer.md @@ -0,0 +1,43 @@ +# Knowledge Transfer Opportunities for Microsoft Research + +## Research Project Onboarding + +Scenario: A principal researcher leading a multi-year ML project needs to onboard new team members, visiting researchers, and collaborators throughout the project lifecycle. + +Knowledge Transfer Setup: +- Knowledge Brief: Project overview, research questions, current hypotheses, and timeline +- Learning Objectives: Understanding the codebase, reproducing baseline results, contributing to specific research directions +- Relevant Files: Codebase documentation, experimental logs, literature review summaries, dataset documentation + +Getting Started: +1. Create coordinator conversation: "Help me structure onboarding materials for our neural architecture search project" +2. Upload key documents: paper drafts, experiment tracking sheets, codebase README files +3. Define learning objectives: "New team members should be able to run our baseline experiments and understand our current research directions" + +## Cross-Team Research Methodology Transfer + +Scenario: A research team has developed novel evaluation methodologies or experimental frameworks that other teams want to adopt. + +Knowledge Transfer Setup: +- Knowledge Brief: Methodology overview, when to use it, expected outcomes +- Learning Objectives: Implementing the methodology, interpreting results, avoiding common pitfalls +- Relevant Files: Evaluation scripts, example datasets, results interpretation guides + +Getting Started: +1. Create coordinator conversation: "I need to share our evaluation methodology with three other research teams" +2. Upload methodology documents: evaluation protocols, example analyses, troubleshooting guides +3. Set learning outcomes: "Teams should successfully implement our evaluation pipeline and interpret results correctly" + +## Publication Knowledge Synthesis + +Scenario: Research group preparing major conference submissions needs to synthesize findings across multiple related projects and ensure all contributors understand the unified narrative. + +Knowledge Transfer Setup: +- Knowledge Brief: Paper scope, key contributions, submission timeline +- Learning Objectives: Understanding cross-project connections, contributing to specific paper sections, preparing for reviewer questions +- Relevant Files: Draft manuscripts, experimental results, related work surveys + +Getting Started: +1. Create coordinator conversation: "Help me organize our findings from three related projects into a coherent ICML submission" +2. Upload project materials: individual project summaries, experimental data, previous paper drafts +3. Define contributions: "Each author should understand how their work fits into the broader narrative and be prepared to defend specific claims" diff --git a/assistants/project-assistant/project-assistant.code-workspace b/assistants/project-assistant/knowledge-transfer-assistant.code-workspace similarity index 81% rename from assistants/project-assistant/project-assistant.code-workspace rename to assistants/project-assistant/knowledge-transfer-assistant.code-workspace index 4feef8ca4..abe0ae5e7 100644 --- a/assistants/project-assistant/project-assistant.code-workspace +++ b/assistants/project-assistant/knowledge-transfer-assistant.code-workspace @@ -15,7 +15,7 @@ "configurations": [ "app: semantic-workbench-app", "service: semantic-workbench-service", - "assistants: project-assistant" + "assistants: knowledge-transfer-assistant" ] } ] @@ -103,5 +103,20 @@ "ms-vscode.vscode-node-azure-pack", "tamasfe.even-better-toml" ] + }, + "settings": { + "markdown.validate.enabled": true, + "ruff.configuration": "${workspaceFolder:.multi-root-tools}/../ruff.toml", + "ruff.interpreter": ["${workspaceFolder:.multi-root-tools}/.venv"], + "ruff.importStrategy": "useBundled", + "ruff.nativeServer": "on", + "ruff.configurationPreference": "filesystemFirst", + "[python]": { + "editor.codeActionsOnSave": { + "source.organizeImports.ruff": "always" + }, + "editor.defaultFormatter": "charliermarsh.ruff", + "editor.formatOnSave": true + } } } diff --git a/assistants/project-assistant/pyproject.toml b/assistants/project-assistant/pyproject.toml index 7b51063d1..731498ad0 100644 --- a/assistants/project-assistant/pyproject.toml +++ b/assistants/project-assistant/pyproject.toml @@ -2,17 +2,15 @@ name = "assistant" version = "0.1.0" description = "A file-sharing mediator assistant for collaborative projects." -authors = [{ name = "Semantic Workbench Team" }] +authors = [{ name = "MADE: Explore" }] readme = "README.md" requires-python = ">=3.11" dependencies = [ "assistant-extensions[attachments]>=0.1.0", "content-safety>=0.1.0", - "deepmerge>=2.0", "openai>=1.61.0", "openai-client>=0.1.0", "semantic-workbench-assistant>=0.1.0", - "tiktoken>=0.8.0", ] [dependency-groups] @@ -23,6 +21,9 @@ dev = [ "pyright>=1.1.389", ] +[tool.hatch.build.targets.wheel] +packages = ["assistant"] + [tool.uv] package = true @@ -46,3 +47,19 @@ log_cli_level = "WARNING" log_cli_format = "%(asctime)s | %(levelname)-7s | %(name)s | %(message)s" asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function" + +# These ruff settings match /ruff.toml +# but include import sorting in the lint section. +# Leaving them all here for debugging temporarily. + +# [tool.ruff] +# line-length = 120 +# target-version = "py311" + +# [tool.ruff.lint] +# select = ["E4", "E7", "E9", "F", "I"] + +# [tool.ruff.format] +# docstring-code-format = true +# line-ending = "lf" +# preview = true diff --git a/assistants/project-assistant/test_inspector.py b/assistants/project-assistant/test_inspector.py deleted file mode 100644 index 54371fc35..000000000 --- a/assistants/project-assistant/test_inspector.py +++ /dev/null @@ -1,56 +0,0 @@ -""" -Test script to verify state inspector functionality. -""" - -import asyncio -import logging -from unittest.mock import AsyncMock, MagicMock - -from assistant.assistant import assistant -from semantic_workbench_api_model.workbench_model import AssistantStateEvent -from semantic_workbench_assistant.assistant_app import ConversationContext - -# Set up logging -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - - -async def test_inspector(): - """Test the state inspector provider.""" - # Create mock context - context = AsyncMock(spec=ConversationContext) - context.id = "test-conversation-id" - context.assistant = MagicMock() - context.assistant.id = "test-assistant-id" - - # Mock conversation - conversation = MagicMock() - conversation.metadata = {"setup_complete": True, "assistant_mode": "coordinator", "project_role": "coordinator"} - context.get_conversation.return_value = conversation - - # Create state event - state_event = AssistantStateEvent(state_id="project_status", event="focus", state=None) - - # Send event - logger.info("Sending state event...") - await context.send_conversation_state_event(state_event) - - # Get inspector provider - inspector_provider = assistant.inspector_state_providers.get("project_status") - if not inspector_provider: - logger.error("No project_status inspector provider found!") - return - - logger.info(f"Inspector provider found: {inspector_provider.display_name}") - - # Get state data - try: - state_data = await inspector_provider.get(context) - logger.info(f"State data: {state_data}") - except Exception as e: - logger.error(f"Error getting state data: {e}") - - -# Run the test -if __name__ == "__main__": - asyncio.run(test_inspector()) diff --git a/assistants/project-assistant/tests/test_artifact_loading.py b/assistants/project-assistant/tests/test_artifact_loading.py index 2101f9f92..a1cca2f6e 100644 --- a/assistants/project-assistant/tests/test_artifact_loading.py +++ b/assistants/project-assistant/tests/test_artifact_loading.py @@ -10,19 +10,22 @@ import uuid from typing import Any, TypeVar -from assistant.conversation_project_link import ConversationProjectManager -from assistant.project_data import Project, ProjectBrief, ProjectGoal, SuccessCriterion -from assistant.project_manager import ProjectManager -from assistant.project_storage import ProjectStorage, ProjectStorageManager -from assistant.project_storage_models import ConversationRole +from assistant.data import ( + ConversationRole, + KnowledgeBrief, + LearningObjective, + LearningOutcome, + Share, +) +from assistant.domain import KnowledgeBriefManager, ShareManager +from assistant.storage import ShareStorage, ShareStorageManager from semantic_workbench_assistant import settings -from semantic_workbench_assistant.storage import read_model, write_model # Type variable for better type annotations T = TypeVar("T") -class TestProjectStorage(unittest.IsolatedAsyncioTestCase): +class TestShareStorage(unittest.IsolatedAsyncioTestCase): """Test the project storage functionality with the new direct storage approach""" async def asyncSetUp(self): @@ -35,13 +38,13 @@ async def asyncSetUp(self): settings.storage.root = str(self.test_dir) # Create test project and conversation IDs - self.project_id = str(uuid.uuid4()) + self.share_id = str(uuid.uuid4()) self.conversation_id = str(uuid.uuid4()) self.user_id = "test-user-id" self.user_name = "Test User" # Create project directory structure - self.project_dir = ProjectStorageManager.get_project_dir(self.project_id) + self.project_dir = ShareStorageManager.get_share_dir(self.share_id) # Set up patching self.patches = [] @@ -66,13 +69,11 @@ def mock_storage_directory_for_context(context, *args, **kwargs): self.mock_storage_directory = patch1.start() self.patches.append(patch1) - # Patch get_associated_project_id - async def mock_get_associated_project_id(context): - return self.project_id + # Patch get_share_id + async def mock_get_share_id(context): + return self.share_id - patch2 = unittest.mock.patch.object( - ConversationProjectManager, "get_associated_project_id", side_effect=mock_get_associated_project_id - ) + patch2 = unittest.mock.patch.object(ShareManager, "get_share_id", side_effect=mock_get_share_id) self.mock_get_project = patch2.start() self.patches.append(patch2) @@ -81,13 +82,15 @@ async def mock_get_conversation_role(context): return ConversationRole.COORDINATOR patch3 = unittest.mock.patch.object( - ConversationProjectManager, "get_conversation_role", side_effect=mock_get_conversation_role + ShareManager, + "get_conversation_role", + side_effect=mock_get_conversation_role, ) self.mock_get_role = patch3.start() self.patches.append(patch3) # Create a test brief - self.title = "Test Project" + self.title = "Test KnowledgePackage" self.create_test_brief() async def asyncTearDown(self): @@ -105,82 +108,70 @@ async def asyncTearDown(self): def create_test_brief(self): """Create a test project brief in the project's shared directory""" # Create a project brief - test_goal = ProjectGoal( + test_goal = LearningObjective( name="Test Goal", description="This is a test goal", - success_criteria=[SuccessCriterion(description="Test criteria")], + learning_outcomes=[LearningOutcome(description="Test criteria")], ) - brief = ProjectBrief( + brief = KnowledgeBrief( title=self.title, - description="Test project description", + content="Test project description", created_by=self.user_id, updated_by=self.user_id, conversation_id=self.conversation_id, ) # Create a project with the goal - project = Project( - info=None, + project = Share( + share_id="test-share-id", brief=brief, - goals=[test_goal], - whiteboard=None, + learning_objectives=[test_goal], + digest=None, ) - # Write the project to storage - project_path = ProjectStorageManager.get_project_path(self.project_id) - project_path.parent.mkdir(parents=True, exist_ok=True) - write_model(project_path, project) - - # Write to the project's shared directory using the correct path - brief_path = ProjectStorageManager.get_brief_path(self.project_id) - brief_path.parent.mkdir(parents=True, exist_ok=True) - write_model(brief_path, brief) + # Write the project to storage using ShareStorage to ensure proper consolidated format + ShareStorage.write_share(self.share_id, project) async def test_get_project_brief(self) -> None: """Test that get_project_brief correctly loads the brief from storage""" - # Mock the ProjectManager to use our test context - with unittest.mock.patch.object(ProjectManager, "get_project_id", return_value=self.project_id): + # Mock the KnowledgeTransferManager to use our test context + with unittest.mock.patch.object(ShareManager, "get_share_id", return_value=self.share_id): # Using Any here to satisfy type checker with our mock context: Any = self.context - # Get the brief using the ProjectManager - brief = await ProjectManager.get_project_brief(context) - project = ProjectStorage.read_project(self.project_id) + brief = await KnowledgeBriefManager.get_knowledge_brief(context) + project = ShareStorage.read_share(self.share_id) - # Verify the brief was loaded correctly - self.assertIsNotNone(brief, "Should load the brief") + assert brief is not None, "Should load the brief" if brief: # Type checking guard - self.assertEqual(brief.title, self.title) - self.assertEqual(brief.conversation_id, self.conversation_id) + assert brief.title == self.title + assert brief.conversation_id == self.conversation_id # Verify the project goals were loaded correctly - self.assertIsNotNone(project, "Should load the project") + assert project is not None, "Should load the project" if project: # Type checking guard - self.assertEqual(len(project.goals), 1, "Should have one goal") - self.assertEqual(project.goals[0].name, "Test Goal") + assert len(project.learning_objectives) == 1, "Should have one goal" + assert project.learning_objectives[0].name == "Test Goal" async def test_direct_storage_access(self) -> None: """Test direct access to project storage""" - # Test basic storage operations - brief_path = ProjectStorageManager.get_brief_path(self.project_id) - - # Read the brief directly using read_model - brief = read_model(brief_path, ProjectBrief) + # Test basic storage operations with consolidated storage + brief = ShareStorage.read_knowledge_brief(self.share_id) # Verify we got the correct brief - self.assertIsNotNone(brief, "Should load the brief directly") + assert brief is not None, "Should load the brief directly" if brief: # Type checking guard - self.assertEqual(brief.title, self.title) + assert brief.title == self.title - # Test updating the brief - brief.title = "Updated Project Title" - write_model(brief_path, brief) + # Test updating the brief using consolidated storage + brief.title = "Updated KnowledgePackageTitle" + ShareStorage.write_knowledge_brief(self.share_id, brief) # Read it back to verify the update - updated_brief = read_model(brief_path, ProjectBrief) + updated_brief = ShareStorage.read_knowledge_brief(self.share_id) if updated_brief: # Type checking guard - self.assertEqual(updated_brief.title, "Updated Project Title") + assert updated_brief.title == "Updated KnowledgePackageTitle" if __name__ == "__main__": diff --git a/assistants/project-assistant/tests/test_inspector.py b/assistants/project-assistant/tests/test_inspector.py new file mode 100644 index 000000000..3478cb0ed --- /dev/null +++ b/assistants/project-assistant/tests/test_inspector.py @@ -0,0 +1,73 @@ +""" +Test script to verify state inspector functionality. +""" + +import asyncio +import logging +from unittest.mock import AsyncMock, MagicMock + +from assistant.assistant import assistant +from semantic_workbench_api_model.workbench_model import AssistantStateEvent +from semantic_workbench_assistant.assistant_app import ConversationContext + +# Set up logging +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + + +async def test_inspector(): + """Test the state inspector provider.""" + # Create mock context + context = AsyncMock(spec=ConversationContext) + context.id = "test-conversation-id" + context.assistant = MagicMock() + context.assistant.id = "test-assistant-id" + + # Mock conversation + conversation = MagicMock() + conversation.metadata = { + "setup_complete": True, + "assistant_mode": "coordinator", + "share_role": "coordinator", + } + context.get_conversation.return_value = conversation + + # Test all four tabbed inspectors + inspector_ids = [ + "brief", + "objectives", + "requests", + "debug", + ] # Note: "requests" tab now shows as "Sharing" + + for inspector_id in inspector_ids: + logger.info(f"Testing {inspector_id} inspector...") + + # Create state event + state_event = AssistantStateEvent(state_id=inspector_id, event="focus", state=None) + + # Send event + logger.info("Sending state event...") + await context.send_conversation_state_event(state_event) + + # Get inspector provider + inspector_provider = assistant.inspector_state_providers.get(inspector_id) + if not inspector_provider: + logger.error(f"No {inspector_id} inspector provider found!") + continue + + logger.info(f"Inspector provider found: {inspector_provider.display_name}") + + # Get state data + try: + state_data = await inspector_provider.get(context) + logger.info(f"State data: {state_data}") + except Exception as e: + logger.error(f"Error getting state data: {e}") + + logger.info(f"--- {inspector_id} inspector test completed ---") + + +# Run the test +if __name__ == "__main__": + asyncio.run(test_inspector()) diff --git a/assistants/project-assistant/tests/test_project_manager.py b/assistants/project-assistant/tests/test_project_manager.py deleted file mode 100644 index 119ce315c..000000000 --- a/assistants/project-assistant/tests/test_project_manager.py +++ /dev/null @@ -1,214 +0,0 @@ -""" -Tests for the ProjectManager functionality. -""" - -from unittest.mock import AsyncMock, MagicMock - -import pytest -from assistant.project_manager import ProjectManager -from assistant.project_data import Project, ProjectInfo, ProjectGoal, SuccessCriterion, ProjectState -from semantic_workbench_assistant.assistant_app import ConversationContext - - -class TestProjectManager: - """Test the ProjectManager class.""" - - @pytest.fixture - def context(self): - """Set up test fixtures.""" - context = AsyncMock(spec=ConversationContext) - context.conversation = MagicMock() - context.id = "test-conversation-id" - return context - - @pytest.mark.asyncio - async def test_delete_project_goal(self, context, monkeypatch): - """Test the delete_project_goal method in ProjectManager.""" - # Setup test data - project_id = "test-project-id" - goal_index = 1 - goal_name = "Test Goal" - goal_description = "Test Description" - - # Create a test project with multiple goals - test_project = Project( - info=None, - brief=None, - goals=[ - ProjectGoal(name="Goal 1", description="Description 1", priority=1, success_criteria=[]), - ProjectGoal(name=goal_name, description=goal_description, priority=2, success_criteria=[ - SuccessCriterion(description="Criterion 1"), - SuccessCriterion(description="Criterion 2", completed=True), - ]), - ProjectGoal(name="Goal 3", description="Description 3", priority=3, success_criteria=[]), - ], - whiteboard=None, - requests=[], - ) - - # Create test project info - test_project_info = ProjectInfo( - project_id=project_id, - coordinator_conversation_id="test-coordinator-id", - completed_criteria=1, - total_criteria=2, - progress_percentage=50, - version=1, - state=ProjectState.PLANNING - ) - - # Mock get_project_id - async def mock_get_project_id(*args, **kwargs): - return project_id - monkeypatch.setattr("assistant.project_manager.ProjectManager.get_project_id", - AsyncMock(side_effect=mock_get_project_id)) - - # Mock require_current_user - async def mock_require_current_user(*args, **kwargs): - return "test-user-id" - monkeypatch.setattr("assistant.project_manager.require_current_user", - AsyncMock(side_effect=mock_require_current_user)) - - # Mock read_project - def mock_read_project(proj_id): - assert proj_id == project_id - return test_project - monkeypatch.setattr("assistant.project_manager.ProjectStorage.read_project", - MagicMock(side_effect=mock_read_project)) - - # Mock read_project_info - def mock_read_project_info(proj_id): - assert proj_id == project_id - return test_project_info - monkeypatch.setattr("assistant.project_manager.ProjectStorage.read_project_info", - MagicMock(side_effect=mock_read_project_info)) - - # Track if write_project and write_project_info were called with correct arguments - write_project_called = False - write_project_info_called = False - - # Mock write_project - def mock_write_project(proj_id, project): - nonlocal write_project_called - assert proj_id == project_id - # Verify goal was removed - assert len(project.goals) == 2 - assert project.goals[0].name == "Goal 1" - assert project.goals[1].name == "Goal 3" - write_project_called = True - monkeypatch.setattr("assistant.project_manager.ProjectStorage.write_project", - MagicMock(side_effect=mock_write_project)) - - # Mock write_project_info - def mock_write_project_info(proj_id, project_info): - nonlocal write_project_info_called - assert proj_id == project_id - # Verify project info was updated - assert project_info.completed_criteria == 0 # Completed criterion was in the deleted goal - assert project_info.total_criteria == 0 # All criteria were in the deleted goal - assert project_info.progress_percentage == 0 - assert project_info.version == 2 # Incremented - write_project_info_called = True - monkeypatch.setattr("assistant.project_manager.ProjectStorage.write_project_info", - MagicMock(side_effect=mock_write_project_info)) - - # Mock log_project_event - log_event_called = False - async def mock_log_project_event(*args, **kwargs): - nonlocal log_event_called - log_event_called = True - monkeypatch.setattr("assistant.project_manager.ProjectStorage.log_project_event", - AsyncMock(side_effect=mock_log_project_event)) - - # Mock notify_project_update - notify_called = False - async def mock_notify_project_update(*args, **kwargs): - nonlocal notify_called - notify_called = True - monkeypatch.setattr("assistant.project_manager.ProjectNotifier.notify_project_update", - AsyncMock(side_effect=mock_notify_project_update)) - - # Mock refresh_all_project_uis - refresh_called = False - async def mock_refresh_all_project_uis(*args, **kwargs): - nonlocal refresh_called - refresh_called = True - monkeypatch.setattr("assistant.project_manager.ProjectStorage.refresh_all_project_uis", - AsyncMock(side_effect=mock_refresh_all_project_uis)) - - # Call the method being tested - success, goal_name_result = await ProjectManager.delete_project_goal(context, goal_index) - - # Verify the result - assert success is True - assert goal_name_result == goal_name - - # Verify all the expected actions were performed - assert write_project_called - assert write_project_info_called - assert log_event_called - assert notify_called - assert refresh_called - - @pytest.mark.asyncio - async def test_delete_project_goal_invalid_index(self, context, monkeypatch): - """Test deleting a goal with an invalid index.""" - # Setup - project_id = "test-project-id" - goal_index = 5 # Out of range - - # Create a test project with fewer goals than the index - test_project = Project( - info=None, - brief=None, - goals=[ - ProjectGoal(name="Goal 1", description="Description 1", priority=1, success_criteria=[]), - ProjectGoal(name="Goal 2", description="Description 2", priority=2, success_criteria=[]), - ], - whiteboard=None, - requests=[], - ) - - # Mock get_project_id - async def mock_get_project_id(*args, **kwargs): - return project_id - monkeypatch.setattr("assistant.project_manager.ProjectManager.get_project_id", - AsyncMock(side_effect=mock_get_project_id)) - - # Mock require_current_user - async def mock_require_current_user(*args, **kwargs): - return "test-user-id" - monkeypatch.setattr("assistant.project_manager.require_current_user", - AsyncMock(side_effect=mock_require_current_user)) - - # Mock read_project - def mock_read_project(proj_id): - assert proj_id == project_id - return test_project - monkeypatch.setattr("assistant.project_manager.ProjectStorage.read_project", - MagicMock(side_effect=mock_read_project)) - - # Call the method being tested with an invalid index - success, error_message = await ProjectManager.delete_project_goal(context, goal_index) - - # Verify the result indicates failure with appropriate error message - assert success is False - assert error_message is not None - assert "Invalid goal index" in str(error_message) - - @pytest.mark.asyncio - async def test_delete_project_goal_no_project(self, context, monkeypatch): - """Test deleting a goal when no project is associated with the conversation.""" - # Mock get_project_id to return None - async def mock_get_project_id(*args, **kwargs): - return None - monkeypatch.setattr("assistant.project_manager.ProjectManager.get_project_id", - AsyncMock(side_effect=mock_get_project_id)) - - # Call the method being tested - success, error_message = await ProjectManager.delete_project_goal(context, 1) - - # Verify the result indicates failure with appropriate error message - assert success is False - assert error_message is not None - assert "No project associated with this conversation" in str(error_message) \ No newline at end of file diff --git a/assistants/project-assistant/tests/test_project_storage.py b/assistants/project-assistant/tests/test_project_storage.py deleted file mode 100644 index adafe60c6..000000000 --- a/assistants/project-assistant/tests/test_project_storage.py +++ /dev/null @@ -1,478 +0,0 @@ -""" -Tests for the direct project storage functionality. -""" - -import pathlib -import shutil -import unittest -import unittest.mock -import uuid -from datetime import datetime - -from assistant.conversation_project_link import ConversationProjectManager -from assistant.project_data import ( - InformationRequest, - LogEntry, - LogEntryType, - Project, - ProjectBrief, - ProjectGoal, - ProjectInfo, - ProjectLog, - ProjectWhiteboard, - RequestPriority, - RequestStatus, - SuccessCriterion, -) -from assistant.project_storage import ProjectStorage, ProjectStorageManager -from assistant.project_storage_models import ( - ConversationRole, - CoordinatorConversationMessage, - CoordinatorConversationStorage, -) -from semantic_workbench_api_model.workbench_model import AssistantStateEvent -from semantic_workbench_assistant import settings -from semantic_workbench_assistant.storage import write_model - - -class TestProjectStorage(unittest.IsolatedAsyncioTestCase): - """Test the direct project storage functionality.""" - - async def asyncSetUp(self): - """Set up test environment.""" - # Create a test directory - self.test_dir = pathlib.Path(__file__).parent.parent / ".data" / "test_project_storage" - self.test_dir.mkdir(parents=True, exist_ok=True) - - # Mock settings to use our test directory - self.original_storage_root = settings.storage.root - settings.storage.root = str(self.test_dir) - - # Create test IDs - self.project_id = str(uuid.uuid4()) - self.conversation_id = str(uuid.uuid4()) - self.user_id = "test-user-id" - - # Create project directory structure - self.project_dir = ProjectStorageManager.get_project_dir(self.project_id) - - # Set up directories for different conversation roles - self.coordinator_dir = self.project_dir / ConversationRole.COORDINATOR.value - self.coordinator_dir.mkdir(exist_ok=True) - - self.team_dir = self.project_dir / f"team_{self.conversation_id}" - self.team_dir.mkdir(exist_ok=True) - - # Set up patching - self.patches = [] - - # Create a mock context - self.context = unittest.mock.MagicMock() - self.context.id = self.conversation_id - - # Mock assistant - mock_assistant = unittest.mock.MagicMock() - mock_assistant.id = "test-assistant-id" - self.context.assistant = mock_assistant - - # Mock send_conversation_state_event - self.context.send_conversation_state_event = unittest.mock.AsyncMock() - - # Mock get_participants with the correct structure - participants_mock = unittest.mock.MagicMock() - participants_mock.participants = [] - self.context.get_participants = unittest.mock.AsyncMock(return_value=participants_mock) - - # Patch storage_directory_for_context - def mock_storage_directory_for_context(context, *args, **kwargs): - return self.test_dir / f"context_{context.id}" - - patch1 = unittest.mock.patch( - "assistant.project_storage.storage_directory_for_context", side_effect=mock_storage_directory_for_context - ) - self.mock_storage_directory = patch1.start() - self.patches.append(patch1) - - # Create initial test data - self.create_test_project_data() - - return None - - async def asyncTearDown(self): - """Clean up test environment.""" - # Clean up the test directory - if self.test_dir.exists(): - shutil.rmtree(self.test_dir) - - # Restore settings - settings.storage.root = self.original_storage_root - - # Stop all patches - for patch in self.patches: - patch.stop() - - def create_test_project_data(self): - """Create test project data.""" - # Create a project brief - test_goal = ProjectGoal( - name="Test Goal", - description="This is a test goal", - success_criteria=[SuccessCriterion(description="Test criterion")], - ) - - brief = ProjectBrief( - title="Test Project", - description="Test project description", - created_by=self.user_id, - updated_by=self.user_id, - conversation_id=self.conversation_id, - ) - - # Create a Project with the goal - project = Project( - info=None, - brief=brief, - goals=[test_goal], - whiteboard=None, - ) - - # Write the project to storage - project_path = ProjectStorageManager.get_project_path(self.project_id) - project_path.parent.mkdir(parents=True, exist_ok=True) - write_model(project_path, project) - - # Write brief to the proper path using ProjectStorage - brief_path = ProjectStorageManager.get_brief_path(self.project_id) - brief_path.parent.mkdir(parents=True, exist_ok=True) - write_model(brief_path, brief) - - # Create project info - project_info = ProjectInfo( - project_id=self.project_id, - coordinator_conversation_id=self.conversation_id, - ) - project_info_path = ProjectStorageManager.get_project_info_path(self.project_id) - write_model(project_info_path, project_info) - - # Create an information request - request = InformationRequest( - request_id=str(uuid.uuid4()), - title="Test Request", - description="This is a test request", - priority=RequestPriority.HIGH, - status=RequestStatus.NEW, # Use enum value - created_by=self.user_id, - updated_by=self.user_id, - conversation_id=self.conversation_id, - ) - - # Write request to the proper path using ProjectStorage - request_path = ProjectStorageManager.get_information_request_path(self.project_id, request.request_id) - request_path.parent.mkdir(parents=True, exist_ok=True) - write_model(request_path, request) - - # Create context directories - context_dir = self.test_dir / f"context_{self.conversation_id}" - context_dir.mkdir(exist_ok=True, parents=True) - - async def test_read_project_brief(self): - """Test reading a project brief.""" - # Read the brief using ProjectStorage - brief = ProjectStorage.read_project_brief(self.project_id) - project = ProjectStorage.read_project(self.project_id) - - # Verify the brief was loaded correctly - self.assertIsNotNone(brief, "Should load the brief") - if brief: # Type checking guard - self.assertEqual(brief.title, "Test Project") - self.assertEqual(brief.description, "Test project description") - - # Verify the project was loaded with goals correctly - self.assertIsNotNone(project, "Should load the project") - if project: # Type checking guard - self.assertEqual(len(project.goals), 1) - self.assertEqual(project.goals[0].name, "Test Goal") - - async def test_read_information_request(self): - """Test reading an information request.""" - # First get all requests to find the request ID - requests = ProjectStorage.get_all_information_requests(self.project_id) - self.assertEqual(len(requests), 1, "Should find one request") - request_id = requests[0].request_id - - # Read the request using ProjectStorage - request = ProjectStorage.read_information_request(self.project_id, request_id) - - # Verify the request was loaded correctly - self.assertIsNotNone(request, "Should load the request") - if request: # Type checking guard - self.assertEqual(request.title, "Test Request") - self.assertEqual(request.description, "This is a test request") - self.assertEqual(request.priority, RequestPriority.HIGH) - - async def test_write_project_log(self): - """Test writing a project log.""" - # Create a log entry and proper LogEntry objects - log_entry = ProjectLog( - entries=[ - LogEntry( - id=str(uuid.uuid4()), - timestamp=datetime.utcnow(), - entry_type=LogEntryType.INFORMATION_UPDATE, - message="Test log entry", - user_id=self.user_id, - user_name="Test User", - ) - ], - ) - - # Write the log - ProjectStorage.write_project_log(self.project_id, log_entry) - - # Read the log back - log = ProjectStorage.read_project_log(self.project_id) - - # Verify the log was saved and loaded correctly - self.assertIsNotNone(log, "Should load the log") - if log: # Type checking guard - self.assertEqual(len(log.entries), 1) - self.assertEqual(log.entries[0].entry_type, LogEntryType.INFORMATION_UPDATE) - self.assertEqual(log.entries[0].message, "Test log entry") - - async def test_project_directory_structure(self): - """Test the project directory structure.""" - # Verify project directory exists - self.assertTrue(self.project_dir.exists(), "Project directory should exist") - - # Verify Coordinator directory exists - self.assertTrue(self.coordinator_dir.exists(), "Coordinator directory should exist") - - # Verify team directory exists - self.assertTrue(self.team_dir.exists(), "Team directory should exist") - - async def test_coordinator_conversation_storage(self): - """Test the coordinator conversation storage functionality.""" - # Create coordinator conversation storage - messages = [ - CoordinatorConversationMessage( - message_id=str(uuid.uuid4()), - content="Test message 1", - sender_name="Test User", - is_assistant=False, - ), - CoordinatorConversationMessage( - message_id=str(uuid.uuid4()), - content="Test message 2", - sender_name="Test Assistant", - is_assistant=True, - ), - ] - - conv_storage = CoordinatorConversationStorage( - project_id=self.project_id, - messages=messages, - ) - - # Write to storage - ProjectStorage.write_coordinator_conversation(self.project_id, conv_storage) - - # Read back - read_storage = ProjectStorage.read_coordinator_conversation(self.project_id) - - # Verify data was saved correctly - self.assertIsNotNone(read_storage, "Should load the coordinator conversation") - if read_storage: - self.assertEqual(read_storage.project_id, self.project_id) - self.assertEqual(len(read_storage.messages), 2) - self.assertEqual(read_storage.messages[0].content, "Test message 1") - self.assertEqual(read_storage.messages[1].content, "Test message 2") - self.assertFalse(read_storage.messages[0].is_assistant) - self.assertTrue(read_storage.messages[1].is_assistant) - - async def test_append_coordinator_message(self): - """Test appending a message to coordinator conversation storage.""" - # Start with empty storage - ProjectStorage.append_coordinator_message( - project_id=self.project_id, - message_id=str(uuid.uuid4()), - content="First message", - sender_name="Test User", - ) - - # Append another message - ProjectStorage.append_coordinator_message( - project_id=self.project_id, - message_id=str(uuid.uuid4()), - content="Second message", - sender_name="Test Assistant", - is_assistant=True, - ) - - # Read back - storage = ProjectStorage.read_coordinator_conversation(self.project_id) - - # Verify messages were added - self.assertIsNotNone(storage, "Should create and load the coordinator conversation") - if storage: - self.assertEqual(len(storage.messages), 2) - self.assertEqual(storage.messages[0].content, "First message") - self.assertEqual(storage.messages[1].content, "Second message") - self.assertFalse(storage.messages[0].is_assistant) - self.assertTrue(storage.messages[1].is_assistant) - - async def test_message_limit_in_coordinator_conversation(self): - """Test that coordinator conversation storage limits to the most recent messages.""" - # Add more than 50 messages - for i in range(60): - ProjectStorage.append_coordinator_message( - project_id=self.project_id, - message_id=str(uuid.uuid4()), - content=f"Message {i + 1}", - sender_name="Test User", - ) - - # Read back - storage = ProjectStorage.read_coordinator_conversation(self.project_id) - - # Verify only the most recent 50 messages are kept - self.assertIsNotNone(storage, "Should load the coordinator conversation") - if storage: - self.assertEqual(len(storage.messages), 50, "Should limit to 50 messages") - # First message should be the 11th message (since we keep the last 50 of 60) - self.assertEqual(storage.messages[0].content, "Message 11") - # Last message should be the 60th message - self.assertEqual(storage.messages[49].content, "Message 60") - - async def test_project_whiteboard(self): - """Test reading and writing project whiteboard.""" - # Create whiteboard - whiteboard = ProjectWhiteboard( - content="# Test Whiteboard\n\nThis is a test whiteboard.", - is_auto_generated=True, - created_by=self.user_id, - updated_by=self.user_id, - conversation_id=self.conversation_id, - ) - - # Write whiteboard - ProjectStorage.write_project_whiteboard(self.project_id, whiteboard) - - # Read whiteboard - read_whiteboard = ProjectStorage.read_project_whiteboard(self.project_id) - - # Verify whiteboard was saved correctly - self.assertIsNotNone(read_whiteboard, "Should load the whiteboard") - if read_whiteboard: - self.assertEqual(read_whiteboard.content, "# Test Whiteboard\n\nThis is a test whiteboard.") - self.assertTrue(read_whiteboard.is_auto_generated) - - async def test_refresh_current_ui(self): - """Test refreshing the current UI inspector.""" - # Call refresh_current_ui - await ProjectStorage.refresh_current_ui(self.context) - - # Verify that send_conversation_state_event was called with correct parameters - self.context.send_conversation_state_event.assert_called_once() - called_event = self.context.send_conversation_state_event.call_args[0][0] - self.assertIsInstance(called_event, AssistantStateEvent) - self.assertEqual(called_event.state_id, "project_status") - self.assertEqual(called_event.event, "updated") - self.assertIsNone(called_event.state) - - async def test_project_info(self): - """Test reading and writing project info.""" - # Read existing project info - project_info = ProjectStorage.read_project_info(self.project_id) - - # Verify it was loaded correctly - self.assertIsNotNone(project_info, "Should load project info") - if project_info: - self.assertEqual(project_info.project_id, self.project_id) - self.assertEqual(project_info.coordinator_conversation_id, self.conversation_id) - - # Update project info - if project_info: - project_info.status_message = "Test status message" - project_info.progress_percentage = 50 - project_info.next_actions = ["Action 1", "Action 2"] - - # Write updated project info - ProjectStorage.write_project_info(self.project_id, project_info) - - # Read updated project info - updated_info = ProjectStorage.read_project_info(self.project_id) - - # Verify updates were saved - self.assertIsNotNone(updated_info, "Should load updated project info") - if updated_info: - self.assertEqual(updated_info.status_message, "Test status message") - self.assertEqual(updated_info.progress_percentage, 50) - self.assertEqual(updated_info.next_actions, ["Action 1", "Action 2"]) - - async def test_get_linked_conversations_dir(self): - """Test getting linked conversations directory.""" - # Get linked conversations directory - linked_dir = ProjectStorageManager.get_linked_conversations_dir(self.project_id) - - # Verify directory exists - self.assertTrue(linked_dir.exists(), "Linked conversations directory should exist") - self.assertEqual(linked_dir.name, "linked_conversations") - - async def test_conversation_association(self): - """Test conversation association with project.""" - # Mock ConversationProjectManager.associate_conversation_with_project - with unittest.mock.patch("assistant.conversation_project_link.write_model") as mock_write_model: - # Mock conversation project path - conversation_project_file = ProjectStorageManager.get_conversation_project_file_path(self.context) - - # Call associate_conversation_with_project - await ConversationProjectManager.associate_conversation_with_project(self.context, self.project_id) - - # Verify write_model was called - mock_write_model.assert_called_once() - - # Verify the file path in the call - call_args = mock_write_model.call_args[0] - self.assertEqual(call_args[0], conversation_project_file) - - # Verify the ProjectAssociation object created - self.assertEqual(call_args[1].project_id, self.project_id) - - async def test_log_project_event(self): - """Test logging a project event.""" - - # Create a test log entry directly - log_entry = LogEntry( - entry_type=LogEntryType.INFORMATION_UPDATE, - message="Test direct log entry", - user_id=self.user_id, - user_name="Test User", - related_entity_id="test-entity-id", - metadata={"test": "metadata"}, - ) - - # Create a log with the entry - log = ProjectLog(entries=[log_entry]) - - # Write the log directly - ProjectStorage.write_project_log(self.project_id, log) - - # Read the log back - read_log = ProjectStorage.read_project_log(self.project_id) - self.assertIsNotNone(read_log, "Should load the log") - if read_log: - # Find our test entry - found_entry = False - for entry in read_log.entries: - if entry.message == "Test direct log entry": - found_entry = True - self.assertEqual(entry.entry_type, LogEntryType.INFORMATION_UPDATE) - self.assertEqual(entry.user_id, self.user_id) - self.assertEqual(entry.user_name, "Test User") - self.assertEqual(entry.related_entity_id, "test-entity-id") - self.assertEqual(entry.metadata, {"test": "metadata"}) - self.assertTrue(found_entry, "Should find the added log entry") - - -if __name__ == "__main__": - unittest.main() diff --git a/assistants/project-assistant/tests/test_share_manager.py b/assistants/project-assistant/tests/test_share_manager.py new file mode 100644 index 000000000..4ad7eaaab --- /dev/null +++ b/assistants/project-assistant/tests/test_share_manager.py @@ -0,0 +1,295 @@ +""" +Tests for the KnowledgeTransferManager functionality. +""" + +from unittest.mock import AsyncMock, MagicMock + +import pytest +from assistant.data import ( + LearningObjective, + LearningOutcome, + Share, +) +from assistant.domain import LearningObjectivesManager +from semantic_workbench_assistant.assistant_app import ConversationContext + + +class TestKnowledgeTransferManager: + """Test the KnowledgeTransferManager class.""" + + @pytest.fixture + def context(self): + """Set up test fixtures.""" + context = AsyncMock(spec=ConversationContext) + context.conversation = MagicMock() + context.id = "test-conversation-id" + return context + + # DISABLED: delete_project_goal functionality has been removed from the codebase + # @pytest.mark.asyncio + async def disabled_test_delete_project_goal(self, context, monkeypatch): + """Test the delete_project_goal method in KnowledgeTransferManager.""" + # Setup test data + project_id = "test-project-id" + objective_index = "test-objective-id-1" + goal_name = "Test Goal" + goal_description = "Test Description" + + # Create a test project with multiple goals + test_project = Share( + share_id=project_id, + brief=None, + learning_objectives=[ + LearningObjective( + name="Goal 1", + description="Description 1", + priority=1, + learning_outcomes=[], + ), + LearningObjective( + name=goal_name, + description=goal_description, + priority=2, + learning_outcomes=[ + LearningOutcome(description="Criterion 1"), + LearningOutcome(description="Criterion 2"), + ], + ), + LearningObjective( + name="Goal 3", + description="Description 3", + priority=3, + learning_outcomes=[], + ), + ], + digest=None, + requests=[], + log=None, + ) + + # Set additional fields on the test project + test_project.coordinator_conversation_id = "test-coordinator-id" + # Note: completion_percentage removed from model + test_project.version = 1 + # transfer_state field has been removed from the data model + + # Mock get_project_id + async def mock_get_project_id(*args, **kwargs): + return project_id + + monkeypatch.setattr( + "assistant.manager.KnowledgeTransferManager.get_project_id", + AsyncMock(side_effect=mock_get_project_id), + ) + + # Mock require_current_user + async def mock_require_current_user(*args, **kwargs): + return "test-user-id" + + monkeypatch.setattr( + "assistant.manager.require_current_user", + AsyncMock(side_effect=mock_require_current_user), + ) + + # Mock read_project + def mock_read_project(proj_id): + assert proj_id == project_id + return test_project + + monkeypatch.setattr( + "assistant.storage.ShareStorage.read_project", + MagicMock(side_effect=mock_read_project), + ) + + # Mock read_share_info (now returns the same project) + def mock_read_share_info(proj_id): + assert proj_id == project_id + return test_project + + monkeypatch.setattr( + "assistant.storage.ShareStorage.read_share_info", + MagicMock(side_effect=mock_read_share_info), + ) + + # Track if write_project and write_project_info were called with correct arguments + write_project_called = False + write_project_info_called = False + + # Mock write_project + def mock_write_project(proj_id, project): + nonlocal write_project_called + assert proj_id == project_id + # Verify goal was removed + assert len(project.learning_objectives) == 2 + assert project.learning_objectives[0].name == "Goal 1" + assert project.learning_objectives[1].name == "Goal 3" + write_project_called = True + + monkeypatch.setattr( + "assistant.project_manager.ShareStorage.write_project", + MagicMock(side_effect=mock_write_project), + ) + + # Mock write_share_info (now same as write_share) + def mock_write_share_info(proj_id, package): + nonlocal write_project_info_called + assert proj_id == project_id + # Verify package was updated + assert package.achieved_outcomes == 0 # Completed criterion was in the deleted goal + assert package.total_outcomes == 0 # All criteria were in the deleted goal + # Note: completion_percentage removed from model + assert package.version == 2 # Incremented + write_project_info_called = True + + monkeypatch.setattr( + "assistant.storage.ShareStorage.write_share_info", + MagicMock(side_effect=mock_write_share_info), + ) + + # Mock log_project_event + log_event_called = False + + async def mock_log_project_event(*args, **kwargs): + nonlocal log_event_called + log_event_called = True + + monkeypatch.setattr( + "assistant.project_manager.ShareStorage.log_project_event", + AsyncMock(side_effect=mock_log_project_event), + ) + + # Mock notify_project_update + notify_called = False + + async def mock_notify_project_update(*args, **kwargs): + nonlocal notify_called + notify_called = True + + monkeypatch.setattr( + "assistant.notifications.Notifications.notify_all", + AsyncMock(side_effect=mock_notify_project_update), + ) + + # Mock refresh_all_project_uis + refresh_called = False + + async def mock_refresh_all_project_uis(*args, **kwargs): + nonlocal refresh_called + refresh_called = True + + monkeypatch.setattr( + "assistant.project_manager.ShareStorage.refresh_all_project_uis", + AsyncMock(side_effect=mock_refresh_all_project_uis), + ) + + # Call the method being tested + ( + success, + goal_name_result, + ) = await LearningObjectivesManager.delete_learning_objective(context, objective_index) + + # Verify the result + assert success is True + assert goal_name_result == goal_name + + # Verify all the expected actions were performed + assert write_project_called + assert write_project_info_called + assert log_event_called + assert notify_called + assert refresh_called + + # DISABLED: delete_project_goal functionality has been removed from the codebase + # @pytest.mark.asyncio + async def disabled_test_delete_project_goal_invalid_index(self, context, monkeypatch): + """Test deleting a goal with an invalid index.""" + # Setup + project_id = "test-project-id" + objective_index = "invalid-objective-id" # Invalid ID + + # Create a test project with fewer goals than the index + test_project = Share( + share_id=project_id, + brief=None, + learning_objectives=[ + LearningObjective( + name="Goal 1", + description="Description 1", + priority=1, + learning_outcomes=[], + ), + LearningObjective( + name="Goal 2", + description="Description 2", + priority=2, + learning_outcomes=[], + ), + ], + digest=None, + requests=[], + log=None, + ) + + # Mock get_project_id + async def mock_get_project_id(*args, **kwargs): + return project_id + + monkeypatch.setattr( + "assistant.project_manager.KnowledgeTransferManager.get_project_id", + AsyncMock(side_effect=mock_get_project_id), + ) + + # Mock require_current_user + async def mock_require_current_user(*args, **kwargs): + return "test-user-id" + + monkeypatch.setattr( + "assistant.project_manager.require_current_user", + AsyncMock(side_effect=mock_require_current_user), + ) + + # Mock read_project + def mock_read_project(proj_id): + assert proj_id == project_id + return test_project + + monkeypatch.setattr( + "assistant.project_manager.ShareStorage.read_project", + MagicMock(side_effect=mock_read_project), + ) + + # Call the method being tested with an invalid index + ( + success, + error_message, + ) = await LearningObjectivesManager.delete_learning_objective(context, objective_index) + + # Verify the result indicates failure with appropriate error message + assert success is False + assert error_message is not None + assert "Invalid goal index" in str(error_message) + + # DISABLED: delete_project_goal functionality has been removed from the codebase + # @pytest.mark.asyncio + async def disabled_test_delete_project_goal_no_project(self, context, monkeypatch): + """Test deleting a goal when no project is associated with the conversation.""" + + # Mock get_project_id to return None + async def mock_get_project_id(*args, **kwargs): + return None + + monkeypatch.setattr( + "assistant.project_manager.KnowledgeTransferManager.get_project_id", + AsyncMock(side_effect=mock_get_project_id), + ) + + # Call the method being tested + ( + success, + error_message, + ) = await LearningObjectivesManager.delete_learning_objective(context, "test-objective-id") + + # Verify the result indicates failure with appropriate error message + assert success is False + assert error_message is not None + assert "No project associated with this conversation" in str(error_message) diff --git a/assistants/project-assistant/tests/test_share_storage.py b/assistants/project-assistant/tests/test_share_storage.py new file mode 100644 index 000000000..e1a55a531 --- /dev/null +++ b/assistants/project-assistant/tests/test_share_storage.py @@ -0,0 +1,484 @@ +""" +Tests for the direct project storage functionality. +""" + +import pathlib +import shutil +import unittest +import unittest.mock +import uuid +from datetime import datetime + +from assistant.data import ( + ConversationRole, + CoordinatorConversationMessage, + CoordinatorConversationMessages, + InformationRequest, + InspectorTab, + KnowledgeBrief, + KnowledgeDigest, + LearningObjective, + LearningOutcome, + LogEntry, + LogEntryType, + RequestPriority, + RequestStatus, + Share, + ShareLog, +) +from assistant.domain.share_manager import ShareManager +from assistant.notifications import Notifications +from assistant.storage import ShareStorage, ShareStorageManager +from semantic_workbench_api_model.workbench_model import AssistantStateEvent +from semantic_workbench_assistant import settings + + +class TestShareStorage(unittest.IsolatedAsyncioTestCase): + """Test the direct project storage functionality.""" + + async def asyncSetUp(self): + """Set up test environment.""" + # Create a test directory + self.test_dir = pathlib.Path(__file__).parent.parent / ".data" / "test_project_storage" + self.test_dir.mkdir(parents=True, exist_ok=True) + + # Mock settings to use our test directory + self.original_storage_root = settings.storage.root + settings.storage.root = str(self.test_dir) + + # Create test IDs + self.share_id = str(uuid.uuid4()) + self.conversation_id = str(uuid.uuid4()) + self.user_id = "test-user-id" + + # Create project directory structure + self.project_dir = ShareStorageManager.get_share_dir(self.share_id) + + # Set up directories for different conversation roles + self.coordinator_dir = self.project_dir / ConversationRole.COORDINATOR.value + self.coordinator_dir.mkdir(exist_ok=True) + + self.team_dir = self.project_dir / f"team_{self.conversation_id}" + self.team_dir.mkdir(exist_ok=True) + + # Set up patching + self.patches = [] + + # Create a mock context + self.context = unittest.mock.MagicMock() + self.context.id = self.conversation_id + + # Mock assistant + mock_assistant = unittest.mock.MagicMock() + mock_assistant.id = "test-assistant-id" + self.context.assistant = mock_assistant + + # Mock send_conversation_state_event + self.context.send_conversation_state_event = unittest.mock.AsyncMock() + + # Mock get_participants with the correct structure + participants_mock = unittest.mock.MagicMock() + participants_mock.participants = [] + self.context.get_participants = unittest.mock.AsyncMock(return_value=participants_mock) + + # Patch storage_directory_for_context + def mock_storage_directory_for_context(context, *args, **kwargs): + return self.test_dir / f"context_{context.id}" + + patch1 = unittest.mock.patch( + "assistant.storage.storage_directory_for_context", + side_effect=mock_storage_directory_for_context, + ) + self.mock_storage_directory = patch1.start() + self.patches.append(patch1) + + # Create initial test data + self.create_test_project_data() + + return None + + async def asyncTearDown(self): + """Clean up test environment.""" + # Clean up the test directory + if self.test_dir.exists(): + shutil.rmtree(self.test_dir) + + # Restore settings + settings.storage.root = self.original_storage_root + + # Stop all patches + for patch in self.patches: + patch.stop() + + def create_test_project_data(self): + """Create test project data.""" + # Create a project brief + test_goal = LearningObjective( + name="Test Goal", + description="This is a test goal", + learning_outcomes=[LearningOutcome(description="Test criterion")], + ) + + brief = KnowledgeBrief( + title="Test KnowledgePackage", + content="Test project description", + created_by=self.user_id, + updated_by=self.user_id, + conversation_id=self.conversation_id, + ) + + # Create a KnowledgePackage with the goal and brief + project = Share( + share_id=self.share_id, + coordinator_conversation_id=self.conversation_id, + brief=brief, + learning_objectives=[test_goal], + digest=None, + ) + + # Write the project to storage (this now includes the brief and learning objectives) + ShareStorage.write_share(self.share_id, project) + + # Create an information request + request = InformationRequest( + request_id=str(uuid.uuid4()), + title="Test Request", + description="This is a test request", + priority=RequestPriority.HIGH, + status=RequestStatus.NEW, # Use enum value + created_by=self.user_id, + updated_by=self.user_id, + conversation_id=self.conversation_id, + ) + + # Write request using ShareStorage (this will add it to the main share file) + ShareStorage.write_information_request(self.share_id, request) + + # Create context directories + context_dir = self.test_dir / f"context_{self.conversation_id}" + context_dir.mkdir(exist_ok=True, parents=True) + + async def test_read_project_brief(self): + """Test reading a project brief.""" + # Read the brief using ShareStorage + brief = ShareStorage.read_knowledge_brief(self.share_id) + project = ShareStorage.read_share(self.share_id) + + # Verify the brief was loaded correctly + assert brief is not None, "Should load the brief" + if brief: # Type checking guard + assert brief.title == "Test KnowledgePackage" + assert brief.content == "Test project description" + + # Verify the project was loaded with goals correctly + assert project is not None, "Should load the project" + if project: # Type checking guard + assert len(project.learning_objectives) == 1 + assert project.learning_objectives[0].name == "Test Goal" + + async def test_read_information_request(self): + """Test reading an information request.""" + # First get all requests to find the request ID + requests = ShareStorage.get_all_information_requests(self.share_id) + assert len(requests) == 1, "Should find one request" + request_id = requests[0].request_id + + # Read the request using ShareStorage + request = ShareStorage.read_information_request(self.share_id, request_id) + + # Verify the request was loaded correctly + assert request is not None, "Should load the request" + if request: # Type checking guard + assert request.title == "Test Request" + assert request.description == "This is a test request" + assert request.priority == RequestPriority.HIGH + + async def test_write_project_log(self): + """Test writing a project log.""" + # Create a log entry and proper LogEntry objects + log_entry = ShareLog( + entries=[ + LogEntry( + id=str(uuid.uuid4()), + timestamp=datetime.utcnow(), + entry_type=LogEntryType.SHARE_INFORMATION_UPDATE, + message="Test log entry", + user_id=self.user_id, + user_name="Test User", + ) + ], + ) + + # Write the log + ShareStorage.write_share_log(self.share_id, log_entry) + + # Read the log back + log = ShareStorage.read_share_log(self.share_id) + + # Verify the log was saved and loaded correctly + assert log is not None, "Should load the log" + if log: # Type checking guard + assert len(log.entries) == 1 + assert log.entries[0].entry_type == LogEntryType.SHARE_INFORMATION_UPDATE + assert log.entries[0].message == "Test log entry" + + async def test_project_directory_structure(self): + """Test the project directory structure.""" + # Verify project directory exists + assert self.project_dir.exists(), "KnowledgePackage directory should exist" + + # Verify Coordinator directory exists + assert self.coordinator_dir.exists(), "Coordinator directory should exist" + + # Verify team directory exists + assert self.team_dir.exists(), "Team directory should exist" + + async def test_coordinator_conversation_storage(self): + """Test the coordinator conversation storage functionality.""" + # Create coordinator conversation storage + messages = [ + CoordinatorConversationMessage( + message_id=str(uuid.uuid4()), + content="Test message 1", + sender_name="Test User", + is_assistant=False, + ), + CoordinatorConversationMessage( + message_id=str(uuid.uuid4()), + content="Test message 2", + sender_name="Test Assistant", + is_assistant=True, + ), + ] + + conv_storage = CoordinatorConversationMessages( + knowledge_share_id=self.share_id, + messages=messages, + ) + + # Write to storage + ShareStorage.write_coordinator_conversation(self.share_id, conv_storage) + + # Read back + read_storage = ShareStorage.read_coordinator_conversation(self.share_id) + + # Verify data was saved correctly + assert read_storage is not None, "Should load the coordinator conversation" + if read_storage: + assert read_storage.knowledge_share_id == self.share_id + assert len(read_storage.messages) == 2 + assert read_storage.messages[0].content == "Test message 1" + assert read_storage.messages[1].content == "Test message 2" + assert not read_storage.messages[0].is_assistant + assert read_storage.messages[1].is_assistant + + async def test_append_coordinator_message(self): + """Test appending a message to coordinator conversation storage.""" + # Start with empty storage + ShareStorage.append_coordinator_message( + share_id=self.share_id, + message_id=str(uuid.uuid4()), + content="First message", + sender_name="Test User", + ) + + # Append another message + ShareStorage.append_coordinator_message( + share_id=self.share_id, + message_id=str(uuid.uuid4()), + content="Second message", + sender_name="Test Assistant", + is_assistant=True, + ) + + # Read back + storage = ShareStorage.read_coordinator_conversation(self.share_id) + + # Verify messages were added + assert storage is not None, "Should create and load the coordinator conversation" + if storage: + assert len(storage.messages) == 2 + assert storage.messages[0].content == "First message" + assert storage.messages[1].content == "Second message" + assert not storage.messages[0].is_assistant + assert storage.messages[1].is_assistant + + async def test_message_limit_in_coordinator_conversation(self): + """Test that coordinator conversation storage limits to the most recent messages.""" + # Add more than 50 messages + for i in range(60): + ShareStorage.append_coordinator_message( + share_id=self.share_id, + message_id=str(uuid.uuid4()), + content=f"Message {i + 1}", + sender_name="Test User", + ) + + # Read back + storage = ShareStorage.read_coordinator_conversation(self.share_id) + + # Verify only the most recent 50 messages are kept + assert storage is not None, "Should load the coordinator conversation" + if storage: + assert len(storage.messages) == 50, "Should limit to 50 messages" + # First message should be the 11th message (since we keep the last 50 of 60) + assert storage.messages[0].content == "Message 11" + # Last message should be the 60th message + assert storage.messages[49].content == "Message 60" + + async def test_knowledge_digest(self): + """Test reading and writing knowledge digest.""" + # Create knowledge digest + digest = KnowledgeDigest( + content="# Test Knowledge Digest\n\nThis is a test knowledge digest.", + is_auto_generated=True, + created_by=self.user_id, + updated_by=self.user_id, + conversation_id=self.conversation_id, + ) + + # Write knowledge digest (this will add it to the main share file) + ShareStorage.write_knowledge_digest(self.share_id, digest) + + # Read knowledge digest + read_digest = ShareStorage.read_knowledge_digest(self.share_id) + + # Verify knowledge digest was saved correctly + assert read_digest is not None, "Should load the knowledge digest" + if read_digest: + assert read_digest.content == "# Test Knowledge Digest\n\nThis is a test knowledge digest." + assert read_digest.is_auto_generated + + async def test_refresh_current_ui(self): + """Test refreshing the current UI inspector.""" + # Call refresh_current_ui + await Notifications.notify_state_update( + self.context, + [ + InspectorTab.BRIEF, + InspectorTab.LEARNING, + InspectorTab.SHARING, + InspectorTab.DEBUG, + ], + ) + + # Verify that send_conversation_state_event was called 4 times (once per inspector tab) + assert self.context.send_conversation_state_event.call_count == 4 + + # Get all the calls + calls = self.context.send_conversation_state_event.call_args_list + expected_state_ids = ["brief", "learning", "sharing", "debug"] + actual_state_ids = [call[0][0].state_id for call in calls] + + # Verify each call has the correct parameters + for call_args in calls: + called_event = call_args[0][0] + assert isinstance(called_event, AssistantStateEvent) + assert called_event.event == "updated" + assert called_event.state is None + assert called_event.state_id in expected_state_ids + + # Verify all expected state IDs were called + assert set(actual_state_ids) == set(expected_state_ids) + + async def test_knowledge_package_info(self): + """Test reading and writing knowledge package info.""" + # Read existing knowledge package + package = ShareStorage.read_share(self.share_id) + + # Verify it was loaded correctly + assert package is not None, "Should load knowledge package" + if package: + assert package.share_id == self.share_id + + # Update knowledge package info + package.transfer_notes = "Test status message" + # Note: completion_percentage removed from model + package.next_learning_actions = ["Action 1", "Action 2"] + + # Write updated knowledge package + ShareStorage.write_share(self.share_id, package) + + # Read updated knowledge package + updated_package = ShareStorage.read_share(self.share_id) + + # Verify updates were saved + assert updated_package is not None, "Should load updated knowledge package" + if updated_package: + assert updated_package.transfer_notes == "Test status message" + # Note: completion_percentage removed from model + assert updated_package.next_learning_actions == ["Action 1", "Action 2"] + + async def test_conversation_tracking_in_json(self): + """Test that conversations are tracked in JSON instead of file system.""" + # Load knowledge package + package = ShareStorage.read_share(self.share_id) + assert package is not None + + if package: + # Verify team_conversations dict exists (even if empty) + assert isinstance(package.team_conversations, dict) + + # Verify helper methods work + linked_conversations = await ShareManager.get_linked_conversations(self.context) + assert isinstance(linked_conversations, list) + + async def test_conversation_association(self): + """Test conversation role setting.""" + # Mock ShareManager.set_conversation_role + with unittest.mock.patch("assistant.domain.share_manager.write_model") as mock_write_model: + # Mock conversation role path + conversation_role_file = ShareStorageManager.get_conversation_role_file_path(self.context) + + # Call set_conversation_role + await ShareManager.set_conversation_role(self.context, self.share_id, ConversationRole.COORDINATOR) + + # Verify write_model was called + mock_write_model.assert_called_once() + + # Verify the file path in the call + call_args = mock_write_model.call_args[0] + assert call_args[0] == conversation_role_file + + # Verify the ConversationShareInfo object created + assert call_args[1].share_id == self.share_id + assert call_args[1].role == ConversationRole.COORDINATOR + + async def test_log_project_event(self): + """Test logging a project event.""" + + # Create a test log entry directly + log_entry = LogEntry( + entry_type=LogEntryType.SHARE_INFORMATION_UPDATE, + message="Test direct log entry", + user_id=self.user_id, + user_name="Test User", + related_entity_id="test-entity-id", + metadata={"test": "metadata"}, + ) + + # Create a log with the entry + log = ShareLog(entries=[log_entry]) + + # Write the log directly + ShareStorage.write_share_log(self.share_id, log) + + # Read the log back + read_log = ShareStorage.read_share_log(self.share_id) + assert read_log is not None, "Should load the log" + if read_log: + # Find our test entry + found_entry = False + for entry in read_log.entries: + if entry.message == "Test direct log entry": + found_entry = True + assert entry.entry_type == LogEntryType.SHARE_INFORMATION_UPDATE + assert entry.user_id == self.user_id + assert entry.user_name == "Test User" + assert entry.related_entity_id == "test-entity-id" + assert entry.metadata == {"test": "metadata"} + assert found_entry, "Should find the added log entry" + + +if __name__ == "__main__": + unittest.main() diff --git a/assistants/project-assistant/tests/test_project_tools.py b/assistants/project-assistant/tests/test_share_tools.py similarity index 56% rename from assistants/project-assistant/tests/test_project_tools.py rename to assistants/project-assistant/tests/test_share_tools.py index f4036f3cc..9a54912c7 100644 --- a/assistants/project-assistant/tests/test_project_tools.py +++ b/assistants/project-assistant/tests/test_share_tools.py @@ -1,5 +1,5 @@ """ -Tests for the ProjectTools functionality. +Tests for the ShareTools functionality. """ import contextlib @@ -7,15 +7,15 @@ import openai_client import pytest -from assistant.project_analysis import detect_information_request_needs -from assistant.project_storage_models import ConversationRole -from assistant.tools import ProjectTools +from assistant.agentic.detect_information_request_needs import detect_information_request_needs +from assistant.data import ConversationRole +from assistant.tools import ShareTools from semantic_workbench_assistant.assistant_app import ConversationContext # Use pytest for all tests for consistency -class TestProjectTools: - """Test the ProjectTools class.""" +class TestShareTools: + """Test the ShareTools class.""" @pytest.fixture def context(self): @@ -27,61 +27,46 @@ def context(self): context.assistant = MagicMock() # Use the correct property name (_template_id) from assistant.utils import DEFAULT_TEMPLATE_ID + context.assistant._template_id = DEFAULT_TEMPLATE_ID return context def test_initialization(self, context): - """Test that ProjectTools initializes correctly.""" - # Test Coordinator role - coordinator_tools = ProjectTools(context, ConversationRole.COORDINATOR) - assert coordinator_tools.role == ConversationRole.COORDINATOR - assert coordinator_tools.tool_functions is not None + """Test that ShareTools initializes correctly.""" + # Test ShareTools initialization + share_tools = ShareTools(context) + assert share_tools.context == context + + # Test coordinator tools + coordinator_tool_functions = share_tools.conversationalist_tools() + assert coordinator_tool_functions is not None # Verify Coordinator-specific functions are registered - assert "update_brief" in coordinator_tools.tool_functions.function_map - assert "add_project_goal" in coordinator_tools.tool_functions.function_map - assert "delete_project_goal" in coordinator_tools.tool_functions.function_map - assert "resolve_information_request" in coordinator_tools.tool_functions.function_map - assert "mark_project_ready_for_working" in coordinator_tools.tool_functions.function_map + assert "update_brief" in coordinator_tool_functions.function_map + assert "resolve_information_request" in coordinator_tool_functions.function_map # Verify Team-specific functions are NOT registered - assert "create_information_request" not in coordinator_tools.tool_functions.function_map - assert "update_project_status" not in coordinator_tools.tool_functions.function_map - assert "mark_criterion_completed" not in coordinator_tools.tool_functions.function_map - assert "report_project_completion" not in coordinator_tools.tool_functions.function_map + assert "create_information_request" not in coordinator_tool_functions.function_map + assert "delete_information_request" not in coordinator_tool_functions.function_map - # Test Team role - team_tools = ProjectTools(context, ConversationRole.TEAM) - assert team_tools.role == ConversationRole.TEAM - assert team_tools.tool_functions is not None + # Test team tools + team_tool_functions = share_tools.team_tools() + assert team_tool_functions is not None # Verify Team-specific functions are registered - assert "create_information_request" in team_tools.tool_functions.function_map - assert "update_project_status" in team_tools.tool_functions.function_map # Updated to match implementation - assert "mark_criterion_completed" in team_tools.tool_functions.function_map - assert "report_project_completion" in team_tools.tool_functions.function_map - assert "delete_information_request" in team_tools.tool_functions.function_map # Added new function + assert "create_information_request" in team_tool_functions.function_map + assert "delete_information_request" in team_tool_functions.function_map # Verify Coordinator-specific functions are NOT registered - assert "create_project_brief" not in team_tools.tool_functions.function_map - assert "add_project_goal" not in team_tools.tool_functions.function_map - assert "resolve_information_request" not in team_tools.tool_functions.function_map - assert "mark_project_ready_for_working" not in team_tools.tool_functions.function_map - - # Verify common functions are registered for both roles - assert "suggest_next_action" in coordinator_tools.tool_functions.function_map - - # Verify team detection tool is not in Coordinator tools - assert "detect_information_request_needs" not in coordinator_tools.tool_functions.function_map - - assert "suggest_next_action" in team_tools.tool_functions.function_map + assert "update_brief" not in team_tool_functions.function_map + assert "resolve_information_request" not in team_tool_functions.function_map # detect_information_request_needs is not exposed as a tool function anymore - assert "detect_information_request_needs" not in team_tools.tool_functions.function_map + assert "detect_information_request_needs" not in team_tool_functions.function_map @pytest.mark.asyncio async def test_project_tools_with_config(self, context, monkeypatch): - """Test the ProjectTools behavior with different configurations.""" + """Test the ShareTools behavior with different configurations.""" # Mock the assistant_config.get method mock_config = MagicMock() mock_config.track_progress = True @@ -95,15 +80,16 @@ async def mock_get_config(*args, **kwargs): monkeypatch.setattr("assistant.config.assistant_config", mock_assistant_config) # Test with track_progress set to True first - # Create a ProjectTools instance directly - tools = ProjectTools(context, ConversationRole.COORDINATOR) + # Create a ShareTools instance directly + share_tools = ShareTools(context) + coordinator_tools = share_tools.conversationalist_tools() - # Make sure add_project_goal was added when track_progress=True - assert "add_project_goal" in tools.tool_functions.function_map + # Make sure basic tools are available + assert "update_brief" in coordinator_tools.function_map - # For team role, check criterion completion - team_tools = ProjectTools(context, ConversationRole.TEAM) - assert "mark_criterion_completed" in team_tools.tool_functions.function_map + # For team role, check available functions + team_tool_functions = share_tools.team_tools() + assert "create_information_request" in team_tool_functions.function_map # Now test with track_progress set to False mock_config.track_progress = False @@ -114,7 +100,12 @@ async def mock_get_config(*args, **kwargs): # Create our own implementation to check for track_progress async def check_tools_with_config(context, role): """Simple wrapper to test if tools are filtered based on track_progress.""" - tools = ProjectTools(context, role) + share_tools = ShareTools(context) + tool_functions = ( + share_tools.conversationalist_tools() + if role == ConversationRole.COORDINATOR + else share_tools.team_tools() + ) # If progress tracking is disabled, remove progress-related tools if not mock_config.track_progress: @@ -129,22 +120,22 @@ async def check_tools_with_config(context, role): # Remove progress-related functions for func_name in progress_functions: - if func_name in tools.tool_functions.function_map: - del tools.tool_functions.function_map[func_name] + if func_name in tool_functions.function_map: + del tool_functions.function_map[func_name] - return tools + return tool_functions # Get the tools using our function that checks track_progress - project_tools = await check_tools_with_config(context, ConversationRole.COORDINATOR) + project_tool_functions = await check_tools_with_config(context, ConversationRole.COORDINATOR) - # Verify progress-tracking tools are removed when track_progress=False - assert "add_project_goal" not in project_tools.tool_functions.function_map - assert "mark_project_ready_for_working" not in project_tools.tool_functions.function_map + # Verify basic tools are still available regardless of track_progress setting + assert "update_brief" in project_tool_functions.function_map + assert "resolve_information_request" in project_tool_functions.function_map # For team tools - team_tools = await check_tools_with_config(context, ConversationRole.TEAM) - assert "mark_criterion_completed" not in team_tools.tool_functions.function_map - assert "report_project_completion" not in team_tools.tool_functions.function_map + team_tool_functions = await check_tools_with_config(context, ConversationRole.TEAM) + assert "create_information_request" in team_tool_functions.function_map + assert "delete_information_request" in team_tool_functions.function_map @pytest.mark.asyncio async def test_detect_information_request_needs(self, context, monkeypatch): @@ -168,7 +159,7 @@ async def mock_get_config(*args, **kwargs): # Patch assistant_config.get mock_assistant_config = MagicMock() mock_assistant_config.get = AsyncMock(side_effect=mock_get_config) - monkeypatch.setattr("assistant.project_analysis.assistant_config", mock_assistant_config) + monkeypatch.setattr("assistant.agentic.analysis.assistant_config", mock_assistant_config) # Create a mock message for the message history mock_msg = MagicMock() @@ -221,88 +212,96 @@ async def mock_create_client(*args, **kwargs): assert result["confidence"] == 0.9 assert result["potential_title"] == "Test title" assert result["original_message"] == test_message - - @pytest.mark.asyncio - async def test_delete_project_goal(self, context, monkeypatch): + + # DISABLED: delete_project_goal functionality has been removed from the codebase + # @pytest.mark.asyncio + async def disabled_test_delete_project_goal(self, context, monkeypatch): """Test the delete_project_goal functionality.""" - # Create ProjectTools instance for Coordinator role - tools = ProjectTools(context, ConversationRole.COORDINATOR) - # Setup mocks project_id = "test-project-id" - goal_index = 1 goal_name = "Test Goal" - - # Mock ProjectManager.get_project_id + + # Mock KnowledgeTransferManager.get_project_id async def mock_get_project_id(*args, **kwargs): return project_id - monkeypatch.setattr("assistant.project_manager.ProjectManager.get_project_id", - AsyncMock(side_effect=mock_get_project_id)) - + + monkeypatch.setattr( + "assistant.manager.KnowledgeTransferManager.get_project_id", + AsyncMock(side_effect=mock_get_project_id), + ) + # Mock require_current_user to return a user ID async def mock_require_current_user(*args, **kwargs): return "test-user-id" - monkeypatch.setattr("assistant.project_manager.require_current_user", - AsyncMock(side_effect=mock_require_current_user)) - - # Mock ProjectManager.delete_project_goal to return success + + monkeypatch.setattr( + "assistant.project_manager.require_current_user", + AsyncMock(side_effect=mock_require_current_user), + ) + + # Mock KnowledgeTransferManager.delete_project_goal to return success async def mock_delete_project_goal(*args, **kwargs): return True, goal_name - monkeypatch.setattr("assistant.project_manager.ProjectManager.delete_project_goal", - AsyncMock(side_effect=mock_delete_project_goal)) - + + monkeypatch.setattr( + "assistant.project_manager.KnowledgeTransferManager.delete_project_goal", + AsyncMock(side_effect=mock_delete_project_goal), + ) + # Test the delete_project_goal function - result = await tools.delete_project_goal(goal_index) - + # result = await tools.delete_learning_objective(objective_index) + # Verify the result - assert f"Goal '{goal_name}' has been successfully deleted from the project." in result - + # assert f"Goal '{goal_name}' has been successfully deleted from the project." in result + # Verify that context.send_messages was called with appropriate message expected_message_content = f"Goal '{goal_name}' has been successfully deleted from the project." context.send_messages.assert_called_once() # Get the first positional argument passed to send_messages call_args = context.send_messages.call_args[0][0] assert call_args.content == expected_message_content - - @pytest.mark.asyncio - async def test_delete_project_goal_wrong_role(self, context): + + # DISABLED: delete_project_goal functionality has been removed from the codebase + # @pytest.mark.asyncio + async def disabled_test_delete_project_goal_wrong_role(self, context): """Test delete_project_goal with wrong role (Team instead of Coordinator).""" - # Create ProjectTools instance for Team role - tools = ProjectTools(context, ConversationRole.TEAM) - # Test the delete_project_goal function with Team role - result = await tools.delete_project_goal(1) - + # result = await tools.delete_learning_objective(1) + # Verify that the operation is rejected - assert "Only Coordinator can delete project goals." in result + # assert "Only Coordinator can delete project goals." in result # Verify context.send_messages was not called context.send_messages.assert_not_called() - - @pytest.mark.asyncio - async def test_delete_project_goal_error(self, context, monkeypatch): + + # DISABLED: delete_project_goal functionality has been removed from the codebase + # @pytest.mark.asyncio + async def disabled_test_delete_project_goal_error(self, context, monkeypatch): """Test delete_project_goal with error condition.""" - # Create ProjectTools instance for Coordinator role - tools = ProjectTools(context, ConversationRole.COORDINATOR) - # Setup mocks error_message = "Invalid goal index" - - # Mock ProjectManager.get_project_id + + # Mock KnowledgeTransferManager.get_project_id async def mock_get_project_id(*args, **kwargs): return "test-project-id" - monkeypatch.setattr("assistant.project_manager.ProjectManager.get_project_id", - AsyncMock(side_effect=mock_get_project_id)) - - # Mock ProjectManager.delete_project_goal to return failure + + monkeypatch.setattr( + "assistant.project_manager.KnowledgeTransferManager.get_project_id", + AsyncMock(side_effect=mock_get_project_id), + ) + + # Mock KnowledgeTransferManager.delete_project_goal to return failure async def mock_delete_project_goal(*args, **kwargs): return False, error_message - monkeypatch.setattr("assistant.project_manager.ProjectManager.delete_project_goal", - AsyncMock(side_effect=mock_delete_project_goal)) - + + monkeypatch.setattr( + "assistant.project_manager.KnowledgeTransferManager.delete_project_goal", + AsyncMock(side_effect=mock_delete_project_goal), + ) + # Test the delete_project_goal function - result = await tools.delete_project_goal(999) # Using an invalid index - + # result = await tools.delete_learning_objective(999) # Using an invalid index + # Verify the error result - assert f"Error deleting goal: {error_message}" in result + # assert f"Error deleting goal: {error_message}" in result # Verify context.send_messages was not called context.send_messages.assert_not_called() diff --git a/assistants/project-assistant/tests/test_team_mode.py b/assistants/project-assistant/tests/test_team_mode.py index e6b455460..0111cafbb 100644 --- a/assistants/project-assistant/tests/test_team_mode.py +++ b/assistants/project-assistant/tests/test_team_mode.py @@ -102,41 +102,47 @@ def __init__(self, title=None, description=None, priority=None, status=None, **k class ProjectDashboard(BaseArtifact): def __init__( - self, state=None, progress_percentage=0, active_requests=None, completed_criteria=0, total_criteria=0, **kwargs + self, + state=None, + active_requests=None, + completed_criteria=0, + total_criteria=0, + **kwargs, ): super().__init__(artifact_type=ArtifactType.PROJECT_DASHBOARD, **kwargs) + # transfer_state field removed - using derived state logic instead self.state = state or ProjectState.PLANNING - self.progress_percentage = progress_percentage + # Note: completion_percentage removed from model self.active_requests = active_requests or [] - self.completed_criteria = completed_criteria + self.achieved_criteria = completed_criteria self.total_criteria = total_criteria - self.status_message = None + self.transfer_notes = None -class SuccessCriterion: +class LearningOutcome: def __init__(self, id=None, description=None, completed=False, completed_by=None): self.id = id or "test-criterion-id" self.description = description or "Test criterion" - self.completed = completed - self.completed_at = None if not completed else datetime.utcnow() - self.completed_by = completed_by + self.achieved = completed + self.achieved_at = None if not completed else datetime.utcnow() + self.achieved_by = completed_by -class ProjectGoal: +class LearningObjective: def __init__(self, id=None, name=None, description=None, priority=1, success_criteria=None): self.id = id or "test-goal-id" self.name = name or "Test Goal" self.description = description or "Test Goal Description" self.priority = priority - self.success_criteria = success_criteria or [] + self.learning_outcomes = success_criteria or [] -class ProjectBrief(BaseArtifact): +class KnowledgeBrief(BaseArtifact): def __init__(self, title=None, description=None, goals=None, **kwargs): super().__init__(artifact_type=ArtifactType.PROJECT_BRIEF, **kwargs) - self.title = title or "Test Project" + self.title = title or "Test KnowledgePackage" self.description = description or "Test Description" - self.goals = goals or [] + self.learning_objectives = goals or [] # Create a mock for the TeamConversationHandler @@ -185,12 +191,15 @@ async def update_project_info(self, progress_percentage, status_message=None): conversation_id=str(self.context.id), project_id="test-project-id", ) - dashboard.status_message = status_message + dashboard.transfer_notes = status_message # Call mocked log_action for state change and progress update - await self.log_action(LogEntryType.MILESTONE_PASSED, "Project is now in progress") + await self.log_action(LogEntryType.MILESTONE_PASSED, "KnowledgePackage is now in progress") - await self.log_action(LogEntryType.STATUS_CHANGED, f"Updated project progress to {progress_percentage}%") + await self.log_action( + LogEntryType.STATUS_CHANGED, + f"Updated project progress to {progress_percentage}%", + ) # Send notification await self.context.send_messages( @@ -204,10 +213,10 @@ async def update_project_info(self, progress_percentage, status_message=None): async def mark_criterion_completed(self, goal_id, criterion_id): # Mock implementation - criterion = SuccessCriterion(id=criterion_id, description="Test criterion") - criterion.completed = True - criterion.completed_at = datetime.utcnow() - criterion.completed_by = "test-user-id" + criterion = LearningOutcome(id=criterion_id, description="Test criterion") + criterion.achieved = True + criterion.achieved_at = datetime.utcnow() + criterion.achieved_by = "test-user-id" dashboard = ProjectDashboard( state=ProjectState.IN_PROGRESS, @@ -221,7 +230,10 @@ async def mark_criterion_completed(self, goal_id, criterion_id): ) # Call mocked log_action - await self.log_action(LogEntryType.CRITERION_COMPLETED, f"Completed criterion: {criterion.description}") + await self.log_action( + LogEntryType.CRITERION_COMPLETED, + f"Completed criterion: {criterion.description}", + ) # Send notification await self.context.send_messages( @@ -231,7 +243,11 @@ async def mark_criterion_completed(self, goal_id, criterion_id): ) ) - return True, f"Marked criterion '{criterion.description}' as completed.", dashboard + return ( + True, + f"Marked criterion '{criterion.description}' as completed.", + dashboard, + ) async def report_project_completion(self, completion_summary): # Mock implementation @@ -243,20 +259,20 @@ async def report_project_completion(self, completion_summary): conversation_id=str(self.context.id), project_id="test-project-id", ) - dashboard.status_message = completion_summary + dashboard.transfer_notes = completion_summary # Call mocked log_action - await self.log_action(LogEntryType.PROJECT_COMPLETED, "Project marked as completed") + await self.log_action(LogEntryType.PROJECT_COMPLETED, "KnowledgePackage marked as completed") # Send notification await self.context.send_messages( NewConversationMessage( - content="🎉 Project has been marked as completed.", + content="🎉 KnowledgePackage has been marked as completed.", message_type=MessageType.notice, ) ) - return True, "Project has been marked as completed", dashboard + return True, "KnowledgePackage has been marked as completed", dashboard async def get_project_info(self): # Mock implementation @@ -264,7 +280,7 @@ async def get_project_info(self): "has_project": True, "project_id": "test-project-id", "role": "team", - "title": "Test Project", + "title": "Test KnowledgePackage", "description": "A test project", "status": "in_progress", "progress": 50, @@ -335,8 +351,8 @@ async def test_update_project_info(self, team_handler, mock_context): assert success is True assert "Updated project progress to 50%" in message assert dashboard is not None - assert dashboard.progress_percentage == 50 - assert dashboard.status_message == "Making progress in the team" + # Note: completion_percentage removed from model + assert dashboard.transfer_notes == "Making progress in the team" assert dashboard.state == ProjectState.IN_PROGRESS # Verify that a notification was sent @@ -349,17 +365,19 @@ async def test_update_project_info(self, team_handler, mock_context): async def test_mark_criterion_completed(self, team_handler, mock_context): """Test marking a success criterion as completed.""" # Call the method - success, message, updated_dashboard = await team_handler.mark_criterion_completed( - "test-goal-id", "test-criterion-id" - ) + ( + success, + message, + updated_dashboard, + ) = await team_handler.mark_criterion_completed("test-goal-id", "test-criterion-id") # Assertions assert success is True assert "Marked criterion" in message assert updated_dashboard is not None - assert updated_dashboard.completed_criteria == 1 + assert updated_dashboard.achieved_criteria == 1 assert updated_dashboard.total_criteria == 1 - assert updated_dashboard.progress_percentage == 100 # 1/1 = 100% + # Note: completion_percentage removed from model # Verify that a notification was sent mock_context.send_messages.assert_called_once() @@ -372,16 +390,18 @@ async def test_report_project_completion(self, team_handler, mock_context): """Test reporting project completion.""" # Call the method success, message, dashboard = await team_handler.report_project_completion( - "Project has been successfully completed with all objectives achieved." + "KnowledgePackage has been successfully completed with all objectives achieved." ) # Assertions assert success is True - assert "Project has been marked as completed" in message + assert "KnowledgePackage has been marked as completed" in message assert dashboard is not None assert dashboard.state == ProjectState.COMPLETED - assert dashboard.progress_percentage == 100 - assert dashboard.status_message == "Project has been successfully completed with all objectives achieved." + # Note: completion_percentage removed from model + assert ( + dashboard.transfer_notes == "KnowledgePackage has been successfully completed with all objectives achieved." + ) # Verify that a notification was sent mock_context.send_messages.assert_called_once() @@ -399,6 +419,6 @@ async def test_get_project_info(self, team_handler, mock_context): assert project_info["has_project"] is True assert project_info["project_id"] == "test-project-id" assert project_info["role"] == "team" - assert project_info["title"] == "Test Project" + assert project_info["title"] == "Test KnowledgePackage" assert project_info["status"] == "in_progress" assert project_info["progress"] == 50 diff --git a/assistants/project-assistant/uv.lock b/assistants/project-assistant/uv.lock index 93bc85f87..54cd831be 100644 --- a/assistants/project-assistant/uv.lock +++ b/assistants/project-assistant/uv.lock @@ -175,11 +175,9 @@ source = { editable = "." } dependencies = [ { name = "assistant-extensions", extra = ["attachments"] }, { name = "content-safety" }, - { name = "deepmerge" }, { name = "openai" }, { name = "openai-client" }, { name = "semantic-workbench-assistant" }, - { name = "tiktoken" }, ] [package.dev-dependencies] @@ -194,11 +192,9 @@ dev = [ requires-dist = [ { name = "assistant-extensions", extras = ["attachments"], editable = "../../libraries/python/assistant-extensions" }, { name = "content-safety", editable = "../../libraries/python/content-safety" }, - { name = "deepmerge", specifier = ">=2.0" }, { name = "openai", specifier = ">=1.61.0" }, { name = "openai-client", editable = "../../libraries/python/openai-client" }, { name = "semantic-workbench-assistant", editable = "../../libraries/python/semantic-workbench-assistant" }, - { name = "tiktoken", specifier = ">=0.8.0" }, ] [package.metadata.requires-dev] From 20505698f4a3b2f63082f5e9c114699f830e036e Mon Sep 17 00:00:00 2001 From: Paul Payne <paul@payne.io> Date: Fri, 22 Aug 2025 15:25:36 -0700 Subject: [PATCH 2/5] Tweak. --- .../project-assistant/assistant/assistant.py | 2 +- assistants/project-assistant/uv.lock | 1856 ++++++++++------- 2 files changed, 1079 insertions(+), 779 deletions(-) diff --git a/assistants/project-assistant/assistant/assistant.py b/assistants/project-assistant/assistant/assistant.py index cce4e21ba..b3808af49 100644 --- a/assistants/project-assistant/assistant/assistant.py +++ b/assistants/project-assistant/assistant/assistant.py @@ -50,7 +50,7 @@ ) service_id = "project-assistant.made-exploration" -service_name = "Project Assistant" +service_name = "Project Assistant (KTA)" service_description = "A mediator assistant that facilitates sharing knowledge between parties." diff --git a/assistants/project-assistant/uv.lock b/assistants/project-assistant/uv.lock index 54cd831be..535d2c37b 100644 --- a/assistants/project-assistant/uv.lock +++ b/assistants/project-assistant/uv.lock @@ -4,16 +4,16 @@ requires-python = ">=3.11" [[package]] name = "aiohappyeyeballs" -version = "2.4.6" +version = "2.6.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/08/07/508f9ebba367fc3370162e53a3cfd12f5652ad79f0e0bfdf9f9847c6f159/aiohappyeyeballs-2.4.6.tar.gz", hash = "sha256:9b05052f9042985d32ecbe4b59a77ae19c006a78f1344d7fdad69d28ded3d0b0", size = 21726, upload-time = "2025-02-07T17:53:12.277Z" } +sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/4c/03fb05f56551828ec67ceb3665e5dc51638042d204983a03b0a1541475b6/aiohappyeyeballs-2.4.6-py3-none-any.whl", hash = "sha256:147ec992cf873d74f5062644332c539fcd42956dc69453fe5204195e560517e1", size = 14543, upload-time = "2025-02-07T17:53:10.304Z" }, + { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, ] [[package]] name = "aiohttp" -version = "3.11.12" +version = "3.12.15" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohappyeyeballs" }, @@ -24,68 +24,72 @@ dependencies = [ { name = "propcache" }, { name = "yarl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/37/4b/952d49c73084fb790cb5c6ead50848c8e96b4980ad806cf4d2ad341eaa03/aiohttp-3.11.12.tar.gz", hash = "sha256:7603ca26d75b1b86160ce1bbe2787a0b706e592af5b2504e12caa88a217767b0", size = 7673175, upload-time = "2025-02-06T00:28:47.88Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/38/35311e70196b6a63cfa033a7f741f800aa8a93f57442991cbe51da2394e7/aiohttp-3.11.12-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:87a2e00bf17da098d90d4145375f1d985a81605267e7f9377ff94e55c5d769eb", size = 708797, upload-time = "2025-02-06T00:26:08.81Z" }, - { url = "https://files.pythonhosted.org/packages/44/3e/46c656e68cbfc4f3fc7cb5d2ba4da6e91607fe83428208028156688f6201/aiohttp-3.11.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b34508f1cd928ce915ed09682d11307ba4b37d0708d1f28e5774c07a7674cac9", size = 468669, upload-time = "2025-02-06T00:26:10.475Z" }, - { url = "https://files.pythonhosted.org/packages/a0/d6/2088fb4fd1e3ac2bfb24bc172223babaa7cdbb2784d33c75ec09e66f62f8/aiohttp-3.11.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:936d8a4f0f7081327014742cd51d320296b56aa6d324461a13724ab05f4b2933", size = 455739, upload-time = "2025-02-06T00:26:11.974Z" }, - { url = "https://files.pythonhosted.org/packages/e7/dc/c443a6954a56f4a58b5efbfdf23cc6f3f0235e3424faf5a0c56264d5c7bb/aiohttp-3.11.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de1378f72def7dfb5dbd73d86c19eda0ea7b0a6873910cc37d57e80f10d64e1", size = 1685858, upload-time = "2025-02-06T00:26:13.654Z" }, - { url = "https://files.pythonhosted.org/packages/25/67/2d5b3aaade1d5d01c3b109aa76e3aa9630531252cda10aa02fb99b0b11a1/aiohttp-3.11.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9d45dbb3aaec05cf01525ee1a7ac72de46a8c425cb75c003acd29f76b1ffe94", size = 1743829, upload-time = "2025-02-06T00:26:15.481Z" }, - { url = "https://files.pythonhosted.org/packages/90/9b/9728fe9a3e1b8521198455d027b0b4035522be18f504b24c5d38d59e7278/aiohttp-3.11.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:930ffa1925393381e1e0a9b82137fa7b34c92a019b521cf9f41263976666a0d6", size = 1785587, upload-time = "2025-02-06T00:26:17.171Z" }, - { url = "https://files.pythonhosted.org/packages/ce/cf/28fbb43d4ebc1b4458374a3c7b6db3b556a90e358e9bbcfe6d9339c1e2b6/aiohttp-3.11.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8340def6737118f5429a5df4e88f440746b791f8f1c4ce4ad8a595f42c980bd5", size = 1675319, upload-time = "2025-02-06T00:26:19.951Z" }, - { url = "https://files.pythonhosted.org/packages/e5/d2/006c459c11218cabaa7bca401f965c9cc828efbdea7e1615d4644eaf23f7/aiohttp-3.11.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4016e383f91f2814e48ed61e6bda7d24c4d7f2402c75dd28f7e1027ae44ea204", size = 1619982, upload-time = "2025-02-06T00:26:21.705Z" }, - { url = "https://files.pythonhosted.org/packages/9d/83/ca425891ebd37bee5d837110f7fddc4d808a7c6c126a7d1b5c3ad72fc6ba/aiohttp-3.11.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3c0600bcc1adfaaac321422d615939ef300df81e165f6522ad096b73439c0f58", size = 1654176, upload-time = "2025-02-06T00:26:23.607Z" }, - { url = "https://files.pythonhosted.org/packages/25/df/047b1ce88514a1b4915d252513640184b63624e7914e41d846668b8edbda/aiohttp-3.11.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:0450ada317a65383b7cce9576096150fdb97396dcfe559109b403c7242faffef", size = 1660198, upload-time = "2025-02-06T00:26:26.686Z" }, - { url = "https://files.pythonhosted.org/packages/d3/cc/6ecb8e343f0902528620b9dbd567028a936d5489bebd7dbb0dd0914f4fdb/aiohttp-3.11.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:850ff6155371fd802a280f8d369d4e15d69434651b844bde566ce97ee2277420", size = 1650186, upload-time = "2025-02-06T00:26:28.479Z" }, - { url = "https://files.pythonhosted.org/packages/f8/f8/453df6dd69256ca8c06c53fc8803c9056e2b0b16509b070f9a3b4bdefd6c/aiohttp-3.11.12-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8fd12d0f989c6099e7b0f30dc6e0d1e05499f3337461f0b2b0dadea6c64b89df", size = 1733063, upload-time = "2025-02-06T00:26:31.136Z" }, - { url = "https://files.pythonhosted.org/packages/55/f8/540160787ff3000391de0e5d0d1d33be4c7972f933c21991e2ea105b2d5e/aiohttp-3.11.12-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:76719dd521c20a58a6c256d058547b3a9595d1d885b830013366e27011ffe804", size = 1755306, upload-time = "2025-02-06T00:26:34.133Z" }, - { url = "https://files.pythonhosted.org/packages/30/7d/49f3bfdfefd741576157f8f91caa9ff61a6f3d620ca6339268327518221b/aiohttp-3.11.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:97fe431f2ed646a3b56142fc81d238abcbaff08548d6912acb0b19a0cadc146b", size = 1692909, upload-time = "2025-02-06T00:26:37.281Z" }, - { url = "https://files.pythonhosted.org/packages/40/9c/8ce00afd6f6112ce9a2309dc490fea376ae824708b94b7b5ea9cba979d1d/aiohttp-3.11.12-cp311-cp311-win32.whl", hash = "sha256:e10c440d142fa8b32cfdb194caf60ceeceb3e49807072e0dc3a8887ea80e8c16", size = 416584, upload-time = "2025-02-06T00:26:39.946Z" }, - { url = "https://files.pythonhosted.org/packages/35/97/4d3c5f562f15830de472eb10a7a222655d750839943e0e6d915ef7e26114/aiohttp-3.11.12-cp311-cp311-win_amd64.whl", hash = "sha256:246067ba0cf5560cf42e775069c5d80a8989d14a7ded21af529a4e10e3e0f0e6", size = 442674, upload-time = "2025-02-06T00:26:42.193Z" }, - { url = "https://files.pythonhosted.org/packages/4d/d0/94346961acb476569fca9a644cc6f9a02f97ef75961a6b8d2b35279b8d1f/aiohttp-3.11.12-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e392804a38353900c3fd8b7cacbea5132888f7129f8e241915e90b85f00e3250", size = 704837, upload-time = "2025-02-06T00:26:44.812Z" }, - { url = "https://files.pythonhosted.org/packages/a9/af/05c503f1cc8f97621f199ef4b8db65fb88b8bc74a26ab2adb74789507ad3/aiohttp-3.11.12-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8fa1510b96c08aaad49303ab11f8803787c99222288f310a62f493faf883ede1", size = 464218, upload-time = "2025-02-06T00:26:46.533Z" }, - { url = "https://files.pythonhosted.org/packages/f2/48/b9949eb645b9bd699153a2ec48751b985e352ab3fed9d98c8115de305508/aiohttp-3.11.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dc065a4285307607df3f3686363e7f8bdd0d8ab35f12226362a847731516e42c", size = 456166, upload-time = "2025-02-06T00:26:48.142Z" }, - { url = "https://files.pythonhosted.org/packages/14/fb/980981807baecb6f54bdd38beb1bd271d9a3a786e19a978871584d026dcf/aiohttp-3.11.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddb31f8474695cd61fc9455c644fc1606c164b93bff2490390d90464b4655df", size = 1682528, upload-time = "2025-02-06T00:26:49.985Z" }, - { url = "https://files.pythonhosted.org/packages/90/cb/77b1445e0a716914e6197b0698b7a3640590da6c692437920c586764d05b/aiohttp-3.11.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dec0000d2d8621d8015c293e24589d46fa218637d820894cb7356c77eca3259", size = 1737154, upload-time = "2025-02-06T00:26:51.913Z" }, - { url = "https://files.pythonhosted.org/packages/ff/24/d6fb1f4cede9ccbe98e4def6f3ed1e1efcb658871bbf29f4863ec646bf38/aiohttp-3.11.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3552fe98e90fdf5918c04769f338a87fa4f00f3b28830ea9b78b1bdc6140e0d", size = 1793435, upload-time = "2025-02-06T00:26:56.182Z" }, - { url = "https://files.pythonhosted.org/packages/17/e2/9f744cee0861af673dc271a3351f59ebd5415928e20080ab85be25641471/aiohttp-3.11.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dfe7f984f28a8ae94ff3a7953cd9678550dbd2a1f9bda5dd9c5ae627744c78e", size = 1692010, upload-time = "2025-02-06T00:26:58.504Z" }, - { url = "https://files.pythonhosted.org/packages/90/c4/4a1235c1df544223eb57ba553ce03bc706bdd065e53918767f7fa1ff99e0/aiohttp-3.11.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a481a574af914b6e84624412666cbfbe531a05667ca197804ecc19c97b8ab1b0", size = 1619481, upload-time = "2025-02-06T00:27:01.477Z" }, - { url = "https://files.pythonhosted.org/packages/60/70/cf12d402a94a33abda86dd136eb749b14c8eb9fec1e16adc310e25b20033/aiohttp-3.11.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1987770fb4887560363b0e1a9b75aa303e447433c41284d3af2840a2f226d6e0", size = 1641578, upload-time = "2025-02-06T00:27:06.151Z" }, - { url = "https://files.pythonhosted.org/packages/1b/25/7211973fda1f5e833fcfd98ccb7f9ce4fbfc0074e3e70c0157a751d00db8/aiohttp-3.11.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a4ac6a0f0f6402854adca4e3259a623f5c82ec3f0c049374133bcb243132baf9", size = 1684463, upload-time = "2025-02-06T00:27:08.336Z" }, - { url = "https://files.pythonhosted.org/packages/93/60/b5905b4d0693f6018b26afa9f2221fefc0dcbd3773fe2dff1a20fb5727f1/aiohttp-3.11.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c96a43822f1f9f69cc5c3706af33239489a6294be486a0447fb71380070d4d5f", size = 1646691, upload-time = "2025-02-06T00:27:11.232Z" }, - { url = "https://files.pythonhosted.org/packages/b4/fc/ba1b14d6fdcd38df0b7c04640794b3683e949ea10937c8a58c14d697e93f/aiohttp-3.11.12-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a5e69046f83c0d3cb8f0d5bd9b8838271b1bc898e01562a04398e160953e8eb9", size = 1702269, upload-time = "2025-02-06T00:27:13.639Z" }, - { url = "https://files.pythonhosted.org/packages/5e/39/18c13c6f658b2ba9cc1e0c6fb2d02f98fd653ad2addcdf938193d51a9c53/aiohttp-3.11.12-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:68d54234c8d76d8ef74744f9f9fc6324f1508129e23da8883771cdbb5818cbef", size = 1734782, upload-time = "2025-02-06T00:27:15.651Z" }, - { url = "https://files.pythonhosted.org/packages/9f/d2/ccc190023020e342419b265861877cd8ffb75bec37b7ddd8521dd2c6deb8/aiohttp-3.11.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c9fd9dcf9c91affe71654ef77426f5cf8489305e1c66ed4816f5a21874b094b9", size = 1694740, upload-time = "2025-02-06T00:27:18.882Z" }, - { url = "https://files.pythonhosted.org/packages/3f/54/186805bcada64ea90ea909311ffedcd74369bfc6e880d39d2473314daa36/aiohttp-3.11.12-cp312-cp312-win32.whl", hash = "sha256:0ed49efcd0dc1611378beadbd97beb5d9ca8fe48579fc04a6ed0844072261b6a", size = 411530, upload-time = "2025-02-06T00:27:20.899Z" }, - { url = "https://files.pythonhosted.org/packages/3d/63/5eca549d34d141bcd9de50d4e59b913f3641559460c739d5e215693cb54a/aiohttp-3.11.12-cp312-cp312-win_amd64.whl", hash = "sha256:54775858c7f2f214476773ce785a19ee81d1294a6bedc5cc17225355aab74802", size = 437860, upload-time = "2025-02-06T00:27:23.674Z" }, - { url = "https://files.pythonhosted.org/packages/c3/9b/cea185d4b543ae08ee478373e16653722c19fcda10d2d0646f300ce10791/aiohttp-3.11.12-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:413ad794dccb19453e2b97c2375f2ca3cdf34dc50d18cc2693bd5aed7d16f4b9", size = 698148, upload-time = "2025-02-06T00:27:25.478Z" }, - { url = "https://files.pythonhosted.org/packages/91/5c/80d47fe7749fde584d1404a68ade29bcd7e58db8fa11fa38e8d90d77e447/aiohttp-3.11.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4a93d28ed4b4b39e6f46fd240896c29b686b75e39cc6992692e3922ff6982b4c", size = 460831, upload-time = "2025-02-06T00:27:28.252Z" }, - { url = "https://files.pythonhosted.org/packages/8e/f9/de568f8a8ca6b061d157c50272620c53168d6e3eeddae78dbb0f7db981eb/aiohttp-3.11.12-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d589264dbba3b16e8951b6f145d1e6b883094075283dafcab4cdd564a9e353a0", size = 453122, upload-time = "2025-02-06T00:27:30.143Z" }, - { url = "https://files.pythonhosted.org/packages/8b/fd/b775970a047543bbc1d0f66725ba72acef788028fce215dc959fd15a8200/aiohttp-3.11.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5148ca8955affdfeb864aca158ecae11030e952b25b3ae15d4e2b5ba299bad2", size = 1665336, upload-time = "2025-02-06T00:27:31.982Z" }, - { url = "https://files.pythonhosted.org/packages/82/9b/aff01d4f9716245a1b2965f02044e4474fadd2bcfe63cf249ca788541886/aiohttp-3.11.12-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:525410e0790aab036492eeea913858989c4cb070ff373ec3bc322d700bdf47c1", size = 1718111, upload-time = "2025-02-06T00:27:33.983Z" }, - { url = "https://files.pythonhosted.org/packages/e0/a9/166fd2d8b2cc64f08104aa614fad30eee506b563154081bf88ce729bc665/aiohttp-3.11.12-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bd8695be2c80b665ae3f05cb584093a1e59c35ecb7d794d1edd96e8cc9201d7", size = 1775293, upload-time = "2025-02-06T00:27:36.105Z" }, - { url = "https://files.pythonhosted.org/packages/13/c5/0d3c89bd9e36288f10dc246f42518ce8e1c333f27636ac78df091c86bb4a/aiohttp-3.11.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0203433121484b32646a5f5ea93ae86f3d9559d7243f07e8c0eab5ff8e3f70e", size = 1677338, upload-time = "2025-02-06T00:27:38.238Z" }, - { url = "https://files.pythonhosted.org/packages/72/b2/017db2833ef537be284f64ead78725984db8a39276c1a9a07c5c7526e238/aiohttp-3.11.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40cd36749a1035c34ba8d8aaf221b91ca3d111532e5ccb5fa8c3703ab1b967ed", size = 1603365, upload-time = "2025-02-06T00:27:41.281Z" }, - { url = "https://files.pythonhosted.org/packages/fc/72/b66c96a106ec7e791e29988c222141dd1219d7793ffb01e72245399e08d2/aiohttp-3.11.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7442662afebbf7b4c6d28cb7aab9e9ce3a5df055fc4116cc7228192ad6cb484", size = 1618464, upload-time = "2025-02-06T00:27:43.379Z" }, - { url = "https://files.pythonhosted.org/packages/3f/50/e68a40f267b46a603bab569d48d57f23508801614e05b3369898c5b2910a/aiohttp-3.11.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8a2fb742ef378284a50766e985804bd6adb5adb5aa781100b09befdbfa757b65", size = 1657827, upload-time = "2025-02-06T00:27:45.982Z" }, - { url = "https://files.pythonhosted.org/packages/c5/1d/aafbcdb1773d0ba7c20793ebeedfaba1f3f7462f6fc251f24983ed738aa7/aiohttp-3.11.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2cee3b117a8d13ab98b38d5b6bdcd040cfb4181068d05ce0c474ec9db5f3c5bb", size = 1616700, upload-time = "2025-02-06T00:27:48.17Z" }, - { url = "https://files.pythonhosted.org/packages/b0/5e/6cd9724a2932f36e2a6b742436a36d64784322cfb3406ca773f903bb9a70/aiohttp-3.11.12-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f6a19bcab7fbd8f8649d6595624856635159a6527861b9cdc3447af288a00c00", size = 1685643, upload-time = "2025-02-06T00:27:51.183Z" }, - { url = "https://files.pythonhosted.org/packages/8b/38/ea6c91d5c767fd45a18151675a07c710ca018b30aa876a9f35b32fa59761/aiohttp-3.11.12-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e4cecdb52aaa9994fbed6b81d4568427b6002f0a91c322697a4bfcc2b2363f5a", size = 1715487, upload-time = "2025-02-06T00:27:53.431Z" }, - { url = "https://files.pythonhosted.org/packages/8e/24/e9edbcb7d1d93c02e055490348df6f955d675e85a028c33babdcaeda0853/aiohttp-3.11.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:30f546358dfa0953db92ba620101fefc81574f87b2346556b90b5f3ef16e55ce", size = 1672948, upload-time = "2025-02-06T00:27:56.137Z" }, - { url = "https://files.pythonhosted.org/packages/25/be/0b1fb737268e003198f25c3a68c2135e76e4754bf399a879b27bd508a003/aiohttp-3.11.12-cp313-cp313-win32.whl", hash = "sha256:ce1bb21fc7d753b5f8a5d5a4bae99566386b15e716ebdb410154c16c91494d7f", size = 410396, upload-time = "2025-02-06T00:27:58.292Z" }, - { url = "https://files.pythonhosted.org/packages/68/fd/677def96a75057b0a26446b62f8fbb084435b20a7d270c99539c26573bfd/aiohttp-3.11.12-cp313-cp313-win_amd64.whl", hash = "sha256:f7914ab70d2ee8ab91c13e5402122edbc77821c66d2758abb53aabe87f013287", size = 436234, upload-time = "2025-02-06T00:28:01.693Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/9b/e7/d92a237d8802ca88483906c388f7c201bbe96cd80a165ffd0ac2f6a8d59f/aiohttp-3.12.15.tar.gz", hash = "sha256:4fc61385e9c98d72fcdf47e6dd81833f47b2f77c114c29cd64a361be57a763a2", size = 7823716, upload-time = "2025-07-29T05:52:32.215Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/19/9e86722ec8e835959bd97ce8c1efa78cf361fa4531fca372551abcc9cdd6/aiohttp-3.12.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d3ce17ce0220383a0f9ea07175eeaa6aa13ae5a41f30bc61d84df17f0e9b1117", size = 711246, upload-time = "2025-07-29T05:50:15.937Z" }, + { url = "https://files.pythonhosted.org/packages/71/f9/0a31fcb1a7d4629ac9d8f01f1cb9242e2f9943f47f5d03215af91c3c1a26/aiohttp-3.12.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:010cc9bbd06db80fe234d9003f67e97a10fe003bfbedb40da7d71c1008eda0fe", size = 483515, upload-time = "2025-07-29T05:50:17.442Z" }, + { url = "https://files.pythonhosted.org/packages/62/6c/94846f576f1d11df0c2e41d3001000527c0fdf63fce7e69b3927a731325d/aiohttp-3.12.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3f9d7c55b41ed687b9d7165b17672340187f87a773c98236c987f08c858145a9", size = 471776, upload-time = "2025-07-29T05:50:19.568Z" }, + { url = "https://files.pythonhosted.org/packages/f8/6c/f766d0aaafcee0447fad0328da780d344489c042e25cd58fde566bf40aed/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc4fbc61bb3548d3b482f9ac7ddd0f18c67e4225aaa4e8552b9f1ac7e6bda9e5", size = 1741977, upload-time = "2025-07-29T05:50:21.665Z" }, + { url = "https://files.pythonhosted.org/packages/17/e5/fb779a05ba6ff44d7bc1e9d24c644e876bfff5abe5454f7b854cace1b9cc/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7fbc8a7c410bb3ad5d595bb7118147dfbb6449d862cc1125cf8867cb337e8728", size = 1690645, upload-time = "2025-07-29T05:50:23.333Z" }, + { url = "https://files.pythonhosted.org/packages/37/4e/a22e799c2035f5d6a4ad2cf8e7c1d1bd0923192871dd6e367dafb158b14c/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74dad41b3458dbb0511e760fb355bb0b6689e0630de8a22b1b62a98777136e16", size = 1789437, upload-time = "2025-07-29T05:50:25.007Z" }, + { url = "https://files.pythonhosted.org/packages/28/e5/55a33b991f6433569babb56018b2fb8fb9146424f8b3a0c8ecca80556762/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b6f0af863cf17e6222b1735a756d664159e58855da99cfe965134a3ff63b0b0", size = 1828482, upload-time = "2025-07-29T05:50:26.693Z" }, + { url = "https://files.pythonhosted.org/packages/c6/82/1ddf0ea4f2f3afe79dffed5e8a246737cff6cbe781887a6a170299e33204/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5b7fe4972d48a4da367043b8e023fb70a04d1490aa7d68800e465d1b97e493b", size = 1730944, upload-time = "2025-07-29T05:50:28.382Z" }, + { url = "https://files.pythonhosted.org/packages/1b/96/784c785674117b4cb3877522a177ba1b5e4db9ce0fd519430b5de76eec90/aiohttp-3.12.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6443cca89553b7a5485331bc9bedb2342b08d073fa10b8c7d1c60579c4a7b9bd", size = 1668020, upload-time = "2025-07-29T05:50:30.032Z" }, + { url = "https://files.pythonhosted.org/packages/12/8a/8b75f203ea7e5c21c0920d84dd24a5c0e971fe1e9b9ebbf29ae7e8e39790/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6c5f40ec615e5264f44b4282ee27628cea221fcad52f27405b80abb346d9f3f8", size = 1716292, upload-time = "2025-07-29T05:50:31.983Z" }, + { url = "https://files.pythonhosted.org/packages/47/0b/a1451543475bb6b86a5cfc27861e52b14085ae232896a2654ff1231c0992/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:2abbb216a1d3a2fe86dbd2edce20cdc5e9ad0be6378455b05ec7f77361b3ab50", size = 1711451, upload-time = "2025-07-29T05:50:33.989Z" }, + { url = "https://files.pythonhosted.org/packages/55/fd/793a23a197cc2f0d29188805cfc93aa613407f07e5f9da5cd1366afd9d7c/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:db71ce547012a5420a39c1b744d485cfb823564d01d5d20805977f5ea1345676", size = 1691634, upload-time = "2025-07-29T05:50:35.846Z" }, + { url = "https://files.pythonhosted.org/packages/ca/bf/23a335a6670b5f5dfc6d268328e55a22651b440fca341a64fccf1eada0c6/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ced339d7c9b5030abad5854aa5413a77565e5b6e6248ff927d3e174baf3badf7", size = 1785238, upload-time = "2025-07-29T05:50:37.597Z" }, + { url = "https://files.pythonhosted.org/packages/57/4f/ed60a591839a9d85d40694aba5cef86dde9ee51ce6cca0bb30d6eb1581e7/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7c7dd29c7b5bda137464dc9bfc738d7ceea46ff70309859ffde8c022e9b08ba7", size = 1805701, upload-time = "2025-07-29T05:50:39.591Z" }, + { url = "https://files.pythonhosted.org/packages/85/e0/444747a9455c5de188c0f4a0173ee701e2e325d4b2550e9af84abb20cdba/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:421da6fd326460517873274875c6c5a18ff225b40da2616083c5a34a7570b685", size = 1718758, upload-time = "2025-07-29T05:50:41.292Z" }, + { url = "https://files.pythonhosted.org/packages/36/ab/1006278d1ffd13a698e5dd4bfa01e5878f6bddefc296c8b62649753ff249/aiohttp-3.12.15-cp311-cp311-win32.whl", hash = "sha256:4420cf9d179ec8dfe4be10e7d0fe47d6d606485512ea2265b0d8c5113372771b", size = 428868, upload-time = "2025-07-29T05:50:43.063Z" }, + { url = "https://files.pythonhosted.org/packages/10/97/ad2b18700708452400278039272032170246a1bf8ec5d832772372c71f1a/aiohttp-3.12.15-cp311-cp311-win_amd64.whl", hash = "sha256:edd533a07da85baa4b423ee8839e3e91681c7bfa19b04260a469ee94b778bf6d", size = 453273, upload-time = "2025-07-29T05:50:44.613Z" }, + { url = "https://files.pythonhosted.org/packages/63/97/77cb2450d9b35f517d6cf506256bf4f5bda3f93a66b4ad64ba7fc917899c/aiohttp-3.12.15-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:802d3868f5776e28f7bf69d349c26fc0efadb81676d0afa88ed00d98a26340b7", size = 702333, upload-time = "2025-07-29T05:50:46.507Z" }, + { url = "https://files.pythonhosted.org/packages/83/6d/0544e6b08b748682c30b9f65640d006e51f90763b41d7c546693bc22900d/aiohttp-3.12.15-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f2800614cd560287be05e33a679638e586a2d7401f4ddf99e304d98878c29444", size = 476948, upload-time = "2025-07-29T05:50:48.067Z" }, + { url = "https://files.pythonhosted.org/packages/3a/1d/c8c40e611e5094330284b1aea8a4b02ca0858f8458614fa35754cab42b9c/aiohttp-3.12.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8466151554b593909d30a0a125d638b4e5f3836e5aecde85b66b80ded1cb5b0d", size = 469787, upload-time = "2025-07-29T05:50:49.669Z" }, + { url = "https://files.pythonhosted.org/packages/38/7d/b76438e70319796bfff717f325d97ce2e9310f752a267bfdf5192ac6082b/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e5a495cb1be69dae4b08f35a6c4579c539e9b5706f606632102c0f855bcba7c", size = 1716590, upload-time = "2025-07-29T05:50:51.368Z" }, + { url = "https://files.pythonhosted.org/packages/79/b1/60370d70cdf8b269ee1444b390cbd72ce514f0d1cd1a715821c784d272c9/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6404dfc8cdde35c69aaa489bb3542fb86ef215fc70277c892be8af540e5e21c0", size = 1699241, upload-time = "2025-07-29T05:50:53.628Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2b/4968a7b8792437ebc12186db31523f541943e99bda8f30335c482bea6879/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ead1c00f8521a5c9070fcb88f02967b1d8a0544e6d85c253f6968b785e1a2ab", size = 1754335, upload-time = "2025-07-29T05:50:55.394Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c1/49524ed553f9a0bec1a11fac09e790f49ff669bcd14164f9fab608831c4d/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6990ef617f14450bc6b34941dba4f12d5613cbf4e33805932f853fbd1cf18bfb", size = 1800491, upload-time = "2025-07-29T05:50:57.202Z" }, + { url = "https://files.pythonhosted.org/packages/de/5e/3bf5acea47a96a28c121b167f5ef659cf71208b19e52a88cdfa5c37f1fcc/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd736ed420f4db2b8148b52b46b88ed038d0354255f9a73196b7bbce3ea97545", size = 1719929, upload-time = "2025-07-29T05:50:59.192Z" }, + { url = "https://files.pythonhosted.org/packages/39/94/8ae30b806835bcd1cba799ba35347dee6961a11bd507db634516210e91d8/aiohttp-3.12.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c5092ce14361a73086b90c6efb3948ffa5be2f5b6fbcf52e8d8c8b8848bb97c", size = 1635733, upload-time = "2025-07-29T05:51:01.394Z" }, + { url = "https://files.pythonhosted.org/packages/7a/46/06cdef71dd03acd9da7f51ab3a9107318aee12ad38d273f654e4f981583a/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:aaa2234bb60c4dbf82893e934d8ee8dea30446f0647e024074237a56a08c01bd", size = 1696790, upload-time = "2025-07-29T05:51:03.657Z" }, + { url = "https://files.pythonhosted.org/packages/02/90/6b4cfaaf92ed98d0ec4d173e78b99b4b1a7551250be8937d9d67ecb356b4/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6d86a2fbdd14192e2f234a92d3b494dd4457e683ba07e5905a0b3ee25389ac9f", size = 1718245, upload-time = "2025-07-29T05:51:05.911Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e6/2593751670fa06f080a846f37f112cbe6f873ba510d070136a6ed46117c6/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a041e7e2612041a6ddf1c6a33b883be6a421247c7afd47e885969ee4cc58bd8d", size = 1658899, upload-time = "2025-07-29T05:51:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/8f/28/c15bacbdb8b8eb5bf39b10680d129ea7410b859e379b03190f02fa104ffd/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5015082477abeafad7203757ae44299a610e89ee82a1503e3d4184e6bafdd519", size = 1738459, upload-time = "2025-07-29T05:51:09.56Z" }, + { url = "https://files.pythonhosted.org/packages/00/de/c269cbc4faa01fb10f143b1670633a8ddd5b2e1ffd0548f7aa49cb5c70e2/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:56822ff5ddfd1b745534e658faba944012346184fbfe732e0d6134b744516eea", size = 1766434, upload-time = "2025-07-29T05:51:11.423Z" }, + { url = "https://files.pythonhosted.org/packages/52/b0/4ff3abd81aa7d929b27d2e1403722a65fc87b763e3a97b3a2a494bfc63bc/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2acbbfff69019d9014508c4ba0401822e8bae5a5fdc3b6814285b71231b60f3", size = 1726045, upload-time = "2025-07-29T05:51:13.689Z" }, + { url = "https://files.pythonhosted.org/packages/71/16/949225a6a2dd6efcbd855fbd90cf476052e648fb011aa538e3b15b89a57a/aiohttp-3.12.15-cp312-cp312-win32.whl", hash = "sha256:d849b0901b50f2185874b9a232f38e26b9b3d4810095a7572eacea939132d4e1", size = 423591, upload-time = "2025-07-29T05:51:15.452Z" }, + { url = "https://files.pythonhosted.org/packages/2b/d8/fa65d2a349fe938b76d309db1a56a75c4fb8cc7b17a398b698488a939903/aiohttp-3.12.15-cp312-cp312-win_amd64.whl", hash = "sha256:b390ef5f62bb508a9d67cb3bba9b8356e23b3996da7062f1a57ce1a79d2b3d34", size = 450266, upload-time = "2025-07-29T05:51:17.239Z" }, + { url = "https://files.pythonhosted.org/packages/f2/33/918091abcf102e39d15aba2476ad9e7bd35ddb190dcdd43a854000d3da0d/aiohttp-3.12.15-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9f922ffd05034d439dde1c77a20461cf4a1b0831e6caa26151fe7aa8aaebc315", size = 696741, upload-time = "2025-07-29T05:51:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/b5/2a/7495a81e39a998e400f3ecdd44a62107254803d1681d9189be5c2e4530cd/aiohttp-3.12.15-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ee8a8ac39ce45f3e55663891d4b1d15598c157b4d494a4613e704c8b43112cd", size = 474407, upload-time = "2025-07-29T05:51:21.165Z" }, + { url = "https://files.pythonhosted.org/packages/49/fc/a9576ab4be2dcbd0f73ee8675d16c707cfc12d5ee80ccf4015ba543480c9/aiohttp-3.12.15-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3eae49032c29d356b94eee45a3f39fdf4b0814b397638c2f718e96cfadf4c4e4", size = 466703, upload-time = "2025-07-29T05:51:22.948Z" }, + { url = "https://files.pythonhosted.org/packages/09/2f/d4bcc8448cf536b2b54eed48f19682031ad182faa3a3fee54ebe5b156387/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97752ff12cc12f46a9b20327104448042fce5c33a624f88c18f66f9368091c7", size = 1705532, upload-time = "2025-07-29T05:51:25.211Z" }, + { url = "https://files.pythonhosted.org/packages/f1/f3/59406396083f8b489261e3c011aa8aee9df360a96ac8fa5c2e7e1b8f0466/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:894261472691d6fe76ebb7fcf2e5870a2ac284c7406ddc95823c8598a1390f0d", size = 1686794, upload-time = "2025-07-29T05:51:27.145Z" }, + { url = "https://files.pythonhosted.org/packages/dc/71/164d194993a8d114ee5656c3b7ae9c12ceee7040d076bf7b32fb98a8c5c6/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5fa5d9eb82ce98959fc1031c28198b431b4d9396894f385cb63f1e2f3f20ca6b", size = 1738865, upload-time = "2025-07-29T05:51:29.366Z" }, + { url = "https://files.pythonhosted.org/packages/1c/00/d198461b699188a93ead39cb458554d9f0f69879b95078dce416d3209b54/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0fa751efb11a541f57db59c1dd821bec09031e01452b2b6217319b3a1f34f3d", size = 1788238, upload-time = "2025-07-29T05:51:31.285Z" }, + { url = "https://files.pythonhosted.org/packages/85/b8/9e7175e1fa0ac8e56baa83bf3c214823ce250d0028955dfb23f43d5e61fd/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5346b93e62ab51ee2a9d68e8f73c7cf96ffb73568a23e683f931e52450e4148d", size = 1710566, upload-time = "2025-07-29T05:51:33.219Z" }, + { url = "https://files.pythonhosted.org/packages/59/e4/16a8eac9df39b48ae102ec030fa9f726d3570732e46ba0c592aeeb507b93/aiohttp-3.12.15-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:049ec0360f939cd164ecbfd2873eaa432613d5e77d6b04535e3d1fbae5a9e645", size = 1624270, upload-time = "2025-07-29T05:51:35.195Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f8/cd84dee7b6ace0740908fd0af170f9fab50c2a41ccbc3806aabcb1050141/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b52dcf013b57464b6d1e51b627adfd69a8053e84b7103a7cd49c030f9ca44461", size = 1677294, upload-time = "2025-07-29T05:51:37.215Z" }, + { url = "https://files.pythonhosted.org/packages/ce/42/d0f1f85e50d401eccd12bf85c46ba84f947a84839c8a1c2c5f6e8ab1eb50/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:9b2af240143dd2765e0fb661fd0361a1b469cab235039ea57663cda087250ea9", size = 1708958, upload-time = "2025-07-29T05:51:39.328Z" }, + { url = "https://files.pythonhosted.org/packages/d5/6b/f6fa6c5790fb602538483aa5a1b86fcbad66244997e5230d88f9412ef24c/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ac77f709a2cde2cc71257ab2d8c74dd157c67a0558a0d2799d5d571b4c63d44d", size = 1651553, upload-time = "2025-07-29T05:51:41.356Z" }, + { url = "https://files.pythonhosted.org/packages/04/36/a6d36ad545fa12e61d11d1932eef273928b0495e6a576eb2af04297fdd3c/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:47f6b962246f0a774fbd3b6b7be25d59b06fdb2f164cf2513097998fc6a29693", size = 1727688, upload-time = "2025-07-29T05:51:43.452Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c8/f195e5e06608a97a4e52c5d41c7927301bf757a8e8bb5bbf8cef6c314961/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:760fb7db442f284996e39cf9915a94492e1896baac44f06ae551974907922b64", size = 1761157, upload-time = "2025-07-29T05:51:45.643Z" }, + { url = "https://files.pythonhosted.org/packages/05/6a/ea199e61b67f25ba688d3ce93f63b49b0a4e3b3d380f03971b4646412fc6/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad702e57dc385cae679c39d318def49aef754455f237499d5b99bea4ef582e51", size = 1710050, upload-time = "2025-07-29T05:51:48.203Z" }, + { url = "https://files.pythonhosted.org/packages/b4/2e/ffeb7f6256b33635c29dbed29a22a723ff2dd7401fff42ea60cf2060abfb/aiohttp-3.12.15-cp313-cp313-win32.whl", hash = "sha256:f813c3e9032331024de2eb2e32a88d86afb69291fbc37a3a3ae81cc9917fb3d0", size = 422647, upload-time = "2025-07-29T05:51:50.718Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8e/78ee35774201f38d5e1ba079c9958f7629b1fd079459aea9467441dbfbf5/aiohttp-3.12.15-cp313-cp313-win_amd64.whl", hash = "sha256:1a649001580bdb37c6fdb1bebbd7e3bc688e8ec2b5c6f52edbb664662b17dc84", size = 449067, upload-time = "2025-07-29T05:51:52.549Z" }, ] [[package]] name = "aiosignal" -version = "1.3.2" +version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "frozenlist" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ba/b5/6d55e80f6d8a08ce22b982eafa278d823b541c925f11ee774b0b9c43473d/aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54", size = 19424, upload-time = "2024-12-13T17:10:40.86Z" } +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/6a/bc7e17a3e87a2985d3e8f4da4cd0f481060eb78fb08596c42be62c90a4d9/aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5", size = 7597, upload-time = "2024-12-13T17:10:38.469Z" }, + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, ] [[package]] @@ -99,7 +103,7 @@ wheels = [ [[package]] name = "anthropic" -version = "0.49.0" +version = "0.64.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -110,9 +114,9 @@ dependencies = [ { name = "sniffio" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/86/e3/a88c8494ce4d1a88252b9e053607e885f9b14d0a32273d47b727cbee4228/anthropic-0.49.0.tar.gz", hash = "sha256:c09e885b0f674b9119b4f296d8508907f6cff0009bc20d5cf6b35936c40b4398", size = 210016, upload-time = "2025-02-28T19:35:47.01Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/4f/f2b880cba1a76f3acc7d5eb2ae217632eac1b8cef5ed3027493545c59eba/anthropic-0.64.0.tar.gz", hash = "sha256:3d496c91a63dff64f451b3e8e4b238a9640bf87b0c11d0b74ddc372ba5a3fe58", size = 427893, upload-time = "2025-08-13T17:09:49.915Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/74/5d90ad14d55fbe3f9c474fdcb6e34b4bed99e3be8efac98734a5ddce88c1/anthropic-0.49.0-py3-none-any.whl", hash = "sha256:bbc17ad4e7094988d2fa86b87753ded8dce12498f4b85fe5810f208f454a8375", size = 243368, upload-time = "2025-02-28T19:35:44.963Z" }, + { url = "https://files.pythonhosted.org/packages/a9/b2/2d268bcd5d6441df9dc0ebebc67107657edb8b0150d3fda1a5b81d1bec45/anthropic-0.64.0-py3-none-any.whl", hash = "sha256:6f5f7d913a6a95eb7f8e1bda4e75f76670e8acd8d4cd965e02e2a256b0429dd1", size = 297244, upload-time = "2025-08-13T17:09:47.908Z" }, ] [[package]] @@ -143,16 +147,16 @@ dev = [{ name = "pyright", specifier = ">=1.1.389" }] [[package]] name = "anyio" -version = "4.8.0" +version = "4.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, { name = "sniffio" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a3/73/199a98fc2dae33535d6b8e8e6ec01f8c1d76c9adb096c6b7d64823038cde/anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a", size = 181126, upload-time = "2025-01-05T13:13:11.095Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/b4/636b3b65173d3ce9a38ef5f0522789614e590dab6a8d505340a4efe4c567/anyio-4.10.0.tar.gz", hash = "sha256:3f3fae35c96039744587aa5b8371e7e8e603c0702999535961dd336026973ba6", size = 213252, upload-time = "2025-08-04T08:54:26.451Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/46/eb/e7f063ad1fec6b3178a3cd82d1a3c4de82cccf283fc42746168188e1cdd5/anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a", size = 96041, upload-time = "2025-01-05T13:13:07.985Z" }, + { url = "https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl", hash = "sha256:60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1", size = 107213, upload-time = "2025-08-04T08:54:24.882Z" }, ] [[package]] @@ -277,11 +281,11 @@ dev = [ [[package]] name = "attrs" -version = "25.1.0" +version = "25.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/49/7c/fdf464bcc51d23881d110abd74b512a42b3d5d376a55a831b44c603ae17f/attrs-25.1.0.tar.gz", hash = "sha256:1c97078a80c814273a76b2a298a932eb681c87415c11dee0a6921de7f1b02c3e", size = 810562, upload-time = "2025-01-25T11:30:12.508Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032, upload-time = "2025-03-13T11:10:22.779Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/30/d4986a882011f9df997a55e6becd864812ccfcd821d64aac8570ee39f719/attrs-25.1.0-py3-none-any.whl", hash = "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a", size = 63152, upload-time = "2025-01-25T11:30:10.164Z" }, + { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload-time = "2025-03-13T11:10:21.14Z" }, ] [[package]] @@ -299,16 +303,16 @@ wheels = [ [[package]] name = "azure-core" -version = "1.32.0" +version = "1.35.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "requests" }, { name = "six" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cc/ee/668328306a9e963a5ad9f152cd98c7adad86c822729fd1d2a01613ad1e67/azure_core-1.32.0.tar.gz", hash = "sha256:22b3c35d6b2dae14990f6c1be2912bf23ffe50b220e708a28ab1bb92b1c730e5", size = 279128, upload-time = "2024-10-31T17:45:17.528Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/89/f53968635b1b2e53e4aad2dd641488929fef4ca9dfb0b97927fa7697ddf3/azure_core-1.35.0.tar.gz", hash = "sha256:c0be528489485e9ede59b6971eb63c1eaacf83ef53001bfe3904e475e972be5c", size = 339689, upload-time = "2025-07-03T00:55:23.496Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/83/325bf5e02504dbd8b4faa98197a44cdf8a325ef259b48326a2b6f17f8383/azure_core-1.32.0-py3-none-any.whl", hash = "sha256:eac191a0efb23bfa83fddf321b27b122b4ec847befa3091fa736a5c32c50d7b4", size = 198855, upload-time = "2024-10-31T17:45:19.415Z" }, + { url = "https://files.pythonhosted.org/packages/d4/78/bf94897361fdd650850f0f2e405b2293e2f12808239046232bdedf554301/azure_core-1.35.0-py3-none-any.whl", hash = "sha256:8db78c72868a58f3de8991eb4d22c4d368fae226dac1002998d6c50437e7dad1", size = 210708, upload-time = "2025-07-03T00:55:25.238Z" }, ] [package.optional-dependencies] @@ -318,7 +322,7 @@ aio = [ [[package]] name = "azure-identity" -version = "1.20.0" +version = "1.24.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "azure-core" }, @@ -327,9 +331,9 @@ dependencies = [ { name = "msal-extensions" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ee/89/7d170fab0b85d9650cdb7abda087e849644beb52bd28f6804620dd0cecd9/azure_identity-1.20.0.tar.gz", hash = "sha256:40597210d56c83e15031b0fe2ea3b26420189e1e7f3e20bdbb292315da1ba014", size = 264447, upload-time = "2025-02-12T00:40:41.225Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/44/f3ee20bacb220b6b4a2b0a6cf7e742eecb383a5ccf604dd79ec27c286b7e/azure_identity-1.24.0.tar.gz", hash = "sha256:6c3a40b2a70af831e920b89e6421e8dcd4af78a0cb38b9642d86c67643d4930c", size = 271630, upload-time = "2025-08-07T22:27:36.258Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/de/aa/819513c1dbef990af690bb5eefb5e337f8698d75dfdb7302528f50ce1994/azure_identity-1.20.0-py3-none-any.whl", hash = "sha256:5f23fc4889a66330e840bd78830287e14f3761820fe3c5f77ac875edcb9ec998", size = 188243, upload-time = "2025-02-12T00:40:44.99Z" }, + { url = "https://files.pythonhosted.org/packages/a9/74/17428cb429e8d52f6d0d69ed685f4760a545cb0156594963a9337b53b6c9/azure_identity-1.24.0-py3-none-any.whl", hash = "sha256:9e04997cde0ab02ed66422c74748548e620b7b29361c72ce622acab0267ff7c4", size = 187890, upload-time = "2025-08-07T22:27:38.033Z" }, ] [[package]] @@ -352,11 +356,11 @@ wheels = [ [[package]] name = "certifi" -version = "2025.1.31" +version = "2025.8.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577, upload-time = "2025-01-31T02:16:47.166Z" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/67/960ebe6bf230a96cda2e0abcf73af550ec4f090005363542f0765df162e0/certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407", size = 162386, upload-time = "2025-08-03T03:07:47.08Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393, upload-time = "2025-01-31T02:16:45.015Z" }, + { url = "https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5", size = 161216, upload-time = "2025-08-03T03:07:45.777Z" }, ] [[package]] @@ -406,50 +410,55 @@ wheels = [ [[package]] name = "charset-normalizer" -version = "3.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188, upload-time = "2024-12-24T18:12:35.43Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", size = 194995, upload-time = "2024-12-24T18:10:12.838Z" }, - { url = "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", size = 139471, upload-time = "2024-12-24T18:10:14.101Z" }, - { url = "https://files.pythonhosted.org/packages/71/64/d24ab1a997efb06402e3fc07317e94da358e2585165930d9d59ad45fcae2/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", size = 149831, upload-time = "2024-12-24T18:10:15.512Z" }, - { url = "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", size = 142335, upload-time = "2024-12-24T18:10:18.369Z" }, - { url = "https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", size = 143862, upload-time = "2024-12-24T18:10:19.743Z" }, - { url = "https://files.pythonhosted.org/packages/c6/c7/32da20821cf387b759ad24627a9aca289d2822de929b8a41b6241767b461/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", size = 145673, upload-time = "2024-12-24T18:10:21.139Z" }, - { url = "https://files.pythonhosted.org/packages/68/85/f4288e96039abdd5aeb5c546fa20a37b50da71b5cf01e75e87f16cd43304/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", size = 140211, upload-time = "2024-12-24T18:10:22.382Z" }, - { url = "https://files.pythonhosted.org/packages/28/a3/a42e70d03cbdabc18997baf4f0227c73591a08041c149e710045c281f97b/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", size = 148039, upload-time = "2024-12-24T18:10:24.802Z" }, - { url = "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", size = 151939, upload-time = "2024-12-24T18:10:26.124Z" }, - { url = "https://files.pythonhosted.org/packages/b1/82/8e9fe624cc5374193de6860aba3ea8070f584c8565ee77c168ec13274bd2/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", size = 149075, upload-time = "2024-12-24T18:10:30.027Z" }, - { url = "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", size = 144340, upload-time = "2024-12-24T18:10:32.679Z" }, - { url = "https://files.pythonhosted.org/packages/b5/b6/9674a4b7d4d99a0d2df9b215da766ee682718f88055751e1e5e753c82db0/charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", size = 95205, upload-time = "2024-12-24T18:10:34.724Z" }, - { url = "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", size = 102441, upload-time = "2024-12-24T18:10:37.574Z" }, - { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105, upload-time = "2024-12-24T18:10:38.83Z" }, - { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404, upload-time = "2024-12-24T18:10:44.272Z" }, - { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423, upload-time = "2024-12-24T18:10:45.492Z" }, - { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184, upload-time = "2024-12-24T18:10:47.898Z" }, - { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268, upload-time = "2024-12-24T18:10:50.589Z" }, - { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601, upload-time = "2024-12-24T18:10:52.541Z" }, - { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098, upload-time = "2024-12-24T18:10:53.789Z" }, - { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520, upload-time = "2024-12-24T18:10:55.048Z" }, - { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852, upload-time = "2024-12-24T18:10:57.647Z" }, - { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488, upload-time = "2024-12-24T18:10:59.43Z" }, - { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192, upload-time = "2024-12-24T18:11:00.676Z" }, - { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550, upload-time = "2024-12-24T18:11:01.952Z" }, - { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785, upload-time = "2024-12-24T18:11:03.142Z" }, - { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698, upload-time = "2024-12-24T18:11:05.834Z" }, - { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162, upload-time = "2024-12-24T18:11:07.064Z" }, - { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263, upload-time = "2024-12-24T18:11:08.374Z" }, - { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966, upload-time = "2024-12-24T18:11:09.831Z" }, - { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992, upload-time = "2024-12-24T18:11:12.03Z" }, - { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162, upload-time = "2024-12-24T18:11:13.372Z" }, - { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972, upload-time = "2024-12-24T18:11:14.628Z" }, - { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095, upload-time = "2024-12-24T18:11:17.672Z" }, - { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668, upload-time = "2024-12-24T18:11:18.989Z" }, - { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073, upload-time = "2024-12-24T18:11:21.507Z" }, - { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732, upload-time = "2024-12-24T18:11:22.774Z" }, - { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391, upload-time = "2024-12-24T18:11:24.139Z" }, - { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702, upload-time = "2024-12-24T18:11:26.535Z" }, - { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767, upload-time = "2024-12-24T18:12:32.852Z" }, +version = "3.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371, upload-time = "2025-08-09T07:57:28.46Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/b5/991245018615474a60965a7c9cd2b4efbaabd16d582a5547c47ee1c7730b/charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b", size = 204483, upload-time = "2025-08-09T07:55:53.12Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2a/ae245c41c06299ec18262825c1569c5d3298fc920e4ddf56ab011b417efd/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64", size = 145520, upload-time = "2025-08-09T07:55:54.712Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a4/b3b6c76e7a635748c4421d2b92c7b8f90a432f98bda5082049af37ffc8e3/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91", size = 158876, upload-time = "2025-08-09T07:55:56.024Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e6/63bb0e10f90a8243c5def74b5b105b3bbbfb3e7bb753915fe333fb0c11ea/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f", size = 156083, upload-time = "2025-08-09T07:55:57.582Z" }, + { url = "https://files.pythonhosted.org/packages/87/df/b7737ff046c974b183ea9aa111b74185ac8c3a326c6262d413bd5a1b8c69/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07", size = 150295, upload-time = "2025-08-09T07:55:59.147Z" }, + { url = "https://files.pythonhosted.org/packages/61/f1/190d9977e0084d3f1dc169acd060d479bbbc71b90bf3e7bf7b9927dec3eb/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30", size = 148379, upload-time = "2025-08-09T07:56:00.364Z" }, + { url = "https://files.pythonhosted.org/packages/4c/92/27dbe365d34c68cfe0ca76f1edd70e8705d82b378cb54ebbaeabc2e3029d/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14", size = 160018, upload-time = "2025-08-09T07:56:01.678Z" }, + { url = "https://files.pythonhosted.org/packages/99/04/baae2a1ea1893a01635d475b9261c889a18fd48393634b6270827869fa34/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c", size = 157430, upload-time = "2025-08-09T07:56:02.87Z" }, + { url = "https://files.pythonhosted.org/packages/2f/36/77da9c6a328c54d17b960c89eccacfab8271fdaaa228305330915b88afa9/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae", size = 151600, upload-time = "2025-08-09T07:56:04.089Z" }, + { url = "https://files.pythonhosted.org/packages/64/d4/9eb4ff2c167edbbf08cdd28e19078bf195762e9bd63371689cab5ecd3d0d/charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849", size = 99616, upload-time = "2025-08-09T07:56:05.658Z" }, + { url = "https://files.pythonhosted.org/packages/f4/9c/996a4a028222e7761a96634d1820de8a744ff4327a00ada9c8942033089b/charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c", size = 107108, upload-time = "2025-08-09T07:56:07.176Z" }, + { url = "https://files.pythonhosted.org/packages/e9/5e/14c94999e418d9b87682734589404a25854d5f5d0408df68bc15b6ff54bb/charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1", size = 205655, upload-time = "2025-08-09T07:56:08.475Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a8/c6ec5d389672521f644505a257f50544c074cf5fc292d5390331cd6fc9c3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884", size = 146223, upload-time = "2025-08-09T07:56:09.708Z" }, + { url = "https://files.pythonhosted.org/packages/fc/eb/a2ffb08547f4e1e5415fb69eb7db25932c52a52bed371429648db4d84fb1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018", size = 159366, upload-time = "2025-08-09T07:56:11.326Z" }, + { url = "https://files.pythonhosted.org/packages/82/10/0fd19f20c624b278dddaf83b8464dcddc2456cb4b02bb902a6da126b87a1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392", size = 157104, upload-time = "2025-08-09T07:56:13.014Z" }, + { url = "https://files.pythonhosted.org/packages/16/ab/0233c3231af734f5dfcf0844aa9582d5a1466c985bbed6cedab85af9bfe3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f", size = 151830, upload-time = "2025-08-09T07:56:14.428Z" }, + { url = "https://files.pythonhosted.org/packages/ae/02/e29e22b4e02839a0e4a06557b1999d0a47db3567e82989b5bb21f3fbbd9f/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154", size = 148854, upload-time = "2025-08-09T07:56:16.051Z" }, + { url = "https://files.pythonhosted.org/packages/05/6b/e2539a0a4be302b481e8cafb5af8792da8093b486885a1ae4d15d452bcec/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491", size = 160670, upload-time = "2025-08-09T07:56:17.314Z" }, + { url = "https://files.pythonhosted.org/packages/31/e7/883ee5676a2ef217a40ce0bffcc3d0dfbf9e64cbcfbdf822c52981c3304b/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93", size = 158501, upload-time = "2025-08-09T07:56:18.641Z" }, + { url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173, upload-time = "2025-08-09T07:56:20.289Z" }, + { url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822, upload-time = "2025-08-09T07:56:21.551Z" }, + { url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543, upload-time = "2025-08-09T07:56:23.115Z" }, + { url = "https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe", size = 205326, upload-time = "2025-08-09T07:56:24.721Z" }, + { url = "https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8", size = 146008, upload-time = "2025-08-09T07:56:26.004Z" }, + { url = "https://files.pythonhosted.org/packages/60/f5/4659a4cb3c4ec146bec80c32d8bb16033752574c20b1252ee842a95d1a1e/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9", size = 159196, upload-time = "2025-08-09T07:56:27.25Z" }, + { url = "https://files.pythonhosted.org/packages/86/9e/f552f7a00611f168b9a5865a1414179b2c6de8235a4fa40189f6f79a1753/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31", size = 156819, upload-time = "2025-08-09T07:56:28.515Z" }, + { url = "https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f", size = 151350, upload-time = "2025-08-09T07:56:29.716Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a9/3865b02c56f300a6f94fc631ef54f0a8a29da74fb45a773dfd3dcd380af7/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927", size = 148644, upload-time = "2025-08-09T07:56:30.984Z" }, + { url = "https://files.pythonhosted.org/packages/77/d9/cbcf1a2a5c7d7856f11e7ac2d782aec12bdfea60d104e60e0aa1c97849dc/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9", size = 160468, upload-time = "2025-08-09T07:56:32.252Z" }, + { url = "https://files.pythonhosted.org/packages/f6/42/6f45efee8697b89fda4d50580f292b8f7f9306cb2971d4b53f8914e4d890/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5", size = 158187, upload-time = "2025-08-09T07:56:33.481Z" }, + { url = "https://files.pythonhosted.org/packages/70/99/f1c3bdcfaa9c45b3ce96f70b14f070411366fa19549c1d4832c935d8e2c3/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc", size = 152699, upload-time = "2025-08-09T07:56:34.739Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ad/b0081f2f99a4b194bcbb1934ef3b12aa4d9702ced80a37026b7607c72e58/charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce", size = 99580, upload-time = "2025-08-09T07:56:35.981Z" }, + { url = "https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef", size = 107366, upload-time = "2025-08-09T07:56:37.339Z" }, + { url = "https://files.pythonhosted.org/packages/8e/91/b5a06ad970ddc7a0e513112d40113e834638f4ca1120eb727a249fb2715e/charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15", size = 204342, upload-time = "2025-08-09T07:56:38.687Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ec/1edc30a377f0a02689342f214455c3f6c2fbedd896a1d2f856c002fc3062/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db", size = 145995, upload-time = "2025-08-09T07:56:40.048Z" }, + { url = "https://files.pythonhosted.org/packages/17/e5/5e67ab85e6d22b04641acb5399c8684f4d37caf7558a53859f0283a650e9/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d", size = 158640, upload-time = "2025-08-09T07:56:41.311Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e5/38421987f6c697ee3722981289d554957c4be652f963d71c5e46a262e135/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096", size = 156636, upload-time = "2025-08-09T07:56:43.195Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e4/5a075de8daa3ec0745a9a3b54467e0c2967daaaf2cec04c845f73493e9a1/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa", size = 150939, upload-time = "2025-08-09T07:56:44.819Z" }, + { url = "https://files.pythonhosted.org/packages/02/f7/3611b32318b30974131db62b4043f335861d4d9b49adc6d57c1149cc49d4/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049", size = 148580, upload-time = "2025-08-09T07:56:46.684Z" }, + { url = "https://files.pythonhosted.org/packages/7e/61/19b36f4bd67f2793ab6a99b979b4e4f3d8fc754cbdffb805335df4337126/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0", size = 159870, upload-time = "2025-08-09T07:56:47.941Z" }, + { url = "https://files.pythonhosted.org/packages/06/57/84722eefdd338c04cf3030ada66889298eaedf3e7a30a624201e0cbe424a/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92", size = 157797, upload-time = "2025-08-09T07:56:49.756Z" }, + { url = "https://files.pythonhosted.org/packages/72/2a/aff5dd112b2f14bcc3462c312dce5445806bfc8ab3a7328555da95330e4b/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16", size = 152224, upload-time = "2025-08-09T07:56:51.369Z" }, + { url = "https://files.pythonhosted.org/packages/b7/8c/9839225320046ed279c6e839d51f028342eb77c91c89b8ef2549f951f3ec/charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce", size = 100086, upload-time = "2025-08-09T07:56:52.722Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7a/36fbcf646e41f710ce0a563c1c9a343c6edf9be80786edeb15b6f62e17db/charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c", size = 107400, upload-time = "2025-08-09T07:56:55.172Z" }, + { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" }, ] [[package]] @@ -480,14 +489,14 @@ dev = [ [[package]] name = "click" -version = "8.1.8" +version = "8.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } +sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload-time = "2025-05-20T23:19:49.832Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, + { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload-time = "2025-05-20T23:19:47.796Z" }, ] [[package]] @@ -525,37 +534,43 @@ dev = [{ name = "pyright", specifier = ">=1.1.389" }] [[package]] name = "cryptography" -version = "44.0.1" +version = "45.0.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c7/67/545c79fe50f7af51dbad56d16b23fe33f63ee6a5d956b3cb68ea110cbe64/cryptography-44.0.1.tar.gz", hash = "sha256:f51f5705ab27898afda1aaa430f34ad90dc117421057782022edf0600bec5f14", size = 710819, upload-time = "2025-02-11T15:50:58.39Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/72/27/5e3524053b4c8889da65cf7814a9d0d8514a05194a25e1e34f46852ee6eb/cryptography-44.0.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf688f615c29bfe9dfc44312ca470989279f0e94bb9f631f85e3459af8efc009", size = 6642022, upload-time = "2025-02-11T15:49:32.752Z" }, - { url = "https://files.pythonhosted.org/packages/34/b9/4d1fa8d73ae6ec350012f89c3abfbff19fc95fe5420cf972e12a8d182986/cryptography-44.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd7c7e2d71d908dc0f8d2027e1604102140d84b155e658c20e8ad1304317691f", size = 3943865, upload-time = "2025-02-11T15:49:36.659Z" }, - { url = "https://files.pythonhosted.org/packages/6e/57/371a9f3f3a4500807b5fcd29fec77f418ba27ffc629d88597d0d1049696e/cryptography-44.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887143b9ff6bad2b7570da75a7fe8bbf5f65276365ac259a5d2d5147a73775f2", size = 4162562, upload-time = "2025-02-11T15:49:39.541Z" }, - { url = "https://files.pythonhosted.org/packages/c5/1d/5b77815e7d9cf1e3166988647f336f87d5634a5ccecec2ffbe08ef8dd481/cryptography-44.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:322eb03ecc62784536bc173f1483e76747aafeb69c8728df48537eb431cd1911", size = 3951923, upload-time = "2025-02-11T15:49:42.461Z" }, - { url = "https://files.pythonhosted.org/packages/28/01/604508cd34a4024467cd4105887cf27da128cba3edd435b54e2395064bfb/cryptography-44.0.1-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:21377472ca4ada2906bc313168c9dc7b1d7ca417b63c1c3011d0c74b7de9ae69", size = 3685194, upload-time = "2025-02-11T15:49:45.226Z" }, - { url = "https://files.pythonhosted.org/packages/c6/3d/d3c55d4f1d24580a236a6753902ef6d8aafd04da942a1ee9efb9dc8fd0cb/cryptography-44.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:df978682c1504fc93b3209de21aeabf2375cb1571d4e61907b3e7a2540e83026", size = 4187790, upload-time = "2025-02-11T15:49:48.215Z" }, - { url = "https://files.pythonhosted.org/packages/ea/a6/44d63950c8588bfa8594fd234d3d46e93c3841b8e84a066649c566afb972/cryptography-44.0.1-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:eb3889330f2a4a148abead555399ec9a32b13b7c8ba969b72d8e500eb7ef84cd", size = 3951343, upload-time = "2025-02-11T15:49:50.313Z" }, - { url = "https://files.pythonhosted.org/packages/c1/17/f5282661b57301204cbf188254c1a0267dbd8b18f76337f0a7ce1038888c/cryptography-44.0.1-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:8e6a85a93d0642bd774460a86513c5d9d80b5c002ca9693e63f6e540f1815ed0", size = 4187127, upload-time = "2025-02-11T15:49:52.051Z" }, - { url = "https://files.pythonhosted.org/packages/f3/68/abbae29ed4f9d96596687f3ceea8e233f65c9645fbbec68adb7c756bb85a/cryptography-44.0.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6f76fdd6fd048576a04c5210d53aa04ca34d2ed63336d4abd306d0cbe298fddf", size = 4070666, upload-time = "2025-02-11T15:49:56.56Z" }, - { url = "https://files.pythonhosted.org/packages/0f/10/cf91691064a9e0a88ae27e31779200b1505d3aee877dbe1e4e0d73b4f155/cryptography-44.0.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6c8acf6f3d1f47acb2248ec3ea261171a671f3d9428e34ad0357148d492c7864", size = 4288811, upload-time = "2025-02-11T15:49:59.248Z" }, - { url = "https://files.pythonhosted.org/packages/38/78/74ea9eb547d13c34e984e07ec8a473eb55b19c1451fe7fc8077c6a4b0548/cryptography-44.0.1-cp37-abi3-win32.whl", hash = "sha256:24979e9f2040c953a94bf3c6782e67795a4c260734e5264dceea65c8f4bae64a", size = 2771882, upload-time = "2025-02-11T15:50:01.478Z" }, - { url = "https://files.pythonhosted.org/packages/cf/6c/3907271ee485679e15c9f5e93eac6aa318f859b0aed8d369afd636fafa87/cryptography-44.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:fd0ee90072861e276b0ff08bd627abec29e32a53b2be44e41dbcdf87cbee2b00", size = 3206989, upload-time = "2025-02-11T15:50:03.312Z" }, - { url = "https://files.pythonhosted.org/packages/9f/f1/676e69c56a9be9fd1bffa9bc3492366901f6e1f8f4079428b05f1414e65c/cryptography-44.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:a2d8a7045e1ab9b9f803f0d9531ead85f90c5f2859e653b61497228b18452008", size = 6643714, upload-time = "2025-02-11T15:50:05.555Z" }, - { url = "https://files.pythonhosted.org/packages/ba/9f/1775600eb69e72d8f9931a104120f2667107a0ee478f6ad4fe4001559345/cryptography-44.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8272f257cf1cbd3f2e120f14c68bff2b6bdfcc157fafdee84a1b795efd72862", size = 3943269, upload-time = "2025-02-11T15:50:08.54Z" }, - { url = "https://files.pythonhosted.org/packages/25/ba/e00d5ad6b58183829615be7f11f55a7b6baa5a06910faabdc9961527ba44/cryptography-44.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e8d181e90a777b63f3f0caa836844a1182f1f265687fac2115fcf245f5fbec3", size = 4166461, upload-time = "2025-02-11T15:50:11.419Z" }, - { url = "https://files.pythonhosted.org/packages/b3/45/690a02c748d719a95ab08b6e4decb9d81e0ec1bac510358f61624c86e8a3/cryptography-44.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:436df4f203482f41aad60ed1813811ac4ab102765ecae7a2bbb1dbb66dcff5a7", size = 3950314, upload-time = "2025-02-11T15:50:14.181Z" }, - { url = "https://files.pythonhosted.org/packages/e6/50/bf8d090911347f9b75adc20f6f6569ed6ca9b9bff552e6e390f53c2a1233/cryptography-44.0.1-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4f422e8c6a28cf8b7f883eb790695d6d45b0c385a2583073f3cec434cc705e1a", size = 3686675, upload-time = "2025-02-11T15:50:16.3Z" }, - { url = "https://files.pythonhosted.org/packages/e1/e7/cfb18011821cc5f9b21efb3f94f3241e3a658d267a3bf3a0f45543858ed8/cryptography-44.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:72198e2b5925155497a5a3e8c216c7fb3e64c16ccee11f0e7da272fa93b35c4c", size = 4190429, upload-time = "2025-02-11T15:50:19.302Z" }, - { url = "https://files.pythonhosted.org/packages/07/ef/77c74d94a8bfc1a8a47b3cafe54af3db537f081742ee7a8a9bd982b62774/cryptography-44.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:2a46a89ad3e6176223b632056f321bc7de36b9f9b93b2cc1cccf935a3849dc62", size = 3950039, upload-time = "2025-02-11T15:50:22.257Z" }, - { url = "https://files.pythonhosted.org/packages/6d/b9/8be0ff57c4592382b77406269b1e15650c9f1a167f9e34941b8515b97159/cryptography-44.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:53f23339864b617a3dfc2b0ac8d5c432625c80014c25caac9082314e9de56f41", size = 4189713, upload-time = "2025-02-11T15:50:24.261Z" }, - { url = "https://files.pythonhosted.org/packages/78/e1/4b6ac5f4100545513b0847a4d276fe3c7ce0eacfa73e3b5ebd31776816ee/cryptography-44.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:888fcc3fce0c888785a4876ca55f9f43787f4c5c1cc1e2e0da71ad481ff82c5b", size = 4071193, upload-time = "2025-02-11T15:50:26.18Z" }, - { url = "https://files.pythonhosted.org/packages/3d/cb/afff48ceaed15531eab70445abe500f07f8f96af2bb35d98af6bfa89ebd4/cryptography-44.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:00918d859aa4e57db8299607086f793fa7813ae2ff5a4637e318a25ef82730f7", size = 4289566, upload-time = "2025-02-11T15:50:28.221Z" }, - { url = "https://files.pythonhosted.org/packages/30/6f/4eca9e2e0f13ae459acd1ca7d9f0257ab86e68f44304847610afcb813dc9/cryptography-44.0.1-cp39-abi3-win32.whl", hash = "sha256:9b336599e2cb77b1008cb2ac264b290803ec5e8e89d618a5e978ff5eb6f715d9", size = 2772371, upload-time = "2025-02-11T15:50:29.997Z" }, - { url = "https://files.pythonhosted.org/packages/d2/05/5533d30f53f10239616a357f080892026db2d550a40c393d0a8a7af834a9/cryptography-44.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:e403f7f766ded778ecdb790da786b418a9f2394f36e8cc8b796cc056ab05f44f", size = 3207303, upload-time = "2025-02-11T15:50:32.258Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/d6/0d/d13399c94234ee8f3df384819dc67e0c5ce215fb751d567a55a1f4b028c7/cryptography-45.0.6.tar.gz", hash = "sha256:5c966c732cf6e4a276ce83b6e4c729edda2df6929083a952cc7da973c539c719", size = 744949, upload-time = "2025-08-05T23:59:27.93Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/29/2793d178d0eda1ca4a09a7c4e09a5185e75738cc6d526433e8663b460ea6/cryptography-45.0.6-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:048e7ad9e08cf4c0ab07ff7f36cc3115924e22e2266e034450a890d9e312dd74", size = 7042702, upload-time = "2025-08-05T23:58:23.464Z" }, + { url = "https://files.pythonhosted.org/packages/b3/b6/cabd07410f222f32c8d55486c464f432808abaa1f12af9afcbe8f2f19030/cryptography-45.0.6-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:44647c5d796f5fc042bbc6d61307d04bf29bccb74d188f18051b635f20a9c75f", size = 4206483, upload-time = "2025-08-05T23:58:27.132Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9e/f9c7d36a38b1cfeb1cc74849aabe9bf817990f7603ff6eb485e0d70e0b27/cryptography-45.0.6-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e40b80ecf35ec265c452eea0ba94c9587ca763e739b8e559c128d23bff7ebbbf", size = 4429679, upload-time = "2025-08-05T23:58:29.152Z" }, + { url = "https://files.pythonhosted.org/packages/9c/2a/4434c17eb32ef30b254b9e8b9830cee4e516f08b47fdd291c5b1255b8101/cryptography-45.0.6-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:00e8724bdad672d75e6f069b27970883179bd472cd24a63f6e620ca7e41cc0c5", size = 4210553, upload-time = "2025-08-05T23:58:30.596Z" }, + { url = "https://files.pythonhosted.org/packages/ef/1d/09a5df8e0c4b7970f5d1f3aff1b640df6d4be28a64cae970d56c6cf1c772/cryptography-45.0.6-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7a3085d1b319d35296176af31c90338eeb2ddac8104661df79f80e1d9787b8b2", size = 3894499, upload-time = "2025-08-05T23:58:32.03Z" }, + { url = "https://files.pythonhosted.org/packages/79/62/120842ab20d9150a9d3a6bdc07fe2870384e82f5266d41c53b08a3a96b34/cryptography-45.0.6-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1b7fa6a1c1188c7ee32e47590d16a5a0646270921f8020efc9a511648e1b2e08", size = 4458484, upload-time = "2025-08-05T23:58:33.526Z" }, + { url = "https://files.pythonhosted.org/packages/fd/80/1bc3634d45ddfed0871bfba52cf8f1ad724761662a0c792b97a951fb1b30/cryptography-45.0.6-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:275ba5cc0d9e320cd70f8e7b96d9e59903c815ca579ab96c1e37278d231fc402", size = 4210281, upload-time = "2025-08-05T23:58:35.445Z" }, + { url = "https://files.pythonhosted.org/packages/7d/fe/ffb12c2d83d0ee625f124880a1f023b5878f79da92e64c37962bbbe35f3f/cryptography-45.0.6-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:f4028f29a9f38a2025abedb2e409973709c660d44319c61762202206ed577c42", size = 4456890, upload-time = "2025-08-05T23:58:36.923Z" }, + { url = "https://files.pythonhosted.org/packages/8c/8e/b3f3fe0dc82c77a0deb5f493b23311e09193f2268b77196ec0f7a36e3f3e/cryptography-45.0.6-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ee411a1b977f40bd075392c80c10b58025ee5c6b47a822a33c1198598a7a5f05", size = 4333247, upload-time = "2025-08-05T23:58:38.781Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a6/c3ef2ab9e334da27a1d7b56af4a2417d77e7806b2e0f90d6267ce120d2e4/cryptography-45.0.6-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e2a21a8eda2d86bb604934b6b37691585bd095c1f788530c1fcefc53a82b3453", size = 4565045, upload-time = "2025-08-05T23:58:40.415Z" }, + { url = "https://files.pythonhosted.org/packages/31/c3/77722446b13fa71dddd820a5faab4ce6db49e7e0bf8312ef4192a3f78e2f/cryptography-45.0.6-cp311-abi3-win32.whl", hash = "sha256:d063341378d7ee9c91f9d23b431a3502fc8bfacd54ef0a27baa72a0843b29159", size = 2928923, upload-time = "2025-08-05T23:58:41.919Z" }, + { url = "https://files.pythonhosted.org/packages/38/63/a025c3225188a811b82932a4dcc8457a26c3729d81578ccecbcce2cb784e/cryptography-45.0.6-cp311-abi3-win_amd64.whl", hash = "sha256:833dc32dfc1e39b7376a87b9a6a4288a10aae234631268486558920029b086ec", size = 3403805, upload-time = "2025-08-05T23:58:43.792Z" }, + { url = "https://files.pythonhosted.org/packages/5b/af/bcfbea93a30809f126d51c074ee0fac5bd9d57d068edf56c2a73abedbea4/cryptography-45.0.6-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:3436128a60a5e5490603ab2adbabc8763613f638513ffa7d311c900a8349a2a0", size = 7020111, upload-time = "2025-08-05T23:58:45.316Z" }, + { url = "https://files.pythonhosted.org/packages/98/c6/ea5173689e014f1a8470899cd5beeb358e22bb3cf5a876060f9d1ca78af4/cryptography-45.0.6-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0d9ef57b6768d9fa58e92f4947cea96ade1233c0e236db22ba44748ffedca394", size = 4198169, upload-time = "2025-08-05T23:58:47.121Z" }, + { url = "https://files.pythonhosted.org/packages/ba/73/b12995edc0c7e2311ffb57ebd3b351f6b268fed37d93bfc6f9856e01c473/cryptography-45.0.6-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ea3c42f2016a5bbf71825537c2ad753f2870191134933196bee408aac397b3d9", size = 4421273, upload-time = "2025-08-05T23:58:48.557Z" }, + { url = "https://files.pythonhosted.org/packages/f7/6e/286894f6f71926bc0da67408c853dd9ba953f662dcb70993a59fd499f111/cryptography-45.0.6-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:20ae4906a13716139d6d762ceb3e0e7e110f7955f3bc3876e3a07f5daadec5f3", size = 4199211, upload-time = "2025-08-05T23:58:50.139Z" }, + { url = "https://files.pythonhosted.org/packages/de/34/a7f55e39b9623c5cb571d77a6a90387fe557908ffc44f6872f26ca8ae270/cryptography-45.0.6-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dac5ec199038b8e131365e2324c03d20e97fe214af051d20c49db129844e8b3", size = 3883732, upload-time = "2025-08-05T23:58:52.253Z" }, + { url = "https://files.pythonhosted.org/packages/f9/b9/c6d32edbcba0cd9f5df90f29ed46a65c4631c4fbe11187feb9169c6ff506/cryptography-45.0.6-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:18f878a34b90d688982e43f4b700408b478102dd58b3e39de21b5ebf6509c301", size = 4450655, upload-time = "2025-08-05T23:58:53.848Z" }, + { url = "https://files.pythonhosted.org/packages/77/2d/09b097adfdee0227cfd4c699b3375a842080f065bab9014248933497c3f9/cryptography-45.0.6-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:5bd6020c80c5b2b2242d6c48487d7b85700f5e0038e67b29d706f98440d66eb5", size = 4198956, upload-time = "2025-08-05T23:58:55.209Z" }, + { url = "https://files.pythonhosted.org/packages/55/66/061ec6689207d54effdff535bbdf85cc380d32dd5377173085812565cf38/cryptography-45.0.6-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:eccddbd986e43014263eda489abbddfbc287af5cddfd690477993dbb31e31016", size = 4449859, upload-time = "2025-08-05T23:58:56.639Z" }, + { url = "https://files.pythonhosted.org/packages/41/ff/e7d5a2ad2d035e5a2af116e1a3adb4d8fcd0be92a18032917a089c6e5028/cryptography-45.0.6-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:550ae02148206beb722cfe4ef0933f9352bab26b087af00e48fdfb9ade35c5b3", size = 4320254, upload-time = "2025-08-05T23:58:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/82/27/092d311af22095d288f4db89fcaebadfb2f28944f3d790a4cf51fe5ddaeb/cryptography-45.0.6-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5b64e668fc3528e77efa51ca70fadcd6610e8ab231e3e06ae2bab3b31c2b8ed9", size = 4554815, upload-time = "2025-08-05T23:59:00.283Z" }, + { url = "https://files.pythonhosted.org/packages/7e/01/aa2f4940262d588a8fdf4edabe4cda45854d00ebc6eaac12568b3a491a16/cryptography-45.0.6-cp37-abi3-win32.whl", hash = "sha256:780c40fb751c7d2b0c6786ceee6b6f871e86e8718a8ff4bc35073ac353c7cd02", size = 2912147, upload-time = "2025-08-05T23:59:01.716Z" }, + { url = "https://files.pythonhosted.org/packages/0a/bc/16e0276078c2de3ceef6b5a34b965f4436215efac45313df90d55f0ba2d2/cryptography-45.0.6-cp37-abi3-win_amd64.whl", hash = "sha256:20d15aed3ee522faac1a39fbfdfee25d17b1284bafd808e1640a74846d7c4d1b", size = 3390459, upload-time = "2025-08-05T23:59:03.358Z" }, + { url = "https://files.pythonhosted.org/packages/61/69/c252de4ec047ba2f567ecb53149410219577d408c2aea9c989acae7eafce/cryptography-45.0.6-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fc022c1fa5acff6def2fc6d7819bbbd31ccddfe67d075331a65d9cfb28a20983", size = 3584669, upload-time = "2025-08-05T23:59:15.431Z" }, + { url = "https://files.pythonhosted.org/packages/e3/fe/deea71e9f310a31fe0a6bfee670955152128d309ea2d1c79e2a5ae0f0401/cryptography-45.0.6-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3de77e4df42ac8d4e4d6cdb342d989803ad37707cf8f3fbf7b088c9cbdd46427", size = 4153022, upload-time = "2025-08-05T23:59:16.954Z" }, + { url = "https://files.pythonhosted.org/packages/60/45/a77452f5e49cb580feedba6606d66ae7b82c128947aa754533b3d1bd44b0/cryptography-45.0.6-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:599c8d7df950aa68baa7e98f7b73f4f414c9f02d0e8104a30c0182a07732638b", size = 4386802, upload-time = "2025-08-05T23:59:18.55Z" }, + { url = "https://files.pythonhosted.org/packages/a3/b9/a2f747d2acd5e3075fdf5c145c7c3568895daaa38b3b0c960ef830db6cdc/cryptography-45.0.6-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:31a2b9a10530a1cb04ffd6aa1cd4d3be9ed49f7d77a4dafe198f3b382f41545c", size = 4152706, upload-time = "2025-08-05T23:59:20.044Z" }, + { url = "https://files.pythonhosted.org/packages/81/ec/381b3e8d0685a3f3f304a382aa3dfce36af2d76467da0fd4bb21ddccc7b2/cryptography-45.0.6-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:e5b3dda1b00fb41da3af4c5ef3f922a200e33ee5ba0f0bc9ecf0b0c173958385", size = 4386740, upload-time = "2025-08-05T23:59:21.525Z" }, + { url = "https://files.pythonhosted.org/packages/0a/76/cf8d69da8d0b5ecb0db406f24a63a3f69ba5e791a11b782aeeefef27ccbb/cryptography-45.0.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:629127cfdcdc6806dfe234734d7cb8ac54edaf572148274fa377a7d3405b0043", size = 3331874, upload-time = "2025-08-05T23:59:23.017Z" }, ] [[package]] @@ -623,16 +638,16 @@ dev = [{ name = "pyright", specifier = ">=1.1.389" }] [[package]] name = "fastapi" -version = "0.115.8" +version = "0.115.14" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, { name = "starlette" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a2/b2/5a5dc4affdb6661dea100324e19a7721d5dc524b464fe8e366c093fd7d87/fastapi-0.115.8.tar.gz", hash = "sha256:0ce9111231720190473e222cdf0f07f7206ad7e53ea02beb1d2dc36e2f0741e9", size = 295403, upload-time = "2025-01-30T14:06:41.138Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/53/8c38a874844a8b0fa10dd8adf3836ac154082cf88d3f22b544e9ceea0a15/fastapi-0.115.14.tar.gz", hash = "sha256:b1de15cdc1c499a4da47914db35d0e4ef8f1ce62b624e94e0e5824421df99739", size = 296263, upload-time = "2025-06-26T15:29:08.21Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/7d/2d6ce181d7a5f51dedb8c06206cbf0ec026a99bf145edd309f9e17c3282f/fastapi-0.115.8-py3-none-any.whl", hash = "sha256:753a96dd7e036b34eeef8babdfcfe3f28ff79648f86551eb36bfc1b0bf4a8cbf", size = 94814, upload-time = "2025-01-30T14:06:38.564Z" }, + { url = "https://files.pythonhosted.org/packages/53/50/b1222562c6d270fea83e9c9075b8e8600b8479150a18e4516a6138b980d1/fastapi-0.115.14-py3-none-any.whl", hash = "sha256:6c0c8bf9420bd58f565e585036d971872472b4f7d3f6c73b698e10cffdefb3ca", size = 95514, upload-time = "2025-06-26T15:29:06.49Z" }, ] [package.optional-dependencies] @@ -647,109 +662,151 @@ standard = [ [[package]] name = "fastapi-cli" -version = "0.0.7" +version = "0.0.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "rich-toolkit" }, { name = "typer" }, { name = "uvicorn", extra = ["standard"] }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fe/73/82a5831fbbf8ed75905bacf5b2d9d3dfd6f04d6968b29fe6f72a5ae9ceb1/fastapi_cli-0.0.7.tar.gz", hash = "sha256:02b3b65956f526412515907a0793c9094abd4bfb5457b389f645b0ea6ba3605e", size = 16753, upload-time = "2024-12-15T14:28:10.028Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c6/94/3ef75d9c7c32936ecb539b9750ccbdc3d2568efd73b1cb913278375f4533/fastapi_cli-0.0.8.tar.gz", hash = "sha256:2360f2989b1ab4a3d7fc8b3a0b20e8288680d8af2e31de7c38309934d7f8a0ee", size = 16884, upload-time = "2025-07-07T14:44:09.326Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/e6/5daefc851b514ce2287d8f5d358ae4341089185f78f3217a69d0ce3a390c/fastapi_cli-0.0.7-py3-none-any.whl", hash = "sha256:d549368ff584b2804336c61f192d86ddea080c11255f375959627911944804f4", size = 10705, upload-time = "2024-12-15T14:28:06.18Z" }, + { url = "https://files.pythonhosted.org/packages/e0/3f/6ad3103c5f59208baf4c798526daea6a74085bb35d1c161c501863470476/fastapi_cli-0.0.8-py3-none-any.whl", hash = "sha256:0ea95d882c85b9219a75a65ab27e8da17dac02873e456850fa0a726e96e985eb", size = 10770, upload-time = "2025-07-07T14:44:08.255Z" }, ] [package.optional-dependencies] standard = [ + { name = "fastapi-cloud-cli" }, + { name = "uvicorn", extra = ["standard"] }, +] + +[[package]] +name = "fastapi-cloud-cli" +version = "0.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httpx" }, + { name = "pydantic", extra = ["email"] }, + { name = "rich-toolkit" }, + { name = "rignore" }, + { name = "sentry-sdk" }, + { name = "typer" }, { name = "uvicorn", extra = ["standard"] }, ] +sdist = { url = "https://files.pythonhosted.org/packages/a9/2e/3b6e5016affc310e5109bc580f760586eabecea0c8a7ab067611cd849ac0/fastapi_cloud_cli-0.1.5.tar.gz", hash = "sha256:341ee585eb731a6d3c3656cb91ad38e5f39809bf1a16d41de1333e38635a7937", size = 22710, upload-time = "2025-07-28T13:30:48.216Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/a6/5aa862489a2918a096166fd98d9fe86b7fd53c607678b3fa9d8c432d88d5/fastapi_cloud_cli-0.1.5-py3-none-any.whl", hash = "sha256:d80525fb9c0e8af122370891f9fa83cf5d496e4ad47a8dd26c0496a6c85a012a", size = 18992, upload-time = "2025-07-28T13:30:47.427Z" }, +] [[package]] name = "frozenlist" -version = "1.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8f/ed/0f4cec13a93c02c47ec32d81d11c0c1efbadf4a471e3f3ce7cad366cbbd3/frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817", size = 39930, upload-time = "2024-10-23T09:48:29.903Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/79/43/0bed28bf5eb1c9e4301003b74453b8e7aa85fb293b31dde352aac528dafc/frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30", size = 94987, upload-time = "2024-10-23T09:46:40.487Z" }, - { url = "https://files.pythonhosted.org/packages/bb/bf/b74e38f09a246e8abbe1e90eb65787ed745ccab6eaa58b9c9308e052323d/frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5", size = 54584, upload-time = "2024-10-23T09:46:41.463Z" }, - { url = "https://files.pythonhosted.org/packages/2c/31/ab01375682f14f7613a1ade30149f684c84f9b8823a4391ed950c8285656/frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778", size = 52499, upload-time = "2024-10-23T09:46:42.451Z" }, - { url = "https://files.pythonhosted.org/packages/98/a8/d0ac0b9276e1404f58fec3ab6e90a4f76b778a49373ccaf6a563f100dfbc/frozenlist-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a", size = 276357, upload-time = "2024-10-23T09:46:44.166Z" }, - { url = "https://files.pythonhosted.org/packages/ad/c9/c7761084fa822f07dac38ac29f841d4587570dd211e2262544aa0b791d21/frozenlist-1.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869", size = 287516, upload-time = "2024-10-23T09:46:45.369Z" }, - { url = "https://files.pythonhosted.org/packages/a1/ff/cd7479e703c39df7bdab431798cef89dc75010d8aa0ca2514c5b9321db27/frozenlist-1.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d", size = 283131, upload-time = "2024-10-23T09:46:46.654Z" }, - { url = "https://files.pythonhosted.org/packages/59/a0/370941beb47d237eca4fbf27e4e91389fd68699e6f4b0ebcc95da463835b/frozenlist-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45", size = 261320, upload-time = "2024-10-23T09:46:47.825Z" }, - { url = "https://files.pythonhosted.org/packages/b8/5f/c10123e8d64867bc9b4f2f510a32042a306ff5fcd7e2e09e5ae5100ee333/frozenlist-1.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d", size = 274877, upload-time = "2024-10-23T09:46:48.989Z" }, - { url = "https://files.pythonhosted.org/packages/fa/79/38c505601ae29d4348f21706c5d89755ceded02a745016ba2f58bd5f1ea6/frozenlist-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3", size = 269592, upload-time = "2024-10-23T09:46:50.235Z" }, - { url = "https://files.pythonhosted.org/packages/19/e2/39f3a53191b8204ba9f0bb574b926b73dd2efba2a2b9d2d730517e8f7622/frozenlist-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a", size = 265934, upload-time = "2024-10-23T09:46:51.829Z" }, - { url = "https://files.pythonhosted.org/packages/d5/c9/3075eb7f7f3a91f1a6b00284af4de0a65a9ae47084930916f5528144c9dd/frozenlist-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9", size = 283859, upload-time = "2024-10-23T09:46:52.947Z" }, - { url = "https://files.pythonhosted.org/packages/05/f5/549f44d314c29408b962fa2b0e69a1a67c59379fb143b92a0a065ffd1f0f/frozenlist-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2", size = 287560, upload-time = "2024-10-23T09:46:54.162Z" }, - { url = "https://files.pythonhosted.org/packages/9d/f8/cb09b3c24a3eac02c4c07a9558e11e9e244fb02bf62c85ac2106d1eb0c0b/frozenlist-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf", size = 277150, upload-time = "2024-10-23T09:46:55.361Z" }, - { url = "https://files.pythonhosted.org/packages/37/48/38c2db3f54d1501e692d6fe058f45b6ad1b358d82cd19436efab80cfc965/frozenlist-1.5.0-cp311-cp311-win32.whl", hash = "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942", size = 45244, upload-time = "2024-10-23T09:46:56.578Z" }, - { url = "https://files.pythonhosted.org/packages/ca/8c/2ddffeb8b60a4bce3b196c32fcc30d8830d4615e7b492ec2071da801b8ad/frozenlist-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d", size = 51634, upload-time = "2024-10-23T09:46:57.6Z" }, - { url = "https://files.pythonhosted.org/packages/79/73/fa6d1a96ab7fd6e6d1c3500700963eab46813847f01ef0ccbaa726181dd5/frozenlist-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21", size = 94026, upload-time = "2024-10-23T09:46:58.601Z" }, - { url = "https://files.pythonhosted.org/packages/ab/04/ea8bf62c8868b8eada363f20ff1b647cf2e93377a7b284d36062d21d81d1/frozenlist-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d", size = 54150, upload-time = "2024-10-23T09:46:59.608Z" }, - { url = "https://files.pythonhosted.org/packages/d0/9a/8e479b482a6f2070b26bda572c5e6889bb3ba48977e81beea35b5ae13ece/frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e", size = 51927, upload-time = "2024-10-23T09:47:00.625Z" }, - { url = "https://files.pythonhosted.org/packages/e3/12/2aad87deb08a4e7ccfb33600871bbe8f0e08cb6d8224371387f3303654d7/frozenlist-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a", size = 282647, upload-time = "2024-10-23T09:47:01.992Z" }, - { url = "https://files.pythonhosted.org/packages/77/f2/07f06b05d8a427ea0060a9cef6e63405ea9e0d761846b95ef3fb3be57111/frozenlist-1.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a", size = 289052, upload-time = "2024-10-23T09:47:04.039Z" }, - { url = "https://files.pythonhosted.org/packages/bd/9f/8bf45a2f1cd4aa401acd271b077989c9267ae8463e7c8b1eb0d3f561b65e/frozenlist-1.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee", size = 291719, upload-time = "2024-10-23T09:47:05.58Z" }, - { url = "https://files.pythonhosted.org/packages/41/d1/1f20fd05a6c42d3868709b7604c9f15538a29e4f734c694c6bcfc3d3b935/frozenlist-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6", size = 267433, upload-time = "2024-10-23T09:47:07.807Z" }, - { url = "https://files.pythonhosted.org/packages/af/f2/64b73a9bb86f5a89fb55450e97cd5c1f84a862d4ff90d9fd1a73ab0f64a5/frozenlist-1.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e", size = 283591, upload-time = "2024-10-23T09:47:09.645Z" }, - { url = "https://files.pythonhosted.org/packages/29/e2/ffbb1fae55a791fd6c2938dd9ea779509c977435ba3940b9f2e8dc9d5316/frozenlist-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9", size = 273249, upload-time = "2024-10-23T09:47:10.808Z" }, - { url = "https://files.pythonhosted.org/packages/2e/6e/008136a30798bb63618a114b9321b5971172a5abddff44a100c7edc5ad4f/frozenlist-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039", size = 271075, upload-time = "2024-10-23T09:47:11.938Z" }, - { url = "https://files.pythonhosted.org/packages/ae/f0/4e71e54a026b06724cec9b6c54f0b13a4e9e298cc8db0f82ec70e151f5ce/frozenlist-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784", size = 285398, upload-time = "2024-10-23T09:47:14.071Z" }, - { url = "https://files.pythonhosted.org/packages/4d/36/70ec246851478b1c0b59f11ef8ade9c482ff447c1363c2bd5fad45098b12/frozenlist-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631", size = 294445, upload-time = "2024-10-23T09:47:15.318Z" }, - { url = "https://files.pythonhosted.org/packages/37/e0/47f87544055b3349b633a03c4d94b405956cf2437f4ab46d0928b74b7526/frozenlist-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f", size = 280569, upload-time = "2024-10-23T09:47:17.149Z" }, - { url = "https://files.pythonhosted.org/packages/f9/7c/490133c160fb6b84ed374c266f42800e33b50c3bbab1652764e6e1fc498a/frozenlist-1.5.0-cp312-cp312-win32.whl", hash = "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8", size = 44721, upload-time = "2024-10-23T09:47:19.012Z" }, - { url = "https://files.pythonhosted.org/packages/b1/56/4e45136ffc6bdbfa68c29ca56ef53783ef4c2fd395f7cbf99a2624aa9aaa/frozenlist-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f", size = 51329, upload-time = "2024-10-23T09:47:20.177Z" }, - { url = "https://files.pythonhosted.org/packages/da/3b/915f0bca8a7ea04483622e84a9bd90033bab54bdf485479556c74fd5eaf5/frozenlist-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953", size = 91538, upload-time = "2024-10-23T09:47:21.176Z" }, - { url = "https://files.pythonhosted.org/packages/c7/d1/a7c98aad7e44afe5306a2b068434a5830f1470675f0e715abb86eb15f15b/frozenlist-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0", size = 52849, upload-time = "2024-10-23T09:47:22.439Z" }, - { url = "https://files.pythonhosted.org/packages/3a/c8/76f23bf9ab15d5f760eb48701909645f686f9c64fbb8982674c241fbef14/frozenlist-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2", size = 50583, upload-time = "2024-10-23T09:47:23.44Z" }, - { url = "https://files.pythonhosted.org/packages/1f/22/462a3dd093d11df623179d7754a3b3269de3b42de2808cddef50ee0f4f48/frozenlist-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f", size = 265636, upload-time = "2024-10-23T09:47:24.82Z" }, - { url = "https://files.pythonhosted.org/packages/80/cf/e075e407fc2ae7328155a1cd7e22f932773c8073c1fc78016607d19cc3e5/frozenlist-1.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608", size = 270214, upload-time = "2024-10-23T09:47:26.156Z" }, - { url = "https://files.pythonhosted.org/packages/a1/58/0642d061d5de779f39c50cbb00df49682832923f3d2ebfb0fedf02d05f7f/frozenlist-1.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b", size = 273905, upload-time = "2024-10-23T09:47:27.741Z" }, - { url = "https://files.pythonhosted.org/packages/ab/66/3fe0f5f8f2add5b4ab7aa4e199f767fd3b55da26e3ca4ce2cc36698e50c4/frozenlist-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840", size = 250542, upload-time = "2024-10-23T09:47:28.938Z" }, - { url = "https://files.pythonhosted.org/packages/f6/b8/260791bde9198c87a465224e0e2bb62c4e716f5d198fc3a1dacc4895dbd1/frozenlist-1.5.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439", size = 267026, upload-time = "2024-10-23T09:47:30.283Z" }, - { url = "https://files.pythonhosted.org/packages/2e/a4/3d24f88c527f08f8d44ade24eaee83b2627793fa62fa07cbb7ff7a2f7d42/frozenlist-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de", size = 257690, upload-time = "2024-10-23T09:47:32.388Z" }, - { url = "https://files.pythonhosted.org/packages/de/9a/d311d660420b2beeff3459b6626f2ab4fb236d07afbdac034a4371fe696e/frozenlist-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641", size = 253893, upload-time = "2024-10-23T09:47:34.274Z" }, - { url = "https://files.pythonhosted.org/packages/c6/23/e491aadc25b56eabd0f18c53bb19f3cdc6de30b2129ee0bc39cd387cd560/frozenlist-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e", size = 267006, upload-time = "2024-10-23T09:47:35.499Z" }, - { url = "https://files.pythonhosted.org/packages/08/c4/ab918ce636a35fb974d13d666dcbe03969592aeca6c3ab3835acff01f79c/frozenlist-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9", size = 276157, upload-time = "2024-10-23T09:47:37.522Z" }, - { url = "https://files.pythonhosted.org/packages/c0/29/3b7a0bbbbe5a34833ba26f686aabfe982924adbdcafdc294a7a129c31688/frozenlist-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03", size = 264642, upload-time = "2024-10-23T09:47:38.75Z" }, - { url = "https://files.pythonhosted.org/packages/ab/42/0595b3dbffc2e82d7fe658c12d5a5bafcd7516c6bf2d1d1feb5387caa9c1/frozenlist-1.5.0-cp313-cp313-win32.whl", hash = "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c", size = 44914, upload-time = "2024-10-23T09:47:40.145Z" }, - { url = "https://files.pythonhosted.org/packages/17/c4/b7db1206a3fea44bf3b838ca61deb6f74424a8a5db1dd53ecb21da669be6/frozenlist-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28", size = 51167, upload-time = "2024-10-23T09:47:41.812Z" }, - { url = "https://files.pythonhosted.org/packages/c6/c8/a5be5b7550c10858fcf9b0ea054baccab474da77d37f1e828ce043a3a5d4/frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3", size = 11901, upload-time = "2024-10-23T09:48:28.851Z" }, +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/b1/b64018016eeb087db503b038296fd782586432b9c077fc5c7839e9cb6ef6/frozenlist-1.7.0.tar.gz", hash = "sha256:2e310d81923c2437ea8670467121cc3e9b0f76d3043cc1d2331d56c7fb7a3a8f", size = 45078, upload-time = "2025-06-09T23:02:35.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/7e/803dde33760128acd393a27eb002f2020ddb8d99d30a44bfbaab31c5f08a/frozenlist-1.7.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:aa51e147a66b2d74de1e6e2cf5921890de6b0f4820b257465101d7f37b49fb5a", size = 82251, upload-time = "2025-06-09T23:00:16.279Z" }, + { url = "https://files.pythonhosted.org/packages/75/a9/9c2c5760b6ba45eae11334db454c189d43d34a4c0b489feb2175e5e64277/frozenlist-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9b35db7ce1cd71d36ba24f80f0c9e7cff73a28d7a74e91fe83e23d27c7828750", size = 48183, upload-time = "2025-06-09T23:00:17.698Z" }, + { url = "https://files.pythonhosted.org/packages/47/be/4038e2d869f8a2da165f35a6befb9158c259819be22eeaf9c9a8f6a87771/frozenlist-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34a69a85e34ff37791e94542065c8416c1afbf820b68f720452f636d5fb990cd", size = 47107, upload-time = "2025-06-09T23:00:18.952Z" }, + { url = "https://files.pythonhosted.org/packages/79/26/85314b8a83187c76a37183ceed886381a5f992975786f883472fcb6dc5f2/frozenlist-1.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a646531fa8d82c87fe4bb2e596f23173caec9185bfbca5d583b4ccfb95183e2", size = 237333, upload-time = "2025-06-09T23:00:20.275Z" }, + { url = "https://files.pythonhosted.org/packages/1f/fd/e5b64f7d2c92a41639ffb2ad44a6a82f347787abc0c7df5f49057cf11770/frozenlist-1.7.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:79b2ffbba483f4ed36a0f236ccb85fbb16e670c9238313709638167670ba235f", size = 231724, upload-time = "2025-06-09T23:00:21.705Z" }, + { url = "https://files.pythonhosted.org/packages/20/fb/03395c0a43a5976af4bf7534759d214405fbbb4c114683f434dfdd3128ef/frozenlist-1.7.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a26f205c9ca5829cbf82bb2a84b5c36f7184c4316617d7ef1b271a56720d6b30", size = 245842, upload-time = "2025-06-09T23:00:23.148Z" }, + { url = "https://files.pythonhosted.org/packages/d0/15/c01c8e1dffdac5d9803507d824f27aed2ba76b6ed0026fab4d9866e82f1f/frozenlist-1.7.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bcacfad3185a623fa11ea0e0634aac7b691aa925d50a440f39b458e41c561d98", size = 239767, upload-time = "2025-06-09T23:00:25.103Z" }, + { url = "https://files.pythonhosted.org/packages/14/99/3f4c6fe882c1f5514b6848aa0a69b20cb5e5d8e8f51a339d48c0e9305ed0/frozenlist-1.7.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72c1b0fe8fe451b34f12dce46445ddf14bd2a5bcad7e324987194dc8e3a74c86", size = 224130, upload-time = "2025-06-09T23:00:27.061Z" }, + { url = "https://files.pythonhosted.org/packages/4d/83/220a374bd7b2aeba9d0725130665afe11de347d95c3620b9b82cc2fcab97/frozenlist-1.7.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61d1a5baeaac6c0798ff6edfaeaa00e0e412d49946c53fae8d4b8e8b3566c4ae", size = 235301, upload-time = "2025-06-09T23:00:29.02Z" }, + { url = "https://files.pythonhosted.org/packages/03/3c/3e3390d75334a063181625343e8daab61b77e1b8214802cc4e8a1bb678fc/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7edf5c043c062462f09b6820de9854bf28cc6cc5b6714b383149745e287181a8", size = 234606, upload-time = "2025-06-09T23:00:30.514Z" }, + { url = "https://files.pythonhosted.org/packages/23/1e/58232c19608b7a549d72d9903005e2d82488f12554a32de2d5fb59b9b1ba/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:d50ac7627b3a1bd2dcef6f9da89a772694ec04d9a61b66cf87f7d9446b4a0c31", size = 248372, upload-time = "2025-06-09T23:00:31.966Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a4/e4a567e01702a88a74ce8a324691e62a629bf47d4f8607f24bf1c7216e7f/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ce48b2fece5aeb45265bb7a58259f45027db0abff478e3077e12b05b17fb9da7", size = 229860, upload-time = "2025-06-09T23:00:33.375Z" }, + { url = "https://files.pythonhosted.org/packages/73/a6/63b3374f7d22268b41a9db73d68a8233afa30ed164c46107b33c4d18ecdd/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:fe2365ae915a1fafd982c146754e1de6ab3478def8a59c86e1f7242d794f97d5", size = 245893, upload-time = "2025-06-09T23:00:35.002Z" }, + { url = "https://files.pythonhosted.org/packages/6d/eb/d18b3f6e64799a79673c4ba0b45e4cfbe49c240edfd03a68be20002eaeaa/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:45a6f2fdbd10e074e8814eb98b05292f27bad7d1883afbe009d96abdcf3bc898", size = 246323, upload-time = "2025-06-09T23:00:36.468Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f5/720f3812e3d06cd89a1d5db9ff6450088b8f5c449dae8ffb2971a44da506/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:21884e23cffabb157a9dd7e353779077bf5b8f9a58e9b262c6caad2ef5f80a56", size = 233149, upload-time = "2025-06-09T23:00:37.963Z" }, + { url = "https://files.pythonhosted.org/packages/69/68/03efbf545e217d5db8446acfd4c447c15b7c8cf4dbd4a58403111df9322d/frozenlist-1.7.0-cp311-cp311-win32.whl", hash = "sha256:284d233a8953d7b24f9159b8a3496fc1ddc00f4db99c324bd5fb5f22d8698ea7", size = 39565, upload-time = "2025-06-09T23:00:39.753Z" }, + { url = "https://files.pythonhosted.org/packages/58/17/fe61124c5c333ae87f09bb67186d65038834a47d974fc10a5fadb4cc5ae1/frozenlist-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:387cbfdcde2f2353f19c2f66bbb52406d06ed77519ac7ee21be0232147c2592d", size = 44019, upload-time = "2025-06-09T23:00:40.988Z" }, + { url = "https://files.pythonhosted.org/packages/ef/a2/c8131383f1e66adad5f6ecfcce383d584ca94055a34d683bbb24ac5f2f1c/frozenlist-1.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3dbf9952c4bb0e90e98aec1bd992b3318685005702656bc6f67c1a32b76787f2", size = 81424, upload-time = "2025-06-09T23:00:42.24Z" }, + { url = "https://files.pythonhosted.org/packages/4c/9d/02754159955088cb52567337d1113f945b9e444c4960771ea90eb73de8db/frozenlist-1.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1f5906d3359300b8a9bb194239491122e6cf1444c2efb88865426f170c262cdb", size = 47952, upload-time = "2025-06-09T23:00:43.481Z" }, + { url = "https://files.pythonhosted.org/packages/01/7a/0046ef1bd6699b40acd2067ed6d6670b4db2f425c56980fa21c982c2a9db/frozenlist-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3dabd5a8f84573c8d10d8859a50ea2dec01eea372031929871368c09fa103478", size = 46688, upload-time = "2025-06-09T23:00:44.793Z" }, + { url = "https://files.pythonhosted.org/packages/d6/a2/a910bafe29c86997363fb4c02069df4ff0b5bc39d33c5198b4e9dd42d8f8/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa57daa5917f1738064f302bf2626281a1cb01920c32f711fbc7bc36111058a8", size = 243084, upload-time = "2025-06-09T23:00:46.125Z" }, + { url = "https://files.pythonhosted.org/packages/64/3e/5036af9d5031374c64c387469bfcc3af537fc0f5b1187d83a1cf6fab1639/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c193dda2b6d49f4c4398962810fa7d7c78f032bf45572b3e04dd5249dff27e08", size = 233524, upload-time = "2025-06-09T23:00:47.73Z" }, + { url = "https://files.pythonhosted.org/packages/06/39/6a17b7c107a2887e781a48ecf20ad20f1c39d94b2a548c83615b5b879f28/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe2b675cf0aaa6d61bf8fbffd3c274b3c9b7b1623beb3809df8a81399a4a9c4", size = 248493, upload-time = "2025-06-09T23:00:49.742Z" }, + { url = "https://files.pythonhosted.org/packages/be/00/711d1337c7327d88c44d91dd0f556a1c47fb99afc060ae0ef66b4d24793d/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8fc5d5cda37f62b262405cf9652cf0856839c4be8ee41be0afe8858f17f4c94b", size = 244116, upload-time = "2025-06-09T23:00:51.352Z" }, + { url = "https://files.pythonhosted.org/packages/24/fe/74e6ec0639c115df13d5850e75722750adabdc7de24e37e05a40527ca539/frozenlist-1.7.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d5ce521d1dd7d620198829b87ea002956e4319002ef0bc8d3e6d045cb4646e", size = 224557, upload-time = "2025-06-09T23:00:52.855Z" }, + { url = "https://files.pythonhosted.org/packages/8d/db/48421f62a6f77c553575201e89048e97198046b793f4a089c79a6e3268bd/frozenlist-1.7.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:488d0a7d6a0008ca0db273c542098a0fa9e7dfaa7e57f70acef43f32b3f69dca", size = 241820, upload-time = "2025-06-09T23:00:54.43Z" }, + { url = "https://files.pythonhosted.org/packages/1d/fa/cb4a76bea23047c8462976ea7b7a2bf53997a0ca171302deae9d6dd12096/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:15a7eaba63983d22c54d255b854e8108e7e5f3e89f647fc854bd77a237e767df", size = 236542, upload-time = "2025-06-09T23:00:56.409Z" }, + { url = "https://files.pythonhosted.org/packages/5d/32/476a4b5cfaa0ec94d3f808f193301debff2ea42288a099afe60757ef6282/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1eaa7e9c6d15df825bf255649e05bd8a74b04a4d2baa1ae46d9c2d00b2ca2cb5", size = 249350, upload-time = "2025-06-09T23:00:58.468Z" }, + { url = "https://files.pythonhosted.org/packages/8d/ba/9a28042f84a6bf8ea5dbc81cfff8eaef18d78b2a1ad9d51c7bc5b029ad16/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4389e06714cfa9d47ab87f784a7c5be91d3934cd6e9a7b85beef808297cc025", size = 225093, upload-time = "2025-06-09T23:01:00.015Z" }, + { url = "https://files.pythonhosted.org/packages/bc/29/3a32959e68f9cf000b04e79ba574527c17e8842e38c91d68214a37455786/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:73bd45e1488c40b63fe5a7df892baf9e2a4d4bb6409a2b3b78ac1c6236178e01", size = 245482, upload-time = "2025-06-09T23:01:01.474Z" }, + { url = "https://files.pythonhosted.org/packages/80/e8/edf2f9e00da553f07f5fa165325cfc302dead715cab6ac8336a5f3d0adc2/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:99886d98e1643269760e5fe0df31e5ae7050788dd288947f7f007209b8c33f08", size = 249590, upload-time = "2025-06-09T23:01:02.961Z" }, + { url = "https://files.pythonhosted.org/packages/1c/80/9a0eb48b944050f94cc51ee1c413eb14a39543cc4f760ed12657a5a3c45a/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:290a172aae5a4c278c6da8a96222e6337744cd9c77313efe33d5670b9f65fc43", size = 237785, upload-time = "2025-06-09T23:01:05.095Z" }, + { url = "https://files.pythonhosted.org/packages/f3/74/87601e0fb0369b7a2baf404ea921769c53b7ae00dee7dcfe5162c8c6dbf0/frozenlist-1.7.0-cp312-cp312-win32.whl", hash = "sha256:426c7bc70e07cfebc178bc4c2bf2d861d720c4fff172181eeb4a4c41d4ca2ad3", size = 39487, upload-time = "2025-06-09T23:01:06.54Z" }, + { url = "https://files.pythonhosted.org/packages/0b/15/c026e9a9fc17585a9d461f65d8593d281fedf55fbf7eb53f16c6df2392f9/frozenlist-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:563b72efe5da92e02eb68c59cb37205457c977aa7a449ed1b37e6939e5c47c6a", size = 43874, upload-time = "2025-06-09T23:01:07.752Z" }, + { url = "https://files.pythonhosted.org/packages/24/90/6b2cebdabdbd50367273c20ff6b57a3dfa89bd0762de02c3a1eb42cb6462/frozenlist-1.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee80eeda5e2a4e660651370ebffd1286542b67e268aa1ac8d6dbe973120ef7ee", size = 79791, upload-time = "2025-06-09T23:01:09.368Z" }, + { url = "https://files.pythonhosted.org/packages/83/2e/5b70b6a3325363293fe5fc3ae74cdcbc3e996c2a11dde2fd9f1fb0776d19/frozenlist-1.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d1a81c85417b914139e3a9b995d4a1c84559afc839a93cf2cb7f15e6e5f6ed2d", size = 47165, upload-time = "2025-06-09T23:01:10.653Z" }, + { url = "https://files.pythonhosted.org/packages/f4/25/a0895c99270ca6966110f4ad98e87e5662eab416a17e7fd53c364bf8b954/frozenlist-1.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cbb65198a9132ebc334f237d7b0df163e4de83fb4f2bdfe46c1e654bdb0c5d43", size = 45881, upload-time = "2025-06-09T23:01:12.296Z" }, + { url = "https://files.pythonhosted.org/packages/19/7c/71bb0bbe0832793c601fff68cd0cf6143753d0c667f9aec93d3c323f4b55/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dab46c723eeb2c255a64f9dc05b8dd601fde66d6b19cdb82b2e09cc6ff8d8b5d", size = 232409, upload-time = "2025-06-09T23:01:13.641Z" }, + { url = "https://files.pythonhosted.org/packages/c0/45/ed2798718910fe6eb3ba574082aaceff4528e6323f9a8570be0f7028d8e9/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6aeac207a759d0dedd2e40745575ae32ab30926ff4fa49b1635def65806fddee", size = 225132, upload-time = "2025-06-09T23:01:15.264Z" }, + { url = "https://files.pythonhosted.org/packages/ba/e2/8417ae0f8eacb1d071d4950f32f229aa6bf68ab69aab797b72a07ea68d4f/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bd8c4e58ad14b4fa7802b8be49d47993182fdd4023393899632c88fd8cd994eb", size = 237638, upload-time = "2025-06-09T23:01:16.752Z" }, + { url = "https://files.pythonhosted.org/packages/f8/b7/2ace5450ce85f2af05a871b8c8719b341294775a0a6c5585d5e6170f2ce7/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04fb24d104f425da3540ed83cbfc31388a586a7696142004c577fa61c6298c3f", size = 233539, upload-time = "2025-06-09T23:01:18.202Z" }, + { url = "https://files.pythonhosted.org/packages/46/b9/6989292c5539553dba63f3c83dc4598186ab2888f67c0dc1d917e6887db6/frozenlist-1.7.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a5c505156368e4ea6b53b5ac23c92d7edc864537ff911d2fb24c140bb175e60", size = 215646, upload-time = "2025-06-09T23:01:19.649Z" }, + { url = "https://files.pythonhosted.org/packages/72/31/bc8c5c99c7818293458fe745dab4fd5730ff49697ccc82b554eb69f16a24/frozenlist-1.7.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bd7eb96a675f18aa5c553eb7ddc24a43c8c18f22e1f9925528128c052cdbe00", size = 232233, upload-time = "2025-06-09T23:01:21.175Z" }, + { url = "https://files.pythonhosted.org/packages/59/52/460db4d7ba0811b9ccb85af996019f5d70831f2f5f255f7cc61f86199795/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:05579bf020096fe05a764f1f84cd104a12f78eaab68842d036772dc6d4870b4b", size = 227996, upload-time = "2025-06-09T23:01:23.098Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c9/f4b39e904c03927b7ecf891804fd3b4df3db29b9e487c6418e37988d6e9d/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:376b6222d114e97eeec13d46c486facd41d4f43bab626b7c3f6a8b4e81a5192c", size = 242280, upload-time = "2025-06-09T23:01:24.808Z" }, + { url = "https://files.pythonhosted.org/packages/b8/33/3f8d6ced42f162d743e3517781566b8481322be321b486d9d262adf70bfb/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0aa7e176ebe115379b5b1c95b4096fb1c17cce0847402e227e712c27bdb5a949", size = 217717, upload-time = "2025-06-09T23:01:26.28Z" }, + { url = "https://files.pythonhosted.org/packages/3e/e8/ad683e75da6ccef50d0ab0c2b2324b32f84fc88ceee778ed79b8e2d2fe2e/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3fbba20e662b9c2130dc771e332a99eff5da078b2b2648153a40669a6d0e36ca", size = 236644, upload-time = "2025-06-09T23:01:27.887Z" }, + { url = "https://files.pythonhosted.org/packages/b2/14/8d19ccdd3799310722195a72ac94ddc677541fb4bef4091d8e7775752360/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f3f4410a0a601d349dd406b5713fec59b4cee7e71678d5b17edda7f4655a940b", size = 238879, upload-time = "2025-06-09T23:01:29.524Z" }, + { url = "https://files.pythonhosted.org/packages/ce/13/c12bf657494c2fd1079a48b2db49fa4196325909249a52d8f09bc9123fd7/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cdfaaec6a2f9327bf43c933c0319a7c429058e8537c508964a133dffee412e", size = 232502, upload-time = "2025-06-09T23:01:31.287Z" }, + { url = "https://files.pythonhosted.org/packages/d7/8b/e7f9dfde869825489382bc0d512c15e96d3964180c9499efcec72e85db7e/frozenlist-1.7.0-cp313-cp313-win32.whl", hash = "sha256:5fc4df05a6591c7768459caba1b342d9ec23fa16195e744939ba5914596ae3e1", size = 39169, upload-time = "2025-06-09T23:01:35.503Z" }, + { url = "https://files.pythonhosted.org/packages/35/89/a487a98d94205d85745080a37860ff5744b9820a2c9acbcdd9440bfddf98/frozenlist-1.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:52109052b9791a3e6b5d1b65f4b909703984b770694d3eb64fad124c835d7cba", size = 43219, upload-time = "2025-06-09T23:01:36.784Z" }, + { url = "https://files.pythonhosted.org/packages/56/d5/5c4cf2319a49eddd9dd7145e66c4866bdc6f3dbc67ca3d59685149c11e0d/frozenlist-1.7.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a6f86e4193bb0e235ef6ce3dde5cbabed887e0b11f516ce8a0f4d3b33078ec2d", size = 84345, upload-time = "2025-06-09T23:01:38.295Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7d/ec2c1e1dc16b85bc9d526009961953df9cec8481b6886debb36ec9107799/frozenlist-1.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:82d664628865abeb32d90ae497fb93df398a69bb3434463d172b80fc25b0dd7d", size = 48880, upload-time = "2025-06-09T23:01:39.887Z" }, + { url = "https://files.pythonhosted.org/packages/69/86/f9596807b03de126e11e7d42ac91e3d0b19a6599c714a1989a4e85eeefc4/frozenlist-1.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:912a7e8375a1c9a68325a902f3953191b7b292aa3c3fb0d71a216221deca460b", size = 48498, upload-time = "2025-06-09T23:01:41.318Z" }, + { url = "https://files.pythonhosted.org/packages/5e/cb/df6de220f5036001005f2d726b789b2c0b65f2363b104bbc16f5be8084f8/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9537c2777167488d539bc5de2ad262efc44388230e5118868e172dd4a552b146", size = 292296, upload-time = "2025-06-09T23:01:42.685Z" }, + { url = "https://files.pythonhosted.org/packages/83/1f/de84c642f17c8f851a2905cee2dae401e5e0daca9b5ef121e120e19aa825/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f34560fb1b4c3e30ba35fa9a13894ba39e5acfc5f60f57d8accde65f46cc5e74", size = 273103, upload-time = "2025-06-09T23:01:44.166Z" }, + { url = "https://files.pythonhosted.org/packages/88/3c/c840bfa474ba3fa13c772b93070893c6e9d5c0350885760376cbe3b6c1b3/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:acd03d224b0175f5a850edc104ac19040d35419eddad04e7cf2d5986d98427f1", size = 292869, upload-time = "2025-06-09T23:01:45.681Z" }, + { url = "https://files.pythonhosted.org/packages/a6/1c/3efa6e7d5a39a1d5ef0abeb51c48fb657765794a46cf124e5aca2c7a592c/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2038310bc582f3d6a09b3816ab01737d60bf7b1ec70f5356b09e84fb7408ab1", size = 291467, upload-time = "2025-06-09T23:01:47.234Z" }, + { url = "https://files.pythonhosted.org/packages/4f/00/d5c5e09d4922c395e2f2f6b79b9a20dab4b67daaf78ab92e7729341f61f6/frozenlist-1.7.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8c05e4c8e5f36e5e088caa1bf78a687528f83c043706640a92cb76cd6999384", size = 266028, upload-time = "2025-06-09T23:01:48.819Z" }, + { url = "https://files.pythonhosted.org/packages/4e/27/72765be905619dfde25a7f33813ac0341eb6b076abede17a2e3fbfade0cb/frozenlist-1.7.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:765bb588c86e47d0b68f23c1bee323d4b703218037765dcf3f25c838c6fecceb", size = 284294, upload-time = "2025-06-09T23:01:50.394Z" }, + { url = "https://files.pythonhosted.org/packages/88/67/c94103a23001b17808eb7dd1200c156bb69fb68e63fcf0693dde4cd6228c/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:32dc2e08c67d86d0969714dd484fd60ff08ff81d1a1e40a77dd34a387e6ebc0c", size = 281898, upload-time = "2025-06-09T23:01:52.234Z" }, + { url = "https://files.pythonhosted.org/packages/42/34/a3e2c00c00f9e2a9db5653bca3fec306349e71aff14ae45ecc6d0951dd24/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:c0303e597eb5a5321b4de9c68e9845ac8f290d2ab3f3e2c864437d3c5a30cd65", size = 290465, upload-time = "2025-06-09T23:01:53.788Z" }, + { url = "https://files.pythonhosted.org/packages/bb/73/f89b7fbce8b0b0c095d82b008afd0590f71ccb3dee6eee41791cf8cd25fd/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:a47f2abb4e29b3a8d0b530f7c3598badc6b134562b1a5caee867f7c62fee51e3", size = 266385, upload-time = "2025-06-09T23:01:55.769Z" }, + { url = "https://files.pythonhosted.org/packages/cd/45/e365fdb554159462ca12df54bc59bfa7a9a273ecc21e99e72e597564d1ae/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:3d688126c242a6fabbd92e02633414d40f50bb6002fa4cf995a1d18051525657", size = 288771, upload-time = "2025-06-09T23:01:57.4Z" }, + { url = "https://files.pythonhosted.org/packages/00/11/47b6117002a0e904f004d70ec5194fe9144f117c33c851e3d51c765962d0/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:4e7e9652b3d367c7bd449a727dc79d5043f48b88d0cbfd4f9f1060cf2b414104", size = 288206, upload-time = "2025-06-09T23:01:58.936Z" }, + { url = "https://files.pythonhosted.org/packages/40/37/5f9f3c3fd7f7746082ec67bcdc204db72dad081f4f83a503d33220a92973/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1a85e345b4c43db8b842cab1feb41be5cc0b10a1830e6295b69d7310f99becaf", size = 282620, upload-time = "2025-06-09T23:02:00.493Z" }, + { url = "https://files.pythonhosted.org/packages/0b/31/8fbc5af2d183bff20f21aa743b4088eac4445d2bb1cdece449ae80e4e2d1/frozenlist-1.7.0-cp313-cp313t-win32.whl", hash = "sha256:3a14027124ddb70dfcee5148979998066897e79f89f64b13328595c4bdf77c81", size = 43059, upload-time = "2025-06-09T23:02:02.072Z" }, + { url = "https://files.pythonhosted.org/packages/bb/ed/41956f52105b8dbc26e457c5705340c67c8cc2b79f394b79bffc09d0e938/frozenlist-1.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3bf8010d71d4507775f658e9823210b7427be36625b387221642725b515dcf3e", size = 47516, upload-time = "2025-06-09T23:02:03.779Z" }, + { url = "https://files.pythonhosted.org/packages/ee/45/b82e3c16be2182bff01179db177fe144d58b5dc787a7d4492c6ed8b9317f/frozenlist-1.7.0-py3-none-any.whl", hash = "sha256:9a5af342e34f7e97caf8c995864c7a396418ae2859cc6fdf1b1073020d516a7e", size = 13106, upload-time = "2025-06-09T23:02:34.204Z" }, ] [[package]] name = "h11" -version = "0.14.0" +version = "0.16.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418, upload-time = "2022-09-25T15:40:01.519Z" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259, upload-time = "2022-09-25T15:39:59.68Z" }, + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, ] [[package]] name = "hishel" -version = "0.1.2" +version = "0.1.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "httpx" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a8/3d/f754187b9703a8db211e80cef0fc4e27e0ab2edbeacccf1257c096dade48/hishel-0.1.2.tar.gz", hash = "sha256:6643450bfb1cfa2ecd6002769f6f5069d0d048c9c1f1e29a98a48302d5875092", size = 36240, upload-time = "2025-04-04T21:15:57.213Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3e/b5/c063cd3eab8154ddd61deb07b50497cf24010727eaeec4d78ed1a6262986/hishel-0.1.3.tar.gz", hash = "sha256:db3e07429cb739dcda851ff9b35b0f3e7589e21b90ee167df54336ac608b6ec3", size = 36649, upload-time = "2025-07-06T14:19:23.528Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/23/a33edb262bb7732a528595b008c7b3640bea4be7e7417cbaff8f978ead72/hishel-0.1.2-py3-none-any.whl", hash = "sha256:802b4e446017f4867efdb26d3417670991ad1b4826d24331110871fe8957b5d0", size = 42237, upload-time = "2025-04-04T21:15:55.781Z" }, + { url = "https://files.pythonhosted.org/packages/29/a5/bf3553b44a36e1c5d2aa0cd15478e02b466dcaecdc2983b07068999d2675/hishel-0.1.3-py3-none-any.whl", hash = "sha256:bae3ba9970ffc56f90014aea2b3019158fb0a5b0b635a56f414ba6b96651966e", size = 42518, upload-time = "2025-07-06T14:19:22.336Z" }, ] [[package]] name = "httpcore" -version = "1.0.7" +version = "1.0.9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, { name = "h11" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6a/41/d7d0a89eb493922c37d343b607bc1b5da7f5be7e383740b4753ad8943e90/httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", size = 85196, upload-time = "2024-11-15T12:30:47.531Z" } +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd", size = 78551, upload-time = "2024-11-15T12:30:45.782Z" }, + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, ] [[package]] @@ -825,61 +882,74 @@ wheels = [ [[package]] name = "jinja2" -version = "3.1.5" +version = "3.1.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/af/92/b3130cbbf5591acf9ade8708c365f3238046ac7cb8ccba6e81abccb0ccff/jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", size = 244674, upload-time = "2024-12-21T18:30:22.828Z" } +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb", size = 134596, upload-time = "2024-12-21T18:30:19.133Z" }, + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, ] [[package]] name = "jiter" -version = "0.8.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f8/70/90bc7bd3932e651486861df5c8ffea4ca7c77d28e8532ddefe2abc561a53/jiter-0.8.2.tar.gz", hash = "sha256:cd73d3e740666d0e639f678adb176fad25c1bcbdae88d8d7b857e1783bb4212d", size = 163007, upload-time = "2024-12-09T18:11:08.649Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/b0/c1a7caa7f9dc5f1f6cfa08722867790fe2d3645d6e7170ca280e6e52d163/jiter-0.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2dd61c5afc88a4fda7d8b2cf03ae5947c6ac7516d32b7a15bf4b49569a5c076b", size = 303666, upload-time = "2024-12-09T18:09:23.145Z" }, - { url = "https://files.pythonhosted.org/packages/f5/97/0468bc9eeae43079aaa5feb9267964e496bf13133d469cfdc135498f8dd0/jiter-0.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a6c710d657c8d1d2adbbb5c0b0c6bfcec28fd35bd6b5f016395f9ac43e878a15", size = 311934, upload-time = "2024-12-09T18:09:25.098Z" }, - { url = "https://files.pythonhosted.org/packages/e5/69/64058e18263d9a5f1e10f90c436853616d5f047d997c37c7b2df11b085ec/jiter-0.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9584de0cd306072635fe4b89742bf26feae858a0683b399ad0c2509011b9dc0", size = 335506, upload-time = "2024-12-09T18:09:26.407Z" }, - { url = "https://files.pythonhosted.org/packages/9d/14/b747f9a77b8c0542141d77ca1e2a7523e854754af2c339ac89a8b66527d6/jiter-0.8.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5a90a923338531b7970abb063cfc087eebae6ef8ec8139762007188f6bc69a9f", size = 355849, upload-time = "2024-12-09T18:09:27.686Z" }, - { url = "https://files.pythonhosted.org/packages/53/e2/98a08161db7cc9d0e39bc385415890928ff09709034982f48eccfca40733/jiter-0.8.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21974d246ed0181558087cd9f76e84e8321091ebfb3a93d4c341479a736f099", size = 381700, upload-time = "2024-12-09T18:09:28.989Z" }, - { url = "https://files.pythonhosted.org/packages/7a/38/1674672954d35bce3b1c9af99d5849f9256ac8f5b672e020ac7821581206/jiter-0.8.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32475a42b2ea7b344069dc1e81445cfc00b9d0e3ca837f0523072432332e9f74", size = 389710, upload-time = "2024-12-09T18:09:30.565Z" }, - { url = "https://files.pythonhosted.org/packages/f8/9b/92f9da9a9e107d019bcf883cd9125fa1690079f323f5a9d5c6986eeec3c0/jiter-0.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b9931fd36ee513c26b5bf08c940b0ac875de175341cbdd4fa3be109f0492586", size = 345553, upload-time = "2024-12-09T18:09:32.735Z" }, - { url = "https://files.pythonhosted.org/packages/44/a6/6d030003394e9659cd0d7136bbeabd82e869849ceccddc34d40abbbbb269/jiter-0.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0820f4a3a59ddced7fce696d86a096d5cc48d32a4183483a17671a61edfddc", size = 376388, upload-time = "2024-12-09T18:09:34.723Z" }, - { url = "https://files.pythonhosted.org/packages/ad/8d/87b09e648e4aca5f9af89e3ab3cfb93db2d1e633b2f2931ede8dabd9b19a/jiter-0.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8ffc86ae5e3e6a93765d49d1ab47b6075a9c978a2b3b80f0f32628f39caa0c88", size = 511226, upload-time = "2024-12-09T18:09:36.13Z" }, - { url = "https://files.pythonhosted.org/packages/77/95/8008ebe4cdc82eac1c97864a8042ca7e383ed67e0ec17bfd03797045c727/jiter-0.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5127dc1abd809431172bc3fbe8168d6b90556a30bb10acd5ded41c3cfd6f43b6", size = 504134, upload-time = "2024-12-09T18:09:37.581Z" }, - { url = "https://files.pythonhosted.org/packages/26/0d/3056a74de13e8b2562e4d526de6dac2f65d91ace63a8234deb9284a1d24d/jiter-0.8.2-cp311-cp311-win32.whl", hash = "sha256:66227a2c7b575720c1871c8800d3a0122bb8ee94edb43a5685aa9aceb2782d44", size = 203103, upload-time = "2024-12-09T18:09:38.881Z" }, - { url = "https://files.pythonhosted.org/packages/4e/1e/7f96b798f356e531ffc0f53dd2f37185fac60fae4d6c612bbbd4639b90aa/jiter-0.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:cde031d8413842a1e7501e9129b8e676e62a657f8ec8166e18a70d94d4682855", size = 206717, upload-time = "2024-12-09T18:09:41.064Z" }, - { url = "https://files.pythonhosted.org/packages/a1/17/c8747af8ea4e045f57d6cfd6fc180752cab9bc3de0e8a0c9ca4e8af333b1/jiter-0.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e6ec2be506e7d6f9527dae9ff4b7f54e68ea44a0ef6b098256ddf895218a2f8f", size = 302027, upload-time = "2024-12-09T18:09:43.11Z" }, - { url = "https://files.pythonhosted.org/packages/3c/c1/6da849640cd35a41e91085723b76acc818d4b7d92b0b6e5111736ce1dd10/jiter-0.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76e324da7b5da060287c54f2fabd3db5f76468006c811831f051942bf68c9d44", size = 310326, upload-time = "2024-12-09T18:09:44.426Z" }, - { url = "https://files.pythonhosted.org/packages/06/99/a2bf660d8ccffee9ad7ed46b4f860d2108a148d0ea36043fd16f4dc37e94/jiter-0.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:180a8aea058f7535d1c84183c0362c710f4750bef66630c05f40c93c2b152a0f", size = 334242, upload-time = "2024-12-09T18:09:45.915Z" }, - { url = "https://files.pythonhosted.org/packages/a7/5f/cea1c17864828731f11427b9d1ab7f24764dbd9aaf4648a7f851164d2718/jiter-0.8.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:025337859077b41548bdcbabe38698bcd93cfe10b06ff66617a48ff92c9aec60", size = 356654, upload-time = "2024-12-09T18:09:47.619Z" }, - { url = "https://files.pythonhosted.org/packages/e9/13/62774b7e5e7f5d5043efe1d0f94ead66e6d0f894ae010adb56b3f788de71/jiter-0.8.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecff0dc14f409599bbcafa7e470c00b80f17abc14d1405d38ab02e4b42e55b57", size = 379967, upload-time = "2024-12-09T18:09:49.987Z" }, - { url = "https://files.pythonhosted.org/packages/ec/fb/096b34c553bb0bd3f2289d5013dcad6074948b8d55212aa13a10d44c5326/jiter-0.8.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffd9fee7d0775ebaba131f7ca2e2d83839a62ad65e8e02fe2bd8fc975cedeb9e", size = 389252, upload-time = "2024-12-09T18:09:51.329Z" }, - { url = "https://files.pythonhosted.org/packages/17/61/beea645c0bf398ced8b199e377b61eb999d8e46e053bb285c91c3d3eaab0/jiter-0.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14601dcac4889e0a1c75ccf6a0e4baf70dbc75041e51bcf8d0e9274519df6887", size = 345490, upload-time = "2024-12-09T18:09:52.646Z" }, - { url = "https://files.pythonhosted.org/packages/d5/df/834aa17ad5dcc3cf0118821da0a0cf1589ea7db9832589278553640366bc/jiter-0.8.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:92249669925bc1c54fcd2ec73f70f2c1d6a817928480ee1c65af5f6b81cdf12d", size = 376991, upload-time = "2024-12-09T18:09:53.972Z" }, - { url = "https://files.pythonhosted.org/packages/67/80/87d140399d382fb4ea5b3d56e7ecaa4efdca17cd7411ff904c1517855314/jiter-0.8.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e725edd0929fa79f8349ab4ec7f81c714df51dc4e991539a578e5018fa4a7152", size = 510822, upload-time = "2024-12-09T18:09:55.439Z" }, - { url = "https://files.pythonhosted.org/packages/5c/37/3394bb47bac1ad2cb0465601f86828a0518d07828a650722e55268cdb7e6/jiter-0.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bf55846c7b7a680eebaf9c3c48d630e1bf51bdf76c68a5f654b8524335b0ad29", size = 503730, upload-time = "2024-12-09T18:09:59.494Z" }, - { url = "https://files.pythonhosted.org/packages/f9/e2/253fc1fa59103bb4e3aa0665d6ceb1818df1cd7bf3eb492c4dad229b1cd4/jiter-0.8.2-cp312-cp312-win32.whl", hash = "sha256:7efe4853ecd3d6110301665a5178b9856be7e2a9485f49d91aa4d737ad2ae49e", size = 203375, upload-time = "2024-12-09T18:10:00.814Z" }, - { url = "https://files.pythonhosted.org/packages/41/69/6d4bbe66b3b3b4507e47aa1dd5d075919ad242b4b1115b3f80eecd443687/jiter-0.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:83c0efd80b29695058d0fd2fa8a556490dbce9804eac3e281f373bbc99045f6c", size = 204740, upload-time = "2024-12-09T18:10:02.146Z" }, - { url = "https://files.pythonhosted.org/packages/6c/b0/bfa1f6f2c956b948802ef5a021281978bf53b7a6ca54bb126fd88a5d014e/jiter-0.8.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ca1f08b8e43dc3bd0594c992fb1fd2f7ce87f7bf0d44358198d6da8034afdf84", size = 301190, upload-time = "2024-12-09T18:10:03.463Z" }, - { url = "https://files.pythonhosted.org/packages/a4/8f/396ddb4e292b5ea57e45ade5dc48229556b9044bad29a3b4b2dddeaedd52/jiter-0.8.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5672a86d55416ccd214c778efccf3266b84f87b89063b582167d803246354be4", size = 309334, upload-time = "2024-12-09T18:10:05.774Z" }, - { url = "https://files.pythonhosted.org/packages/7f/68/805978f2f446fa6362ba0cc2e4489b945695940656edd844e110a61c98f8/jiter-0.8.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58dc9bc9767a1101f4e5e22db1b652161a225874d66f0e5cb8e2c7d1c438b587", size = 333918, upload-time = "2024-12-09T18:10:07.158Z" }, - { url = "https://files.pythonhosted.org/packages/b3/99/0f71f7be667c33403fa9706e5b50583ae5106d96fab997fa7e2f38ee8347/jiter-0.8.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:37b2998606d6dadbb5ccda959a33d6a5e853252d921fec1792fc902351bb4e2c", size = 356057, upload-time = "2024-12-09T18:10:09.341Z" }, - { url = "https://files.pythonhosted.org/packages/8d/50/a82796e421a22b699ee4d2ce527e5bcb29471a2351cbdc931819d941a167/jiter-0.8.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ab9a87f3784eb0e098f84a32670cfe4a79cb6512fd8f42ae3d0709f06405d18", size = 379790, upload-time = "2024-12-09T18:10:10.702Z" }, - { url = "https://files.pythonhosted.org/packages/3c/31/10fb012b00f6d83342ca9e2c9618869ab449f1aa78c8f1b2193a6b49647c/jiter-0.8.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:79aec8172b9e3c6d05fd4b219d5de1ac616bd8da934107325a6c0d0e866a21b6", size = 388285, upload-time = "2024-12-09T18:10:12.721Z" }, - { url = "https://files.pythonhosted.org/packages/c8/81/f15ebf7de57be488aa22944bf4274962aca8092e4f7817f92ffa50d3ee46/jiter-0.8.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:711e408732d4e9a0208008e5892c2966b485c783cd2d9a681f3eb147cf36c7ef", size = 344764, upload-time = "2024-12-09T18:10:14.075Z" }, - { url = "https://files.pythonhosted.org/packages/b3/e8/0cae550d72b48829ba653eb348cdc25f3f06f8a62363723702ec18e7be9c/jiter-0.8.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:653cf462db4e8c41995e33d865965e79641ef45369d8a11f54cd30888b7e6ff1", size = 376620, upload-time = "2024-12-09T18:10:15.487Z" }, - { url = "https://files.pythonhosted.org/packages/b8/50/e5478ff9d82534a944c03b63bc217c5f37019d4a34d288db0f079b13c10b/jiter-0.8.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:9c63eaef32b7bebac8ebebf4dabebdbc6769a09c127294db6babee38e9f405b9", size = 510402, upload-time = "2024-12-09T18:10:17.499Z" }, - { url = "https://files.pythonhosted.org/packages/8e/1e/3de48bbebbc8f7025bd454cedc8c62378c0e32dd483dece5f4a814a5cb55/jiter-0.8.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:eb21aaa9a200d0a80dacc7a81038d2e476ffe473ffdd9c91eb745d623561de05", size = 503018, upload-time = "2024-12-09T18:10:18.92Z" }, - { url = "https://files.pythonhosted.org/packages/d5/cd/d5a5501d72a11fe3e5fd65c78c884e5164eefe80077680533919be22d3a3/jiter-0.8.2-cp313-cp313-win32.whl", hash = "sha256:789361ed945d8d42850f919342a8665d2dc79e7e44ca1c97cc786966a21f627a", size = 203190, upload-time = "2024-12-09T18:10:20.801Z" }, - { url = "https://files.pythonhosted.org/packages/51/bf/e5ca301245ba951447e3ad677a02a64a8845b185de2603dabd83e1e4b9c6/jiter-0.8.2-cp313-cp313-win_amd64.whl", hash = "sha256:ab7f43235d71e03b941c1630f4b6e3055d46b6cb8728a17663eaac9d8e83a865", size = 203551, upload-time = "2024-12-09T18:10:22.822Z" }, - { url = "https://files.pythonhosted.org/packages/2f/3c/71a491952c37b87d127790dd7a0b1ebea0514c6b6ad30085b16bbe00aee6/jiter-0.8.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b426f72cd77da3fec300ed3bc990895e2dd6b49e3bfe6c438592a3ba660e41ca", size = 308347, upload-time = "2024-12-09T18:10:24.139Z" }, - { url = "https://files.pythonhosted.org/packages/a0/4c/c02408042e6a7605ec063daed138e07b982fdb98467deaaf1c90950cf2c6/jiter-0.8.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2dd880785088ff2ad21ffee205e58a8c1ddabc63612444ae41e5e4b321b39c0", size = 342875, upload-time = "2024-12-09T18:10:25.553Z" }, - { url = "https://files.pythonhosted.org/packages/91/61/c80ef80ed8a0a21158e289ef70dac01e351d929a1c30cb0f49be60772547/jiter-0.8.2-cp313-cp313t-win_amd64.whl", hash = "sha256:3ac9f578c46f22405ff7f8b1f5848fb753cc4b8377fbec8470a7dc3997ca7566", size = 202374, upload-time = "2024-12-09T18:10:26.958Z" }, +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/9d/ae7ddb4b8ab3fb1b51faf4deb36cb48a4fbbd7cb36bad6a5fca4741306f7/jiter-0.10.0.tar.gz", hash = "sha256:07a7142c38aacc85194391108dc91b5b57093c978a9932bd86a36862759d9500", size = 162759, upload-time = "2025-05-18T19:04:59.73Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/dd/6cefc6bd68b1c3c979cecfa7029ab582b57690a31cd2f346c4d0ce7951b6/jiter-0.10.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3bebe0c558e19902c96e99217e0b8e8b17d570906e72ed8a87170bc290b1e978", size = 317473, upload-time = "2025-05-18T19:03:25.942Z" }, + { url = "https://files.pythonhosted.org/packages/be/cf/fc33f5159ce132be1d8dd57251a1ec7a631c7df4bd11e1cd198308c6ae32/jiter-0.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:558cc7e44fd8e507a236bee6a02fa17199ba752874400a0ca6cd6e2196cdb7dc", size = 321971, upload-time = "2025-05-18T19:03:27.255Z" }, + { url = "https://files.pythonhosted.org/packages/68/a4/da3f150cf1d51f6c472616fb7650429c7ce053e0c962b41b68557fdf6379/jiter-0.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d613e4b379a07d7c8453c5712ce7014e86c6ac93d990a0b8e7377e18505e98d", size = 345574, upload-time = "2025-05-18T19:03:28.63Z" }, + { url = "https://files.pythonhosted.org/packages/84/34/6e8d412e60ff06b186040e77da5f83bc158e9735759fcae65b37d681f28b/jiter-0.10.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f62cf8ba0618eda841b9bf61797f21c5ebd15a7a1e19daab76e4e4b498d515b2", size = 371028, upload-time = "2025-05-18T19:03:30.292Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d9/9ee86173aae4576c35a2f50ae930d2ccb4c4c236f6cb9353267aa1d626b7/jiter-0.10.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:919d139cdfa8ae8945112398511cb7fca58a77382617d279556b344867a37e61", size = 491083, upload-time = "2025-05-18T19:03:31.654Z" }, + { url = "https://files.pythonhosted.org/packages/d9/2c/f955de55e74771493ac9e188b0f731524c6a995dffdcb8c255b89c6fb74b/jiter-0.10.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13ddbc6ae311175a3b03bd8994881bc4635c923754932918e18da841632349db", size = 388821, upload-time = "2025-05-18T19:03:33.184Z" }, + { url = "https://files.pythonhosted.org/packages/81/5a/0e73541b6edd3f4aada586c24e50626c7815c561a7ba337d6a7eb0a915b4/jiter-0.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c440ea003ad10927a30521a9062ce10b5479592e8a70da27f21eeb457b4a9c5", size = 352174, upload-time = "2025-05-18T19:03:34.965Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c0/61eeec33b8c75b31cae42be14d44f9e6fe3ac15a4e58010256ac3abf3638/jiter-0.10.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dc347c87944983481e138dea467c0551080c86b9d21de6ea9306efb12ca8f606", size = 391869, upload-time = "2025-05-18T19:03:36.436Z" }, + { url = "https://files.pythonhosted.org/packages/41/22/5beb5ee4ad4ef7d86f5ea5b4509f680a20706c4a7659e74344777efb7739/jiter-0.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:13252b58c1f4d8c5b63ab103c03d909e8e1e7842d302473f482915d95fefd605", size = 523741, upload-time = "2025-05-18T19:03:38.168Z" }, + { url = "https://files.pythonhosted.org/packages/ea/10/768e8818538e5817c637b0df52e54366ec4cebc3346108a4457ea7a98f32/jiter-0.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7d1bbf3c465de4a24ab12fb7766a0003f6f9bce48b8b6a886158c4d569452dc5", size = 514527, upload-time = "2025-05-18T19:03:39.577Z" }, + { url = "https://files.pythonhosted.org/packages/73/6d/29b7c2dc76ce93cbedabfd842fc9096d01a0550c52692dfc33d3cc889815/jiter-0.10.0-cp311-cp311-win32.whl", hash = "sha256:db16e4848b7e826edca4ccdd5b145939758dadf0dc06e7007ad0e9cfb5928ae7", size = 210765, upload-time = "2025-05-18T19:03:41.271Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c9/d394706deb4c660137caf13e33d05a031d734eb99c051142e039d8ceb794/jiter-0.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c9c1d5f10e18909e993f9641f12fe1c77b3e9b533ee94ffa970acc14ded3812", size = 209234, upload-time = "2025-05-18T19:03:42.918Z" }, + { url = "https://files.pythonhosted.org/packages/6d/b5/348b3313c58f5fbfb2194eb4d07e46a35748ba6e5b3b3046143f3040bafa/jiter-0.10.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1e274728e4a5345a6dde2d343c8da018b9d4bd4350f5a472fa91f66fda44911b", size = 312262, upload-time = "2025-05-18T19:03:44.637Z" }, + { url = "https://files.pythonhosted.org/packages/9c/4a/6a2397096162b21645162825f058d1709a02965606e537e3304b02742e9b/jiter-0.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7202ae396446c988cb2a5feb33a543ab2165b786ac97f53b59aafb803fef0744", size = 320124, upload-time = "2025-05-18T19:03:46.341Z" }, + { url = "https://files.pythonhosted.org/packages/2a/85/1ce02cade7516b726dd88f59a4ee46914bf79d1676d1228ef2002ed2f1c9/jiter-0.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23ba7722d6748b6920ed02a8f1726fb4b33e0fd2f3f621816a8b486c66410ab2", size = 345330, upload-time = "2025-05-18T19:03:47.596Z" }, + { url = "https://files.pythonhosted.org/packages/75/d0/bb6b4f209a77190ce10ea8d7e50bf3725fc16d3372d0a9f11985a2b23eff/jiter-0.10.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:371eab43c0a288537d30e1f0b193bc4eca90439fc08a022dd83e5e07500ed026", size = 369670, upload-time = "2025-05-18T19:03:49.334Z" }, + { url = "https://files.pythonhosted.org/packages/a0/f5/a61787da9b8847a601e6827fbc42ecb12be2c925ced3252c8ffcb56afcaf/jiter-0.10.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c675736059020365cebc845a820214765162728b51ab1e03a1b7b3abb70f74c", size = 489057, upload-time = "2025-05-18T19:03:50.66Z" }, + { url = "https://files.pythonhosted.org/packages/12/e4/6f906272810a7b21406c760a53aadbe52e99ee070fc5c0cb191e316de30b/jiter-0.10.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c5867d40ab716e4684858e4887489685968a47e3ba222e44cde6e4a2154f959", size = 389372, upload-time = "2025-05-18T19:03:51.98Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ba/77013b0b8ba904bf3762f11e0129b8928bff7f978a81838dfcc958ad5728/jiter-0.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395bb9a26111b60141757d874d27fdea01b17e8fac958b91c20128ba8f4acc8a", size = 352038, upload-time = "2025-05-18T19:03:53.703Z" }, + { url = "https://files.pythonhosted.org/packages/67/27/c62568e3ccb03368dbcc44a1ef3a423cb86778a4389e995125d3d1aaa0a4/jiter-0.10.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6842184aed5cdb07e0c7e20e5bdcfafe33515ee1741a6835353bb45fe5d1bd95", size = 391538, upload-time = "2025-05-18T19:03:55.046Z" }, + { url = "https://files.pythonhosted.org/packages/c0/72/0d6b7e31fc17a8fdce76164884edef0698ba556b8eb0af9546ae1a06b91d/jiter-0.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:62755d1bcea9876770d4df713d82606c8c1a3dca88ff39046b85a048566d56ea", size = 523557, upload-time = "2025-05-18T19:03:56.386Z" }, + { url = "https://files.pythonhosted.org/packages/2f/09/bc1661fbbcbeb6244bd2904ff3a06f340aa77a2b94e5a7373fd165960ea3/jiter-0.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533efbce2cacec78d5ba73a41756beff8431dfa1694b6346ce7af3a12c42202b", size = 514202, upload-time = "2025-05-18T19:03:57.675Z" }, + { url = "https://files.pythonhosted.org/packages/1b/84/5a5d5400e9d4d54b8004c9673bbe4403928a00d28529ff35b19e9d176b19/jiter-0.10.0-cp312-cp312-win32.whl", hash = "sha256:8be921f0cadd245e981b964dfbcd6fd4bc4e254cdc069490416dd7a2632ecc01", size = 211781, upload-time = "2025-05-18T19:03:59.025Z" }, + { url = "https://files.pythonhosted.org/packages/9b/52/7ec47455e26f2d6e5f2ea4951a0652c06e5b995c291f723973ae9e724a65/jiter-0.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:a7c7d785ae9dda68c2678532a5a1581347e9c15362ae9f6e68f3fdbfb64f2e49", size = 206176, upload-time = "2025-05-18T19:04:00.305Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b0/279597e7a270e8d22623fea6c5d4eeac328e7d95c236ed51a2b884c54f70/jiter-0.10.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e0588107ec8e11b6f5ef0e0d656fb2803ac6cf94a96b2b9fc675c0e3ab5e8644", size = 311617, upload-time = "2025-05-18T19:04:02.078Z" }, + { url = "https://files.pythonhosted.org/packages/91/e3/0916334936f356d605f54cc164af4060e3e7094364add445a3bc79335d46/jiter-0.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cafc4628b616dc32530c20ee53d71589816cf385dd9449633e910d596b1f5c8a", size = 318947, upload-time = "2025-05-18T19:04:03.347Z" }, + { url = "https://files.pythonhosted.org/packages/6a/8e/fd94e8c02d0e94539b7d669a7ebbd2776e51f329bb2c84d4385e8063a2ad/jiter-0.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:520ef6d981172693786a49ff5b09eda72a42e539f14788124a07530f785c3ad6", size = 344618, upload-time = "2025-05-18T19:04:04.709Z" }, + { url = "https://files.pythonhosted.org/packages/6f/b0/f9f0a2ec42c6e9c2e61c327824687f1e2415b767e1089c1d9135f43816bd/jiter-0.10.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:554dedfd05937f8fc45d17ebdf298fe7e0c77458232bcb73d9fbbf4c6455f5b3", size = 368829, upload-time = "2025-05-18T19:04:06.912Z" }, + { url = "https://files.pythonhosted.org/packages/e8/57/5bbcd5331910595ad53b9fd0c610392ac68692176f05ae48d6ce5c852967/jiter-0.10.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5bc299da7789deacf95f64052d97f75c16d4fc8c4c214a22bf8d859a4288a1c2", size = 491034, upload-time = "2025-05-18T19:04:08.222Z" }, + { url = "https://files.pythonhosted.org/packages/9b/be/c393df00e6e6e9e623a73551774449f2f23b6ec6a502a3297aeeece2c65a/jiter-0.10.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5161e201172de298a8a1baad95eb85db4fb90e902353b1f6a41d64ea64644e25", size = 388529, upload-time = "2025-05-18T19:04:09.566Z" }, + { url = "https://files.pythonhosted.org/packages/42/3e/df2235c54d365434c7f150b986a6e35f41ebdc2f95acea3036d99613025d/jiter-0.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e2227db6ba93cb3e2bf67c87e594adde0609f146344e8207e8730364db27041", size = 350671, upload-time = "2025-05-18T19:04:10.98Z" }, + { url = "https://files.pythonhosted.org/packages/c6/77/71b0b24cbcc28f55ab4dbfe029f9a5b73aeadaba677843fc6dc9ed2b1d0a/jiter-0.10.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15acb267ea5e2c64515574b06a8bf393fbfee6a50eb1673614aa45f4613c0cca", size = 390864, upload-time = "2025-05-18T19:04:12.722Z" }, + { url = "https://files.pythonhosted.org/packages/6a/d3/ef774b6969b9b6178e1d1e7a89a3bd37d241f3d3ec5f8deb37bbd203714a/jiter-0.10.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:901b92f2e2947dc6dfcb52fd624453862e16665ea909a08398dde19c0731b7f4", size = 522989, upload-time = "2025-05-18T19:04:14.261Z" }, + { url = "https://files.pythonhosted.org/packages/0c/41/9becdb1d8dd5d854142f45a9d71949ed7e87a8e312b0bede2de849388cb9/jiter-0.10.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d0cb9a125d5a3ec971a094a845eadde2db0de85b33c9f13eb94a0c63d463879e", size = 513495, upload-time = "2025-05-18T19:04:15.603Z" }, + { url = "https://files.pythonhosted.org/packages/9c/36/3468e5a18238bdedae7c4d19461265b5e9b8e288d3f86cd89d00cbb48686/jiter-0.10.0-cp313-cp313-win32.whl", hash = "sha256:48a403277ad1ee208fb930bdf91745e4d2d6e47253eedc96e2559d1e6527006d", size = 211289, upload-time = "2025-05-18T19:04:17.541Z" }, + { url = "https://files.pythonhosted.org/packages/7e/07/1c96b623128bcb913706e294adb5f768fb7baf8db5e1338ce7b4ee8c78ef/jiter-0.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:75f9eb72ecb640619c29bf714e78c9c46c9c4eaafd644bf78577ede459f330d4", size = 205074, upload-time = "2025-05-18T19:04:19.21Z" }, + { url = "https://files.pythonhosted.org/packages/54/46/caa2c1342655f57d8f0f2519774c6d67132205909c65e9aa8255e1d7b4f4/jiter-0.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:28ed2a4c05a1f32ef0e1d24c2611330219fed727dae01789f4a335617634b1ca", size = 318225, upload-time = "2025-05-18T19:04:20.583Z" }, + { url = "https://files.pythonhosted.org/packages/43/84/c7d44c75767e18946219ba2d703a5a32ab37b0bc21886a97bc6062e4da42/jiter-0.10.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14a4c418b1ec86a195f1ca69da8b23e8926c752b685af665ce30777233dfe070", size = 350235, upload-time = "2025-05-18T19:04:22.363Z" }, + { url = "https://files.pythonhosted.org/packages/01/16/f5a0135ccd968b480daad0e6ab34b0c7c5ba3bc447e5088152696140dcb3/jiter-0.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d7bfed2fe1fe0e4dda6ef682cee888ba444b21e7a6553e03252e4feb6cf0adca", size = 207278, upload-time = "2025-05-18T19:04:23.627Z" }, + { url = "https://files.pythonhosted.org/packages/1c/9b/1d646da42c3de6c2188fdaa15bce8ecb22b635904fc68be025e21249ba44/jiter-0.10.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:5e9251a5e83fab8d87799d3e1a46cb4b7f2919b895c6f4483629ed2446f66522", size = 310866, upload-time = "2025-05-18T19:04:24.891Z" }, + { url = "https://files.pythonhosted.org/packages/ad/0e/26538b158e8a7c7987e94e7aeb2999e2e82b1f9d2e1f6e9874ddf71ebda0/jiter-0.10.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:023aa0204126fe5b87ccbcd75c8a0d0261b9abdbbf46d55e7ae9f8e22424eeb8", size = 318772, upload-time = "2025-05-18T19:04:26.161Z" }, + { url = "https://files.pythonhosted.org/packages/7b/fb/d302893151caa1c2636d6574d213e4b34e31fd077af6050a9c5cbb42f6fb/jiter-0.10.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c189c4f1779c05f75fc17c0c1267594ed918996a231593a21a5ca5438445216", size = 344534, upload-time = "2025-05-18T19:04:27.495Z" }, + { url = "https://files.pythonhosted.org/packages/01/d8/5780b64a149d74e347c5128d82176eb1e3241b1391ac07935693466d6219/jiter-0.10.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:15720084d90d1098ca0229352607cd68256c76991f6b374af96f36920eae13c4", size = 369087, upload-time = "2025-05-18T19:04:28.896Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5b/f235a1437445160e777544f3ade57544daf96ba7e96c1a5b24a6f7ac7004/jiter-0.10.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4f2fb68e5f1cfee30e2b2a09549a00683e0fde4c6a2ab88c94072fc33cb7426", size = 490694, upload-time = "2025-05-18T19:04:30.183Z" }, + { url = "https://files.pythonhosted.org/packages/85/a9/9c3d4617caa2ff89cf61b41e83820c27ebb3f7b5fae8a72901e8cd6ff9be/jiter-0.10.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce541693355fc6da424c08b7edf39a2895f58d6ea17d92cc2b168d20907dee12", size = 388992, upload-time = "2025-05-18T19:04:32.028Z" }, + { url = "https://files.pythonhosted.org/packages/68/b1/344fd14049ba5c94526540af7eb661871f9c54d5f5601ff41a959b9a0bbd/jiter-0.10.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31c50c40272e189d50006ad5c73883caabb73d4e9748a688b216e85a9a9ca3b9", size = 351723, upload-time = "2025-05-18T19:04:33.467Z" }, + { url = "https://files.pythonhosted.org/packages/41/89/4c0e345041186f82a31aee7b9d4219a910df672b9fef26f129f0cda07a29/jiter-0.10.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fa3402a2ff9815960e0372a47b75c76979d74402448509ccd49a275fa983ef8a", size = 392215, upload-time = "2025-05-18T19:04:34.827Z" }, + { url = "https://files.pythonhosted.org/packages/55/58/ee607863e18d3f895feb802154a2177d7e823a7103f000df182e0f718b38/jiter-0.10.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:1956f934dca32d7bb647ea21d06d93ca40868b505c228556d3373cbd255ce853", size = 522762, upload-time = "2025-05-18T19:04:36.19Z" }, + { url = "https://files.pythonhosted.org/packages/15/d0/9123fb41825490d16929e73c212de9a42913d68324a8ce3c8476cae7ac9d/jiter-0.10.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:fcedb049bdfc555e261d6f65a6abe1d5ad68825b7202ccb9692636c70fcced86", size = 513427, upload-time = "2025-05-18T19:04:37.544Z" }, + { url = "https://files.pythonhosted.org/packages/d8/b3/2bd02071c5a2430d0b70403a34411fc519c2f227da7b03da9ba6a956f931/jiter-0.10.0-cp314-cp314-win32.whl", hash = "sha256:ac509f7eccca54b2a29daeb516fb95b6f0bd0d0d8084efaf8ed5dfc7b9f0b357", size = 210127, upload-time = "2025-05-18T19:04:38.837Z" }, + { url = "https://files.pythonhosted.org/packages/03/0c/5fe86614ea050c3ecd728ab4035534387cd41e7c1855ef6c031f1ca93e3f/jiter-0.10.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5ed975b83a2b8639356151cef5c0d597c68376fc4922b45d0eb384ac058cfa00", size = 318527, upload-time = "2025-05-18T19:04:40.612Z" }, + { url = "https://files.pythonhosted.org/packages/b3/4a/4175a563579e884192ba6e81725fc0448b042024419be8d83aa8a80a3f44/jiter-0.10.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa96f2abba33dc77f79b4cf791840230375f9534e5fac927ccceb58c5e604a5", size = 354213, upload-time = "2025-05-18T19:04:41.894Z" }, ] [[package]] @@ -898,14 +968,14 @@ dev = [{ name = "pyright", specifier = ">=1.1.389" }] [[package]] name = "markdown-it-py" -version = "3.0.0" +version = "4.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" }, + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, ] [[package]] @@ -967,83 +1037,109 @@ wheels = [ [[package]] name = "msal" -version = "1.31.1" +version = "1.33.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography" }, { name = "pyjwt", extra = ["crypto"] }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3f/f3/cdf2681e83a73c3355883c2884b6ff2f2d2aadfc399c28e9ac4edc3994fd/msal-1.31.1.tar.gz", hash = "sha256:11b5e6a3f802ffd3a72107203e20c4eac6ef53401961b880af2835b723d80578", size = 145362, upload-time = "2024-11-18T09:51:10.143Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d5/da/81acbe0c1fd7e9e4ec35f55dadeba9833a847b9a6ba2e2d1e4432da901dd/msal-1.33.0.tar.gz", hash = "sha256:836ad80faa3e25a7d71015c990ce61f704a87328b1e73bcbb0623a18cbf17510", size = 153801, upload-time = "2025-07-22T19:36:33.693Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/30/7c/489cd931a752d05753d730e848039f08f65f86237cf1b8724d0a1cbd700b/msal-1.31.1-py3-none-any.whl", hash = "sha256:29d9882de247e96db01386496d59f29035e5e841bcac892e6d7bf4390bf6bd17", size = 113216, upload-time = "2024-11-18T09:51:08.402Z" }, + { url = "https://files.pythonhosted.org/packages/86/5b/fbc73e91f7727ae1e79b21ed833308e99dc11cc1cd3d4717f579775de5e9/msal-1.33.0-py3-none-any.whl", hash = "sha256:c0cd41cecf8eaed733ee7e3be9e040291eba53b0f262d3ae9c58f38b04244273", size = 116853, upload-time = "2025-07-22T19:36:32.403Z" }, ] [[package]] name = "msal-extensions" -version = "1.2.0" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "msal" }, - { name = "portalocker" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2d/38/ad49272d0a5af95f7a0cb64a79bbd75c9c187f3b789385a143d8d537a5eb/msal_extensions-1.2.0.tar.gz", hash = "sha256:6f41b320bfd2933d631a215c91ca0dd3e67d84bd1a2f50ce917d5874ec646bef", size = 22391, upload-time = "2024-06-23T02:15:37.702Z" } +sdist = { url = "https://files.pythonhosted.org/packages/01/99/5d239b6156eddf761a636bded1118414d161bd6b7b37a9335549ed159396/msal_extensions-1.3.1.tar.gz", hash = "sha256:c5b0fd10f65ef62b5f1d62f4251d51cbcaf003fcedae8c91b040a488614be1a4", size = 23315, upload-time = "2025-03-14T23:51:03.902Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/69/314d887a01599669fb330da14e5c6ff5f138609e322812a942a74ef9b765/msal_extensions-1.2.0-py3-none-any.whl", hash = "sha256:cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d", size = 19254, upload-time = "2024-06-23T02:15:36.584Z" }, + { url = "https://files.pythonhosted.org/packages/5e/75/bd9b7bb966668920f06b200e84454c8f3566b102183bc55c5473d96cb2b9/msal_extensions-1.3.1-py3-none-any.whl", hash = "sha256:96d3de4d034504e969ac5e85bae8106c8373b5c6568e4c8fa7af2eca9dbe6bca", size = 20583, upload-time = "2025-03-14T23:51:03.016Z" }, ] [[package]] name = "multidict" -version = "6.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/be/504b89a5e9ca731cd47487e91c469064f8ae5af93b7259758dcfc2b9c848/multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a", size = 64002, upload-time = "2024-09-09T23:49:38.163Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/93/13/df3505a46d0cd08428e4c8169a196131d1b0c4b515c3649829258843dde6/multidict-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6", size = 48570, upload-time = "2024-09-09T23:47:41.36Z" }, - { url = "https://files.pythonhosted.org/packages/f0/e1/a215908bfae1343cdb72f805366592bdd60487b4232d039c437fe8f5013d/multidict-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156", size = 29316, upload-time = "2024-09-09T23:47:42.612Z" }, - { url = "https://files.pythonhosted.org/packages/70/0f/6dc70ddf5d442702ed74f298d69977f904960b82368532c88e854b79f72b/multidict-6.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb", size = 29640, upload-time = "2024-09-09T23:47:44.028Z" }, - { url = "https://files.pythonhosted.org/packages/d8/6d/9c87b73a13d1cdea30b321ef4b3824449866bd7f7127eceed066ccb9b9ff/multidict-6.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b", size = 131067, upload-time = "2024-09-09T23:47:45.617Z" }, - { url = "https://files.pythonhosted.org/packages/cc/1e/1b34154fef373371fd6c65125b3d42ff5f56c7ccc6bfff91b9b3c60ae9e0/multidict-6.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72", size = 138507, upload-time = "2024-09-09T23:47:47.429Z" }, - { url = "https://files.pythonhosted.org/packages/fb/e0/0bc6b2bac6e461822b5f575eae85da6aae76d0e2a79b6665d6206b8e2e48/multidict-6.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304", size = 133905, upload-time = "2024-09-09T23:47:48.878Z" }, - { url = "https://files.pythonhosted.org/packages/ba/af/73d13b918071ff9b2205fcf773d316e0f8fefb4ec65354bbcf0b10908cc6/multidict-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351", size = 129004, upload-time = "2024-09-09T23:47:50.124Z" }, - { url = "https://files.pythonhosted.org/packages/74/21/23960627b00ed39643302d81bcda44c9444ebcdc04ee5bedd0757513f259/multidict-6.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb", size = 121308, upload-time = "2024-09-09T23:47:51.97Z" }, - { url = "https://files.pythonhosted.org/packages/8b/5c/cf282263ffce4a596ed0bb2aa1a1dddfe1996d6a62d08842a8d4b33dca13/multidict-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3", size = 132608, upload-time = "2024-09-09T23:47:53.201Z" }, - { url = "https://files.pythonhosted.org/packages/d7/3e/97e778c041c72063f42b290888daff008d3ab1427f5b09b714f5a8eff294/multidict-6.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399", size = 127029, upload-time = "2024-09-09T23:47:54.435Z" }, - { url = "https://files.pythonhosted.org/packages/47/ac/3efb7bfe2f3aefcf8d103e9a7162572f01936155ab2f7ebcc7c255a23212/multidict-6.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423", size = 137594, upload-time = "2024-09-09T23:47:55.659Z" }, - { url = "https://files.pythonhosted.org/packages/42/9b/6c6e9e8dc4f915fc90a9b7798c44a30773dea2995fdcb619870e705afe2b/multidict-6.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3", size = 134556, upload-time = "2024-09-09T23:47:56.98Z" }, - { url = "https://files.pythonhosted.org/packages/1d/10/8e881743b26aaf718379a14ac58572a240e8293a1c9d68e1418fb11c0f90/multidict-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753", size = 130993, upload-time = "2024-09-09T23:47:58.163Z" }, - { url = "https://files.pythonhosted.org/packages/45/84/3eb91b4b557442802d058a7579e864b329968c8d0ea57d907e7023c677f2/multidict-6.1.0-cp311-cp311-win32.whl", hash = "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80", size = 26405, upload-time = "2024-09-09T23:47:59.391Z" }, - { url = "https://files.pythonhosted.org/packages/9f/0b/ad879847ecbf6d27e90a6eabb7eff6b62c129eefe617ea45eae7c1f0aead/multidict-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926", size = 28795, upload-time = "2024-09-09T23:48:00.359Z" }, - { url = "https://files.pythonhosted.org/packages/fd/16/92057c74ba3b96d5e211b553895cd6dc7cc4d1e43d9ab8fafc727681ef71/multidict-6.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa", size = 48713, upload-time = "2024-09-09T23:48:01.893Z" }, - { url = "https://files.pythonhosted.org/packages/94/3d/37d1b8893ae79716179540b89fc6a0ee56b4a65fcc0d63535c6f5d96f217/multidict-6.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436", size = 29516, upload-time = "2024-09-09T23:48:03.463Z" }, - { url = "https://files.pythonhosted.org/packages/a2/12/adb6b3200c363062f805275b4c1e656be2b3681aada66c80129932ff0bae/multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761", size = 29557, upload-time = "2024-09-09T23:48:04.905Z" }, - { url = "https://files.pythonhosted.org/packages/47/e9/604bb05e6e5bce1e6a5cf80a474e0f072e80d8ac105f1b994a53e0b28c42/multidict-6.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e", size = 130170, upload-time = "2024-09-09T23:48:06.862Z" }, - { url = "https://files.pythonhosted.org/packages/7e/13/9efa50801785eccbf7086b3c83b71a4fb501a4d43549c2f2f80b8787d69f/multidict-6.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef", size = 134836, upload-time = "2024-09-09T23:48:08.537Z" }, - { url = "https://files.pythonhosted.org/packages/bf/0f/93808b765192780d117814a6dfcc2e75de6dcc610009ad408b8814dca3ba/multidict-6.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95", size = 133475, upload-time = "2024-09-09T23:48:09.865Z" }, - { url = "https://files.pythonhosted.org/packages/d3/c8/529101d7176fe7dfe1d99604e48d69c5dfdcadb4f06561f465c8ef12b4df/multidict-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925", size = 131049, upload-time = "2024-09-09T23:48:11.115Z" }, - { url = "https://files.pythonhosted.org/packages/ca/0c/fc85b439014d5a58063e19c3a158a889deec399d47b5269a0f3b6a2e28bc/multidict-6.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966", size = 120370, upload-time = "2024-09-09T23:48:12.78Z" }, - { url = "https://files.pythonhosted.org/packages/db/46/d4416eb20176492d2258fbd47b4abe729ff3b6e9c829ea4236f93c865089/multidict-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305", size = 125178, upload-time = "2024-09-09T23:48:14.295Z" }, - { url = "https://files.pythonhosted.org/packages/5b/46/73697ad7ec521df7de5531a32780bbfd908ded0643cbe457f981a701457c/multidict-6.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2", size = 119567, upload-time = "2024-09-09T23:48:16.284Z" }, - { url = "https://files.pythonhosted.org/packages/cd/ed/51f060e2cb0e7635329fa6ff930aa5cffa17f4c7f5c6c3ddc3500708e2f2/multidict-6.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2", size = 129822, upload-time = "2024-09-09T23:48:17.835Z" }, - { url = "https://files.pythonhosted.org/packages/df/9e/ee7d1954b1331da3eddea0c4e08d9142da5f14b1321c7301f5014f49d492/multidict-6.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6", size = 128656, upload-time = "2024-09-09T23:48:19.576Z" }, - { url = "https://files.pythonhosted.org/packages/77/00/8538f11e3356b5d95fa4b024aa566cde7a38aa7a5f08f4912b32a037c5dc/multidict-6.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3", size = 125360, upload-time = "2024-09-09T23:48:20.957Z" }, - { url = "https://files.pythonhosted.org/packages/be/05/5d334c1f2462d43fec2363cd00b1c44c93a78c3925d952e9a71caf662e96/multidict-6.1.0-cp312-cp312-win32.whl", hash = "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133", size = 26382, upload-time = "2024-09-09T23:48:22.351Z" }, - { url = "https://files.pythonhosted.org/packages/a3/bf/f332a13486b1ed0496d624bcc7e8357bb8053823e8cd4b9a18edc1d97e73/multidict-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1", size = 28529, upload-time = "2024-09-09T23:48:23.478Z" }, - { url = "https://files.pythonhosted.org/packages/22/67/1c7c0f39fe069aa4e5d794f323be24bf4d33d62d2a348acdb7991f8f30db/multidict-6.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008", size = 48771, upload-time = "2024-09-09T23:48:24.594Z" }, - { url = "https://files.pythonhosted.org/packages/3c/25/c186ee7b212bdf0df2519eacfb1981a017bda34392c67542c274651daf23/multidict-6.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f", size = 29533, upload-time = "2024-09-09T23:48:26.187Z" }, - { url = "https://files.pythonhosted.org/packages/67/5e/04575fd837e0958e324ca035b339cea174554f6f641d3fb2b4f2e7ff44a2/multidict-6.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28", size = 29595, upload-time = "2024-09-09T23:48:27.305Z" }, - { url = "https://files.pythonhosted.org/packages/d3/b2/e56388f86663810c07cfe4a3c3d87227f3811eeb2d08450b9e5d19d78876/multidict-6.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b", size = 130094, upload-time = "2024-09-09T23:48:28.544Z" }, - { url = "https://files.pythonhosted.org/packages/6c/ee/30ae9b4186a644d284543d55d491fbd4239b015d36b23fea43b4c94f7052/multidict-6.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c", size = 134876, upload-time = "2024-09-09T23:48:30.098Z" }, - { url = "https://files.pythonhosted.org/packages/84/c7/70461c13ba8ce3c779503c70ec9d0345ae84de04521c1f45a04d5f48943d/multidict-6.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3", size = 133500, upload-time = "2024-09-09T23:48:31.793Z" }, - { url = "https://files.pythonhosted.org/packages/4a/9f/002af221253f10f99959561123fae676148dd730e2daa2cd053846a58507/multidict-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44", size = 131099, upload-time = "2024-09-09T23:48:33.193Z" }, - { url = "https://files.pythonhosted.org/packages/82/42/d1c7a7301d52af79d88548a97e297f9d99c961ad76bbe6f67442bb77f097/multidict-6.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2", size = 120403, upload-time = "2024-09-09T23:48:34.942Z" }, - { url = "https://files.pythonhosted.org/packages/68/f3/471985c2c7ac707547553e8f37cff5158030d36bdec4414cb825fbaa5327/multidict-6.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3", size = 125348, upload-time = "2024-09-09T23:48:36.222Z" }, - { url = "https://files.pythonhosted.org/packages/67/2c/e6df05c77e0e433c214ec1d21ddd203d9a4770a1f2866a8ca40a545869a0/multidict-6.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa", size = 119673, upload-time = "2024-09-09T23:48:37.588Z" }, - { url = "https://files.pythonhosted.org/packages/c5/cd/bc8608fff06239c9fb333f9db7743a1b2eafe98c2666c9a196e867a3a0a4/multidict-6.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa", size = 129927, upload-time = "2024-09-09T23:48:39.128Z" }, - { url = "https://files.pythonhosted.org/packages/44/8e/281b69b7bc84fc963a44dc6e0bbcc7150e517b91df368a27834299a526ac/multidict-6.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4", size = 128711, upload-time = "2024-09-09T23:48:40.55Z" }, - { url = "https://files.pythonhosted.org/packages/12/a4/63e7cd38ed29dd9f1881d5119f272c898ca92536cdb53ffe0843197f6c85/multidict-6.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6", size = 125519, upload-time = "2024-09-09T23:48:42.446Z" }, - { url = "https://files.pythonhosted.org/packages/38/e0/4f5855037a72cd8a7a2f60a3952d9aa45feedb37ae7831642102604e8a37/multidict-6.1.0-cp313-cp313-win32.whl", hash = "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81", size = 26426, upload-time = "2024-09-09T23:48:43.936Z" }, - { url = "https://files.pythonhosted.org/packages/7e/a5/17ee3a4db1e310b7405f5d25834460073a8ccd86198ce044dfaf69eac073/multidict-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774", size = 28531, upload-time = "2024-09-09T23:48:45.122Z" }, - { url = "https://files.pythonhosted.org/packages/99/b7/b9e70fde2c0f0c9af4cc5277782a89b66d35948ea3369ec9f598358c3ac5/multidict-6.1.0-py3-none-any.whl", hash = "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506", size = 10051, upload-time = "2024-09-09T23:49:36.506Z" }, +version = "6.6.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/69/7f/0652e6ed47ab288e3756ea9c0df8b14950781184d4bd7883f4d87dd41245/multidict-6.6.4.tar.gz", hash = "sha256:d2d4e4787672911b48350df02ed3fa3fffdc2f2e8ca06dd6afdf34189b76a9dd", size = 101843, upload-time = "2025-08-11T12:08:48.217Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/7f/90a7f01e2d005d6653c689039977f6856718c75c5579445effb7e60923d1/multidict-6.6.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c7a0e9b561e6460484318a7612e725df1145d46b0ef57c6b9866441bf6e27e0c", size = 76472, upload-time = "2025-08-11T12:06:29.006Z" }, + { url = "https://files.pythonhosted.org/packages/54/a3/bed07bc9e2bb302ce752f1dabc69e884cd6a676da44fb0e501b246031fdd/multidict-6.6.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6bf2f10f70acc7a2446965ffbc726e5fc0b272c97a90b485857e5c70022213eb", size = 44634, upload-time = "2025-08-11T12:06:30.374Z" }, + { url = "https://files.pythonhosted.org/packages/a7/4b/ceeb4f8f33cf81277da464307afeaf164fb0297947642585884f5cad4f28/multidict-6.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66247d72ed62d5dd29752ffc1d3b88f135c6a8de8b5f63b7c14e973ef5bda19e", size = 44282, upload-time = "2025-08-11T12:06:31.958Z" }, + { url = "https://files.pythonhosted.org/packages/03/35/436a5da8702b06866189b69f655ffdb8f70796252a8772a77815f1812679/multidict-6.6.4-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:105245cc6b76f51e408451a844a54e6823bbd5a490ebfe5bdfc79798511ceded", size = 229696, upload-time = "2025-08-11T12:06:33.087Z" }, + { url = "https://files.pythonhosted.org/packages/b6/0e/915160be8fecf1fca35f790c08fb74ca684d752fcba62c11daaf3d92c216/multidict-6.6.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cbbc54e58b34c3bae389ef00046be0961f30fef7cb0dd9c7756aee376a4f7683", size = 246665, upload-time = "2025-08-11T12:06:34.448Z" }, + { url = "https://files.pythonhosted.org/packages/08/ee/2f464330acd83f77dcc346f0b1a0eaae10230291450887f96b204b8ac4d3/multidict-6.6.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:56c6b3652f945c9bc3ac6c8178cd93132b8d82dd581fcbc3a00676c51302bc1a", size = 225485, upload-time = "2025-08-11T12:06:35.672Z" }, + { url = "https://files.pythonhosted.org/packages/71/cc/9a117f828b4d7fbaec6adeed2204f211e9caf0a012692a1ee32169f846ae/multidict-6.6.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b95494daf857602eccf4c18ca33337dd2be705bccdb6dddbfc9d513e6addb9d9", size = 257318, upload-time = "2025-08-11T12:06:36.98Z" }, + { url = "https://files.pythonhosted.org/packages/25/77/62752d3dbd70e27fdd68e86626c1ae6bccfebe2bb1f84ae226363e112f5a/multidict-6.6.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e5b1413361cef15340ab9dc61523e653d25723e82d488ef7d60a12878227ed50", size = 254689, upload-time = "2025-08-11T12:06:38.233Z" }, + { url = "https://files.pythonhosted.org/packages/00/6e/fac58b1072a6fc59af5e7acb245e8754d3e1f97f4f808a6559951f72a0d4/multidict-6.6.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e167bf899c3d724f9662ef00b4f7fef87a19c22b2fead198a6f68b263618df52", size = 246709, upload-time = "2025-08-11T12:06:39.517Z" }, + { url = "https://files.pythonhosted.org/packages/01/ef/4698d6842ef5e797c6db7744b0081e36fb5de3d00002cc4c58071097fac3/multidict-6.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aaea28ba20a9026dfa77f4b80369e51cb767c61e33a2d4043399c67bd95fb7c6", size = 243185, upload-time = "2025-08-11T12:06:40.796Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c9/d82e95ae1d6e4ef396934e9b0e942dfc428775f9554acf04393cce66b157/multidict-6.6.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:8c91cdb30809a96d9ecf442ec9bc45e8cfaa0f7f8bdf534e082c2443a196727e", size = 237838, upload-time = "2025-08-11T12:06:42.595Z" }, + { url = "https://files.pythonhosted.org/packages/57/cf/f94af5c36baaa75d44fab9f02e2a6bcfa0cd90acb44d4976a80960759dbc/multidict-6.6.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1a0ccbfe93ca114c5d65a2471d52d8829e56d467c97b0e341cf5ee45410033b3", size = 246368, upload-time = "2025-08-11T12:06:44.304Z" }, + { url = "https://files.pythonhosted.org/packages/4a/fe/29f23460c3d995f6a4b678cb2e9730e7277231b981f0b234702f0177818a/multidict-6.6.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:55624b3f321d84c403cb7d8e6e982f41ae233d85f85db54ba6286f7295dc8a9c", size = 253339, upload-time = "2025-08-11T12:06:45.597Z" }, + { url = "https://files.pythonhosted.org/packages/29/b6/fd59449204426187b82bf8a75f629310f68c6adc9559dc922d5abe34797b/multidict-6.6.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:4a1fb393a2c9d202cb766c76208bd7945bc194eba8ac920ce98c6e458f0b524b", size = 246933, upload-time = "2025-08-11T12:06:46.841Z" }, + { url = "https://files.pythonhosted.org/packages/19/52/d5d6b344f176a5ac3606f7a61fb44dc746e04550e1a13834dff722b8d7d6/multidict-6.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:43868297a5759a845fa3a483fb4392973a95fb1de891605a3728130c52b8f40f", size = 242225, upload-time = "2025-08-11T12:06:48.588Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d3/5b2281ed89ff4d5318d82478a2a2450fcdfc3300da48ff15c1778280ad26/multidict-6.6.4-cp311-cp311-win32.whl", hash = "sha256:ed3b94c5e362a8a84d69642dbeac615452e8af9b8eb825b7bc9f31a53a1051e2", size = 41306, upload-time = "2025-08-11T12:06:49.95Z" }, + { url = "https://files.pythonhosted.org/packages/74/7d/36b045c23a1ab98507aefd44fd8b264ee1dd5e5010543c6fccf82141ccef/multidict-6.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:d8c112f7a90d8ca5d20213aa41eac690bb50a76da153e3afb3886418e61cb22e", size = 46029, upload-time = "2025-08-11T12:06:51.082Z" }, + { url = "https://files.pythonhosted.org/packages/0f/5e/553d67d24432c5cd52b49047f2d248821843743ee6d29a704594f656d182/multidict-6.6.4-cp311-cp311-win_arm64.whl", hash = "sha256:3bb0eae408fa1996d87247ca0d6a57b7fc1dcf83e8a5c47ab82c558c250d4adf", size = 43017, upload-time = "2025-08-11T12:06:52.243Z" }, + { url = "https://files.pythonhosted.org/packages/05/f6/512ffd8fd8b37fb2680e5ac35d788f1d71bbaf37789d21a820bdc441e565/multidict-6.6.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0ffb87be160942d56d7b87b0fdf098e81ed565add09eaa1294268c7f3caac4c8", size = 76516, upload-time = "2025-08-11T12:06:53.393Z" }, + { url = "https://files.pythonhosted.org/packages/99/58/45c3e75deb8855c36bd66cc1658007589662ba584dbf423d01df478dd1c5/multidict-6.6.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d191de6cbab2aff5de6c5723101705fd044b3e4c7cfd587a1929b5028b9714b3", size = 45394, upload-time = "2025-08-11T12:06:54.555Z" }, + { url = "https://files.pythonhosted.org/packages/fd/ca/e8c4472a93a26e4507c0b8e1f0762c0d8a32de1328ef72fd704ef9cc5447/multidict-6.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38a0956dd92d918ad5feff3db8fcb4a5eb7dba114da917e1a88475619781b57b", size = 43591, upload-time = "2025-08-11T12:06:55.672Z" }, + { url = "https://files.pythonhosted.org/packages/05/51/edf414f4df058574a7265034d04c935aa84a89e79ce90fcf4df211f47b16/multidict-6.6.4-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6865f6d3b7900ae020b495d599fcf3765653bc927951c1abb959017f81ae8287", size = 237215, upload-time = "2025-08-11T12:06:57.213Z" }, + { url = "https://files.pythonhosted.org/packages/c8/45/8b3d6dbad8cf3252553cc41abea09ad527b33ce47a5e199072620b296902/multidict-6.6.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a2088c126b6f72db6c9212ad827d0ba088c01d951cee25e758c450da732c138", size = 258299, upload-time = "2025-08-11T12:06:58.946Z" }, + { url = "https://files.pythonhosted.org/packages/3c/e8/8ca2e9a9f5a435fc6db40438a55730a4bf4956b554e487fa1b9ae920f825/multidict-6.6.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0f37bed7319b848097085d7d48116f545985db988e2256b2e6f00563a3416ee6", size = 242357, upload-time = "2025-08-11T12:07:00.301Z" }, + { url = "https://files.pythonhosted.org/packages/0f/84/80c77c99df05a75c28490b2af8f7cba2a12621186e0a8b0865d8e745c104/multidict-6.6.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:01368e3c94032ba6ca0b78e7ccb099643466cf24f8dc8eefcfdc0571d56e58f9", size = 268369, upload-time = "2025-08-11T12:07:01.638Z" }, + { url = "https://files.pythonhosted.org/packages/0d/e9/920bfa46c27b05fb3e1ad85121fd49f441492dca2449c5bcfe42e4565d8a/multidict-6.6.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fe323540c255db0bffee79ad7f048c909f2ab0edb87a597e1c17da6a54e493c", size = 269341, upload-time = "2025-08-11T12:07:02.943Z" }, + { url = "https://files.pythonhosted.org/packages/af/65/753a2d8b05daf496f4a9c367fe844e90a1b2cac78e2be2c844200d10cc4c/multidict-6.6.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8eb3025f17b0a4c3cd08cda49acf312a19ad6e8a4edd9dbd591e6506d999402", size = 256100, upload-time = "2025-08-11T12:07:04.564Z" }, + { url = "https://files.pythonhosted.org/packages/09/54/655be13ae324212bf0bc15d665a4e34844f34c206f78801be42f7a0a8aaa/multidict-6.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bbc14f0365534d35a06970d6a83478b249752e922d662dc24d489af1aa0d1be7", size = 253584, upload-time = "2025-08-11T12:07:05.914Z" }, + { url = "https://files.pythonhosted.org/packages/5c/74/ab2039ecc05264b5cec73eb018ce417af3ebb384ae9c0e9ed42cb33f8151/multidict-6.6.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:75aa52fba2d96bf972e85451b99d8e19cc37ce26fd016f6d4aa60da9ab2b005f", size = 251018, upload-time = "2025-08-11T12:07:08.301Z" }, + { url = "https://files.pythonhosted.org/packages/af/0a/ccbb244ac848e56c6427f2392741c06302bbfba49c0042f1eb3c5b606497/multidict-6.6.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4fefd4a815e362d4f011919d97d7b4a1e566f1dde83dc4ad8cfb5b41de1df68d", size = 251477, upload-time = "2025-08-11T12:07:10.248Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b0/0ed49bba775b135937f52fe13922bc64a7eaf0a3ead84a36e8e4e446e096/multidict-6.6.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:db9801fe021f59a5b375ab778973127ca0ac52429a26e2fd86aa9508f4d26eb7", size = 263575, upload-time = "2025-08-11T12:07:11.928Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d9/7fb85a85e14de2e44dfb6a24f03c41e2af8697a6df83daddb0e9b7569f73/multidict-6.6.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a650629970fa21ac1fb06ba25dabfc5b8a2054fcbf6ae97c758aa956b8dba802", size = 259649, upload-time = "2025-08-11T12:07:13.244Z" }, + { url = "https://files.pythonhosted.org/packages/03/9e/b3a459bcf9b6e74fa461a5222a10ff9b544cb1cd52fd482fb1b75ecda2a2/multidict-6.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:452ff5da78d4720d7516a3a2abd804957532dd69296cb77319c193e3ffb87e24", size = 251505, upload-time = "2025-08-11T12:07:14.57Z" }, + { url = "https://files.pythonhosted.org/packages/86/a2/8022f78f041dfe6d71e364001a5cf987c30edfc83c8a5fb7a3f0974cff39/multidict-6.6.4-cp312-cp312-win32.whl", hash = "sha256:8c2fcb12136530ed19572bbba61b407f655e3953ba669b96a35036a11a485793", size = 41888, upload-time = "2025-08-11T12:07:15.904Z" }, + { url = "https://files.pythonhosted.org/packages/c7/eb/d88b1780d43a56db2cba24289fa744a9d216c1a8546a0dc3956563fd53ea/multidict-6.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:047d9425860a8c9544fed1b9584f0c8bcd31bcde9568b047c5e567a1025ecd6e", size = 46072, upload-time = "2025-08-11T12:07:17.045Z" }, + { url = "https://files.pythonhosted.org/packages/9f/16/b929320bf5750e2d9d4931835a4c638a19d2494a5b519caaaa7492ebe105/multidict-6.6.4-cp312-cp312-win_arm64.whl", hash = "sha256:14754eb72feaa1e8ae528468f24250dd997b8e2188c3d2f593f9eba259e4b364", size = 43222, upload-time = "2025-08-11T12:07:18.328Z" }, + { url = "https://files.pythonhosted.org/packages/3a/5d/e1db626f64f60008320aab00fbe4f23fc3300d75892a3381275b3d284580/multidict-6.6.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f46a6e8597f9bd71b31cc708195d42b634c8527fecbcf93febf1052cacc1f16e", size = 75848, upload-time = "2025-08-11T12:07:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/4c/aa/8b6f548d839b6c13887253af4e29c939af22a18591bfb5d0ee6f1931dae8/multidict-6.6.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:22e38b2bc176c5eb9c0a0e379f9d188ae4cd8b28c0f53b52bce7ab0a9e534657", size = 45060, upload-time = "2025-08-11T12:07:21.163Z" }, + { url = "https://files.pythonhosted.org/packages/eb/c6/f5e97e5d99a729bc2aa58eb3ebfa9f1e56a9b517cc38c60537c81834a73f/multidict-6.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5df8afd26f162da59e218ac0eefaa01b01b2e6cd606cffa46608f699539246da", size = 43269, upload-time = "2025-08-11T12:07:22.392Z" }, + { url = "https://files.pythonhosted.org/packages/dc/31/d54eb0c62516776f36fe67f84a732f97e0b0e12f98d5685bebcc6d396910/multidict-6.6.4-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:49517449b58d043023720aa58e62b2f74ce9b28f740a0b5d33971149553d72aa", size = 237158, upload-time = "2025-08-11T12:07:23.636Z" }, + { url = "https://files.pythonhosted.org/packages/c4/1c/8a10c1c25b23156e63b12165a929d8eb49a6ed769fdbefb06e6f07c1e50d/multidict-6.6.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae9408439537c5afdca05edd128a63f56a62680f4b3c234301055d7a2000220f", size = 257076, upload-time = "2025-08-11T12:07:25.049Z" }, + { url = "https://files.pythonhosted.org/packages/ad/86/90e20b5771d6805a119e483fd3d1e8393e745a11511aebca41f0da38c3e2/multidict-6.6.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:87a32d20759dc52a9e850fe1061b6e41ab28e2998d44168a8a341b99ded1dba0", size = 240694, upload-time = "2025-08-11T12:07:26.458Z" }, + { url = "https://files.pythonhosted.org/packages/e7/49/484d3e6b535bc0555b52a0a26ba86e4d8d03fd5587d4936dc59ba7583221/multidict-6.6.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:52e3c8d43cdfff587ceedce9deb25e6ae77daba560b626e97a56ddcad3756879", size = 266350, upload-time = "2025-08-11T12:07:27.94Z" }, + { url = "https://files.pythonhosted.org/packages/bf/b4/aa4c5c379b11895083d50021e229e90c408d7d875471cb3abf721e4670d6/multidict-6.6.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ad8850921d3a8d8ff6fbef790e773cecfc260bbfa0566998980d3fa8f520bc4a", size = 267250, upload-time = "2025-08-11T12:07:29.303Z" }, + { url = "https://files.pythonhosted.org/packages/80/e5/5e22c5bf96a64bdd43518b1834c6d95a4922cc2066b7d8e467dae9b6cee6/multidict-6.6.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:497a2954adc25c08daff36f795077f63ad33e13f19bfff7736e72c785391534f", size = 254900, upload-time = "2025-08-11T12:07:30.764Z" }, + { url = "https://files.pythonhosted.org/packages/17/38/58b27fed927c07035abc02befacab42491e7388ca105e087e6e0215ead64/multidict-6.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:024ce601f92d780ca1617ad4be5ac15b501cc2414970ffa2bb2bbc2bd5a68fa5", size = 252355, upload-time = "2025-08-11T12:07:32.205Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a1/dad75d23a90c29c02b5d6f3d7c10ab36c3197613be5d07ec49c7791e186c/multidict-6.6.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a693fc5ed9bdd1c9e898013e0da4dcc640de7963a371c0bd458e50e046bf6438", size = 250061, upload-time = "2025-08-11T12:07:33.623Z" }, + { url = "https://files.pythonhosted.org/packages/b8/1a/ac2216b61c7f116edab6dc3378cca6c70dc019c9a457ff0d754067c58b20/multidict-6.6.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:190766dac95aab54cae5b152a56520fd99298f32a1266d66d27fdd1b5ac00f4e", size = 249675, upload-time = "2025-08-11T12:07:34.958Z" }, + { url = "https://files.pythonhosted.org/packages/d4/79/1916af833b800d13883e452e8e0977c065c4ee3ab7a26941fbfdebc11895/multidict-6.6.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:34d8f2a5ffdceab9dcd97c7a016deb2308531d5f0fced2bb0c9e1df45b3363d7", size = 261247, upload-time = "2025-08-11T12:07:36.588Z" }, + { url = "https://files.pythonhosted.org/packages/c5/65/d1f84fe08ac44a5fc7391cbc20a7cedc433ea616b266284413fd86062f8c/multidict-6.6.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:59e8d40ab1f5a8597abcef00d04845155a5693b5da00d2c93dbe88f2050f2812", size = 257960, upload-time = "2025-08-11T12:07:39.735Z" }, + { url = "https://files.pythonhosted.org/packages/13/b5/29ec78057d377b195ac2c5248c773703a6b602e132a763e20ec0457e7440/multidict-6.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:467fe64138cfac771f0e949b938c2e1ada2b5af22f39692aa9258715e9ea613a", size = 250078, upload-time = "2025-08-11T12:07:41.525Z" }, + { url = "https://files.pythonhosted.org/packages/c4/0e/7e79d38f70a872cae32e29b0d77024bef7834b0afb406ddae6558d9e2414/multidict-6.6.4-cp313-cp313-win32.whl", hash = "sha256:14616a30fe6d0a48d0a48d1a633ab3b8bec4cf293aac65f32ed116f620adfd69", size = 41708, upload-time = "2025-08-11T12:07:43.405Z" }, + { url = "https://files.pythonhosted.org/packages/9d/34/746696dffff742e97cd6a23da953e55d0ea51fa601fa2ff387b3edcfaa2c/multidict-6.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:40cd05eaeb39e2bc8939451f033e57feaa2ac99e07dbca8afe2be450a4a3b6cf", size = 45912, upload-time = "2025-08-11T12:07:45.082Z" }, + { url = "https://files.pythonhosted.org/packages/c7/87/3bac136181e271e29170d8d71929cdeddeb77f3e8b6a0c08da3a8e9da114/multidict-6.6.4-cp313-cp313-win_arm64.whl", hash = "sha256:f6eb37d511bfae9e13e82cb4d1af36b91150466f24d9b2b8a9785816deb16605", size = 43076, upload-time = "2025-08-11T12:07:46.746Z" }, + { url = "https://files.pythonhosted.org/packages/64/94/0a8e63e36c049b571c9ae41ee301ada29c3fee9643d9c2548d7d558a1d99/multidict-6.6.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:6c84378acd4f37d1b507dfa0d459b449e2321b3ba5f2338f9b085cf7a7ba95eb", size = 82812, upload-time = "2025-08-11T12:07:48.402Z" }, + { url = "https://files.pythonhosted.org/packages/25/1a/be8e369dfcd260d2070a67e65dd3990dd635cbd735b98da31e00ea84cd4e/multidict-6.6.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0e0558693063c75f3d952abf645c78f3c5dfdd825a41d8c4d8156fc0b0da6e7e", size = 48313, upload-time = "2025-08-11T12:07:49.679Z" }, + { url = "https://files.pythonhosted.org/packages/26/5a/dd4ade298674b2f9a7b06a32c94ffbc0497354df8285f27317c66433ce3b/multidict-6.6.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3f8e2384cb83ebd23fd07e9eada8ba64afc4c759cd94817433ab8c81ee4b403f", size = 46777, upload-time = "2025-08-11T12:07:51.318Z" }, + { url = "https://files.pythonhosted.org/packages/89/db/98aa28bc7e071bfba611ac2ae803c24e96dd3a452b4118c587d3d872c64c/multidict-6.6.4-cp313-cp313t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:f996b87b420995a9174b2a7c1a8daf7db4750be6848b03eb5e639674f7963773", size = 229321, upload-time = "2025-08-11T12:07:52.965Z" }, + { url = "https://files.pythonhosted.org/packages/c7/bc/01ddda2a73dd9d167bd85d0e8ef4293836a8f82b786c63fb1a429bc3e678/multidict-6.6.4-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc356250cffd6e78416cf5b40dc6a74f1edf3be8e834cf8862d9ed5265cf9b0e", size = 249954, upload-time = "2025-08-11T12:07:54.423Z" }, + { url = "https://files.pythonhosted.org/packages/06/78/6b7c0f020f9aa0acf66d0ab4eb9f08375bac9a50ff5e3edb1c4ccd59eafc/multidict-6.6.4-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:dadf95aa862714ea468a49ad1e09fe00fcc9ec67d122f6596a8d40caf6cec7d0", size = 228612, upload-time = "2025-08-11T12:07:55.914Z" }, + { url = "https://files.pythonhosted.org/packages/00/44/3faa416f89b2d5d76e9d447296a81521e1c832ad6e40b92f990697b43192/multidict-6.6.4-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7dd57515bebffd8ebd714d101d4c434063322e4fe24042e90ced41f18b6d3395", size = 257528, upload-time = "2025-08-11T12:07:57.371Z" }, + { url = "https://files.pythonhosted.org/packages/05/5f/77c03b89af0fcb16f018f668207768191fb9dcfb5e3361a5e706a11db2c9/multidict-6.6.4-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:967af5f238ebc2eb1da4e77af5492219fbd9b4b812347da39a7b5f5c72c0fa45", size = 256329, upload-time = "2025-08-11T12:07:58.844Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e9/ed750a2a9afb4f8dc6f13dc5b67b514832101b95714f1211cd42e0aafc26/multidict-6.6.4-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a4c6875c37aae9794308ec43e3530e4aa0d36579ce38d89979bbf89582002bb", size = 247928, upload-time = "2025-08-11T12:08:01.037Z" }, + { url = "https://files.pythonhosted.org/packages/1f/b5/e0571bc13cda277db7e6e8a532791d4403dacc9850006cb66d2556e649c0/multidict-6.6.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:7f683a551e92bdb7fac545b9c6f9fa2aebdeefa61d607510b3533286fcab67f5", size = 245228, upload-time = "2025-08-11T12:08:02.96Z" }, + { url = "https://files.pythonhosted.org/packages/f3/a3/69a84b0eccb9824491f06368f5b86e72e4af54c3067c37c39099b6687109/multidict-6.6.4-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:3ba5aaf600edaf2a868a391779f7a85d93bed147854925f34edd24cc70a3e141", size = 235869, upload-time = "2025-08-11T12:08:04.746Z" }, + { url = "https://files.pythonhosted.org/packages/a9/9d/28802e8f9121a6a0804fa009debf4e753d0a59969ea9f70be5f5fdfcb18f/multidict-6.6.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:580b643b7fd2c295d83cad90d78419081f53fd532d1f1eb67ceb7060f61cff0d", size = 243446, upload-time = "2025-08-11T12:08:06.332Z" }, + { url = "https://files.pythonhosted.org/packages/38/ea/6c98add069b4878c1d66428a5f5149ddb6d32b1f9836a826ac764b9940be/multidict-6.6.4-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:37b7187197da6af3ee0b044dbc9625afd0c885f2800815b228a0e70f9a7f473d", size = 252299, upload-time = "2025-08-11T12:08:07.931Z" }, + { url = "https://files.pythonhosted.org/packages/3a/09/8fe02d204473e14c0af3affd50af9078839dfca1742f025cca765435d6b4/multidict-6.6.4-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e1b93790ed0bc26feb72e2f08299691ceb6da5e9e14a0d13cc74f1869af327a0", size = 246926, upload-time = "2025-08-11T12:08:09.467Z" }, + { url = "https://files.pythonhosted.org/packages/37/3d/7b1e10d774a6df5175ecd3c92bff069e77bed9ec2a927fdd4ff5fe182f67/multidict-6.6.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a506a77ddee1efcca81ecbeae27ade3e09cdf21a8ae854d766c2bb4f14053f92", size = 243383, upload-time = "2025-08-11T12:08:10.981Z" }, + { url = "https://files.pythonhosted.org/packages/50/b0/a6fae46071b645ae98786ab738447de1ef53742eaad949f27e960864bb49/multidict-6.6.4-cp313-cp313t-win32.whl", hash = "sha256:f93b2b2279883d1d0a9e1bd01f312d6fc315c5e4c1f09e112e4736e2f650bc4e", size = 47775, upload-time = "2025-08-11T12:08:12.439Z" }, + { url = "https://files.pythonhosted.org/packages/b2/0a/2436550b1520091af0600dff547913cb2d66fbac27a8c33bc1b1bccd8d98/multidict-6.6.4-cp313-cp313t-win_amd64.whl", hash = "sha256:6d46a180acdf6e87cc41dc15d8f5c2986e1e8739dc25dbb7dac826731ef381a4", size = 53100, upload-time = "2025-08-11T12:08:13.823Z" }, + { url = "https://files.pythonhosted.org/packages/97/ea/43ac51faff934086db9c072a94d327d71b7d8b40cd5dcb47311330929ef0/multidict-6.6.4-cp313-cp313t-win_arm64.whl", hash = "sha256:756989334015e3335d087a27331659820d53ba432befdef6a718398b0a8493ad", size = 45501, upload-time = "2025-08-11T12:08:15.173Z" }, + { url = "https://files.pythonhosted.org/packages/fd/69/b547032297c7e63ba2af494edba695d781af8a0c6e89e4d06cf848b21d80/multidict-6.6.4-py3-none-any.whl", hash = "sha256:27d8f8e125c07cb954e54d75d04905a9bba8a439c1d84aca94949d4d03d8601c", size = 12313, upload-time = "2025-08-11T12:08:46.891Z" }, ] [[package]] @@ -1057,7 +1153,7 @@ wheels = [ [[package]] name = "openai" -version = "1.89.0" +version = "1.101.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -1069,9 +1165,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e5/50/3f71aa0fd00b12ed7e25295912a7b3ed4f77fbf814dcf553159aeb349546/openai-1.89.0.tar.gz", hash = "sha256:c9ae3e85a4dad280176a63f4afd54dc78deadd323bf2d275edc6b2eca6858971", size = 471871, upload-time = "2025-06-20T18:45:04.101Z" } +sdist = { url = "https://files.pythonhosted.org/packages/00/7c/eaf06b62281f5ca4f774c4cff066e6ddfd6a027e0ac791be16acec3a95e3/openai-1.101.0.tar.gz", hash = "sha256:29f56df2236069686e64aca0e13c24a4ec310545afb25ef7da2ab1a18523f22d", size = 518415, upload-time = "2025-08-21T21:11:01.645Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/a1/cfb21bd74d40565c61f4cb77d3beede56ba6adfe5f799c797606d1584576/openai-1.89.0-py3-none-any.whl", hash = "sha256:3fe395b3859c45336022026bbedf8e40a35e77c4ee5878ba5eaa6c8e2ff851f6", size = 734682, upload-time = "2025-06-20T18:45:02.402Z" }, + { url = "https://files.pythonhosted.org/packages/c8/a6/0e39baa335bbd1c66c7e0a41dbbec10c5a15ab95c1344e7f7beb28eee65a/openai-1.101.0-py3-none-any.whl", hash = "sha256:6539a446cce154f8d9fb42757acdfd3ed9357ab0d34fcac11096c461da87133b", size = 810772, upload-time = "2025-08-21T21:10:59.215Z" }, ] [[package]] @@ -1113,165 +1209,204 @@ dev = [ [[package]] name = "packaging" -version = "24.2" +version = "25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950, upload-time = "2024-11-08T09:47:47.202Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451, upload-time = "2024-11-08T09:47:44.722Z" }, + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, ] [[package]] name = "pdfminer-six" -version = "20250327" +version = "20250506" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "charset-normalizer" }, { name = "cryptography" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/e9/4688ff2dd985f21380b9c8cd2fa8004bc0f2691f2c301082d767caea7136/pdfminer_six-20250327.tar.gz", hash = "sha256:57f6c34c2702df04cfa3191622a3db0a922ced686d35283232b00094f8914aa1", size = 7381506, upload-time = "2025-03-27T07:51:57.78Z" } +sdist = { url = "https://files.pythonhosted.org/packages/78/46/5223d613ac4963e1f7c07b2660fe0e9e770102ec6bda8c038400113fb215/pdfminer_six-20250506.tar.gz", hash = "sha256:b03cc8df09cf3c7aba8246deae52e0bca7ebb112a38895b5e1d4f5dd2b8ca2e7", size = 7387678, upload-time = "2025-05-06T16:17:00.787Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/2f/409e174b5a0195aa6a814c7359a1285f1c887a4c84aff17ed03f607c06ba/pdfminer_six-20250327-py3-none-any.whl", hash = "sha256:5af494c85b1ecb7c28df5e3a26bb5234a8226a307503d9a09f4958bc154b16a9", size = 5617445, upload-time = "2025-03-27T07:51:55.502Z" }, + { url = "https://files.pythonhosted.org/packages/73/16/7a432c0101fa87457e75cb12c879e1749c5870a786525e2e0f42871d6462/pdfminer_six-20250506-py3-none-any.whl", hash = "sha256:d81ad173f62e5f841b53a8ba63af1a4a355933cfc0ffabd608e568b9193909e3", size = 5620187, upload-time = "2025-05-06T16:16:58.669Z" }, ] [[package]] name = "pdfplumber" -version = "0.11.6" +version = "0.11.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pdfminer-six" }, { name = "pillow" }, { name = "pypdfium2" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ce/37/dca4c8290c252f530e52e758f58e211bb047b34e15d52703355a357524f4/pdfplumber-0.11.6.tar.gz", hash = "sha256:d0f419e031641d9eac70dc18c60e1fc3ca2ec28cce7e149644923c030a0003ff", size = 115611, upload-time = "2025-03-28T03:19:02.353Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/0d/4135821aa7b1a0b77a29fac881ef0890b46b0b002290d04915ed7acc0043/pdfplumber-0.11.7.tar.gz", hash = "sha256:fa67773e5e599de1624255e9b75d1409297c5e1d7493b386ce63648637c67368", size = 115518, upload-time = "2025-06-12T11:30:49.864Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/c4/d2e09fbc937d1f76baae34e526662cc718e23a904321bf4a40282d190033/pdfplumber-0.11.6-py3-none-any.whl", hash = "sha256:169fc2b8dbf328c81a4e9bab30af0c304ad4b472fd7816616eabdb79dc5d9d17", size = 60233, upload-time = "2025-03-28T03:19:00.929Z" }, + { url = "https://files.pythonhosted.org/packages/db/e0/52b67d4f00e09e497aec4f71bc44d395605e8ebcea52543242ed34c25ef9/pdfplumber-0.11.7-py3-none-any.whl", hash = "sha256:edd2195cca68bd770da479cf528a737e362968ec2351e62a6c0b71ff612ac25e", size = 60029, upload-time = "2025-06-12T11:30:48.89Z" }, ] [[package]] name = "pillow" -version = "11.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/af/c097e544e7bd278333db77933e535098c259609c4eb3b85381109602fb5b/pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20", size = 46742715, upload-time = "2025-01-02T08:13:58.407Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/dd/d6/2000bfd8d5414fb70cbbe52c8332f2283ff30ed66a9cde42716c8ecbe22c/pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457", size = 3229968, upload-time = "2025-01-02T08:10:48.172Z" }, - { url = "https://files.pythonhosted.org/packages/d9/45/3fe487010dd9ce0a06adf9b8ff4f273cc0a44536e234b0fad3532a42c15b/pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35", size = 3101806, upload-time = "2025-01-02T08:10:50.981Z" }, - { url = "https://files.pythonhosted.org/packages/e3/72/776b3629c47d9d5f1c160113158a7a7ad177688d3a1159cd3b62ded5a33a/pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2", size = 4322283, upload-time = "2025-01-02T08:10:54.724Z" }, - { url = "https://files.pythonhosted.org/packages/e4/c2/e25199e7e4e71d64eeb869f5b72c7ddec70e0a87926398785ab944d92375/pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070", size = 4402945, upload-time = "2025-01-02T08:10:57.376Z" }, - { url = "https://files.pythonhosted.org/packages/c1/ed/51d6136c9d5911f78632b1b86c45241c712c5a80ed7fa7f9120a5dff1eba/pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6", size = 4361228, upload-time = "2025-01-02T08:11:02.374Z" }, - { url = "https://files.pythonhosted.org/packages/48/a4/fbfe9d5581d7b111b28f1d8c2762dee92e9821bb209af9fa83c940e507a0/pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1", size = 4484021, upload-time = "2025-01-02T08:11:04.431Z" }, - { url = "https://files.pythonhosted.org/packages/39/db/0b3c1a5018117f3c1d4df671fb8e47d08937f27519e8614bbe86153b65a5/pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2", size = 4287449, upload-time = "2025-01-02T08:11:07.412Z" }, - { url = "https://files.pythonhosted.org/packages/d9/58/bc128da7fea8c89fc85e09f773c4901e95b5936000e6f303222490c052f3/pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96", size = 4419972, upload-time = "2025-01-02T08:11:09.508Z" }, - { url = "https://files.pythonhosted.org/packages/5f/bb/58f34379bde9fe197f51841c5bbe8830c28bbb6d3801f16a83b8f2ad37df/pillow-11.1.0-cp311-cp311-win32.whl", hash = "sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f", size = 2291201, upload-time = "2025-01-02T08:11:13.056Z" }, - { url = "https://files.pythonhosted.org/packages/3a/c6/fce9255272bcf0c39e15abd2f8fd8429a954cf344469eaceb9d0d1366913/pillow-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761", size = 2625686, upload-time = "2025-01-02T08:11:16.547Z" }, - { url = "https://files.pythonhosted.org/packages/c8/52/8ba066d569d932365509054859f74f2a9abee273edcef5cd75e4bc3e831e/pillow-11.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71", size = 2375194, upload-time = "2025-01-02T08:11:19.897Z" }, - { url = "https://files.pythonhosted.org/packages/95/20/9ce6ed62c91c073fcaa23d216e68289e19d95fb8188b9fb7a63d36771db8/pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a", size = 3226818, upload-time = "2025-01-02T08:11:22.518Z" }, - { url = "https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b", size = 3101662, upload-time = "2025-01-02T08:11:25.19Z" }, - { url = "https://files.pythonhosted.org/packages/08/d9/892e705f90051c7a2574d9f24579c9e100c828700d78a63239676f960b74/pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3", size = 4329317, upload-time = "2025-01-02T08:11:30.371Z" }, - { url = "https://files.pythonhosted.org/packages/8c/aa/7f29711f26680eab0bcd3ecdd6d23ed6bce180d82e3f6380fb7ae35fcf3b/pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a", size = 4412999, upload-time = "2025-01-02T08:11:33.499Z" }, - { url = "https://files.pythonhosted.org/packages/c8/c4/8f0fe3b9e0f7196f6d0bbb151f9fba323d72a41da068610c4c960b16632a/pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1", size = 4368819, upload-time = "2025-01-02T08:11:37.304Z" }, - { url = "https://files.pythonhosted.org/packages/38/0d/84200ed6a871ce386ddc82904bfadc0c6b28b0c0ec78176871a4679e40b3/pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f", size = 4496081, upload-time = "2025-01-02T08:11:39.598Z" }, - { url = "https://files.pythonhosted.org/packages/84/9c/9bcd66f714d7e25b64118e3952d52841a4babc6d97b6d28e2261c52045d4/pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91", size = 4296513, upload-time = "2025-01-02T08:11:43.083Z" }, - { url = "https://files.pythonhosted.org/packages/db/61/ada2a226e22da011b45f7104c95ebda1b63dcbb0c378ad0f7c2a710f8fd2/pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c", size = 4431298, upload-time = "2025-01-02T08:11:46.626Z" }, - { url = "https://files.pythonhosted.org/packages/e7/c4/fc6e86750523f367923522014b821c11ebc5ad402e659d8c9d09b3c9d70c/pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6", size = 2291630, upload-time = "2025-01-02T08:11:49.401Z" }, - { url = "https://files.pythonhosted.org/packages/08/5c/2104299949b9d504baf3f4d35f73dbd14ef31bbd1ddc2c1b66a5b7dfda44/pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf", size = 2626369, upload-time = "2025-01-02T08:11:52.02Z" }, - { url = "https://files.pythonhosted.org/packages/37/f3/9b18362206b244167c958984b57c7f70a0289bfb59a530dd8af5f699b910/pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5", size = 2375240, upload-time = "2025-01-02T08:11:56.193Z" }, - { url = "https://files.pythonhosted.org/packages/b3/31/9ca79cafdce364fd5c980cd3416c20ce1bebd235b470d262f9d24d810184/pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc", size = 3226640, upload-time = "2025-01-02T08:11:58.329Z" }, - { url = "https://files.pythonhosted.org/packages/ac/0f/ff07ad45a1f172a497aa393b13a9d81a32e1477ef0e869d030e3c1532521/pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0", size = 3101437, upload-time = "2025-01-02T08:12:01.797Z" }, - { url = "https://files.pythonhosted.org/packages/08/2f/9906fca87a68d29ec4530be1f893149e0cb64a86d1f9f70a7cfcdfe8ae44/pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1", size = 4326605, upload-time = "2025-01-02T08:12:05.224Z" }, - { url = "https://files.pythonhosted.org/packages/b0/0f/f3547ee15b145bc5c8b336401b2d4c9d9da67da9dcb572d7c0d4103d2c69/pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec", size = 4411173, upload-time = "2025-01-02T08:12:08.281Z" }, - { url = "https://files.pythonhosted.org/packages/b1/df/bf8176aa5db515c5de584c5e00df9bab0713548fd780c82a86cba2c2fedb/pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5", size = 4369145, upload-time = "2025-01-02T08:12:11.411Z" }, - { url = "https://files.pythonhosted.org/packages/de/7c/7433122d1cfadc740f577cb55526fdc39129a648ac65ce64db2eb7209277/pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114", size = 4496340, upload-time = "2025-01-02T08:12:15.29Z" }, - { url = "https://files.pythonhosted.org/packages/25/46/dd94b93ca6bd555588835f2504bd90c00d5438fe131cf01cfa0c5131a19d/pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352", size = 4296906, upload-time = "2025-01-02T08:12:17.485Z" }, - { url = "https://files.pythonhosted.org/packages/a8/28/2f9d32014dfc7753e586db9add35b8a41b7a3b46540e965cb6d6bc607bd2/pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3", size = 4431759, upload-time = "2025-01-02T08:12:20.382Z" }, - { url = "https://files.pythonhosted.org/packages/33/48/19c2cbe7403870fbe8b7737d19eb013f46299cdfe4501573367f6396c775/pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9", size = 2291657, upload-time = "2025-01-02T08:12:23.922Z" }, - { url = "https://files.pythonhosted.org/packages/3b/ad/285c556747d34c399f332ba7c1a595ba245796ef3e22eae190f5364bb62b/pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c", size = 2626304, upload-time = "2025-01-02T08:12:28.069Z" }, - { url = "https://files.pythonhosted.org/packages/e5/7b/ef35a71163bf36db06e9c8729608f78dedf032fc8313d19bd4be5c2588f3/pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65", size = 2375117, upload-time = "2025-01-02T08:12:30.064Z" }, - { url = "https://files.pythonhosted.org/packages/79/30/77f54228401e84d6791354888549b45824ab0ffde659bafa67956303a09f/pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861", size = 3230060, upload-time = "2025-01-02T08:12:32.362Z" }, - { url = "https://files.pythonhosted.org/packages/ce/b1/56723b74b07dd64c1010fee011951ea9c35a43d8020acd03111f14298225/pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081", size = 3106192, upload-time = "2025-01-02T08:12:34.361Z" }, - { url = "https://files.pythonhosted.org/packages/e1/cd/7bf7180e08f80a4dcc6b4c3a0aa9e0b0ae57168562726a05dc8aa8fa66b0/pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c", size = 4446805, upload-time = "2025-01-02T08:12:36.99Z" }, - { url = "https://files.pythonhosted.org/packages/97/42/87c856ea30c8ed97e8efbe672b58c8304dee0573f8c7cab62ae9e31db6ae/pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547", size = 4530623, upload-time = "2025-01-02T08:12:41.912Z" }, - { url = "https://files.pythonhosted.org/packages/ff/41/026879e90c84a88e33fb00cc6bd915ac2743c67e87a18f80270dfe3c2041/pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab", size = 4465191, upload-time = "2025-01-02T08:12:45.186Z" }, - { url = "https://files.pythonhosted.org/packages/e5/fb/a7960e838bc5df57a2ce23183bfd2290d97c33028b96bde332a9057834d3/pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9", size = 2295494, upload-time = "2025-01-02T08:12:47.098Z" }, - { url = "https://files.pythonhosted.org/packages/d7/6c/6ec83ee2f6f0fda8d4cf89045c6be4b0373ebfc363ba8538f8c999f63fcd/pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe", size = 2631595, upload-time = "2025-01-02T08:12:50.47Z" }, - { url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651, upload-time = "2025-01-02T08:12:53.356Z" }, +version = "11.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload-time = "2025-07-01T09:16:30.666Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/26/77f8ed17ca4ffd60e1dcd220a6ec6d71210ba398cfa33a13a1cd614c5613/pillow-11.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1cd110edf822773368b396281a2293aeb91c90a2db00d78ea43e7e861631b722", size = 5316531, upload-time = "2025-07-01T09:13:59.203Z" }, + { url = "https://files.pythonhosted.org/packages/cb/39/ee475903197ce709322a17a866892efb560f57900d9af2e55f86db51b0a5/pillow-11.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c412fddd1b77a75aa904615ebaa6001f169b26fd467b4be93aded278266b288", size = 4686560, upload-time = "2025-07-01T09:14:01.101Z" }, + { url = "https://files.pythonhosted.org/packages/d5/90/442068a160fd179938ba55ec8c97050a612426fae5ec0a764e345839f76d/pillow-11.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1aa4de119a0ecac0a34a9c8bde33f34022e2e8f99104e47a3ca392fd60e37d", size = 5870978, upload-time = "2025-07-03T13:09:55.638Z" }, + { url = "https://files.pythonhosted.org/packages/13/92/dcdd147ab02daf405387f0218dcf792dc6dd5b14d2573d40b4caeef01059/pillow-11.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:91da1d88226663594e3f6b4b8c3c8d85bd504117d043740a8e0ec449087cc494", size = 7641168, upload-time = "2025-07-03T13:10:00.37Z" }, + { url = "https://files.pythonhosted.org/packages/6e/db/839d6ba7fd38b51af641aa904e2960e7a5644d60ec754c046b7d2aee00e5/pillow-11.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:643f189248837533073c405ec2f0bb250ba54598cf80e8c1e043381a60632f58", size = 5973053, upload-time = "2025-07-01T09:14:04.491Z" }, + { url = "https://files.pythonhosted.org/packages/f2/2f/d7675ecae6c43e9f12aa8d58b6012683b20b6edfbdac7abcb4e6af7a3784/pillow-11.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:106064daa23a745510dabce1d84f29137a37224831d88eb4ce94bb187b1d7e5f", size = 6640273, upload-time = "2025-07-01T09:14:06.235Z" }, + { url = "https://files.pythonhosted.org/packages/45/ad/931694675ede172e15b2ff03c8144a0ddaea1d87adb72bb07655eaffb654/pillow-11.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd8ff254faf15591e724dc7c4ddb6bf4793efcbe13802a4ae3e863cd300b493e", size = 6082043, upload-time = "2025-07-01T09:14:07.978Z" }, + { url = "https://files.pythonhosted.org/packages/3a/04/ba8f2b11fc80d2dd462d7abec16351b45ec99cbbaea4387648a44190351a/pillow-11.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:932c754c2d51ad2b2271fd01c3d121daaa35e27efae2a616f77bf164bc0b3e94", size = 6715516, upload-time = "2025-07-01T09:14:10.233Z" }, + { url = "https://files.pythonhosted.org/packages/48/59/8cd06d7f3944cc7d892e8533c56b0acb68399f640786313275faec1e3b6f/pillow-11.3.0-cp311-cp311-win32.whl", hash = "sha256:b4b8f3efc8d530a1544e5962bd6b403d5f7fe8b9e08227c6b255f98ad82b4ba0", size = 6274768, upload-time = "2025-07-01T09:14:11.921Z" }, + { url = "https://files.pythonhosted.org/packages/f1/cc/29c0f5d64ab8eae20f3232da8f8571660aa0ab4b8f1331da5c2f5f9a938e/pillow-11.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:1a992e86b0dd7aeb1f053cd506508c0999d710a8f07b4c791c63843fc6a807ac", size = 6986055, upload-time = "2025-07-01T09:14:13.623Z" }, + { url = "https://files.pythonhosted.org/packages/c6/df/90bd886fabd544c25addd63e5ca6932c86f2b701d5da6c7839387a076b4a/pillow-11.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:30807c931ff7c095620fe04448e2c2fc673fcbb1ffe2a7da3fb39613489b1ddd", size = 2423079, upload-time = "2025-07-01T09:14:15.268Z" }, + { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800, upload-time = "2025-07-01T09:14:17.648Z" }, + { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296, upload-time = "2025-07-01T09:14:19.828Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726, upload-time = "2025-07-03T13:10:04.448Z" }, + { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652, upload-time = "2025-07-03T13:10:10.391Z" }, + { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787, upload-time = "2025-07-01T09:14:21.63Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236, upload-time = "2025-07-01T09:14:23.321Z" }, + { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950, upload-time = "2025-07-01T09:14:25.237Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358, upload-time = "2025-07-01T09:14:27.053Z" }, + { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload-time = "2025-07-01T09:14:30.104Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload-time = "2025-07-01T09:14:31.899Z" }, + { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload-time = "2025-07-01T09:14:33.709Z" }, + { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328, upload-time = "2025-07-01T09:14:35.276Z" }, + { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652, upload-time = "2025-07-01T09:14:37.203Z" }, + { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443, upload-time = "2025-07-01T09:14:39.344Z" }, + { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474, upload-time = "2025-07-01T09:14:41.843Z" }, + { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038, upload-time = "2025-07-01T09:14:44.008Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407, upload-time = "2025-07-03T13:10:15.628Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094, upload-time = "2025-07-03T13:10:21.857Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503, upload-time = "2025-07-01T09:14:45.698Z" }, + { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574, upload-time = "2025-07-01T09:14:47.415Z" }, + { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060, upload-time = "2025-07-01T09:14:49.636Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407, upload-time = "2025-07-01T09:14:51.962Z" }, + { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841, upload-time = "2025-07-01T09:14:54.142Z" }, + { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450, upload-time = "2025-07-01T09:14:56.436Z" }, + { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055, upload-time = "2025-07-01T09:14:58.072Z" }, + { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110, upload-time = "2025-07-01T09:14:59.79Z" }, + { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547, upload-time = "2025-07-01T09:15:01.648Z" }, + { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554, upload-time = "2025-07-03T13:10:27.018Z" }, + { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132, upload-time = "2025-07-03T13:10:33.01Z" }, + { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001, upload-time = "2025-07-01T09:15:03.365Z" }, + { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814, upload-time = "2025-07-01T09:15:05.655Z" }, + { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124, upload-time = "2025-07-01T09:15:07.358Z" }, + { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186, upload-time = "2025-07-01T09:15:09.317Z" }, + { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload-time = "2025-07-01T09:15:11.311Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload-time = "2025-07-01T09:15:13.164Z" }, + { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload-time = "2025-07-01T09:15:15.695Z" }, + { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520, upload-time = "2025-07-01T09:15:17.429Z" }, + { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116, upload-time = "2025-07-01T09:15:19.423Z" }, + { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597, upload-time = "2025-07-03T13:10:38.404Z" }, + { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246, upload-time = "2025-07-03T13:10:44.987Z" }, + { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336, upload-time = "2025-07-01T09:15:21.237Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699, upload-time = "2025-07-01T09:15:23.186Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789, upload-time = "2025-07-01T09:15:25.1Z" }, + { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386, upload-time = "2025-07-01T09:15:27.378Z" }, + { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911, upload-time = "2025-07-01T09:15:29.294Z" }, + { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383, upload-time = "2025-07-01T09:15:31.128Z" }, + { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385, upload-time = "2025-07-01T09:15:33.328Z" }, + { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129, upload-time = "2025-07-01T09:15:35.194Z" }, + { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580, upload-time = "2025-07-01T09:15:37.114Z" }, + { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860, upload-time = "2025-07-03T13:10:50.248Z" }, + { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694, upload-time = "2025-07-03T13:10:56.432Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888, upload-time = "2025-07-01T09:15:39.436Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330, upload-time = "2025-07-01T09:15:41.269Z" }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089, upload-time = "2025-07-01T09:15:43.13Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206, upload-time = "2025-07-01T09:15:44.937Z" }, + { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370, upload-time = "2025-07-01T09:15:46.673Z" }, + { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500, upload-time = "2025-07-01T09:15:48.512Z" }, + { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835, upload-time = "2025-07-01T09:15:50.399Z" }, + { url = "https://files.pythonhosted.org/packages/9e/e3/6fa84033758276fb31da12e5fb66ad747ae83b93c67af17f8c6ff4cc8f34/pillow-11.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7c8ec7a017ad1bd562f93dbd8505763e688d388cde6e4a010ae1486916e713e6", size = 5270566, upload-time = "2025-07-01T09:16:19.801Z" }, + { url = "https://files.pythonhosted.org/packages/5b/ee/e8d2e1ab4892970b561e1ba96cbd59c0d28cf66737fc44abb2aec3795a4e/pillow-11.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9ab6ae226de48019caa8074894544af5b53a117ccb9d3b3dcb2871464c829438", size = 4654618, upload-time = "2025-07-01T09:16:21.818Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6d/17f80f4e1f0761f02160fc433abd4109fa1548dcfdca46cfdadaf9efa565/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe27fb049cdcca11f11a7bfda64043c37b30e6b91f10cb5bab275806c32f6ab3", size = 4874248, upload-time = "2025-07-03T13:11:20.738Z" }, + { url = "https://files.pythonhosted.org/packages/de/5f/c22340acd61cef960130585bbe2120e2fd8434c214802f07e8c03596b17e/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:465b9e8844e3c3519a983d58b80be3f668e2a7a5db97f2784e7079fbc9f9822c", size = 6583963, upload-time = "2025-07-03T13:11:26.283Z" }, + { url = "https://files.pythonhosted.org/packages/31/5e/03966aedfbfcbb4d5f8aa042452d3361f325b963ebbadddac05b122e47dd/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5418b53c0d59b3824d05e029669efa023bbef0f3e92e75ec8428f3799487f361", size = 4957170, upload-time = "2025-07-01T09:16:23.762Z" }, + { url = "https://files.pythonhosted.org/packages/cc/2d/e082982aacc927fc2cab48e1e731bdb1643a1406acace8bed0900a61464e/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:504b6f59505f08ae014f724b6207ff6222662aab5cc9542577fb084ed0676ac7", size = 5581505, upload-time = "2025-07-01T09:16:25.593Z" }, + { url = "https://files.pythonhosted.org/packages/34/e7/ae39f538fd6844e982063c3a5e4598b8ced43b9633baa3a85ef33af8c05c/pillow-11.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c84d689db21a1c397d001aa08241044aa2069e7587b398c8cc63020390b1c1b8", size = 6984598, upload-time = "2025-07-01T09:16:27.732Z" }, ] [[package]] name = "pluggy" -version = "1.5.0" +version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955, upload-time = "2024-04-20T21:34:42.531Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556, upload-time = "2024-04-20T21:34:40.434Z" }, -] - -[[package]] -name = "portalocker" -version = "2.10.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pywin32", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ed/d3/c6c64067759e87af98cc668c1cc75171347d0f1577fab7ca3749134e3cd4/portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f", size = 40891, upload-time = "2024-07-13T23:15:34.86Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/fb/a70a4214956182e0d7a9099ab17d50bfcba1056188e9b14f35b9e2b62a0d/portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf", size = 18423, upload-time = "2024-07-13T23:15:32.602Z" }, + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] [[package]] name = "propcache" -version = "0.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/c8/2a13f78d82211490855b2fb303b6721348d0787fdd9a12ac46d99d3acde1/propcache-0.2.1.tar.gz", hash = "sha256:3f77ce728b19cb537714499928fe800c3dda29e8d9428778fc7c186da4c09a64", size = 41735, upload-time = "2024-12-01T18:29:16.437Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/0f/2913b6791ebefb2b25b4efd4bb2299c985e09786b9f5b19184a88e5778dd/propcache-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ffc3cca89bb438fb9c95c13fc874012f7b9466b89328c3c8b1aa93cdcfadd16", size = 79297, upload-time = "2024-12-01T18:27:39.425Z" }, - { url = "https://files.pythonhosted.org/packages/cf/73/af2053aeccd40b05d6e19058419ac77674daecdd32478088b79375b9ab54/propcache-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f174bbd484294ed9fdf09437f889f95807e5f229d5d93588d34e92106fbf6717", size = 45611, upload-time = "2024-12-01T18:27:40.944Z" }, - { url = "https://files.pythonhosted.org/packages/3c/09/8386115ba7775ea3b9537730e8cf718d83bbf95bffe30757ccf37ec4e5da/propcache-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:70693319e0b8fd35dd863e3e29513875eb15c51945bf32519ef52927ca883bc3", size = 45146, upload-time = "2024-12-01T18:27:42.106Z" }, - { url = "https://files.pythonhosted.org/packages/03/7a/793aa12f0537b2e520bf09f4c6833706b63170a211ad042ca71cbf79d9cb/propcache-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b480c6a4e1138e1aa137c0079b9b6305ec6dcc1098a8ca5196283e8a49df95a9", size = 232136, upload-time = "2024-12-01T18:27:43.293Z" }, - { url = "https://files.pythonhosted.org/packages/f1/38/b921b3168d72111769f648314100558c2ea1d52eb3d1ba7ea5c4aa6f9848/propcache-0.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d27b84d5880f6d8aa9ae3edb253c59d9f6642ffbb2c889b78b60361eed449787", size = 239706, upload-time = "2024-12-01T18:27:44.916Z" }, - { url = "https://files.pythonhosted.org/packages/14/29/4636f500c69b5edea7786db3c34eb6166f3384b905665ce312a6e42c720c/propcache-0.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:857112b22acd417c40fa4595db2fe28ab900c8c5fe4670c7989b1c0230955465", size = 238531, upload-time = "2024-12-01T18:27:46.228Z" }, - { url = "https://files.pythonhosted.org/packages/85/14/01fe53580a8e1734ebb704a3482b7829a0ef4ea68d356141cf0994d9659b/propcache-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf6c4150f8c0e32d241436526f3c3f9cbd34429492abddbada2ffcff506c51af", size = 231063, upload-time = "2024-12-01T18:27:47.72Z" }, - { url = "https://files.pythonhosted.org/packages/33/5c/1d961299f3c3b8438301ccfbff0143b69afcc30c05fa28673cface692305/propcache-0.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66d4cfda1d8ed687daa4bc0274fcfd5267873db9a5bc0418c2da19273040eeb7", size = 220134, upload-time = "2024-12-01T18:27:49.044Z" }, - { url = "https://files.pythonhosted.org/packages/00/d0/ed735e76db279ba67a7d3b45ba4c654e7b02bc2f8050671ec365d8665e21/propcache-0.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2f992c07c0fca81655066705beae35fc95a2fa7366467366db627d9f2ee097f", size = 220009, upload-time = "2024-12-01T18:27:50.343Z" }, - { url = "https://files.pythonhosted.org/packages/75/90/ee8fab7304ad6533872fee982cfff5a53b63d095d78140827d93de22e2d4/propcache-0.2.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:4a571d97dbe66ef38e472703067021b1467025ec85707d57e78711c085984e54", size = 212199, upload-time = "2024-12-01T18:27:52.389Z" }, - { url = "https://files.pythonhosted.org/packages/eb/ec/977ffaf1664f82e90737275873461695d4c9407d52abc2f3c3e24716da13/propcache-0.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bb6178c241278d5fe853b3de743087be7f5f4c6f7d6d22a3b524d323eecec505", size = 214827, upload-time = "2024-12-01T18:27:54.423Z" }, - { url = "https://files.pythonhosted.org/packages/57/48/031fb87ab6081764054821a71b71942161619549396224cbb242922525e8/propcache-0.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ad1af54a62ffe39cf34db1aa6ed1a1873bd548f6401db39d8e7cd060b9211f82", size = 228009, upload-time = "2024-12-01T18:27:55.639Z" }, - { url = "https://files.pythonhosted.org/packages/1a/06/ef1390f2524850838f2390421b23a8b298f6ce3396a7cc6d39dedd4047b0/propcache-0.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e7048abd75fe40712005bcfc06bb44b9dfcd8e101dda2ecf2f5aa46115ad07ca", size = 231638, upload-time = "2024-12-01T18:27:57.655Z" }, - { url = "https://files.pythonhosted.org/packages/38/2a/101e6386d5a93358395da1d41642b79c1ee0f3b12e31727932b069282b1d/propcache-0.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:160291c60081f23ee43d44b08a7e5fb76681221a8e10b3139618c5a9a291b84e", size = 222788, upload-time = "2024-12-01T18:27:58.917Z" }, - { url = "https://files.pythonhosted.org/packages/db/81/786f687951d0979007e05ad9346cd357e50e3d0b0f1a1d6074df334b1bbb/propcache-0.2.1-cp311-cp311-win32.whl", hash = "sha256:819ce3b883b7576ca28da3861c7e1a88afd08cc8c96908e08a3f4dd64a228034", size = 40170, upload-time = "2024-12-01T18:28:00.307Z" }, - { url = "https://files.pythonhosted.org/packages/cf/59/7cc7037b295d5772eceb426358bb1b86e6cab4616d971bd74275395d100d/propcache-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:edc9fc7051e3350643ad929df55c451899bb9ae6d24998a949d2e4c87fb596d3", size = 44404, upload-time = "2024-12-01T18:28:02.129Z" }, - { url = "https://files.pythonhosted.org/packages/4c/28/1d205fe49be8b1b4df4c50024e62480a442b1a7b818e734308bb0d17e7fb/propcache-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:081a430aa8d5e8876c6909b67bd2d937bfd531b0382d3fdedb82612c618bc41a", size = 79588, upload-time = "2024-12-01T18:28:03.327Z" }, - { url = "https://files.pythonhosted.org/packages/21/ee/fc4d893f8d81cd4971affef2a6cb542b36617cd1d8ce56b406112cb80bf7/propcache-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2ccec9ac47cf4e04897619c0e0c1a48c54a71bdf045117d3a26f80d38ab1fb0", size = 45825, upload-time = "2024-12-01T18:28:06.78Z" }, - { url = "https://files.pythonhosted.org/packages/4a/de/bbe712f94d088da1d237c35d735f675e494a816fd6f54e9db2f61ef4d03f/propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:14d86fe14b7e04fa306e0c43cdbeebe6b2c2156a0c9ce56b815faacc193e320d", size = 45357, upload-time = "2024-12-01T18:28:08.575Z" }, - { url = "https://files.pythonhosted.org/packages/7f/14/7ae06a6cf2a2f1cb382586d5a99efe66b0b3d0c6f9ac2f759e6f7af9d7cf/propcache-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:049324ee97bb67285b49632132db351b41e77833678432be52bdd0289c0e05e4", size = 241869, upload-time = "2024-12-01T18:28:10.396Z" }, - { url = "https://files.pythonhosted.org/packages/cc/59/227a78be960b54a41124e639e2c39e8807ac0c751c735a900e21315f8c2b/propcache-0.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cd9a1d071158de1cc1c71a26014dcdfa7dd3d5f4f88c298c7f90ad6f27bb46d", size = 247884, upload-time = "2024-12-01T18:28:11.746Z" }, - { url = "https://files.pythonhosted.org/packages/84/58/f62b4ffaedf88dc1b17f04d57d8536601e4e030feb26617228ef930c3279/propcache-0.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98110aa363f1bb4c073e8dcfaefd3a5cea0f0834c2aab23dda657e4dab2f53b5", size = 248486, upload-time = "2024-12-01T18:28:13.048Z" }, - { url = "https://files.pythonhosted.org/packages/1c/07/ebe102777a830bca91bbb93e3479cd34c2ca5d0361b83be9dbd93104865e/propcache-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:647894f5ae99c4cf6bb82a1bb3a796f6e06af3caa3d32e26d2350d0e3e3faf24", size = 243649, upload-time = "2024-12-01T18:28:14.297Z" }, - { url = "https://files.pythonhosted.org/packages/ed/bc/4f7aba7f08f520376c4bb6a20b9a981a581b7f2e385fa0ec9f789bb2d362/propcache-0.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfd3223c15bebe26518d58ccf9a39b93948d3dcb3e57a20480dfdd315356baff", size = 229103, upload-time = "2024-12-01T18:28:15.913Z" }, - { url = "https://files.pythonhosted.org/packages/fe/d5/04ac9cd4e51a57a96f78795e03c5a0ddb8f23ec098b86f92de028d7f2a6b/propcache-0.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d71264a80f3fcf512eb4f18f59423fe82d6e346ee97b90625f283df56aee103f", size = 226607, upload-time = "2024-12-01T18:28:18.015Z" }, - { url = "https://files.pythonhosted.org/packages/e3/f0/24060d959ea41d7a7cc7fdbf68b31852331aabda914a0c63bdb0e22e96d6/propcache-0.2.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e73091191e4280403bde6c9a52a6999d69cdfde498f1fdf629105247599b57ec", size = 221153, upload-time = "2024-12-01T18:28:19.937Z" }, - { url = "https://files.pythonhosted.org/packages/77/a7/3ac76045a077b3e4de4859a0753010765e45749bdf53bd02bc4d372da1a0/propcache-0.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3935bfa5fede35fb202c4b569bb9c042f337ca4ff7bd540a0aa5e37131659348", size = 222151, upload-time = "2024-12-01T18:28:21.186Z" }, - { url = "https://files.pythonhosted.org/packages/e7/af/5e29da6f80cebab3f5a4dcd2a3240e7f56f2c4abf51cbfcc99be34e17f0b/propcache-0.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f508b0491767bb1f2b87fdfacaba5f7eddc2f867740ec69ece6d1946d29029a6", size = 233812, upload-time = "2024-12-01T18:28:22.816Z" }, - { url = "https://files.pythonhosted.org/packages/8c/89/ebe3ad52642cc5509eaa453e9f4b94b374d81bae3265c59d5c2d98efa1b4/propcache-0.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1672137af7c46662a1c2be1e8dc78cb6d224319aaa40271c9257d886be4363a6", size = 238829, upload-time = "2024-12-01T18:28:24.071Z" }, - { url = "https://files.pythonhosted.org/packages/e9/2f/6b32f273fa02e978b7577159eae7471b3cfb88b48563b1c2578b2d7ca0bb/propcache-0.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b74c261802d3d2b85c9df2dfb2fa81b6f90deeef63c2db9f0e029a3cac50b518", size = 230704, upload-time = "2024-12-01T18:28:25.314Z" }, - { url = "https://files.pythonhosted.org/packages/5c/2e/f40ae6ff5624a5f77edd7b8359b208b5455ea113f68309e2b00a2e1426b6/propcache-0.2.1-cp312-cp312-win32.whl", hash = "sha256:d09c333d36c1409d56a9d29b3a1b800a42c76a57a5a8907eacdbce3f18768246", size = 40050, upload-time = "2024-12-01T18:28:26.617Z" }, - { url = "https://files.pythonhosted.org/packages/3b/77/a92c3ef994e47180862b9d7d11e37624fb1c00a16d61faf55115d970628b/propcache-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:c214999039d4f2a5b2073ac506bba279945233da8c786e490d411dfc30f855c1", size = 44117, upload-time = "2024-12-01T18:28:27.643Z" }, - { url = "https://files.pythonhosted.org/packages/0f/2a/329e0547cf2def8857157f9477669043e75524cc3e6251cef332b3ff256f/propcache-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aca405706e0b0a44cc6bfd41fbe89919a6a56999157f6de7e182a990c36e37bc", size = 77002, upload-time = "2024-12-01T18:28:29.025Z" }, - { url = "https://files.pythonhosted.org/packages/12/2d/c4df5415e2382f840dc2ecbca0eeb2293024bc28e57a80392f2012b4708c/propcache-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:12d1083f001ace206fe34b6bdc2cb94be66d57a850866f0b908972f90996b3e9", size = 44639, upload-time = "2024-12-01T18:28:30.199Z" }, - { url = "https://files.pythonhosted.org/packages/d0/5a/21aaa4ea2f326edaa4e240959ac8b8386ea31dedfdaa636a3544d9e7a408/propcache-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d93f3307ad32a27bda2e88ec81134b823c240aa3abb55821a8da553eed8d9439", size = 44049, upload-time = "2024-12-01T18:28:31.308Z" }, - { url = "https://files.pythonhosted.org/packages/4e/3e/021b6cd86c0acc90d74784ccbb66808b0bd36067a1bf3e2deb0f3845f618/propcache-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba278acf14471d36316159c94a802933d10b6a1e117b8554fe0d0d9b75c9d536", size = 224819, upload-time = "2024-12-01T18:28:32.755Z" }, - { url = "https://files.pythonhosted.org/packages/3c/57/c2fdeed1b3b8918b1770a133ba5c43ad3d78e18285b0c06364861ef5cc38/propcache-0.2.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e6281aedfca15301c41f74d7005e6e3f4ca143584ba696ac69df4f02f40d629", size = 229625, upload-time = "2024-12-01T18:28:34.083Z" }, - { url = "https://files.pythonhosted.org/packages/9d/81/70d4ff57bf2877b5780b466471bebf5892f851a7e2ca0ae7ffd728220281/propcache-0.2.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b750a8e5a1262434fb1517ddf64b5de58327f1adc3524a5e44c2ca43305eb0b", size = 232934, upload-time = "2024-12-01T18:28:35.434Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b9/bb51ea95d73b3fb4100cb95adbd4e1acaf2cbb1fd1083f5468eeb4a099a8/propcache-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf72af5e0fb40e9babf594308911436c8efde3cb5e75b6f206c34ad18be5c052", size = 227361, upload-time = "2024-12-01T18:28:36.777Z" }, - { url = "https://files.pythonhosted.org/packages/f1/20/3c6d696cd6fd70b29445960cc803b1851a1131e7a2e4ee261ee48e002bcd/propcache-0.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2d0a12018b04f4cb820781ec0dffb5f7c7c1d2a5cd22bff7fb055a2cb19ebce", size = 213904, upload-time = "2024-12-01T18:28:38.041Z" }, - { url = "https://files.pythonhosted.org/packages/a1/cb/1593bfc5ac6d40c010fa823f128056d6bc25b667f5393781e37d62f12005/propcache-0.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e800776a79a5aabdb17dcc2346a7d66d0777e942e4cd251defeb084762ecd17d", size = 212632, upload-time = "2024-12-01T18:28:39.401Z" }, - { url = "https://files.pythonhosted.org/packages/6d/5c/e95617e222be14a34c709442a0ec179f3207f8a2b900273720501a70ec5e/propcache-0.2.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:4160d9283bd382fa6c0c2b5e017acc95bc183570cd70968b9202ad6d8fc48dce", size = 207897, upload-time = "2024-12-01T18:28:40.996Z" }, - { url = "https://files.pythonhosted.org/packages/8e/3b/56c5ab3dc00f6375fbcdeefdede5adf9bee94f1fab04adc8db118f0f9e25/propcache-0.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:30b43e74f1359353341a7adb783c8f1b1c676367b011709f466f42fda2045e95", size = 208118, upload-time = "2024-12-01T18:28:42.38Z" }, - { url = "https://files.pythonhosted.org/packages/86/25/d7ef738323fbc6ebcbce33eb2a19c5e07a89a3df2fded206065bd5e868a9/propcache-0.2.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:58791550b27d5488b1bb52bc96328456095d96206a250d28d874fafe11b3dfaf", size = 217851, upload-time = "2024-12-01T18:28:43.655Z" }, - { url = "https://files.pythonhosted.org/packages/b3/77/763e6cef1852cf1ba740590364ec50309b89d1c818e3256d3929eb92fabf/propcache-0.2.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0f022d381747f0dfe27e99d928e31bc51a18b65bb9e481ae0af1380a6725dd1f", size = 222630, upload-time = "2024-12-01T18:28:45.663Z" }, - { url = "https://files.pythonhosted.org/packages/4f/e9/0f86be33602089c701696fbed8d8c4c07b6ee9605c5b7536fd27ed540c5b/propcache-0.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:297878dc9d0a334358f9b608b56d02e72899f3b8499fc6044133f0d319e2ec30", size = 216269, upload-time = "2024-12-01T18:28:47.602Z" }, - { url = "https://files.pythonhosted.org/packages/cc/02/5ac83217d522394b6a2e81a2e888167e7ca629ef6569a3f09852d6dcb01a/propcache-0.2.1-cp313-cp313-win32.whl", hash = "sha256:ddfab44e4489bd79bda09d84c430677fc7f0a4939a73d2bba3073036f487a0a6", size = 39472, upload-time = "2024-12-01T18:28:48.983Z" }, - { url = "https://files.pythonhosted.org/packages/f4/33/d6f5420252a36034bc8a3a01171bc55b4bff5df50d1c63d9caa50693662f/propcache-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:556fc6c10989f19a179e4321e5d678db8eb2924131e64652a51fe83e4c3db0e1", size = 43363, upload-time = "2024-12-01T18:28:50.025Z" }, - { url = "https://files.pythonhosted.org/packages/41/b6/c5319caea262f4821995dca2107483b94a3345d4607ad797c76cb9c36bcc/propcache-0.2.1-py3-none-any.whl", hash = "sha256:52277518d6aae65536e9cea52d4e7fd2f7a66f4aa2d30ed3f2fcea620ace3c54", size = 11818, upload-time = "2024-12-01T18:29:14.716Z" }, +version = "0.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/16/43264e4a779dd8588c21a70f0709665ee8f611211bdd2c87d952cfa7c776/propcache-0.3.2.tar.gz", hash = "sha256:20d7d62e4e7ef05f221e0db2856b979540686342e7dd9973b815599c7057e168", size = 44139, upload-time = "2025-06-09T22:56:06.081Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/8d/e8b436717ab9c2cfc23b116d2c297305aa4cd8339172a456d61ebf5669b8/propcache-0.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0b8d2f607bd8f80ddc04088bc2a037fdd17884a6fcadc47a96e334d72f3717be", size = 74207, upload-time = "2025-06-09T22:54:05.399Z" }, + { url = "https://files.pythonhosted.org/packages/d6/29/1e34000e9766d112171764b9fa3226fa0153ab565d0c242c70e9945318a7/propcache-0.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06766d8f34733416e2e34f46fea488ad5d60726bb9481d3cddf89a6fa2d9603f", size = 43648, upload-time = "2025-06-09T22:54:08.023Z" }, + { url = "https://files.pythonhosted.org/packages/46/92/1ad5af0df781e76988897da39b5f086c2bf0f028b7f9bd1f409bb05b6874/propcache-0.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2dc1f4a1df4fecf4e6f68013575ff4af84ef6f478fe5344317a65d38a8e6dc9", size = 43496, upload-time = "2025-06-09T22:54:09.228Z" }, + { url = "https://files.pythonhosted.org/packages/b3/ce/e96392460f9fb68461fabab3e095cb00c8ddf901205be4eae5ce246e5b7e/propcache-0.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be29c4f4810c5789cf10ddf6af80b041c724e629fa51e308a7a0fb19ed1ef7bf", size = 217288, upload-time = "2025-06-09T22:54:10.466Z" }, + { url = "https://files.pythonhosted.org/packages/c5/2a/866726ea345299f7ceefc861a5e782b045545ae6940851930a6adaf1fca6/propcache-0.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59d61f6970ecbd8ff2e9360304d5c8876a6abd4530cb752c06586849ac8a9dc9", size = 227456, upload-time = "2025-06-09T22:54:11.828Z" }, + { url = "https://files.pythonhosted.org/packages/de/03/07d992ccb6d930398689187e1b3c718339a1c06b8b145a8d9650e4726166/propcache-0.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:62180e0b8dbb6b004baec00a7983e4cc52f5ada9cd11f48c3528d8cfa7b96a66", size = 225429, upload-time = "2025-06-09T22:54:13.823Z" }, + { url = "https://files.pythonhosted.org/packages/5d/e6/116ba39448753b1330f48ab8ba927dcd6cf0baea8a0ccbc512dfb49ba670/propcache-0.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c144ca294a204c470f18cf4c9d78887810d04a3e2fbb30eea903575a779159df", size = 213472, upload-time = "2025-06-09T22:54:15.232Z" }, + { url = "https://files.pythonhosted.org/packages/a6/85/f01f5d97e54e428885a5497ccf7f54404cbb4f906688a1690cd51bf597dc/propcache-0.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5c2a784234c28854878d68978265617aa6dc0780e53d44b4d67f3651a17a9a2", size = 204480, upload-time = "2025-06-09T22:54:17.104Z" }, + { url = "https://files.pythonhosted.org/packages/e3/79/7bf5ab9033b8b8194cc3f7cf1aaa0e9c3256320726f64a3e1f113a812dce/propcache-0.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5745bc7acdafa978ca1642891b82c19238eadc78ba2aaa293c6863b304e552d7", size = 214530, upload-time = "2025-06-09T22:54:18.512Z" }, + { url = "https://files.pythonhosted.org/packages/31/0b/bd3e0c00509b609317df4a18e6b05a450ef2d9a963e1d8bc9c9415d86f30/propcache-0.3.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:c0075bf773d66fa8c9d41f66cc132ecc75e5bb9dd7cce3cfd14adc5ca184cb95", size = 205230, upload-time = "2025-06-09T22:54:19.947Z" }, + { url = "https://files.pythonhosted.org/packages/7a/23/fae0ff9b54b0de4e819bbe559508da132d5683c32d84d0dc2ccce3563ed4/propcache-0.3.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5f57aa0847730daceff0497f417c9de353c575d8da3579162cc74ac294c5369e", size = 206754, upload-time = "2025-06-09T22:54:21.716Z" }, + { url = "https://files.pythonhosted.org/packages/b7/7f/ad6a3c22630aaa5f618b4dc3c3598974a72abb4c18e45a50b3cdd091eb2f/propcache-0.3.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:eef914c014bf72d18efb55619447e0aecd5fb7c2e3fa7441e2e5d6099bddff7e", size = 218430, upload-time = "2025-06-09T22:54:23.17Z" }, + { url = "https://files.pythonhosted.org/packages/5b/2c/ba4f1c0e8a4b4c75910742f0d333759d441f65a1c7f34683b4a74c0ee015/propcache-0.3.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2a4092e8549031e82facf3decdbc0883755d5bbcc62d3aea9d9e185549936dcf", size = 223884, upload-time = "2025-06-09T22:54:25.539Z" }, + { url = "https://files.pythonhosted.org/packages/88/e4/ebe30fc399e98572019eee82ad0caf512401661985cbd3da5e3140ffa1b0/propcache-0.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:85871b050f174bc0bfb437efbdb68aaf860611953ed12418e4361bc9c392749e", size = 211480, upload-time = "2025-06-09T22:54:26.892Z" }, + { url = "https://files.pythonhosted.org/packages/96/0a/7d5260b914e01d1d0906f7f38af101f8d8ed0dc47426219eeaf05e8ea7c2/propcache-0.3.2-cp311-cp311-win32.whl", hash = "sha256:36c8d9b673ec57900c3554264e630d45980fd302458e4ac801802a7fd2ef7897", size = 37757, upload-time = "2025-06-09T22:54:28.241Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2d/89fe4489a884bc0da0c3278c552bd4ffe06a1ace559db5ef02ef24ab446b/propcache-0.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53af8cb6a781b02d2ea079b5b853ba9430fcbe18a8e3ce647d5982a3ff69f39", size = 41500, upload-time = "2025-06-09T22:54:29.4Z" }, + { url = "https://files.pythonhosted.org/packages/a8/42/9ca01b0a6f48e81615dca4765a8f1dd2c057e0540f6116a27dc5ee01dfb6/propcache-0.3.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8de106b6c84506b31c27168582cd3cb3000a6412c16df14a8628e5871ff83c10", size = 73674, upload-time = "2025-06-09T22:54:30.551Z" }, + { url = "https://files.pythonhosted.org/packages/af/6e/21293133beb550f9c901bbece755d582bfaf2176bee4774000bd4dd41884/propcache-0.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:28710b0d3975117239c76600ea351934ac7b5ff56e60953474342608dbbb6154", size = 43570, upload-time = "2025-06-09T22:54:32.296Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c8/0393a0a3a2b8760eb3bde3c147f62b20044f0ddac81e9d6ed7318ec0d852/propcache-0.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce26862344bdf836650ed2487c3d724b00fbfec4233a1013f597b78c1cb73615", size = 43094, upload-time = "2025-06-09T22:54:33.929Z" }, + { url = "https://files.pythonhosted.org/packages/37/2c/489afe311a690399d04a3e03b069225670c1d489eb7b044a566511c1c498/propcache-0.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bca54bd347a253af2cf4544bbec232ab982f4868de0dd684246b67a51bc6b1db", size = 226958, upload-time = "2025-06-09T22:54:35.186Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ca/63b520d2f3d418c968bf596839ae26cf7f87bead026b6192d4da6a08c467/propcache-0.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55780d5e9a2ddc59711d727226bb1ba83a22dd32f64ee15594b9392b1f544eb1", size = 234894, upload-time = "2025-06-09T22:54:36.708Z" }, + { url = "https://files.pythonhosted.org/packages/11/60/1d0ed6fff455a028d678df30cc28dcee7af77fa2b0e6962ce1df95c9a2a9/propcache-0.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:035e631be25d6975ed87ab23153db6a73426a48db688070d925aa27e996fe93c", size = 233672, upload-time = "2025-06-09T22:54:38.062Z" }, + { url = "https://files.pythonhosted.org/packages/37/7c/54fd5301ef38505ab235d98827207176a5c9b2aa61939b10a460ca53e123/propcache-0.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee6f22b6eaa39297c751d0e80c0d3a454f112f5c6481214fcf4c092074cecd67", size = 224395, upload-time = "2025-06-09T22:54:39.634Z" }, + { url = "https://files.pythonhosted.org/packages/ee/1a/89a40e0846f5de05fdc6779883bf46ba980e6df4d2ff8fb02643de126592/propcache-0.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ca3aee1aa955438c4dba34fc20a9f390e4c79967257d830f137bd5a8a32ed3b", size = 212510, upload-time = "2025-06-09T22:54:41.565Z" }, + { url = "https://files.pythonhosted.org/packages/5e/33/ca98368586c9566a6b8d5ef66e30484f8da84c0aac3f2d9aec6d31a11bd5/propcache-0.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7a4f30862869fa2b68380d677cc1c5fcf1e0f2b9ea0cf665812895c75d0ca3b8", size = 222949, upload-time = "2025-06-09T22:54:43.038Z" }, + { url = "https://files.pythonhosted.org/packages/ba/11/ace870d0aafe443b33b2f0b7efdb872b7c3abd505bfb4890716ad7865e9d/propcache-0.3.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b77ec3c257d7816d9f3700013639db7491a434644c906a2578a11daf13176251", size = 217258, upload-time = "2025-06-09T22:54:44.376Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d2/86fd6f7adffcfc74b42c10a6b7db721d1d9ca1055c45d39a1a8f2a740a21/propcache-0.3.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cab90ac9d3f14b2d5050928483d3d3b8fb6b4018893fc75710e6aa361ecb2474", size = 213036, upload-time = "2025-06-09T22:54:46.243Z" }, + { url = "https://files.pythonhosted.org/packages/07/94/2d7d1e328f45ff34a0a284cf5a2847013701e24c2a53117e7c280a4316b3/propcache-0.3.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0b504d29f3c47cf6b9e936c1852246c83d450e8e063d50562115a6be6d3a2535", size = 227684, upload-time = "2025-06-09T22:54:47.63Z" }, + { url = "https://files.pythonhosted.org/packages/b7/05/37ae63a0087677e90b1d14710e532ff104d44bc1efa3b3970fff99b891dc/propcache-0.3.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:ce2ac2675a6aa41ddb2a0c9cbff53780a617ac3d43e620f8fd77ba1c84dcfc06", size = 234562, upload-time = "2025-06-09T22:54:48.982Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7c/3f539fcae630408d0bd8bf3208b9a647ccad10976eda62402a80adf8fc34/propcache-0.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:62b4239611205294cc433845b914131b2a1f03500ff3c1ed093ed216b82621e1", size = 222142, upload-time = "2025-06-09T22:54:50.424Z" }, + { url = "https://files.pythonhosted.org/packages/7c/d2/34b9eac8c35f79f8a962546b3e97e9d4b990c420ee66ac8255d5d9611648/propcache-0.3.2-cp312-cp312-win32.whl", hash = "sha256:df4a81b9b53449ebc90cc4deefb052c1dd934ba85012aa912c7ea7b7e38b60c1", size = 37711, upload-time = "2025-06-09T22:54:52.072Z" }, + { url = "https://files.pythonhosted.org/packages/19/61/d582be5d226cf79071681d1b46b848d6cb03d7b70af7063e33a2787eaa03/propcache-0.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7046e79b989d7fe457bb755844019e10f693752d169076138abf17f31380800c", size = 41479, upload-time = "2025-06-09T22:54:53.234Z" }, + { url = "https://files.pythonhosted.org/packages/dc/d1/8c747fafa558c603c4ca19d8e20b288aa0c7cda74e9402f50f31eb65267e/propcache-0.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ca592ed634a73ca002967458187109265e980422116c0a107cf93d81f95af945", size = 71286, upload-time = "2025-06-09T22:54:54.369Z" }, + { url = "https://files.pythonhosted.org/packages/61/99/d606cb7986b60d89c36de8a85d58764323b3a5ff07770a99d8e993b3fa73/propcache-0.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9ecb0aad4020e275652ba3975740f241bd12a61f1a784df044cf7477a02bc252", size = 42425, upload-time = "2025-06-09T22:54:55.642Z" }, + { url = "https://files.pythonhosted.org/packages/8c/96/ef98f91bbb42b79e9bb82bdd348b255eb9d65f14dbbe3b1594644c4073f7/propcache-0.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7f08f1cc28bd2eade7a8a3d2954ccc673bb02062e3e7da09bc75d843386b342f", size = 41846, upload-time = "2025-06-09T22:54:57.246Z" }, + { url = "https://files.pythonhosted.org/packages/5b/ad/3f0f9a705fb630d175146cd7b1d2bf5555c9beaed54e94132b21aac098a6/propcache-0.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1a342c834734edb4be5ecb1e9fb48cb64b1e2320fccbd8c54bf8da8f2a84c33", size = 208871, upload-time = "2025-06-09T22:54:58.975Z" }, + { url = "https://files.pythonhosted.org/packages/3a/38/2085cda93d2c8b6ec3e92af2c89489a36a5886b712a34ab25de9fbca7992/propcache-0.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a544caaae1ac73f1fecfae70ded3e93728831affebd017d53449e3ac052ac1e", size = 215720, upload-time = "2025-06-09T22:55:00.471Z" }, + { url = "https://files.pythonhosted.org/packages/61/c1/d72ea2dc83ac7f2c8e182786ab0fc2c7bd123a1ff9b7975bee671866fe5f/propcache-0.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:310d11aa44635298397db47a3ebce7db99a4cc4b9bbdfcf6c98a60c8d5261cf1", size = 215203, upload-time = "2025-06-09T22:55:01.834Z" }, + { url = "https://files.pythonhosted.org/packages/af/81/b324c44ae60c56ef12007105f1460d5c304b0626ab0cc6b07c8f2a9aa0b8/propcache-0.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c1396592321ac83157ac03a2023aa6cc4a3cc3cfdecb71090054c09e5a7cce3", size = 206365, upload-time = "2025-06-09T22:55:03.199Z" }, + { url = "https://files.pythonhosted.org/packages/09/73/88549128bb89e66d2aff242488f62869014ae092db63ccea53c1cc75a81d/propcache-0.3.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cabf5b5902272565e78197edb682017d21cf3b550ba0460ee473753f28d23c1", size = 196016, upload-time = "2025-06-09T22:55:04.518Z" }, + { url = "https://files.pythonhosted.org/packages/b9/3f/3bdd14e737d145114a5eb83cb172903afba7242f67c5877f9909a20d948d/propcache-0.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0a2f2235ac46a7aa25bdeb03a9e7060f6ecbd213b1f9101c43b3090ffb971ef6", size = 205596, upload-time = "2025-06-09T22:55:05.942Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ca/2f4aa819c357d3107c3763d7ef42c03980f9ed5c48c82e01e25945d437c1/propcache-0.3.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:92b69e12e34869a6970fd2f3da91669899994b47c98f5d430b781c26f1d9f387", size = 200977, upload-time = "2025-06-09T22:55:07.792Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4a/e65276c7477533c59085251ae88505caf6831c0e85ff8b2e31ebcbb949b1/propcache-0.3.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:54e02207c79968ebbdffc169591009f4474dde3b4679e16634d34c9363ff56b4", size = 197220, upload-time = "2025-06-09T22:55:09.173Z" }, + { url = "https://files.pythonhosted.org/packages/7c/54/fc7152e517cf5578278b242396ce4d4b36795423988ef39bb8cd5bf274c8/propcache-0.3.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4adfb44cb588001f68c5466579d3f1157ca07f7504fc91ec87862e2b8e556b88", size = 210642, upload-time = "2025-06-09T22:55:10.62Z" }, + { url = "https://files.pythonhosted.org/packages/b9/80/abeb4a896d2767bf5f1ea7b92eb7be6a5330645bd7fb844049c0e4045d9d/propcache-0.3.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fd3e6019dc1261cd0291ee8919dd91fbab7b169bb76aeef6c716833a3f65d206", size = 212789, upload-time = "2025-06-09T22:55:12.029Z" }, + { url = "https://files.pythonhosted.org/packages/b3/db/ea12a49aa7b2b6d68a5da8293dcf50068d48d088100ac016ad92a6a780e6/propcache-0.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4c181cad81158d71c41a2bce88edce078458e2dd5ffee7eddd6b05da85079f43", size = 205880, upload-time = "2025-06-09T22:55:13.45Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e5/9076a0bbbfb65d1198007059c65639dfd56266cf8e477a9707e4b1999ff4/propcache-0.3.2-cp313-cp313-win32.whl", hash = "sha256:8a08154613f2249519e549de2330cf8e2071c2887309a7b07fb56098f5170a02", size = 37220, upload-time = "2025-06-09T22:55:15.284Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f5/b369e026b09a26cd77aa88d8fffd69141d2ae00a2abaaf5380d2603f4b7f/propcache-0.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e41671f1594fc4ab0a6dec1351864713cb3a279910ae8b58f884a88a0a632c05", size = 40678, upload-time = "2025-06-09T22:55:16.445Z" }, + { url = "https://files.pythonhosted.org/packages/a4/3a/6ece377b55544941a08d03581c7bc400a3c8cd3c2865900a68d5de79e21f/propcache-0.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:9a3cf035bbaf035f109987d9d55dc90e4b0e36e04bbbb95af3055ef17194057b", size = 76560, upload-time = "2025-06-09T22:55:17.598Z" }, + { url = "https://files.pythonhosted.org/packages/0c/da/64a2bb16418740fa634b0e9c3d29edff1db07f56d3546ca2d86ddf0305e1/propcache-0.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:156c03d07dc1323d8dacaa221fbe028c5c70d16709cdd63502778e6c3ccca1b0", size = 44676, upload-time = "2025-06-09T22:55:18.922Z" }, + { url = "https://files.pythonhosted.org/packages/36/7b/f025e06ea51cb72c52fb87e9b395cced02786610b60a3ed51da8af017170/propcache-0.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74413c0ba02ba86f55cf60d18daab219f7e531620c15f1e23d95563f505efe7e", size = 44701, upload-time = "2025-06-09T22:55:20.106Z" }, + { url = "https://files.pythonhosted.org/packages/a4/00/faa1b1b7c3b74fc277f8642f32a4c72ba1d7b2de36d7cdfb676db7f4303e/propcache-0.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f066b437bb3fa39c58ff97ab2ca351db465157d68ed0440abecb21715eb24b28", size = 276934, upload-time = "2025-06-09T22:55:21.5Z" }, + { url = "https://files.pythonhosted.org/packages/74/ab/935beb6f1756e0476a4d5938ff44bf0d13a055fed880caf93859b4f1baf4/propcache-0.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1304b085c83067914721e7e9d9917d41ad87696bf70f0bc7dee450e9c71ad0a", size = 278316, upload-time = "2025-06-09T22:55:22.918Z" }, + { url = "https://files.pythonhosted.org/packages/f8/9d/994a5c1ce4389610838d1caec74bdf0e98b306c70314d46dbe4fcf21a3e2/propcache-0.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab50cef01b372763a13333b4e54021bdcb291fc9a8e2ccb9c2df98be51bcde6c", size = 282619, upload-time = "2025-06-09T22:55:24.651Z" }, + { url = "https://files.pythonhosted.org/packages/2b/00/a10afce3d1ed0287cef2e09506d3be9822513f2c1e96457ee369adb9a6cd/propcache-0.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad3b2a085ec259ad2c2842666b2a0a49dea8463579c606426128925af1ed725", size = 265896, upload-time = "2025-06-09T22:55:26.049Z" }, + { url = "https://files.pythonhosted.org/packages/2e/a8/2aa6716ffa566ca57c749edb909ad27884680887d68517e4be41b02299f3/propcache-0.3.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:261fa020c1c14deafd54c76b014956e2f86991af198c51139faf41c4d5e83892", size = 252111, upload-time = "2025-06-09T22:55:27.381Z" }, + { url = "https://files.pythonhosted.org/packages/36/4f/345ca9183b85ac29c8694b0941f7484bf419c7f0fea2d1e386b4f7893eed/propcache-0.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:46d7f8aa79c927e5f987ee3a80205c987717d3659f035c85cf0c3680526bdb44", size = 268334, upload-time = "2025-06-09T22:55:28.747Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ca/fcd54f78b59e3f97b3b9715501e3147f5340167733d27db423aa321e7148/propcache-0.3.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:6d8f3f0eebf73e3c0ff0e7853f68be638b4043c65a70517bb575eff54edd8dbe", size = 255026, upload-time = "2025-06-09T22:55:30.184Z" }, + { url = "https://files.pythonhosted.org/packages/8b/95/8e6a6bbbd78ac89c30c225210a5c687790e532ba4088afb8c0445b77ef37/propcache-0.3.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:03c89c1b14a5452cf15403e291c0ccd7751d5b9736ecb2c5bab977ad6c5bcd81", size = 250724, upload-time = "2025-06-09T22:55:31.646Z" }, + { url = "https://files.pythonhosted.org/packages/ee/b0/0dd03616142baba28e8b2d14ce5df6631b4673850a3d4f9c0f9dd714a404/propcache-0.3.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:0cc17efde71e12bbaad086d679ce575268d70bc123a5a71ea7ad76f70ba30bba", size = 268868, upload-time = "2025-06-09T22:55:33.209Z" }, + { url = "https://files.pythonhosted.org/packages/c5/98/2c12407a7e4fbacd94ddd32f3b1e3d5231e77c30ef7162b12a60e2dd5ce3/propcache-0.3.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:acdf05d00696bc0447e278bb53cb04ca72354e562cf88ea6f9107df8e7fd9770", size = 271322, upload-time = "2025-06-09T22:55:35.065Z" }, + { url = "https://files.pythonhosted.org/packages/35/91/9cb56efbb428b006bb85db28591e40b7736847b8331d43fe335acf95f6c8/propcache-0.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4445542398bd0b5d32df908031cb1b30d43ac848e20470a878b770ec2dcc6330", size = 265778, upload-time = "2025-06-09T22:55:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4c/b0fe775a2bdd01e176b14b574be679d84fc83958335790f7c9a686c1f468/propcache-0.3.2-cp313-cp313t-win32.whl", hash = "sha256:f86e5d7cd03afb3a1db8e9f9f6eff15794e79e791350ac48a8c924e6f439f394", size = 41175, upload-time = "2025-06-09T22:55:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/a4/ff/47f08595e3d9b5e149c150f88d9714574f1a7cbd89fe2817158a952674bf/propcache-0.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9704bedf6e7cbe3c65eca4379a9b53ee6a83749f047808cbb5044d40d7d72198", size = 44857, upload-time = "2025-06-09T22:55:39.687Z" }, + { url = "https://files.pythonhosted.org/packages/cc/35/cc0aaecf278bb4575b8555f2b137de5ab821595ddae9da9d3cd1da4072c7/propcache-0.3.2-py3-none-any.whl", hash = "sha256:98f1ec44fb675f5052cccc8e609c46ed23a35a1cfd18545ad4e29002d858a43f", size = 12663, upload-time = "2025-06-09T22:56:04.484Z" }, ] [[package]] @@ -1285,91 +1420,110 @@ wheels = [ [[package]] name = "pydantic" -version = "2.10.6" +version = "2.11.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, { name = "pydantic-core" }, { name = "typing-extensions" }, + { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b7/ae/d5220c5c52b158b1de7ca89fc5edb72f304a70a4c540c84c8844bf4008de/pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236", size = 761681, upload-time = "2025-01-24T01:42:12.693Z" } +sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584", size = 431696, upload-time = "2025-01-24T01:42:10.371Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" }, +] + +[package.optional-dependencies] +email = [ + { name = "email-validator" }, ] [[package]] name = "pydantic-core" -version = "2.27.2" +version = "2.33.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fc/01/f3e5ac5e7c25833db5eb555f7b7ab24cd6f8c322d3a3ad2d67a952dc0abc/pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39", size = 413443, upload-time = "2024-12-18T11:31:54.917Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/89/f3450af9d09d44eea1f2c369f49e8f181d742f28220f88cc4dfaae91ea6e/pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc", size = 1893421, upload-time = "2024-12-18T11:27:55.409Z" }, - { url = "https://files.pythonhosted.org/packages/9e/e3/71fe85af2021f3f386da42d291412e5baf6ce7716bd7101ea49c810eda90/pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7", size = 1814998, upload-time = "2024-12-18T11:27:57.252Z" }, - { url = "https://files.pythonhosted.org/packages/a6/3c/724039e0d848fd69dbf5806894e26479577316c6f0f112bacaf67aa889ac/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15", size = 1826167, upload-time = "2024-12-18T11:27:59.146Z" }, - { url = "https://files.pythonhosted.org/packages/2b/5b/1b29e8c1fb5f3199a9a57c1452004ff39f494bbe9bdbe9a81e18172e40d3/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306", size = 1865071, upload-time = "2024-12-18T11:28:02.625Z" }, - { url = "https://files.pythonhosted.org/packages/89/6c/3985203863d76bb7d7266e36970d7e3b6385148c18a68cc8915fd8c84d57/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99", size = 2036244, upload-time = "2024-12-18T11:28:04.442Z" }, - { url = "https://files.pythonhosted.org/packages/0e/41/f15316858a246b5d723f7d7f599f79e37493b2e84bfc789e58d88c209f8a/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459", size = 2737470, upload-time = "2024-12-18T11:28:07.679Z" }, - { url = "https://files.pythonhosted.org/packages/a8/7c/b860618c25678bbd6d1d99dbdfdf0510ccb50790099b963ff78a124b754f/pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048", size = 1992291, upload-time = "2024-12-18T11:28:10.297Z" }, - { url = "https://files.pythonhosted.org/packages/bf/73/42c3742a391eccbeab39f15213ecda3104ae8682ba3c0c28069fbcb8c10d/pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d", size = 1994613, upload-time = "2024-12-18T11:28:13.362Z" }, - { url = "https://files.pythonhosted.org/packages/94/7a/941e89096d1175d56f59340f3a8ebaf20762fef222c298ea96d36a6328c5/pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b", size = 2002355, upload-time = "2024-12-18T11:28:16.587Z" }, - { url = "https://files.pythonhosted.org/packages/6e/95/2359937a73d49e336a5a19848713555605d4d8d6940c3ec6c6c0ca4dcf25/pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474", size = 2126661, upload-time = "2024-12-18T11:28:18.407Z" }, - { url = "https://files.pythonhosted.org/packages/2b/4c/ca02b7bdb6012a1adef21a50625b14f43ed4d11f1fc237f9d7490aa5078c/pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6", size = 2153261, upload-time = "2024-12-18T11:28:21.471Z" }, - { url = "https://files.pythonhosted.org/packages/72/9d/a241db83f973049a1092a079272ffe2e3e82e98561ef6214ab53fe53b1c7/pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c", size = 1812361, upload-time = "2024-12-18T11:28:23.53Z" }, - { url = "https://files.pythonhosted.org/packages/e8/ef/013f07248041b74abd48a385e2110aa3a9bbfef0fbd97d4e6d07d2f5b89a/pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc", size = 1982484, upload-time = "2024-12-18T11:28:25.391Z" }, - { url = "https://files.pythonhosted.org/packages/10/1c/16b3a3e3398fd29dca77cea0a1d998d6bde3902fa2706985191e2313cc76/pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4", size = 1867102, upload-time = "2024-12-18T11:28:28.593Z" }, - { url = "https://files.pythonhosted.org/packages/d6/74/51c8a5482ca447871c93e142d9d4a92ead74de6c8dc5e66733e22c9bba89/pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0", size = 1893127, upload-time = "2024-12-18T11:28:30.346Z" }, - { url = "https://files.pythonhosted.org/packages/d3/f3/c97e80721735868313c58b89d2de85fa80fe8dfeeed84dc51598b92a135e/pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef", size = 1811340, upload-time = "2024-12-18T11:28:32.521Z" }, - { url = "https://files.pythonhosted.org/packages/9e/91/840ec1375e686dbae1bd80a9e46c26a1e0083e1186abc610efa3d9a36180/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7", size = 1822900, upload-time = "2024-12-18T11:28:34.507Z" }, - { url = "https://files.pythonhosted.org/packages/f6/31/4240bc96025035500c18adc149aa6ffdf1a0062a4b525c932065ceb4d868/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934", size = 1869177, upload-time = "2024-12-18T11:28:36.488Z" }, - { url = "https://files.pythonhosted.org/packages/fa/20/02fbaadb7808be578317015c462655c317a77a7c8f0ef274bc016a784c54/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6", size = 2038046, upload-time = "2024-12-18T11:28:39.409Z" }, - { url = "https://files.pythonhosted.org/packages/06/86/7f306b904e6c9eccf0668248b3f272090e49c275bc488a7b88b0823444a4/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c", size = 2685386, upload-time = "2024-12-18T11:28:41.221Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f0/49129b27c43396581a635d8710dae54a791b17dfc50c70164866bbf865e3/pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2", size = 1997060, upload-time = "2024-12-18T11:28:44.709Z" }, - { url = "https://files.pythonhosted.org/packages/0d/0f/943b4af7cd416c477fd40b187036c4f89b416a33d3cc0ab7b82708a667aa/pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4", size = 2004870, upload-time = "2024-12-18T11:28:46.839Z" }, - { url = "https://files.pythonhosted.org/packages/35/40/aea70b5b1a63911c53a4c8117c0a828d6790483f858041f47bab0b779f44/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3", size = 1999822, upload-time = "2024-12-18T11:28:48.896Z" }, - { url = "https://files.pythonhosted.org/packages/f2/b3/807b94fd337d58effc5498fd1a7a4d9d59af4133e83e32ae39a96fddec9d/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4", size = 2130364, upload-time = "2024-12-18T11:28:50.755Z" }, - { url = "https://files.pythonhosted.org/packages/fc/df/791c827cd4ee6efd59248dca9369fb35e80a9484462c33c6649a8d02b565/pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57", size = 2158303, upload-time = "2024-12-18T11:28:54.122Z" }, - { url = "https://files.pythonhosted.org/packages/9b/67/4e197c300976af185b7cef4c02203e175fb127e414125916bf1128b639a9/pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc", size = 1834064, upload-time = "2024-12-18T11:28:56.074Z" }, - { url = "https://files.pythonhosted.org/packages/1f/ea/cd7209a889163b8dcca139fe32b9687dd05249161a3edda62860430457a5/pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9", size = 1989046, upload-time = "2024-12-18T11:28:58.107Z" }, - { url = "https://files.pythonhosted.org/packages/bc/49/c54baab2f4658c26ac633d798dab66b4c3a9bbf47cff5284e9c182f4137a/pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b", size = 1885092, upload-time = "2024-12-18T11:29:01.335Z" }, - { url = "https://files.pythonhosted.org/packages/41/b1/9bc383f48f8002f99104e3acff6cba1231b29ef76cfa45d1506a5cad1f84/pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b", size = 1892709, upload-time = "2024-12-18T11:29:03.193Z" }, - { url = "https://files.pythonhosted.org/packages/10/6c/e62b8657b834f3eb2961b49ec8e301eb99946245e70bf42c8817350cbefc/pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154", size = 1811273, upload-time = "2024-12-18T11:29:05.306Z" }, - { url = "https://files.pythonhosted.org/packages/ba/15/52cfe49c8c986e081b863b102d6b859d9defc63446b642ccbbb3742bf371/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9", size = 1823027, upload-time = "2024-12-18T11:29:07.294Z" }, - { url = "https://files.pythonhosted.org/packages/b1/1c/b6f402cfc18ec0024120602bdbcebc7bdd5b856528c013bd4d13865ca473/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9", size = 1868888, upload-time = "2024-12-18T11:29:09.249Z" }, - { url = "https://files.pythonhosted.org/packages/bd/7b/8cb75b66ac37bc2975a3b7de99f3c6f355fcc4d89820b61dffa8f1e81677/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1", size = 2037738, upload-time = "2024-12-18T11:29:11.23Z" }, - { url = "https://files.pythonhosted.org/packages/c8/f1/786d8fe78970a06f61df22cba58e365ce304bf9b9f46cc71c8c424e0c334/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a", size = 2685138, upload-time = "2024-12-18T11:29:16.396Z" }, - { url = "https://files.pythonhosted.org/packages/a6/74/d12b2cd841d8724dc8ffb13fc5cef86566a53ed358103150209ecd5d1999/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e", size = 1997025, upload-time = "2024-12-18T11:29:20.25Z" }, - { url = "https://files.pythonhosted.org/packages/a0/6e/940bcd631bc4d9a06c9539b51f070b66e8f370ed0933f392db6ff350d873/pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4", size = 2004633, upload-time = "2024-12-18T11:29:23.877Z" }, - { url = "https://files.pythonhosted.org/packages/50/cc/a46b34f1708d82498c227d5d80ce615b2dd502ddcfd8376fc14a36655af1/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27", size = 1999404, upload-time = "2024-12-18T11:29:25.872Z" }, - { url = "https://files.pythonhosted.org/packages/ca/2d/c365cfa930ed23bc58c41463bae347d1005537dc8db79e998af8ba28d35e/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee", size = 2130130, upload-time = "2024-12-18T11:29:29.252Z" }, - { url = "https://files.pythonhosted.org/packages/f4/d7/eb64d015c350b7cdb371145b54d96c919d4db516817f31cd1c650cae3b21/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1", size = 2157946, upload-time = "2024-12-18T11:29:31.338Z" }, - { url = "https://files.pythonhosted.org/packages/a4/99/bddde3ddde76c03b65dfd5a66ab436c4e58ffc42927d4ff1198ffbf96f5f/pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130", size = 1834387, upload-time = "2024-12-18T11:29:33.481Z" }, - { url = "https://files.pythonhosted.org/packages/71/47/82b5e846e01b26ac6f1893d3c5f9f3a2eb6ba79be26eef0b759b4fe72946/pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee", size = 1990453, upload-time = "2024-12-18T11:29:35.533Z" }, - { url = "https://files.pythonhosted.org/packages/51/b2/b2b50d5ecf21acf870190ae5d093602d95f66c9c31f9d5de6062eb329ad1/pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b", size = 1885186, upload-time = "2024-12-18T11:29:37.649Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584, upload-time = "2025-04-23T18:31:03.106Z" }, + { url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071, upload-time = "2025-04-23T18:31:04.621Z" }, + { url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" }, + { url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" }, + { url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" }, + { url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" }, + { url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" }, + { url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" }, + { url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" }, + { url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" }, + { url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" }, + { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload-time = "2025-04-23T18:31:25.863Z" }, + { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload-time = "2025-04-23T18:31:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload-time = "2025-04-23T18:31:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload-time = "2025-04-23T18:31:31.025Z" }, + { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload-time = "2025-04-23T18:31:32.514Z" }, + { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload-time = "2025-04-23T18:31:33.958Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload-time = "2025-04-23T18:31:39.095Z" }, + { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload-time = "2025-04-23T18:31:41.034Z" }, + { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload-time = "2025-04-23T18:31:42.757Z" }, + { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload-time = "2025-04-23T18:31:44.304Z" }, + { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload-time = "2025-04-23T18:31:45.891Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload-time = "2025-04-23T18:31:47.819Z" }, + { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload-time = "2025-04-23T18:31:49.635Z" }, + { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload-time = "2025-04-23T18:31:51.609Z" }, + { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload-time = "2025-04-23T18:31:53.175Z" }, + { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload-time = "2025-04-23T18:31:54.79Z" }, + { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload-time = "2025-04-23T18:31:57.393Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload-time = "2025-04-23T18:31:59.065Z" }, + { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload-time = "2025-04-23T18:32:00.78Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload-time = "2025-04-23T18:32:02.418Z" }, + { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload-time = "2025-04-23T18:32:04.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload-time = "2025-04-23T18:32:06.129Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload-time = "2025-04-23T18:32:08.178Z" }, + { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload-time = "2025-04-23T18:32:10.242Z" }, + { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload-time = "2025-04-23T18:32:12.382Z" }, + { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload-time = "2025-04-23T18:32:14.034Z" }, + { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload-time = "2025-04-23T18:32:15.783Z" }, + { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload-time = "2025-04-23T18:32:18.473Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload-time = "2025-04-23T18:32:20.188Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" }, + { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" }, + { url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200, upload-time = "2025-04-23T18:33:14.199Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123, upload-time = "2025-04-23T18:33:16.555Z" }, + { url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" }, + { url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" }, + { url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" }, + { url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" }, + { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" }, + { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" }, ] [[package]] name = "pydantic-settings" -version = "2.7.1" +version = "2.10.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, { name = "python-dotenv" }, + { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/73/7b/c58a586cd7d9ac66d2ee4ba60ca2d241fa837c02bca9bea80a9a8c3d22a9/pydantic_settings-2.7.1.tar.gz", hash = "sha256:10c9caad35e64bfb3c2fbf70a078c0e25cc92499782e5200747f942a065dec93", size = 79920, upload-time = "2024-12-31T11:27:44.632Z" } +sdist = { url = "https://files.pythonhosted.org/packages/68/85/1ea668bbab3c50071ca613c6ab30047fb36ab0da1b92fa8f17bbc38fd36c/pydantic_settings-2.10.1.tar.gz", hash = "sha256:06f0062169818d0f5524420a360d632d5857b83cffd4d42fe29597807a1614ee", size = 172583, upload-time = "2025-06-24T13:26:46.841Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/46/93416fdae86d40879714f72956ac14df9c7b76f7d41a4d68aa9f71a0028b/pydantic_settings-2.7.1-py3-none-any.whl", hash = "sha256:590be9e6e24d06db33a4262829edef682500ef008565a969c73d39d5f8bfb3fd", size = 29718, upload-time = "2024-12-31T11:27:43.201Z" }, + { url = "https://files.pythonhosted.org/packages/58/f0/427018098906416f580e3cf1366d3b1abfb408a0652e9f31600c24a1903c/pydantic_settings-2.10.1-py3-none-any.whl", hash = "sha256:a60952460b99cf661dc25c29c0ef171721f98bfcb52ef8d9ea4c943d7c8cc796", size = 45235, upload-time = "2025-06-24T13:26:45.485Z" }, ] [[package]] name = "pygments" -version = "2.19.1" +version = "2.19.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581, upload-time = "2025-01-06T17:26:30.443Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293, upload-time = "2025-01-06T17:26:25.553Z" }, + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, ] [[package]] @@ -1388,74 +1542,75 @@ crypto = [ [[package]] name = "pypdfium2" -version = "4.30.1" +version = "4.30.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/55/d4/905e621c62598a08168c272b42fc00136c8861cfce97afb2a1ecbd99487a/pypdfium2-4.30.1.tar.gz", hash = "sha256:5f5c7c6d03598e107d974f66b220a49436aceb191da34cda5f692be098a814ce", size = 164854, upload-time = "2024-12-19T19:28:11.459Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/14/838b3ba247a0ba92e4df5d23f2bea9478edcfd72b78a39d6ca36ccd84ad2/pypdfium2-4.30.0.tar.gz", hash = "sha256:48b5b7e5566665bc1015b9d69c1ebabe21f6aee468b509531c3c8318eeee2e16", size = 140239, upload-time = "2024-05-09T18:33:17.552Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/30/8e/3ce0856b3af0f058dd3655ce57d31d1dbde4d4bd0e172022ffbf1b58a4b9/pypdfium2-4.30.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:e07c47633732cc18d890bb7e965ad28a9c5a932e548acb928596f86be2e5ae37", size = 2889836, upload-time = "2024-12-19T19:27:39.531Z" }, - { url = "https://files.pythonhosted.org/packages/c2/6a/f6995b21f9c6c155487ce7df70632a2df1ba49efcb291b9943ea45f28b15/pypdfium2-4.30.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5ea2d44e96d361123b67b00f527017aa9c847c871b5714e013c01c3eb36a79fe", size = 2769232, upload-time = "2024-12-19T19:27:43.227Z" }, - { url = "https://files.pythonhosted.org/packages/53/91/79060923148e6d380b8a299b32bba46d70aac5fe1cd4f04320bcbd1a48d3/pypdfium2-4.30.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1de7a3a36803171b3f66911131046d65a732f9e7834438191cb58235e6163c4e", size = 2847531, upload-time = "2024-12-19T19:27:46.372Z" }, - { url = "https://files.pythonhosted.org/packages/a8/6c/93507f87c159e747eaab54352c0fccbaec3f1b3749d0bb9085a47899f898/pypdfium2-4.30.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b8a4231efb13170354f568c722d6540b8d5b476b08825586d48ef70c40d16e03", size = 2636266, upload-time = "2024-12-19T19:27:49.767Z" }, - { url = "https://files.pythonhosted.org/packages/24/dc/d56f74a092f2091e328d6485f16562e2fc51cffb0ad6d5c616d80c1eb53c/pypdfium2-4.30.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f434a4934e8244aa95343ffcf24e9ad9f120dbb4785f631bb40a88c39292493", size = 2919296, upload-time = "2024-12-19T19:27:51.767Z" }, - { url = "https://files.pythonhosted.org/packages/be/d9/a2f1ee03d47fbeb48bcfde47ed7155772739622cfadf7135a84ba6a97824/pypdfium2-4.30.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f454032a0bc7681900170f67d8711b3942824531e765f91c2f5ce7937f999794", size = 2866119, upload-time = "2024-12-19T19:27:53.561Z" }, - { url = "https://files.pythonhosted.org/packages/01/47/6aa019c32aa39d3f33347c458c0c5887e84096cbe444456402bc97e66704/pypdfium2-4.30.1-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:bbf9130a72370ee9d602e39949b902db669a2a1c24746a91e5586eb829055d9f", size = 6228684, upload-time = "2024-12-19T19:27:56.781Z" }, - { url = "https://files.pythonhosted.org/packages/4c/07/2954c15b3f7c85ceb80cad36757fd41b3aba0dd14e68f4bed9ce3f2e7e74/pypdfium2-4.30.1-py3-none-musllinux_1_1_i686.whl", hash = "sha256:5cb52884b1583b96e94fd78542c63bb42e06df5e8f9e52f8f31f5ad5a1e53367", size = 6231815, upload-time = "2024-12-19T19:28:00.351Z" }, - { url = "https://files.pythonhosted.org/packages/b4/9b/b4667e95754624f4af5a912001abba90c046e1c80d4a4e887f0af664ffec/pypdfium2-4.30.1-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:1a9e372bd4867ff223cc8c338e33fe11055dad12f22885950fc27646cc8d9122", size = 6313429, upload-time = "2024-12-19T19:28:02.536Z" }, - { url = "https://files.pythonhosted.org/packages/43/38/f9e77cf55ba5546a39fa659404b78b97de2ca344848271e7731efb0954cd/pypdfium2-4.30.1-py3-none-win32.whl", hash = "sha256:421f1cf205e213e07c1f2934905779547f4f4a2ff2f59dde29da3d511d3fc806", size = 2834989, upload-time = "2024-12-19T19:28:04.657Z" }, - { url = "https://files.pythonhosted.org/packages/a4/f3/8d3a350efb4286b5ebdabcf6736f51d8e3b10dbe68804c6930b00f5cf329/pypdfium2-4.30.1-py3-none-win_amd64.whl", hash = "sha256:598a7f20264ab5113853cba6d86c4566e4356cad037d7d1f849c8c9021007e05", size = 2960157, upload-time = "2024-12-19T19:28:07.772Z" }, - { url = "https://files.pythonhosted.org/packages/e1/6b/2706497c86e8d69fb76afe5ea857fe1794621aa0f3b1d863feb953fe0f22/pypdfium2-4.30.1-py3-none-win_arm64.whl", hash = "sha256:c2b6d63f6d425d9416c08d2511822b54b8e3ac38e639fc41164b1d75584b3a8c", size = 2814810, upload-time = "2024-12-19T19:28:09.857Z" }, + { url = "https://files.pythonhosted.org/packages/c7/9a/c8ff5cc352c1b60b0b97642ae734f51edbab6e28b45b4fcdfe5306ee3c83/pypdfium2-4.30.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:b33ceded0b6ff5b2b93bc1fe0ad4b71aa6b7e7bd5875f1ca0cdfb6ba6ac01aab", size = 2837254, upload-time = "2024-05-09T18:32:48.653Z" }, + { url = "https://files.pythonhosted.org/packages/21/8b/27d4d5409f3c76b985f4ee4afe147b606594411e15ac4dc1c3363c9a9810/pypdfium2-4.30.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4e55689f4b06e2d2406203e771f78789bd4f190731b5d57383d05cf611d829de", size = 2707624, upload-time = "2024-05-09T18:32:51.458Z" }, + { url = "https://files.pythonhosted.org/packages/11/63/28a73ca17c24b41a205d658e177d68e198d7dde65a8c99c821d231b6ee3d/pypdfium2-4.30.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e6e50f5ce7f65a40a33d7c9edc39f23140c57e37144c2d6d9e9262a2a854854", size = 2793126, upload-time = "2024-05-09T18:32:53.581Z" }, + { url = "https://files.pythonhosted.org/packages/d1/96/53b3ebf0955edbd02ac6da16a818ecc65c939e98fdeb4e0958362bd385c8/pypdfium2-4.30.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3d0dd3ecaffd0b6dbda3da663220e705cb563918249bda26058c6036752ba3a2", size = 2591077, upload-time = "2024-05-09T18:32:55.99Z" }, + { url = "https://files.pythonhosted.org/packages/ec/ee/0394e56e7cab8b5b21f744d988400948ef71a9a892cbeb0b200d324ab2c7/pypdfium2-4.30.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc3bf29b0db8c76cdfaac1ec1cde8edf211a7de7390fbf8934ad2aa9b4d6dfad", size = 2864431, upload-time = "2024-05-09T18:32:57.911Z" }, + { url = "https://files.pythonhosted.org/packages/65/cd/3f1edf20a0ef4a212a5e20a5900e64942c5a374473671ac0780eaa08ea80/pypdfium2-4.30.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1f78d2189e0ddf9ac2b7a9b9bd4f0c66f54d1389ff6c17e9fd9dc034d06eb3f", size = 2812008, upload-time = "2024-05-09T18:32:59.886Z" }, + { url = "https://files.pythonhosted.org/packages/c8/91/2d517db61845698f41a2a974de90762e50faeb529201c6b3574935969045/pypdfium2-4.30.0-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:5eda3641a2da7a7a0b2f4dbd71d706401a656fea521b6b6faa0675b15d31a163", size = 6181543, upload-time = "2024-05-09T18:33:02.597Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c4/ed1315143a7a84b2c7616569dfb472473968d628f17c231c39e29ae9d780/pypdfium2-4.30.0-py3-none-musllinux_1_1_i686.whl", hash = "sha256:0dfa61421b5eb68e1188b0b2231e7ba35735aef2d867d86e48ee6cab6975195e", size = 6175911, upload-time = "2024-05-09T18:33:05.376Z" }, + { url = "https://files.pythonhosted.org/packages/7a/c4/9e62d03f414e0e3051c56d5943c3bf42aa9608ede4e19dc96438364e9e03/pypdfium2-4.30.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:f33bd79e7a09d5f7acca3b0b69ff6c8a488869a7fab48fdf400fec6e20b9c8be", size = 6267430, upload-time = "2024-05-09T18:33:08.067Z" }, + { url = "https://files.pythonhosted.org/packages/90/47/eda4904f715fb98561e34012826e883816945934a851745570521ec89520/pypdfium2-4.30.0-py3-none-win32.whl", hash = "sha256:ee2410f15d576d976c2ab2558c93d392a25fb9f6635e8dd0a8a3a5241b275e0e", size = 2775951, upload-time = "2024-05-09T18:33:10.567Z" }, + { url = "https://files.pythonhosted.org/packages/25/bd/56d9ec6b9f0fc4e0d95288759f3179f0fcd34b1a1526b75673d2f6d5196f/pypdfium2-4.30.0-py3-none-win_amd64.whl", hash = "sha256:90dbb2ac07be53219f56be09961eb95cf2473f834d01a42d901d13ccfad64b4c", size = 2892098, upload-time = "2024-05-09T18:33:13.107Z" }, + { url = "https://files.pythonhosted.org/packages/be/7a/097801205b991bc3115e8af1edb850d30aeaf0118520b016354cf5ccd3f6/pypdfium2-4.30.0-py3-none-win_arm64.whl", hash = "sha256:119b2969a6d6b1e8d55e99caaf05290294f2d0fe49c12a3f17102d01c441bd29", size = 2752118, upload-time = "2024-05-09T18:33:15.489Z" }, ] [[package]] name = "pyright" -version = "1.1.394" +version = "1.1.404" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nodeenv" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/e4/79f4d8a342eed6790fdebdb500e95062f319ee3d7d75ae27304ff995ae8c/pyright-1.1.394.tar.gz", hash = "sha256:56f2a3ab88c5214a451eb71d8f2792b7700434f841ea219119ade7f42ca93608", size = 3809348, upload-time = "2025-02-12T10:27:26.981Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e2/6e/026be64c43af681d5632722acd100b06d3d39f383ec382ff50a71a6d5bce/pyright-1.1.404.tar.gz", hash = "sha256:455e881a558ca6be9ecca0b30ce08aa78343ecc031d37a198ffa9a7a1abeb63e", size = 4065679, upload-time = "2025-08-20T18:46:14.029Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d6/4c/50c74e3d589517a9712a61a26143b587dba6285434a17aebf2ce6b82d2c3/pyright-1.1.394-py3-none-any.whl", hash = "sha256:5f74cce0a795a295fb768759bbeeec62561215dea657edcaab48a932b031ddbb", size = 5679540, upload-time = "2025-02-12T10:27:24.833Z" }, + { url = "https://files.pythonhosted.org/packages/84/30/89aa7f7d7a875bbb9a577d4b1dc5a3e404e3d2ae2657354808e905e358e0/pyright-1.1.404-py3-none-any.whl", hash = "sha256:c7b7ff1fdb7219c643079e4c3e7d4125f0dafcc19d253b47e898d130ea426419", size = 5902951, upload-time = "2025-08-20T18:46:12.096Z" }, ] [[package]] name = "pytest" -version = "8.3.5" +version = "8.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, + { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ae/3c/c9d525a414d506893f0cd8a8d0de7706446213181570cdbd766691164e40/pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845", size = 1450891, upload-time = "2025-03-02T12:54:54.503Z" } +sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload-time = "2025-06-18T05:48:06.109Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", size = 343634, upload-time = "2025-03-02T12:54:52.069Z" }, + { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" }, ] [[package]] name = "pytest-asyncio" -version = "0.25.3" +version = "1.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f2/a8/ecbc8ede70921dd2f544ab1cadd3ff3bf842af27f87bbdea774c7baa1d38/pytest_asyncio-0.25.3.tar.gz", hash = "sha256:fc1da2cf9f125ada7e710b4ddad05518d4cee187ae9412e9ac9271003497f07a", size = 54239, upload-time = "2025-01-28T18:37:58.729Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/51/f8794af39eeb870e87a8c8068642fc07bce0c854d6865d7dd0f2a9d338c2/pytest_asyncio-1.1.0.tar.gz", hash = "sha256:796aa822981e01b68c12e4827b8697108f7205020f24b5793b3c41555dab68ea", size = 46652, upload-time = "2025-07-16T04:29:26.393Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/17/3493c5624e48fd97156ebaec380dcaafee9506d7e2c46218ceebbb57d7de/pytest_asyncio-0.25.3-py3-none-any.whl", hash = "sha256:9e89518e0f9bd08928f97a3482fdc4e244df17529460bc038291ccaf8f85c7c3", size = 19467, upload-time = "2025-01-28T18:37:56.798Z" }, + { url = "https://files.pythonhosted.org/packages/c7/9d/bf86eddabf8c6c9cb1ea9a869d6873b46f105a5d292d3a6f7071f5b07935/pytest_asyncio-1.1.0-py3-none-any.whl", hash = "sha256:5fe2d69607b0bd75c656d1211f969cadba035030156745ee09e7d71740e58ecf", size = 15157, upload-time = "2025-07-16T04:29:24.929Z" }, ] [[package]] name = "pytest-repeat" -version = "0.9.3" +version = "0.9.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/86/5e/99365eb229efff0b1bd475886150fc6db9937ab7e1bd21f6f65c1279e0eb/pytest_repeat-0.9.3.tar.gz", hash = "sha256:ffd3836dfcd67bb270bec648b330e20be37d2966448c4148c4092d1e8aba8185", size = 6272, upload-time = "2023-10-09T19:24:13.809Z" } +sdist = { url = "https://files.pythonhosted.org/packages/80/d4/69e9dbb9b8266df0b157c72be32083403c412990af15c7c15f7a3fd1b142/pytest_repeat-0.9.4.tar.gz", hash = "sha256:d92ac14dfaa6ffcfe6917e5d16f0c9bc82380c135b03c2a5f412d2637f224485", size = 6488, upload-time = "2025-04-07T14:59:53.077Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/49/a8/0a0aec0c2541b8baf4a0b95af2ba99abce217ee43534adf9cb7c908cf184/pytest_repeat-0.9.3-py3-none-any.whl", hash = "sha256:26ab2df18226af9d5ce441c858f273121e92ff55f5bb311d25755b8d7abdd8ed", size = 4196, upload-time = "2023-10-09T19:24:12.315Z" }, + { url = "https://files.pythonhosted.org/packages/73/d4/8b706b81b07b43081bd68a2c0359fe895b74bf664b20aca8005d2bb3be71/pytest_repeat-0.9.4-py3-none-any.whl", hash = "sha256:c1738b4e412a6f3b3b9e0b8b29fcd7a423e50f87381ad9307ef6f5a8601139f3", size = 4180, upload-time = "2025-04-07T14:59:51.492Z" }, ] [[package]] @@ -1472,25 +1627,25 @@ wheels = [ [[package]] name = "python-dotenv" -version = "1.0.1" +version = "1.1.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bc/57/e84d88dfe0aec03b7a2d4327012c1627ab5f03652216c63d49846d7a6c58/python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", size = 39115, upload-time = "2024-01-23T06:33:00.505Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/b0/4bc07ccd3572a2f9df7e6782f52b0c6c90dcbb803ac4a167702d7d0dfe1e/python_dotenv-1.1.1.tar.gz", hash = "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab", size = 41978, upload-time = "2025-06-24T04:21:07.341Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863, upload-time = "2024-01-23T06:32:58.246Z" }, + { url = "https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc", size = 20556, upload-time = "2025-06-24T04:21:06.073Z" }, ] [[package]] name = "python-json-logger" -version = "3.2.1" +version = "3.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e3/c4/358cd13daa1d912ef795010897a483ab2f0b41c9ea1b35235a8b2f7d15a7/python_json_logger-3.2.1.tar.gz", hash = "sha256:8eb0554ea17cb75b05d2848bc14fb02fbdbd9d6972120781b974380bfa162008", size = 16287, upload-time = "2024-12-16T06:48:05.882Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9e/de/d3144a0bceede957f961e975f3752760fbe390d57fbe194baf709d8f1f7b/python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84", size = 16642, upload-time = "2025-03-07T07:08:27.301Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4b/72/2f30cf26664fcfa0bd8ec5ee62ec90c03bd485e4a294d92aabc76c5203a5/python_json_logger-3.2.1-py3-none-any.whl", hash = "sha256:cdc17047eb5374bd311e748b42f99d71223f3b0e186f4206cc5d52aefe85b090", size = 14924, upload-time = "2024-12-16T06:48:03.25Z" }, + { url = "https://files.pythonhosted.org/packages/08/20/0f2523b9e50a8052bc6a8b732dfc8568abbdc42010aef03a2d750bdab3b2/python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7", size = 15163, upload-time = "2025-03-07T07:08:25.627Z" }, ] [[package]] name = "python-liquid" -version = "2.0.2" +version = "2.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "babel" }, @@ -1498,9 +1653,9 @@ dependencies = [ { name = "python-dateutil" }, { name = "pytz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d3/29/45ea9b5b22394aaea4d981960531c1de8cc46b9f4f85ddef3ff180740a8d/python_liquid-2.0.2.tar.gz", hash = "sha256:3b10c3716829778284e545afa968252bc51bc67ad8d13b3d93975d3affa92e2e", size = 91642, upload-time = "2025-05-21T07:38:16.108Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/46/3b2731966bf24a1cab027eae3c87c41e379750a7dd8c7041c37b9a29d168/python_liquid-2.1.0.tar.gz", hash = "sha256:a4c2abb24ac40ded8c9ba844ebbfbe78a3e41c6fe10a7bbe94144582569b73d0", size = 93152, upload-time = "2025-08-15T07:33:26.019Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/64/4e7d316c3ebaaae8a5f6fdbfa5067285f66bceed66ef002b21ac3033049d/python_liquid-2.0.2-py3-none-any.whl", hash = "sha256:599ac3f0fcfc77c914447a0c53f87a55b537ffe5d0169f2fffdc8216577161c0", size = 136282, upload-time = "2025-05-21T07:38:14.856Z" }, + { url = "https://files.pythonhosted.org/packages/c0/0d/8c0cc6895ff2ec26b963f055ff2514596e71b509cde3b9ffbbf0f7f59995/python_liquid-2.1.0-py3-none-any.whl", hash = "sha256:d3bbcddff4e1a73287b59218df3471613598271e69ac3d17d97e000f4b984e3e", size = 137984, upload-time = "2025-08-15T07:33:24.274Z" }, ] [[package]] @@ -1521,22 +1676,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, ] -[[package]] -name = "pywin32" -version = "308" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/e2/02652007469263fe1466e98439831d65d4ca80ea1a2df29abecedf7e47b7/pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a", size = 5928156, upload-time = "2024-10-12T20:42:05.78Z" }, - { url = "https://files.pythonhosted.org/packages/48/ef/f4fb45e2196bc7ffe09cad0542d9aff66b0e33f6c0954b43e49c33cad7bd/pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b", size = 6559559, upload-time = "2024-10-12T20:42:07.644Z" }, - { url = "https://files.pythonhosted.org/packages/79/ef/68bb6aa865c5c9b11a35771329e95917b5559845bd75b65549407f9fc6b4/pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6", size = 7972495, upload-time = "2024-10-12T20:42:09.803Z" }, - { url = "https://files.pythonhosted.org/packages/00/7c/d00d6bdd96de4344e06c4afbf218bc86b54436a94c01c71a8701f613aa56/pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897", size = 5939729, upload-time = "2024-10-12T20:42:12.001Z" }, - { url = "https://files.pythonhosted.org/packages/21/27/0c8811fbc3ca188f93b5354e7c286eb91f80a53afa4e11007ef661afa746/pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47", size = 6543015, upload-time = "2024-10-12T20:42:14.044Z" }, - { url = "https://files.pythonhosted.org/packages/9d/0f/d40f8373608caed2255781a3ad9a51d03a594a1248cd632d6a298daca693/pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091", size = 7976033, upload-time = "2024-10-12T20:42:16.215Z" }, - { url = "https://files.pythonhosted.org/packages/a9/a4/aa562d8935e3df5e49c161b427a3a2efad2ed4e9cf81c3de636f1fdddfd0/pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed", size = 5938579, upload-time = "2024-10-12T20:42:18.623Z" }, - { url = "https://files.pythonhosted.org/packages/c7/50/b0efb8bb66210da67a53ab95fd7a98826a97ee21f1d22949863e6d588b22/pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4", size = 6542056, upload-time = "2024-10-12T20:42:20.864Z" }, - { url = "https://files.pythonhosted.org/packages/26/df/2b63e3e4f2df0224f8aaf6d131f54fe4e8c96400eb9df563e2aae2e1a1f9/pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd", size = 7974986, upload-time = "2024-10-12T20:42:22.799Z" }, -] - [[package]] name = "pyyaml" version = "6.0.2" @@ -1574,60 +1713,71 @@ wheels = [ [[package]] name = "regex" -version = "2024.11.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494, upload-time = "2024-11-06T20:12:31.635Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/58/58/7e4d9493a66c88a7da6d205768119f51af0f684fe7be7bac8328e217a52c/regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638", size = 482669, upload-time = "2024-11-06T20:09:31.064Z" }, - { url = "https://files.pythonhosted.org/packages/34/4c/8f8e631fcdc2ff978609eaeef1d6994bf2f028b59d9ac67640ed051f1218/regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7", size = 287684, upload-time = "2024-11-06T20:09:32.915Z" }, - { url = "https://files.pythonhosted.org/packages/c5/1b/f0e4d13e6adf866ce9b069e191f303a30ab1277e037037a365c3aad5cc9c/regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20", size = 284589, upload-time = "2024-11-06T20:09:35.504Z" }, - { url = "https://files.pythonhosted.org/packages/25/4d/ab21047f446693887f25510887e6820b93f791992994f6498b0318904d4a/regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114", size = 792121, upload-time = "2024-11-06T20:09:37.701Z" }, - { url = "https://files.pythonhosted.org/packages/45/ee/c867e15cd894985cb32b731d89576c41a4642a57850c162490ea34b78c3b/regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3", size = 831275, upload-time = "2024-11-06T20:09:40.371Z" }, - { url = "https://files.pythonhosted.org/packages/b3/12/b0f480726cf1c60f6536fa5e1c95275a77624f3ac8fdccf79e6727499e28/regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f", size = 818257, upload-time = "2024-11-06T20:09:43.059Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ce/0d0e61429f603bac433910d99ef1a02ce45a8967ffbe3cbee48599e62d88/regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0", size = 792727, upload-time = "2024-11-06T20:09:48.19Z" }, - { url = "https://files.pythonhosted.org/packages/e4/c1/243c83c53d4a419c1556f43777ccb552bccdf79d08fda3980e4e77dd9137/regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55", size = 780667, upload-time = "2024-11-06T20:09:49.828Z" }, - { url = "https://files.pythonhosted.org/packages/c5/f4/75eb0dd4ce4b37f04928987f1d22547ddaf6c4bae697623c1b05da67a8aa/regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89", size = 776963, upload-time = "2024-11-06T20:09:51.819Z" }, - { url = "https://files.pythonhosted.org/packages/16/5d/95c568574e630e141a69ff8a254c2f188b4398e813c40d49228c9bbd9875/regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d", size = 784700, upload-time = "2024-11-06T20:09:53.982Z" }, - { url = "https://files.pythonhosted.org/packages/8e/b5/f8495c7917f15cc6fee1e7f395e324ec3e00ab3c665a7dc9d27562fd5290/regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34", size = 848592, upload-time = "2024-11-06T20:09:56.222Z" }, - { url = "https://files.pythonhosted.org/packages/1c/80/6dd7118e8cb212c3c60b191b932dc57db93fb2e36fb9e0e92f72a5909af9/regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d", size = 852929, upload-time = "2024-11-06T20:09:58.642Z" }, - { url = "https://files.pythonhosted.org/packages/11/9b/5a05d2040297d2d254baf95eeeb6df83554e5e1df03bc1a6687fc4ba1f66/regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45", size = 781213, upload-time = "2024-11-06T20:10:00.867Z" }, - { url = "https://files.pythonhosted.org/packages/26/b7/b14e2440156ab39e0177506c08c18accaf2b8932e39fb092074de733d868/regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9", size = 261734, upload-time = "2024-11-06T20:10:03.361Z" }, - { url = "https://files.pythonhosted.org/packages/80/32/763a6cc01d21fb3819227a1cc3f60fd251c13c37c27a73b8ff4315433a8e/regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60", size = 274052, upload-time = "2024-11-06T20:10:05.179Z" }, - { url = "https://files.pythonhosted.org/packages/ba/30/9a87ce8336b172cc232a0db89a3af97929d06c11ceaa19d97d84fa90a8f8/regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a", size = 483781, upload-time = "2024-11-06T20:10:07.07Z" }, - { url = "https://files.pythonhosted.org/packages/01/e8/00008ad4ff4be8b1844786ba6636035f7ef926db5686e4c0f98093612add/regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9", size = 288455, upload-time = "2024-11-06T20:10:09.117Z" }, - { url = "https://files.pythonhosted.org/packages/60/85/cebcc0aff603ea0a201667b203f13ba75d9fc8668fab917ac5b2de3967bc/regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2", size = 284759, upload-time = "2024-11-06T20:10:11.155Z" }, - { url = "https://files.pythonhosted.org/packages/94/2b/701a4b0585cb05472a4da28ee28fdfe155f3638f5e1ec92306d924e5faf0/regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4", size = 794976, upload-time = "2024-11-06T20:10:13.24Z" }, - { url = "https://files.pythonhosted.org/packages/4b/bf/fa87e563bf5fee75db8915f7352e1887b1249126a1be4813837f5dbec965/regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577", size = 833077, upload-time = "2024-11-06T20:10:15.37Z" }, - { url = "https://files.pythonhosted.org/packages/a1/56/7295e6bad94b047f4d0834e4779491b81216583c00c288252ef625c01d23/regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3", size = 823160, upload-time = "2024-11-06T20:10:19.027Z" }, - { url = "https://files.pythonhosted.org/packages/fb/13/e3b075031a738c9598c51cfbc4c7879e26729c53aa9cca59211c44235314/regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e", size = 796896, upload-time = "2024-11-06T20:10:21.85Z" }, - { url = "https://files.pythonhosted.org/packages/24/56/0b3f1b66d592be6efec23a795b37732682520b47c53da5a32c33ed7d84e3/regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe", size = 783997, upload-time = "2024-11-06T20:10:24.329Z" }, - { url = "https://files.pythonhosted.org/packages/f9/a1/eb378dada8b91c0e4c5f08ffb56f25fcae47bf52ad18f9b2f33b83e6d498/regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e", size = 781725, upload-time = "2024-11-06T20:10:28.067Z" }, - { url = "https://files.pythonhosted.org/packages/83/f2/033e7dec0cfd6dda93390089864732a3409246ffe8b042e9554afa9bff4e/regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29", size = 789481, upload-time = "2024-11-06T20:10:31.612Z" }, - { url = "https://files.pythonhosted.org/packages/83/23/15d4552ea28990a74e7696780c438aadd73a20318c47e527b47a4a5a596d/regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39", size = 852896, upload-time = "2024-11-06T20:10:34.054Z" }, - { url = "https://files.pythonhosted.org/packages/e3/39/ed4416bc90deedbfdada2568b2cb0bc1fdb98efe11f5378d9892b2a88f8f/regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51", size = 860138, upload-time = "2024-11-06T20:10:36.142Z" }, - { url = "https://files.pythonhosted.org/packages/93/2d/dd56bb76bd8e95bbce684326302f287455b56242a4f9c61f1bc76e28360e/regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad", size = 787692, upload-time = "2024-11-06T20:10:38.394Z" }, - { url = "https://files.pythonhosted.org/packages/0b/55/31877a249ab7a5156758246b9c59539abbeba22461b7d8adc9e8475ff73e/regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54", size = 262135, upload-time = "2024-11-06T20:10:40.367Z" }, - { url = "https://files.pythonhosted.org/packages/38/ec/ad2d7de49a600cdb8dd78434a1aeffe28b9d6fc42eb36afab4a27ad23384/regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b", size = 273567, upload-time = "2024-11-06T20:10:43.467Z" }, - { url = "https://files.pythonhosted.org/packages/90/73/bcb0e36614601016552fa9344544a3a2ae1809dc1401b100eab02e772e1f/regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", size = 483525, upload-time = "2024-11-06T20:10:45.19Z" }, - { url = "https://files.pythonhosted.org/packages/0f/3f/f1a082a46b31e25291d830b369b6b0c5576a6f7fb89d3053a354c24b8a83/regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", size = 288324, upload-time = "2024-11-06T20:10:47.177Z" }, - { url = "https://files.pythonhosted.org/packages/09/c9/4e68181a4a652fb3ef5099e077faf4fd2a694ea6e0f806a7737aff9e758a/regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", size = 284617, upload-time = "2024-11-06T20:10:49.312Z" }, - { url = "https://files.pythonhosted.org/packages/fc/fd/37868b75eaf63843165f1d2122ca6cb94bfc0271e4428cf58c0616786dce/regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0", size = 795023, upload-time = "2024-11-06T20:10:51.102Z" }, - { url = "https://files.pythonhosted.org/packages/c4/7c/d4cd9c528502a3dedb5c13c146e7a7a539a3853dc20209c8e75d9ba9d1b2/regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7", size = 833072, upload-time = "2024-11-06T20:10:52.926Z" }, - { url = "https://files.pythonhosted.org/packages/4f/db/46f563a08f969159c5a0f0e722260568425363bea43bb7ae370becb66a67/regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7", size = 823130, upload-time = "2024-11-06T20:10:54.828Z" }, - { url = "https://files.pythonhosted.org/packages/db/60/1eeca2074f5b87df394fccaa432ae3fc06c9c9bfa97c5051aed70e6e00c2/regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c", size = 796857, upload-time = "2024-11-06T20:10:56.634Z" }, - { url = "https://files.pythonhosted.org/packages/10/db/ac718a08fcee981554d2f7bb8402f1faa7e868c1345c16ab1ebec54b0d7b/regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3", size = 784006, upload-time = "2024-11-06T20:10:59.369Z" }, - { url = "https://files.pythonhosted.org/packages/c2/41/7da3fe70216cea93144bf12da2b87367590bcf07db97604edeea55dac9ad/regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07", size = 781650, upload-time = "2024-11-06T20:11:02.042Z" }, - { url = "https://files.pythonhosted.org/packages/a7/d5/880921ee4eec393a4752e6ab9f0fe28009435417c3102fc413f3fe81c4e5/regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e", size = 789545, upload-time = "2024-11-06T20:11:03.933Z" }, - { url = "https://files.pythonhosted.org/packages/dc/96/53770115e507081122beca8899ab7f5ae28ae790bfcc82b5e38976df6a77/regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6", size = 853045, upload-time = "2024-11-06T20:11:06.497Z" }, - { url = "https://files.pythonhosted.org/packages/31/d3/1372add5251cc2d44b451bd94f43b2ec78e15a6e82bff6a290ef9fd8f00a/regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4", size = 860182, upload-time = "2024-11-06T20:11:09.06Z" }, - { url = "https://files.pythonhosted.org/packages/ed/e3/c446a64984ea9f69982ba1a69d4658d5014bc7a0ea468a07e1a1265db6e2/regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d", size = 787733, upload-time = "2024-11-06T20:11:11.256Z" }, - { url = "https://files.pythonhosted.org/packages/2b/f1/e40c8373e3480e4f29f2692bd21b3e05f296d3afebc7e5dcf21b9756ca1c/regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", size = 262122, upload-time = "2024-11-06T20:11:13.161Z" }, - { url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", size = 273545, upload-time = "2024-11-06T20:11:15Z" }, +version = "2025.7.34" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/de/e13fa6dc61d78b30ba47481f99933a3b49a57779d625c392d8036770a60d/regex-2025.7.34.tar.gz", hash = "sha256:9ead9765217afd04a86822dfcd4ed2747dfe426e887da413b15ff0ac2457e21a", size = 400714, upload-time = "2025-07-31T00:21:16.262Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/85/f497b91577169472f7c1dc262a5ecc65e39e146fc3a52c571e5daaae4b7d/regex-2025.7.34-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:da304313761b8500b8e175eb2040c4394a875837d5635f6256d6fa0377ad32c8", size = 484594, upload-time = "2025-07-31T00:19:13.927Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c5/ad2a5c11ce9e6257fcbfd6cd965d07502f6054aaa19d50a3d7fd991ec5d1/regex-2025.7.34-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:35e43ebf5b18cd751ea81455b19acfdec402e82fe0dc6143edfae4c5c4b3909a", size = 289294, upload-time = "2025-07-31T00:19:15.395Z" }, + { url = "https://files.pythonhosted.org/packages/8e/01/83ffd9641fcf5e018f9b51aa922c3e538ac9439424fda3df540b643ecf4f/regex-2025.7.34-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96bbae4c616726f4661fe7bcad5952e10d25d3c51ddc388189d8864fbc1b3c68", size = 285933, upload-time = "2025-07-31T00:19:16.704Z" }, + { url = "https://files.pythonhosted.org/packages/77/20/5edab2e5766f0259bc1da7381b07ce6eb4401b17b2254d02f492cd8a81a8/regex-2025.7.34-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9feab78a1ffa4f2b1e27b1bcdaad36f48c2fed4870264ce32f52a393db093c78", size = 792335, upload-time = "2025-07-31T00:19:18.561Z" }, + { url = "https://files.pythonhosted.org/packages/30/bd/744d3ed8777dce8487b2606b94925e207e7c5931d5870f47f5b643a4580a/regex-2025.7.34-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f14b36e6d4d07f1a5060f28ef3b3561c5d95eb0651741474ce4c0a4c56ba8719", size = 858605, upload-time = "2025-07-31T00:19:20.204Z" }, + { url = "https://files.pythonhosted.org/packages/99/3d/93754176289718d7578c31d151047e7b8acc7a8c20e7706716f23c49e45e/regex-2025.7.34-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85c3a958ef8b3d5079c763477e1f09e89d13ad22198a37e9d7b26b4b17438b33", size = 905780, upload-time = "2025-07-31T00:19:21.876Z" }, + { url = "https://files.pythonhosted.org/packages/ee/2e/c689f274a92deffa03999a430505ff2aeace408fd681a90eafa92fdd6930/regex-2025.7.34-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:37555e4ae0b93358fa7c2d240a4291d4a4227cc7c607d8f85596cdb08ec0a083", size = 798868, upload-time = "2025-07-31T00:19:23.222Z" }, + { url = "https://files.pythonhosted.org/packages/0d/9e/39673688805d139b33b4a24851a71b9978d61915c4d72b5ffda324d0668a/regex-2025.7.34-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ee38926f31f1aa61b0232a3a11b83461f7807661c062df9eb88769d86e6195c3", size = 781784, upload-time = "2025-07-31T00:19:24.59Z" }, + { url = "https://files.pythonhosted.org/packages/18/bd/4c1cab12cfabe14beaa076523056b8ab0c882a8feaf0a6f48b0a75dab9ed/regex-2025.7.34-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a664291c31cae9c4a30589bd8bc2ebb56ef880c9c6264cb7643633831e606a4d", size = 852837, upload-time = "2025-07-31T00:19:25.911Z" }, + { url = "https://files.pythonhosted.org/packages/cb/21/663d983cbb3bba537fc213a579abbd0f263fb28271c514123f3c547ab917/regex-2025.7.34-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f3e5c1e0925e77ec46ddc736b756a6da50d4df4ee3f69536ffb2373460e2dafd", size = 844240, upload-time = "2025-07-31T00:19:27.688Z" }, + { url = "https://files.pythonhosted.org/packages/8e/2d/9beeeb913bc5d32faa913cf8c47e968da936af61ec20af5d269d0f84a100/regex-2025.7.34-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d428fc7731dcbb4e2ffe43aeb8f90775ad155e7db4347a639768bc6cd2df881a", size = 787139, upload-time = "2025-07-31T00:19:29.475Z" }, + { url = "https://files.pythonhosted.org/packages/eb/f5/9b9384415fdc533551be2ba805dd8c4621873e5df69c958f403bfd3b2b6e/regex-2025.7.34-cp311-cp311-win32.whl", hash = "sha256:e154a7ee7fa18333ad90b20e16ef84daaeac61877c8ef942ec8dfa50dc38b7a1", size = 264019, upload-time = "2025-07-31T00:19:31.129Z" }, + { url = "https://files.pythonhosted.org/packages/18/9d/e069ed94debcf4cc9626d652a48040b079ce34c7e4fb174f16874958d485/regex-2025.7.34-cp311-cp311-win_amd64.whl", hash = "sha256:24257953d5c1d6d3c129ab03414c07fc1a47833c9165d49b954190b2b7f21a1a", size = 276047, upload-time = "2025-07-31T00:19:32.497Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cf/3bafbe9d1fd1db77355e7fbbbf0d0cfb34501a8b8e334deca14f94c7b315/regex-2025.7.34-cp311-cp311-win_arm64.whl", hash = "sha256:3157aa512b9e606586900888cd469a444f9b898ecb7f8931996cb715f77477f0", size = 268362, upload-time = "2025-07-31T00:19:34.094Z" }, + { url = "https://files.pythonhosted.org/packages/ff/f0/31d62596c75a33f979317658e8d261574785c6cd8672c06741ce2e2e2070/regex-2025.7.34-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7f7211a746aced993bef487de69307a38c5ddd79257d7be83f7b202cb59ddb50", size = 485492, upload-time = "2025-07-31T00:19:35.57Z" }, + { url = "https://files.pythonhosted.org/packages/d8/16/b818d223f1c9758c3434be89aa1a01aae798e0e0df36c1f143d1963dd1ee/regex-2025.7.34-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fb31080f2bd0681484b275461b202b5ad182f52c9ec606052020fe13eb13a72f", size = 290000, upload-time = "2025-07-31T00:19:37.175Z" }, + { url = "https://files.pythonhosted.org/packages/cd/70/69506d53397b4bd6954061bae75677ad34deb7f6ca3ba199660d6f728ff5/regex-2025.7.34-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0200a5150c4cf61e407038f4b4d5cdad13e86345dac29ff9dab3d75d905cf130", size = 286072, upload-time = "2025-07-31T00:19:38.612Z" }, + { url = "https://files.pythonhosted.org/packages/b0/73/536a216d5f66084fb577bb0543b5cb7de3272eb70a157f0c3a542f1c2551/regex-2025.7.34-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:739a74970e736df0773788377969c9fea3876c2fc13d0563f98e5503e5185f46", size = 797341, upload-time = "2025-07-31T00:19:40.119Z" }, + { url = "https://files.pythonhosted.org/packages/26/af/733f8168449e56e8f404bb807ea7189f59507cbea1b67a7bbcd92f8bf844/regex-2025.7.34-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4fef81b2f7ea6a2029161ed6dea9ae13834c28eb5a95b8771828194a026621e4", size = 862556, upload-time = "2025-07-31T00:19:41.556Z" }, + { url = "https://files.pythonhosted.org/packages/19/dd/59c464d58c06c4f7d87de4ab1f590e430821345a40c5d345d449a636d15f/regex-2025.7.34-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ea74cf81fe61a7e9d77989050d0089a927ab758c29dac4e8e1b6c06fccf3ebf0", size = 910762, upload-time = "2025-07-31T00:19:43Z" }, + { url = "https://files.pythonhosted.org/packages/37/a8/b05ccf33ceca0815a1e253693b2c86544932ebcc0049c16b0fbdf18b688b/regex-2025.7.34-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e4636a7f3b65a5f340ed9ddf53585c42e3ff37101d383ed321bfe5660481744b", size = 801892, upload-time = "2025-07-31T00:19:44.645Z" }, + { url = "https://files.pythonhosted.org/packages/5f/9a/b993cb2e634cc22810afd1652dba0cae156c40d4864285ff486c73cd1996/regex-2025.7.34-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cef962d7834437fe8d3da6f9bfc6f93f20f218266dcefec0560ed7765f5fe01", size = 786551, upload-time = "2025-07-31T00:19:46.127Z" }, + { url = "https://files.pythonhosted.org/packages/2d/79/7849d67910a0de4e26834b5bb816e028e35473f3d7ae563552ea04f58ca2/regex-2025.7.34-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:cbe1698e5b80298dbce8df4d8d1182279fbdaf1044e864cbc9d53c20e4a2be77", size = 856457, upload-time = "2025-07-31T00:19:47.562Z" }, + { url = "https://files.pythonhosted.org/packages/91/c6/de516bc082524b27e45cb4f54e28bd800c01efb26d15646a65b87b13a91e/regex-2025.7.34-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:32b9f9bcf0f605eb094b08e8da72e44badabb63dde6b83bd530580b488d1c6da", size = 848902, upload-time = "2025-07-31T00:19:49.312Z" }, + { url = "https://files.pythonhosted.org/packages/7d/22/519ff8ba15f732db099b126f039586bd372da6cd4efb810d5d66a5daeda1/regex-2025.7.34-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:524c868ba527eab4e8744a9287809579f54ae8c62fbf07d62aacd89f6026b282", size = 788038, upload-time = "2025-07-31T00:19:50.794Z" }, + { url = "https://files.pythonhosted.org/packages/3f/7d/aabb467d8f57d8149895d133c88eb809a1a6a0fe262c1d508eb9dfabb6f9/regex-2025.7.34-cp312-cp312-win32.whl", hash = "sha256:d600e58ee6d036081c89696d2bdd55d507498a7180df2e19945c6642fac59588", size = 264417, upload-time = "2025-07-31T00:19:52.292Z" }, + { url = "https://files.pythonhosted.org/packages/3b/39/bd922b55a4fc5ad5c13753274e5b536f5b06ec8eb9747675668491c7ab7a/regex-2025.7.34-cp312-cp312-win_amd64.whl", hash = "sha256:9a9ab52a466a9b4b91564437b36417b76033e8778e5af8f36be835d8cb370d62", size = 275387, upload-time = "2025-07-31T00:19:53.593Z" }, + { url = "https://files.pythonhosted.org/packages/f7/3c/c61d2fdcecb754a40475a3d1ef9a000911d3e3fc75c096acf44b0dfb786a/regex-2025.7.34-cp312-cp312-win_arm64.whl", hash = "sha256:c83aec91af9c6fbf7c743274fd952272403ad9a9db05fe9bfc9df8d12b45f176", size = 268482, upload-time = "2025-07-31T00:19:55.183Z" }, + { url = "https://files.pythonhosted.org/packages/15/16/b709b2119975035169a25aa8e4940ca177b1a2e25e14f8d996d09130368e/regex-2025.7.34-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c3c9740a77aeef3f5e3aaab92403946a8d34437db930a0280e7e81ddcada61f5", size = 485334, upload-time = "2025-07-31T00:19:56.58Z" }, + { url = "https://files.pythonhosted.org/packages/94/a6/c09136046be0595f0331bc58a0e5f89c2d324cf734e0b0ec53cf4b12a636/regex-2025.7.34-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:69ed3bc611540f2ea70a4080f853741ec698be556b1df404599f8724690edbcd", size = 289942, upload-time = "2025-07-31T00:19:57.943Z" }, + { url = "https://files.pythonhosted.org/packages/36/91/08fc0fd0f40bdfb0e0df4134ee37cfb16e66a1044ac56d36911fd01c69d2/regex-2025.7.34-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d03c6f9dcd562c56527c42b8530aad93193e0b3254a588be1f2ed378cdfdea1b", size = 285991, upload-time = "2025-07-31T00:19:59.837Z" }, + { url = "https://files.pythonhosted.org/packages/be/2f/99dc8f6f756606f0c214d14c7b6c17270b6bbe26d5c1f05cde9dbb1c551f/regex-2025.7.34-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6164b1d99dee1dfad33f301f174d8139d4368a9fb50bf0a3603b2eaf579963ad", size = 797415, upload-time = "2025-07-31T00:20:01.668Z" }, + { url = "https://files.pythonhosted.org/packages/62/cf/2fcdca1110495458ba4e95c52ce73b361cf1cafd8a53b5c31542cde9a15b/regex-2025.7.34-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1e4f4f62599b8142362f164ce776f19d79bdd21273e86920a7b604a4275b4f59", size = 862487, upload-time = "2025-07-31T00:20:03.142Z" }, + { url = "https://files.pythonhosted.org/packages/90/38/899105dd27fed394e3fae45607c1983e138273ec167e47882fc401f112b9/regex-2025.7.34-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:72a26dcc6a59c057b292f39d41465d8233a10fd69121fa24f8f43ec6294e5415", size = 910717, upload-time = "2025-07-31T00:20:04.727Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f6/4716198dbd0bcc9c45625ac4c81a435d1c4d8ad662e8576dac06bab35b17/regex-2025.7.34-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5273fddf7a3e602695c92716c420c377599ed3c853ea669c1fe26218867002f", size = 801943, upload-time = "2025-07-31T00:20:07.1Z" }, + { url = "https://files.pythonhosted.org/packages/40/5d/cff8896d27e4e3dd11dd72ac78797c7987eb50fe4debc2c0f2f1682eb06d/regex-2025.7.34-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c1844be23cd40135b3a5a4dd298e1e0c0cb36757364dd6cdc6025770363e06c1", size = 786664, upload-time = "2025-07-31T00:20:08.818Z" }, + { url = "https://files.pythonhosted.org/packages/10/29/758bf83cf7b4c34f07ac3423ea03cee3eb3176941641e4ccc05620f6c0b8/regex-2025.7.34-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dde35e2afbbe2272f8abee3b9fe6772d9b5a07d82607b5788e8508974059925c", size = 856457, upload-time = "2025-07-31T00:20:10.328Z" }, + { url = "https://files.pythonhosted.org/packages/d7/30/c19d212b619963c5b460bfed0ea69a092c6a43cba52a973d46c27b3e2975/regex-2025.7.34-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f3f6e8e7af516a7549412ce57613e859c3be27d55341a894aacaa11703a4c31a", size = 849008, upload-time = "2025-07-31T00:20:11.823Z" }, + { url = "https://files.pythonhosted.org/packages/9e/b8/3c35da3b12c87e3cc00010ef6c3a4ae787cff0bc381aa3d251def219969a/regex-2025.7.34-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:469142fb94a869beb25b5f18ea87646d21def10fbacb0bcb749224f3509476f0", size = 788101, upload-time = "2025-07-31T00:20:13.729Z" }, + { url = "https://files.pythonhosted.org/packages/47/80/2f46677c0b3c2b723b2c358d19f9346e714113865da0f5f736ca1a883bde/regex-2025.7.34-cp313-cp313-win32.whl", hash = "sha256:da7507d083ee33ccea1310447410c27ca11fb9ef18c95899ca57ff60a7e4d8f1", size = 264401, upload-time = "2025-07-31T00:20:15.233Z" }, + { url = "https://files.pythonhosted.org/packages/be/fa/917d64dd074682606a003cba33585c28138c77d848ef72fc77cbb1183849/regex-2025.7.34-cp313-cp313-win_amd64.whl", hash = "sha256:9d644de5520441e5f7e2db63aec2748948cc39ed4d7a87fd5db578ea4043d997", size = 275368, upload-time = "2025-07-31T00:20:16.711Z" }, + { url = "https://files.pythonhosted.org/packages/65/cd/f94383666704170a2154a5df7b16be28f0c27a266bffcd843e58bc84120f/regex-2025.7.34-cp313-cp313-win_arm64.whl", hash = "sha256:7bf1c5503a9f2cbd2f52d7e260acb3131b07b6273c470abb78568174fe6bde3f", size = 268482, upload-time = "2025-07-31T00:20:18.189Z" }, + { url = "https://files.pythonhosted.org/packages/ac/23/6376f3a23cf2f3c00514b1cdd8c990afb4dfbac3cb4a68b633c6b7e2e307/regex-2025.7.34-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:8283afe7042d8270cecf27cca558873168e771183d4d593e3c5fe5f12402212a", size = 485385, upload-time = "2025-07-31T00:20:19.692Z" }, + { url = "https://files.pythonhosted.org/packages/73/5b/6d4d3a0b4d312adbfd6d5694c8dddcf1396708976dd87e4d00af439d962b/regex-2025.7.34-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6c053f9647e3421dd2f5dff8172eb7b4eec129df9d1d2f7133a4386319b47435", size = 289788, upload-time = "2025-07-31T00:20:21.941Z" }, + { url = "https://files.pythonhosted.org/packages/92/71/5862ac9913746e5054d01cb9fb8125b3d0802c0706ef547cae1e7f4428fa/regex-2025.7.34-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a16dd56bbcb7d10e62861c3cd000290ddff28ea142ffb5eb3470f183628011ac", size = 286136, upload-time = "2025-07-31T00:20:26.146Z" }, + { url = "https://files.pythonhosted.org/packages/27/df/5b505dc447eb71278eba10d5ec940769ca89c1af70f0468bfbcb98035dc2/regex-2025.7.34-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69c593ff5a24c0d5c1112b0df9b09eae42b33c014bdca7022d6523b210b69f72", size = 797753, upload-time = "2025-07-31T00:20:27.919Z" }, + { url = "https://files.pythonhosted.org/packages/86/38/3e3dc953d13998fa047e9a2414b556201dbd7147034fbac129392363253b/regex-2025.7.34-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98d0ce170fcde1a03b5df19c5650db22ab58af375aaa6ff07978a85c9f250f0e", size = 863263, upload-time = "2025-07-31T00:20:29.803Z" }, + { url = "https://files.pythonhosted.org/packages/68/e5/3ff66b29dde12f5b874dda2d9dec7245c2051f2528d8c2a797901497f140/regex-2025.7.34-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d72765a4bff8c43711d5b0f5b452991a9947853dfa471972169b3cc0ba1d0751", size = 910103, upload-time = "2025-07-31T00:20:31.313Z" }, + { url = "https://files.pythonhosted.org/packages/9e/fe/14176f2182125977fba3711adea73f472a11f3f9288c1317c59cd16ad5e6/regex-2025.7.34-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4494f8fd95a77eb434039ad8460e64d57baa0434f1395b7da44015bef650d0e4", size = 801709, upload-time = "2025-07-31T00:20:33.323Z" }, + { url = "https://files.pythonhosted.org/packages/5a/0d/80d4e66ed24f1ba876a9e8e31b709f9fd22d5c266bf5f3ab3c1afe683d7d/regex-2025.7.34-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4f42b522259c66e918a0121a12429b2abcf696c6f967fa37bdc7b72e61469f98", size = 786726, upload-time = "2025-07-31T00:20:35.252Z" }, + { url = "https://files.pythonhosted.org/packages/12/75/c3ebb30e04a56c046f5c85179dc173818551037daae2c0c940c7b19152cb/regex-2025.7.34-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:aaef1f056d96a0a5d53ad47d019d5b4c66fe4be2da87016e0d43b7242599ffc7", size = 857306, upload-time = "2025-07-31T00:20:37.12Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b2/a4dc5d8b14f90924f27f0ac4c4c4f5e195b723be98adecc884f6716614b6/regex-2025.7.34-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:656433e5b7dccc9bc0da6312da8eb897b81f5e560321ec413500e5367fcd5d47", size = 848494, upload-time = "2025-07-31T00:20:38.818Z" }, + { url = "https://files.pythonhosted.org/packages/0d/21/9ac6e07a4c5e8646a90b56b61f7e9dac11ae0747c857f91d3d2bc7c241d9/regex-2025.7.34-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e91eb2c62c39705e17b4d42d4b86c4e86c884c0d15d9c5a47d0835f8387add8e", size = 787850, upload-time = "2025-07-31T00:20:40.478Z" }, + { url = "https://files.pythonhosted.org/packages/be/6c/d51204e28e7bc54f9a03bb799b04730d7e54ff2718862b8d4e09e7110a6a/regex-2025.7.34-cp314-cp314-win32.whl", hash = "sha256:f978ddfb6216028c8f1d6b0f7ef779949498b64117fc35a939022f67f810bdcb", size = 269730, upload-time = "2025-07-31T00:20:42.253Z" }, + { url = "https://files.pythonhosted.org/packages/74/52/a7e92d02fa1fdef59d113098cb9f02c5d03289a0e9f9e5d4d6acccd10677/regex-2025.7.34-cp314-cp314-win_amd64.whl", hash = "sha256:4b7dc33b9b48fb37ead12ffc7bdb846ac72f99a80373c4da48f64b373a7abeae", size = 278640, upload-time = "2025-07-31T00:20:44.42Z" }, + { url = "https://files.pythonhosted.org/packages/d1/78/a815529b559b1771080faa90c3ab401730661f99d495ab0071649f139ebd/regex-2025.7.34-cp314-cp314-win_arm64.whl", hash = "sha256:4b8c4d39f451e64809912c82392933d80fe2e4a87eeef8859fcc5380d0173c64", size = 271757, upload-time = "2025-07-31T00:20:46.355Z" }, ] [[package]] name = "requests" -version = "2.32.3" +version = "2.32.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, @@ -1635,48 +1785,118 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218, upload-time = "2024-05-29T15:37:49.536Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928, upload-time = "2024-05-29T15:37:47.027Z" }, + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, ] [[package]] name = "requests-sse" -version = "0.5.1" +version = "0.5.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/57/91c3be234a531164786622f74aed74610125cfa1a9e3b707df417479673e/requests_sse-0.5.1.tar.gz", hash = "sha256:42df8ad8b8428a44b3f27d2501b68d3f2dd6eaa8cf4cc82e9e53cc3d18eea9cd", size = 9235, upload-time = "2025-04-06T09:34:07.605Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cf/73/dd6b0ae667c7720ddd5479f6216b1442610fdd162e27ce7bfb8357083f06/requests_sse-0.5.2.tar.gz", hash = "sha256:2bcb7cf905074b18ff9f7322716234c1188dfde805bba38300b37c6b5ae3a20a", size = 9001, upload-time = "2025-06-17T01:32:42.768Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/70/98/3af56b760a81649034996ec11e9c59500f1e775d6f3296bfd992112dc08f/requests_sse-0.5.1-py3-none-any.whl", hash = "sha256:29165526fc138698f6fa4e88a8613ca8e1bd9b4b82f5d3220c60724cec60da96", size = 9911, upload-time = "2025-04-06T09:34:05.448Z" }, + { url = "https://files.pythonhosted.org/packages/15/73/bf4771da460b528edc0ff9f2845682b50d60ffb84b4587f90ef665408195/requests_sse-0.5.2-py3-none-any.whl", hash = "sha256:ebd9da245c2bb02bc070617e16b37a260a7386abf6cd9b2a250a6529a92c74cf", size = 10078, upload-time = "2025-06-17T01:32:41.299Z" }, ] [[package]] name = "rich" -version = "13.9.4" +version = "14.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149, upload-time = "2024-11-01T16:43:57.873Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441, upload-time = "2025-07-25T07:32:58.125Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424, upload-time = "2024-11-01T16:43:55.817Z" }, + { url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368, upload-time = "2025-07-25T07:32:56.73Z" }, ] [[package]] name = "rich-toolkit" -version = "0.13.2" +version = "0.15.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "rich" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5b/8a/71cfbf6bf6257ea785d1f030c22468f763eea1b3e5417620f2ba9abd6dca/rich_toolkit-0.13.2.tar.gz", hash = "sha256:fea92557530de7c28f121cbed572ad93d9e0ddc60c3ca643f1b831f2f56b95d3", size = 72288, upload-time = "2025-01-13T19:30:02.403Z" } +sdist = { url = "https://files.pythonhosted.org/packages/65/36/cdb3d51371ad0cccbf1541506304783bd72d55790709b8eb68c0d401a13a/rich_toolkit-0.15.0.tar.gz", hash = "sha256:3f5730e9f2d36d0bfe01cf723948b7ecf4cc355d2b71e2c00e094f7963128c09", size = 115118, upload-time = "2025-08-11T10:55:37.909Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/1b/1c2f43af46456050b27810a7a013af8a7e12bc545a0cdc00eb0df55eb769/rich_toolkit-0.13.2-py3-none-any.whl", hash = "sha256:f3f6c583e5283298a2f7dbd3c65aca18b7f818ad96174113ab5bec0b0e35ed61", size = 13566, upload-time = "2025-01-13T19:29:59.795Z" }, + { url = "https://files.pythonhosted.org/packages/75/e4/b0794eefb3cf78566b15e5bf576492c1d4a92ce5f6da55675bc11e9ef5d8/rich_toolkit-0.15.0-py3-none-any.whl", hash = "sha256:ddb91008283d4a7989fd8ff0324a48773a7a2276229c6a3070755645538ef1bb", size = 29062, upload-time = "2025-08-11T10:55:37.152Z" }, +] + +[[package]] +name = "rignore" +version = "0.6.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/73/46/05a94dc55ac03cf931d18e43b86ecee5ee054cb88b7853fffd741e35009c/rignore-0.6.4.tar.gz", hash = "sha256:e893fdd2d7fdcfa9407d0b7600ef2c2e2df97f55e1c45d4a8f54364829ddb0ab", size = 11633, upload-time = "2025-07-19T19:24:46.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/11/66992d271dbc44eac33f3b6b871855bc17e511b9279a2a0982b44c2b0c01/rignore-0.6.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:85f684dfc2c497e35ad34ffd6744a3bcdcac273ec1dbe7d0464bfa20f3331434", size = 888239, upload-time = "2025-07-19T19:23:51.835Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1b/a9bde714e474043f97a06097925cf11e4597f9453adc267427d05ff9f38e/rignore-0.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23954acc6debc852dbccbffbb70f0e26b12d230239e1ad0638eb5540694d0308", size = 824348, upload-time = "2025-07-19T19:23:45.54Z" }, + { url = "https://files.pythonhosted.org/packages/db/58/dabba227fee6553f9be069f58128419b6d4954c784c4cd566cfe59955c1f/rignore-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2bf793bd58dbf3dee063a758b23ea446b5f037370405ecefc78e1e8923fc658", size = 892419, upload-time = "2025-07-19T19:22:33.763Z" }, + { url = "https://files.pythonhosted.org/packages/2c/fa/e3c16368ee32d6d1146cf219b127fd5c7e6baf22cad7a7a5967782ff3b20/rignore-0.6.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1eaeaa5a904e098604ea2012383a721de06211c8b4013abf0d41c3cfeb982f4f", size = 873285, upload-time = "2025-07-19T19:22:46.67Z" }, + { url = "https://files.pythonhosted.org/packages/78/9d/ef43d760dc3d18011d8482692b478785a846bba64157844b3068e428739c/rignore-0.6.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a48bdbeb03093e3fac2b40d62a718c59b5bb4f29cfdc8e7cbb360e1ea7bf0056", size = 1160457, upload-time = "2025-07-19T19:22:59.457Z" }, + { url = "https://files.pythonhosted.org/packages/95/de/eca1b035705e0b4e6c630fd1fcec45d14cf354a4acea88cf29ea0a322fea/rignore-0.6.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c5f9452d116be405f0967160b449c46ac929b50eaf527f33ee4680e3716e39", size = 938833, upload-time = "2025-07-19T19:23:11.657Z" }, + { url = "https://files.pythonhosted.org/packages/d4/2d/58912efa4137e989616d679a5390b53e93d5150be47217dd686ff60cd4cd/rignore-0.6.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cf1039bfbdaa0f9710a6fb75436c25ca26d364881ec4d1e66d466bb36a7fb98", size = 950603, upload-time = "2025-07-19T19:23:35.245Z" }, + { url = "https://files.pythonhosted.org/packages/6f/3d/9827cc1c7674d8d884d3d231a224a2db8ea8eae075a1611dfdcd0c301e20/rignore-0.6.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:136629eb0ec2b6ac6ab34e71ce8065a07106fe615a53eceefc30200d528a4612", size = 976867, upload-time = "2025-07-19T19:23:24.919Z" }, + { url = "https://files.pythonhosted.org/packages/75/47/9dcee35e24897b62d66f7578f127bc91465c942a9d702d516d3fe7dcaa00/rignore-0.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:35e3d0ebaf01086e6454c3fecae141e2db74a5ddf4a97c72c69428baeff0b7d4", size = 1067603, upload-time = "2025-07-19T19:23:58.765Z" }, + { url = "https://files.pythonhosted.org/packages/4b/68/f66e7c0b0fc009f3e19ba8e6c3078a227285e3aecd9f6498d39df808cdfd/rignore-0.6.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:7ed1f9010fa1ef5ea0b69803d1dfb4b7355921779e03a30396034c52691658bc", size = 1136289, upload-time = "2025-07-19T19:24:11.136Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b7/6fff161fe3ae5c0e0a0dded9a428e41d31c7fefc4e57c7553b9ffb064139/rignore-0.6.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c16e9e898ed0afe2e20fa8d6412e02bd13f039f7e0d964a289368efd4d9ad320", size = 1111566, upload-time = "2025-07-19T19:24:23.065Z" }, + { url = "https://files.pythonhosted.org/packages/1f/c5/a5978ad65074a08dad46233a3333d154ae9cb9339325f3c181002a174746/rignore-0.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7e6bc0bdcd404a7a8268629e8e99967127bb41e02d9eb09a471364c4bc25e215", size = 1121142, upload-time = "2025-07-19T19:24:35.151Z" }, + { url = "https://files.pythonhosted.org/packages/e8/af/91f084374b95dc2477a4bd066957beb3b61b551f2364b4f7f5bc52c9e4c7/rignore-0.6.4-cp311-cp311-win32.whl", hash = "sha256:fdd59bd63d2a49cc6d4f3598f285552ccb1a41e001df1012e0e0345cf2cabf79", size = 643031, upload-time = "2025-07-19T19:24:55.541Z" }, + { url = "https://files.pythonhosted.org/packages/07/3a/31672aa957aebba8903005313697127bbbad9db3afcfc9857150301fab1d/rignore-0.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:7bf5be0e8a01845e57b5faa47ef9c623bb2070aa2f743c2fc73321ffaae45701", size = 721003, upload-time = "2025-07-19T19:24:48.867Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6c/e5af4383cdd7829ef9aa63ac82a6507983e02dbc7c2e7b9aa64b7b8e2c7a/rignore-0.6.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:74720d074b79f32449d5d212ce732e0144a294a184246d1f1e7bcc1fc5c83b69", size = 885885, upload-time = "2025-07-19T19:23:53.236Z" }, + { url = "https://files.pythonhosted.org/packages/89/3e/1b02a868830e464769aa417ee195ac352fe71ff818df8ce50c4b998edb9c/rignore-0.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0a8184fcf567bd6b6d7b85a0c138d98dd40f63054141c96b175844414c5530d7", size = 819736, upload-time = "2025-07-19T19:23:46.565Z" }, + { url = "https://files.pythonhosted.org/packages/e0/75/b9be0c523d97c09f3c6508a67ce376aba4efe41c333c58903a0d7366439a/rignore-0.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcb0d7d7ecc3fbccf6477bb187c04a091579ea139f15f139abe0b3b48bdfef69", size = 892779, upload-time = "2025-07-19T19:22:35.167Z" }, + { url = "https://files.pythonhosted.org/packages/91/f4/3064b06233697f2993485d132f06fe95061fef71631485da75aed246c4fd/rignore-0.6.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feac73377a156fb77b3df626c76f7e5893d9b4e9e886ac8c0f9d44f1206a2a91", size = 872116, upload-time = "2025-07-19T19:22:47.828Z" }, + { url = "https://files.pythonhosted.org/packages/99/94/cb8e7af9a3c0a665f10e2366144e0ebc66167cf846aca5f1ac31b3661598/rignore-0.6.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:465179bc30beb1f7a3439e428739a2b5777ed26660712b8c4e351b15a7c04483", size = 1163345, upload-time = "2025-07-19T19:23:00.557Z" }, + { url = "https://files.pythonhosted.org/packages/86/6b/49faa7ad85ceb6ccef265df40091d9992232d7f6055fa664fe0a8b13781c/rignore-0.6.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4a4877b4dca9cf31a4d09845b300c677c86267657540d0b4d3e6d0ce3110e6e9", size = 939967, upload-time = "2025-07-19T19:23:13.494Z" }, + { url = "https://files.pythonhosted.org/packages/80/c8/b91afda10bd5ca1e3a80463340b899c0dc26a7750a9f3c94f668585c7f40/rignore-0.6.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:456456802b1e77d1e2d149320ee32505b8183e309e228129950b807d204ddd17", size = 949717, upload-time = "2025-07-19T19:23:36.404Z" }, + { url = "https://files.pythonhosted.org/packages/3f/f1/88bfdde58ae3fb1c1a92bb801f492eea8eafcdaf05ab9b75130023a4670b/rignore-0.6.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c1ff2fc223f1d9473d36923160af37bf765548578eb9d47a2f52e90da8ae408", size = 975534, upload-time = "2025-07-19T19:23:25.988Z" }, + { url = "https://files.pythonhosted.org/packages/aa/8f/a80b4a2e48ceba56ba19e096d41263d844757e10aa36ede212571b5d8117/rignore-0.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e445fbc214ae18e0e644a78086ea5d0f579e210229a4fbe86367d11a4cd03c11", size = 1067837, upload-time = "2025-07-19T19:23:59.888Z" }, + { url = "https://files.pythonhosted.org/packages/7d/90/0905597af0e78748909ef58418442a480ddd93e9fc89b0ca9ab170c357c0/rignore-0.6.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e07d9c5270fc869bc431aadcfb6ed0447f89b8aafaa666914c077435dc76a123", size = 1134959, upload-time = "2025-07-19T19:24:12.396Z" }, + { url = "https://files.pythonhosted.org/packages/cc/7d/0fa29adf9183b61947ce6dc8a1a9779a8ea16573f557be28ec893f6ddbaa/rignore-0.6.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7a6ccc0ea83d2c0c6df6b166f2acacedcc220a516436490f41e99a5ae73b6019", size = 1109708, upload-time = "2025-07-19T19:24:24.176Z" }, + { url = "https://files.pythonhosted.org/packages/4e/a7/92892ed86b2e36da403dd3a0187829f2d880414cef75bd612bfdf4dedebc/rignore-0.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:536392c5ec91755db48389546c833c4ab1426fe03e5a8522992b54ef8a244e7e", size = 1120546, upload-time = "2025-07-19T19:24:36.377Z" }, + { url = "https://files.pythonhosted.org/packages/31/1b/d29ae1fe901d523741d6d1d3ffe0d630734dd0ed6b047628a69c1e15ea44/rignore-0.6.4-cp312-cp312-win32.whl", hash = "sha256:f5f9dca46fc41c0a1e236767f68be9d63bdd2726db13a0ae3a30f68414472969", size = 642005, upload-time = "2025-07-19T19:24:56.671Z" }, + { url = "https://files.pythonhosted.org/packages/1a/41/a224944824688995374e4525115ce85fecd82442fc85edd5bcd81f4f256d/rignore-0.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:e02eecb9e1b9f9bf7c9030ae73308a777bed3b2486204cc74dfcfbe699ab1497", size = 720358, upload-time = "2025-07-19T19:24:49.959Z" }, + { url = "https://files.pythonhosted.org/packages/db/a3/edd7d0d5cc0720de132b6651cef95ee080ce5fca11c77d8a47db848e5f90/rignore-0.6.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:2b3b1e266ce45189240d14dfa1057f8013ea34b9bc8b3b44125ec8d25fdb3985", size = 885304, upload-time = "2025-07-19T19:23:54.268Z" }, + { url = "https://files.pythonhosted.org/packages/93/a1/d8d2fb97a6548307507d049b7e93885d4a0dfa1c907af5983fd9f9362a21/rignore-0.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45fe803628cc14714df10e8d6cdc23950a47eb9eb37dfea9a4779f4c672d2aa0", size = 818799, upload-time = "2025-07-19T19:23:47.544Z" }, + { url = "https://files.pythonhosted.org/packages/b1/cd/949981fcc180ad5ba7b31c52e78b74b2dea6b7bf744ad4c0c4b212f6da78/rignore-0.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e439f034277a947a4126e2da79dbb43e33d73d7c09d3d72a927e02f8a16f59aa", size = 892024, upload-time = "2025-07-19T19:22:36.18Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d3/9042d701a8062d9c88f87760bbc2695ee2c23b3f002d34486b72a85f8efe/rignore-0.6.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:84b5121650ae24621154c7bdba8b8970b0739d8146505c9f38e0cda9385d1004", size = 871430, upload-time = "2025-07-19T19:22:49.62Z" }, + { url = "https://files.pythonhosted.org/packages/eb/50/3370249b984212b7355f3d9241aa6d02e706067c6d194a2614dfbc0f5b27/rignore-0.6.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52b0957b585ab48a445cf8ac1dbc33a272ab060835e583b4f95aa8c67c23fb2b", size = 1160559, upload-time = "2025-07-19T19:23:01.629Z" }, + { url = "https://files.pythonhosted.org/packages/6c/6f/2ad7f925838091d065524f30a8abda846d1813eee93328febf262b5cda21/rignore-0.6.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:50359e0d5287b5e2743bd2f2fbf05df619c8282fd3af12f6628ff97b9675551d", size = 939947, upload-time = "2025-07-19T19:23:14.608Z" }, + { url = "https://files.pythonhosted.org/packages/1f/01/626ec94d62475ae7ef8b00ef98cea61cbea52a389a666703c97c4673d406/rignore-0.6.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe18096dcb1596757dfe0b412aab6d32564473ae7ee58dea0a8b4be5b1a2e3b", size = 949471, upload-time = "2025-07-19T19:23:37.521Z" }, + { url = "https://files.pythonhosted.org/packages/e8/c3/699c4f03b3c46f4b5c02f17a0a339225da65aad547daa5b03001e7c6a382/rignore-0.6.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b79c212d9990a273ad91e8d9765e1766ef6ecedd3be65375d786a252762ba385", size = 974912, upload-time = "2025-07-19T19:23:27.13Z" }, + { url = "https://files.pythonhosted.org/packages/cd/35/04626c12f9f92a9fc789afc2be32838a5d9b23b6fa8b2ad4a8625638d15b/rignore-0.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6ffa7f2a8894c65aa5dc4e8ac8bbdf39a326c0c6589efd27686cfbb48f0197d", size = 1067281, upload-time = "2025-07-19T19:24:01.016Z" }, + { url = "https://files.pythonhosted.org/packages/fe/9c/8f17baf3b984afea151cb9094716f6f1fb8e8737db97fc6eb6d494bd0780/rignore-0.6.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a63f5720dffc8d8fb0a4d02fafb8370a4031ebf3f99a4e79f334a91e905b7349", size = 1134414, upload-time = "2025-07-19T19:24:13.534Z" }, + { url = "https://files.pythonhosted.org/packages/10/88/ef84ffa916a96437c12cefcc39d474122da9626d75e3a2ebe09ec5d32f1b/rignore-0.6.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ce33982da47ac5dc09d19b04fa8d7c9aa6292fc0bd1ecf33076989faa8886094", size = 1109330, upload-time = "2025-07-19T19:24:25.303Z" }, + { url = "https://files.pythonhosted.org/packages/27/43/2ada5a2ec03b82e903610a1c483f516f78e47700ee6db9823f739e08b3af/rignore-0.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d899621867aa266824fbd9150e298f19d25b93903ef0133c09f70c65a3416eca", size = 1120381, upload-time = "2025-07-19T19:24:37.798Z" }, + { url = "https://files.pythonhosted.org/packages/3b/99/e7bcc643085131cb14dbea772def72bf1f6fe9037171ebe177c4f228abc8/rignore-0.6.4-cp313-cp313-win32.whl", hash = "sha256:d0615a6bf4890ec5a90b5fb83666822088fbd4e8fcd740c386fcce51e2f6feea", size = 641761, upload-time = "2025-07-19T19:24:58.096Z" }, + { url = "https://files.pythonhosted.org/packages/d9/25/7798908044f27dea1a8abdc75c14523e33770137651e5f775a15143f4218/rignore-0.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:145177f0e32716dc2f220b07b3cde2385b994b7ea28d5c96fbec32639e9eac6f", size = 719876, upload-time = "2025-07-19T19:24:51.125Z" }, + { url = "https://files.pythonhosted.org/packages/b4/e3/ae1e30b045bf004ad77bbd1679b9afff2be8edb166520921c6f29420516a/rignore-0.6.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e55bf8f9bbd186f58ab646b4a08718c77131d28a9004e477612b0cbbd5202db2", size = 891776, upload-time = "2025-07-19T19:22:37.78Z" }, + { url = "https://files.pythonhosted.org/packages/45/a9/1193e3bc23ca0e6eb4f17cf4b99971237f97cfa6f241d98366dff90a6d09/rignore-0.6.4-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2521f7bf3ee1f2ab22a100a3a4eed39a97b025804e5afe4323528e9ce8f084a5", size = 871442, upload-time = "2025-07-19T19:22:50.972Z" }, + { url = "https://files.pythonhosted.org/packages/20/83/4c52ae429a0b2e1ce667e35b480e9a6846f9468c443baeaed5d775af9485/rignore-0.6.4-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cc35773a8a9c119359ef974d0856988d4601d4daa6f532c05f66b4587cf35bc", size = 1159844, upload-time = "2025-07-19T19:23:02.751Z" }, + { url = "https://files.pythonhosted.org/packages/c1/2f/c740f5751f464c937bfe252dc15a024ae081352cfe80d94aa16d6a617482/rignore-0.6.4-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b665b1ea14457d7b49e834baabc635a3b8c10cfb5cca5c21161fabdbfc2b850e", size = 939456, upload-time = "2025-07-19T19:23:15.72Z" }, + { url = "https://files.pythonhosted.org/packages/fc/dd/68dbb08ac0edabf44dd144ff546a3fb0253c5af708e066847df39fc9188f/rignore-0.6.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c7fd339f344a8548724f289495b835bed7b81174a0bc1c28c6497854bd8855db", size = 1067070, upload-time = "2025-07-19T19:24:02.803Z" }, + { url = "https://files.pythonhosted.org/packages/3b/3a/7e7ea6f0d31d3f5beb0f2cf2c4c362672f5f7f125714458673fc579e2bed/rignore-0.6.4-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:91dc94b1cc5af8d6d25ce6edd29e7351830f19b0a03b75cb3adf1f76d00f3007", size = 1134598, upload-time = "2025-07-19T19:24:15.039Z" }, + { url = "https://files.pythonhosted.org/packages/7e/06/1b3307f6437d29bede5a95738aa89e6d910ba68d4054175c9f60d8e2c6b1/rignore-0.6.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4d1918221a249e5342b60fd5fa513bf3d6bf272a8738e66023799f0c82ecd788", size = 1108862, upload-time = "2025-07-19T19:24:26.765Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d5/b37c82519f335f2c472a63fc6215c6f4c51063ecf3166e3acf508011afbd/rignore-0.6.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:240777332b859dc89dcba59ab6e3f1e062bc8e862ffa3e5f456e93f7fd5cb415", size = 1120002, upload-time = "2025-07-19T19:24:38.952Z" }, + { url = "https://files.pythonhosted.org/packages/ac/72/2f05559ed5e69bdfdb56ea3982b48e6c0017c59f7241f7e1c5cae992b347/rignore-0.6.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b0e548753e55cc648f1e7b02d9f74285fe48bb49cec93643d31e563773ab3f", size = 949454, upload-time = "2025-07-19T19:23:38.664Z" }, + { url = "https://files.pythonhosted.org/packages/0b/92/186693c8f838d670510ac1dfb35afbe964320fbffb343ba18f3d24441941/rignore-0.6.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6971ac9fdd5a0bd299a181096f091c4f3fd286643adceba98eccc03c688a6637", size = 974663, upload-time = "2025-07-19T19:23:28.24Z" }, + { url = "https://files.pythonhosted.org/packages/33/a1/daaa2df10dfa6d87c896a5783c8407c284530d5a056307d1f55a8ef0c533/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b3da26d5a35ab15525b68d30b7352ad2247321f5201fc7e50ba6d547f78d5ea", size = 895772, upload-time = "2025-07-19T19:22:43.423Z" }, + { url = "https://files.pythonhosted.org/packages/35/e6/65130a50cd3ed11c967034dfd653e160abb7879fb4ee338a1cccaeda7acd/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43028f3587558231d9fa68accff58c901dc50fd7bbc5764d3ee3df95290f6ebf", size = 873093, upload-time = "2025-07-19T19:22:55.745Z" }, + { url = "https://files.pythonhosted.org/packages/32/c4/02ead1274ce935c59f2bb3deaaaa339df9194bc40e3c2d8d623e31e47ec4/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc56f1fcab7740751b98fead67b98ba64896424d8c834ea22089568db4e36dfa", size = 1162199, upload-time = "2025-07-19T19:23:08.376Z" }, + { url = "https://files.pythonhosted.org/packages/78/0c/94a4edce0e80af69f200cc35d8da4c727c52d28f0c9d819b388849ae8ef6/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6033f2280898535a5f69935e08830a4e49ff1e29ef2c3f9a2b9ced59de06fdbf", size = 940176, upload-time = "2025-07-19T19:23:20.862Z" }, + { url = "https://files.pythonhosted.org/packages/43/92/21ec579c999a3ed4d1b2a5926a9d0edced7c65d8ac353bc9120d49b05a64/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f5ac0c4e6a24be88f3821e101ef4665e9e1dc015f9e45109f32fed71dbcdafa", size = 951632, upload-time = "2025-07-19T19:23:43.32Z" }, + { url = "https://files.pythonhosted.org/packages/67/c4/72e7ba244222b9efdeb18f9974d6f1e30cf5a2289e1b482a1e8b3ebee90f/rignore-0.6.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8906ac8dd585ece83b1346e0470260a1951058cc0ef5a17542069bde4aa3f42f", size = 976923, upload-time = "2025-07-19T19:23:32.678Z" }, + { url = "https://files.pythonhosted.org/packages/8e/14/e754c12bc953c7fa309687cd30a6ea95e5721168fb0b2a99a34bff24be5c/rignore-0.6.4-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:14d095622969504a2e56f666286202dad583f08d3347b7be2d647ddfd7a9bf47", size = 1069861, upload-time = "2025-07-19T19:24:07.671Z" }, + { url = "https://files.pythonhosted.org/packages/a6/24/ba2bdaf04a19b5331c051b9d480e8daca832bed4aeaa156d6d679044c06c/rignore-0.6.4-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:30f3d688df7eb4850318f1b5864d14f2c5fe5dbf3803ed0fc8329d2a7ad560dc", size = 1136368, upload-time = "2025-07-19T19:24:19.68Z" }, + { url = "https://files.pythonhosted.org/packages/83/48/7cf52353299e02aa629150007fa75f4b91d99b4f2fa536f2e24ead810116/rignore-0.6.4-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:028f62a7b0a6235bb3f03c9e7f342352e7fa4b3f08c761c72f9de8faee40ed9c", size = 1111714, upload-time = "2025-07-19T19:24:31.717Z" }, + { url = "https://files.pythonhosted.org/packages/84/9c/3881ad34f01942af0cf713e25e476bf851e04e389cc3ff146c3b459ab861/rignore-0.6.4-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:7e6c425603db2c147eace4f752ca3cd4551e7568c9d332175d586c68bcbe3d8d", size = 1122433, upload-time = "2025-07-19T19:24:43.973Z" }, ] [[package]] @@ -1735,6 +1955,19 @@ dev = [ { name = "pytest-httpx", specifier = ">=0.30.0" }, ] +[[package]] +name = "sentry-sdk" +version = "2.35.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/31/83/055dc157b719651ef13db569bb8cf2103df11174478649735c1b2bf3f6bc/sentry_sdk-2.35.0.tar.gz", hash = "sha256:5ea58d352779ce45d17bc2fa71ec7185205295b83a9dbb5707273deb64720092", size = 343014, upload-time = "2025-08-14T17:11:20.223Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/3d/742617a7c644deb0c1628dcf6bb2d2165ab7c6aab56fe5222758994007f8/sentry_sdk-2.35.0-py2.py3-none-any.whl", hash = "sha256:6e0c29b9a5d34de8575ffb04d289a987ff3053cf2c98ede445bea995e3830263", size = 363806, upload-time = "2025-08-14T17:11:18.29Z" }, +] + [[package]] name = "shellingham" version = "1.5.4" @@ -1764,44 +1997,44 @@ wheels = [ [[package]] name = "starlette" -version = "0.45.3" +version = "0.46.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ff/fb/2984a686808b89a6781526129a4b51266f678b2d2b97ab2d325e56116df8/starlette-0.45.3.tar.gz", hash = "sha256:2cbcba2a75806f8a41c722141486f37c28e30a0921c5f6fe4346cb0dcee1302f", size = 2574076, upload-time = "2025-01-24T11:17:36.535Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/20/08dfcd9c983f6a6f4a1000d934b9e6d626cff8d2eeb77a89a68eef20a2b7/starlette-0.46.2.tar.gz", hash = "sha256:7f7361f34eed179294600af672f565727419830b54b7b084efe44bb82d2fccd5", size = 2580846, upload-time = "2025-04-13T13:56:17.942Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/61/f2b52e107b1fc8944b33ef56bf6ac4ebbe16d91b94d2b87ce013bf63fb84/starlette-0.45.3-py3-none-any.whl", hash = "sha256:dfb6d332576f136ec740296c7e8bb8c8a7125044e7c6da30744718880cdd059d", size = 71507, upload-time = "2025-01-24T11:17:34.182Z" }, + { url = "https://files.pythonhosted.org/packages/8b/0c/9d30a4ebeb6db2b25a841afbb80f6ef9a854fc3b41be131d249a977b4959/starlette-0.46.2-py3-none-any.whl", hash = "sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35", size = 72037, upload-time = "2025-04-13T13:56:16.21Z" }, ] [[package]] name = "tiktoken" -version = "0.9.0" +version = "0.11.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "regex" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ea/cf/756fedf6981e82897f2d570dd25fa597eb3f4459068ae0572d7e888cfd6f/tiktoken-0.9.0.tar.gz", hash = "sha256:d02a5ca6a938e0490e1ff957bc48c8b078c88cb83977be1625b1fd8aac792c5d", size = 35991, upload-time = "2025-02-14T06:03:01.003Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/ae/4613a59a2a48e761c5161237fc850eb470b4bb93696db89da51b79a871f1/tiktoken-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f32cc56168eac4851109e9b5d327637f15fd662aa30dd79f964b7c39fbadd26e", size = 1065987, upload-time = "2025-02-14T06:02:14.174Z" }, - { url = "https://files.pythonhosted.org/packages/3f/86/55d9d1f5b5a7e1164d0f1538a85529b5fcba2b105f92db3622e5d7de6522/tiktoken-0.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:45556bc41241e5294063508caf901bf92ba52d8ef9222023f83d2483a3055348", size = 1009155, upload-time = "2025-02-14T06:02:15.384Z" }, - { url = "https://files.pythonhosted.org/packages/03/58/01fb6240df083b7c1916d1dcb024e2b761213c95d576e9f780dfb5625a76/tiktoken-0.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03935988a91d6d3216e2ec7c645afbb3d870b37bcb67ada1943ec48678e7ee33", size = 1142898, upload-time = "2025-02-14T06:02:16.666Z" }, - { url = "https://files.pythonhosted.org/packages/b1/73/41591c525680cd460a6becf56c9b17468d3711b1df242c53d2c7b2183d16/tiktoken-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b3d80aad8d2c6b9238fc1a5524542087c52b860b10cbf952429ffb714bc1136", size = 1197535, upload-time = "2025-02-14T06:02:18.595Z" }, - { url = "https://files.pythonhosted.org/packages/7d/7c/1069f25521c8f01a1a182f362e5c8e0337907fae91b368b7da9c3e39b810/tiktoken-0.9.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b2a21133be05dc116b1d0372af051cd2c6aa1d2188250c9b553f9fa49301b336", size = 1259548, upload-time = "2025-02-14T06:02:20.729Z" }, - { url = "https://files.pythonhosted.org/packages/6f/07/c67ad1724b8e14e2b4c8cca04b15da158733ac60136879131db05dda7c30/tiktoken-0.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:11a20e67fdf58b0e2dea7b8654a288e481bb4fc0289d3ad21291f8d0849915fb", size = 893895, upload-time = "2025-02-14T06:02:22.67Z" }, - { url = "https://files.pythonhosted.org/packages/cf/e5/21ff33ecfa2101c1bb0f9b6df750553bd873b7fb532ce2cb276ff40b197f/tiktoken-0.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e88f121c1c22b726649ce67c089b90ddda8b9662545a8aeb03cfef15967ddd03", size = 1065073, upload-time = "2025-02-14T06:02:24.768Z" }, - { url = "https://files.pythonhosted.org/packages/8e/03/a95e7b4863ee9ceec1c55983e4cc9558bcfd8f4f80e19c4f8a99642f697d/tiktoken-0.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a6600660f2f72369acb13a57fb3e212434ed38b045fd8cc6cdd74947b4b5d210", size = 1008075, upload-time = "2025-02-14T06:02:26.92Z" }, - { url = "https://files.pythonhosted.org/packages/40/10/1305bb02a561595088235a513ec73e50b32e74364fef4de519da69bc8010/tiktoken-0.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95e811743b5dfa74f4b227927ed86cbc57cad4df859cb3b643be797914e41794", size = 1140754, upload-time = "2025-02-14T06:02:28.124Z" }, - { url = "https://files.pythonhosted.org/packages/1b/40/da42522018ca496432ffd02793c3a72a739ac04c3794a4914570c9bb2925/tiktoken-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99376e1370d59bcf6935c933cb9ba64adc29033b7e73f5f7569f3aad86552b22", size = 1196678, upload-time = "2025-02-14T06:02:29.845Z" }, - { url = "https://files.pythonhosted.org/packages/5c/41/1e59dddaae270ba20187ceb8aa52c75b24ffc09f547233991d5fd822838b/tiktoken-0.9.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:badb947c32739fb6ddde173e14885fb3de4d32ab9d8c591cbd013c22b4c31dd2", size = 1259283, upload-time = "2025-02-14T06:02:33.838Z" }, - { url = "https://files.pythonhosted.org/packages/5b/64/b16003419a1d7728d0d8c0d56a4c24325e7b10a21a9dd1fc0f7115c02f0a/tiktoken-0.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:5a62d7a25225bafed786a524c1b9f0910a1128f4232615bf3f8257a73aaa3b16", size = 894897, upload-time = "2025-02-14T06:02:36.265Z" }, - { url = "https://files.pythonhosted.org/packages/7a/11/09d936d37f49f4f494ffe660af44acd2d99eb2429d60a57c71318af214e0/tiktoken-0.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b0e8e05a26eda1249e824156d537015480af7ae222ccb798e5234ae0285dbdb", size = 1064919, upload-time = "2025-02-14T06:02:37.494Z" }, - { url = "https://files.pythonhosted.org/packages/80/0e/f38ba35713edb8d4197ae602e80837d574244ced7fb1b6070b31c29816e0/tiktoken-0.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:27d457f096f87685195eea0165a1807fae87b97b2161fe8c9b1df5bd74ca6f63", size = 1007877, upload-time = "2025-02-14T06:02:39.516Z" }, - { url = "https://files.pythonhosted.org/packages/fe/82/9197f77421e2a01373e27a79dd36efdd99e6b4115746ecc553318ecafbf0/tiktoken-0.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cf8ded49cddf825390e36dd1ad35cd49589e8161fdcb52aa25f0583e90a3e01", size = 1140095, upload-time = "2025-02-14T06:02:41.791Z" }, - { url = "https://files.pythonhosted.org/packages/f2/bb/4513da71cac187383541facd0291c4572b03ec23c561de5811781bbd988f/tiktoken-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc156cb314119a8bb9748257a2eaebd5cc0753b6cb491d26694ed42fc7cb3139", size = 1195649, upload-time = "2025-02-14T06:02:43Z" }, - { url = "https://files.pythonhosted.org/packages/fa/5c/74e4c137530dd8504e97e3a41729b1103a4ac29036cbfd3250b11fd29451/tiktoken-0.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cd69372e8c9dd761f0ab873112aba55a0e3e506332dd9f7522ca466e817b1b7a", size = 1258465, upload-time = "2025-02-14T06:02:45.046Z" }, - { url = "https://files.pythonhosted.org/packages/de/a8/8f499c179ec900783ffe133e9aab10044481679bb9aad78436d239eee716/tiktoken-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5ea0edb6f83dc56d794723286215918c1cde03712cbbafa0348b33448faf5b95", size = 894669, upload-time = "2025-02-14T06:02:47.341Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/a7/86/ad0155a37c4f310935d5ac0b1ccf9bdb635dcb906e0a9a26b616dd55825a/tiktoken-0.11.0.tar.gz", hash = "sha256:3c518641aee1c52247c2b97e74d8d07d780092af79d5911a6ab5e79359d9b06a", size = 37648, upload-time = "2025-08-08T23:58:08.495Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/91/912b459799a025d2842566fe1e902f7f50d54a1ce8a0f236ab36b5bd5846/tiktoken-0.11.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4ae374c46afadad0f501046db3da1b36cd4dfbfa52af23c998773682446097cf", size = 1059743, upload-time = "2025-08-08T23:57:37.516Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e9/6faa6870489ce64f5f75dcf91512bf35af5864583aee8fcb0dcb593121f5/tiktoken-0.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25a512ff25dc6c85b58f5dd4f3d8c674dc05f96b02d66cdacf628d26a4e4866b", size = 999334, upload-time = "2025-08-08T23:57:38.595Z" }, + { url = "https://files.pythonhosted.org/packages/a1/3e/a05d1547cf7db9dc75d1461cfa7b556a3b48e0516ec29dfc81d984a145f6/tiktoken-0.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2130127471e293d385179c1f3f9cd445070c0772be73cdafb7cec9a3684c0458", size = 1129402, upload-time = "2025-08-08T23:57:39.627Z" }, + { url = "https://files.pythonhosted.org/packages/34/9a/db7a86b829e05a01fd4daa492086f708e0a8b53952e1dbc9d380d2b03677/tiktoken-0.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21e43022bf2c33f733ea9b54f6a3f6b4354b909f5a73388fb1b9347ca54a069c", size = 1184046, upload-time = "2025-08-08T23:57:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/9d/bb/52edc8e078cf062ed749248f1454e9e5cfd09979baadb830b3940e522015/tiktoken-0.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:adb4e308eb64380dc70fa30493e21c93475eaa11669dea313b6bbf8210bfd013", size = 1244691, upload-time = "2025-08-08T23:57:42.251Z" }, + { url = "https://files.pythonhosted.org/packages/60/d9/884b6cd7ae2570ecdcaffa02b528522b18fef1cbbfdbcaa73799807d0d3b/tiktoken-0.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:ece6b76bfeeb61a125c44bbefdfccc279b5288e6007fbedc0d32bfec602df2f2", size = 884392, upload-time = "2025-08-08T23:57:43.628Z" }, + { url = "https://files.pythonhosted.org/packages/e7/9e/eceddeffc169fc75fe0fd4f38471309f11cb1906f9b8aa39be4f5817df65/tiktoken-0.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fd9e6b23e860973cf9526544e220b223c60badf5b62e80a33509d6d40e6c8f5d", size = 1055199, upload-time = "2025-08-08T23:57:45.076Z" }, + { url = "https://files.pythonhosted.org/packages/4f/cf/5f02bfefffdc6b54e5094d2897bc80efd43050e5b09b576fd85936ee54bf/tiktoken-0.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6a76d53cee2da71ee2731c9caa747398762bda19d7f92665e882fef229cb0b5b", size = 996655, upload-time = "2025-08-08T23:57:46.304Z" }, + { url = "https://files.pythonhosted.org/packages/65/8e/c769b45ef379bc360c9978c4f6914c79fd432400a6733a8afc7ed7b0726a/tiktoken-0.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ef72aab3ea240646e642413cb363b73869fed4e604dcfd69eec63dc54d603e8", size = 1128867, upload-time = "2025-08-08T23:57:47.438Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2d/4d77f6feb9292bfdd23d5813e442b3bba883f42d0ac78ef5fdc56873f756/tiktoken-0.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f929255c705efec7a28bf515e29dc74220b2f07544a8c81b8d69e8efc4578bd", size = 1183308, upload-time = "2025-08-08T23:57:48.566Z" }, + { url = "https://files.pythonhosted.org/packages/7a/65/7ff0a65d3bb0fc5a1fb6cc71b03e0f6e71a68c5eea230d1ff1ba3fd6df49/tiktoken-0.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61f1d15822e4404953d499fd1dcc62817a12ae9fb1e4898033ec8fe3915fdf8e", size = 1244301, upload-time = "2025-08-08T23:57:49.642Z" }, + { url = "https://files.pythonhosted.org/packages/f5/6e/5b71578799b72e5bdcef206a214c3ce860d999d579a3b56e74a6c8989ee2/tiktoken-0.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:45927a71ab6643dfd3ef57d515a5db3d199137adf551f66453be098502838b0f", size = 884282, upload-time = "2025-08-08T23:57:50.759Z" }, + { url = "https://files.pythonhosted.org/packages/cc/cd/a9034bcee638716d9310443818d73c6387a6a96db93cbcb0819b77f5b206/tiktoken-0.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a5f3f25ffb152ee7fec78e90a5e5ea5b03b4ea240beed03305615847f7a6ace2", size = 1055339, upload-time = "2025-08-08T23:57:51.802Z" }, + { url = "https://files.pythonhosted.org/packages/f1/91/9922b345f611b4e92581f234e64e9661e1c524875c8eadd513c4b2088472/tiktoken-0.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7dc6e9ad16a2a75b4c4be7208055a1f707c9510541d94d9cc31f7fbdc8db41d8", size = 997080, upload-time = "2025-08-08T23:57:53.442Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9d/49cd047c71336bc4b4af460ac213ec1c457da67712bde59b892e84f1859f/tiktoken-0.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a0517634d67a8a48fd4a4ad73930c3022629a85a217d256a6e9b8b47439d1e4", size = 1128501, upload-time = "2025-08-08T23:57:54.808Z" }, + { url = "https://files.pythonhosted.org/packages/52/d5/a0dcdb40dd2ea357e83cb36258967f0ae96f5dd40c722d6e382ceee6bba9/tiktoken-0.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fb4effe60574675118b73c6fbfd3b5868e5d7a1f570d6cc0d18724b09ecf318", size = 1182743, upload-time = "2025-08-08T23:57:56.307Z" }, + { url = "https://files.pythonhosted.org/packages/3b/17/a0fc51aefb66b7b5261ca1314afa83df0106b033f783f9a7bcbe8e741494/tiktoken-0.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:94f984c9831fd32688aef4348803b0905d4ae9c432303087bae370dc1381a2b8", size = 1244057, upload-time = "2025-08-08T23:57:57.628Z" }, + { url = "https://files.pythonhosted.org/packages/50/79/bcf350609f3a10f09fe4fc207f132085e497fdd3612f3925ab24d86a0ca0/tiktoken-0.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:2177ffda31dec4023356a441793fed82f7af5291120751dee4d696414f54db0c", size = 883901, upload-time = "2025-08-08T23:57:59.359Z" }, ] [[package]] @@ -1818,7 +2051,7 @@ wheels = [ [[package]] name = "typer" -version = "0.15.1" +version = "0.16.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -1826,40 +2059,52 @@ dependencies = [ { name = "shellingham" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cb/ce/dca7b219718afd37a0068f4f2530a727c2b74a8b6e8e0c0080a4c0de4fcd/typer-0.15.1.tar.gz", hash = "sha256:a0588c0a7fa68a1978a069818657778f86abe6ff5ea6abf472f940a08bfe4f0a", size = 99789, upload-time = "2024-12-04T17:44:58.956Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/78/d90f616bf5f88f8710ad067c1f8705bf7618059836ca084e5bb2a0855d75/typer-0.16.1.tar.gz", hash = "sha256:d358c65a464a7a90f338e3bb7ff0c74ac081449e53884b12ba658cbd72990614", size = 102836, upload-time = "2025-08-18T19:18:22.898Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/cc/0a838ba5ca64dc832aa43f727bd586309846b0ffb2ce52422543e6075e8a/typer-0.15.1-py3-none-any.whl", hash = "sha256:7994fb7b8155b64d3402518560648446072864beefd44aa2dc36972a5972e847", size = 44908, upload-time = "2024-12-04T17:44:57.291Z" }, + { url = "https://files.pythonhosted.org/packages/2d/76/06dbe78f39b2203d2a47d5facc5df5102d0561e2807396471b5f7c5a30a1/typer-0.16.1-py3-none-any.whl", hash = "sha256:90ee01cb02d9b8395ae21ee3368421faf21fa138cb2a541ed369c08cec5237c9", size = 46397, upload-time = "2025-08-18T19:18:21.663Z" }, ] [[package]] name = "typing-extensions" -version = "4.12.2" +version = "4.14.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload-time = "2025-07-04T13:28:34.16Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload-time = "2025-07-04T13:28:32.743Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321, upload-time = "2024-06-07T18:52:15.995Z" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload-time = "2025-05-21T18:55:23.885Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438, upload-time = "2024-06-07T18:52:13.582Z" }, + { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload-time = "2025-05-21T18:55:22.152Z" }, ] [[package]] name = "urllib3" -version = "2.3.0" +version = "2.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268, upload-time = "2024-12-22T07:47:30.032Z" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369, upload-time = "2024-12-22T07:47:28.074Z" }, + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, ] [[package]] name = "uvicorn" -version = "0.34.0" +version = "0.35.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "h11" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4b/4d/938bd85e5bf2edeec766267a5015ad969730bb91e31b44021dfe8b22df6c/uvicorn-0.34.0.tar.gz", hash = "sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9", size = 76568, upload-time = "2024-12-15T13:33:30.42Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/42/e0e305207bb88c6b8d3061399c6a961ffe5fbb7e2aa63c9234df7259e9cd/uvicorn-0.35.0.tar.gz", hash = "sha256:bc662f087f7cf2ce11a1d7fd70b90c9f98ef2e2831556dd078d131b96cc94a01", size = 78473, upload-time = "2025-06-28T16:15:46.058Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/61/14/33a3a1352cfa71812a3a21e8c9bfb83f60b0011f5e36f2b1399d51928209/uvicorn-0.34.0-py3-none-any.whl", hash = "sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4", size = 62315, upload-time = "2024-12-15T13:33:27.467Z" }, + { url = "https://files.pythonhosted.org/packages/d2/e2/dc81b1bd1dcfe91735810265e9d26bc8ec5da45b4c0f6237e286819194c3/uvicorn-0.35.0-py3-none-any.whl", hash = "sha256:197535216b25ff9b785e29a0b79199f55222193d47f820816e7da751e9bc8d4a", size = 66406, upload-time = "2025-06-28T16:15:44.816Z" }, ] [package.optional-dependencies] @@ -1901,153 +2146,208 @@ wheels = [ [[package]] name = "watchfiles" -version = "1.0.4" +version = "1.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f5/26/c705fc77d0a9ecdb9b66f1e2976d95b81df3cae518967431e7dbf9b5e219/watchfiles-1.0.4.tar.gz", hash = "sha256:6ba473efd11062d73e4f00c2b730255f9c1bdd73cd5f9fe5b5da8dbd4a717205", size = 94625, upload-time = "2025-01-10T13:05:56.196Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/bb/8461adc4b1fed009546fb797fc0d5698dcfe5e289cb37e1b8f16a93cdc30/watchfiles-1.0.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2a9f93f8439639dc244c4d2902abe35b0279102bca7bbcf119af964f51d53c19", size = 394869, upload-time = "2025-01-10T13:03:37.906Z" }, - { url = "https://files.pythonhosted.org/packages/55/88/9ebf36b3547176d1709c320de78c1fa3263a46be31b5b1267571d9102686/watchfiles-1.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9eea33ad8c418847dd296e61eb683cae1c63329b6d854aefcd412e12d94ee235", size = 384905, upload-time = "2025-01-10T13:03:39.562Z" }, - { url = "https://files.pythonhosted.org/packages/03/8a/04335ce23ef78d8c69f0913e8b20cf7d9233e3986543aeef95ef2d6e43d2/watchfiles-1.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31f1a379c9dcbb3f09cf6be1b7e83b67c0e9faabed0471556d9438a4a4e14202", size = 449944, upload-time = "2025-01-10T13:03:42.483Z" }, - { url = "https://files.pythonhosted.org/packages/17/4e/c8d5dcd14fe637f4633616dabea8a4af0a10142dccf3b43e0f081ba81ab4/watchfiles-1.0.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab594e75644421ae0a2484554832ca5895f8cab5ab62de30a1a57db460ce06c6", size = 456020, upload-time = "2025-01-10T13:03:45.449Z" }, - { url = "https://files.pythonhosted.org/packages/5e/74/3e91e09e1861dd7fbb1190ce7bd786700dc0fbc2ccd33bb9fff5de039229/watchfiles-1.0.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc2eb5d14a8e0d5df7b36288979176fbb39672d45184fc4b1c004d7c3ce29317", size = 482983, upload-time = "2025-01-10T13:03:47.082Z" }, - { url = "https://files.pythonhosted.org/packages/a1/3d/e64de2d1ce4eb6a574fd78ce3a28c279da263be9ef3cfcab6f708df192f2/watchfiles-1.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f68d8e9d5a321163ddacebe97091000955a1b74cd43724e346056030b0bacee", size = 520320, upload-time = "2025-01-10T13:03:48.976Z" }, - { url = "https://files.pythonhosted.org/packages/2c/bd/52235f7063b57240c66a991696ed27e2a18bd6fcec8a1ea5a040b70d0611/watchfiles-1.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9ce064e81fe79faa925ff03b9f4c1a98b0bbb4a1b8c1b015afa93030cb21a49", size = 500988, upload-time = "2025-01-10T13:03:50.543Z" }, - { url = "https://files.pythonhosted.org/packages/3a/b0/ff04194141a5fe650c150400dd9e42667916bc0f52426e2e174d779b8a74/watchfiles-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b77d5622ac5cc91d21ae9c2b284b5d5c51085a0bdb7b518dba263d0af006132c", size = 452573, upload-time = "2025-01-10T13:03:53.918Z" }, - { url = "https://files.pythonhosted.org/packages/3d/9d/966164332c5a178444ae6d165082d4f351bd56afd9c3ec828eecbf190e6a/watchfiles-1.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1941b4e39de9b38b868a69b911df5e89dc43767feeda667b40ae032522b9b5f1", size = 615114, upload-time = "2025-01-10T13:03:56.881Z" }, - { url = "https://files.pythonhosted.org/packages/94/df/f569ae4c1877f96ad4086c153a8eee5a19a3b519487bf5c9454a3438c341/watchfiles-1.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4f8c4998506241dedf59613082d1c18b836e26ef2a4caecad0ec41e2a15e4226", size = 613076, upload-time = "2025-01-10T13:04:00.751Z" }, - { url = "https://files.pythonhosted.org/packages/15/ae/8ce5f29e65d5fa5790e3c80c289819c55e12be2e1b9f5b6a0e55e169b97d/watchfiles-1.0.4-cp311-cp311-win32.whl", hash = "sha256:4ebbeca9360c830766b9f0df3640b791be569d988f4be6c06d6fae41f187f105", size = 271013, upload-time = "2025-01-10T13:04:08.455Z" }, - { url = "https://files.pythonhosted.org/packages/a4/c6/79dc4a7c598a978e5fafa135090aaf7bbb03b8dec7bada437dfbe578e7ed/watchfiles-1.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:05d341c71f3d7098920f8551d4df47f7b57ac5b8dad56558064c3431bdfc0b74", size = 284229, upload-time = "2025-01-10T13:04:11.283Z" }, - { url = "https://files.pythonhosted.org/packages/37/3d/928633723211753f3500bfb138434f080363b87a1b08ca188b1ce54d1e05/watchfiles-1.0.4-cp311-cp311-win_arm64.whl", hash = "sha256:32b026a6ab64245b584acf4931fe21842374da82372d5c039cba6bf99ef722f3", size = 276824, upload-time = "2025-01-10T13:04:14.202Z" }, - { url = "https://files.pythonhosted.org/packages/5b/1a/8f4d9a1461709756ace48c98f07772bc6d4519b1e48b5fa24a4061216256/watchfiles-1.0.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:229e6ec880eca20e0ba2f7e2249c85bae1999d330161f45c78d160832e026ee2", size = 391345, upload-time = "2025-01-10T13:04:17.001Z" }, - { url = "https://files.pythonhosted.org/packages/bc/d2/6750b7b3527b1cdaa33731438432e7238a6c6c40a9924049e4cebfa40805/watchfiles-1.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5717021b199e8353782dce03bd8a8f64438832b84e2885c4a645f9723bf656d9", size = 381515, upload-time = "2025-01-10T13:04:21.27Z" }, - { url = "https://files.pythonhosted.org/packages/4e/17/80500e42363deef1e4b4818729ed939aaddc56f82f4e72b2508729dd3c6b/watchfiles-1.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0799ae68dfa95136dde7c472525700bd48777875a4abb2ee454e3ab18e9fc712", size = 449767, upload-time = "2025-01-10T13:04:23.745Z" }, - { url = "https://files.pythonhosted.org/packages/10/37/1427fa4cfa09adbe04b1e97bced19a29a3462cc64c78630787b613a23f18/watchfiles-1.0.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43b168bba889886b62edb0397cab5b6490ffb656ee2fcb22dec8bfeb371a9e12", size = 455677, upload-time = "2025-01-10T13:04:27.618Z" }, - { url = "https://files.pythonhosted.org/packages/c5/7a/39e9397f3a19cb549a7d380412fd9e507d4854eddc0700bfad10ef6d4dba/watchfiles-1.0.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb2c46e275fbb9f0c92e7654b231543c7bbfa1df07cdc4b99fa73bedfde5c844", size = 482219, upload-time = "2025-01-10T13:04:29.265Z" }, - { url = "https://files.pythonhosted.org/packages/45/2d/7113931a77e2ea4436cad0c1690c09a40a7f31d366f79c6f0a5bc7a4f6d5/watchfiles-1.0.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:857f5fc3aa027ff5e57047da93f96e908a35fe602d24f5e5d8ce64bf1f2fc733", size = 518830, upload-time = "2025-01-10T13:04:31.957Z" }, - { url = "https://files.pythonhosted.org/packages/f9/1b/50733b1980fa81ef3c70388a546481ae5fa4c2080040100cd7bf3bf7b321/watchfiles-1.0.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55ccfd27c497b228581e2838d4386301227fc0cb47f5a12923ec2fe4f97b95af", size = 497997, upload-time = "2025-01-10T13:04:33.938Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b4/9396cc61b948ef18943e7c85ecfa64cf940c88977d882da57147f62b34b1/watchfiles-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c11ea22304d17d4385067588123658e9f23159225a27b983f343fcffc3e796a", size = 452249, upload-time = "2025-01-10T13:04:35.559Z" }, - { url = "https://files.pythonhosted.org/packages/fb/69/0c65a5a29e057ad0dc691c2fa6c23b2983c7dabaa190ba553b29ac84c3cc/watchfiles-1.0.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:74cb3ca19a740be4caa18f238298b9d472c850f7b2ed89f396c00a4c97e2d9ff", size = 614412, upload-time = "2025-01-10T13:04:37.061Z" }, - { url = "https://files.pythonhosted.org/packages/7f/b9/319fcba6eba5fad34327d7ce16a6b163b39741016b1996f4a3c96b8dd0e1/watchfiles-1.0.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c7cce76c138a91e720d1df54014a047e680b652336e1b73b8e3ff3158e05061e", size = 611982, upload-time = "2025-01-10T13:04:38.995Z" }, - { url = "https://files.pythonhosted.org/packages/f1/47/143c92418e30cb9348a4387bfa149c8e0e404a7c5b0585d46d2f7031b4b9/watchfiles-1.0.4-cp312-cp312-win32.whl", hash = "sha256:b045c800d55bc7e2cadd47f45a97c7b29f70f08a7c2fa13241905010a5493f94", size = 271822, upload-time = "2025-01-10T13:04:40.516Z" }, - { url = "https://files.pythonhosted.org/packages/ea/94/b0165481bff99a64b29e46e07ac2e0df9f7a957ef13bec4ceab8515f44e3/watchfiles-1.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:c2acfa49dd0ad0bf2a9c0bb9a985af02e89345a7189be1efc6baa085e0f72d7c", size = 285441, upload-time = "2025-01-10T13:04:42.853Z" }, - { url = "https://files.pythonhosted.org/packages/11/de/09fe56317d582742d7ca8c2ca7b52a85927ebb50678d9b0fa8194658f536/watchfiles-1.0.4-cp312-cp312-win_arm64.whl", hash = "sha256:22bb55a7c9e564e763ea06c7acea24fc5d2ee5dfc5dafc5cfbedfe58505e9f90", size = 277141, upload-time = "2025-01-10T13:04:45.914Z" }, - { url = "https://files.pythonhosted.org/packages/08/98/f03efabec64b5b1fa58c0daab25c68ef815b0f320e54adcacd0d6847c339/watchfiles-1.0.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:8012bd820c380c3d3db8435e8cf7592260257b378b649154a7948a663b5f84e9", size = 390954, upload-time = "2025-01-10T13:04:47.458Z" }, - { url = "https://files.pythonhosted.org/packages/16/09/4dd49ba0a32a45813debe5fb3897955541351ee8142f586303b271a02b40/watchfiles-1.0.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa216f87594f951c17511efe5912808dfcc4befa464ab17c98d387830ce07b60", size = 381133, upload-time = "2025-01-10T13:04:48.977Z" }, - { url = "https://files.pythonhosted.org/packages/76/59/5aa6fc93553cd8d8ee75c6247763d77c02631aed21551a97d94998bf1dae/watchfiles-1.0.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c9953cf85529c05b24705639ffa390f78c26449e15ec34d5339e8108c7c407", size = 449516, upload-time = "2025-01-10T13:04:50.653Z" }, - { url = "https://files.pythonhosted.org/packages/4c/aa/df4b6fe14b6317290b91335b23c96b488d365d65549587434817e06895ea/watchfiles-1.0.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7cf684aa9bba4cd95ecb62c822a56de54e3ae0598c1a7f2065d51e24637a3c5d", size = 454820, upload-time = "2025-01-10T13:04:52.312Z" }, - { url = "https://files.pythonhosted.org/packages/5e/71/185f8672f1094ce48af33252c73e39b48be93b761273872d9312087245f6/watchfiles-1.0.4-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f44a39aee3cbb9b825285ff979ab887a25c5d336e5ec3574f1506a4671556a8d", size = 481550, upload-time = "2025-01-10T13:04:54.007Z" }, - { url = "https://files.pythonhosted.org/packages/85/d7/50ebba2c426ef1a5cb17f02158222911a2e005d401caf5d911bfca58f4c4/watchfiles-1.0.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38320582736922be8c865d46520c043bff350956dfc9fbaee3b2df4e1740a4b", size = 518647, upload-time = "2025-01-10T13:04:56.008Z" }, - { url = "https://files.pythonhosted.org/packages/f0/7a/4c009342e393c545d68987e8010b937f72f47937731225b2b29b7231428f/watchfiles-1.0.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39f4914548b818540ef21fd22447a63e7be6e24b43a70f7642d21f1e73371590", size = 497547, upload-time = "2025-01-10T13:04:58.087Z" }, - { url = "https://files.pythonhosted.org/packages/0f/7c/1cf50b35412d5c72d63b2bf9a4fffee2e1549a245924960dd087eb6a6de4/watchfiles-1.0.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f12969a3765909cf5dc1e50b2436eb2c0e676a3c75773ab8cc3aa6175c16e902", size = 452179, upload-time = "2025-01-10T13:05:01.175Z" }, - { url = "https://files.pythonhosted.org/packages/d6/a9/3db1410e1c1413735a9a472380e4f431ad9a9e81711cda2aaf02b7f62693/watchfiles-1.0.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:0986902677a1a5e6212d0c49b319aad9cc48da4bd967f86a11bde96ad9676ca1", size = 614125, upload-time = "2025-01-10T13:05:03.086Z" }, - { url = "https://files.pythonhosted.org/packages/f2/e1/0025d365cf6248c4d1ee4c3d2e3d373bdd3f6aff78ba4298f97b4fad2740/watchfiles-1.0.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:308ac265c56f936636e3b0e3f59e059a40003c655228c131e1ad439957592303", size = 611911, upload-time = "2025-01-10T13:05:04.947Z" }, - { url = "https://files.pythonhosted.org/packages/55/55/035838277d8c98fc8c917ac9beeb0cd6c59d675dc2421df5f9fcf44a0070/watchfiles-1.0.4-cp313-cp313-win32.whl", hash = "sha256:aee397456a29b492c20fda2d8961e1ffb266223625346ace14e4b6d861ba9c80", size = 271152, upload-time = "2025-01-10T13:05:09.507Z" }, - { url = "https://files.pythonhosted.org/packages/f0/e5/96b8e55271685ddbadc50ce8bc53aa2dff278fb7ac4c2e473df890def2dc/watchfiles-1.0.4-cp313-cp313-win_amd64.whl", hash = "sha256:d6097538b0ae5c1b88c3b55afa245a66793a8fec7ada6755322e465fb1a0e8cc", size = 285216, upload-time = "2025-01-10T13:05:11.107Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/2a/9a/d451fcc97d029f5812e898fd30a53fd8c15c7bbd058fd75cfc6beb9bd761/watchfiles-1.1.0.tar.gz", hash = "sha256:693ed7ec72cbfcee399e92c895362b6e66d63dac6b91e2c11ae03d10d503e575", size = 94406, upload-time = "2025-06-15T19:06:59.42Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/78/7401154b78ab484ccaaeef970dc2af0cb88b5ba8a1b415383da444cdd8d3/watchfiles-1.1.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c9649dfc57cc1f9835551deb17689e8d44666315f2e82d337b9f07bd76ae3aa2", size = 405751, upload-time = "2025-06-15T19:05:07.679Z" }, + { url = "https://files.pythonhosted.org/packages/76/63/e6c3dbc1f78d001589b75e56a288c47723de28c580ad715eb116639152b5/watchfiles-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:406520216186b99374cdb58bc48e34bb74535adec160c8459894884c983a149c", size = 397313, upload-time = "2025-06-15T19:05:08.764Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a2/8afa359ff52e99af1632f90cbf359da46184207e893a5f179301b0c8d6df/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45350fd1dc75cd68d3d72c47f5b513cb0578da716df5fba02fff31c69d5f2d", size = 450792, upload-time = "2025-06-15T19:05:09.869Z" }, + { url = "https://files.pythonhosted.org/packages/1d/bf/7446b401667f5c64972a57a0233be1104157fc3abf72c4ef2666c1bd09b2/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11ee4444250fcbeb47459a877e5e80ed994ce8e8d20283857fc128be1715dac7", size = 458196, upload-time = "2025-06-15T19:05:11.91Z" }, + { url = "https://files.pythonhosted.org/packages/58/2f/501ddbdfa3fa874ea5597c77eeea3d413579c29af26c1091b08d0c792280/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bda8136e6a80bdea23e5e74e09df0362744d24ffb8cd59c4a95a6ce3d142f79c", size = 484788, upload-time = "2025-06-15T19:05:13.373Z" }, + { url = "https://files.pythonhosted.org/packages/61/1e/9c18eb2eb5c953c96bc0e5f626f0e53cfef4bd19bd50d71d1a049c63a575/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b915daeb2d8c1f5cee4b970f2e2c988ce6514aace3c9296e58dd64dc9aa5d575", size = 597879, upload-time = "2025-06-15T19:05:14.725Z" }, + { url = "https://files.pythonhosted.org/packages/8b/6c/1467402e5185d89388b4486745af1e0325007af0017c3384cc786fff0542/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed8fc66786de8d0376f9f913c09e963c66e90ced9aa11997f93bdb30f7c872a8", size = 477447, upload-time = "2025-06-15T19:05:15.775Z" }, + { url = "https://files.pythonhosted.org/packages/2b/a1/ec0a606bde4853d6c4a578f9391eeb3684a9aea736a8eb217e3e00aa89a1/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe4371595edf78c41ef8ac8df20df3943e13defd0efcb732b2e393b5a8a7a71f", size = 453145, upload-time = "2025-06-15T19:05:17.17Z" }, + { url = "https://files.pythonhosted.org/packages/90/b9/ef6f0c247a6a35d689fc970dc7f6734f9257451aefb30def5d100d6246a5/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b7c5f6fe273291f4d414d55b2c80d33c457b8a42677ad14b4b47ff025d0893e4", size = 626539, upload-time = "2025-06-15T19:05:18.557Z" }, + { url = "https://files.pythonhosted.org/packages/34/44/6ffda5537085106ff5aaa762b0d130ac6c75a08015dd1621376f708c94de/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7738027989881e70e3723c75921f1efa45225084228788fc59ea8c6d732eb30d", size = 624472, upload-time = "2025-06-15T19:05:19.588Z" }, + { url = "https://files.pythonhosted.org/packages/c3/e3/71170985c48028fa3f0a50946916a14055e741db11c2e7bc2f3b61f4d0e3/watchfiles-1.1.0-cp311-cp311-win32.whl", hash = "sha256:622d6b2c06be19f6e89b1d951485a232e3b59618def88dbeda575ed8f0d8dbf2", size = 279348, upload-time = "2025-06-15T19:05:20.856Z" }, + { url = "https://files.pythonhosted.org/packages/89/1b/3e39c68b68a7a171070f81fc2561d23ce8d6859659406842a0e4bebf3bba/watchfiles-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:48aa25e5992b61debc908a61ab4d3f216b64f44fdaa71eb082d8b2de846b7d12", size = 292607, upload-time = "2025-06-15T19:05:21.937Z" }, + { url = "https://files.pythonhosted.org/packages/61/9f/2973b7539f2bdb6ea86d2c87f70f615a71a1fc2dba2911795cea25968aea/watchfiles-1.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:00645eb79a3faa70d9cb15c8d4187bb72970b2470e938670240c7998dad9f13a", size = 285056, upload-time = "2025-06-15T19:05:23.12Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b8/858957045a38a4079203a33aaa7d23ea9269ca7761c8a074af3524fbb240/watchfiles-1.1.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9dc001c3e10de4725c749d4c2f2bdc6ae24de5a88a339c4bce32300a31ede179", size = 402339, upload-time = "2025-06-15T19:05:24.516Z" }, + { url = "https://files.pythonhosted.org/packages/80/28/98b222cca751ba68e88521fabd79a4fab64005fc5976ea49b53fa205d1fa/watchfiles-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9ba68ec283153dead62cbe81872d28e053745f12335d037de9cbd14bd1877f5", size = 394409, upload-time = "2025-06-15T19:05:25.469Z" }, + { url = "https://files.pythonhosted.org/packages/86/50/dee79968566c03190677c26f7f47960aff738d32087087bdf63a5473e7df/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130fc497b8ee68dce163e4254d9b0356411d1490e868bd8790028bc46c5cc297", size = 450939, upload-time = "2025-06-15T19:05:26.494Z" }, + { url = "https://files.pythonhosted.org/packages/40/45/a7b56fb129700f3cfe2594a01aa38d033b92a33dddce86c8dfdfc1247b72/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50a51a90610d0845a5931a780d8e51d7bd7f309ebc25132ba975aca016b576a0", size = 457270, upload-time = "2025-06-15T19:05:27.466Z" }, + { url = "https://files.pythonhosted.org/packages/b5/c8/fa5ef9476b1d02dc6b5e258f515fcaaecf559037edf8b6feffcbc097c4b8/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc44678a72ac0910bac46fa6a0de6af9ba1355669b3dfaf1ce5f05ca7a74364e", size = 483370, upload-time = "2025-06-15T19:05:28.548Z" }, + { url = "https://files.pythonhosted.org/packages/98/68/42cfcdd6533ec94f0a7aab83f759ec11280f70b11bfba0b0f885e298f9bd/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a543492513a93b001975ae283a51f4b67973662a375a403ae82f420d2c7205ee", size = 598654, upload-time = "2025-06-15T19:05:29.997Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/b2a1544224118cc28df7e59008a929e711f9c68ce7d554e171b2dc531352/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ac164e20d17cc285f2b94dc31c384bc3aa3dd5e7490473b3db043dd70fbccfd", size = 478667, upload-time = "2025-06-15T19:05:31.172Z" }, + { url = "https://files.pythonhosted.org/packages/8c/77/e3362fe308358dc9f8588102481e599c83e1b91c2ae843780a7ded939a35/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7590d5a455321e53857892ab8879dce62d1f4b04748769f5adf2e707afb9d4f", size = 452213, upload-time = "2025-06-15T19:05:32.299Z" }, + { url = "https://files.pythonhosted.org/packages/6e/17/c8f1a36540c9a1558d4faf08e909399e8133599fa359bf52ec8fcee5be6f/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:37d3d3f7defb13f62ece99e9be912afe9dd8a0077b7c45ee5a57c74811d581a4", size = 626718, upload-time = "2025-06-15T19:05:33.415Z" }, + { url = "https://files.pythonhosted.org/packages/26/45/fb599be38b4bd38032643783d7496a26a6f9ae05dea1a42e58229a20ac13/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7080c4bb3efd70a07b1cc2df99a7aa51d98685be56be6038c3169199d0a1c69f", size = 623098, upload-time = "2025-06-15T19:05:34.534Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e7/fdf40e038475498e160cd167333c946e45d8563ae4dd65caf757e9ffe6b4/watchfiles-1.1.0-cp312-cp312-win32.whl", hash = "sha256:cbcf8630ef4afb05dc30107bfa17f16c0896bb30ee48fc24bf64c1f970f3b1fd", size = 279209, upload-time = "2025-06-15T19:05:35.577Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d3/3ae9d5124ec75143bdf088d436cba39812122edc47709cd2caafeac3266f/watchfiles-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:cbd949bdd87567b0ad183d7676feb98136cde5bb9025403794a4c0db28ed3a47", size = 292786, upload-time = "2025-06-15T19:05:36.559Z" }, + { url = "https://files.pythonhosted.org/packages/26/2f/7dd4fc8b5f2b34b545e19629b4a018bfb1de23b3a496766a2c1165ca890d/watchfiles-1.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:0a7d40b77f07be87c6faa93d0951a0fcd8cbca1ddff60a1b65d741bac6f3a9f6", size = 284343, upload-time = "2025-06-15T19:05:37.5Z" }, + { url = "https://files.pythonhosted.org/packages/d3/42/fae874df96595556a9089ade83be34a2e04f0f11eb53a8dbf8a8a5e562b4/watchfiles-1.1.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5007f860c7f1f8df471e4e04aaa8c43673429047d63205d1630880f7637bca30", size = 402004, upload-time = "2025-06-15T19:05:38.499Z" }, + { url = "https://files.pythonhosted.org/packages/fa/55/a77e533e59c3003d9803c09c44c3651224067cbe7fb5d574ddbaa31e11ca/watchfiles-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:20ecc8abbd957046f1fe9562757903f5eaf57c3bce70929fda6c7711bb58074a", size = 393671, upload-time = "2025-06-15T19:05:39.52Z" }, + { url = "https://files.pythonhosted.org/packages/05/68/b0afb3f79c8e832e6571022611adbdc36e35a44e14f129ba09709aa4bb7a/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2f0498b7d2a3c072766dba3274fe22a183dbea1f99d188f1c6c72209a1063dc", size = 449772, upload-time = "2025-06-15T19:05:40.897Z" }, + { url = "https://files.pythonhosted.org/packages/ff/05/46dd1f6879bc40e1e74c6c39a1b9ab9e790bf1f5a2fe6c08b463d9a807f4/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:239736577e848678e13b201bba14e89718f5c2133dfd6b1f7846fa1b58a8532b", size = 456789, upload-time = "2025-06-15T19:05:42.045Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ca/0eeb2c06227ca7f12e50a47a3679df0cd1ba487ea19cf844a905920f8e95/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eff4b8d89f444f7e49136dc695599a591ff769300734446c0a86cba2eb2f9895", size = 482551, upload-time = "2025-06-15T19:05:43.781Z" }, + { url = "https://files.pythonhosted.org/packages/31/47/2cecbd8694095647406645f822781008cc524320466ea393f55fe70eed3b/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12b0a02a91762c08f7264e2e79542f76870c3040bbc847fb67410ab81474932a", size = 597420, upload-time = "2025-06-15T19:05:45.244Z" }, + { url = "https://files.pythonhosted.org/packages/d9/7e/82abc4240e0806846548559d70f0b1a6dfdca75c1b4f9fa62b504ae9b083/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29e7bc2eee15cbb339c68445959108803dc14ee0c7b4eea556400131a8de462b", size = 477950, upload-time = "2025-06-15T19:05:46.332Z" }, + { url = "https://files.pythonhosted.org/packages/25/0d/4d564798a49bf5482a4fa9416dea6b6c0733a3b5700cb8a5a503c4b15853/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9481174d3ed982e269c090f780122fb59cee6c3796f74efe74e70f7780ed94c", size = 451706, upload-time = "2025-06-15T19:05:47.459Z" }, + { url = "https://files.pythonhosted.org/packages/81/b5/5516cf46b033192d544102ea07c65b6f770f10ed1d0a6d388f5d3874f6e4/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:80f811146831c8c86ab17b640801c25dc0a88c630e855e2bef3568f30434d52b", size = 625814, upload-time = "2025-06-15T19:05:48.654Z" }, + { url = "https://files.pythonhosted.org/packages/0c/dd/7c1331f902f30669ac3e754680b6edb9a0dd06dea5438e61128111fadd2c/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:60022527e71d1d1fda67a33150ee42869042bce3d0fcc9cc49be009a9cded3fb", size = 622820, upload-time = "2025-06-15T19:05:50.088Z" }, + { url = "https://files.pythonhosted.org/packages/1b/14/36d7a8e27cd128d7b1009e7715a7c02f6c131be9d4ce1e5c3b73d0e342d8/watchfiles-1.1.0-cp313-cp313-win32.whl", hash = "sha256:32d6d4e583593cb8576e129879ea0991660b935177c0f93c6681359b3654bfa9", size = 279194, upload-time = "2025-06-15T19:05:51.186Z" }, + { url = "https://files.pythonhosted.org/packages/25/41/2dd88054b849aa546dbeef5696019c58f8e0774f4d1c42123273304cdb2e/watchfiles-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:f21af781a4a6fbad54f03c598ab620e3a77032c5878f3d780448421a6e1818c7", size = 292349, upload-time = "2025-06-15T19:05:52.201Z" }, + { url = "https://files.pythonhosted.org/packages/c8/cf/421d659de88285eb13941cf11a81f875c176f76a6d99342599be88e08d03/watchfiles-1.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:5366164391873ed76bfdf618818c82084c9db7fac82b64a20c44d335eec9ced5", size = 283836, upload-time = "2025-06-15T19:05:53.265Z" }, + { url = "https://files.pythonhosted.org/packages/45/10/6faf6858d527e3599cc50ec9fcae73590fbddc1420bd4fdccfebffeedbc6/watchfiles-1.1.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:17ab167cca6339c2b830b744eaf10803d2a5b6683be4d79d8475d88b4a8a4be1", size = 400343, upload-time = "2025-06-15T19:05:54.252Z" }, + { url = "https://files.pythonhosted.org/packages/03/20/5cb7d3966f5e8c718006d0e97dfe379a82f16fecd3caa7810f634412047a/watchfiles-1.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:328dbc9bff7205c215a7807da7c18dce37da7da718e798356212d22696404339", size = 392916, upload-time = "2025-06-15T19:05:55.264Z" }, + { url = "https://files.pythonhosted.org/packages/8c/07/d8f1176328fa9e9581b6f120b017e286d2a2d22ae3f554efd9515c8e1b49/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7208ab6e009c627b7557ce55c465c98967e8caa8b11833531fdf95799372633", size = 449582, upload-time = "2025-06-15T19:05:56.317Z" }, + { url = "https://files.pythonhosted.org/packages/66/e8/80a14a453cf6038e81d072a86c05276692a1826471fef91df7537dba8b46/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8f6f72974a19efead54195bc9bed4d850fc047bb7aa971268fd9a8387c89011", size = 456752, upload-time = "2025-06-15T19:05:57.359Z" }, + { url = "https://files.pythonhosted.org/packages/5a/25/0853b3fe0e3c2f5af9ea60eb2e781eade939760239a72c2d38fc4cc335f6/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d181ef50923c29cf0450c3cd47e2f0557b62218c50b2ab8ce2ecaa02bd97e670", size = 481436, upload-time = "2025-06-15T19:05:58.447Z" }, + { url = "https://files.pythonhosted.org/packages/fe/9e/4af0056c258b861fbb29dcb36258de1e2b857be4a9509e6298abcf31e5c9/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adb4167043d3a78280d5d05ce0ba22055c266cf8655ce942f2fb881262ff3cdf", size = 596016, upload-time = "2025-06-15T19:05:59.59Z" }, + { url = "https://files.pythonhosted.org/packages/c5/fa/95d604b58aa375e781daf350897aaaa089cff59d84147e9ccff2447c8294/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5701dc474b041e2934a26d31d39f90fac8a3dee2322b39f7729867f932b1d4", size = 476727, upload-time = "2025-06-15T19:06:01.086Z" }, + { url = "https://files.pythonhosted.org/packages/65/95/fe479b2664f19be4cf5ceeb21be05afd491d95f142e72d26a42f41b7c4f8/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b067915e3c3936966a8607f6fe5487df0c9c4afb85226613b520890049deea20", size = 451864, upload-time = "2025-06-15T19:06:02.144Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8a/3c4af14b93a15ce55901cd7a92e1a4701910f1768c78fb30f61d2b79785b/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:9c733cda03b6d636b4219625a4acb5c6ffb10803338e437fb614fef9516825ef", size = 625626, upload-time = "2025-06-15T19:06:03.578Z" }, + { url = "https://files.pythonhosted.org/packages/da/f5/cf6aa047d4d9e128f4b7cde615236a915673775ef171ff85971d698f3c2c/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:cc08ef8b90d78bfac66f0def80240b0197008e4852c9f285907377b2947ffdcb", size = 622744, upload-time = "2025-06-15T19:06:05.066Z" }, + { url = "https://files.pythonhosted.org/packages/2c/00/70f75c47f05dea6fd30df90f047765f6fc2d6eb8b5a3921379b0b04defa2/watchfiles-1.1.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9974d2f7dc561cce3bb88dfa8eb309dab64c729de85fba32e98d75cf24b66297", size = 402114, upload-time = "2025-06-15T19:06:06.186Z" }, + { url = "https://files.pythonhosted.org/packages/53/03/acd69c48db4a1ed1de26b349d94077cca2238ff98fd64393f3e97484cae6/watchfiles-1.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c68e9f1fcb4d43798ad8814c4c1b61547b014b667216cb754e606bfade587018", size = 393879, upload-time = "2025-06-15T19:06:07.369Z" }, + { url = "https://files.pythonhosted.org/packages/2f/c8/a9a2a6f9c8baa4eceae5887fecd421e1b7ce86802bcfc8b6a942e2add834/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95ab1594377effac17110e1352989bdd7bdfca9ff0e5eeccd8c69c5389b826d0", size = 450026, upload-time = "2025-06-15T19:06:08.476Z" }, + { url = "https://files.pythonhosted.org/packages/fe/51/d572260d98388e6e2b967425c985e07d47ee6f62e6455cefb46a6e06eda5/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fba9b62da882c1be1280a7584ec4515d0a6006a94d6e5819730ec2eab60ffe12", size = 457917, upload-time = "2025-06-15T19:06:09.988Z" }, + { url = "https://files.pythonhosted.org/packages/c6/2d/4258e52917bf9f12909b6ec314ff9636276f3542f9d3807d143f27309104/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3434e401f3ce0ed6b42569128b3d1e3af773d7ec18751b918b89cd49c14eaafb", size = 483602, upload-time = "2025-06-15T19:06:11.088Z" }, + { url = "https://files.pythonhosted.org/packages/84/99/bee17a5f341a4345fe7b7972a475809af9e528deba056f8963d61ea49f75/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa257a4d0d21fcbca5b5fcba9dca5a78011cb93c0323fb8855c6d2dfbc76eb77", size = 596758, upload-time = "2025-06-15T19:06:12.197Z" }, + { url = "https://files.pythonhosted.org/packages/40/76/e4bec1d59b25b89d2b0716b41b461ed655a9a53c60dc78ad5771fda5b3e6/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fd1b3879a578a8ec2076c7961076df540b9af317123f84569f5a9ddee64ce92", size = 477601, upload-time = "2025-06-15T19:06:13.391Z" }, + { url = "https://files.pythonhosted.org/packages/1f/fa/a514292956f4a9ce3c567ec0c13cce427c158e9f272062685a8a727d08fc/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc7a30eeb0e20ecc5f4bd113cd69dcdb745a07c68c0370cea919f373f65d9e", size = 451936, upload-time = "2025-06-15T19:06:14.656Z" }, + { url = "https://files.pythonhosted.org/packages/32/5d/c3bf927ec3bbeb4566984eba8dd7a8eb69569400f5509904545576741f88/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:891c69e027748b4a73847335d208e374ce54ca3c335907d381fde4e41661b13b", size = 626243, upload-time = "2025-06-15T19:06:16.232Z" }, + { url = "https://files.pythonhosted.org/packages/e6/65/6e12c042f1a68c556802a84d54bb06d35577c81e29fba14019562479159c/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:12fe8eaffaf0faa7906895b4f8bb88264035b3f0243275e0bf24af0436b27259", size = 623073, upload-time = "2025-06-15T19:06:17.457Z" }, + { url = "https://files.pythonhosted.org/packages/89/ab/7f79d9bf57329e7cbb0a6fd4c7bd7d0cee1e4a8ef0041459f5409da3506c/watchfiles-1.1.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:bfe3c517c283e484843cb2e357dd57ba009cff351edf45fb455b5fbd1f45b15f", size = 400872, upload-time = "2025-06-15T19:06:18.57Z" }, + { url = "https://files.pythonhosted.org/packages/df/d5/3f7bf9912798e9e6c516094db6b8932df53b223660c781ee37607030b6d3/watchfiles-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a9ccbf1f129480ed3044f540c0fdbc4ee556f7175e5ab40fe077ff6baf286d4e", size = 392877, upload-time = "2025-06-15T19:06:19.55Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c5/54ec7601a2798604e01c75294770dbee8150e81c6e471445d7601610b495/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba0e3255b0396cac3cc7bbace76404dd72b5438bf0d8e7cefa2f79a7f3649caa", size = 449645, upload-time = "2025-06-15T19:06:20.66Z" }, + { url = "https://files.pythonhosted.org/packages/0a/04/c2f44afc3b2fce21ca0b7802cbd37ed90a29874f96069ed30a36dfe57c2b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4281cd9fce9fc0a9dbf0fc1217f39bf9cf2b4d315d9626ef1d4e87b84699e7e8", size = 457424, upload-time = "2025-06-15T19:06:21.712Z" }, + { url = "https://files.pythonhosted.org/packages/9f/b0/eec32cb6c14d248095261a04f290636da3df3119d4040ef91a4a50b29fa5/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d2404af8db1329f9a3c9b79ff63e0ae7131986446901582067d9304ae8aaf7f", size = 481584, upload-time = "2025-06-15T19:06:22.777Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e2/ca4bb71c68a937d7145aa25709e4f5d68eb7698a25ce266e84b55d591bbd/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e78b6ed8165996013165eeabd875c5dfc19d41b54f94b40e9fff0eb3193e5e8e", size = 596675, upload-time = "2025-06-15T19:06:24.226Z" }, + { url = "https://files.pythonhosted.org/packages/a1/dd/b0e4b7fb5acf783816bc950180a6cd7c6c1d2cf7e9372c0ea634e722712b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:249590eb75ccc117f488e2fabd1bfa33c580e24b96f00658ad88e38844a040bb", size = 477363, upload-time = "2025-06-15T19:06:25.42Z" }, + { url = "https://files.pythonhosted.org/packages/69/c4/088825b75489cb5b6a761a4542645718893d395d8c530b38734f19da44d2/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05686b5487cfa2e2c28ff1aa370ea3e6c5accfe6435944ddea1e10d93872147", size = 452240, upload-time = "2025-06-15T19:06:26.552Z" }, + { url = "https://files.pythonhosted.org/packages/10/8c/22b074814970eeef43b7c44df98c3e9667c1f7bf5b83e0ff0201b0bd43f9/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d0e10e6f8f6dc5762adee7dece33b722282e1f59aa6a55da5d493a97282fedd8", size = 625607, upload-time = "2025-06-15T19:06:27.606Z" }, + { url = "https://files.pythonhosted.org/packages/32/fa/a4f5c2046385492b2273213ef815bf71a0d4c1943b784fb904e184e30201/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:af06c863f152005c7592df1d6a7009c836a247c9d8adb78fef8575a5a98699db", size = 623315, upload-time = "2025-06-15T19:06:29.076Z" }, + { url = "https://files.pythonhosted.org/packages/8c/6b/686dcf5d3525ad17b384fd94708e95193529b460a1b7bf40851f1328ec6e/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0ece16b563b17ab26eaa2d52230c9a7ae46cf01759621f4fbbca280e438267b3", size = 406910, upload-time = "2025-06-15T19:06:49.335Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d3/71c2dcf81dc1edcf8af9f4d8d63b1316fb0a2dd90cbfd427e8d9dd584a90/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:51b81e55d40c4b4aa8658427a3ee7ea847c591ae9e8b81ef94a90b668999353c", size = 398816, upload-time = "2025-06-15T19:06:50.433Z" }, + { url = "https://files.pythonhosted.org/packages/b8/fa/12269467b2fc006f8fce4cd6c3acfa77491dd0777d2a747415f28ccc8c60/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2bcdc54ea267fe72bfc7d83c041e4eb58d7d8dc6f578dfddb52f037ce62f432", size = 451584, upload-time = "2025-06-15T19:06:51.834Z" }, + { url = "https://files.pythonhosted.org/packages/bd/d3/254cea30f918f489db09d6a8435a7de7047f8cb68584477a515f160541d6/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:923fec6e5461c42bd7e3fd5ec37492c6f3468be0499bc0707b4bbbc16ac21792", size = 454009, upload-time = "2025-06-15T19:06:52.896Z" }, ] [[package]] name = "websockets" -version = "15.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2e/7a/8bc4d15af7ff30f7ba34f9a172063bfcee9f5001d7cef04bee800a658f33/websockets-15.0.tar.gz", hash = "sha256:ca36151289a15b39d8d683fd8b7abbe26fc50be311066c5f8dcf3cb8cee107ab", size = 175574, upload-time = "2025-02-16T11:06:55.664Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ee/16/81a7403c8c0a33383de647e89c07824ea6a654e3877d6ff402cbae298cb8/websockets-15.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:dd24c4d256558429aeeb8d6c24ebad4e982ac52c50bc3670ae8646c181263965", size = 174702, upload-time = "2025-02-16T11:05:14.163Z" }, - { url = "https://files.pythonhosted.org/packages/ef/40/4629202386a3bf1195db9fe41baeb1d6dfd8d72e651d9592d81dae7fdc7c/websockets-15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f83eca8cbfd168e424dfa3b3b5c955d6c281e8fc09feb9d870886ff8d03683c7", size = 172359, upload-time = "2025-02-16T11:05:15.613Z" }, - { url = "https://files.pythonhosted.org/packages/7b/33/dfb650e822bc7912d8c542c452497867af91dec81e7b5bf96aca5b419d58/websockets-15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4095a1f2093002c2208becf6f9a178b336b7572512ee0a1179731acb7788e8ad", size = 172604, upload-time = "2025-02-16T11:05:17.855Z" }, - { url = "https://files.pythonhosted.org/packages/2e/52/666743114513fcffd43ee5df261a1eb5d41f8e9861b7a190b730732c19ba/websockets-15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb915101dfbf318486364ce85662bb7b020840f68138014972c08331458d41f3", size = 182145, upload-time = "2025-02-16T11:05:19.186Z" }, - { url = "https://files.pythonhosted.org/packages/9c/63/5273f146b13aa4a057a95ab0855d9990f3a1ced63693f4365135d1abfacc/websockets-15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:45d464622314973d78f364689d5dbb9144e559f93dca11b11af3f2480b5034e1", size = 181152, upload-time = "2025-02-16T11:05:21.319Z" }, - { url = "https://files.pythonhosted.org/packages/0f/ae/075697f3f97de7c26b73ae96d952e13fa36393e0db3f028540b28954e0a9/websockets-15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace960769d60037ca9625b4c578a6f28a14301bd2a1ff13bb00e824ac9f73e55", size = 181523, upload-time = "2025-02-16T11:05:22.805Z" }, - { url = "https://files.pythonhosted.org/packages/25/87/06d091bbcbe01903bed3dad3bb4a1a3c516f61e611ec31fffb28abe4974b/websockets-15.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c7cd4b1015d2f60dfe539ee6c95bc968d5d5fad92ab01bb5501a77393da4f596", size = 181791, upload-time = "2025-02-16T11:05:25.031Z" }, - { url = "https://files.pythonhosted.org/packages/77/08/5063b6cc1b2aa1fba2ee3b578b777db22fde7145f121d07fd878811e983b/websockets-15.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4f7290295794b5dec470867c7baa4a14182b9732603fd0caf2a5bf1dc3ccabf3", size = 181231, upload-time = "2025-02-16T11:05:26.306Z" }, - { url = "https://files.pythonhosted.org/packages/86/ff/af23084df0a7405bb2add12add8c17d6192a8de9480f1b90d12352ba2b7d/websockets-15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3abd670ca7ce230d5a624fd3d55e055215d8d9b723adee0a348352f5d8d12ff4", size = 181191, upload-time = "2025-02-16T11:05:27.722Z" }, - { url = "https://files.pythonhosted.org/packages/21/ce/b2bdfcf49201dee0b899edc6a814755763ec03d74f2714923d38453a9e8d/websockets-15.0-cp311-cp311-win32.whl", hash = "sha256:110a847085246ab8d4d119632145224d6b49e406c64f1bbeed45c6f05097b680", size = 175666, upload-time = "2025-02-16T11:05:30.048Z" }, - { url = "https://files.pythonhosted.org/packages/8d/7b/444edcd5365538c226b631897975a65bbf5ccf27c77102e17d8f12a306ea/websockets-15.0-cp311-cp311-win_amd64.whl", hash = "sha256:8d7bbbe2cd6ed80aceef2a14e9f1c1b61683194c216472ed5ff33b700e784e37", size = 176105, upload-time = "2025-02-16T11:05:31.406Z" }, - { url = "https://files.pythonhosted.org/packages/22/1e/92c4547d7b2a93f848aedaf37e9054111bc00dc11bff4385ca3f80dbb412/websockets-15.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cccc18077acd34c8072578394ec79563664b1c205f7a86a62e94fafc7b59001f", size = 174709, upload-time = "2025-02-16T11:05:32.816Z" }, - { url = "https://files.pythonhosted.org/packages/9f/37/eae4830a28061ba552516d84478686b637cd9e57d6a90b45ad69e89cb0af/websockets-15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d4c22992e24f12de340ca5f824121a5b3e1a37ad4360b4e1aaf15e9d1c42582d", size = 172372, upload-time = "2025-02-16T11:05:35.342Z" }, - { url = "https://files.pythonhosted.org/packages/46/2f/b409f8b8aa9328d5a47f7a301a43319d540d70cf036d1e6443675978a988/websockets-15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1206432cc6c644f6fc03374b264c5ff805d980311563202ed7fef91a38906276", size = 172607, upload-time = "2025-02-16T11:05:36.704Z" }, - { url = "https://files.pythonhosted.org/packages/d6/81/d7e2e4542d4b4df849b0110df1b1f94f2647b71ab4b65d672090931ad2bb/websockets-15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d3cc75ef3e17490042c47e0523aee1bcc4eacd2482796107fd59dd1100a44bc", size = 182422, upload-time = "2025-02-16T11:05:38.05Z" }, - { url = "https://files.pythonhosted.org/packages/b6/91/3b303160938d123eea97f58be363f7dbec76e8c59d587e07b5bc257dd584/websockets-15.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b89504227a5311610e4be16071465885a0a3d6b0e82e305ef46d9b064ce5fb72", size = 181362, upload-time = "2025-02-16T11:05:40.346Z" }, - { url = "https://files.pythonhosted.org/packages/f2/8b/df6807f1ca339c567aba9a7ab03bfdb9a833f625e8d2b4fc7529e4c701de/websockets-15.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56e3efe356416bc67a8e093607315951d76910f03d2b3ad49c4ade9207bf710d", size = 181787, upload-time = "2025-02-16T11:05:42.61Z" }, - { url = "https://files.pythonhosted.org/packages/21/37/e6d3d5ebb0ebcaf98ae84904205c9dcaf3e0fe93e65000b9f08631ed7309/websockets-15.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0f2205cdb444a42a7919690238fb5979a05439b9dbb73dd47c863d39640d85ab", size = 182058, upload-time = "2025-02-16T11:05:45.126Z" }, - { url = "https://files.pythonhosted.org/packages/c9/df/6aca296f2be4c638ad20908bb3d7c94ce7afc8d9b4b2b0780d1fc59b359c/websockets-15.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:aea01f40995fa0945c020228ab919b8dfc93fc8a9f2d3d705ab5b793f32d9e99", size = 181434, upload-time = "2025-02-16T11:05:46.692Z" }, - { url = "https://files.pythonhosted.org/packages/88/f1/75717a982bab39bbe63c83f9df0e7753e5c98bab907eb4fb5d97fe5c8c11/websockets-15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a9f8e33747b1332db11cf7fcf4a9512bef9748cb5eb4d3f7fbc8c30d75dc6ffc", size = 181431, upload-time = "2025-02-16T11:05:48.194Z" }, - { url = "https://files.pythonhosted.org/packages/e7/15/cee9e63ed9ac5bfc1a3ae8fc6c02c41745023c21eed622eef142d8fdd749/websockets-15.0-cp312-cp312-win32.whl", hash = "sha256:32e02a2d83f4954aa8c17e03fe8ec6962432c39aca4be7e8ee346b05a3476904", size = 175678, upload-time = "2025-02-16T11:05:49.592Z" }, - { url = "https://files.pythonhosted.org/packages/4e/00/993974c60f40faabb725d4dbae8b072ef73b4c4454bd261d3b1d34ace41f/websockets-15.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffc02b159b65c05f2ed9ec176b715b66918a674bd4daed48a9a7a590dd4be1aa", size = 176119, upload-time = "2025-02-16T11:05:51.926Z" }, - { url = "https://files.pythonhosted.org/packages/12/23/be28dc1023707ac51768f848d28a946443041a348ee3a54abdf9f6283372/websockets-15.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d2244d8ab24374bed366f9ff206e2619345f9cd7fe79aad5225f53faac28b6b1", size = 174714, upload-time = "2025-02-16T11:05:53.236Z" }, - { url = "https://files.pythonhosted.org/packages/8f/ff/02b5e9fbb078e7666bf3d25c18c69b499747a12f3e7f2776063ef3fb7061/websockets-15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3a302241fbe825a3e4fe07666a2ab513edfdc6d43ce24b79691b45115273b5e7", size = 172374, upload-time = "2025-02-16T11:05:55.551Z" }, - { url = "https://files.pythonhosted.org/packages/8e/61/901c8d4698e0477eff4c3c664d53f898b601fa83af4ce81946650ec2a4cb/websockets-15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:10552fed076757a70ba2c18edcbc601c7637b30cdfe8c24b65171e824c7d6081", size = 172605, upload-time = "2025-02-16T11:05:57.613Z" }, - { url = "https://files.pythonhosted.org/packages/d2/4b/dc47601a80dff317aecf8da7b4ab278d11d3494b2c373b493e4887561f90/websockets-15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c53f97032b87a406044a1c33d1e9290cc38b117a8062e8a8b285175d7e2f99c9", size = 182380, upload-time = "2025-02-16T11:05:58.984Z" }, - { url = "https://files.pythonhosted.org/packages/83/f7/b155d2b38f05ed47a0b8de1c9ea245fcd7fc625d89f35a37eccba34b42de/websockets-15.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1caf951110ca757b8ad9c4974f5cac7b8413004d2f29707e4d03a65d54cedf2b", size = 181325, upload-time = "2025-02-16T11:06:01.381Z" }, - { url = "https://files.pythonhosted.org/packages/d3/ff/040a20c01c294695cac0e361caf86f33347acc38f164f6d2be1d3e007d9f/websockets-15.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bf1ab71f9f23b0a1d52ec1682a3907e0c208c12fef9c3e99d2b80166b17905f", size = 181763, upload-time = "2025-02-16T11:06:04.344Z" }, - { url = "https://files.pythonhosted.org/packages/cb/6a/af23e93678fda8341ac8775e85123425e45c608389d3514863c702896ea5/websockets-15.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bfcd3acc1a81f106abac6afd42327d2cf1e77ec905ae11dc1d9142a006a496b6", size = 182097, upload-time = "2025-02-16T11:06:05.722Z" }, - { url = "https://files.pythonhosted.org/packages/7e/3e/1069e159c30129dc03c01513b5830237e576f47cedb888777dd885cae583/websockets-15.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c8c5c8e1bac05ef3c23722e591ef4f688f528235e2480f157a9cfe0a19081375", size = 181485, upload-time = "2025-02-16T11:06:07.076Z" }, - { url = "https://files.pythonhosted.org/packages/9a/a7/c91c47103f1cd941b576bbc452601e9e01f67d5c9be3e0a9abe726491ab5/websockets-15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:86bfb52a9cfbcc09aba2b71388b0a20ea5c52b6517c0b2e316222435a8cdab72", size = 181466, upload-time = "2025-02-16T11:06:08.927Z" }, - { url = "https://files.pythonhosted.org/packages/16/32/a4ca6e3d56c24aac46b0cf5c03b841379f6409d07fc2044b244f90f54105/websockets-15.0-cp313-cp313-win32.whl", hash = "sha256:26ba70fed190708551c19a360f9d7eca8e8c0f615d19a574292b7229e0ae324c", size = 175673, upload-time = "2025-02-16T11:06:11.188Z" }, - { url = "https://files.pythonhosted.org/packages/c0/31/25a417a23e985b61ffa5544f9facfe4a118cb64d664c886f1244a8baeca5/websockets-15.0-cp313-cp313-win_amd64.whl", hash = "sha256:ae721bcc8e69846af00b7a77a220614d9b2ec57d25017a6bbde3a99473e41ce8", size = 176115, upload-time = "2025-02-16T11:06:12.602Z" }, - { url = "https://files.pythonhosted.org/packages/e8/b2/31eec524b53f01cd8343f10a8e429730c52c1849941d1f530f8253b6d934/websockets-15.0-py3-none-any.whl", hash = "sha256:51ffd53c53c4442415b613497a34ba0aa7b99ac07f1e4a62db5dcd640ae6c3c3", size = 169023, upload-time = "2025-02-16T11:06:53.32Z" }, +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/32/18fcd5919c293a398db67443acd33fde142f283853076049824fc58e6f75/websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", size = 175423, upload-time = "2025-03-05T20:01:56.276Z" }, + { url = "https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", size = 173082, upload-time = "2025-03-05T20:01:57.563Z" }, + { url = "https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", size = 173330, upload-time = "2025-03-05T20:01:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/a5/90/1c37ae8b8a113d3daf1065222b6af61cc44102da95388ac0018fcb7d93d9/websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", size = 182878, upload-time = "2025-03-05T20:02:00.305Z" }, + { url = "https://files.pythonhosted.org/packages/8e/8d/96e8e288b2a41dffafb78e8904ea7367ee4f891dafc2ab8d87e2124cb3d3/websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", size = 181883, upload-time = "2025-03-05T20:02:03.148Z" }, + { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" }, + { url = "https://files.pythonhosted.org/packages/d4/78/2d4fed9123e6620cbf1706c0de8a1632e1a28e7774d94346d7de1bba2ca3/websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", size = 182521, upload-time = "2025-03-05T20:02:07.458Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3b/66d4c1b444dd1a9823c4a81f50231b921bab54eee2f69e70319b4e21f1ca/websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", size = 181958, upload-time = "2025-03-05T20:02:09.842Z" }, + { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" }, + { url = "https://files.pythonhosted.org/packages/d8/75/994634a49b7e12532be6a42103597b71098fd25900f7437d6055ed39930a/websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", size = 176388, upload-time = "2025-03-05T20:02:13.32Z" }, + { url = "https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", size = 176828, upload-time = "2025-03-05T20:02:14.585Z" }, + { url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437, upload-time = "2025-03-05T20:02:16.706Z" }, + { url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096, upload-time = "2025-03-05T20:02:18.832Z" }, + { url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332, upload-time = "2025-03-05T20:02:20.187Z" }, + { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" }, + { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" }, + { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" }, + { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" }, + { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" }, + { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" }, + { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440, upload-time = "2025-03-05T20:02:36.695Z" }, + { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098, upload-time = "2025-03-05T20:02:37.985Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329, upload-time = "2025-03-05T20:02:39.298Z" }, + { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" }, + { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, + { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, ] [[package]] name = "yarl" -version = "1.18.3" +version = "1.20.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, { name = "multidict" }, { name = "propcache" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b7/9d/4b94a8e6d2b51b599516a5cb88e5bc99b4d8d4583e468057eaa29d5f0918/yarl-1.18.3.tar.gz", hash = "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1", size = 181062, upload-time = "2024-12-01T20:35:23.292Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/93/282b5f4898d8e8efaf0790ba6d10e2245d2c9f30e199d1a85cae9356098c/yarl-1.18.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069", size = 141555, upload-time = "2024-12-01T20:33:08.819Z" }, - { url = "https://files.pythonhosted.org/packages/6d/9c/0a49af78df099c283ca3444560f10718fadb8a18dc8b3edf8c7bd9fd7d89/yarl-1.18.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193", size = 94351, upload-time = "2024-12-01T20:33:10.609Z" }, - { url = "https://files.pythonhosted.org/packages/5a/a1/205ab51e148fdcedad189ca8dd587794c6f119882437d04c33c01a75dece/yarl-1.18.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889", size = 92286, upload-time = "2024-12-01T20:33:12.322Z" }, - { url = "https://files.pythonhosted.org/packages/ed/fe/88b690b30f3f59275fb674f5f93ddd4a3ae796c2b62e5bb9ece8a4914b83/yarl-1.18.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d980e0325b6eddc81331d3f4551e2a333999fb176fd153e075c6d1c2530aa8a8", size = 340649, upload-time = "2024-12-01T20:33:13.842Z" }, - { url = "https://files.pythonhosted.org/packages/07/eb/3b65499b568e01f36e847cebdc8d7ccb51fff716dbda1ae83c3cbb8ca1c9/yarl-1.18.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b643562c12680b01e17239be267bc306bbc6aac1f34f6444d1bded0c5ce438ca", size = 356623, upload-time = "2024-12-01T20:33:15.535Z" }, - { url = "https://files.pythonhosted.org/packages/33/46/f559dc184280b745fc76ec6b1954de2c55595f0ec0a7614238b9ebf69618/yarl-1.18.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c017a3b6df3a1bd45b9fa49a0f54005e53fbcad16633870104b66fa1a30a29d8", size = 354007, upload-time = "2024-12-01T20:33:17.518Z" }, - { url = "https://files.pythonhosted.org/packages/af/ba/1865d85212351ad160f19fb99808acf23aab9a0f8ff31c8c9f1b4d671fc9/yarl-1.18.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75674776d96d7b851b6498f17824ba17849d790a44d282929c42dbb77d4f17ae", size = 344145, upload-time = "2024-12-01T20:33:20.071Z" }, - { url = "https://files.pythonhosted.org/packages/94/cb/5c3e975d77755d7b3d5193e92056b19d83752ea2da7ab394e22260a7b824/yarl-1.18.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccaa3a4b521b780a7e771cc336a2dba389a0861592bbce09a476190bb0c8b4b3", size = 336133, upload-time = "2024-12-01T20:33:22.515Z" }, - { url = "https://files.pythonhosted.org/packages/19/89/b77d3fd249ab52a5c40859815765d35c91425b6bb82e7427ab2f78f5ff55/yarl-1.18.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2d06d3005e668744e11ed80812e61efd77d70bb7f03e33c1598c301eea20efbb", size = 347967, upload-time = "2024-12-01T20:33:24.139Z" }, - { url = "https://files.pythonhosted.org/packages/35/bd/f6b7630ba2cc06c319c3235634c582a6ab014d52311e7d7c22f9518189b5/yarl-1.18.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9d41beda9dc97ca9ab0b9888cb71f7539124bc05df02c0cff6e5acc5a19dcc6e", size = 346397, upload-time = "2024-12-01T20:33:26.205Z" }, - { url = "https://files.pythonhosted.org/packages/18/1a/0b4e367d5a72d1f095318344848e93ea70da728118221f84f1bf6c1e39e7/yarl-1.18.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ba23302c0c61a9999784e73809427c9dbedd79f66a13d84ad1b1943802eaaf59", size = 350206, upload-time = "2024-12-01T20:33:27.83Z" }, - { url = "https://files.pythonhosted.org/packages/b5/cf/320fff4367341fb77809a2d8d7fe75b5d323a8e1b35710aafe41fdbf327b/yarl-1.18.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6748dbf9bfa5ba1afcc7556b71cda0d7ce5f24768043a02a58846e4a443d808d", size = 362089, upload-time = "2024-12-01T20:33:29.565Z" }, - { url = "https://files.pythonhosted.org/packages/57/cf/aadba261d8b920253204085268bad5e8cdd86b50162fcb1b10c10834885a/yarl-1.18.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0b0cad37311123211dc91eadcb322ef4d4a66008d3e1bdc404808992260e1a0e", size = 366267, upload-time = "2024-12-01T20:33:31.449Z" }, - { url = "https://files.pythonhosted.org/packages/54/58/fb4cadd81acdee6dafe14abeb258f876e4dd410518099ae9a35c88d8097c/yarl-1.18.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fb2171a4486bb075316ee754c6d8382ea6eb8b399d4ec62fde2b591f879778a", size = 359141, upload-time = "2024-12-01T20:33:33.79Z" }, - { url = "https://files.pythonhosted.org/packages/9a/7a/4c571597589da4cd5c14ed2a0b17ac56ec9ee7ee615013f74653169e702d/yarl-1.18.3-cp311-cp311-win32.whl", hash = "sha256:61b1a825a13bef4a5f10b1885245377d3cd0bf87cba068e1d9a88c2ae36880e1", size = 84402, upload-time = "2024-12-01T20:33:35.689Z" }, - { url = "https://files.pythonhosted.org/packages/ae/7b/8600250b3d89b625f1121d897062f629883c2f45339623b69b1747ec65fa/yarl-1.18.3-cp311-cp311-win_amd64.whl", hash = "sha256:b9d60031cf568c627d028239693fd718025719c02c9f55df0a53e587aab951b5", size = 91030, upload-time = "2024-12-01T20:33:37.511Z" }, - { url = "https://files.pythonhosted.org/packages/33/85/bd2e2729752ff4c77338e0102914897512e92496375e079ce0150a6dc306/yarl-1.18.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1dd4bdd05407ced96fed3d7f25dbbf88d2ffb045a0db60dbc247f5b3c5c25d50", size = 142644, upload-time = "2024-12-01T20:33:39.204Z" }, - { url = "https://files.pythonhosted.org/packages/ff/74/1178322cc0f10288d7eefa6e4a85d8d2e28187ccab13d5b844e8b5d7c88d/yarl-1.18.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7c33dd1931a95e5d9a772d0ac5e44cac8957eaf58e3c8da8c1414de7dd27c576", size = 94962, upload-time = "2024-12-01T20:33:40.808Z" }, - { url = "https://files.pythonhosted.org/packages/be/75/79c6acc0261e2c2ae8a1c41cf12265e91628c8c58ae91f5ff59e29c0787f/yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640", size = 92795, upload-time = "2024-12-01T20:33:42.322Z" }, - { url = "https://files.pythonhosted.org/packages/6b/32/927b2d67a412c31199e83fefdce6e645247b4fb164aa1ecb35a0f9eb2058/yarl-1.18.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:436c4fc0a4d66b2badc6c5fc5ef4e47bb10e4fd9bf0c79524ac719a01f3607c2", size = 332368, upload-time = "2024-12-01T20:33:43.956Z" }, - { url = "https://files.pythonhosted.org/packages/19/e5/859fca07169d6eceeaa4fde1997c91d8abde4e9a7c018e371640c2da2b71/yarl-1.18.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e35ef8683211db69ffe129a25d5634319a677570ab6b2eba4afa860f54eeaf75", size = 342314, upload-time = "2024-12-01T20:33:46.046Z" }, - { url = "https://files.pythonhosted.org/packages/08/75/76b63ccd91c9e03ab213ef27ae6add2e3400e77e5cdddf8ed2dbc36e3f21/yarl-1.18.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84b2deecba4a3f1a398df819151eb72d29bfeb3b69abb145a00ddc8d30094512", size = 341987, upload-time = "2024-12-01T20:33:48.352Z" }, - { url = "https://files.pythonhosted.org/packages/1a/e1/a097d5755d3ea8479a42856f51d97eeff7a3a7160593332d98f2709b3580/yarl-1.18.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba", size = 336914, upload-time = "2024-12-01T20:33:50.875Z" }, - { url = "https://files.pythonhosted.org/packages/0b/42/e1b4d0e396b7987feceebe565286c27bc085bf07d61a59508cdaf2d45e63/yarl-1.18.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0e883008013c0e4aef84dcfe2a0b172c4d23c2669412cf5b3371003941f72bb", size = 325765, upload-time = "2024-12-01T20:33:52.641Z" }, - { url = "https://files.pythonhosted.org/packages/7e/18/03a5834ccc9177f97ca1bbb245b93c13e58e8225276f01eedc4cc98ab820/yarl-1.18.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5a3f356548e34a70b0172d8890006c37be92995f62d95a07b4a42e90fba54272", size = 344444, upload-time = "2024-12-01T20:33:54.395Z" }, - { url = "https://files.pythonhosted.org/packages/c8/03/a713633bdde0640b0472aa197b5b86e90fbc4c5bc05b727b714cd8a40e6d/yarl-1.18.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ccd17349166b1bee6e529b4add61727d3f55edb7babbe4069b5764c9587a8cc6", size = 340760, upload-time = "2024-12-01T20:33:56.286Z" }, - { url = "https://files.pythonhosted.org/packages/eb/99/f6567e3f3bbad8fd101886ea0276c68ecb86a2b58be0f64077396cd4b95e/yarl-1.18.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b958ddd075ddba5b09bb0be8a6d9906d2ce933aee81100db289badbeb966f54e", size = 346484, upload-time = "2024-12-01T20:33:58.375Z" }, - { url = "https://files.pythonhosted.org/packages/8e/a9/84717c896b2fc6cb15bd4eecd64e34a2f0a9fd6669e69170c73a8b46795a/yarl-1.18.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c7d79f7d9aabd6011004e33b22bc13056a3e3fb54794d138af57f5ee9d9032cb", size = 359864, upload-time = "2024-12-01T20:34:00.22Z" }, - { url = "https://files.pythonhosted.org/packages/1e/2e/d0f5f1bef7ee93ed17e739ec8dbcb47794af891f7d165fa6014517b48169/yarl-1.18.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4891ed92157e5430874dad17b15eb1fda57627710756c27422200c52d8a4e393", size = 364537, upload-time = "2024-12-01T20:34:03.54Z" }, - { url = "https://files.pythonhosted.org/packages/97/8a/568d07c5d4964da5b02621a517532adb8ec5ba181ad1687191fffeda0ab6/yarl-1.18.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ce1af883b94304f493698b00d0f006d56aea98aeb49d75ec7d98cd4a777e9285", size = 357861, upload-time = "2024-12-01T20:34:05.73Z" }, - { url = "https://files.pythonhosted.org/packages/7d/e3/924c3f64b6b3077889df9a1ece1ed8947e7b61b0a933f2ec93041990a677/yarl-1.18.3-cp312-cp312-win32.whl", hash = "sha256:f91c4803173928a25e1a55b943c81f55b8872f0018be83e3ad4938adffb77dd2", size = 84097, upload-time = "2024-12-01T20:34:07.664Z" }, - { url = "https://files.pythonhosted.org/packages/34/45/0e055320daaabfc169b21ff6174567b2c910c45617b0d79c68d7ab349b02/yarl-1.18.3-cp312-cp312-win_amd64.whl", hash = "sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477", size = 90399, upload-time = "2024-12-01T20:34:09.61Z" }, - { url = "https://files.pythonhosted.org/packages/30/c7/c790513d5328a8390be8f47be5d52e141f78b66c6c48f48d241ca6bd5265/yarl-1.18.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:90adb47ad432332d4f0bc28f83a5963f426ce9a1a8809f5e584e704b82685dcb", size = 140789, upload-time = "2024-12-01T20:34:11.414Z" }, - { url = "https://files.pythonhosted.org/packages/30/aa/a2f84e93554a578463e2edaaf2300faa61c8701f0898725842c704ba5444/yarl-1.18.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:913829534200eb0f789d45349e55203a091f45c37a2674678744ae52fae23efa", size = 94144, upload-time = "2024-12-01T20:34:13.485Z" }, - { url = "https://files.pythonhosted.org/packages/c6/fc/d68d8f83714b221a85ce7866832cba36d7c04a68fa6a960b908c2c84f325/yarl-1.18.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ef9f7768395923c3039055c14334ba4d926f3baf7b776c923c93d80195624782", size = 91974, upload-time = "2024-12-01T20:34:15.234Z" }, - { url = "https://files.pythonhosted.org/packages/56/4e/d2563d8323a7e9a414b5b25341b3942af5902a2263d36d20fb17c40411e2/yarl-1.18.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a19f62ff30117e706ebc9090b8ecc79aeb77d0b1f5ec10d2d27a12bc9f66d0", size = 333587, upload-time = "2024-12-01T20:34:17.358Z" }, - { url = "https://files.pythonhosted.org/packages/25/c9/cfec0bc0cac8d054be223e9f2c7909d3e8442a856af9dbce7e3442a8ec8d/yarl-1.18.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e17c9361d46a4d5addf777c6dd5eab0715a7684c2f11b88c67ac37edfba6c482", size = 344386, upload-time = "2024-12-01T20:34:19.842Z" }, - { url = "https://files.pythonhosted.org/packages/ab/5d/4c532190113b25f1364d25f4c319322e86232d69175b91f27e3ebc2caf9a/yarl-1.18.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a74a13a4c857a84a845505fd2d68e54826a2cd01935a96efb1e9d86c728e186", size = 345421, upload-time = "2024-12-01T20:34:21.975Z" }, - { url = "https://files.pythonhosted.org/packages/23/d1/6cdd1632da013aa6ba18cee4d750d953104a5e7aac44e249d9410a972bf5/yarl-1.18.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41f7ce59d6ee7741af71d82020346af364949314ed3d87553763a2df1829cc58", size = 339384, upload-time = "2024-12-01T20:34:24.717Z" }, - { url = "https://files.pythonhosted.org/packages/9a/c4/6b3c39bec352e441bd30f432cda6ba51681ab19bb8abe023f0d19777aad1/yarl-1.18.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f52a265001d830bc425f82ca9eabda94a64a4d753b07d623a9f2863fde532b53", size = 326689, upload-time = "2024-12-01T20:34:26.886Z" }, - { url = "https://files.pythonhosted.org/packages/23/30/07fb088f2eefdc0aa4fc1af4e3ca4eb1a3aadd1ce7d866d74c0f124e6a85/yarl-1.18.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:82123d0c954dc58db301f5021a01854a85bf1f3bb7d12ae0c01afc414a882ca2", size = 345453, upload-time = "2024-12-01T20:34:29.605Z" }, - { url = "https://files.pythonhosted.org/packages/63/09/d54befb48f9cd8eec43797f624ec37783a0266855f4930a91e3d5c7717f8/yarl-1.18.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2ec9bbba33b2d00999af4631a3397d1fd78290c48e2a3e52d8dd72db3a067ac8", size = 341872, upload-time = "2024-12-01T20:34:31.454Z" }, - { url = "https://files.pythonhosted.org/packages/91/26/fd0ef9bf29dd906a84b59f0cd1281e65b0c3e08c6aa94b57f7d11f593518/yarl-1.18.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fbd6748e8ab9b41171bb95c6142faf068f5ef1511935a0aa07025438dd9a9bc1", size = 347497, upload-time = "2024-12-01T20:34:34.004Z" }, - { url = "https://files.pythonhosted.org/packages/d9/b5/14ac7a256d0511b2ac168d50d4b7d744aea1c1aa20c79f620d1059aab8b2/yarl-1.18.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:877d209b6aebeb5b16c42cbb377f5f94d9e556626b1bfff66d7b0d115be88d0a", size = 359981, upload-time = "2024-12-01T20:34:36.624Z" }, - { url = "https://files.pythonhosted.org/packages/ca/b3/d493221ad5cbd18bc07e642894030437e405e1413c4236dd5db6e46bcec9/yarl-1.18.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b464c4ab4bfcb41e3bfd3f1c26600d038376c2de3297760dfe064d2cb7ea8e10", size = 366229, upload-time = "2024-12-01T20:34:38.657Z" }, - { url = "https://files.pythonhosted.org/packages/04/56/6a3e2a5d9152c56c346df9b8fb8edd2c8888b1e03f96324d457e5cf06d34/yarl-1.18.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8d39d351e7faf01483cc7ff7c0213c412e38e5a340238826be7e0e4da450fdc8", size = 360383, upload-time = "2024-12-01T20:34:40.501Z" }, - { url = "https://files.pythonhosted.org/packages/fd/b7/4b3c7c7913a278d445cc6284e59b2e62fa25e72758f888b7a7a39eb8423f/yarl-1.18.3-cp313-cp313-win32.whl", hash = "sha256:61ee62ead9b68b9123ec24bc866cbef297dd266175d53296e2db5e7f797f902d", size = 310152, upload-time = "2024-12-01T20:34:42.814Z" }, - { url = "https://files.pythonhosted.org/packages/f5/d5/688db678e987c3e0fb17867970700b92603cadf36c56e5fb08f23e822a0c/yarl-1.18.3-cp313-cp313-win_amd64.whl", hash = "sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c", size = 315723, upload-time = "2024-12-01T20:34:44.699Z" }, - { url = "https://files.pythonhosted.org/packages/f5/4b/a06e0ec3d155924f77835ed2d167ebd3b211a7b0853da1cf8d8414d784ef/yarl-1.18.3-py3-none-any.whl", hash = "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b", size = 45109, upload-time = "2024-12-01T20:35:20.834Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/3c/fb/efaa23fa4e45537b827620f04cf8f3cd658b76642205162e072703a5b963/yarl-1.20.1.tar.gz", hash = "sha256:d017a4997ee50c91fd5466cef416231bb82177b93b029906cefc542ce14c35ac", size = 186428, upload-time = "2025-06-10T00:46:09.923Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/18/893b50efc2350e47a874c5c2d67e55a0ea5df91186b2a6f5ac52eff887cd/yarl-1.20.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47ee6188fea634bdfaeb2cc420f5b3b17332e6225ce88149a17c413c77ff269e", size = 133833, upload-time = "2025-06-10T00:43:07.393Z" }, + { url = "https://files.pythonhosted.org/packages/89/ed/b8773448030e6fc47fa797f099ab9eab151a43a25717f9ac043844ad5ea3/yarl-1.20.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d0f6500f69e8402d513e5eedb77a4e1818691e8f45e6b687147963514d84b44b", size = 91070, upload-time = "2025-06-10T00:43:09.538Z" }, + { url = "https://files.pythonhosted.org/packages/e3/e3/409bd17b1e42619bf69f60e4f031ce1ccb29bd7380117a55529e76933464/yarl-1.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a8900a42fcdaad568de58887c7b2f602962356908eedb7628eaf6021a6e435b", size = 89818, upload-time = "2025-06-10T00:43:11.575Z" }, + { url = "https://files.pythonhosted.org/packages/f8/77/64d8431a4d77c856eb2d82aa3de2ad6741365245a29b3a9543cd598ed8c5/yarl-1.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bad6d131fda8ef508b36be3ece16d0902e80b88ea7200f030a0f6c11d9e508d4", size = 347003, upload-time = "2025-06-10T00:43:14.088Z" }, + { url = "https://files.pythonhosted.org/packages/8d/d2/0c7e4def093dcef0bd9fa22d4d24b023788b0a33b8d0088b51aa51e21e99/yarl-1.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:df018d92fe22aaebb679a7f89fe0c0f368ec497e3dda6cb81a567610f04501f1", size = 336537, upload-time = "2025-06-10T00:43:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f3/fc514f4b2cf02cb59d10cbfe228691d25929ce8f72a38db07d3febc3f706/yarl-1.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f969afbb0a9b63c18d0feecf0db09d164b7a44a053e78a7d05f5df163e43833", size = 362358, upload-time = "2025-06-10T00:43:18.704Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6d/a313ac8d8391381ff9006ac05f1d4331cee3b1efaa833a53d12253733255/yarl-1.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:812303eb4aa98e302886ccda58d6b099e3576b1b9276161469c25803a8db277d", size = 357362, upload-time = "2025-06-10T00:43:20.888Z" }, + { url = "https://files.pythonhosted.org/packages/00/70/8f78a95d6935a70263d46caa3dd18e1f223cf2f2ff2037baa01a22bc5b22/yarl-1.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98c4a7d166635147924aa0bf9bfe8d8abad6fffa6102de9c99ea04a1376f91e8", size = 348979, upload-time = "2025-06-10T00:43:23.169Z" }, + { url = "https://files.pythonhosted.org/packages/cb/05/42773027968968f4f15143553970ee36ead27038d627f457cc44bbbeecf3/yarl-1.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12e768f966538e81e6e7550f9086a6236b16e26cd964cf4df35349970f3551cf", size = 337274, upload-time = "2025-06-10T00:43:27.111Z" }, + { url = "https://files.pythonhosted.org/packages/05/be/665634aa196954156741ea591d2f946f1b78ceee8bb8f28488bf28c0dd62/yarl-1.20.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fe41919b9d899661c5c28a8b4b0acf704510b88f27f0934ac7a7bebdd8938d5e", size = 363294, upload-time = "2025-06-10T00:43:28.96Z" }, + { url = "https://files.pythonhosted.org/packages/eb/90/73448401d36fa4e210ece5579895731f190d5119c4b66b43b52182e88cd5/yarl-1.20.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:8601bc010d1d7780592f3fc1bdc6c72e2b6466ea34569778422943e1a1f3c389", size = 358169, upload-time = "2025-06-10T00:43:30.701Z" }, + { url = "https://files.pythonhosted.org/packages/c3/b0/fce922d46dc1eb43c811f1889f7daa6001b27a4005587e94878570300881/yarl-1.20.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:daadbdc1f2a9033a2399c42646fbd46da7992e868a5fe9513860122d7fe7a73f", size = 362776, upload-time = "2025-06-10T00:43:32.51Z" }, + { url = "https://files.pythonhosted.org/packages/f1/0d/b172628fce039dae8977fd22caeff3eeebffd52e86060413f5673767c427/yarl-1.20.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:03aa1e041727cb438ca762628109ef1333498b122e4c76dd858d186a37cec845", size = 381341, upload-time = "2025-06-10T00:43:34.543Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9b/5b886d7671f4580209e855974fe1cecec409aa4a89ea58b8f0560dc529b1/yarl-1.20.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:642980ef5e0fa1de5fa96d905c7e00cb2c47cb468bfcac5a18c58e27dbf8d8d1", size = 379988, upload-time = "2025-06-10T00:43:36.489Z" }, + { url = "https://files.pythonhosted.org/packages/73/be/75ef5fd0fcd8f083a5d13f78fd3f009528132a1f2a1d7c925c39fa20aa79/yarl-1.20.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:86971e2795584fe8c002356d3b97ef6c61862720eeff03db2a7c86b678d85b3e", size = 371113, upload-time = "2025-06-10T00:43:38.592Z" }, + { url = "https://files.pythonhosted.org/packages/50/4f/62faab3b479dfdcb741fe9e3f0323e2a7d5cd1ab2edc73221d57ad4834b2/yarl-1.20.1-cp311-cp311-win32.whl", hash = "sha256:597f40615b8d25812f14562699e287f0dcc035d25eb74da72cae043bb884d773", size = 81485, upload-time = "2025-06-10T00:43:41.038Z" }, + { url = "https://files.pythonhosted.org/packages/f0/09/d9c7942f8f05c32ec72cd5c8e041c8b29b5807328b68b4801ff2511d4d5e/yarl-1.20.1-cp311-cp311-win_amd64.whl", hash = "sha256:26ef53a9e726e61e9cd1cda6b478f17e350fb5800b4bd1cd9fe81c4d91cfeb2e", size = 86686, upload-time = "2025-06-10T00:43:42.692Z" }, + { url = "https://files.pythonhosted.org/packages/5f/9a/cb7fad7d73c69f296eda6815e4a2c7ed53fc70c2f136479a91c8e5fbdb6d/yarl-1.20.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdcc4cd244e58593a4379fe60fdee5ac0331f8eb70320a24d591a3be197b94a9", size = 133667, upload-time = "2025-06-10T00:43:44.369Z" }, + { url = "https://files.pythonhosted.org/packages/67/38/688577a1cb1e656e3971fb66a3492501c5a5df56d99722e57c98249e5b8a/yarl-1.20.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b29a2c385a5f5b9c7d9347e5812b6f7ab267193c62d282a540b4fc528c8a9d2a", size = 91025, upload-time = "2025-06-10T00:43:46.295Z" }, + { url = "https://files.pythonhosted.org/packages/50/ec/72991ae51febeb11a42813fc259f0d4c8e0507f2b74b5514618d8b640365/yarl-1.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1112ae8154186dfe2de4732197f59c05a83dc814849a5ced892b708033f40dc2", size = 89709, upload-time = "2025-06-10T00:43:48.22Z" }, + { url = "https://files.pythonhosted.org/packages/99/da/4d798025490e89426e9f976702e5f9482005c548c579bdae792a4c37769e/yarl-1.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90bbd29c4fe234233f7fa2b9b121fb63c321830e5d05b45153a2ca68f7d310ee", size = 352287, upload-time = "2025-06-10T00:43:49.924Z" }, + { url = "https://files.pythonhosted.org/packages/1a/26/54a15c6a567aac1c61b18aa0f4b8aa2e285a52d547d1be8bf48abe2b3991/yarl-1.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:680e19c7ce3710ac4cd964e90dad99bf9b5029372ba0c7cbfcd55e54d90ea819", size = 345429, upload-time = "2025-06-10T00:43:51.7Z" }, + { url = "https://files.pythonhosted.org/packages/d6/95/9dcf2386cb875b234353b93ec43e40219e14900e046bf6ac118f94b1e353/yarl-1.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a979218c1fdb4246a05efc2cc23859d47c89af463a90b99b7c56094daf25a16", size = 365429, upload-time = "2025-06-10T00:43:53.494Z" }, + { url = "https://files.pythonhosted.org/packages/91/b2/33a8750f6a4bc224242a635f5f2cff6d6ad5ba651f6edcccf721992c21a0/yarl-1.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255b468adf57b4a7b65d8aad5b5138dce6a0752c139965711bdcb81bc370e1b6", size = 363862, upload-time = "2025-06-10T00:43:55.766Z" }, + { url = "https://files.pythonhosted.org/packages/98/28/3ab7acc5b51f4434b181b0cee8f1f4b77a65919700a355fb3617f9488874/yarl-1.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a97d67108e79cfe22e2b430d80d7571ae57d19f17cda8bb967057ca8a7bf5bfd", size = 355616, upload-time = "2025-06-10T00:43:58.056Z" }, + { url = "https://files.pythonhosted.org/packages/36/a3/f666894aa947a371724ec7cd2e5daa78ee8a777b21509b4252dd7bd15e29/yarl-1.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8570d998db4ddbfb9a590b185a0a33dbf8aafb831d07a5257b4ec9948df9cb0a", size = 339954, upload-time = "2025-06-10T00:43:59.773Z" }, + { url = "https://files.pythonhosted.org/packages/f1/81/5f466427e09773c04219d3450d7a1256138a010b6c9f0af2d48565e9ad13/yarl-1.20.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:97c75596019baae7c71ccf1d8cc4738bc08134060d0adfcbe5642f778d1dca38", size = 365575, upload-time = "2025-06-10T00:44:02.051Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e3/e4b0ad8403e97e6c9972dd587388940a032f030ebec196ab81a3b8e94d31/yarl-1.20.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1c48912653e63aef91ff988c5432832692ac5a1d8f0fb8a33091520b5bbe19ef", size = 365061, upload-time = "2025-06-10T00:44:04.196Z" }, + { url = "https://files.pythonhosted.org/packages/ac/99/b8a142e79eb86c926f9f06452eb13ecb1bb5713bd01dc0038faf5452e544/yarl-1.20.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4c3ae28f3ae1563c50f3d37f064ddb1511ecc1d5584e88c6b7c63cf7702a6d5f", size = 364142, upload-time = "2025-06-10T00:44:06.527Z" }, + { url = "https://files.pythonhosted.org/packages/34/f2/08ed34a4a506d82a1a3e5bab99ccd930a040f9b6449e9fd050320e45845c/yarl-1.20.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c5e9642f27036283550f5f57dc6156c51084b458570b9d0d96100c8bebb186a8", size = 381894, upload-time = "2025-06-10T00:44:08.379Z" }, + { url = "https://files.pythonhosted.org/packages/92/f8/9a3fbf0968eac704f681726eff595dce9b49c8a25cd92bf83df209668285/yarl-1.20.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2c26b0c49220d5799f7b22c6838409ee9bc58ee5c95361a4d7831f03cc225b5a", size = 383378, upload-time = "2025-06-10T00:44:10.51Z" }, + { url = "https://files.pythonhosted.org/packages/af/85/9363f77bdfa1e4d690957cd39d192c4cacd1c58965df0470a4905253b54f/yarl-1.20.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:564ab3d517e3d01c408c67f2e5247aad4019dcf1969982aba3974b4093279004", size = 374069, upload-time = "2025-06-10T00:44:12.834Z" }, + { url = "https://files.pythonhosted.org/packages/35/99/9918c8739ba271dcd935400cff8b32e3cd319eaf02fcd023d5dcd487a7c8/yarl-1.20.1-cp312-cp312-win32.whl", hash = "sha256:daea0d313868da1cf2fac6b2d3a25c6e3a9e879483244be38c8e6a41f1d876a5", size = 81249, upload-time = "2025-06-10T00:44:14.731Z" }, + { url = "https://files.pythonhosted.org/packages/eb/83/5d9092950565481b413b31a23e75dd3418ff0a277d6e0abf3729d4d1ce25/yarl-1.20.1-cp312-cp312-win_amd64.whl", hash = "sha256:48ea7d7f9be0487339828a4de0360d7ce0efc06524a48e1810f945c45b813698", size = 86710, upload-time = "2025-06-10T00:44:16.716Z" }, + { url = "https://files.pythonhosted.org/packages/8a/e1/2411b6d7f769a07687acee88a062af5833cf1966b7266f3d8dfb3d3dc7d3/yarl-1.20.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:0b5ff0fbb7c9f1b1b5ab53330acbfc5247893069e7716840c8e7d5bb7355038a", size = 131811, upload-time = "2025-06-10T00:44:18.933Z" }, + { url = "https://files.pythonhosted.org/packages/b2/27/584394e1cb76fb771371770eccad35de400e7b434ce3142c2dd27392c968/yarl-1.20.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:14f326acd845c2b2e2eb38fb1346c94f7f3b01a4f5c788f8144f9b630bfff9a3", size = 90078, upload-time = "2025-06-10T00:44:20.635Z" }, + { url = "https://files.pythonhosted.org/packages/bf/9a/3246ae92d4049099f52d9b0fe3486e3b500e29b7ea872d0f152966fc209d/yarl-1.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f60e4ad5db23f0b96e49c018596707c3ae89f5d0bd97f0ad3684bcbad899f1e7", size = 88748, upload-time = "2025-06-10T00:44:22.34Z" }, + { url = "https://files.pythonhosted.org/packages/a3/25/35afe384e31115a1a801fbcf84012d7a066d89035befae7c5d4284df1e03/yarl-1.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49bdd1b8e00ce57e68ba51916e4bb04461746e794e7c4d4bbc42ba2f18297691", size = 349595, upload-time = "2025-06-10T00:44:24.314Z" }, + { url = "https://files.pythonhosted.org/packages/28/2d/8aca6cb2cabc8f12efcb82749b9cefecbccfc7b0384e56cd71058ccee433/yarl-1.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:66252d780b45189975abfed839616e8fd2dbacbdc262105ad7742c6ae58f3e31", size = 342616, upload-time = "2025-06-10T00:44:26.167Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e9/1312633d16b31acf0098d30440ca855e3492d66623dafb8e25b03d00c3da/yarl-1.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59174e7332f5d153d8f7452a102b103e2e74035ad085f404df2e40e663a22b28", size = 361324, upload-time = "2025-06-10T00:44:27.915Z" }, + { url = "https://files.pythonhosted.org/packages/bc/a0/688cc99463f12f7669eec7c8acc71ef56a1521b99eab7cd3abb75af887b0/yarl-1.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3968ec7d92a0c0f9ac34d5ecfd03869ec0cab0697c91a45db3fbbd95fe1b653", size = 359676, upload-time = "2025-06-10T00:44:30.041Z" }, + { url = "https://files.pythonhosted.org/packages/af/44/46407d7f7a56e9a85a4c207724c9f2c545c060380718eea9088f222ba697/yarl-1.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1a4fbb50e14396ba3d375f68bfe02215d8e7bc3ec49da8341fe3157f59d2ff5", size = 352614, upload-time = "2025-06-10T00:44:32.171Z" }, + { url = "https://files.pythonhosted.org/packages/b1/91/31163295e82b8d5485d31d9cf7754d973d41915cadce070491778d9c9825/yarl-1.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11a62c839c3a8eac2410e951301309426f368388ff2f33799052787035793b02", size = 336766, upload-time = "2025-06-10T00:44:34.494Z" }, + { url = "https://files.pythonhosted.org/packages/b4/8e/c41a5bc482121f51c083c4c2bcd16b9e01e1cf8729e380273a952513a21f/yarl-1.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:041eaa14f73ff5a8986b4388ac6bb43a77f2ea09bf1913df7a35d4646db69e53", size = 364615, upload-time = "2025-06-10T00:44:36.856Z" }, + { url = "https://files.pythonhosted.org/packages/e3/5b/61a3b054238d33d70ea06ebba7e58597891b71c699e247df35cc984ab393/yarl-1.20.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:377fae2fef158e8fd9d60b4c8751387b8d1fb121d3d0b8e9b0be07d1b41e83dc", size = 360982, upload-time = "2025-06-10T00:44:39.141Z" }, + { url = "https://files.pythonhosted.org/packages/df/a3/6a72fb83f8d478cb201d14927bc8040af901811a88e0ff2da7842dd0ed19/yarl-1.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1c92f4390e407513f619d49319023664643d3339bd5e5a56a3bebe01bc67ec04", size = 369792, upload-time = "2025-06-10T00:44:40.934Z" }, + { url = "https://files.pythonhosted.org/packages/7c/af/4cc3c36dfc7c077f8dedb561eb21f69e1e9f2456b91b593882b0b18c19dc/yarl-1.20.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d25ddcf954df1754ab0f86bb696af765c5bfaba39b74095f27eececa049ef9a4", size = 382049, upload-time = "2025-06-10T00:44:42.854Z" }, + { url = "https://files.pythonhosted.org/packages/19/3a/e54e2c4752160115183a66dc9ee75a153f81f3ab2ba4bf79c3c53b33de34/yarl-1.20.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:909313577e9619dcff8c31a0ea2aa0a2a828341d92673015456b3ae492e7317b", size = 384774, upload-time = "2025-06-10T00:44:45.275Z" }, + { url = "https://files.pythonhosted.org/packages/9c/20/200ae86dabfca89060ec6447649f219b4cbd94531e425e50d57e5f5ac330/yarl-1.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:793fd0580cb9664548c6b83c63b43c477212c0260891ddf86809e1c06c8b08f1", size = 374252, upload-time = "2025-06-10T00:44:47.31Z" }, + { url = "https://files.pythonhosted.org/packages/83/75/11ee332f2f516b3d094e89448da73d557687f7d137d5a0f48c40ff211487/yarl-1.20.1-cp313-cp313-win32.whl", hash = "sha256:468f6e40285de5a5b3c44981ca3a319a4b208ccc07d526b20b12aeedcfa654b7", size = 81198, upload-time = "2025-06-10T00:44:49.164Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ba/39b1ecbf51620b40ab402b0fc817f0ff750f6d92712b44689c2c215be89d/yarl-1.20.1-cp313-cp313-win_amd64.whl", hash = "sha256:495b4ef2fea40596bfc0affe3837411d6aa3371abcf31aac0ccc4bdd64d4ef5c", size = 86346, upload-time = "2025-06-10T00:44:51.182Z" }, + { url = "https://files.pythonhosted.org/packages/43/c7/669c52519dca4c95153c8ad96dd123c79f354a376346b198f438e56ffeb4/yarl-1.20.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:f60233b98423aab21d249a30eb27c389c14929f47be8430efa7dbd91493a729d", size = 138826, upload-time = "2025-06-10T00:44:52.883Z" }, + { url = "https://files.pythonhosted.org/packages/6a/42/fc0053719b44f6ad04a75d7f05e0e9674d45ef62f2d9ad2c1163e5c05827/yarl-1.20.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6f3eff4cc3f03d650d8755c6eefc844edde99d641d0dcf4da3ab27141a5f8ddf", size = 93217, upload-time = "2025-06-10T00:44:54.658Z" }, + { url = "https://files.pythonhosted.org/packages/4f/7f/fa59c4c27e2a076bba0d959386e26eba77eb52ea4a0aac48e3515c186b4c/yarl-1.20.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:69ff8439d8ba832d6bed88af2c2b3445977eba9a4588b787b32945871c2444e3", size = 92700, upload-time = "2025-06-10T00:44:56.784Z" }, + { url = "https://files.pythonhosted.org/packages/2f/d4/062b2f48e7c93481e88eff97a6312dca15ea200e959f23e96d8ab898c5b8/yarl-1.20.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cf34efa60eb81dd2645a2e13e00bb98b76c35ab5061a3989c7a70f78c85006d", size = 347644, upload-time = "2025-06-10T00:44:59.071Z" }, + { url = "https://files.pythonhosted.org/packages/89/47/78b7f40d13c8f62b499cc702fdf69e090455518ae544c00a3bf4afc9fc77/yarl-1.20.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8e0fe9364ad0fddab2688ce72cb7a8e61ea42eff3c7caeeb83874a5d479c896c", size = 323452, upload-time = "2025-06-10T00:45:01.605Z" }, + { url = "https://files.pythonhosted.org/packages/eb/2b/490d3b2dc66f52987d4ee0d3090a147ea67732ce6b4d61e362c1846d0d32/yarl-1.20.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f64fbf81878ba914562c672024089e3401974a39767747691c65080a67b18c1", size = 346378, upload-time = "2025-06-10T00:45:03.946Z" }, + { url = "https://files.pythonhosted.org/packages/66/ad/775da9c8a94ce925d1537f939a4f17d782efef1f973039d821cbe4bcc211/yarl-1.20.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6342d643bf9a1de97e512e45e4b9560a043347e779a173250824f8b254bd5ce", size = 353261, upload-time = "2025-06-10T00:45:05.992Z" }, + { url = "https://files.pythonhosted.org/packages/4b/23/0ed0922b47a4f5c6eb9065d5ff1e459747226ddce5c6a4c111e728c9f701/yarl-1.20.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56dac5f452ed25eef0f6e3c6a066c6ab68971d96a9fb441791cad0efba6140d3", size = 335987, upload-time = "2025-06-10T00:45:08.227Z" }, + { url = "https://files.pythonhosted.org/packages/3e/49/bc728a7fe7d0e9336e2b78f0958a2d6b288ba89f25a1762407a222bf53c3/yarl-1.20.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7d7f497126d65e2cad8dc5f97d34c27b19199b6414a40cb36b52f41b79014be", size = 329361, upload-time = "2025-06-10T00:45:10.11Z" }, + { url = "https://files.pythonhosted.org/packages/93/8f/b811b9d1f617c83c907e7082a76e2b92b655400e61730cd61a1f67178393/yarl-1.20.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:67e708dfb8e78d8a19169818eeb5c7a80717562de9051bf2413aca8e3696bf16", size = 346460, upload-time = "2025-06-10T00:45:12.055Z" }, + { url = "https://files.pythonhosted.org/packages/70/fd/af94f04f275f95da2c3b8b5e1d49e3e79f1ed8b6ceb0f1664cbd902773ff/yarl-1.20.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:595c07bc79af2494365cc96ddeb772f76272364ef7c80fb892ef9d0649586513", size = 334486, upload-time = "2025-06-10T00:45:13.995Z" }, + { url = "https://files.pythonhosted.org/packages/84/65/04c62e82704e7dd0a9b3f61dbaa8447f8507655fd16c51da0637b39b2910/yarl-1.20.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7bdd2f80f4a7df852ab9ab49484a4dee8030023aa536df41f2d922fd57bf023f", size = 342219, upload-time = "2025-06-10T00:45:16.479Z" }, + { url = "https://files.pythonhosted.org/packages/91/95/459ca62eb958381b342d94ab9a4b6aec1ddec1f7057c487e926f03c06d30/yarl-1.20.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c03bfebc4ae8d862f853a9757199677ab74ec25424d0ebd68a0027e9c639a390", size = 350693, upload-time = "2025-06-10T00:45:18.399Z" }, + { url = "https://files.pythonhosted.org/packages/a6/00/d393e82dd955ad20617abc546a8f1aee40534d599ff555ea053d0ec9bf03/yarl-1.20.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:344d1103e9c1523f32a5ed704d576172d2cabed3122ea90b1d4e11fe17c66458", size = 355803, upload-time = "2025-06-10T00:45:20.677Z" }, + { url = "https://files.pythonhosted.org/packages/9e/ed/c5fb04869b99b717985e244fd93029c7a8e8febdfcffa06093e32d7d44e7/yarl-1.20.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:88cab98aa4e13e1ade8c141daeedd300a4603b7132819c484841bb7af3edce9e", size = 341709, upload-time = "2025-06-10T00:45:23.221Z" }, + { url = "https://files.pythonhosted.org/packages/24/fd/725b8e73ac2a50e78a4534ac43c6addf5c1c2d65380dd48a9169cc6739a9/yarl-1.20.1-cp313-cp313t-win32.whl", hash = "sha256:b121ff6a7cbd4abc28985b6028235491941b9fe8fe226e6fdc539c977ea1739d", size = 86591, upload-time = "2025-06-10T00:45:25.793Z" }, + { url = "https://files.pythonhosted.org/packages/94/c3/b2e9f38bc3e11191981d57ea08cab2166e74ea770024a646617c9cddd9f6/yarl-1.20.1-cp313-cp313t-win_amd64.whl", hash = "sha256:541d050a355bbbc27e55d906bc91cb6fe42f96c01413dd0f4ed5a5240513874f", size = 93003, upload-time = "2025-06-10T00:45:27.752Z" }, + { url = "https://files.pythonhosted.org/packages/b4/2d/2345fce04cfd4bee161bf1e7d9cdc702e3e16109021035dbb24db654a622/yarl-1.20.1-py3-none-any.whl", hash = "sha256:83b8eb083fe4683c6115795d9fc1cfaf2cbbefb19b3a1cb68f6527460f483a77", size = 46542, upload-time = "2025-06-10T00:46:07.521Z" }, ] From 5fd91f7b8fd7b91be92769f43fc3d7dd6b46513d Mon Sep 17 00:00:00 2001 From: Paul Payne <paul@payne.io> Date: Fri, 22 Aug 2025 15:29:03 -0700 Subject: [PATCH 3/5] Updates root ruff.toml to lint more. --- ruff.toml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/ruff.toml b/ruff.toml index a44141547..bc486d94c 100644 --- a/ruff.toml +++ b/ruff.toml @@ -5,3 +5,21 @@ target-version = "py311" docstring-code-format = true line-ending = "lf" preview = true + +[lint] +select = [ + "F", # pyflakes + "E", # pycodestyle + "I", # isort + "N", # pep8-naming + "UP", # pyupgrade + "RUF", # ruff + "B", # flake8-bugbear + "C4", # flake8-comprehensions + "ISC", # flake8-implicit-str-concat + "PIE", # flake8-pie + "PT", # flake-pytest-style + "PTH", # flake8-use-pathlib + "SIM", # flake8-simplify + "TID", # flake8-tidy-imports +] From e59e0a470a9c140a16a14ffd97146b0b320b78d7 Mon Sep 17 00:00:00 2001 From: Paul Payne <paul@payne.io> Date: Fri, 22 Aug 2025 15:29:50 -0700 Subject: [PATCH 4/5] Adds some additional utility to openai-client and swba context lib. --- .../openai-client/.vscode/settings.json | 5 +- .../openai-client/openai_client/__init__.py | 8 +- .../openai-client/openai_client/completion.py | 28 ++- .../openai-client/openai_client/logging.py | 28 +-- .../openai-client/openai_client/tools.py | 169 ++++++++++++------ .../assistant_app/context.py | 15 +- 6 files changed, 178 insertions(+), 75 deletions(-) diff --git a/libraries/python/openai-client/.vscode/settings.json b/libraries/python/openai-client/.vscode/settings.json index 197b82a0f..9adaf355b 100644 --- a/libraries/python/openai-client/.vscode/settings.json +++ b/libraries/python/openai-client/.vscode/settings.json @@ -36,7 +36,7 @@ "**/.data": true, "**/__pycache__": true }, - // For use with optional extension: "streetsidesoftware.code-spell-checker" + // For use with optional extension: "streetsidesoftware.code-spell-checker" "cSpell.ignorePaths": [ ".venv", "node_modules", @@ -48,6 +48,7 @@ "addopts", "asctime", "contentsafety", + "elts", "levelname", "openai", "Pydantic", @@ -56,4 +57,4 @@ "testpaths", "tiktoken" ] -} +} \ No newline at end of file diff --git a/libraries/python/openai-client/openai_client/__init__.py b/libraries/python/openai-client/openai_client/__init__.py index 56a64cb12..10448442f 100644 --- a/libraries/python/openai-client/openai_client/__init__.py +++ b/libraries/python/openai-client/openai_client/__init__.py @@ -3,7 +3,11 @@ from .client import ( create_client, ) -from .completion import completion_structured, message_content_from_completion, message_from_completion +from .completion import ( + completion_structured, + message_content_from_completion, + message_from_completion, +) from .config import ( AzureOpenAIApiKeyAuthConfig, AzureOpenAIAzureIdentityAuthConfig, @@ -22,6 +26,7 @@ add_serializable_data, extra_data, make_completion_args_serializable, + serializable, ) from .messages import ( convert_from_completion_messages, @@ -74,6 +79,7 @@ "num_tokens_from_tools_and_messages", "OpenAIServiceConfig", "OpenAIRequestConfig", + "serializable", "ServiceConfig", "truncate_messages_for_logging", "validate_completion", diff --git a/libraries/python/openai-client/openai_client/completion.py b/libraries/python/openai-client/openai_client/completion.py index c4f37dc69..9ea8a920f 100644 --- a/libraries/python/openai-client/openai_client/completion.py +++ b/libraries/python/openai-client/openai_client/completion.py @@ -25,7 +25,9 @@ JSON_OBJECT_RESPONSE_FORMAT: ResponseFormat = {"type": "json_object"} -def assistant_message_from_completion(completion: ParsedChatCompletion[None]) -> ChatCompletionAssistantMessageParam: +def assistant_message_from_completion( + completion: ParsedChatCompletion, +) -> ChatCompletionAssistantMessageParam: completion_message: ParsedChatCompletionMessage = completion.choices[0].message assistant_message = ChatCompletionAssistantMessageParam(role="assistant") if completion_message.tool_calls: @@ -36,17 +38,26 @@ def assistant_message_from_completion(completion: ParsedChatCompletion[None]) -> return assistant_message -def message_from_completion(completion: ParsedChatCompletion) -> ParsedChatCompletionMessage | None: - return completion.choices[0].message if completion and completion.choices else None +def message_from_completion( + completion: ParsedChatCompletion, +) -> ParsedChatCompletionMessage | None: + if not completion or not completion.choices: + return None + return completion.choices[0].message def message_content_from_completion(completion: ParsedChatCompletion | None) -> str: - if not completion or not completion.choices or not completion.choices[0].message: + if completion is None or not completion.choices: return "" - return completion.choices[0].message.content or "" + content = message_from_completion(completion) + if content and content.content: + return content.content + return "" -def message_content_dict_from_completion(completion: ParsedChatCompletion) -> dict[str, Any] | None: +def message_content_dict_from_completion( + completion: ParsedChatCompletion, +) -> dict[str, Any] | None: message = message_from_completion(completion) if message: if message.parsed: @@ -109,7 +120,10 @@ async def completion_structured( raise NoParsedMessageError() if response.choices[0].finish_reason != "stop": - logger.warning("Unexpected finish reason, expected stop; reason: %s", response.choices[0].finish_reason) + logger.warning( + "Unexpected finish reason, expected stop; reason: %s", + response.choices[0].finish_reason, + ) metadata = { "request": { diff --git a/libraries/python/openai-client/openai_client/logging.py b/libraries/python/openai-client/openai_client/logging.py index ca271570f..28e61c036 100644 --- a/libraries/python/openai-client/openai_client/logging.py +++ b/libraries/python/openai-client/openai_client/logging.py @@ -10,7 +10,9 @@ from pydantic import BaseModel -def make_completion_args_serializable(completion_args: dict[str, Any]) -> dict[str, Any]: +def make_completion_args_serializable( + completion_args: dict[str, Any], +) -> dict[str, Any]: """ We put the completion args into logs and messages, so it's important that they are serializable. This function returns a copy of the completion args @@ -38,6 +40,9 @@ def convert_to_serializable(data: Any) -> Any: """ if isinstance(data, BaseModel): return data.model_dump() + elif inspect.isclass(data) and issubclass(data, BaseModel): + # Handle Pydantic model classes (not instances) + return data.__name__ elif isinstance(data, dict): return {key: convert_to_serializable(value) for key, value in data.items()} elif isinstance(data, list): @@ -58,26 +63,29 @@ def default(self, o): return super().default(o) -def add_serializable_data(data: Any) -> dict[str, Any]: +def serializable(data: Any) -> dict[str, Any]: """ - Helper function to use when adding extra data to log messages. Data will - attempt to be put into a serializable format. + Convert data to a serializable format for logging or other purposes. """ - extra = {} - - # Convert to serializable. data = convert_to_serializable(data) - - # Ensure data is a JSON-serializable object. try: data = json.loads(json.dumps(data, cls=CustomEncoder)) except Exception as e: data = str(e) + return data + +def add_serializable_data(data: Any) -> dict[str, Any]: + """ + Helper function to use when adding extra data to log messages. Data will + attempt to be put into a serializable format. + """ + extra = {} + data = serializable(data) if data: extra["data"] = data - return extra +# Helpful alias extra_data = add_serializable_data diff --git a/libraries/python/openai-client/openai_client/tools.py b/libraries/python/openai-client/openai_client/tools.py index 6c1229427..e4a6b623d 100644 --- a/libraries/python/openai-client/openai_client/tools.py +++ b/libraries/python/openai-client/openai_client/tools.py @@ -1,8 +1,9 @@ import ast import inspect import json +from collections.abc import Callable, Iterable from dataclasses import dataclass -from typing import Any, Callable, Iterable +from typing import Any from openai import ( NOT_GIVEN, @@ -15,13 +16,18 @@ ParsedChatCompletion, ParsedFunctionToolCall, ) +from openai.types.shared_params.function_definition import FunctionDefinition from pydantic import BaseModel, create_model from pydantic.fields import FieldInfo from . import logger from .completion import assistant_message_from_completion from .errors import CompletionError, validate_completion -from .logging import add_serializable_data, make_completion_args_serializable +from .logging import ( + add_serializable_data, + make_completion_args_serializable, + serializable, +) def to_string(value: Any) -> str: @@ -33,7 +39,7 @@ def to_string(value: Any) -> str: return "Function executed successfully." elif isinstance(value, str): return value - elif isinstance(value, (int, float)): + elif isinstance(value, int | float): return str(value) elif isinstance(value, dict): return json.dumps(value) @@ -47,7 +53,9 @@ def to_string(value: Any) -> str: return str(value) -def function_list_to_tool_choice(functions: list[str] | None) -> Iterable[ChatCompletionToolParam] | None: +def function_list_to_tool_choice( + functions: list[str] | None, +) -> Iterable[ChatCompletionToolParam] | None: """ Convert a list of function names to a list of ChatCompletionToolParam objects. This is used in the Chat Completions API if you want to tell the @@ -56,10 +64,7 @@ def function_list_to_tool_choice(functions: list[str] | None) -> Iterable[ChatCo if not functions: return None return [ - ChatCompletionToolParam(**{ - "type": "function", - "function": {"name": name}, - }) + ChatCompletionToolParam(type="function", function={"name": name}) for name in functions ] or None @@ -85,15 +90,21 @@ class ToolFunction: generate a usage string (for help messages) """ - def __init__(self, fn: Callable, name: str | None = None, description: str | None = None) -> None: + def __init__( + self, fn: Callable, name: str | None = None, description: str | None = None + ) -> None: self.fn = fn self.name = name or fn.__name__ - self.description = description or inspect.getdoc(fn) or self.name.replace("_", " ").title() + self.description = ( + description or inspect.getdoc(fn) or self.name.replace("_", " ").title() + ) - def parameters(self, exclude: list[str] = []) -> list[Parameter]: + def parameters(self, exclude: list[str] | None = None) -> list[Parameter]: """ This function's parameters and their default values. """ + if exclude is None: + exclude = [] parameters = dict(inspect.signature(self.fn).parameters) for param_name in exclude: del parameters[param_name] @@ -155,7 +166,7 @@ def schema(self, strict: bool = True) -> dict[str, Any]: # Remove title attribute from all properties (not allowed by the Chat # Completions API). properties = parameters_schema["properties"] - for property_key in properties.keys(): + for property_key in properties: if "title" in properties[property_key]: del properties[property_key]["title"] @@ -230,7 +241,9 @@ class ToolFunctions: tool-call completion against the API. """ - def __init__(self, functions: list[ToolFunction] | None = None, with_help: bool = False) -> None: + def __init__( + self, functions: list[ToolFunction] | None = None, with_help: bool = False + ) -> None: # Set up function map. self.function_map: dict[str, ToolFunction] = {} if functions: @@ -251,7 +264,12 @@ def help(self) -> str: usage.sort() return "```text\nCommands:\n" + "\n".join(usage) + "\n```" - def add_function(self, function: Callable, name: str | None = None, description: str | None = None) -> None: + def add_function( + self, + function: Callable, + name: str | None = None, + description: str | None = None, + ) -> None: """Register a function with the tool functions.""" if not name: name = function.__name__ @@ -264,15 +282,21 @@ def get_function(self, name: str) -> ToolFunction | None: return self.function_map.get(name) def get_functions(self) -> list[ToolFunction]: - return [function for function in self.function_map.values()] + return list(self.function_map.values()) async def execute_function( - self, name: str, args: tuple = (), kwargs: dict[str, Any] = {}, string_response: bool = False + self, + name: str, + args: tuple = (), + kwargs: dict[str, Any] | None = None, + string_response: bool = False, ) -> Any: """ Run a function from the ToolFunctions list by name. If string_response is True, the function return value will be converted to a string. """ + if kwargs is None: + kwargs = {} function = self.get_function(name) if not function: raise ValueError(f"Function {name} not found in registry.") @@ -280,20 +304,26 @@ async def execute_function( if string_response: return to_string(response) - async def execute_function_string(self, function_string: str, string_response: bool = False) -> Any: + async def execute_function_string( + self, function_string: str, string_response: bool = False + ) -> Any: """Parse a function string and execute the function.""" try: function, args, kwargs = self.parse_function_string(function_string) except ValueError as e: - raise ValueError(f"{e} Type: `/help` for more information.") + raise ValueError(f"{e} Type: `/help` for more information.") from e if not function: - raise ValueError("Function not found in registry. Type: `/help` for more information.") + raise ValueError( + "Function not found in registry. Type: `/help` for more information." + ) result = await function.execute(*args, **kwargs) if string_response: return to_string(result) @staticmethod - def parse_fn_string(function_string: str) -> tuple[str | None, list[Any], dict[str, Any]]: + def parse_fn_string( + function_string: str, + ) -> tuple[str | None, list[Any], dict[str, Any]]: """ Parse a string representing a function call into its name, positional arguments, and keyword arguments. @@ -309,11 +339,17 @@ def parse_fn_string(function_string: str) -> tuple[str | None, list[Any], dict[s # Parse the string into an AST (Abstract Syntax Tree) try: tree = ast.parse(function_string) - except SyntaxError: - raise ValueError("Invalid function call. Please check your syntax.") + except SyntaxError as err: + raise ValueError( + "Invalid function call. Please check your syntax." + ) from err # Ensure the tree contains exactly one expression (the function call) - if not (isinstance(tree, ast.Module) and len(tree.body) == 1 and isinstance(tree.body[0], ast.Expr)): + if not ( + isinstance(tree, ast.Module) + and len(tree.body) == 1 + and isinstance(tree.body[0], ast.Expr) + ): raise ValueError("Expected a single function call.") # The function call is stored as a `Call` node within the expression @@ -336,9 +372,14 @@ def eval_node(node): elif isinstance(node, ast.Tuple): return tuple(eval_node(elem) for elem in node.elts) elif isinstance(node, ast.Dict): - return {eval_node(key): eval_node(value) for key, value in zip(node.keys, node.values)} + return { + eval_node(key): eval_node(value) + for key, value in zip(node.keys, node.values, strict=False) + } elif isinstance(node, ast.Name): - return node.id # This can return variable names, but we assume they're constants + return ( + node.id + ) # This can return variable names, but we assume they're constants elif isinstance(node, ast.BinOp): # Handling arithmetic expressions return eval(compile(ast.Expression(node), filename="", mode="eval")) elif isinstance(node, ast.Call): @@ -356,7 +397,9 @@ def eval_node(node): return function_name, args, kwargs - def parse_function_string(self, function_string: str) -> tuple[ToolFunction | None, list[Any], dict[str, Any]]: + def parse_function_string( + self, function_string: str + ) -> tuple[ToolFunction | None, list[Any], dict[str, Any]]: """Parse a function call string into a function and its arguments.""" function_name, args, kwargs = ToolFunctions.parse_fn_string(function_string) @@ -377,15 +420,16 @@ def chat_completion_tools(self) -> list[ChatCompletionToolParam] | NotGiven: calls. """ tools = [ - ChatCompletionToolParam(**{ - "type": "function", - "function": func.schema(), - }) + ChatCompletionToolParam( + type="function", function=FunctionDefinition(**func.schema()) + ) for func in self.function_map.values() ] return tools or NOT_GIVEN - async def execute_tool_call(self, tool_call: ParsedFunctionToolCall) -> ChatCompletionMessageParam | None: + async def execute_tool_call( + self, tool_call: ParsedFunctionToolCall + ) -> ChatCompletionMessageParam | None: """ Execute a function as requested by a ParsedFunctionToolCall (generated by the Chat Completions API) and return the response as a @@ -396,24 +440,31 @@ async def execute_tool_call(self, tool_call: ParsedFunctionToolCall) -> ChatComp if self.has_function(function.name): logger.debug( "Function call.", - extra=add_serializable_data({"name": function.name, "arguments": function.arguments}), + extra=add_serializable_data( + {"name": function.name, "arguments": function.arguments} + ), ) value: Any = None try: kwargs: dict[str, Any] = json.loads(function.arguments) - value = await self.execute_function(function.name, (), kwargs, string_response=True) + value = await self.execute_function( + function.name, (), kwargs, string_response=True + ) except Exception as e: logger.error("Error.", extra=add_serializable_data({"error": e})) value = f"Error: {e}" finally: logger.debug( - "Function response.", extra=add_serializable_data({"tool_call_id": tool_call.id, "content": value}) + "Function response.", + extra=add_serializable_data( + {"tool_call_id": tool_call.id, "content": value} + ), ) - return { - "role": "tool", - "content": value, - "tool_call_id": tool_call.id, - } + return { + "role": "tool", + "content": value, + "tool_call_id": tool_call.id, + } else: logger.error(f"Function not found: {function.name}") return None @@ -423,7 +474,7 @@ async def complete_with_tool_calls( async_client: AsyncOpenAI, completion_args: dict[str, Any], tool_functions: ToolFunctions, - metadata: dict[str, Any] = {}, + metadata: dict[str, Any] | None = None, max_tool_call_rounds: int = 5, # Adding a parameter to limit the maximum number of rounds ) -> tuple[ParsedChatCompletion | None, list[ChatCompletionMessageParam]]: """ @@ -441,6 +492,8 @@ async def complete_with_tool_calls( - metadata: Metadata to be added to the completion response. - max_tool_call_rounds: Maximum number of tool call rounds to prevent infinite loops (default: 5) """ + if metadata is None: + metadata = {} messages: list[ChatCompletionMessageParam] = completion_args.get("messages", []) all_new_messages: list[ChatCompletionMessageParam] = [] current_completion = None @@ -455,20 +508,18 @@ async def complete_with_tool_calls( # or we hit the maximum number of rounds while rounds < max_tool_call_rounds: rounds += 1 - - # Prepare arguments for this round - current_args = {**completion_args, "messages": [*messages, *all_new_messages]} - - # Log the completion request round_description = f"round {rounds}" - if rounds == 1: - round_description = "pre-tool" + current_args = {**completion_args, "messages": [*messages, *all_new_messages]} logger.debug( f"Completion call ({round_description}).", - extra=add_serializable_data(make_completion_args_serializable(current_args)), + extra=add_serializable_data( + make_completion_args_serializable(current_args) + ), + ) + metadata[f"completion_request ({round_description})"] = serializable( + current_args ) - metadata[f"completion_request ({round_description})"] = make_completion_args_serializable(current_args) # Make the completion call try: @@ -478,15 +529,23 @@ async def complete_with_tool_calls( validate_completion(current_completion) logger.debug( f"Completion response ({round_description}).", - extra=add_serializable_data({"completion": current_completion.model_dump()}), + extra=add_serializable_data( + {"completion": current_completion.model_dump()} + ), + ) + metadata[f"completion_response ({round_description})"] = ( + current_completion.model_dump() ) - metadata[f"completion_response ({round_description})"] = current_completion.model_dump() except Exception as e: completion_error = CompletionError(e) - metadata[f"completion_error ({round_description})"] = completion_error.message + metadata[f"completion_error ({round_description})"] = ( + completion_error.message + ) logger.error( completion_error.message, - extra=add_serializable_data({"completion_error": completion_error.body, "metadata": metadata}), + extra=add_serializable_data( + {"completion_error": completion_error.body, "metadata": metadata} + ), ) raise completion_error from e @@ -504,7 +563,9 @@ async def complete_with_tool_calls( # Call all tool functions and generate return messages round_tool_messages: list[ChatCompletionMessageParam] = [] for tool_call in completion_message.tool_calls: - function_call_result_message = await tool_functions.execute_tool_call(tool_call) + function_call_result_message = await tool_functions.execute_tool_call( + tool_call + ) if function_call_result_message: round_tool_messages.append(function_call_result_message) all_new_messages.append(function_call_result_message) diff --git a/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/context.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/context.py index 78a6952cf..3f18a58f7 100644 --- a/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/context.py +++ b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/assistant_app/context.py @@ -3,9 +3,10 @@ import logging import pathlib import uuid +from collections.abc import AsyncGenerator, AsyncIterator from contextlib import asynccontextmanager from dataclasses import dataclass, field -from typing import Any, AsyncGenerator, AsyncIterator +from typing import Any import httpx import semantic_workbench_api_model @@ -55,6 +56,18 @@ def for_conversation( httpx_client=self._httpx_client, ) + def to_dict(self) -> dict[str, Any]: + return { + "id": self.id, + "title": self.title, + "assistant": { + "id": self.assistant.id, + "name": self.assistant.name, + "_assistant_service_id": self.assistant._assistant_service_id, + "_template_id": self.assistant._template_id, + }, + } + @property def _conversation_client( self, From d995b82d2fb223bdbb1450c076773eff6de4e989 Mon Sep 17 00:00:00 2001 From: Paul Payne <paul@payne.io> Date: Fri, 22 Aug 2025 15:41:24 -0700 Subject: [PATCH 5/5] Fix tests. --- .../agentic/detect_coordinator_actions.py | 5 +- .../assistant/agentic/focus.py | 15 +- .../tests/test_share_storage.py | 4 +- .../tests/test_share_tools.py | 307 ------------------ 4 files changed, 17 insertions(+), 314 deletions(-) delete mode 100644 assistants/project-assistant/tests/test_share_tools.py diff --git a/assistants/project-assistant/assistant/agentic/detect_coordinator_actions.py b/assistants/project-assistant/assistant/agentic/detect_coordinator_actions.py index ab83a3a08..a57b81f83 100644 --- a/assistants/project-assistant/assistant/agentic/detect_coordinator_actions.py +++ b/assistants/project-assistant/assistant/agentic/detect_coordinator_actions.py @@ -6,7 +6,7 @@ from semantic_workbench_assistant.assistant_app import ConversationContext from assistant.config import assistant_config -from assistant.data import InspectorTab +from assistant.data import InspectorTab, NewTaskInfo from assistant.domain.share_manager import ShareManager from assistant.domain.tasks_manager import TasksManager from assistant.logging import logger @@ -91,7 +91,8 @@ class Output(BaseModel): if response and response.choices and response.choices[0].message.parsed: output: Output = response.choices[0].message.parsed if output.tasks: - await TasksManager.add_tasks(context, output.tasks) + new_tasks = [NewTaskInfo(content=task) for task in output.tasks] + await TasksManager.add_tasks(context, new_tasks) await Notifications.notify( context, f"Added {len(output.tasks)} tasks related to the process.", debug_data=debug ) diff --git a/assistants/project-assistant/assistant/agentic/focus.py b/assistants/project-assistant/assistant/agentic/focus.py index 626163233..84a7d6f29 100644 --- a/assistants/project-assistant/assistant/agentic/focus.py +++ b/assistants/project-assistant/assistant/agentic/focus.py @@ -6,7 +6,8 @@ from semantic_workbench_assistant.assistant_app import ConversationContext from assistant.config import assistant_config -from assistant.data import InspectorTab +import uuid +from assistant.data import InspectorTab, TaskInfo, TaskPriority, TaskStatus from assistant.domain.tasks_manager import TasksManager from assistant.logging import logger from assistant.notifications import Notifications @@ -36,7 +37,7 @@ async def focus(context: ConversationContext, attachments_extension: Attachments tasks = await TasksManager.get_tasks(context) if tasks: - tasks_data = "\n\n".join("- " + thought for thought in tasks) + tasks_data = "\n\n".join("- " + task.content for task in tasks) prompt.contexts.append( DataContext( "Consulting Tasks", @@ -82,7 +83,15 @@ class Output(BaseModel): if response and response.choices and response.choices[0].message.parsed: output: Output = response.choices[0].message.parsed if output.focused_tasks: - await TasksManager.set_task_list(context, output.focused_tasks) + focused_task_infos = [ + TaskInfo( + task_id=str(uuid.uuid4()), + content=task, + status=TaskStatus.PENDING, + priority=TaskPriority.MEDIUM + ) for task in output.focused_tasks + ] + await TasksManager.set_task_list(context, focused_task_infos) await Notifications.notify(context, "Focused the task list.", debug_data=debug) await Notifications.notify_state_update( context, diff --git a/assistants/project-assistant/tests/test_share_storage.py b/assistants/project-assistant/tests/test_share_storage.py index e1a55a531..1b5550aa4 100644 --- a/assistants/project-assistant/tests/test_share_storage.py +++ b/assistants/project-assistant/tests/test_share_storage.py @@ -392,7 +392,7 @@ async def test_knowledge_package_info(self): assert package.share_id == self.share_id # Update knowledge package info - package.transfer_notes = "Test status message" + package.preferred_communication_style = "Test status message" # Note: completion_percentage removed from model package.next_learning_actions = ["Action 1", "Action 2"] @@ -405,7 +405,7 @@ async def test_knowledge_package_info(self): # Verify updates were saved assert updated_package is not None, "Should load updated knowledge package" if updated_package: - assert updated_package.transfer_notes == "Test status message" + assert updated_package.preferred_communication_style == "Test status message" # Note: completion_percentage removed from model assert updated_package.next_learning_actions == ["Action 1", "Action 2"] diff --git a/assistants/project-assistant/tests/test_share_tools.py b/assistants/project-assistant/tests/test_share_tools.py deleted file mode 100644 index 9a54912c7..000000000 --- a/assistants/project-assistant/tests/test_share_tools.py +++ /dev/null @@ -1,307 +0,0 @@ -""" -Tests for the ShareTools functionality. -""" - -import contextlib -from unittest.mock import AsyncMock, MagicMock - -import openai_client -import pytest -from assistant.agentic.detect_information_request_needs import detect_information_request_needs -from assistant.data import ConversationRole -from assistant.tools import ShareTools -from semantic_workbench_assistant.assistant_app import ConversationContext - - -# Use pytest for all tests for consistency -class TestShareTools: - """Test the ShareTools class.""" - - @pytest.fixture - def context(self): - """Set up test fixtures.""" - context = AsyncMock(spec=ConversationContext) - context.conversation = MagicMock() - context.id = "test-conversation-id" - # Add the assistant attribute for the get_project_tools test - context.assistant = MagicMock() - # Use the correct property name (_template_id) - from assistant.utils import DEFAULT_TEMPLATE_ID - - context.assistant._template_id = DEFAULT_TEMPLATE_ID - return context - - def test_initialization(self, context): - """Test that ShareTools initializes correctly.""" - # Test ShareTools initialization - share_tools = ShareTools(context) - assert share_tools.context == context - - # Test coordinator tools - coordinator_tool_functions = share_tools.conversationalist_tools() - assert coordinator_tool_functions is not None - - # Verify Coordinator-specific functions are registered - assert "update_brief" in coordinator_tool_functions.function_map - assert "resolve_information_request" in coordinator_tool_functions.function_map - - # Verify Team-specific functions are NOT registered - assert "create_information_request" not in coordinator_tool_functions.function_map - assert "delete_information_request" not in coordinator_tool_functions.function_map - - # Test team tools - team_tool_functions = share_tools.team_tools() - assert team_tool_functions is not None - - # Verify Team-specific functions are registered - assert "create_information_request" in team_tool_functions.function_map - assert "delete_information_request" in team_tool_functions.function_map - - # Verify Coordinator-specific functions are NOT registered - assert "update_brief" not in team_tool_functions.function_map - assert "resolve_information_request" not in team_tool_functions.function_map - - # detect_information_request_needs is not exposed as a tool function anymore - assert "detect_information_request_needs" not in team_tool_functions.function_map - - @pytest.mark.asyncio - async def test_project_tools_with_config(self, context, monkeypatch): - """Test the ShareTools behavior with different configurations.""" - # Mock the assistant_config.get method - mock_config = MagicMock() - mock_config.track_progress = True - - async def mock_get_config(*args, **kwargs): - return mock_config - - # Patch the assistant_config.get method - mock_assistant_config = MagicMock() - mock_assistant_config.get = AsyncMock(side_effect=mock_get_config) - monkeypatch.setattr("assistant.config.assistant_config", mock_assistant_config) - - # Test with track_progress set to True first - # Create a ShareTools instance directly - share_tools = ShareTools(context) - coordinator_tools = share_tools.conversationalist_tools() - - # Make sure basic tools are available - assert "update_brief" in coordinator_tools.function_map - - # For team role, check available functions - team_tool_functions = share_tools.team_tools() - assert "create_information_request" in team_tool_functions.function_map - - # Now test with track_progress set to False - mock_config.track_progress = False - - # Test with get_project_tools which handles tool removal based on track_progress - # Since the track_progress check is now done in get_project_tools, we need to test that function - - # Create our own implementation to check for track_progress - async def check_tools_with_config(context, role): - """Simple wrapper to test if tools are filtered based on track_progress.""" - share_tools = ShareTools(context) - tool_functions = ( - share_tools.conversationalist_tools() - if role == ConversationRole.COORDINATOR - else share_tools.team_tools() - ) - - # If progress tracking is disabled, remove progress-related tools - if not mock_config.track_progress: - # List of progress-related functions to remove - progress_functions = [ - "add_project_goal", - "delete_project_goal", - "mark_criterion_completed", - "mark_project_ready_for_working", - "report_project_completion", - ] - - # Remove progress-related functions - for func_name in progress_functions: - if func_name in tool_functions.function_map: - del tool_functions.function_map[func_name] - - return tool_functions - - # Get the tools using our function that checks track_progress - project_tool_functions = await check_tools_with_config(context, ConversationRole.COORDINATOR) - - # Verify basic tools are still available regardless of track_progress setting - assert "update_brief" in project_tool_functions.function_map - assert "resolve_information_request" in project_tool_functions.function_map - - # For team tools - team_tool_functions = await check_tools_with_config(context, ConversationRole.TEAM) - assert "create_information_request" in team_tool_functions.function_map - assert "delete_information_request" in team_tool_functions.function_map - - @pytest.mark.asyncio - async def test_detect_information_request_needs(self, context, monkeypatch): - """Test the detect_information_request_needs function.""" - # Create a more complete context mock for this test - context.assistant = MagicMock() - context.assistant._template_id = "default" - context.assistant.id = "test-assistant-id" - - # Test message - test_message = "I need information about how to proceed with this task." - - # Setup mock config to be returned from assistant_config.get - mock_config = MagicMock() - mock_config.track_progress = True - mock_config.service_config = None # Will cause the method to return early with error info - - async def mock_get_config(*args, **kwargs): - return mock_config - - # Patch assistant_config.get - mock_assistant_config = MagicMock() - mock_assistant_config.get = AsyncMock(side_effect=mock_get_config) - monkeypatch.setattr("assistant.agentic.analysis.assistant_config", mock_assistant_config) - - # Create a mock message for the message history - mock_msg = MagicMock() - mock_msg.sender = MagicMock() - mock_msg.sender.participant_id = "test-user-id" # Not the assistant ID - mock_msg.content = "Test message content" - - # Mock get_messages response - mock_messages_response = MagicMock() - mock_messages_response.messages = [mock_msg] - context.get_messages = AsyncMock(return_value=mock_messages_response) - - # Test with the message - should return early with missing service_config - result = await detect_information_request_needs(context, test_message) - - # Verify we get the expected early-return response for missing service_config - assert not result["is_information_request"] - assert "LLM detection unavailable" in result["reason"] - assert result["confidence"] == 0.0 - - # Now update mock config with a service_config and simulate a successful LLM response - mock_config.service_config = {"type": "openai"} - - # Create mock client that returns expected response - mock_client = AsyncMock() - mock_response = MagicMock() - mock_choice = MagicMock() - mock_message = MagicMock() - mock_message.content = '{"is_information_request": true, "confidence": 0.9, "potential_title": "Test title"}' - mock_choice.message = mock_message - mock_response.choices = [mock_choice] - mock_client.chat.completions.create = AsyncMock(return_value=mock_response) - - # Mock the client creation context manager - @contextlib.asynccontextmanager - async def mock_create_client(*args, **kwargs): - try: - yield mock_client - finally: - pass - - # Patch the openai_client.create_client context manager - monkeypatch.setattr(openai_client, "create_client", mock_create_client) - - # Test with message that should return mocked success response - result = await detect_information_request_needs(context, test_message) - - # Verify successful path results - assert result["is_information_request"] is True - assert result["confidence"] == 0.9 - assert result["potential_title"] == "Test title" - assert result["original_message"] == test_message - - # DISABLED: delete_project_goal functionality has been removed from the codebase - # @pytest.mark.asyncio - async def disabled_test_delete_project_goal(self, context, monkeypatch): - """Test the delete_project_goal functionality.""" - # Setup mocks - project_id = "test-project-id" - goal_name = "Test Goal" - - # Mock KnowledgeTransferManager.get_project_id - async def mock_get_project_id(*args, **kwargs): - return project_id - - monkeypatch.setattr( - "assistant.manager.KnowledgeTransferManager.get_project_id", - AsyncMock(side_effect=mock_get_project_id), - ) - - # Mock require_current_user to return a user ID - async def mock_require_current_user(*args, **kwargs): - return "test-user-id" - - monkeypatch.setattr( - "assistant.project_manager.require_current_user", - AsyncMock(side_effect=mock_require_current_user), - ) - - # Mock KnowledgeTransferManager.delete_project_goal to return success - async def mock_delete_project_goal(*args, **kwargs): - return True, goal_name - - monkeypatch.setattr( - "assistant.project_manager.KnowledgeTransferManager.delete_project_goal", - AsyncMock(side_effect=mock_delete_project_goal), - ) - - # Test the delete_project_goal function - # result = await tools.delete_learning_objective(objective_index) - - # Verify the result - # assert f"Goal '{goal_name}' has been successfully deleted from the project." in result - - # Verify that context.send_messages was called with appropriate message - expected_message_content = f"Goal '{goal_name}' has been successfully deleted from the project." - context.send_messages.assert_called_once() - # Get the first positional argument passed to send_messages - call_args = context.send_messages.call_args[0][0] - assert call_args.content == expected_message_content - - # DISABLED: delete_project_goal functionality has been removed from the codebase - # @pytest.mark.asyncio - async def disabled_test_delete_project_goal_wrong_role(self, context): - """Test delete_project_goal with wrong role (Team instead of Coordinator).""" - # Test the delete_project_goal function with Team role - # result = await tools.delete_learning_objective(1) - - # Verify that the operation is rejected - # assert "Only Coordinator can delete project goals." in result - # Verify context.send_messages was not called - context.send_messages.assert_not_called() - - # DISABLED: delete_project_goal functionality has been removed from the codebase - # @pytest.mark.asyncio - async def disabled_test_delete_project_goal_error(self, context, monkeypatch): - """Test delete_project_goal with error condition.""" - # Setup mocks - error_message = "Invalid goal index" - - # Mock KnowledgeTransferManager.get_project_id - async def mock_get_project_id(*args, **kwargs): - return "test-project-id" - - monkeypatch.setattr( - "assistant.project_manager.KnowledgeTransferManager.get_project_id", - AsyncMock(side_effect=mock_get_project_id), - ) - - # Mock KnowledgeTransferManager.delete_project_goal to return failure - async def mock_delete_project_goal(*args, **kwargs): - return False, error_message - - monkeypatch.setattr( - "assistant.project_manager.KnowledgeTransferManager.delete_project_goal", - AsyncMock(side_effect=mock_delete_project_goal), - ) - - # Test the delete_project_goal function - # result = await tools.delete_learning_objective(999) # Using an invalid index - - # Verify the error result - # assert f"Error deleting goal: {error_message}" in result - # Verify context.send_messages was not called - context.send_messages.assert_not_called()