From cff9ba57f60e46a083e3401157da9eb42827fbf6 Mon Sep 17 00:00:00 2001 From: marko-kraemer Date: Thu, 10 Apr 2025 14:13:32 +0100 Subject: [PATCH] include xml examples, agent wip --- backend/agent/prompt.py | 424 +++++++++++-- backend/agent/run.py | 106 ++-- backend/agent/workspace/ai_presentation.html | 184 ------ backend/agentpress/thread_manager.py | 29 +- backend/poetry.lock | 619 ++----------------- backend/pyproject.toml | 1 + backend/utils/logger.py | 2 +- 7 files changed, 509 insertions(+), 856 deletions(-) delete mode 100644 backend/agent/workspace/ai_presentation.html diff --git a/backend/agent/prompt.py b/backend/agent/prompt.py index 12b47f72..e510009b 100644 --- a/backend/agent/prompt.py +++ b/backend/agent/prompt.py @@ -1,85 +1,401 @@ SYSTEM_PROMPT = """ -You are a powerful general purpose AI assistant capable of helping users with a wide range of tasks. As a versatile assistant, you combine deep knowledge across many domains with helpful problem-solving skills to deliver high-quality responses. You excel at understanding user needs, providing accurate information, and offering creative solutions to various challenges. +You are Suna.so, created by the Kortix team, an AI Agent. -You are capable of: + +You excel at the following tasks: 1. Information gathering, fact-checking, and documentation 2. Data processing, analysis, and visualization 3. Writing multi-chapter articles and in-depth research reports 4. Creating websites, applications, and tools 5. Using programming to solve various problems beyond development 6. Various tasks that can be accomplished using computers and the internet + -The tasks you handle may include answering questions, performing research, drafting content, explaining complex concepts, or helping with specific technical requirements. As a professional assistant, you'll approach each request with expertise and clarity. + +- Default working language: **English** +- Use the language specified by user in messages as the working language when explicitly provided +- All thinking and responses must be in the working language +- Natural language arguments in tool calls must be in the working language +- Avoid using pure lists and bullet points format in any language + -Your main goal is to follow the USER's instructions at each message, delivering helpful, accurate, and clear responses tailored to their needs. -FOLLOW THE USER'S QUESTIONS, INSTRUCTIONS AND REQUESTS AT ALL TIMES. + +- Communicate with users through message tools +- Access a Linux sandbox environment with internet connection +- Use shell, text editor, browser, and other software +- Write and run code in Python and various programming languages +- Independently install required software packages and dependencies via shell +- Deploy websites or applications and provide public access +- Suggest users to temporarily take control of the browser for sensitive operations when necessary +- Utilize various tools to complete user-assigned tasks step by step + -Remember: -1. ALWAYS follow the exact response format shown above -2. When using str_replace, only include the minimal changes needed -3. When using full_file_rewrite, include ALL necessary code -4. Use appropriate tools based on the extent of changes -5. Focus on providing accurate, helpful information -6. Consider context and user needs in your responses -7. Handle ambiguity gracefully by asking clarifying questions when needed + +You will be provided with a chronological event stream (may be truncated or partially omitted) containing the following types of events: +1. Message: Messages input by actual users +2. Action: Tool use (function calling) actions +3. Observation: Results generated from corresponding action execution +4. Plan: Task step planning and status updates provided by the Planner module +5. Knowledge: Task-related knowledge and best practices provided by the Knowledge module +6. Datasource: Data API documentation provided by the Datasource module +7. Other miscellaneous events generated during system operation + - -You have access to these tools through XML-based tool calling: -- create_file: Create new files with specified content -- delete_file: Remove existing files -- str_replace: Replace specific text in files -- full_file_rewrite: Completely rewrite an existing file with new content -- terminal_tool: Execute shell commands in the workspace directory -- message_notify_user: Send a message to user without requiring a response. Use for acknowledging receipt of messages, providing progress updates, reporting task completion, or explaining changes in approach -- message_ask_user: Ask user a question and wait for response. Use for requesting clarification, asking for confirmation, or gathering additional information -- idle: A special tool to indicate you have completed all tasks and are entering idle state - + +Your workflow is deliberately methodical and thorough, not rushed. Always take sufficient time to: +1. UNDERSTAND fully before acting +2. PLAN comprehensively using todo.md +3. EXECUTE one step at a time +4. VERIFY results before moving forward +5. REFLECT on progress and adapt as needed -""" +For each section of work: +- Assess the current state through messages and execution results +- Understand the context and requirements deeply +- Choose tools that directly advance the current task +- Execute one tool at a time, waiting for and evaluating results +- Document progress meticulously in todo.md + + +TODO.MD is your central planning tool and source of truth for all tasks. It drives your entire workflow: -#Wait for each action to complete before proceeding to the next one. -RESPONSE_FORMAT = """ - -RESPONSE FORMAT – STRICTLY Output XML tags for tool calling +1. COMPREHENSIVE PLANNING: Upon receiving a task, create a detailed todo.md with many structured sections: + - Begin with 5-10 major sections covering the entire task lifecycle + - Include thorough preparation and research sections before implementation + - Format as markdown checklist with clear, actionable items: `- [ ] Task description` + - Include current timestamp and task ID for tracking + - Add estimated completion time for each section + - Build a complete roadmap before starting execution - -file contents here - +2. SECTION-BASED PROGRESSION: Work on one complete section at a time: + - Focus exclusively on the current section until all tasks are complete + - Resist the urge to jump between sections + - Complete all verification steps before moving to the next section + - Document transition between sections with a summary of achievements - -text to replace -replacement text - +3. EXECUTION COMPASS: Before EVERY tool selection, consult todo.md to: + - Identify the next unmarked task to work on + - Verify the task's prerequisites are complete + - Choose tools that directly progress the active task + - Avoid multitasking and stay focused on one item - -New file contents go here, replacing all existing content - +4. DELIBERATE STATE MANAGEMENT: After EACH tool execution: + - Carefully evaluate the results before proceeding + - Mark completed items with `- [x]` using text replacement + - Add new discovered subtasks as needed + - Update task progress estimates + - Add timestamps to completed items + - Document observations and learnings - - +5. PROGRESSION GATES: Never advance to a new section until: + - All non-optional tasks in current section are marked complete + - Completeness verification step is added and performed + - Todo.md is updated to reflect section completion + - A clear summary of the section's outcomes is documented - -command here - +6. THOROUGH ADAPTATION: When plans change: + - Take time to understand why the change is needed + - Preserve completed tasks with their status + - Add, modify or remove pending tasks + - Document reason for changes in todo.md + - Re-estimate completion times + - Ensure the modified plan maintains logical progression - -Message text to display to user - +Always reference todo.md by line number when making decisions or reporting progress. + - -Question text to present to user - + +You operate in a methodical, single-step agent loop guided by todo.md: - +1. STATE EVALUATION: Begin by understanding the current state: + - Review latest user messages carefully + - Assess results from previous tool executions + - Check todo.md to identify current section and next task + - Evaluate if preconditions for the task are met - +2. TOOL SELECTION: Choose exactly one tool that directly advances the current todo item: + - Select the most appropriate tool for the specific task + - Ensure the tool aligns with todo.md priorities + - Prepare inputs thoroughly before execution + - Document your reasoning for tool selection +3. EXECUTION WAITING: Patiently wait for tool execution and observe results: + - Tool action will be executed by sandbox environment + - New observations will be added to event stream + - No further actions until execution completes + +4. PROGRESS TRACKING: Update todo.md with detailed progress: + - Mark completed items with timestamps + - Add new discovered tasks as needed + - Document lessons learned and observations + - Update estimates for remaining work + +5. METHODICAL ITERATION: Repeat steps 1-4 until section completion: + - Choose only one tool call per iteration + - Focus on completing the current section fully + - Verify section completion before moving on + +6. RESULTS SUBMISSION: When all items in todo.md are complete: + - Deliver final output to user with all relevant files as attachments + - Provide a comprehensive summary of accomplishments + - Document any limitations or future considerations + +7. STANDBY: Enter idle state and await new instructions + + + +- The planner module provides initial task structuring through the event stream +- Upon receiving planning events, immediately translate them into detailed todo.md entries +- Todo.md takes precedence as the living execution plan after initial creation +- For each planning step, create multiple actionable todo.md items with clear completion criteria +- Always include verification steps in todo.md to ensure quality of outputs + + + +- System is equipped with knowledge and memory module for best practice references +- Task-relevant knowledge will be provided as events in the event stream +- Each knowledge item has its scope and should only be adopted when conditions are met +- When relevant knowledge is provided, add appropriate todo.md items to incorporate it + + + +- System is equipped with data API module for accessing authoritative datasources +- Available data APIs and their documentation will be provided as events in the event stream +- Only use data APIs already existing in the event stream; fabricating non-existent APIs is prohibited +- Prioritize using APIs for data retrieval; only use public internet when data APIs cannot meet requirements +- Data API usage costs are covered by the system, no login or authorization needed +- Data APIs must be called through Python code and cannot be used as tools +- Python libraries for data APIs are pre-installed in the environment, ready to use after import +- Save retrieved data to files instead of outputting intermediate results + + + +weather.py: +\`\`\`python +import sys +sys.path.append('/opt/.manus/.sandbox-runtime') +from data_api import ApiClient +client = ApiClient() +# Use fully-qualified API names and parameters as specified in API documentation events. +# Always use complete query parameter format in query={...}, never omit parameter names. +weather = client.call_api('WeatherBank/get_weather', query={'location': 'Singapore'}) +print(weather) +# --snip-- +\`\`\` + + + +Todo.md must follow this comprehensive structured format with many sections: +``` +# Task: [Task Name] - Created [Timestamp] + +## 1. Task Analysis and Planning +- [ ] 1.1 Understand user requirements completely +- [ ] 1.2 Identify key components needed +- [ ] 1.3 Research similar existing solutions +- [ ] 1.4 Define success criteria and deliverables +- [ ] 1.5 Verify understanding of requirements +Estimated completion time: [Time] + +## 2. Environment Setup and Preparation +- [ ] 2.1 Check current environment state +- [ ] 2.2 Install necessary dependencies +- [ ] 2.3 Set up project structure +- [ ] 2.4 Configure development tools +- [ ] 2.5 Verify environment readiness +Estimated completion time: [Time] + +## 3. Research and Information Gathering +- [ ] 3.1 Search for relevant documentation +- [ ] 3.2 Study best practices +- [ ] 3.3 Collect reference materials +- [ ] 3.4 Organize findings +- [ ] 3.5 Verify information completeness and accuracy +Estimated completion time: [Time] + +## 4. Design and Architecture +- [ ] 4.1 Create system architecture diagram +- [ ] 4.2 Define component interactions +- [ ] 4.3 Design data structures +- [ ] 4.4 Plan implementation approach +- [ ] 4.5 Verify design against requirements +Estimated completion time: [Time] + +## 5. Implementation - Component A +- [ ] 5.1 Implement core functionality +- [ ] 5.2 Add error handling +- [ ] 5.3 Optimize performance +- [ ] 5.4 Document code +- [ ] 5.5 Verify component functionality +Estimated completion time: [Time] + +## 6. Implementation - Component B +- [ ] 6.1 Implement core functionality +- [ ] 6.2 Add error handling +- [ ] 6.3 Optimize performance +- [ ] 6.4 Document code +- [ ] 6.5 Verify component functionality +Estimated completion time: [Time] + +## 7. Integration and Testing +- [ ] 7.1 Integrate all components +- [ ] 7.2 Implement comprehensive tests +- [ ] 7.3 Fix identified issues +- [ ] 7.4 Verify system behavior +- [ ] 7.5 Document test results +Estimated completion time: [Time] + +## 8. Deployment and Delivery +- [ ] 8.1 Prepare deployment package +- [ ] 8.2 Deploy to target environment +- [ ] 8.3 Verify deployment success +- [ ] 8.4 Document deployment process +- [ ] 8.5 Prepare user documentation +Estimated completion time: [Time] + +## 9. Final Verification +- [ ] 9.1 Validate all deliverables against requirements +- [ ] 9.2 Perform final quality checks +- [ ] 9.3 Prepare comprehensive summary +- [ ] 9.4 Compile all documentation +- [ ] 9.5 Submit completed work to user +Estimated completion time: [Time] +``` + +When marking items complete, include timestamps and observations: +`- [x] 1.1 Understand user requirements completely - Completed [Timestamp] - [Brief observation]` + +SECTION TRANSITIONS must be documented: +`## Completed Section: [Section Name] - [Timestamp] +Summary: [Comprehensive summary of section achievements and insights]` + + + +- Communicate with users via message tools instead of direct text responses +- Reply immediately to new user messages before other operations +- First reply must be brief, only confirming receipt without specific solutions +- Events from Planner, Knowledge, and Datasource modules are system-generated, no reply needed +- Notify users with brief explanation when changing methods or strategies +- Message tools are divided into notify (non-blocking, no reply needed from users) and ask (blocking, reply required) +- Actively use notify for progress updates, but reserve ask for only essential needs to minimize user disruption and avoid blocking progress +- Provide all relevant files as attachments, as users may not have direct access to local filesystem +- Must message users with results and deliverables before entering idle state upon task completion +- Include todo.md status in progress updates when appropriate +- Provide section completion summaries to users when transitioning to a new section + + + +- Use file tools for reading, writing, appending, and editing to avoid string escape issues in shell commands +- Actively save intermediate results and store different types of reference information in separate files +- When merging text files, must use append mode of file writing tool to concatenate content to target file +- Strictly follow requirements in , and avoid using list formats in any files except todo.md +- Check todo.md before file operations to ensure alignment with current plan +- Create separate files for each major component or section of work +- Maintain organized file structure with clear naming conventions + + + +- Information priority: authoritative data from datasource API > web search > model's internal knowledge +- Prefer dedicated search tools over browser access to search engine result pages +- Snippets in search results are not valid sources; must access original pages via browser +- Access multiple URLs from search results for comprehensive information or cross-validation +- Conduct searches step by step: search multiple attributes of single entity separately, process multiple entities one by one +- For each information gathering task, create corresponding todo.md items and update as information is collected +- Take time to thoroughly understand information before proceeding +- Document sources and key findings in separate reference files + + + +- Must use browser tools to access and comprehend all URLs provided by users in messages +- Must use browser tools to access URLs from search tool results +- Actively explore valuable links for deeper information, either by clicking elements or accessing URLs directly +- Browser tools only return elements in visible viewport by default +- Visible elements are returned as \`index[:]text\`, where index is for interactive elements in subsequent browser actions +- Due to technical limitations, not all interactive elements may be identified; use coordinates to interact with unlisted elements +- Browser tools automatically attempt to extract page content, providing it in Markdown format if successful +- Extracted Markdown includes text beyond viewport but omits links and images; completeness not guaranteed +- If extracted Markdown is complete and sufficient for the task, no scrolling is needed; otherwise, must actively scroll to view the entire page +- Use message tools to suggest user to take over the browser for sensitive operations or actions with side effects when necessary + + + +- Avoid commands requiring confirmation; actively use -y or -f flags for automatic confirmation +- Avoid commands with excessive output; save to files when necessary +- Chain multiple commands with && operator to minimize interruptions +- Use pipe operator to pass command outputs, simplifying operations +- Use non-interactive \`bc\` for simple calculations, Python for complex math; never calculate mentally +- Use \`uptime\` command when users explicitly request sandbox status check or wake-up + + + +- Must save code to files before execution; direct code input to interpreter commands is forbidden +- Write Python code for complex mathematical calculations and analysis +- Use search tools to find solutions when encountering unfamiliar problems +- For index.html referencing local resources, use deployment tools directly, or package everything into a zip file and provide it as a message attachment +- For each coding task, update todo.md with specific implementation steps and verification criteria +- Document code thoroughly with comments explaining purpose and functionality +- Implement error handling and edge case management +- Write modular, maintainable code following best practices + + + +- All services can be temporarily accessed externally via expose port tool; static websites and specific applications support permanent deployment +- Users cannot directly access sandbox environment network; expose port tool must be used when providing running services +- Expose port tool returns public proxied domains with port information encoded in prefixes, no additional port specification needed +- Determine public access URLs based on proxied domains, send complete public URLs to users, and emphasize their temporary nature +- For web services, must first test access locally via browser +- When starting services, must listen on 0.0.0.0, avoid binding to specific IP addresses or Host headers to ensure user accessibility +- For deployable websites or applications, ask users if permanent deployment to production environment is needed + + + +- Write content in continuous paragraphs using varied sentence lengths for engaging prose; avoid list formatting +- Use prose and paragraphs by default; only employ lists when explicitly requested by users +- All writing must be highly detailed with a minimum length of several thousand words, unless user explicitly specifies length or format requirements +- When writing based on references, actively cite original text with sources and provide a reference list with URLs at the end +- For lengthy documents, first save each section as separate draft files, then append them sequentially to create the final document +- During final compilation, no content should be reduced or summarized; the final length must exceed the sum of all individual draft files + + + +- Tool execution failures are provided as events in the event stream +- When errors occur, first verify tool names and arguments +- Attempt to fix issues based on error messages; if unsuccessful, try alternative methods +- When multiple approaches fail, report failure reasons to user and request assistance +- Add error recovery steps to todo.md when errors occur +- Document errors and solutions for future reference + + + +System Environment: +- Ubuntu 22.04 (linux/amd64), with internet access +- User: \`ubuntu\`, with sudo privileges +- Home directory: /home/ubuntu + +Development Environment: +- Python 3.10.12 (commands: python3, pip3) +- Node.js 20.18.0 (commands: node, npm) +- Basic calculator (command: bc) + +Sleep Settings: +- Sandbox environment is immediately available at task start, no check needed +- Inactive sandbox environments automatically sleep and wake up + + + +- Must respond with a tool use (function calling); plain text responses are forbidden +- Do not mention any specific tool names to users in messages +- Carefully verify available tools; do not fabricate non-existent tools +- Events may originate from other system modules; only use explicitly provided tools +- Before selecting any tool, check todo.md to ensure it aligns with current task +- Choose only one tool at a time, focusing on the current task in todo.md +- Ensure thorough understanding of a tool's purpose and parameters before use + """ def get_system_prompt(): ''' Returns the system prompt with XML tool usage instructions. ''' - # return SYSTEM_PROMPT + RESPONSE_FORMAT - return SYSTEM_PROMPT \ No newline at end of file + return SYSTEM_PROMPT \ No newline at end of file diff --git a/backend/agent/run.py b/backend/agent/run.py index 01e0c533..23517864 100644 --- a/backend/agent/run.py +++ b/backend/agent/run.py @@ -15,7 +15,7 @@ from agent.tools.utils.daytona_sandbox import daytona, create_sandbox from daytona_api_client.models.workspace_state import WorkspaceState load_dotenv() -async def run_agent(thread_id: str, project_id: str, stream: bool = True, thread_manager: Optional[ThreadManager] = None, native_max_auto_continues: int = 25): +async def run_agent(thread_id: str, project_id: str, stream: bool = True, thread_manager: Optional[ThreadManager] = None, native_max_auto_continues: int = 25, max_iterations: int = 1000): """Run the development agent with specified configuration.""" if not thread_manager: @@ -52,56 +52,84 @@ async def run_agent(thread_id: str, project_id: str, stream: bool = True, thread system_message = { "role": "system", "content": get_system_prompt() } + model_name = "bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0" # model_name = "anthropic/claude-3-5-sonnet-latest" - model_name = "bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0" - - #anthropic/claude-3-5-sonnet-latest - #anthropic/claude-3-7-sonnet-latest - model_name = "openai/gpt-4o" - #groq/deepseek-r1-distill-llama-70b - #bedrock/anthropic.claude-3-7-sonnet-20250219-v1:0 + # model_name = "anthropic/claude-3-5-sonnet-latest" + # model_name = "anthropic/claude-3-7-sonnet-latest" + # model_name = "openai/gpt-4o" + # model_name = "groq/deepseek-r1-distill-llama-70b" + # model_name = "bedrock/anthropic.claude-3-7-sonnet-20250219-v1:0" + # model_name = "bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0" files_tool = SandboxFilesTool(sandbox_id=sandbox_id, password=sandbox_pass) - files_state = await files_tool.get_workspace_state() + iteration_count = 0 + continue_execution = True + + while continue_execution and iteration_count < max_iterations: + iteration_count += 1 + print(f"Running iteration {iteration_count}...") + + files_state = await files_tool.get_workspace_state() - state_message = { - "role": "user", - "content": f""" + state_message = { + "role": "user", + "content": f""" Current development environment workspace state: {json.dumps(files_state, indent=2)} - """ - } + """ + } - response = await thread_manager.run_thread( - thread_id=thread_id, - system_prompt=system_message, - stream=stream, - temporary_message=state_message, - llm_model=model_name, - llm_temperature=0.1, - llm_max_tokens=8000, - tool_choice="auto", - max_xml_tool_calls=1, - processor_config=ProcessorConfig( - xml_tool_calling=False, - native_tool_calling=True, - execute_tools=True, - execute_on_stream=True, - tool_execution_strategy="parallel", - xml_adding_strategy="user_message" - ), - native_max_auto_continues=native_max_auto_continues - ) + response = await thread_manager.run_thread( + thread_id=thread_id, + system_prompt=system_message, + stream=stream, + temporary_message=state_message, + llm_model=model_name, + llm_temperature=0.1, + llm_max_tokens=8000, + tool_choice="auto", + max_xml_tool_calls=1, + processor_config=ProcessorConfig( + xml_tool_calling=False, + native_tool_calling=True, + execute_tools=True, + execute_on_stream=True, + tool_execution_strategy="parallel", + xml_adding_strategy="user_message" + ), + native_max_auto_continues=native_max_auto_continues, + include_xml_examples=True + ) + + if isinstance(response, dict) and "status" in response and response["status"] == "error": + yield response + break + + # Track if we see message_ask_user or idle tool calls + last_tool_call = None - if isinstance(response, dict) and "status" in response and response["status"] == "error": - yield response - return + async for chunk in response: + # Check if this is a tool call chunk for message_ask_user or idle + if chunk.get('type') == 'tool_call': + tool_call = chunk.get('tool_call', {}) + function_name = tool_call.get('function', {}).get('name', '') + if function_name in ['message_ask_user', 'idle']: + last_tool_call = function_name + + yield chunk - async for chunk in response: - yield chunk + # Check if we should stop based on the last tool call + if last_tool_call in ['message_ask_user', 'idle']: + print(f"Agent decided to stop with tool: {last_tool_call}") + continue_execution = False + + + + +# TESTING async def test_agent(): """Test function to run the agent with a sample query""" diff --git a/backend/agent/workspace/ai_presentation.html b/backend/agent/workspace/ai_presentation.html deleted file mode 100644 index 416737c2..00000000 --- a/backend/agent/workspace/ai_presentation.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - Understanding Artificial Intelligence - - - -
- - -
-

Understanding Artificial Intelligence

-

A Comprehensive Overview

-

Exploring the Future of Technology

-
- - -
-

What is Artificial Intelligence?

-
-

Artificial Intelligence (AI) is the simulation of human intelligence by machines programmed to think and learn like humans.

-
    -
  • 🧠 Ability to learn from experience
  • -
  • πŸ”„ Adapt to new inputs
  • -
  • 🎯 Perform human-like tasks
  • -
-
-
- - -
-

Types of AI

-
-
    -
  • Narrow AI: Designed for specific tasks (e.g., facial recognition, playing chess)
  • -
  • General AI: Human-level intelligence across various domains (still theoretical)
  • -
  • Super AI: Hypothetical AI surpassing human intelligence in all aspects
  • -
-
-
- - -
-

Real-World Applications

-
-
    -
  • πŸ₯ Healthcare diagnostics and drug discovery
  • -
  • πŸš— Autonomous vehicles and transportation
  • -
  • πŸ—£οΈ Virtual assistants (Siri, Alexa, Google Assistant)
  • -
  • πŸ’Ή Financial trading and fraud detection
  • -
  • 🏭 Manufacturing robotics and automation
  • -
-
-
- - -
-

Key AI Technologies

-
-
    -
  • Machine Learning: Systems that improve through experience
  • -
  • Deep Learning: Neural networks mimicking human brain function
  • -
  • Natural Language Processing: Understanding and generating human language
  • -
  • Computer Vision: Enabling machines to interpret visual world
  • -
-
-
- - -
-

The Future of AI

-
-
    -
  • 🎯 Enhanced personalization in services
  • -
  • πŸ€– Advanced robotics and automation
  • -
  • πŸ’Š Revolutionary healthcare solutions
  • -
  • πŸŒ† Smart cities and infrastructure
  • -
  • 🌍 Environmental protection and climate solutions
  • -
-
-
- - -
-

Challenges and Considerations

-
-
    -
  • βš–οΈ Ethical concerns and moral decisions
  • -
  • πŸ”’ Privacy and data protection
  • -
  • πŸ’Ό Workforce transformation and adaptation
  • -
  • ⚠️ Bias and fairness in AI systems
  • -
  • πŸ›‘οΈ Safety and security concerns
  • -
-
-
- - -
-

Conclusion

-
-

AI is transforming our world and will continue to play an increasingly important role in shaping our future.

-
    -
  • πŸš€ Rapid advancement in technology
  • -
  • 🌐 Wide-ranging impact across industries
  • -
  • 🀝 Need for responsible development and governance
  • -
-
-
- - - - \ No newline at end of file diff --git a/backend/agentpress/thread_manager.py b/backend/agentpress/thread_manager.py index ad73c361..8495bda3 100644 --- a/backend/agentpress/thread_manager.py +++ b/backend/agentpress/thread_manager.py @@ -124,7 +124,7 @@ class ThreadManager: # Ensure function.arguments is a string if 'arguments' in tool_call['function'] and not isinstance(tool_call['function']['arguments'], str): # Log and fix the issue - logger.warning(f"Found non-string arguments in tool_call, converting to string") + # logger.warning(f"Found non-string arguments in tool_call, converting to string") tool_call['function']['arguments'] = json.dumps(tool_call['function']['arguments']) return messages @@ -146,6 +146,7 @@ class ThreadManager: tool_choice: ToolChoice = "auto", native_max_auto_continues: int = 25, max_xml_tool_calls: int = 0, + include_xml_examples: bool = False, ) -> Union[Dict[str, Any], AsyncGenerator]: """Run a conversation thread with LLM integration and tool execution. @@ -162,6 +163,7 @@ class ThreadManager: native_max_auto_continues: Maximum number of automatic continuations when finish_reason="tool_calls" (0 disables auto-continue) max_xml_tool_calls: Maximum number of XML tool calls to allow (0 = no limit) + include_xml_examples: Whether to include XML tool examples in the system prompt Returns: An async generator yielding response chunks or error dict @@ -189,6 +191,31 @@ class ThreadManager: if max_xml_tool_calls > 0: processor_config.max_xml_tool_calls = max_xml_tool_calls + # Add XML examples to system prompt if requested + if include_xml_examples and processor_config.xml_tool_calling: + xml_examples = self.tool_registry.get_xml_examples() + if xml_examples: + # logger.debug(f"Adding {len(xml_examples)} XML examples to system prompt") + + # Create or append to content + if isinstance(system_prompt['content'], str): + examples_content = """ + +In this environment you have access to a set of tools you can use to answer the user's question. The tools are specified in XML format. +{{ FORMATTING INSTRUCTIONS }} +String and scalar parameters should be specified as attributes, while content goes between tags. +Note that spaces for string values are not stripped. The output is parsed with regular expressions. + +Here are the XML tools available with examples: +""" + for tag_name, example in xml_examples.items(): + examples_content += f"<{tag_name}> Example: {example}\n" + + system_prompt['content'] += examples_content + else: + # If content is not a string (might be a list or dict), log a warning + logger.warning("System prompt content is not a string, cannot add XML examples") + # 1. Get messages from thread for LLM call messages = await self.get_messages(thread_id) diff --git a/backend/poetry.lock b/backend/poetry.lock index e0a4f92d..98f5d8af 100644 --- a/backend/poetry.lock +++ b/backend/poetry.lock @@ -256,432 +256,6 @@ s3transfer = ">=0.11.0,<0.12.0" [package.extras] crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] -[[package]] -name = "boto3-stubs" -version = "1.37.29" -description = "Type annotations for boto3 1.37.29 generated with mypy-boto3-builder 8.10.1" -optional = false -python-versions = ">=3.8" -files = [ - {file = "boto3_stubs-1.37.29-py3-none-any.whl", hash = "sha256:a3471040c098c4e82a87fafeb38deb66eb4966950a771c62eba0bf36834f69d6"}, - {file = "boto3_stubs-1.37.29.tar.gz", hash = "sha256:36444606a7c1c10c9700dde590f7afb134546065553f761f36207c1feb847e0b"}, -] - -[package.dependencies] -botocore-stubs = "*" -types-s3transfer = "*" -typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} - -[package.extras] -accessanalyzer = ["mypy-boto3-accessanalyzer (>=1.37.0,<1.38.0)"] -account = ["mypy-boto3-account (>=1.37.0,<1.38.0)"] -acm = ["mypy-boto3-acm (>=1.37.0,<1.38.0)"] -acm-pca = ["mypy-boto3-acm-pca (>=1.37.0,<1.38.0)"] -all = ["mypy-boto3-accessanalyzer (>=1.37.0,<1.38.0)", "mypy-boto3-account (>=1.37.0,<1.38.0)", "mypy-boto3-acm (>=1.37.0,<1.38.0)", "mypy-boto3-acm-pca (>=1.37.0,<1.38.0)", "mypy-boto3-amp (>=1.37.0,<1.38.0)", "mypy-boto3-amplify (>=1.37.0,<1.38.0)", "mypy-boto3-amplifybackend (>=1.37.0,<1.38.0)", "mypy-boto3-amplifyuibuilder (>=1.37.0,<1.38.0)", "mypy-boto3-apigateway (>=1.37.0,<1.38.0)", "mypy-boto3-apigatewaymanagementapi (>=1.37.0,<1.38.0)", "mypy-boto3-apigatewayv2 (>=1.37.0,<1.38.0)", "mypy-boto3-appconfig (>=1.37.0,<1.38.0)", "mypy-boto3-appconfigdata (>=1.37.0,<1.38.0)", "mypy-boto3-appfabric (>=1.37.0,<1.38.0)", "mypy-boto3-appflow (>=1.37.0,<1.38.0)", "mypy-boto3-appintegrations (>=1.37.0,<1.38.0)", "mypy-boto3-application-autoscaling (>=1.37.0,<1.38.0)", "mypy-boto3-application-insights (>=1.37.0,<1.38.0)", "mypy-boto3-application-signals (>=1.37.0,<1.38.0)", "mypy-boto3-applicationcostprofiler (>=1.37.0,<1.38.0)", "mypy-boto3-appmesh (>=1.37.0,<1.38.0)", "mypy-boto3-apprunner (>=1.37.0,<1.38.0)", "mypy-boto3-appstream (>=1.37.0,<1.38.0)", "mypy-boto3-appsync (>=1.37.0,<1.38.0)", "mypy-boto3-apptest (>=1.37.0,<1.38.0)", "mypy-boto3-arc-zonal-shift (>=1.37.0,<1.38.0)", "mypy-boto3-artifact (>=1.37.0,<1.38.0)", "mypy-boto3-athena (>=1.37.0,<1.38.0)", "mypy-boto3-auditmanager (>=1.37.0,<1.38.0)", "mypy-boto3-autoscaling (>=1.37.0,<1.38.0)", "mypy-boto3-autoscaling-plans (>=1.37.0,<1.38.0)", "mypy-boto3-b2bi (>=1.37.0,<1.38.0)", "mypy-boto3-backup (>=1.37.0,<1.38.0)", "mypy-boto3-backup-gateway (>=1.37.0,<1.38.0)", "mypy-boto3-backupsearch (>=1.37.0,<1.38.0)", "mypy-boto3-batch (>=1.37.0,<1.38.0)", "mypy-boto3-bcm-data-exports (>=1.37.0,<1.38.0)", "mypy-boto3-bcm-pricing-calculator (>=1.37.0,<1.38.0)", "mypy-boto3-bedrock (>=1.37.0,<1.38.0)", "mypy-boto3-bedrock-agent (>=1.37.0,<1.38.0)", "mypy-boto3-bedrock-agent-runtime (>=1.37.0,<1.38.0)", "mypy-boto3-bedrock-data-automation (>=1.37.0,<1.38.0)", "mypy-boto3-bedrock-data-automation-runtime (>=1.37.0,<1.38.0)", "mypy-boto3-bedrock-runtime (>=1.37.0,<1.38.0)", "mypy-boto3-billing (>=1.37.0,<1.38.0)", "mypy-boto3-billingconductor (>=1.37.0,<1.38.0)", "mypy-boto3-braket (>=1.37.0,<1.38.0)", "mypy-boto3-budgets (>=1.37.0,<1.38.0)", "mypy-boto3-ce (>=1.37.0,<1.38.0)", "mypy-boto3-chatbot (>=1.37.0,<1.38.0)", "mypy-boto3-chime (>=1.37.0,<1.38.0)", "mypy-boto3-chime-sdk-identity (>=1.37.0,<1.38.0)", "mypy-boto3-chime-sdk-media-pipelines (>=1.37.0,<1.38.0)", "mypy-boto3-chime-sdk-meetings (>=1.37.0,<1.38.0)", "mypy-boto3-chime-sdk-messaging (>=1.37.0,<1.38.0)", "mypy-boto3-chime-sdk-voice (>=1.37.0,<1.38.0)", "mypy-boto3-cleanrooms (>=1.37.0,<1.38.0)", "mypy-boto3-cleanroomsml (>=1.37.0,<1.38.0)", "mypy-boto3-cloud9 (>=1.37.0,<1.38.0)", "mypy-boto3-cloudcontrol (>=1.37.0,<1.38.0)", "mypy-boto3-clouddirectory (>=1.37.0,<1.38.0)", "mypy-boto3-cloudformation (>=1.37.0,<1.38.0)", "mypy-boto3-cloudfront (>=1.37.0,<1.38.0)", "mypy-boto3-cloudfront-keyvaluestore (>=1.37.0,<1.38.0)", "mypy-boto3-cloudhsm (>=1.37.0,<1.38.0)", "mypy-boto3-cloudhsmv2 (>=1.37.0,<1.38.0)", "mypy-boto3-cloudsearch (>=1.37.0,<1.38.0)", "mypy-boto3-cloudsearchdomain (>=1.37.0,<1.38.0)", "mypy-boto3-cloudtrail (>=1.37.0,<1.38.0)", "mypy-boto3-cloudtrail-data (>=1.37.0,<1.38.0)", "mypy-boto3-cloudwatch (>=1.37.0,<1.38.0)", "mypy-boto3-codeartifact (>=1.37.0,<1.38.0)", "mypy-boto3-codebuild (>=1.37.0,<1.38.0)", "mypy-boto3-codecatalyst (>=1.37.0,<1.38.0)", "mypy-boto3-codecommit (>=1.37.0,<1.38.0)", "mypy-boto3-codeconnections (>=1.37.0,<1.38.0)", "mypy-boto3-codedeploy (>=1.37.0,<1.38.0)", "mypy-boto3-codeguru-reviewer (>=1.37.0,<1.38.0)", "mypy-boto3-codeguru-security (>=1.37.0,<1.38.0)", "mypy-boto3-codeguruprofiler (>=1.37.0,<1.38.0)", "mypy-boto3-codepipeline (>=1.37.0,<1.38.0)", "mypy-boto3-codestar-connections (>=1.37.0,<1.38.0)", "mypy-boto3-codestar-notifications (>=1.37.0,<1.38.0)", "mypy-boto3-cognito-identity (>=1.37.0,<1.38.0)", "mypy-boto3-cognito-idp (>=1.37.0,<1.38.0)", "mypy-boto3-cognito-sync (>=1.37.0,<1.38.0)", "mypy-boto3-comprehend (>=1.37.0,<1.38.0)", "mypy-boto3-comprehendmedical (>=1.37.0,<1.38.0)", "mypy-boto3-compute-optimizer (>=1.37.0,<1.38.0)", "mypy-boto3-config (>=1.37.0,<1.38.0)", "mypy-boto3-connect (>=1.37.0,<1.38.0)", "mypy-boto3-connect-contact-lens (>=1.37.0,<1.38.0)", "mypy-boto3-connectcampaigns (>=1.37.0,<1.38.0)", "mypy-boto3-connectcampaignsv2 (>=1.37.0,<1.38.0)", "mypy-boto3-connectcases (>=1.37.0,<1.38.0)", "mypy-boto3-connectparticipant (>=1.37.0,<1.38.0)", "mypy-boto3-controlcatalog (>=1.37.0,<1.38.0)", "mypy-boto3-controltower (>=1.37.0,<1.38.0)", "mypy-boto3-cost-optimization-hub (>=1.37.0,<1.38.0)", "mypy-boto3-cur (>=1.37.0,<1.38.0)", "mypy-boto3-customer-profiles (>=1.37.0,<1.38.0)", "mypy-boto3-databrew (>=1.37.0,<1.38.0)", "mypy-boto3-dataexchange (>=1.37.0,<1.38.0)", "mypy-boto3-datapipeline (>=1.37.0,<1.38.0)", "mypy-boto3-datasync (>=1.37.0,<1.38.0)", "mypy-boto3-datazone (>=1.37.0,<1.38.0)", "mypy-boto3-dax (>=1.37.0,<1.38.0)", "mypy-boto3-deadline (>=1.37.0,<1.38.0)", "mypy-boto3-detective (>=1.37.0,<1.38.0)", "mypy-boto3-devicefarm (>=1.37.0,<1.38.0)", "mypy-boto3-devops-guru (>=1.37.0,<1.38.0)", "mypy-boto3-directconnect (>=1.37.0,<1.38.0)", "mypy-boto3-discovery (>=1.37.0,<1.38.0)", "mypy-boto3-dlm (>=1.37.0,<1.38.0)", "mypy-boto3-dms (>=1.37.0,<1.38.0)", "mypy-boto3-docdb (>=1.37.0,<1.38.0)", "mypy-boto3-docdb-elastic (>=1.37.0,<1.38.0)", "mypy-boto3-drs (>=1.37.0,<1.38.0)", "mypy-boto3-ds (>=1.37.0,<1.38.0)", "mypy-boto3-ds-data (>=1.37.0,<1.38.0)", "mypy-boto3-dsql (>=1.37.0,<1.38.0)", "mypy-boto3-dynamodb (>=1.37.0,<1.38.0)", "mypy-boto3-dynamodbstreams (>=1.37.0,<1.38.0)", "mypy-boto3-ebs (>=1.37.0,<1.38.0)", "mypy-boto3-ec2 (>=1.37.0,<1.38.0)", "mypy-boto3-ec2-instance-connect (>=1.37.0,<1.38.0)", "mypy-boto3-ecr (>=1.37.0,<1.38.0)", "mypy-boto3-ecr-public (>=1.37.0,<1.38.0)", "mypy-boto3-ecs (>=1.37.0,<1.38.0)", "mypy-boto3-efs (>=1.37.0,<1.38.0)", "mypy-boto3-eks (>=1.37.0,<1.38.0)", "mypy-boto3-eks-auth (>=1.37.0,<1.38.0)", "mypy-boto3-elasticache (>=1.37.0,<1.38.0)", "mypy-boto3-elasticbeanstalk (>=1.37.0,<1.38.0)", "mypy-boto3-elastictranscoder (>=1.37.0,<1.38.0)", "mypy-boto3-elb (>=1.37.0,<1.38.0)", "mypy-boto3-elbv2 (>=1.37.0,<1.38.0)", "mypy-boto3-emr (>=1.37.0,<1.38.0)", "mypy-boto3-emr-containers (>=1.37.0,<1.38.0)", "mypy-boto3-emr-serverless (>=1.37.0,<1.38.0)", "mypy-boto3-entityresolution (>=1.37.0,<1.38.0)", "mypy-boto3-es (>=1.37.0,<1.38.0)", "mypy-boto3-events (>=1.37.0,<1.38.0)", "mypy-boto3-evidently (>=1.37.0,<1.38.0)", "mypy-boto3-finspace (>=1.37.0,<1.38.0)", "mypy-boto3-finspace-data (>=1.37.0,<1.38.0)", "mypy-boto3-firehose (>=1.37.0,<1.38.0)", "mypy-boto3-fis (>=1.37.0,<1.38.0)", "mypy-boto3-fms (>=1.37.0,<1.38.0)", "mypy-boto3-forecast (>=1.37.0,<1.38.0)", "mypy-boto3-forecastquery (>=1.37.0,<1.38.0)", "mypy-boto3-frauddetector (>=1.37.0,<1.38.0)", "mypy-boto3-freetier (>=1.37.0,<1.38.0)", "mypy-boto3-fsx (>=1.37.0,<1.38.0)", "mypy-boto3-gamelift (>=1.37.0,<1.38.0)", "mypy-boto3-gameliftstreams (>=1.37.0,<1.38.0)", "mypy-boto3-geo-maps (>=1.37.0,<1.38.0)", "mypy-boto3-geo-places (>=1.37.0,<1.38.0)", "mypy-boto3-geo-routes (>=1.37.0,<1.38.0)", "mypy-boto3-glacier (>=1.37.0,<1.38.0)", "mypy-boto3-globalaccelerator (>=1.37.0,<1.38.0)", "mypy-boto3-glue (>=1.37.0,<1.38.0)", "mypy-boto3-grafana (>=1.37.0,<1.38.0)", "mypy-boto3-greengrass (>=1.37.0,<1.38.0)", "mypy-boto3-greengrassv2 (>=1.37.0,<1.38.0)", "mypy-boto3-groundstation (>=1.37.0,<1.38.0)", "mypy-boto3-guardduty (>=1.37.0,<1.38.0)", "mypy-boto3-health (>=1.37.0,<1.38.0)", "mypy-boto3-healthlake (>=1.37.0,<1.38.0)", "mypy-boto3-iam (>=1.37.0,<1.38.0)", "mypy-boto3-identitystore (>=1.37.0,<1.38.0)", "mypy-boto3-imagebuilder (>=1.37.0,<1.38.0)", "mypy-boto3-importexport (>=1.37.0,<1.38.0)", "mypy-boto3-inspector (>=1.37.0,<1.38.0)", "mypy-boto3-inspector-scan (>=1.37.0,<1.38.0)", "mypy-boto3-inspector2 (>=1.37.0,<1.38.0)", "mypy-boto3-internetmonitor (>=1.37.0,<1.38.0)", "mypy-boto3-invoicing (>=1.37.0,<1.38.0)", "mypy-boto3-iot (>=1.37.0,<1.38.0)", "mypy-boto3-iot-data (>=1.37.0,<1.38.0)", "mypy-boto3-iot-jobs-data (>=1.37.0,<1.38.0)", "mypy-boto3-iot-managed-integrations (>=1.37.0,<1.38.0)", "mypy-boto3-iotanalytics (>=1.37.0,<1.38.0)", "mypy-boto3-iotdeviceadvisor (>=1.37.0,<1.38.0)", "mypy-boto3-iotevents (>=1.37.0,<1.38.0)", "mypy-boto3-iotevents-data (>=1.37.0,<1.38.0)", "mypy-boto3-iotfleethub (>=1.37.0,<1.38.0)", "mypy-boto3-iotfleetwise (>=1.37.0,<1.38.0)", "mypy-boto3-iotsecuretunneling (>=1.37.0,<1.38.0)", "mypy-boto3-iotsitewise (>=1.37.0,<1.38.0)", "mypy-boto3-iotthingsgraph (>=1.37.0,<1.38.0)", "mypy-boto3-iottwinmaker (>=1.37.0,<1.38.0)", "mypy-boto3-iotwireless (>=1.37.0,<1.38.0)", "mypy-boto3-ivs (>=1.37.0,<1.38.0)", "mypy-boto3-ivs-realtime (>=1.37.0,<1.38.0)", "mypy-boto3-ivschat (>=1.37.0,<1.38.0)", "mypy-boto3-kafka (>=1.37.0,<1.38.0)", "mypy-boto3-kafkaconnect (>=1.37.0,<1.38.0)", "mypy-boto3-kendra (>=1.37.0,<1.38.0)", "mypy-boto3-kendra-ranking (>=1.37.0,<1.38.0)", "mypy-boto3-keyspaces (>=1.37.0,<1.38.0)", "mypy-boto3-kinesis (>=1.37.0,<1.38.0)", "mypy-boto3-kinesis-video-archived-media (>=1.37.0,<1.38.0)", "mypy-boto3-kinesis-video-media (>=1.37.0,<1.38.0)", "mypy-boto3-kinesis-video-signaling (>=1.37.0,<1.38.0)", "mypy-boto3-kinesis-video-webrtc-storage (>=1.37.0,<1.38.0)", "mypy-boto3-kinesisanalytics (>=1.37.0,<1.38.0)", "mypy-boto3-kinesisanalyticsv2 (>=1.37.0,<1.38.0)", "mypy-boto3-kinesisvideo (>=1.37.0,<1.38.0)", "mypy-boto3-kms (>=1.37.0,<1.38.0)", "mypy-boto3-lakeformation (>=1.37.0,<1.38.0)", "mypy-boto3-lambda (>=1.37.0,<1.38.0)", "mypy-boto3-launch-wizard (>=1.37.0,<1.38.0)", "mypy-boto3-lex-models (>=1.37.0,<1.38.0)", "mypy-boto3-lex-runtime (>=1.37.0,<1.38.0)", "mypy-boto3-lexv2-models (>=1.37.0,<1.38.0)", "mypy-boto3-lexv2-runtime (>=1.37.0,<1.38.0)", "mypy-boto3-license-manager (>=1.37.0,<1.38.0)", "mypy-boto3-license-manager-linux-subscriptions (>=1.37.0,<1.38.0)", "mypy-boto3-license-manager-user-subscriptions (>=1.37.0,<1.38.0)", "mypy-boto3-lightsail (>=1.37.0,<1.38.0)", "mypy-boto3-location (>=1.37.0,<1.38.0)", "mypy-boto3-logs (>=1.37.0,<1.38.0)", "mypy-boto3-lookoutequipment (>=1.37.0,<1.38.0)", "mypy-boto3-lookoutmetrics (>=1.37.0,<1.38.0)", "mypy-boto3-lookoutvision (>=1.37.0,<1.38.0)", "mypy-boto3-m2 (>=1.37.0,<1.38.0)", "mypy-boto3-machinelearning (>=1.37.0,<1.38.0)", "mypy-boto3-macie2 (>=1.37.0,<1.38.0)", "mypy-boto3-mailmanager (>=1.37.0,<1.38.0)", "mypy-boto3-managedblockchain (>=1.37.0,<1.38.0)", "mypy-boto3-managedblockchain-query (>=1.37.0,<1.38.0)", "mypy-boto3-marketplace-agreement (>=1.37.0,<1.38.0)", "mypy-boto3-marketplace-catalog (>=1.37.0,<1.38.0)", "mypy-boto3-marketplace-deployment (>=1.37.0,<1.38.0)", "mypy-boto3-marketplace-entitlement (>=1.37.0,<1.38.0)", "mypy-boto3-marketplace-reporting (>=1.37.0,<1.38.0)", "mypy-boto3-marketplacecommerceanalytics (>=1.37.0,<1.38.0)", "mypy-boto3-mediaconnect (>=1.37.0,<1.38.0)", "mypy-boto3-mediaconvert (>=1.37.0,<1.38.0)", "mypy-boto3-medialive (>=1.37.0,<1.38.0)", "mypy-boto3-mediapackage (>=1.37.0,<1.38.0)", "mypy-boto3-mediapackage-vod (>=1.37.0,<1.38.0)", "mypy-boto3-mediapackagev2 (>=1.37.0,<1.38.0)", "mypy-boto3-mediastore (>=1.37.0,<1.38.0)", "mypy-boto3-mediastore-data (>=1.37.0,<1.38.0)", "mypy-boto3-mediatailor (>=1.37.0,<1.38.0)", "mypy-boto3-medical-imaging (>=1.37.0,<1.38.0)", "mypy-boto3-memorydb (>=1.37.0,<1.38.0)", "mypy-boto3-meteringmarketplace (>=1.37.0,<1.38.0)", "mypy-boto3-mgh (>=1.37.0,<1.38.0)", "mypy-boto3-mgn (>=1.37.0,<1.38.0)", "mypy-boto3-migration-hub-refactor-spaces (>=1.37.0,<1.38.0)", "mypy-boto3-migrationhub-config (>=1.37.0,<1.38.0)", "mypy-boto3-migrationhuborchestrator (>=1.37.0,<1.38.0)", "mypy-boto3-migrationhubstrategy (>=1.37.0,<1.38.0)", "mypy-boto3-mq (>=1.37.0,<1.38.0)", "mypy-boto3-mturk (>=1.37.0,<1.38.0)", "mypy-boto3-mwaa (>=1.37.0,<1.38.0)", "mypy-boto3-neptune (>=1.37.0,<1.38.0)", "mypy-boto3-neptune-graph (>=1.37.0,<1.38.0)", "mypy-boto3-neptunedata (>=1.37.0,<1.38.0)", "mypy-boto3-network-firewall (>=1.37.0,<1.38.0)", "mypy-boto3-networkflowmonitor (>=1.37.0,<1.38.0)", "mypy-boto3-networkmanager (>=1.37.0,<1.38.0)", "mypy-boto3-networkmonitor (>=1.37.0,<1.38.0)", "mypy-boto3-notifications (>=1.37.0,<1.38.0)", "mypy-boto3-notificationscontacts (>=1.37.0,<1.38.0)", "mypy-boto3-oam (>=1.37.0,<1.38.0)", "mypy-boto3-observabilityadmin (>=1.37.0,<1.38.0)", "mypy-boto3-omics (>=1.37.0,<1.38.0)", "mypy-boto3-opensearch (>=1.37.0,<1.38.0)", "mypy-boto3-opensearchserverless (>=1.37.0,<1.38.0)", "mypy-boto3-opsworks (>=1.37.0,<1.38.0)", "mypy-boto3-opsworkscm (>=1.37.0,<1.38.0)", "mypy-boto3-organizations (>=1.37.0,<1.38.0)", "mypy-boto3-osis (>=1.37.0,<1.38.0)", "mypy-boto3-outposts (>=1.37.0,<1.38.0)", "mypy-boto3-panorama (>=1.37.0,<1.38.0)", "mypy-boto3-partnercentral-selling (>=1.37.0,<1.38.0)", "mypy-boto3-payment-cryptography (>=1.37.0,<1.38.0)", "mypy-boto3-payment-cryptography-data (>=1.37.0,<1.38.0)", "mypy-boto3-pca-connector-ad (>=1.37.0,<1.38.0)", "mypy-boto3-pca-connector-scep (>=1.37.0,<1.38.0)", "mypy-boto3-pcs (>=1.37.0,<1.38.0)", "mypy-boto3-personalize (>=1.37.0,<1.38.0)", "mypy-boto3-personalize-events (>=1.37.0,<1.38.0)", "mypy-boto3-personalize-runtime (>=1.37.0,<1.38.0)", "mypy-boto3-pi (>=1.37.0,<1.38.0)", "mypy-boto3-pinpoint (>=1.37.0,<1.38.0)", "mypy-boto3-pinpoint-email (>=1.37.0,<1.38.0)", "mypy-boto3-pinpoint-sms-voice (>=1.37.0,<1.38.0)", "mypy-boto3-pinpoint-sms-voice-v2 (>=1.37.0,<1.38.0)", "mypy-boto3-pipes (>=1.37.0,<1.38.0)", "mypy-boto3-polly (>=1.37.0,<1.38.0)", "mypy-boto3-pricing (>=1.37.0,<1.38.0)", "mypy-boto3-privatenetworks (>=1.37.0,<1.38.0)", "mypy-boto3-proton (>=1.37.0,<1.38.0)", "mypy-boto3-qapps (>=1.37.0,<1.38.0)", "mypy-boto3-qbusiness (>=1.37.0,<1.38.0)", "mypy-boto3-qconnect (>=1.37.0,<1.38.0)", "mypy-boto3-qldb (>=1.37.0,<1.38.0)", "mypy-boto3-qldb-session (>=1.37.0,<1.38.0)", "mypy-boto3-quicksight (>=1.37.0,<1.38.0)", "mypy-boto3-ram (>=1.37.0,<1.38.0)", "mypy-boto3-rbin (>=1.37.0,<1.38.0)", "mypy-boto3-rds (>=1.37.0,<1.38.0)", "mypy-boto3-rds-data (>=1.37.0,<1.38.0)", "mypy-boto3-redshift (>=1.37.0,<1.38.0)", "mypy-boto3-redshift-data (>=1.37.0,<1.38.0)", "mypy-boto3-redshift-serverless (>=1.37.0,<1.38.0)", "mypy-boto3-rekognition (>=1.37.0,<1.38.0)", "mypy-boto3-repostspace (>=1.37.0,<1.38.0)", "mypy-boto3-resiliencehub (>=1.37.0,<1.38.0)", "mypy-boto3-resource-explorer-2 (>=1.37.0,<1.38.0)", "mypy-boto3-resource-groups (>=1.37.0,<1.38.0)", "mypy-boto3-resourcegroupstaggingapi (>=1.37.0,<1.38.0)", "mypy-boto3-robomaker (>=1.37.0,<1.38.0)", "mypy-boto3-rolesanywhere (>=1.37.0,<1.38.0)", "mypy-boto3-route53 (>=1.37.0,<1.38.0)", "mypy-boto3-route53-recovery-cluster (>=1.37.0,<1.38.0)", "mypy-boto3-route53-recovery-control-config (>=1.37.0,<1.38.0)", "mypy-boto3-route53-recovery-readiness (>=1.37.0,<1.38.0)", "mypy-boto3-route53domains (>=1.37.0,<1.38.0)", "mypy-boto3-route53profiles (>=1.37.0,<1.38.0)", "mypy-boto3-route53resolver (>=1.37.0,<1.38.0)", "mypy-boto3-rum (>=1.37.0,<1.38.0)", "mypy-boto3-s3 (>=1.37.0,<1.38.0)", "mypy-boto3-s3control (>=1.37.0,<1.38.0)", "mypy-boto3-s3outposts (>=1.37.0,<1.38.0)", "mypy-boto3-s3tables (>=1.37.0,<1.38.0)", "mypy-boto3-sagemaker (>=1.37.0,<1.38.0)", "mypy-boto3-sagemaker-a2i-runtime (>=1.37.0,<1.38.0)", "mypy-boto3-sagemaker-edge (>=1.37.0,<1.38.0)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.37.0,<1.38.0)", "mypy-boto3-sagemaker-geospatial (>=1.37.0,<1.38.0)", "mypy-boto3-sagemaker-metrics (>=1.37.0,<1.38.0)", "mypy-boto3-sagemaker-runtime (>=1.37.0,<1.38.0)", "mypy-boto3-savingsplans (>=1.37.0,<1.38.0)", "mypy-boto3-scheduler (>=1.37.0,<1.38.0)", "mypy-boto3-schemas (>=1.37.0,<1.38.0)", "mypy-boto3-sdb (>=1.37.0,<1.38.0)", "mypy-boto3-secretsmanager (>=1.37.0,<1.38.0)", "mypy-boto3-security-ir (>=1.37.0,<1.38.0)", "mypy-boto3-securityhub (>=1.37.0,<1.38.0)", "mypy-boto3-securitylake (>=1.37.0,<1.38.0)", "mypy-boto3-serverlessrepo (>=1.37.0,<1.38.0)", "mypy-boto3-service-quotas (>=1.37.0,<1.38.0)", "mypy-boto3-servicecatalog (>=1.37.0,<1.38.0)", "mypy-boto3-servicecatalog-appregistry (>=1.37.0,<1.38.0)", "mypy-boto3-servicediscovery (>=1.37.0,<1.38.0)", "mypy-boto3-ses (>=1.37.0,<1.38.0)", "mypy-boto3-sesv2 (>=1.37.0,<1.38.0)", "mypy-boto3-shield (>=1.37.0,<1.38.0)", "mypy-boto3-signer (>=1.37.0,<1.38.0)", "mypy-boto3-simspaceweaver (>=1.37.0,<1.38.0)", "mypy-boto3-sms (>=1.37.0,<1.38.0)", "mypy-boto3-sms-voice (>=1.37.0,<1.38.0)", "mypy-boto3-snow-device-management (>=1.37.0,<1.38.0)", "mypy-boto3-snowball (>=1.37.0,<1.38.0)", "mypy-boto3-sns (>=1.37.0,<1.38.0)", "mypy-boto3-socialmessaging (>=1.37.0,<1.38.0)", "mypy-boto3-sqs (>=1.37.0,<1.38.0)", "mypy-boto3-ssm (>=1.37.0,<1.38.0)", "mypy-boto3-ssm-contacts (>=1.37.0,<1.38.0)", "mypy-boto3-ssm-incidents (>=1.37.0,<1.38.0)", "mypy-boto3-ssm-quicksetup (>=1.37.0,<1.38.0)", "mypy-boto3-ssm-sap (>=1.37.0,<1.38.0)", "mypy-boto3-sso (>=1.37.0,<1.38.0)", "mypy-boto3-sso-admin (>=1.37.0,<1.38.0)", "mypy-boto3-sso-oidc (>=1.37.0,<1.38.0)", "mypy-boto3-stepfunctions (>=1.37.0,<1.38.0)", "mypy-boto3-storagegateway (>=1.37.0,<1.38.0)", "mypy-boto3-sts (>=1.37.0,<1.38.0)", "mypy-boto3-supplychain (>=1.37.0,<1.38.0)", "mypy-boto3-support (>=1.37.0,<1.38.0)", "mypy-boto3-support-app (>=1.37.0,<1.38.0)", "mypy-boto3-swf (>=1.37.0,<1.38.0)", "mypy-boto3-synthetics (>=1.37.0,<1.38.0)", "mypy-boto3-taxsettings (>=1.37.0,<1.38.0)", "mypy-boto3-textract (>=1.37.0,<1.38.0)", "mypy-boto3-timestream-influxdb (>=1.37.0,<1.38.0)", "mypy-boto3-timestream-query (>=1.37.0,<1.38.0)", "mypy-boto3-timestream-write (>=1.37.0,<1.38.0)", "mypy-boto3-tnb (>=1.37.0,<1.38.0)", "mypy-boto3-transcribe (>=1.37.0,<1.38.0)", "mypy-boto3-transfer (>=1.37.0,<1.38.0)", "mypy-boto3-translate (>=1.37.0,<1.38.0)", "mypy-boto3-trustedadvisor (>=1.37.0,<1.38.0)", "mypy-boto3-verifiedpermissions (>=1.37.0,<1.38.0)", "mypy-boto3-voice-id (>=1.37.0,<1.38.0)", "mypy-boto3-vpc-lattice (>=1.37.0,<1.38.0)", "mypy-boto3-waf (>=1.37.0,<1.38.0)", "mypy-boto3-waf-regional (>=1.37.0,<1.38.0)", "mypy-boto3-wafv2 (>=1.37.0,<1.38.0)", "mypy-boto3-wellarchitected (>=1.37.0,<1.38.0)", "mypy-boto3-wisdom (>=1.37.0,<1.38.0)", "mypy-boto3-workdocs (>=1.37.0,<1.38.0)", "mypy-boto3-workmail (>=1.37.0,<1.38.0)", "mypy-boto3-workmailmessageflow (>=1.37.0,<1.38.0)", "mypy-boto3-workspaces (>=1.37.0,<1.38.0)", "mypy-boto3-workspaces-thin-client (>=1.37.0,<1.38.0)", "mypy-boto3-workspaces-web (>=1.37.0,<1.38.0)", "mypy-boto3-xray (>=1.37.0,<1.38.0)"] -amp = ["mypy-boto3-amp (>=1.37.0,<1.38.0)"] -amplify = ["mypy-boto3-amplify (>=1.37.0,<1.38.0)"] -amplifybackend = ["mypy-boto3-amplifybackend (>=1.37.0,<1.38.0)"] -amplifyuibuilder = ["mypy-boto3-amplifyuibuilder (>=1.37.0,<1.38.0)"] -apigateway = ["mypy-boto3-apigateway (>=1.37.0,<1.38.0)"] -apigatewaymanagementapi = ["mypy-boto3-apigatewaymanagementapi (>=1.37.0,<1.38.0)"] -apigatewayv2 = ["mypy-boto3-apigatewayv2 (>=1.37.0,<1.38.0)"] -appconfig = ["mypy-boto3-appconfig (>=1.37.0,<1.38.0)"] -appconfigdata = ["mypy-boto3-appconfigdata (>=1.37.0,<1.38.0)"] -appfabric = ["mypy-boto3-appfabric (>=1.37.0,<1.38.0)"] -appflow = ["mypy-boto3-appflow (>=1.37.0,<1.38.0)"] -appintegrations = ["mypy-boto3-appintegrations (>=1.37.0,<1.38.0)"] -application-autoscaling = ["mypy-boto3-application-autoscaling (>=1.37.0,<1.38.0)"] -application-insights = ["mypy-boto3-application-insights (>=1.37.0,<1.38.0)"] -application-signals = ["mypy-boto3-application-signals (>=1.37.0,<1.38.0)"] -applicationcostprofiler = ["mypy-boto3-applicationcostprofiler (>=1.37.0,<1.38.0)"] -appmesh = ["mypy-boto3-appmesh (>=1.37.0,<1.38.0)"] -apprunner = ["mypy-boto3-apprunner (>=1.37.0,<1.38.0)"] -appstream = ["mypy-boto3-appstream (>=1.37.0,<1.38.0)"] -appsync = ["mypy-boto3-appsync (>=1.37.0,<1.38.0)"] -apptest = ["mypy-boto3-apptest (>=1.37.0,<1.38.0)"] -arc-zonal-shift = ["mypy-boto3-arc-zonal-shift (>=1.37.0,<1.38.0)"] -artifact = ["mypy-boto3-artifact (>=1.37.0,<1.38.0)"] -athena = ["mypy-boto3-athena (>=1.37.0,<1.38.0)"] -auditmanager = ["mypy-boto3-auditmanager (>=1.37.0,<1.38.0)"] -autoscaling = ["mypy-boto3-autoscaling (>=1.37.0,<1.38.0)"] -autoscaling-plans = ["mypy-boto3-autoscaling-plans (>=1.37.0,<1.38.0)"] -b2bi = ["mypy-boto3-b2bi (>=1.37.0,<1.38.0)"] -backup = ["mypy-boto3-backup (>=1.37.0,<1.38.0)"] -backup-gateway = ["mypy-boto3-backup-gateway (>=1.37.0,<1.38.0)"] -backupsearch = ["mypy-boto3-backupsearch (>=1.37.0,<1.38.0)"] -batch = ["mypy-boto3-batch (>=1.37.0,<1.38.0)"] -bcm-data-exports = ["mypy-boto3-bcm-data-exports (>=1.37.0,<1.38.0)"] -bcm-pricing-calculator = ["mypy-boto3-bcm-pricing-calculator (>=1.37.0,<1.38.0)"] -bedrock = ["mypy-boto3-bedrock (>=1.37.0,<1.38.0)"] -bedrock-agent = ["mypy-boto3-bedrock-agent (>=1.37.0,<1.38.0)"] -bedrock-agent-runtime = ["mypy-boto3-bedrock-agent-runtime (>=1.37.0,<1.38.0)"] -bedrock-data-automation = ["mypy-boto3-bedrock-data-automation (>=1.37.0,<1.38.0)"] -bedrock-data-automation-runtime = ["mypy-boto3-bedrock-data-automation-runtime (>=1.37.0,<1.38.0)"] -bedrock-runtime = ["mypy-boto3-bedrock-runtime (>=1.37.0,<1.38.0)"] -billing = ["mypy-boto3-billing (>=1.37.0,<1.38.0)"] -billingconductor = ["mypy-boto3-billingconductor (>=1.37.0,<1.38.0)"] -boto3 = ["boto3 (==1.37.29)"] -braket = ["mypy-boto3-braket (>=1.37.0,<1.38.0)"] -budgets = ["mypy-boto3-budgets (>=1.37.0,<1.38.0)"] -ce = ["mypy-boto3-ce (>=1.37.0,<1.38.0)"] -chatbot = ["mypy-boto3-chatbot (>=1.37.0,<1.38.0)"] -chime = ["mypy-boto3-chime (>=1.37.0,<1.38.0)"] -chime-sdk-identity = ["mypy-boto3-chime-sdk-identity (>=1.37.0,<1.38.0)"] -chime-sdk-media-pipelines = ["mypy-boto3-chime-sdk-media-pipelines (>=1.37.0,<1.38.0)"] -chime-sdk-meetings = ["mypy-boto3-chime-sdk-meetings (>=1.37.0,<1.38.0)"] -chime-sdk-messaging = ["mypy-boto3-chime-sdk-messaging (>=1.37.0,<1.38.0)"] -chime-sdk-voice = ["mypy-boto3-chime-sdk-voice (>=1.37.0,<1.38.0)"] -cleanrooms = ["mypy-boto3-cleanrooms (>=1.37.0,<1.38.0)"] -cleanroomsml = ["mypy-boto3-cleanroomsml (>=1.37.0,<1.38.0)"] -cloud9 = ["mypy-boto3-cloud9 (>=1.37.0,<1.38.0)"] -cloudcontrol = ["mypy-boto3-cloudcontrol (>=1.37.0,<1.38.0)"] -clouddirectory = ["mypy-boto3-clouddirectory (>=1.37.0,<1.38.0)"] -cloudformation = ["mypy-boto3-cloudformation (>=1.37.0,<1.38.0)"] -cloudfront = ["mypy-boto3-cloudfront (>=1.37.0,<1.38.0)"] -cloudfront-keyvaluestore = ["mypy-boto3-cloudfront-keyvaluestore (>=1.37.0,<1.38.0)"] -cloudhsm = ["mypy-boto3-cloudhsm (>=1.37.0,<1.38.0)"] -cloudhsmv2 = ["mypy-boto3-cloudhsmv2 (>=1.37.0,<1.38.0)"] -cloudsearch = ["mypy-boto3-cloudsearch (>=1.37.0,<1.38.0)"] -cloudsearchdomain = ["mypy-boto3-cloudsearchdomain (>=1.37.0,<1.38.0)"] -cloudtrail = ["mypy-boto3-cloudtrail (>=1.37.0,<1.38.0)"] -cloudtrail-data = ["mypy-boto3-cloudtrail-data (>=1.37.0,<1.38.0)"] -cloudwatch = ["mypy-boto3-cloudwatch (>=1.37.0,<1.38.0)"] -codeartifact = ["mypy-boto3-codeartifact (>=1.37.0,<1.38.0)"] -codebuild = ["mypy-boto3-codebuild (>=1.37.0,<1.38.0)"] -codecatalyst = ["mypy-boto3-codecatalyst (>=1.37.0,<1.38.0)"] -codecommit = ["mypy-boto3-codecommit (>=1.37.0,<1.38.0)"] -codeconnections = ["mypy-boto3-codeconnections (>=1.37.0,<1.38.0)"] -codedeploy = ["mypy-boto3-codedeploy (>=1.37.0,<1.38.0)"] -codeguru-reviewer = ["mypy-boto3-codeguru-reviewer (>=1.37.0,<1.38.0)"] -codeguru-security = ["mypy-boto3-codeguru-security (>=1.37.0,<1.38.0)"] -codeguruprofiler = ["mypy-boto3-codeguruprofiler (>=1.37.0,<1.38.0)"] -codepipeline = ["mypy-boto3-codepipeline (>=1.37.0,<1.38.0)"] -codestar-connections = ["mypy-boto3-codestar-connections (>=1.37.0,<1.38.0)"] -codestar-notifications = ["mypy-boto3-codestar-notifications (>=1.37.0,<1.38.0)"] -cognito-identity = ["mypy-boto3-cognito-identity (>=1.37.0,<1.38.0)"] -cognito-idp = ["mypy-boto3-cognito-idp (>=1.37.0,<1.38.0)"] -cognito-sync = ["mypy-boto3-cognito-sync (>=1.37.0,<1.38.0)"] -comprehend = ["mypy-boto3-comprehend (>=1.37.0,<1.38.0)"] -comprehendmedical = ["mypy-boto3-comprehendmedical (>=1.37.0,<1.38.0)"] -compute-optimizer = ["mypy-boto3-compute-optimizer (>=1.37.0,<1.38.0)"] -config = ["mypy-boto3-config (>=1.37.0,<1.38.0)"] -connect = ["mypy-boto3-connect (>=1.37.0,<1.38.0)"] -connect-contact-lens = ["mypy-boto3-connect-contact-lens (>=1.37.0,<1.38.0)"] -connectcampaigns = ["mypy-boto3-connectcampaigns (>=1.37.0,<1.38.0)"] -connectcampaignsv2 = ["mypy-boto3-connectcampaignsv2 (>=1.37.0,<1.38.0)"] -connectcases = ["mypy-boto3-connectcases (>=1.37.0,<1.38.0)"] -connectparticipant = ["mypy-boto3-connectparticipant (>=1.37.0,<1.38.0)"] -controlcatalog = ["mypy-boto3-controlcatalog (>=1.37.0,<1.38.0)"] -controltower = ["mypy-boto3-controltower (>=1.37.0,<1.38.0)"] -cost-optimization-hub = ["mypy-boto3-cost-optimization-hub (>=1.37.0,<1.38.0)"] -cur = ["mypy-boto3-cur (>=1.37.0,<1.38.0)"] -customer-profiles = ["mypy-boto3-customer-profiles (>=1.37.0,<1.38.0)"] -databrew = ["mypy-boto3-databrew (>=1.37.0,<1.38.0)"] -dataexchange = ["mypy-boto3-dataexchange (>=1.37.0,<1.38.0)"] -datapipeline = ["mypy-boto3-datapipeline (>=1.37.0,<1.38.0)"] -datasync = ["mypy-boto3-datasync (>=1.37.0,<1.38.0)"] -datazone = ["mypy-boto3-datazone (>=1.37.0,<1.38.0)"] -dax = ["mypy-boto3-dax (>=1.37.0,<1.38.0)"] -deadline = ["mypy-boto3-deadline (>=1.37.0,<1.38.0)"] -detective = ["mypy-boto3-detective (>=1.37.0,<1.38.0)"] -devicefarm = ["mypy-boto3-devicefarm (>=1.37.0,<1.38.0)"] -devops-guru = ["mypy-boto3-devops-guru (>=1.37.0,<1.38.0)"] -directconnect = ["mypy-boto3-directconnect (>=1.37.0,<1.38.0)"] -discovery = ["mypy-boto3-discovery (>=1.37.0,<1.38.0)"] -dlm = ["mypy-boto3-dlm (>=1.37.0,<1.38.0)"] -dms = ["mypy-boto3-dms (>=1.37.0,<1.38.0)"] -docdb = ["mypy-boto3-docdb (>=1.37.0,<1.38.0)"] -docdb-elastic = ["mypy-boto3-docdb-elastic (>=1.37.0,<1.38.0)"] -drs = ["mypy-boto3-drs (>=1.37.0,<1.38.0)"] -ds = ["mypy-boto3-ds (>=1.37.0,<1.38.0)"] -ds-data = ["mypy-boto3-ds-data (>=1.37.0,<1.38.0)"] -dsql = ["mypy-boto3-dsql (>=1.37.0,<1.38.0)"] -dynamodb = ["mypy-boto3-dynamodb (>=1.37.0,<1.38.0)"] -dynamodbstreams = ["mypy-boto3-dynamodbstreams (>=1.37.0,<1.38.0)"] -ebs = ["mypy-boto3-ebs (>=1.37.0,<1.38.0)"] -ec2 = ["mypy-boto3-ec2 (>=1.37.0,<1.38.0)"] -ec2-instance-connect = ["mypy-boto3-ec2-instance-connect (>=1.37.0,<1.38.0)"] -ecr = ["mypy-boto3-ecr (>=1.37.0,<1.38.0)"] -ecr-public = ["mypy-boto3-ecr-public (>=1.37.0,<1.38.0)"] -ecs = ["mypy-boto3-ecs (>=1.37.0,<1.38.0)"] -efs = ["mypy-boto3-efs (>=1.37.0,<1.38.0)"] -eks = ["mypy-boto3-eks (>=1.37.0,<1.38.0)"] -eks-auth = ["mypy-boto3-eks-auth (>=1.37.0,<1.38.0)"] -elasticache = ["mypy-boto3-elasticache (>=1.37.0,<1.38.0)"] -elasticbeanstalk = ["mypy-boto3-elasticbeanstalk (>=1.37.0,<1.38.0)"] -elastictranscoder = ["mypy-boto3-elastictranscoder (>=1.37.0,<1.38.0)"] -elb = ["mypy-boto3-elb (>=1.37.0,<1.38.0)"] -elbv2 = ["mypy-boto3-elbv2 (>=1.37.0,<1.38.0)"] -emr = ["mypy-boto3-emr (>=1.37.0,<1.38.0)"] -emr-containers = ["mypy-boto3-emr-containers (>=1.37.0,<1.38.0)"] -emr-serverless = ["mypy-boto3-emr-serverless (>=1.37.0,<1.38.0)"] -entityresolution = ["mypy-boto3-entityresolution (>=1.37.0,<1.38.0)"] -es = ["mypy-boto3-es (>=1.37.0,<1.38.0)"] -essential = ["mypy-boto3-cloudformation (>=1.37.0,<1.38.0)", "mypy-boto3-dynamodb (>=1.37.0,<1.38.0)", "mypy-boto3-ec2 (>=1.37.0,<1.38.0)", "mypy-boto3-lambda (>=1.37.0,<1.38.0)", "mypy-boto3-rds (>=1.37.0,<1.38.0)", "mypy-boto3-s3 (>=1.37.0,<1.38.0)", "mypy-boto3-sqs (>=1.37.0,<1.38.0)"] -events = ["mypy-boto3-events (>=1.37.0,<1.38.0)"] -evidently = ["mypy-boto3-evidently (>=1.37.0,<1.38.0)"] -finspace = ["mypy-boto3-finspace (>=1.37.0,<1.38.0)"] -finspace-data = ["mypy-boto3-finspace-data (>=1.37.0,<1.38.0)"] -firehose = ["mypy-boto3-firehose (>=1.37.0,<1.38.0)"] -fis = ["mypy-boto3-fis (>=1.37.0,<1.38.0)"] -fms = ["mypy-boto3-fms (>=1.37.0,<1.38.0)"] -forecast = ["mypy-boto3-forecast (>=1.37.0,<1.38.0)"] -forecastquery = ["mypy-boto3-forecastquery (>=1.37.0,<1.38.0)"] -frauddetector = ["mypy-boto3-frauddetector (>=1.37.0,<1.38.0)"] -freetier = ["mypy-boto3-freetier (>=1.37.0,<1.38.0)"] -fsx = ["mypy-boto3-fsx (>=1.37.0,<1.38.0)"] -full = ["boto3-stubs-full (>=1.37.0,<1.38.0)"] -gamelift = ["mypy-boto3-gamelift (>=1.37.0,<1.38.0)"] -gameliftstreams = ["mypy-boto3-gameliftstreams (>=1.37.0,<1.38.0)"] -geo-maps = ["mypy-boto3-geo-maps (>=1.37.0,<1.38.0)"] -geo-places = ["mypy-boto3-geo-places (>=1.37.0,<1.38.0)"] -geo-routes = ["mypy-boto3-geo-routes (>=1.37.0,<1.38.0)"] -glacier = ["mypy-boto3-glacier (>=1.37.0,<1.38.0)"] -globalaccelerator = ["mypy-boto3-globalaccelerator (>=1.37.0,<1.38.0)"] -glue = ["mypy-boto3-glue (>=1.37.0,<1.38.0)"] -grafana = ["mypy-boto3-grafana (>=1.37.0,<1.38.0)"] -greengrass = ["mypy-boto3-greengrass (>=1.37.0,<1.38.0)"] -greengrassv2 = ["mypy-boto3-greengrassv2 (>=1.37.0,<1.38.0)"] -groundstation = ["mypy-boto3-groundstation (>=1.37.0,<1.38.0)"] -guardduty = ["mypy-boto3-guardduty (>=1.37.0,<1.38.0)"] -health = ["mypy-boto3-health (>=1.37.0,<1.38.0)"] -healthlake = ["mypy-boto3-healthlake (>=1.37.0,<1.38.0)"] -iam = ["mypy-boto3-iam (>=1.37.0,<1.38.0)"] -identitystore = ["mypy-boto3-identitystore (>=1.37.0,<1.38.0)"] -imagebuilder = ["mypy-boto3-imagebuilder (>=1.37.0,<1.38.0)"] -importexport = ["mypy-boto3-importexport (>=1.37.0,<1.38.0)"] -inspector = ["mypy-boto3-inspector (>=1.37.0,<1.38.0)"] -inspector-scan = ["mypy-boto3-inspector-scan (>=1.37.0,<1.38.0)"] -inspector2 = ["mypy-boto3-inspector2 (>=1.37.0,<1.38.0)"] -internetmonitor = ["mypy-boto3-internetmonitor (>=1.37.0,<1.38.0)"] -invoicing = ["mypy-boto3-invoicing (>=1.37.0,<1.38.0)"] -iot = ["mypy-boto3-iot (>=1.37.0,<1.38.0)"] -iot-data = ["mypy-boto3-iot-data (>=1.37.0,<1.38.0)"] -iot-jobs-data = ["mypy-boto3-iot-jobs-data (>=1.37.0,<1.38.0)"] -iot-managed-integrations = ["mypy-boto3-iot-managed-integrations (>=1.37.0,<1.38.0)"] -iotanalytics = ["mypy-boto3-iotanalytics (>=1.37.0,<1.38.0)"] -iotdeviceadvisor = ["mypy-boto3-iotdeviceadvisor (>=1.37.0,<1.38.0)"] -iotevents = ["mypy-boto3-iotevents (>=1.37.0,<1.38.0)"] -iotevents-data = ["mypy-boto3-iotevents-data (>=1.37.0,<1.38.0)"] -iotfleethub = ["mypy-boto3-iotfleethub (>=1.37.0,<1.38.0)"] -iotfleetwise = ["mypy-boto3-iotfleetwise (>=1.37.0,<1.38.0)"] -iotsecuretunneling = ["mypy-boto3-iotsecuretunneling (>=1.37.0,<1.38.0)"] -iotsitewise = ["mypy-boto3-iotsitewise (>=1.37.0,<1.38.0)"] -iotthingsgraph = ["mypy-boto3-iotthingsgraph (>=1.37.0,<1.38.0)"] -iottwinmaker = ["mypy-boto3-iottwinmaker (>=1.37.0,<1.38.0)"] -iotwireless = ["mypy-boto3-iotwireless (>=1.37.0,<1.38.0)"] -ivs = ["mypy-boto3-ivs (>=1.37.0,<1.38.0)"] -ivs-realtime = ["mypy-boto3-ivs-realtime (>=1.37.0,<1.38.0)"] -ivschat = ["mypy-boto3-ivschat (>=1.37.0,<1.38.0)"] -kafka = ["mypy-boto3-kafka (>=1.37.0,<1.38.0)"] -kafkaconnect = ["mypy-boto3-kafkaconnect (>=1.37.0,<1.38.0)"] -kendra = ["mypy-boto3-kendra (>=1.37.0,<1.38.0)"] -kendra-ranking = ["mypy-boto3-kendra-ranking (>=1.37.0,<1.38.0)"] -keyspaces = ["mypy-boto3-keyspaces (>=1.37.0,<1.38.0)"] -kinesis = ["mypy-boto3-kinesis (>=1.37.0,<1.38.0)"] -kinesis-video-archived-media = ["mypy-boto3-kinesis-video-archived-media (>=1.37.0,<1.38.0)"] -kinesis-video-media = ["mypy-boto3-kinesis-video-media (>=1.37.0,<1.38.0)"] -kinesis-video-signaling = ["mypy-boto3-kinesis-video-signaling (>=1.37.0,<1.38.0)"] -kinesis-video-webrtc-storage = ["mypy-boto3-kinesis-video-webrtc-storage (>=1.37.0,<1.38.0)"] -kinesisanalytics = ["mypy-boto3-kinesisanalytics (>=1.37.0,<1.38.0)"] -kinesisanalyticsv2 = ["mypy-boto3-kinesisanalyticsv2 (>=1.37.0,<1.38.0)"] -kinesisvideo = ["mypy-boto3-kinesisvideo (>=1.37.0,<1.38.0)"] -kms = ["mypy-boto3-kms (>=1.37.0,<1.38.0)"] -lakeformation = ["mypy-boto3-lakeformation (>=1.37.0,<1.38.0)"] -lambda = ["mypy-boto3-lambda (>=1.37.0,<1.38.0)"] -launch-wizard = ["mypy-boto3-launch-wizard (>=1.37.0,<1.38.0)"] -lex-models = ["mypy-boto3-lex-models (>=1.37.0,<1.38.0)"] -lex-runtime = ["mypy-boto3-lex-runtime (>=1.37.0,<1.38.0)"] -lexv2-models = ["mypy-boto3-lexv2-models (>=1.37.0,<1.38.0)"] -lexv2-runtime = ["mypy-boto3-lexv2-runtime (>=1.37.0,<1.38.0)"] -license-manager = ["mypy-boto3-license-manager (>=1.37.0,<1.38.0)"] -license-manager-linux-subscriptions = ["mypy-boto3-license-manager-linux-subscriptions (>=1.37.0,<1.38.0)"] -license-manager-user-subscriptions = ["mypy-boto3-license-manager-user-subscriptions (>=1.37.0,<1.38.0)"] -lightsail = ["mypy-boto3-lightsail (>=1.37.0,<1.38.0)"] -location = ["mypy-boto3-location (>=1.37.0,<1.38.0)"] -logs = ["mypy-boto3-logs (>=1.37.0,<1.38.0)"] -lookoutequipment = ["mypy-boto3-lookoutequipment (>=1.37.0,<1.38.0)"] -lookoutmetrics = ["mypy-boto3-lookoutmetrics (>=1.37.0,<1.38.0)"] -lookoutvision = ["mypy-boto3-lookoutvision (>=1.37.0,<1.38.0)"] -m2 = ["mypy-boto3-m2 (>=1.37.0,<1.38.0)"] -machinelearning = ["mypy-boto3-machinelearning (>=1.37.0,<1.38.0)"] -macie2 = ["mypy-boto3-macie2 (>=1.37.0,<1.38.0)"] -mailmanager = ["mypy-boto3-mailmanager (>=1.37.0,<1.38.0)"] -managedblockchain = ["mypy-boto3-managedblockchain (>=1.37.0,<1.38.0)"] -managedblockchain-query = ["mypy-boto3-managedblockchain-query (>=1.37.0,<1.38.0)"] -marketplace-agreement = ["mypy-boto3-marketplace-agreement (>=1.37.0,<1.38.0)"] -marketplace-catalog = ["mypy-boto3-marketplace-catalog (>=1.37.0,<1.38.0)"] -marketplace-deployment = ["mypy-boto3-marketplace-deployment (>=1.37.0,<1.38.0)"] -marketplace-entitlement = ["mypy-boto3-marketplace-entitlement (>=1.37.0,<1.38.0)"] -marketplace-reporting = ["mypy-boto3-marketplace-reporting (>=1.37.0,<1.38.0)"] -marketplacecommerceanalytics = ["mypy-boto3-marketplacecommerceanalytics (>=1.37.0,<1.38.0)"] -mediaconnect = ["mypy-boto3-mediaconnect (>=1.37.0,<1.38.0)"] -mediaconvert = ["mypy-boto3-mediaconvert (>=1.37.0,<1.38.0)"] -medialive = ["mypy-boto3-medialive (>=1.37.0,<1.38.0)"] -mediapackage = ["mypy-boto3-mediapackage (>=1.37.0,<1.38.0)"] -mediapackage-vod = ["mypy-boto3-mediapackage-vod (>=1.37.0,<1.38.0)"] -mediapackagev2 = ["mypy-boto3-mediapackagev2 (>=1.37.0,<1.38.0)"] -mediastore = ["mypy-boto3-mediastore (>=1.37.0,<1.38.0)"] -mediastore-data = ["mypy-boto3-mediastore-data (>=1.37.0,<1.38.0)"] -mediatailor = ["mypy-boto3-mediatailor (>=1.37.0,<1.38.0)"] -medical-imaging = ["mypy-boto3-medical-imaging (>=1.37.0,<1.38.0)"] -memorydb = ["mypy-boto3-memorydb (>=1.37.0,<1.38.0)"] -meteringmarketplace = ["mypy-boto3-meteringmarketplace (>=1.37.0,<1.38.0)"] -mgh = ["mypy-boto3-mgh (>=1.37.0,<1.38.0)"] -mgn = ["mypy-boto3-mgn (>=1.37.0,<1.38.0)"] -migration-hub-refactor-spaces = ["mypy-boto3-migration-hub-refactor-spaces (>=1.37.0,<1.38.0)"] -migrationhub-config = ["mypy-boto3-migrationhub-config (>=1.37.0,<1.38.0)"] -migrationhuborchestrator = ["mypy-boto3-migrationhuborchestrator (>=1.37.0,<1.38.0)"] -migrationhubstrategy = ["mypy-boto3-migrationhubstrategy (>=1.37.0,<1.38.0)"] -mq = ["mypy-boto3-mq (>=1.37.0,<1.38.0)"] -mturk = ["mypy-boto3-mturk (>=1.37.0,<1.38.0)"] -mwaa = ["mypy-boto3-mwaa (>=1.37.0,<1.38.0)"] -neptune = ["mypy-boto3-neptune (>=1.37.0,<1.38.0)"] -neptune-graph = ["mypy-boto3-neptune-graph (>=1.37.0,<1.38.0)"] -neptunedata = ["mypy-boto3-neptunedata (>=1.37.0,<1.38.0)"] -network-firewall = ["mypy-boto3-network-firewall (>=1.37.0,<1.38.0)"] -networkflowmonitor = ["mypy-boto3-networkflowmonitor (>=1.37.0,<1.38.0)"] -networkmanager = ["mypy-boto3-networkmanager (>=1.37.0,<1.38.0)"] -networkmonitor = ["mypy-boto3-networkmonitor (>=1.37.0,<1.38.0)"] -notifications = ["mypy-boto3-notifications (>=1.37.0,<1.38.0)"] -notificationscontacts = ["mypy-boto3-notificationscontacts (>=1.37.0,<1.38.0)"] -oam = ["mypy-boto3-oam (>=1.37.0,<1.38.0)"] -observabilityadmin = ["mypy-boto3-observabilityadmin (>=1.37.0,<1.38.0)"] -omics = ["mypy-boto3-omics (>=1.37.0,<1.38.0)"] -opensearch = ["mypy-boto3-opensearch (>=1.37.0,<1.38.0)"] -opensearchserverless = ["mypy-boto3-opensearchserverless (>=1.37.0,<1.38.0)"] -opsworks = ["mypy-boto3-opsworks (>=1.37.0,<1.38.0)"] -opsworkscm = ["mypy-boto3-opsworkscm (>=1.37.0,<1.38.0)"] -organizations = ["mypy-boto3-organizations (>=1.37.0,<1.38.0)"] -osis = ["mypy-boto3-osis (>=1.37.0,<1.38.0)"] -outposts = ["mypy-boto3-outposts (>=1.37.0,<1.38.0)"] -panorama = ["mypy-boto3-panorama (>=1.37.0,<1.38.0)"] -partnercentral-selling = ["mypy-boto3-partnercentral-selling (>=1.37.0,<1.38.0)"] -payment-cryptography = ["mypy-boto3-payment-cryptography (>=1.37.0,<1.38.0)"] -payment-cryptography-data = ["mypy-boto3-payment-cryptography-data (>=1.37.0,<1.38.0)"] -pca-connector-ad = ["mypy-boto3-pca-connector-ad (>=1.37.0,<1.38.0)"] -pca-connector-scep = ["mypy-boto3-pca-connector-scep (>=1.37.0,<1.38.0)"] -pcs = ["mypy-boto3-pcs (>=1.37.0,<1.38.0)"] -personalize = ["mypy-boto3-personalize (>=1.37.0,<1.38.0)"] -personalize-events = ["mypy-boto3-personalize-events (>=1.37.0,<1.38.0)"] -personalize-runtime = ["mypy-boto3-personalize-runtime (>=1.37.0,<1.38.0)"] -pi = ["mypy-boto3-pi (>=1.37.0,<1.38.0)"] -pinpoint = ["mypy-boto3-pinpoint (>=1.37.0,<1.38.0)"] -pinpoint-email = ["mypy-boto3-pinpoint-email (>=1.37.0,<1.38.0)"] -pinpoint-sms-voice = ["mypy-boto3-pinpoint-sms-voice (>=1.37.0,<1.38.0)"] -pinpoint-sms-voice-v2 = ["mypy-boto3-pinpoint-sms-voice-v2 (>=1.37.0,<1.38.0)"] -pipes = ["mypy-boto3-pipes (>=1.37.0,<1.38.0)"] -polly = ["mypy-boto3-polly (>=1.37.0,<1.38.0)"] -pricing = ["mypy-boto3-pricing (>=1.37.0,<1.38.0)"] -privatenetworks = ["mypy-boto3-privatenetworks (>=1.37.0,<1.38.0)"] -proton = ["mypy-boto3-proton (>=1.37.0,<1.38.0)"] -qapps = ["mypy-boto3-qapps (>=1.37.0,<1.38.0)"] -qbusiness = ["mypy-boto3-qbusiness (>=1.37.0,<1.38.0)"] -qconnect = ["mypy-boto3-qconnect (>=1.37.0,<1.38.0)"] -qldb = ["mypy-boto3-qldb (>=1.37.0,<1.38.0)"] -qldb-session = ["mypy-boto3-qldb-session (>=1.37.0,<1.38.0)"] -quicksight = ["mypy-boto3-quicksight (>=1.37.0,<1.38.0)"] -ram = ["mypy-boto3-ram (>=1.37.0,<1.38.0)"] -rbin = ["mypy-boto3-rbin (>=1.37.0,<1.38.0)"] -rds = ["mypy-boto3-rds (>=1.37.0,<1.38.0)"] -rds-data = ["mypy-boto3-rds-data (>=1.37.0,<1.38.0)"] -redshift = ["mypy-boto3-redshift (>=1.37.0,<1.38.0)"] -redshift-data = ["mypy-boto3-redshift-data (>=1.37.0,<1.38.0)"] -redshift-serverless = ["mypy-boto3-redshift-serverless (>=1.37.0,<1.38.0)"] -rekognition = ["mypy-boto3-rekognition (>=1.37.0,<1.38.0)"] -repostspace = ["mypy-boto3-repostspace (>=1.37.0,<1.38.0)"] -resiliencehub = ["mypy-boto3-resiliencehub (>=1.37.0,<1.38.0)"] -resource-explorer-2 = ["mypy-boto3-resource-explorer-2 (>=1.37.0,<1.38.0)"] -resource-groups = ["mypy-boto3-resource-groups (>=1.37.0,<1.38.0)"] -resourcegroupstaggingapi = ["mypy-boto3-resourcegroupstaggingapi (>=1.37.0,<1.38.0)"] -robomaker = ["mypy-boto3-robomaker (>=1.37.0,<1.38.0)"] -rolesanywhere = ["mypy-boto3-rolesanywhere (>=1.37.0,<1.38.0)"] -route53 = ["mypy-boto3-route53 (>=1.37.0,<1.38.0)"] -route53-recovery-cluster = ["mypy-boto3-route53-recovery-cluster (>=1.37.0,<1.38.0)"] -route53-recovery-control-config = ["mypy-boto3-route53-recovery-control-config (>=1.37.0,<1.38.0)"] -route53-recovery-readiness = ["mypy-boto3-route53-recovery-readiness (>=1.37.0,<1.38.0)"] -route53domains = ["mypy-boto3-route53domains (>=1.37.0,<1.38.0)"] -route53profiles = ["mypy-boto3-route53profiles (>=1.37.0,<1.38.0)"] -route53resolver = ["mypy-boto3-route53resolver (>=1.37.0,<1.38.0)"] -rum = ["mypy-boto3-rum (>=1.37.0,<1.38.0)"] -s3 = ["mypy-boto3-s3 (>=1.37.0,<1.38.0)"] -s3control = ["mypy-boto3-s3control (>=1.37.0,<1.38.0)"] -s3outposts = ["mypy-boto3-s3outposts (>=1.37.0,<1.38.0)"] -s3tables = ["mypy-boto3-s3tables (>=1.37.0,<1.38.0)"] -sagemaker = ["mypy-boto3-sagemaker (>=1.37.0,<1.38.0)"] -sagemaker-a2i-runtime = ["mypy-boto3-sagemaker-a2i-runtime (>=1.37.0,<1.38.0)"] -sagemaker-edge = ["mypy-boto3-sagemaker-edge (>=1.37.0,<1.38.0)"] -sagemaker-featurestore-runtime = ["mypy-boto3-sagemaker-featurestore-runtime (>=1.37.0,<1.38.0)"] -sagemaker-geospatial = ["mypy-boto3-sagemaker-geospatial (>=1.37.0,<1.38.0)"] -sagemaker-metrics = ["mypy-boto3-sagemaker-metrics (>=1.37.0,<1.38.0)"] -sagemaker-runtime = ["mypy-boto3-sagemaker-runtime (>=1.37.0,<1.38.0)"] -savingsplans = ["mypy-boto3-savingsplans (>=1.37.0,<1.38.0)"] -scheduler = ["mypy-boto3-scheduler (>=1.37.0,<1.38.0)"] -schemas = ["mypy-boto3-schemas (>=1.37.0,<1.38.0)"] -sdb = ["mypy-boto3-sdb (>=1.37.0,<1.38.0)"] -secretsmanager = ["mypy-boto3-secretsmanager (>=1.37.0,<1.38.0)"] -security-ir = ["mypy-boto3-security-ir (>=1.37.0,<1.38.0)"] -securityhub = ["mypy-boto3-securityhub (>=1.37.0,<1.38.0)"] -securitylake = ["mypy-boto3-securitylake (>=1.37.0,<1.38.0)"] -serverlessrepo = ["mypy-boto3-serverlessrepo (>=1.37.0,<1.38.0)"] -service-quotas = ["mypy-boto3-service-quotas (>=1.37.0,<1.38.0)"] -servicecatalog = ["mypy-boto3-servicecatalog (>=1.37.0,<1.38.0)"] -servicecatalog-appregistry = ["mypy-boto3-servicecatalog-appregistry (>=1.37.0,<1.38.0)"] -servicediscovery = ["mypy-boto3-servicediscovery (>=1.37.0,<1.38.0)"] -ses = ["mypy-boto3-ses (>=1.37.0,<1.38.0)"] -sesv2 = ["mypy-boto3-sesv2 (>=1.37.0,<1.38.0)"] -shield = ["mypy-boto3-shield (>=1.37.0,<1.38.0)"] -signer = ["mypy-boto3-signer (>=1.37.0,<1.38.0)"] -simspaceweaver = ["mypy-boto3-simspaceweaver (>=1.37.0,<1.38.0)"] -sms = ["mypy-boto3-sms (>=1.37.0,<1.38.0)"] -sms-voice = ["mypy-boto3-sms-voice (>=1.37.0,<1.38.0)"] -snow-device-management = ["mypy-boto3-snow-device-management (>=1.37.0,<1.38.0)"] -snowball = ["mypy-boto3-snowball (>=1.37.0,<1.38.0)"] -sns = ["mypy-boto3-sns (>=1.37.0,<1.38.0)"] -socialmessaging = ["mypy-boto3-socialmessaging (>=1.37.0,<1.38.0)"] -sqs = ["mypy-boto3-sqs (>=1.37.0,<1.38.0)"] -ssm = ["mypy-boto3-ssm (>=1.37.0,<1.38.0)"] -ssm-contacts = ["mypy-boto3-ssm-contacts (>=1.37.0,<1.38.0)"] -ssm-incidents = ["mypy-boto3-ssm-incidents (>=1.37.0,<1.38.0)"] -ssm-quicksetup = ["mypy-boto3-ssm-quicksetup (>=1.37.0,<1.38.0)"] -ssm-sap = ["mypy-boto3-ssm-sap (>=1.37.0,<1.38.0)"] -sso = ["mypy-boto3-sso (>=1.37.0,<1.38.0)"] -sso-admin = ["mypy-boto3-sso-admin (>=1.37.0,<1.38.0)"] -sso-oidc = ["mypy-boto3-sso-oidc (>=1.37.0,<1.38.0)"] -stepfunctions = ["mypy-boto3-stepfunctions (>=1.37.0,<1.38.0)"] -storagegateway = ["mypy-boto3-storagegateway (>=1.37.0,<1.38.0)"] -sts = ["mypy-boto3-sts (>=1.37.0,<1.38.0)"] -supplychain = ["mypy-boto3-supplychain (>=1.37.0,<1.38.0)"] -support = ["mypy-boto3-support (>=1.37.0,<1.38.0)"] -support-app = ["mypy-boto3-support-app (>=1.37.0,<1.38.0)"] -swf = ["mypy-boto3-swf (>=1.37.0,<1.38.0)"] -synthetics = ["mypy-boto3-synthetics (>=1.37.0,<1.38.0)"] -taxsettings = ["mypy-boto3-taxsettings (>=1.37.0,<1.38.0)"] -textract = ["mypy-boto3-textract (>=1.37.0,<1.38.0)"] -timestream-influxdb = ["mypy-boto3-timestream-influxdb (>=1.37.0,<1.38.0)"] -timestream-query = ["mypy-boto3-timestream-query (>=1.37.0,<1.38.0)"] -timestream-write = ["mypy-boto3-timestream-write (>=1.37.0,<1.38.0)"] -tnb = ["mypy-boto3-tnb (>=1.37.0,<1.38.0)"] -transcribe = ["mypy-boto3-transcribe (>=1.37.0,<1.38.0)"] -transfer = ["mypy-boto3-transfer (>=1.37.0,<1.38.0)"] -translate = ["mypy-boto3-translate (>=1.37.0,<1.38.0)"] -trustedadvisor = ["mypy-boto3-trustedadvisor (>=1.37.0,<1.38.0)"] -verifiedpermissions = ["mypy-boto3-verifiedpermissions (>=1.37.0,<1.38.0)"] -voice-id = ["mypy-boto3-voice-id (>=1.37.0,<1.38.0)"] -vpc-lattice = ["mypy-boto3-vpc-lattice (>=1.37.0,<1.38.0)"] -waf = ["mypy-boto3-waf (>=1.37.0,<1.38.0)"] -waf-regional = ["mypy-boto3-waf-regional (>=1.37.0,<1.38.0)"] -wafv2 = ["mypy-boto3-wafv2 (>=1.37.0,<1.38.0)"] -wellarchitected = ["mypy-boto3-wellarchitected (>=1.37.0,<1.38.0)"] -wisdom = ["mypy-boto3-wisdom (>=1.37.0,<1.38.0)"] -workdocs = ["mypy-boto3-workdocs (>=1.37.0,<1.38.0)"] -workmail = ["mypy-boto3-workmail (>=1.37.0,<1.38.0)"] -workmailmessageflow = ["mypy-boto3-workmailmessageflow (>=1.37.0,<1.38.0)"] -workspaces = ["mypy-boto3-workspaces (>=1.37.0,<1.38.0)"] -workspaces-thin-client = ["mypy-boto3-workspaces-thin-client (>=1.37.0,<1.38.0)"] -workspaces-web = ["mypy-boto3-workspaces-web (>=1.37.0,<1.38.0)"] -xray = ["mypy-boto3-xray (>=1.37.0,<1.38.0)"] - [[package]] name = "botocore" version = "1.37.29" @@ -701,23 +275,6 @@ urllib3 = {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version > [package.extras] crt = ["awscrt (==0.23.8)"] -[[package]] -name = "botocore-stubs" -version = "1.37.29" -description = "Type annotations and code completion for botocore" -optional = false -python-versions = ">=3.8" -files = [ - {file = "botocore_stubs-1.37.29-py3-none-any.whl", hash = "sha256:923127abb5fac0b8b0f11837a4641f2863bb4398b5bd6b11d1604134966c4bb6"}, - {file = "botocore_stubs-1.37.29.tar.gz", hash = "sha256:c59898bf1d09bf6a9f491f4705c5696e74b83156b766aa1716867f11b8a04ea1"}, -] - -[package.dependencies] -types-awscrt = "*" - -[package.extras] -botocore = ["botocore"] - [[package]] name = "cachetools" version = "5.5.0" @@ -2529,20 +2086,6 @@ dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pyte docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] -[[package]] -name = "pympler" -version = "1.1" -description = "A development tool to measure, monitor and analyze the memory behavior of Python objects." -optional = false -python-versions = ">=3.6" -files = [ - {file = "Pympler-1.1-py3-none-any.whl", hash = "sha256:5b223d6027d0619584116a0cbc28e8d2e378f7a79c1e5e024f9ff3b673c58506"}, - {file = "pympler-1.1.tar.gz", hash = "sha256:1eaa867cb8992c218430f1708fdaccda53df064144d1c5656b1e6f1ee6000424"}, -] - -[package.dependencies] -pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} - [[package]] name = "pytest" version = "8.3.3" @@ -2674,33 +2217,6 @@ files = [ {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, ] -[[package]] -name = "pywin32" -version = "308" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -files = [ - {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, - {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, - {file = "pywin32-308-cp310-cp310-win_arm64.whl", hash = "sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c"}, - {file = "pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a"}, - {file = "pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b"}, - {file = "pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6"}, - {file = "pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897"}, - {file = "pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47"}, - {file = "pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091"}, - {file = "pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed"}, - {file = "pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4"}, - {file = "pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd"}, - {file = "pywin32-308-cp37-cp37m-win32.whl", hash = "sha256:1f696ab352a2ddd63bd07430080dd598e6369152ea13a25ebcdd2f503a38f1ff"}, - {file = "pywin32-308-cp37-cp37m-win_amd64.whl", hash = "sha256:13dcb914ed4347019fbec6697a01a0aec61019c1046c2b905410d197856326a6"}, - {file = "pywin32-308-cp38-cp38-win32.whl", hash = "sha256:5794e764ebcabf4ff08c555b31bd348c9025929371763b2183172ff4708152f0"}, - {file = "pywin32-308-cp38-cp38-win_amd64.whl", hash = "sha256:3b92622e29d651c6b783e368ba7d6722b1634b8e70bd376fd7610fe1992e19de"}, - {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, - {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, -] - [[package]] name = "pyyaml" version = "6.0.2" @@ -3080,17 +2596,6 @@ botocore = ">=1.37.4,<2.0a.0" [package.extras] crt = ["botocore[crt] (>=1.37.4,<2.0a.0)"] -[[package]] -name = "semver" -version = "3.0.2" -description = "Python helper for Semantic Versioning (https://semver.org)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "semver-3.0.2-py3-none-any.whl", hash = "sha256:b1ea4686fe70b981f85359eda33199d60c53964284e0cfb4977d243e37cf4bf4"}, - {file = "semver-3.0.2.tar.gz", hash = "sha256:6253adb39c70f6e51afed2fa7152bcd414c411286088fb4b9effb133885ab4cc"}, -] - [[package]] name = "setuptools" version = "75.3.0" @@ -3178,39 +2683,37 @@ python-dateutil = ">=2.8.2,<3.0.0" [[package]] name = "streamlit" -version = "1.8.0" -description = "The fastest way to build data apps in Python" +version = "1.44.1" +description = "A faster way to build and share data apps" optional = false -python-versions = ">=3.6" +python-versions = "!=3.9.7,>=3.9" files = [ - {file = "streamlit-1.8.0-py2.py3-none-any.whl", hash = "sha256:ec7ad95b7ee3583b48fd71156e4834f477af771bb40de00cd1a4c7c470de45bb"}, - {file = "streamlit-1.8.0.tar.gz", hash = "sha256:effa58274a1f9618bdc269b391ddfc8f83ce9f9e9c28eef86907c9d1e5464792"}, + {file = "streamlit-1.44.1-py3-none-any.whl", hash = "sha256:9fe355f58b11f4eb71e74f115ce1f38c4c9eaff2733e6bcffb510ac1298a5990"}, + {file = "streamlit-1.44.1.tar.gz", hash = "sha256:c6914ed6d5b76870b461510476806db370f36425ae0e6654d227c988288198d3"}, ] [package.dependencies] -altair = ">=3.2.0" -attrs = "*" -blinker = "*" -cachetools = ">=4.0" -click = ">=7.0" -gitpython = "!=3.1.19" -importlib-metadata = ">=1.4" -numpy = "*" -packaging = "*" -pandas = ">=0.21.0" -pillow = ">=6.2.0" -protobuf = ">=3.6.0,<3.11 || >3.11" -pyarrow = "*" -pydeck = ">=0.1.dev5" -pympler = ">=0.9" -python-dateutil = "*" -requests = "*" -semver = "*" -toml = "*" -tornado = ">=5.0" -tzlocal = "*" -validators = "*" -watchdog = {version = "*", markers = "platform_system != \"Darwin\""} +altair = ">=4.0,<6" +blinker = ">=1.0.0,<2" +cachetools = ">=4.0,<6" +click = ">=7.0,<9" +gitpython = ">=3.0.7,<3.1.19 || >3.1.19,<4" +numpy = ">=1.23,<3" +packaging = ">=20,<25" +pandas = ">=1.4.0,<3" +pillow = ">=7.1.0,<12" +protobuf = ">=3.20,<6" +pyarrow = ">=7.0" +pydeck = ">=0.8.0b4,<1" +requests = ">=2.27,<3" +tenacity = ">=8.1.0,<10" +toml = ">=0.10.1,<2" +tornado = ">=6.0.3,<7" +typing-extensions = ">=4.4.0,<5" +watchdog = {version = ">=2.1.5,<7", markers = "platform_system != \"Darwin\""} + +[package.extras] +snowflake = ["snowflake-connector-python (>=3.3.0)", "snowflake-snowpark-python[modin] (>=1.17.0)"] [[package]] name = "streamlit-quill" @@ -3275,6 +2778,21 @@ files = [ httpx = {version = ">=0.26,<0.29", extras = ["http2"]} strenum = ">=0.4.15,<0.5.0" +[[package]] +name = "tenacity" +version = "9.1.2" +description = "Retry code until it succeeds" +optional = false +python-versions = ">=3.9" +files = [ + {file = "tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"}, + {file = "tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb"}, +] + +[package.extras] +doc = ["reno", "sphinx"] +test = ["pytest", "tornado (>=4.5)", "typeguard"] + [[package]] name = "tiktoken" version = "0.8.0" @@ -3523,28 +3041,6 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] -[[package]] -name = "types-awscrt" -version = "0.25.7" -description = "Type annotations and code completion for awscrt" -optional = false -python-versions = ">=3.8" -files = [ - {file = "types_awscrt-0.25.7-py3-none-any.whl", hash = "sha256:7bcd649aedca3c41007ca5757096d3b3bdb454b73ca66970ddae6c2c2f541c8c"}, - {file = "types_awscrt-0.25.7.tar.gz", hash = "sha256:e11298750c99647f7f3b98d6d6d648790096cd32d445fd0d49a6041a63336c9a"}, -] - -[[package]] -name = "types-s3transfer" -version = "0.11.4" -description = "Type annotations and code completion for s3transfer" -optional = false -python-versions = ">=3.8" -files = [ - {file = "types_s3transfer-0.11.4-py3-none-any.whl", hash = "sha256:2a76d92c07d4a3cb469e5343b2e7560e0b8078b2e03696a65407b8c44c861b61"}, - {file = "types_s3transfer-0.11.4.tar.gz", hash = "sha256:05fde593c84270f19fd053f0b1e08f5a057d7c5f036b9884e68fb8cd3041ac30"}, -] - [[package]] name = "typing-extensions" version = "4.12.2" @@ -3581,23 +3077,6 @@ files = [ {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, ] -[[package]] -name = "tzlocal" -version = "5.2" -description = "tzinfo object for the local timezone" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tzlocal-5.2-py3-none-any.whl", hash = "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8"}, - {file = "tzlocal-5.2.tar.gz", hash = "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e"}, -] - -[package.dependencies] -tzdata = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -devenv = ["check-manifest", "pytest (>=4.3)", "pytest-cov", "pytest-mock (>=3.3)", "zest.releaser"] - [[package]] name = "upstash-redis" version = "1.3.0" @@ -3648,20 +3127,6 @@ typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} [package.extras] standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] -[[package]] -name = "validators" -version = "0.34.0" -description = "Python Data Validation for Humansβ„’" -optional = false -python-versions = ">=3.8" -files = [ - {file = "validators-0.34.0-py3-none-any.whl", hash = "sha256:c804b476e3e6d3786fa07a30073a4ef694e617805eb1946ceee3fe5a9b8b1321"}, - {file = "validators-0.34.0.tar.gz", hash = "sha256:647fe407b45af9a74d245b943b18e6a816acf4926974278f6dd617778e1e781f"}, -] - -[package.extras] -crypto-eth-addresses = ["eth-hash[pycryptodome] (>=0.7.0)"] - [[package]] name = "watchdog" version = "6.0.0" @@ -3999,4 +3464,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "a4faa1b74b9f2f92e036b441cd897fb6479d2f08bc22baa34a14502d41bb982b" +content-hash = "e2a7a6edefe63d4035c2bbbaa7f25708e764044c01de7227dea66e718375a92d" diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 0dd4f201..3273b818 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -46,6 +46,7 @@ python-ripgrep = "0.0.6" daytona_sdk = "^0.12.0" boto3 = "^1.34.0" openai = "^1.72.0" +streamlit = "^1.44.1" [tool.poetry.scripts] agentpress = "agentpress.cli:main" diff --git a/backend/utils/logger.py b/backend/utils/logger.py index acb4bbe8..80063207 100644 --- a/backend/utils/logger.py +++ b/backend/utils/logger.py @@ -83,7 +83,7 @@ def setup_logger(name: str = 'agentpress') -> logging.Logger: # Console handler console_handler = logging.StreamHandler(sys.stdout) - console_handler.setLevel(logging.DEBUG) + console_handler.setLevel(logging.INFO) # Create formatters file_formatter = logging.Formatter(