diff --git a/README.md b/README.md
index 1c414b4..67ca777 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,3 @@
-
-
- ‼️ IMPORTANT NOTICE ‼️
-
-
- The current version of OWL does not use the up-to-date version of CAMEL.
- If you want to build the best performing agents powered by workforce, please check out eigent.py.
- We are also working on updating CAMEL to the latest version.
-
-
-
diff --git a/README_ja.md b/README_ja.md
index 53d5cef..5f35994 100644
--- a/README_ja.md
+++ b/README_ja.md
@@ -1,14 +1,3 @@
-
-
- ‼️ 重要なお知らせ ‼️
-
-
- 現在のOWLバージョンは、最新版のCAMELを使用していません。
- workforceを活用した最高性能のエージェントを構築したい場合は、eigent.pyをご確認ください。
- CAMELを最新版に更新する作業も進行中です。
-
-
-
🦉 OWL: 労働力学習の最適化による、現実世界のタスク自動化における一般的なマルチエージェント支援
@@ -75,12 +64,42 @@
- [📋 目次](#-目次)
- [🔥 ニュース](#-ニュース)
- [🎬 デモビデオ](#-デモビデオ)
-- [✨️ コア機能](#-コア機能)
+- [✨️ コア機能](#️-コア機能)
- [🛠️ インストール](#️-インストール)
+ - [オプション1:uvを使用する(推奨)](#オプション1uvを使用する推奨)
+ - [オプション2:venvとpipを使用する](#オプション2venvとpipを使用する)
+ - [オプション3:condaを使用する](#オプション3condaを使用する)
+ - [**環境変数の設定**](#環境変数の設定)
+ - [オプション1:`.env`ファイルを使用する(推奨)](#オプション1envファイルを使用する推奨)
+ - [オプション2:環境変数を直接設定](#オプション2環境変数を直接設定)
+ - [**Dockerでの実行**](#dockerでの実行)
+ - [**セットアップ手順**](#セットアップ手順)
+ - [**デプロイメントオプション**](#デプロイメントオプション)
+ - [**オプション1:事前構築されたイメージを使用する(推奨)**](#オプション1事前構築されたイメージを使用する推奨)
+ - [**オプション2:ローカルでイメージを構築する**](#オプション2ローカルでイメージを構築する)
+ - [**オプション3:便利なスクリプトを使用する**](#オプション3便利なスクリプトを使用する)
+ - [**MCPデスクトップコマンダーのセットアップ**](#mcpデスクトップコマンダーのセットアップ)
- [🚀 クイックスタート](#-クイックスタート)
+ - [基本的な使用法](#基本的な使用法)
+ - [異なるモデルでの実行](#異なるモデルでの実行)
+ - [モデルの要件](#モデルの要件)
+ - [サポートされているモデル](#サポートされているモデル)
+ - [例のタスク](#例のタスク)
- [🧰 ツールキットと機能](#-ツールキットと機能)
- - [モデルコンテキストプロトコル (MCP)](#モデルコンテキストプロトコル-mcp)
+ - [モデルコンテキストプロトコル(MCP)](#モデルコンテキストプロトコルmcp)
+ - [**Node.jsのインストール**](#nodejsのインストール)
+ - [Windows](#windows)
+ - [Linux](#linux)
+ - [Mac](#mac)
+ - [**Playwright MCPサービスのインストール**](#playwright-mcpサービスのインストール)
+ - [利用可能なツールキット](#利用可能なツールキット)
+ - [利用可能なツールキット](#利用可能なツールキット-1)
+ - [マルチモーダルツールキット(マルチモーダルモデル機能が必要)](#マルチモーダルツールキットマルチモーダルモデル機能が必要)
+ - [テキストベースのツールキット](#テキストベースのツールキット)
+ - [カスタマイズ設定](#カスタマイズ設定)
- [🌐 ウェブインターフェース](#-ウェブインターフェース)
+ - [ウェブUIの起動](#ウェブuiの起動)
+ - [機能](#機能)
- [🧪 実験](#-実験)
- [⏱️ 将来の計画](#️-将来の計画)
- [📄 ライセンス](#-ライセンス)
@@ -89,6 +108,7 @@
- [🔥 コミュニティ](#-コミュニティ)
- [❓ FAQ](#-faq)
- [📚 CAMEL依存関係の探索](#-camel依存関係の探索)
+ - [CAMELソースコードへのアクセス](#camelソースコードへのアクセス)
- [⭐ Star History](#-star-history)
# 🔥 ニュース
diff --git a/README_zh.md b/README_zh.md
index 7f57a92..0c973f1 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -1,14 +1,3 @@
-
-
- ‼️ 重要提示 ‼️
-
-
- 当前版本的 OWL 未使用最新版本的 CAMEL。
- 如果您想构建基于 workforce 的最佳性能智能体,请查看 eigent.py。
- 我们也正在努力将 CAMEL 更新到最新版本。
-
-
-
🦉 OWL: Optimized Workforce Learning for General Multi-Agent Assistance in Real-World Task Automation
🦉 OWL: 优化劳动力学习的通用智能体,用于处理现实世界的自动化任务
@@ -73,11 +62,38 @@
- [📋 目录](#-目录)
- [🔥 新闻](#-新闻)
- [🎬 演示视频](#-演示视频)
-- [✨️ 核心功能](#-核心功能)
+- [✨️ 核心功能](#️-核心功能)
- [🛠️ 安装](#️-安装)
+ - [选项1:使用 uv(推荐)](#选项1使用-uv推荐)
+ - [选项2:使用 venv 和 pip](#选项2使用-venv-和-pip)
+ - [选项3:使用 conda](#选项3使用-conda)
+ - [**设置环境变量**](#设置环境变量)
+ - [选项 1:使用 `.env` 文件(推荐)](#选项-1使用-env-文件推荐)
+ - [选项 2:直接设置环境变量](#选项-2直接设置环境变量)
+ - [**使用Docker运行**](#使用docker运行)
+ - [**设置说明**](#设置说明)
+ - [**部署选项**](#部署选项)
+ - [**选项1:使用预构建镜像(推荐)**](#选项1使用预构建镜像推荐)
+ - [**选项2:本地构建镜像**](#选项2本地构建镜像)
+ - [**选项3:使用便捷脚本**](#选项3使用便捷脚本)
+ - [**MCP Desktop Commander设置**](#mcp-desktop-commander设置)
- [🚀 快速开始](#-快速开始)
+ - [基本用法](#基本用法)
+ - [使用不同的模型](#使用不同的模型)
+ - [模型要求](#模型要求)
+ - [支持的模型](#支持的模型)
- [🧰 工具包与功能](#-工具包与功能)
- - [模型上下文协议 (MCP)](#模型上下文协议-mcp)
+ - [模型上下文协议(MCP)](#模型上下文协议mcp)
+ - [**安装 Node.js**](#安装-nodejs)
+ - [Windows](#windows)
+ - [Linux](#linux)
+ - [Mac](#mac)
+ - [**安装 MCP 服务**](#安装-mcp-服务)
+ - [可用工具包](#可用工具包)
+ - [主要工具包](#主要工具包)
+ - [多模态工具包(需要模型具备多模态能力)](#多模态工具包需要模型具备多模态能力)
+ - [基于文本的工具包](#基于文本的工具包)
+ - [自定义配置](#自定义配置)
- [🌐 网页界面](#-网页界面)
- [🧪 实验](#-实验)
- [⏱️ 未来计划](#️-未来计划)
@@ -87,6 +103,7 @@
- [🔥 社区](#-社区)
- [❓ 常见问题](#-常见问题)
- [📚 探索 CAMEL 依赖](#-探索-camel-依赖)
+ - [访问 CAMEL 源代码](#访问-camel-源代码)
- [⭐ Star History](#-star-history)
diff --git a/examples/mcp_servers_config.json b/examples/mcp_servers_config.json
deleted file mode 100644
index f2a22ec..0000000
--- a/examples/mcp_servers_config.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "mcpServers": {
- "playwright": {
- "command": "npx",
- "args": [
- "@playwright/mcp@latest"
- ]
- }
- }
-}
-
diff --git a/examples/mcp_sse_config.json b/examples/mcp_sse_config.json
deleted file mode 100644
index 87b41a6..0000000
--- a/examples/mcp_sse_config.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "mcpServers": {
- "@modelcontextprotocol/fetch": {
- "url": "https://router.mcp.so/sse/zr9l18m8pudpzg"
- }
- }
-}
\ No newline at end of file
diff --git a/examples/run.py b/examples/run.py
index 02c0d09..b39f980 100644
--- a/examples/run.py
+++ b/examples/run.py
@@ -15,7 +15,9 @@ import sys
import pathlib
from dotenv import load_dotenv
from camel.models import ModelFactory
+from camel.agents import ChatAgent
from camel.toolkits import (
+ FunctionTool,
AudioAnalysisToolkit,
CodeExecutionToolkit,
ExcelToolkit,
@@ -23,13 +25,17 @@ from camel.toolkits import (
SearchToolkit,
VideoAnalysisToolkit,
BrowserToolkit,
- FileWriteToolkit,
+ FileToolkit,
)
from camel.types import ModelPlatformType, ModelType
from camel.logger import set_log_level
-from camel.societies import RolePlaying
+from camel.tasks.task import Task
-from owl.utils import run_society, DocumentProcessingToolkit
+from camel.societies import Workforce
+
+from owl.utils import DocumentProcessingToolkit
+
+from typing import List, Dict, Any
base_dir = pathlib.Path(__file__).parent.parent
env_path = base_dir / "owl" / ".env"
@@ -38,110 +44,178 @@ load_dotenv(dotenv_path=str(env_path))
set_log_level(level="DEBUG")
-def construct_society(question: str) -> RolePlaying:
- r"""Construct a society of agents based on the given question.
+def construct_agent_list() -> List[Dict[str, Any]]:
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- RolePlaying: A configured society of agents ready to address the question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "browsing": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "planning": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "video": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "image": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "document": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- ).get_tools(),
- *VideoAnalysisToolkit(model=models["video"]).get_tools(),
- *AudioAnalysisToolkit().get_tools(), # This requires OpenAI Key
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- *ImageAnalysisToolkit(model=models["image"]).get_tools(),
- SearchToolkit().search_duckduckgo,
- SearchToolkit().search_google, # Comment this out if you don't have google search
- SearchToolkit().search_wiki,
- *ExcelToolkit().get_tools(),
- *DocumentProcessingToolkit(model=models["document"]).get_tools(),
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
+ web_model = ModelFactory.create(
+ model_platform=ModelPlatformType.OPENAI,
+ model_type=ModelType.GPT_5_1,
+ model_config_dict={"temperature": 0},
+ )
+
+ document_processing_model = ModelFactory.create(
+ model_platform=ModelPlatformType.OPENAI,
+ model_type=ModelType.GPT_5_1,
+ model_config_dict={"temperature": 0},
+ )
+
+ reasoning_model = ModelFactory.create(
+ model_platform=ModelPlatformType.OPENAI,
+ model_type=ModelType.GPT_5_1,
+ model_config_dict={"temperature": 0},
+ )
+
+ image_analysis_model = ModelFactory.create(
+ model_platform=ModelPlatformType.OPENAI,
+ model_type=ModelType.GPT_5_1,
+ model_config_dict={"temperature": 0},
)
- return society
+ search_toolkit = SearchToolkit()
+ document_processing_toolkit = DocumentProcessingToolkit(model=document_processing_model)
+ image_analysis_toolkit = ImageAnalysisToolkit(model=image_analysis_model)
+ code_runner_toolkit = CodeExecutionToolkit(sandbox="subprocess", verbose=True)
+ file_toolkit = FileToolkit()
+ excel_toolkit = ExcelToolkit()
+
+ web_agent = ChatAgent(
+"""
+You are a helpful assistant that can search the web, extract webpage content, simulate browser actions, and provide relevant information to solve the given task.
+Keep in mind that:
+- Do not be overly confident in your own knowledge. Searching can provide a broader perspective and help validate existing knowledge.
+- If one way fails to provide an answer, try other ways or methods. The answer does exists.
+- If the search snippet is unhelpful but the URL comes from an authoritative source, try visit the website for more details.
+- When looking for specific numerical values (e.g., dollar amounts), prioritize reliable sources and avoid relying only on search snippets.
+- When solving tasks that require web searches, check Wikipedia first before exploring other websites.
+- You can also simulate browser actions to get more information or verify the information you have found.
+- Browser simulation is also helpful for finding target URLs. Browser simulation operations do not necessarily need to find specific answers, but can also help find web page URLs that contain answers (usually difficult to find through simple web searches). You can find the answer to the question by performing subsequent operations on the URL, such as extracting the content of the webpage.
+- Do not solely rely on document tools or browser simulation to find the answer, you should combine document tools and browser simulation to comprehensively process web page information. Some content may need to do browser simulation to get, or some content is rendered by javascript.
+- In your response, you should mention the urls you have visited and processed.
+
+Here are some tips that help you perform web search:
+- Never add too many keywords in your search query! Some detailed results need to perform browser interaction to get, not using search toolkit.
+- If the question is complex, search results typically do not provide precise answers. It is not likely to find the answer directly using search toolkit only, the search query should be concise and focuses on finding official sources rather than direct answers.
+ For example, as for the question "What is the maximum length in meters of #9 in the first National Geographic short on YouTube that was ever released according to the Monterey Bay Aquarium website?", your first search term must be coarse-grained like "National Geographic YouTube" to find the youtube website first, and then try other fine-grained search terms step-by-step to find more urls.
+- The results you return do not have to directly answer the original question, you only need to collect relevant information.
+""",
+ model=web_model,
+ tools=[
+ # FunctionTool(search_toolkit.search_google), # require google search api key
+ FunctionTool(search_toolkit.search_duckduckgo),
+ FunctionTool(search_toolkit.search_wiki),
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ ]
+ )
+
+ document_processing_agent = ChatAgent(
+ "You are a helpful assistant that can process documents and multimodal data, and can interact with file system.",
+ document_processing_model,
+ tools=[
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ FunctionTool(image_analysis_toolkit.ask_question_about_image),
+ FunctionTool(code_runner_toolkit.execute_code),
+ *file_toolkit.get_tools(),
+ ]
+ )
+
+ reasoning_coding_agent = ChatAgent(
+ "You are a helpful assistant that specializes in reasoning and coding, and can think step by step to solve the task. When necessary, you can write python code to solve the task. If you have written code, do not forget to execute the code. Never generate codes like 'example code', your code should be able to fully solve the task. You can also leverage multiple libraries, such as requests, BeautifulSoup, re, pandas, etc, to solve the task. For processing excel files, you should write codes to process them.",
+ reasoning_model,
+ tools=[
+ FunctionTool(code_runner_toolkit.execute_code),
+ FunctionTool(excel_toolkit.extract_excel_content),
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ ]
+ )
+
+ agent_list = []
+
+ web_agent_dict = {
+ "name": "Web Agent",
+ "description": "A helpful assistant that can search the web, extract webpage content, simulate browser actions, and retrieve relevant information.",
+ "agent": web_agent
+ }
+
+ document_processing_agent_dict = {
+ "name": "Document Processing Agent",
+ "description": "A helpful assistant that can process a variety of local and remote documents, including pdf, docx, images, audio, and video, etc.",
+ "agent": document_processing_agent
+ }
+
+ reasoning_coding_agent_dict = {
+ "name": "Reasoning Coding Agent",
+ "description": "A helpful assistant that specializes in reasoning, coding, and processing excel files. However, it cannot access the internet to search for information. If the task requires python execution, it should be informed to execute the code after writing it.",
+ "agent": reasoning_coding_agent
+ }
+
+ agent_list.append(web_agent_dict)
+ agent_list.append(document_processing_agent_dict)
+ agent_list.append(reasoning_coding_agent_dict)
+ return agent_list
+
+
+def construct_workforce() -> Workforce:
+
+ coordinator_agent_kwargs = {
+ "model": ModelFactory.create(
+ model_platform=ModelPlatformType.OPENAI,
+ model_type=ModelType.GPT_5_1,
+ model_config_dict={"temperature": 0},
+ )
+ }
+
+ task_agent_kwargs = {
+ "model": ModelFactory.create(
+ model_platform=ModelPlatformType.OPENAI,
+ model_type=ModelType.GPT_5_1,
+ model_config_dict={"temperature": 0},
+ )
+ }
+
+ task_agent = ChatAgent(
+ "You are a helpful assistant that can decompose tasks and assign tasks to workers.",
+ **task_agent_kwargs
+ )
+
+ coordinator_agent = ChatAgent(
+ "You are a helpful assistant that can assign tasks to workers.",
+ **coordinator_agent_kwargs
+ )
+
+ workforce = Workforce(
+ "Workforce",
+ task_agent=task_agent,
+ coordinator_agent=coordinator_agent,
+ )
+
+ agent_list = construct_agent_list()
+
+ for agent_dict in agent_list:
+ workforce.add_single_agent_worker(
+ agent_dict["description"],
+ worker=agent_dict["agent"],
+ )
+
+ return workforce
def main():
r"""Main function to run the OWL system with an example question."""
# Default research question
- default_task = "Open Brave search, summarize the github stars, fork counts, etc. of camel-ai's camel framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
-
+ default_task_prompt = "Summarize the github stars, fork counts, etc. of camel-ai's owl framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
+
# Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
+ task_prompt = sys.argv[1] if len(sys.argv) > 1 else default_task_prompt
+
+ task = Task(
+ content=task_prompt,
+ )
+
+ workforce = construct_workforce()
- # Construct and run the society
- society = construct_society(task)
- answer, chat_history, token_count = run_society(society)
+ processed_task = workforce.process_task(task)
# Output the result
- print(f"\033[94mAnswer: {answer}\033[0m")
+ print(f"\033[94mAnswer: {processed_task.result}\033[0m")
if __name__ == "__main__":
diff --git a/examples/run_azure_openai.py b/examples/run_azure_openai.py
deleted file mode 100644
index c17c661..0000000
--- a/examples/run_azure_openai.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-import os
-import sys
-from dotenv import load_dotenv
-from camel.configs import ChatGPTConfig
-from camel.models import ModelFactory
-from camel.toolkits import (
- CodeExecutionToolkit,
- ExcelToolkit,
- ImageAnalysisToolkit,
- SearchToolkit,
- BrowserToolkit,
- FileWriteToolkit,
-)
-from camel.types import ModelPlatformType
-
-from owl.utils import OwlRolePlaying, run_society
-
-from camel.logger import set_log_level
-
-import pathlib
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-
-def construct_society(question: str) -> OwlRolePlaying:
- r"""Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- OwlRolePlaying: A configured society of agents ready to address the question.
- """
-
- # Create models for different components using Azure OpenAI
- base_model_config = {
- "model_platform": ModelPlatformType.AZURE,
- "model_type": os.getenv("AZURE_OPENAI_MODEL_TYPE"),
- "model_config_dict": ChatGPTConfig(temperature=0.4, max_tokens=4096).as_dict(),
- }
-
- models = {
- "user": ModelFactory.create(**base_model_config),
- "assistant": ModelFactory.create(**base_model_config),
- "browsing": ModelFactory.create(**base_model_config),
- "planning": ModelFactory.create(**base_model_config),
- "image": ModelFactory.create(**base_model_config),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- ).get_tools(),
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- *ImageAnalysisToolkit(model=models["image"]).get_tools(),
- SearchToolkit().search_duckduckgo,
- SearchToolkit().search_google, # Comment this out if you don't have google search
- SearchToolkit().search_wiki,
- *ExcelToolkit().get_tools(),
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = OwlRolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- )
-
- return society
-
-
-def main():
- r"""Main function to run the OWL system with Azure OpenAI."""
- # Example question
- default_task = "Open Brave search, summarize the github stars, fork counts, etc. of camel-ai's camel framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Construct and run the society
- society = construct_society(task)
-
- answer, chat_history, token_count = run_society(society)
-
- # Output the result
- print(f"\033[94mAnswer: {answer}\033[0m")
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_claude.py b/examples/run_claude.py
index c3f7b98..3da5581 100644
--- a/examples/run_claude.py
+++ b/examples/run_claude.py
@@ -1,7 +1,7 @@
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# You can obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
@@ -11,25 +11,39 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
+
+"""
+Workforce example using Claude models from Anthropic.
+
+To run this file, you need to configure the Anthropic API key.
+You can obtain your API key from Anthropic platform: https://console.anthropic.com/
+Set it as ANTHROPIC_API_KEY="your-api-key" in your .env file or add it to your environment variables.
+"""
+
import sys
import pathlib
from dotenv import load_dotenv
from camel.models import ModelFactory
+from camel.agents import ChatAgent
from camel.toolkits import (
+ FunctionTool,
AudioAnalysisToolkit,
CodeExecutionToolkit,
ExcelToolkit,
ImageAnalysisToolkit,
SearchToolkit,
VideoAnalysisToolkit,
- BrowserToolkit,
- FileWriteToolkit,
+ FileToolkit,
)
from camel.types import ModelPlatformType, ModelType
from camel.logger import set_log_level
-from camel.societies import RolePlaying
+from camel.tasks.task import Task
-from owl.utils import run_society, DocumentProcessingToolkit
+from camel.societies import Workforce
+
+from owl.utils import DocumentProcessingToolkit
+
+from typing import List, Dict, Any
base_dir = pathlib.Path(__file__).parent.parent
env_path = base_dir / "owl" / ".env"
@@ -38,109 +52,180 @@ load_dotenv(dotenv_path=str(env_path))
set_log_level(level="DEBUG")
-def construct_society(question: str) -> RolePlaying:
- r"""Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- RolePlaying: A configured society of agents ready to address the question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.ANTHROPIC,
- model_type=ModelType.CLAUDE_3_7_SONNET,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.ANTHROPIC,
- model_type=ModelType.CLAUDE_3_7_SONNET,
- model_config_dict={"temperature": 0},
- ),
- "browsing": ModelFactory.create(
- model_platform=ModelPlatformType.ANTHROPIC,
- model_type=ModelType.CLAUDE_3_7_SONNET,
- model_config_dict={"temperature": 0},
- ),
- "planning": ModelFactory.create(
- model_platform=ModelPlatformType.ANTHROPIC,
- model_type=ModelType.CLAUDE_3_7_SONNET,
- model_config_dict={"temperature": 0},
- ),
- "video": ModelFactory.create(
- model_platform=ModelPlatformType.ANTHROPIC,
- model_type=ModelType.CLAUDE_3_7_SONNET,
- model_config_dict={"temperature": 0},
- ),
- "image": ModelFactory.create(
- model_platform=ModelPlatformType.ANTHROPIC,
- model_type=ModelType.CLAUDE_3_7_SONNET,
- model_config_dict={"temperature": 0},
- ),
- "document": ModelFactory.create(
- model_platform=ModelPlatformType.ANTHROPIC,
- model_type=ModelType.CLAUDE_3_7_SONNET,
- model_config_dict={"temperature": 0},
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- ).get_tools(),
- *VideoAnalysisToolkit(model=models["video"]).get_tools(),
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- *ImageAnalysisToolkit(model=models["image"]).get_tools(),
- SearchToolkit().search_duckduckgo,
- SearchToolkit().search_wiki,
- *ExcelToolkit().get_tools(),
- *DocumentProcessingToolkit(model=models["document"]).get_tools(),
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
+def construct_agent_list() -> List[Dict[str, Any]]:
+ """Construct a list of agents with their configurations."""
+
+ web_model = ModelFactory.create(
+ model_platform=ModelPlatformType.ANTHROPIC,
+ model_type=ModelType.CLAUDE_3_7_SONNET,
+ model_config_dict={"temperature": 0},
+ )
+
+ document_processing_model = ModelFactory.create(
+ model_platform=ModelPlatformType.ANTHROPIC,
+ model_type=ModelType.CLAUDE_3_7_SONNET,
+ model_config_dict={"temperature": 0},
+ )
+
+ reasoning_model = ModelFactory.create(
+ model_platform=ModelPlatformType.ANTHROPIC,
+ model_type=ModelType.CLAUDE_3_7_SONNET,
+ model_config_dict={"temperature": 0},
+ )
+
+ image_analysis_model = ModelFactory.create(
+ model_platform=ModelPlatformType.ANTHROPIC,
+ model_type=ModelType.CLAUDE_3_7_SONNET,
+ model_config_dict={"temperature": 0},
)
- return society
+ search_toolkit = SearchToolkit()
+ document_processing_toolkit = DocumentProcessingToolkit(model=document_processing_model)
+ image_analysis_toolkit = ImageAnalysisToolkit(model=image_analysis_model)
+ code_runner_toolkit = CodeExecutionToolkit(sandbox="subprocess", verbose=True)
+ file_toolkit = FileToolkit()
+ excel_toolkit = ExcelToolkit()
+
+ web_agent = ChatAgent(
+ """You are a helpful assistant that can search the web, extract webpage content, simulate browser actions, and provide relevant information to solve the given task.
+Keep in mind that:
+- Do not be overly confident in your own knowledge. Searching can provide a broader perspective and help validate existing knowledge.
+- If one way fails to provide an answer, try other ways or methods. The answer does exist.
+- If the search snippet is unhelpful but the URL comes from an authoritative source, try visit the website for more details.
+- When looking for specific numerical values (e.g., dollar amounts), prioritize reliable sources and avoid relying only on search snippets.
+- When solving tasks that require web searches, check Wikipedia first before exploring other websites.
+- You can also simulate browser actions to get more information or verify the information you have found.
+- Browser simulation is also helpful for finding target URLs. Browser simulation operations do not necessarily need to find specific answers, but can also help find web page URLs that contain answers (usually difficult to find through simple web searches). You can find the answer to the question by performing subsequent operations on the URL, such as extracting the content of the webpage.
+- Do not solely rely on document tools or browser simulation to find the answer, you should combine document tools and browser simulation to comprehensively process web page information. Some content may need to do browser simulation to get, or some content is rendered by javascript.
+- In your response, you should mention the urls you have visited and processed.
+
+Here are some tips that help you perform web search:
+- Never add too many keywords in your search query! Some detailed results need to perform browser interaction to get, not using search toolkit.
+- If the question is complex, search results typically do not provide precise answers. It is not likely to find the answer directly using search toolkit only, the search query should be concise and focuses on finding official sources rather than direct answers.
+ For example, as for the question "What is the maximum length in meters of #9 in the first National Geographic short on YouTube that was ever released according to the Monterey Bay Aquarium website?", your first search term must be coarse-grained like "National Geographic YouTube" to find the youtube website first, and then try other fine-grained search terms step-by-step to find more urls.
+- The results you return do not have to directly answer the original question, you only need to collect relevant information.
+""",
+ model=web_model,
+ tools=[
+ FunctionTool(search_toolkit.search_duckduckgo),
+ FunctionTool(search_toolkit.search_wiki),
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ ]
+ )
+
+ document_processing_agent = ChatAgent(
+ "You are a helpful assistant that can process documents and multimodal data, and can interact with file system.",
+ document_processing_model,
+ tools=[
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ FunctionTool(image_analysis_toolkit.ask_question_about_image),
+ FunctionTool(code_runner_toolkit.execute_code),
+ *file_toolkit.get_tools(),
+ ]
+ )
+
+ reasoning_coding_agent = ChatAgent(
+ "You are a helpful assistant that specializes in reasoning and coding, and can think step by step to solve the task. When necessary, you can write python code to solve the task. If you have written code, do not forget to execute the code. Never generate codes like 'example code', your code should be able to fully solve the task. You can also leverage multiple libraries, such as requests, BeautifulSoup, re, pandas, etc, to solve the task. For processing excel files, you should write codes to process them.",
+ reasoning_model,
+ tools=[
+ FunctionTool(code_runner_toolkit.execute_code),
+ FunctionTool(excel_toolkit.extract_excel_content),
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ ]
+ )
+
+ agent_list = []
+
+ web_agent_dict = {
+ "name": "Web Agent",
+ "description": "A helpful assistant that can search the web, extract webpage content, simulate browser actions, and retrieve relevant information.",
+ "agent": web_agent
+ }
+
+ document_processing_agent_dict = {
+ "name": "Document Processing Agent",
+ "description": "A helpful assistant that can process a variety of local and remote documents, including pdf, docx, images, audio, and video, etc.",
+ "agent": document_processing_agent
+ }
+
+ reasoning_coding_agent_dict = {
+ "name": "Reasoning Coding Agent",
+ "description": "A helpful assistant that specializes in reasoning, coding, and processing excel files. However, it cannot access the internet to search for information. If the task requires python execution, it should be informed to execute the code after writing it.",
+ "agent": reasoning_coding_agent
+ }
+
+ agent_list.append(web_agent_dict)
+ agent_list.append(document_processing_agent_dict)
+ agent_list.append(reasoning_coding_agent_dict)
+ return agent_list
+
+
+def construct_workforce() -> Workforce:
+ """Construct a workforce with coordinator and task agents."""
+
+ coordinator_agent_kwargs = {
+ "model": ModelFactory.create(
+ model_platform=ModelPlatformType.ANTHROPIC,
+ model_type=ModelType.CLAUDE_3_7_SONNET,
+ model_config_dict={"temperature": 0},
+ )
+ }
+
+ task_agent_kwargs = {
+ "model": ModelFactory.create(
+ model_platform=ModelPlatformType.ANTHROPIC,
+ model_type=ModelType.CLAUDE_3_7_SONNET,
+ model_config_dict={"temperature": 0},
+ )
+ }
+
+ task_agent = ChatAgent(
+ "You are a helpful assistant that can decompose tasks and assign tasks to workers.",
+ **task_agent_kwargs
+ )
+
+ coordinator_agent = ChatAgent(
+ "You are a helpful assistant that can assign tasks to workers.",
+ **coordinator_agent_kwargs
+ )
+
+ workforce = Workforce(
+ "Workforce",
+ task_agent=task_agent,
+ coordinator_agent=coordinator_agent,
+ )
+
+ agent_list = construct_agent_list()
+
+ for agent_dict in agent_list:
+ workforce.add_single_agent_worker(
+ agent_dict["description"],
+ worker=agent_dict["agent"],
+ )
+
+ return workforce
def main():
r"""Main function to run the OWL system with an example question."""
# Default research question
- default_task = "Open Brave search, summarize the github stars, fork counts, etc. of camel-ai's camel framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
-
+ default_task_prompt = "Open Brave search, summarize the github stars, fork counts, etc. of camel-ai's camel framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
+
# Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
+ task_prompt = sys.argv[1] if len(sys.argv) > 1 else default_task_prompt
+
+ task = Task(
+ content=task_prompt,
+ )
+
+ workforce = construct_workforce()
- # Construct and run the society
- society = construct_society(task)
- answer, chat_history, token_count = run_society(society)
+ processed_task = workforce.process_task(task)
# Output the result
- print(f"\033[94mAnswer: {answer}\033[0m")
+ print(f"\033[94mAnswer: {processed_task.result}\033[0m")
if __name__ == "__main__":
main()
+
diff --git a/examples/run_cli.py b/examples/run_cli.py
deleted file mode 100644
index 4df312a..0000000
--- a/examples/run_cli.py
+++ /dev/null
@@ -1,193 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-from dotenv import load_dotenv
-
-from camel.models import ModelFactory
-from camel.toolkits import (
- ExcelToolkit,
- SearchToolkit,
- FileWriteToolkit,
- CodeExecutionToolkit,
- BrowserToolkit,
- VideoAnalysisToolkit,
- ImageAnalysisToolkit,
-)
-from camel.types import ModelPlatformType, ModelType
-from camel.societies import RolePlaying
-from camel.logger import set_log_level
-
-from owl.utils import run_society, DocumentProcessingToolkit
-
-import pathlib
-
-# Set the log level to DEBUG for detailed debugging information
-set_log_level(level="DEBUG")
-
-# Get the parent directory of the current file and construct the path to the .env file
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-
-def get_user_input(prompt):
- # Get user input and strip leading/trailing whitespace
- return input(prompt).strip()
-
-
-def get_construct_params() -> dict[str, any]:
- # Welcome message
- print("Welcome to owl! Have fun!")
-
- # Select model platform type
- model_platforms = ModelPlatformType
- print("Please select the model platform type:")
- for i, platform in enumerate(model_platforms, 1):
- print(f"{i}. {platform}")
- model_platform_choice = int(
- get_user_input("Please enter the model platform number:")
- )
- selected_model_platform = list(model_platforms)[model_platform_choice - 1]
- print(f"The model platform you selected is: {selected_model_platform}")
-
- # Select model type
- models = ModelType
- print("Please select the model type:")
- for i, model in enumerate(models, 1):
- print(f"{i}. {model}")
- model_choice = int(get_user_input("Please enter the model number:"))
- selected_model = list(models)[model_choice - 1]
- print(f"The model you selected is: {selected_model}")
-
- # Select language
- languages = ["English", "Chinese"]
- print("Please select the language:")
- for i, lang in enumerate(languages, 1):
- print(f"{i}. {lang}")
- language_choice = int(get_user_input("Please enter the language number:"))
- selected_language = languages[language_choice - 1]
- print(f"The language you selected is: {selected_language}")
-
- # Enter the question
- question = get_user_input("Please enter your question:")
- print(f"Your question is: {question}")
-
- return {
- "language": selected_language,
- "model_type": selected_model,
- "model_platform": selected_model_platform,
- "question": question,
- }
-
-
-def construct_society() -> RolePlaying:
- # Get user input parameters
- params = get_construct_params()
- question = params["question"]
- selected_model_type = params["model_type"]
- selected_model_platform = params["model_platform"]
- selected_language = params["language"]
-
- # Create model instances for different roles
- models = {
- "user": ModelFactory.create(
- model_platform=selected_model_platform,
- model_type=selected_model_type,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=selected_model_platform,
- model_type=selected_model_type,
- model_config_dict={"temperature": 0},
- ),
- "browsing": ModelFactory.create(
- model_platform=selected_model_platform,
- model_type=selected_model_type,
- model_config_dict={"temperature": 0},
- ),
- "planning": ModelFactory.create(
- model_platform=selected_model_platform,
- model_type=selected_model_type,
- model_config_dict={"temperature": 0},
- ),
- "video": ModelFactory.create(
- model_platform=selected_model_platform,
- model_type=selected_model_type,
- model_config_dict={"temperature": 0},
- ),
- "image": ModelFactory.create(
- model_platform=selected_model_platform,
- model_type=selected_model_type,
- model_config_dict={"temperature": 0},
- ),
- "document": ModelFactory.create(
- model_platform=selected_model_platform,
- model_type=selected_model_type,
- model_config_dict={"temperature": 0},
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False,
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- ).get_tools(),
- *VideoAnalysisToolkit(model=models["video"]).get_tools(),
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- *ImageAnalysisToolkit(model=models["image"]).get_tools(),
- SearchToolkit().search_duckduckgo,
- SearchToolkit().search_google,
- SearchToolkit().search_wiki,
- SearchToolkit().search_baidu,
- SearchToolkit().search_bing,
- *ExcelToolkit().get_tools(),
- *DocumentProcessingToolkit(model=models["document"]).get_tools(),
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- output_language=selected_language,
- )
-
- return society
-
-
-def main():
- # Construct the society
- society = construct_society()
- # Run the society and get the answer, chat history, and token count
- answer, chat_history, token_count = run_society(society)
- # Print the answer
- print(f"\033[94mAnswer: {answer}\033[0m")
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_deepseek.py b/examples/run_deepseek.py
new file mode 100644
index 0000000..dd9f37e
--- /dev/null
+++ b/examples/run_deepseek.py
@@ -0,0 +1,216 @@
+# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You can obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
+
+"""
+Workforce example using DeepSeek models.
+
+To run this file, you need to configure the DeepSeek API key.
+You can obtain your API key from DeepSeek platform: https://platform.deepseek.com/api_keys
+Set it as DEEPSEEK_API_KEY="your-api-key" in your .env file or add it to your environment variables.
+"""
+
+import sys
+import pathlib
+from dotenv import load_dotenv
+from camel.models import ModelFactory
+from camel.agents import ChatAgent
+from camel.toolkits import (
+ FunctionTool,
+ CodeExecutionToolkit,
+ ExcelToolkit,
+ SearchToolkit,
+ FileToolkit,
+)
+from camel.types import ModelPlatformType, ModelType
+from camel.logger import set_log_level
+from camel.tasks.task import Task
+
+from camel.societies import Workforce
+
+from owl.utils import DocumentProcessingToolkit
+
+from typing import List, Dict, Any
+
+base_dir = pathlib.Path(__file__).parent.parent
+env_path = base_dir / "owl" / ".env"
+load_dotenv(dotenv_path=str(env_path))
+
+set_log_level(level="DEBUG")
+
+
+def construct_agent_list() -> List[Dict[str, Any]]:
+ """Construct a list of agents with their configurations."""
+
+ web_model = ModelFactory.create(
+ model_platform=ModelPlatformType.DEEPSEEK,
+ model_type=ModelType.DEEPSEEK_CHAT,
+ model_config_dict={"temperature": 0},
+ )
+
+ document_processing_model = ModelFactory.create(
+ model_platform=ModelPlatformType.DEEPSEEK,
+ model_type=ModelType.DEEPSEEK_CHAT,
+ model_config_dict={"temperature": 0},
+ )
+
+ reasoning_model = ModelFactory.create(
+ model_platform=ModelPlatformType.DEEPSEEK,
+ model_type=ModelType.DEEPSEEK_CHAT,
+ model_config_dict={"temperature": 0},
+ )
+
+ search_toolkit = SearchToolkit()
+ document_processing_toolkit = DocumentProcessingToolkit(model=document_processing_model)
+ code_runner_toolkit = CodeExecutionToolkit(sandbox="subprocess", verbose=True)
+ file_toolkit = FileToolkit()
+ excel_toolkit = ExcelToolkit()
+
+ web_agent = ChatAgent(
+ """You are a helpful assistant that can search the web, extract webpage content, and provide relevant information to solve the given task.
+Keep in mind that:
+- Do not be overly confident in your own knowledge. Searching can provide a broader perspective and help validate existing knowledge.
+- If one way fails to provide an answer, try other ways or methods. The answer does exist.
+- When looking for specific numerical values (e.g., dollar amounts), prioritize reliable sources.
+- When solving tasks that require web searches, check Wikipedia first before exploring other websites.
+- In your response, you should mention the urls you have visited and processed.
+
+Here are some tips that help you perform web search:
+- Never add too many keywords in your search query!
+- If the question is complex, search results typically do not provide precise answers. The search query should be concise and focuses on finding official sources rather than direct answers.
+- The results you return do not have to directly answer the original question, you only need to collect relevant information.
+""",
+ model=web_model,
+ tools=[
+ FunctionTool(search_toolkit.search_duckduckgo),
+ FunctionTool(search_toolkit.search_wiki),
+ FunctionTool(search_toolkit.search_baidu),
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ ]
+ )
+
+ document_processing_agent = ChatAgent(
+ "You are a helpful assistant that can process documents and multimodal data, and can interact with file system.",
+ document_processing_model,
+ tools=[
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ FunctionTool(code_runner_toolkit.execute_code),
+ *file_toolkit.get_tools(),
+ ]
+ )
+
+ reasoning_coding_agent = ChatAgent(
+ "You are a helpful assistant that specializes in reasoning and coding, and can think step by step to solve the task. When necessary, you can write python code to solve the task. If you have written code, do not forget to execute the code. Never generate codes like 'example code', your code should be able to fully solve the task. You can also leverage multiple libraries, such as requests, BeautifulSoup, re, pandas, etc, to solve the task. For processing excel files, you should write codes to process them.",
+ reasoning_model,
+ tools=[
+ FunctionTool(code_runner_toolkit.execute_code),
+ FunctionTool(excel_toolkit.extract_excel_content),
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ ]
+ )
+
+ agent_list = []
+
+ web_agent_dict = {
+ "name": "Web Agent",
+ "description": "A helpful assistant that can search the web, extract webpage content, and retrieve relevant information.",
+ "agent": web_agent
+ }
+
+ document_processing_agent_dict = {
+ "name": "Document Processing Agent",
+ "description": "A helpful assistant that can process a variety of local and remote documents, including pdf, docx, images, audio, and video, etc.",
+ "agent": document_processing_agent
+ }
+
+ reasoning_coding_agent_dict = {
+ "name": "Reasoning Coding Agent",
+ "description": "A helpful assistant that specializes in reasoning, coding, and processing excel files. However, it cannot access the internet to search for information. If the task requires python execution, it should be informed to execute the code after writing it.",
+ "agent": reasoning_coding_agent
+ }
+
+ agent_list.append(web_agent_dict)
+ agent_list.append(document_processing_agent_dict)
+ agent_list.append(reasoning_coding_agent_dict)
+ return agent_list
+
+
+def construct_workforce() -> Workforce:
+ """Construct a workforce with coordinator and task agents."""
+
+ coordinator_agent_kwargs = {
+ "model": ModelFactory.create(
+ model_platform=ModelPlatformType.DEEPSEEK,
+ model_type=ModelType.DEEPSEEK_CHAT,
+ model_config_dict={"temperature": 0},
+ )
+ }
+
+ task_agent_kwargs = {
+ "model": ModelFactory.create(
+ model_platform=ModelPlatformType.DEEPSEEK,
+ model_type=ModelType.DEEPSEEK_CHAT,
+ model_config_dict={"temperature": 0},
+ )
+ }
+
+ task_agent = ChatAgent(
+ "You are a helpful assistant that can decompose tasks and assign tasks to workers.",
+ **task_agent_kwargs
+ )
+
+ coordinator_agent = ChatAgent(
+ "You are a helpful assistant that can assign tasks to workers.",
+ **coordinator_agent_kwargs
+ )
+
+ workforce = Workforce(
+ "Workforce",
+ task_agent=task_agent,
+ coordinator_agent=coordinator_agent,
+ )
+
+ agent_list = construct_agent_list()
+
+ for agent_dict in agent_list:
+ workforce.add_single_agent_worker(
+ agent_dict["description"],
+ worker=agent_dict["agent"],
+ )
+
+ return workforce
+
+
+def main():
+ r"""Main function to run the OWL system with an example question."""
+ # Default research question
+ default_task_prompt = "Search for recent news about the OWL project and generate a report, then save it locally."
+
+ # Override default task if command line argument is provided
+ task_prompt = sys.argv[1] if len(sys.argv) > 1 else default_task_prompt
+
+ task = Task(
+ content=task_prompt,
+ )
+
+ workforce = construct_workforce()
+
+ processed_task = workforce.process_task(task)
+
+ # Output the result
+ print(f"\033[94mAnswer: {processed_task.result}\033[0m")
+
+
+if __name__ == "__main__":
+ main()
+
diff --git a/examples/run_deepseek_zh.py b/examples/run_deepseek_zh.py
deleted file mode 100644
index d471c89..0000000
--- a/examples/run_deepseek_zh.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-
-
-# To run this file, you need to configure the DeepSeek API key
-# You can obtain your API key from DeepSeek platform: https://platform.deepseek.com/api_keys
-# Set it as DEEPSEEK_API_KEY="your-api-key" in your .env file or add it to your environment variables
-
-import sys
-from dotenv import load_dotenv
-
-from camel.models import ModelFactory
-from camel.toolkits import (
- ExcelToolkit,
- SearchToolkit,
- FileWriteToolkit,
- CodeExecutionToolkit,
-)
-from camel.types import ModelPlatformType, ModelType
-from camel.societies import RolePlaying
-from camel.logger import set_log_level
-
-from owl.utils import run_society
-
-import pathlib
-
-set_log_level(level="DEBUG")
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-
-def construct_society(question: str) -> RolePlaying:
- r"""Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- RolePlaying: A configured society of agents ready to address the question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.DEEPSEEK,
- model_type=ModelType.DEEPSEEK_CHAT,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.DEEPSEEK,
- model_type=ModelType.DEEPSEEK_CHAT,
- model_config_dict={"temperature": 0},
- ),
- }
-
- # Configure toolkits
- tools = [
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- SearchToolkit().search_duckduckgo,
- SearchToolkit().search_wiki,
- SearchToolkit().search_baidu,
- *ExcelToolkit().get_tools(),
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- output_language="Chinese",
- )
-
- return society
-
-
-def main():
- r"""Main function to run the OWL system with an example question."""
- # Example research question
- default_task = "搜索OWL项目最近的新闻并生成一篇报告,最后保存到本地。"
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Construct and run the society
- society = construct_society(task)
-
- answer, chat_history, token_count = run_society(society)
-
- # Output the result
- print(f"\033[94mAnswer: {answer}\033[0m")
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_gaia_roleplaying.py b/examples/run_gaia_roleplaying.py
deleted file mode 100644
index 86e9268..0000000
--- a/examples/run_gaia_roleplaying.py
+++ /dev/null
@@ -1,143 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-
-from dotenv import load_dotenv
-
-
-import os
-
-from camel.models import ModelFactory
-from camel.logger import get_logger
-from camel.toolkits import (
- AudioAnalysisToolkit,
- CodeExecutionToolkit,
- ExcelToolkit,
- ImageAnalysisToolkit,
- SearchToolkit,
- VideoAnalysisToolkit,
- BrowserToolkit,
- FileWriteToolkit,
-)
-from camel.types import ModelPlatformType, ModelType
-from camel.configs import ChatGPTConfig
-
-from owl.utils import GAIABenchmark
-from camel.logger import set_log_level
-
-import pathlib
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-logger = get_logger(__name__)
-
-# Configuration
-LEVEL = 1
-SAVE_RESULT = True
-test_idx = [0]
-
-
-def main():
- """Main function to run the GAIA benchmark."""
- # Create cache directory
- cache_dir = "tmp/"
- os.makedirs(cache_dir, exist_ok=True)
- result_dir = "results/"
- os.makedirs(result_dir, exist_ok=True)
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict=ChatGPTConfig(temperature=0, top_p=1).as_dict(),
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict=ChatGPTConfig(temperature=0, top_p=1).as_dict(),
- ),
- "browsing": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict=ChatGPTConfig(temperature=0, top_p=1).as_dict(),
- ),
- "planning": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict=ChatGPTConfig(temperature=0, top_p=1).as_dict(),
- ),
- "video": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict=ChatGPTConfig(temperature=0, top_p=1).as_dict(),
- ),
- "image": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict=ChatGPTConfig(temperature=0, top_p=1).as_dict(),
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- ).get_tools(),
- *VideoAnalysisToolkit(
- model=models["video"]
- ).get_tools(), # This requires OpenAI Key
- *AudioAnalysisToolkit().get_tools(), # This requires OpenAI Key
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- *ImageAnalysisToolkit(model=models["image"]).get_tools(),
- *SearchToolkit().get_tools(),
- *ExcelToolkit().get_tools(),
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Initialize benchmark
- benchmark = GAIABenchmark(data_dir="data/gaia", save_to="results/result.json")
-
- # Print benchmark information
- print(f"Number of validation examples: {len(benchmark.valid)}")
- print(f"Number of test examples: {len(benchmark.test)}")
-
- # Run benchmark
- result = benchmark.run(
- on="valid",
- level=LEVEL,
- idx=test_idx,
- save_result=SAVE_RESULT,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- )
-
- # Output results
- logger.info(f"Correct: {result['correct']}, Total: {result['total']}")
- logger.info(f"Accuracy: {result['accuracy']}")
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_gemini.py b/examples/run_gemini.py
deleted file mode 100644
index 7efa938..0000000
--- a/examples/run_gemini.py
+++ /dev/null
@@ -1,144 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-import sys
-import pathlib
-from dotenv import load_dotenv
-from camel.models import ModelFactory
-from camel.toolkits import (
- CodeExecutionToolkit,
- ExcelToolkit,
- ImageAnalysisToolkit,
- SearchToolkit,
- BrowserToolkit,
- FileWriteToolkit,
-)
-from camel.types import ModelPlatformType, ModelType
-from camel.logger import set_log_level
-from camel.societies import RolePlaying
-
-from owl.utils import run_society, DocumentProcessingToolkit
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-
-def construct_society(question: str) -> RolePlaying:
- r"""Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- RolePlaying: A configured society of agents ready to address the question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.GEMINI,
- model_type=ModelType.GEMINI_2_5_PRO_EXP,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.GEMINI,
- model_type=ModelType.GEMINI_2_5_PRO_EXP,
- model_config_dict={"temperature": 0},
- ),
- "browsing": ModelFactory.create(
- model_platform=ModelPlatformType.GEMINI,
- model_type=ModelType.GEMINI_2_5_PRO_EXP,
- model_config_dict={"temperature": 0},
- ),
- "planning": ModelFactory.create(
- model_platform=ModelPlatformType.GEMINI,
- model_type=ModelType.GEMINI_2_5_PRO_EXP,
- model_config_dict={"temperature": 0},
- ),
- "video": ModelFactory.create(
- model_platform=ModelPlatformType.GEMINI,
- model_type=ModelType.GEMINI_2_5_PRO_EXP,
- model_config_dict={"temperature": 0},
- ),
- "image": ModelFactory.create(
- model_platform=ModelPlatformType.GEMINI,
- model_type=ModelType.GEMINI_2_5_PRO_EXP,
- model_config_dict={"temperature": 0},
- ),
- "document": ModelFactory.create(
- model_platform=ModelPlatformType.GEMINI,
- model_type=ModelType.GEMINI_2_5_PRO_EXP,
- model_config_dict={"temperature": 0},
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- ).get_tools(),
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- *ImageAnalysisToolkit(model=models["image"]).get_tools(),
- SearchToolkit().search_duckduckgo,
- SearchToolkit().search_google, # Comment this out if you don't have google search
- SearchToolkit().search_wiki,
- *ExcelToolkit().get_tools(),
- *DocumentProcessingToolkit(model=models["document"]).get_tools(),
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- )
-
- return society
-
-
-def main():
- r"""Main function to run the OWL system with an example question."""
- # Default research question
- default_task = "Open Brave search, summarize the github stars, fork counts, etc. of camel-ai's camel framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Construct and run the society
- society = construct_society(task)
- answer, chat_history, token_count = run_society(society)
-
- # Output the result
- print(f"\033[94mAnswer: {answer}\033[0m")
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_groq.py b/examples/run_groq.py
index 955ef88..1d7f637 100644
--- a/examples/run_groq.py
+++ b/examples/run_groq.py
@@ -1,7 +1,7 @@
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# You can obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
@@ -13,152 +13,211 @@
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
"""
-This module provides integration with the Groq API platform for the OWL system.
+Workforce example using Groq models.
+This module provides integration with the Groq API platform for the OWL system.
It configures different agent roles with appropriate Groq models based on their requirements:
-- Tool-intensive roles (assistant, web, planning, video, image) use GROQ_LLAMA_3_3_70B
-- Document processing uses GROQ_MIXTRAL_8_7B
-- Simple roles (user) use GROQ_LLAMA_3_1_8B
+- Tool-intensive roles use GROQ_LLAMA_3_3_70B
+- Simple roles use GROQ_LLAMA_3_1_8B
To use this module:
1. Set GROQ_API_KEY in your .env file
2. Set OPENAI_API_BASE_URL to "https://api.groq.com/openai/v1"
-3. Run with: python -m examples.run_groq
+3. Run with: python -m examples.run_workforce_groq
"""
import sys
+import pathlib
from dotenv import load_dotenv
from camel.models import ModelFactory
+from camel.agents import ChatAgent
from camel.toolkits import (
- AudioAnalysisToolkit,
+ FunctionTool,
CodeExecutionToolkit,
ExcelToolkit,
- ImageAnalysisToolkit,
SearchToolkit,
- VideoAnalysisToolkit,
- BrowserToolkit,
- FileWriteToolkit,
+ FileToolkit,
)
from camel.types import ModelPlatformType, ModelType
from camel.logger import set_log_level
+from camel.tasks.task import Task
-from owl.utils import OwlRolePlaying, run_society, DocumentProcessingToolkit
+from camel.societies import Workforce
-load_dotenv()
+from owl.utils import DocumentProcessingToolkit
+
+from typing import List, Dict, Any
+
+base_dir = pathlib.Path(__file__).parent.parent
+env_path = base_dir / "owl" / ".env"
+load_dotenv(dotenv_path=str(env_path))
set_log_level(level="DEBUG")
-def construct_society(question: str) -> OwlRolePlaying:
- r"""Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- OwlRolePlaying: A configured society of agents ready to address the question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.GROQ,
- model_type=ModelType.GROQ_LLAMA_3_1_8B, # Simple role, can use 8B model
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.GROQ,
- model_type=ModelType.GROQ_LLAMA_3_3_70B, # Main assistant needs tool capability
- model_config_dict={"temperature": 0},
- ),
- "browsing": ModelFactory.create(
- model_platform=ModelPlatformType.GROQ,
- model_type=ModelType.GROQ_LLAMA_3_3_70B, # Web browsing requires tool usage
- model_config_dict={"temperature": 0},
- ),
- "planning": ModelFactory.create(
- model_platform=ModelPlatformType.GROQ,
- model_type=ModelType.GROQ_LLAMA_3_3_70B, # Planning requires complex reasoning
- model_config_dict={"temperature": 0},
- ),
- "video": ModelFactory.create(
- model_platform=ModelPlatformType.GROQ,
- model_type=ModelType.GROQ_LLAMA_3_3_70B, # Video analysis is multimodal
- model_config_dict={"temperature": 0},
- ),
- "image": ModelFactory.create(
- model_platform=ModelPlatformType.GROQ,
- model_type=ModelType.GROQ_LLAMA_3_3_70B, # Image analysis is multimodal
- model_config_dict={"temperature": 0},
- ),
- "document": ModelFactory.create(
- model_platform=ModelPlatformType.GROQ,
- model_type=ModelType.GROQ_MIXTRAL_8_7B, # Document processing can use Mixtral
- model_config_dict={"temperature": 0},
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- ).get_tools(),
- *VideoAnalysisToolkit(model=models["video"]).get_tools(),
- *AudioAnalysisToolkit().get_tools(), # This requires OpenAI Key
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- *ImageAnalysisToolkit(model=models["image"]).get_tools(),
- SearchToolkit().search_duckduckgo,
- SearchToolkit().search_google, # Comment this out if you don't have google search
- SearchToolkit().search_wiki,
- *ExcelToolkit().get_tools(),
- *DocumentProcessingToolkit(model=models["document"]).get_tools(),
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = OwlRolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
+def construct_agent_list() -> List[Dict[str, Any]]:
+ """Construct a list of agents with their configurations."""
+
+ # Use larger models for tool-intensive roles
+ web_model = ModelFactory.create(
+ model_platform=ModelPlatformType.GROQ,
+ model_type=ModelType.GROQ_LLAMA_3_3_70B,
+ model_config_dict={"temperature": 0},
+ )
+
+ document_processing_model = ModelFactory.create(
+ model_platform=ModelPlatformType.GROQ,
+ model_type=ModelType.GROQ_LLAMA_3_3_70B,
+ model_config_dict={"temperature": 0},
+ )
+
+ reasoning_model = ModelFactory.create(
+ model_platform=ModelPlatformType.GROQ,
+ model_type=ModelType.GROQ_LLAMA_3_3_70B,
+ model_config_dict={"temperature": 0},
)
- return society
+ search_toolkit = SearchToolkit()
+ document_processing_toolkit = DocumentProcessingToolkit(model=document_processing_model)
+ code_runner_toolkit = CodeExecutionToolkit(sandbox="subprocess", verbose=True)
+ file_toolkit = FileToolkit()
+ excel_toolkit = ExcelToolkit()
+
+ web_agent = ChatAgent(
+ """You are a helpful assistant that can search the web, extract webpage content, and provide relevant information to solve the given task.
+Keep in mind that:
+- Do not be overly confident in your own knowledge. Searching can provide a broader perspective and help validate existing knowledge.
+- If one way fails to provide an answer, try other ways or methods. The answer does exist.
+- When looking for specific numerical values (e.g., dollar amounts), prioritize reliable sources.
+- When solving tasks that require web searches, check Wikipedia first before exploring other websites.
+- In your response, you should mention the urls you have visited and processed.
+
+Here are some tips that help you perform web search:
+- Never add too many keywords in your search query!
+- If the question is complex, search results typically do not provide precise answers. The search query should be concise and focuses on finding official sources rather than direct answers.
+- The results you return do not have to directly answer the original question, you only need to collect relevant information.
+""",
+ model=web_model,
+ tools=[
+ FunctionTool(search_toolkit.search_duckduckgo),
+ FunctionTool(search_toolkit.search_wiki),
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ ]
+ )
+
+ document_processing_agent = ChatAgent(
+ "You are a helpful assistant that can process documents and multimodal data, and can interact with file system.",
+ document_processing_model,
+ tools=[
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ FunctionTool(code_runner_toolkit.execute_code),
+ *file_toolkit.get_tools(),
+ ]
+ )
+
+ reasoning_coding_agent = ChatAgent(
+ "You are a helpful assistant that specializes in reasoning and coding, and can think step by step to solve the task. When necessary, you can write python code to solve the task. If you have written code, do not forget to execute the code. Never generate codes like 'example code', your code should be able to fully solve the task. You can also leverage multiple libraries, such as requests, BeautifulSoup, re, pandas, etc, to solve the task. For processing excel files, you should write codes to process them.",
+ reasoning_model,
+ tools=[
+ FunctionTool(code_runner_toolkit.execute_code),
+ FunctionTool(excel_toolkit.extract_excel_content),
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ ]
+ )
+
+ agent_list = []
+
+ web_agent_dict = {
+ "name": "Web Agent",
+ "description": "A helpful assistant that can search the web, extract webpage content, and retrieve relevant information.",
+ "agent": web_agent
+ }
+
+ document_processing_agent_dict = {
+ "name": "Document Processing Agent",
+ "description": "A helpful assistant that can process a variety of local and remote documents, including pdf, docx, images, audio, and video, etc.",
+ "agent": document_processing_agent
+ }
+
+ reasoning_coding_agent_dict = {
+ "name": "Reasoning Coding Agent",
+ "description": "A helpful assistant that specializes in reasoning, coding, and processing excel files. However, it cannot access the internet to search for information. If the task requires python execution, it should be informed to execute the code after writing it.",
+ "agent": reasoning_coding_agent
+ }
+
+ agent_list.append(web_agent_dict)
+ agent_list.append(document_processing_agent_dict)
+ agent_list.append(reasoning_coding_agent_dict)
+ return agent_list
+
+
+def construct_workforce() -> Workforce:
+ """Construct a workforce with coordinator and task agents."""
+
+ # Use smaller model for coordinator and task agent (they don't need tool capabilities)
+ coordinator_agent_kwargs = {
+ "model": ModelFactory.create(
+ model_platform=ModelPlatformType.GROQ,
+ model_type=ModelType.GROQ_LLAMA_3_1_8B,
+ model_config_dict={"temperature": 0},
+ )
+ }
+
+ task_agent_kwargs = {
+ "model": ModelFactory.create(
+ model_platform=ModelPlatformType.GROQ,
+ model_type=ModelType.GROQ_LLAMA_3_1_8B,
+ model_config_dict={"temperature": 0},
+ )
+ }
+
+ task_agent = ChatAgent(
+ "You are a helpful assistant that can decompose tasks and assign tasks to workers.",
+ **task_agent_kwargs
+ )
+
+ coordinator_agent = ChatAgent(
+ "You are a helpful assistant that can assign tasks to workers.",
+ **coordinator_agent_kwargs
+ )
+
+ workforce = Workforce(
+ "Workforce",
+ task_agent=task_agent,
+ coordinator_agent=coordinator_agent,
+ )
+
+ agent_list = construct_agent_list()
+
+ for agent_dict in agent_list:
+ workforce.add_single_agent_worker(
+ agent_dict["description"],
+ worker=agent_dict["agent"],
+ )
+
+ return workforce
def main():
r"""Main function to run the OWL system with an example question."""
- # Example research question
- default_task = "Open Brave search, summarize the github stars, fork counts, etc. of camel-ai's camel framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
-
- # Construct and run the society
- # Note: This configuration uses GROQ_LLAMA_3_3_70B for tool-intensive roles (assistant, web, planning, video, image)
- # and GROQ_MIXTRAL_8_7B for document processing. GROQ_LLAMA_3_1_8B is used only for the user role
- # which doesn't require tool usage capabilities.
-
+ # Default research question
+ default_task_prompt = "Summarize the github stars, fork counts, etc. of camel-ai's owl framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
+
# Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
+ task_prompt = sys.argv[1] if len(sys.argv) > 1 else default_task_prompt
+
+ task = Task(
+ content=task_prompt,
+ )
+
+ workforce = construct_workforce()
- # Construct and run the society
- society = construct_society(task)
- answer, chat_history, token_count = run_society(society)
+ processed_task = workforce.process_task(task)
# Output the result
- print(f"\033[94mAnswer: {answer}\033[0m")
+ print(f"\033[94mAnswer: {processed_task.result}\033[0m")
if __name__ == "__main__":
main()
+
diff --git a/examples/run_mcp.py b/examples/run_mcp.py
deleted file mode 100644
index 023b0d0..0000000
--- a/examples/run_mcp.py
+++ /dev/null
@@ -1,175 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-"""MCP Multi-Agent System Example
-
-This example demonstrates how to use MCP (Model Context Protocol) with CAMEL agents
-for advanced information retrieval and processing tasks.
-
-Environment Setup:
-1. Configure the required dependencies of owl library
- Refer to: https://github.com/camel-ai/owl for installation guide
-
-2. MCP Server Setup:
-
-
- 2.1 MCP Playwright Service:
- ```bash
- # Install MCP service
- npm install -g @executeautomation/playwright-mcp-server
- npx playwright install-deps
-
- # Configure in mcp_servers_config.json:
- {
- "mcpServers": {
- "playwright": {
- "command": "npx",
- "args": ["-y", "@executeautomation/playwright-mcp-server"]
- }
- }
- }
- ```
-
- 2.2 MCP Fetch Service (Optional - for better retrieval):
- ```bash
- # Install MCP service
- pip install mcp-server-fetch
-
- # Configure in mcp_servers_config.json:
- {
- "mcpServers": {
- "fetch": {
- "command": "python",
- "args": ["-m", "mcp_server_fetch"]
- }
- }
- }
- ```
-
-Usage:
-1. Ensure all MCP servers are properly configured in mcp_servers_config.json
-2. Run this script to create a multi-agent system that can:
- - Access and manipulate files through MCP Desktop Commander
- - Perform web automation tasks using Playwright
- - Process and generate information using GPT-4o
- - Fetch web content (if fetch service is configured)
-3. The system will execute the specified task while maintaining security through
- controlled access
-
-Note:
-- All file operations are restricted to configured directories
-- System uses GPT-4o for both user and assistant roles
-- Supports asynchronous operations for efficient processing
-"""
-
-import asyncio
-import sys
-from pathlib import Path
-from typing import List
-
-from dotenv import load_dotenv
-
-from camel.models import ModelFactory
-from camel.toolkits import FunctionTool
-from camel.types import ModelPlatformType, ModelType
-from camel.logger import set_log_level
-from camel.toolkits import MCPToolkit
-
-from owl.utils.enhanced_role_playing import OwlRolePlaying, arun_society
-
-import pathlib
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-
-async def construct_society(
- question: str,
- tools: List[FunctionTool],
-) -> OwlRolePlaying:
- r"""build a multi-agent OwlRolePlaying instance.
-
- Args:
- question (str): The question to ask.
- tools (List[FunctionTool]): The MCP tools to use.
- """
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- }
-
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {
- "model": models["assistant"],
- "tools": tools,
- }
-
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- society = OwlRolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- )
- return society
-
-
-async def main():
- config_path = Path(__file__).parent / "mcp_servers_config.json"
- mcp_toolkit = MCPToolkit(config_path=str(config_path))
-
- try:
- await mcp_toolkit.connect()
-
- # Default task
- default_task = (
- "I'd like a academic report about Andrew Ng, including "
- "his research direction, published papers (At least 3),"
- " institutions, etc. "
- )
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Connect to all MCP toolkits
- tools = [*mcp_toolkit.get_tools()]
- society = await construct_society(task, tools)
- answer, chat_history, token_count = await arun_society(society)
- print(f"\033[94mAnswer: {answer}\033[0m")
-
- finally:
- # Make sure to disconnect safely after all operations are completed.
- try:
- await mcp_toolkit.disconnect()
- except Exception:
- print("Disconnect failed")
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/run_mcp_sse.py b/examples/run_mcp_sse.py
deleted file mode 100644
index 272b724..0000000
--- a/examples/run_mcp_sse.py
+++ /dev/null
@@ -1,121 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-import asyncio
-import sys
-from pathlib import Path
-from typing import List
-
-from dotenv import load_dotenv
-
-from camel.models import ModelFactory
-from camel.toolkits import FunctionTool
-from camel.types import ModelPlatformType, ModelType
-from camel.logger import set_log_level
-from camel.toolkits import MCPToolkit
-
-from owl.utils.enhanced_role_playing import OwlRolePlaying, arun_society
-
-import pathlib
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-
-async def construct_society(
- question: str,
- tools: List[FunctionTool],
-) -> OwlRolePlaying:
- r"""Build a multi-agent OwlRolePlaying instance for GitHub information retrieval.
-
- Args:
- question (str): The GitHub-related question to ask.
- tools (List[FunctionTool]): The MCP tools to use for GitHub interaction.
- """
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- }
-
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {
- "model": models["assistant"],
- "tools": tools,
- }
-
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- society = OwlRolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- )
- return society
-
-
-async def main():
- # Load SSE server configuration
- config_path = Path(__file__).parent / "mcp_sse_config.json"
- mcp_toolkit = MCPToolkit(config_path=str(config_path))
-
- try:
- # Connect to MCP server
- await mcp_toolkit.connect()
- print("Successfully connected to SSE server")
-
- # Get available tools
- tools = [*mcp_toolkit.get_tools()]
-
- # Set default task - a simple example query
- default_task = (
- "What are the most recent pull requests in camel-ai/camel repository?"
- )
-
- # Use command line argument if provided, otherwise use default task
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Build and run society
- society = await construct_society(task, tools)
- answer, chat_history, token_count = await arun_society(society)
- print(f"\nResult: {answer}")
-
- except KeyboardInterrupt:
- print("\nReceived exit signal, shutting down...")
- except Exception as e:
- print(f"Error occurred: {e}")
- finally:
- # Ensure safe disconnection
- try:
- await mcp_toolkit.disconnect()
- except Exception as e:
- print(f"Error during disconnect: {e}")
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/run_mini.py b/examples/run_mini.py
deleted file mode 100644
index b5924b7..0000000
--- a/examples/run_mini.py
+++ /dev/null
@@ -1,127 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-import sys
-from dotenv import load_dotenv
-
-from camel.models import ModelFactory
-from camel.toolkits import (
- SearchToolkit,
- BrowserToolkit,
- FileWriteToolkit,
- CodeExecutionToolkit,
-)
-from camel.types import ModelPlatformType, ModelType
-from camel.logger import set_log_level
-
-from owl.utils import run_society
-
-from camel.societies import RolePlaying
-
-import pathlib
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-
-def construct_society(question: str) -> RolePlaying:
- r"""Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- RolePlaying: A configured society of agents ready to address the
- question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "browsing": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "planning": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- ).get_tools(),
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- SearchToolkit().search_duckduckgo,
- SearchToolkit().search_wiki,
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- )
-
- return society
-
-
-def main():
- r"""Main function to run the OWL system with an example question."""
- # Default research question
- default_task = "Open Brave search, summarize the github stars, fork counts, etc. of camel-ai's camel framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Construct and run the society
- society = construct_society(task)
- answer, chat_history, token_count = run_society(society)
-
- # Output the result
- print(f"\033[94mAnswer: {answer}\033[0m")
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_mistral.py b/examples/run_mistral.py
deleted file mode 100644
index 16fe543..0000000
--- a/examples/run_mistral.py
+++ /dev/null
@@ -1,180 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-"""MCP Multi-Agent System Example
-
-This example demonstrates how to use MCP (Model Context Protocol) with CAMEL agents
-for advanced information retrieval and processing tasks.
-
-Environment Setup:
-1. Configure the required dependencies of owl library
- Refer to: https://github.com/camel-ai/owl for installation guide
-
-2. MCP Server Setup:
-
-
- 2.1 MCP Playwright Service:
- ```bash
- # Install MCP service
- npm install -g @executeautomation/playwright-mcp-server
- npx playwright install-deps
-
- # Configure in mcp_servers_config.json:
- {
- "mcpServers": {
- "playwright": {
- "command": "npx",
- "args": ["-y", "@executeautomation/playwright-mcp-server"]
- }
- }
- }
- ```
-
- 2.2 MCP Fetch Service (Optional - for better retrieval):
- ```bash
- # Install MCP service
- pip install mcp-server-fetch
-
- # Configure in mcp_servers_config.json:
- {
- "mcpServers": {
- "fetch": {
- "command": "python",
- "args": ["-m", "mcp_server_fetch"]
- }
- }
- }
- ```
-
-Usage:
-1. Ensure all MCP servers are properly configured in mcp_servers_config.json
-2. Run this script to create a multi-agent system that can:
- - Access and manipulate files through MCP Desktop Commander
- - Perform web automation tasks using Playwright
- - Process and generate information using Mistral
- - Fetch web content (if fetch service is configured)
-3. The system will execute the specified task while maintaining security through
- controlled access
-
-Note:
-- All file operations are restricted to configured directories
-- Supports asynchronous operations for efficient processing
-"""
-
-import asyncio
-import sys
-from pathlib import Path
-from typing import List
-
-from dotenv import load_dotenv
-
-from camel.models import ModelFactory
-from camel.toolkits import FunctionTool
-from camel.types import ModelPlatformType, ModelType
-from camel.logger import set_log_level
-from camel.toolkits import MCPToolkit, FileWriteToolkit, CodeExecutionToolkit
-from camel.societies import RolePlaying
-
-from owl.utils.enhanced_role_playing import arun_society
-
-import pathlib
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-
-async def construct_society(
- question: str,
- tools: List[FunctionTool],
-) -> RolePlaying:
- r"""build a multi-agent RolePlaying instance.
-
- Args:
- question (str): The question to ask.
- tools (List[FunctionTool]): The MCP tools to use.
- """
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.MISTRAL,
- model_type=ModelType.MISTRAL_MEDIUM_3,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.MISTRAL,
- model_type=ModelType.MISTRAL_LARGE,
- model_config_dict={"temperature": 0},
- ),
- }
-
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {
- "model": models["assistant"],
- "tools": tools,
- }
-
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- )
- return society
-
-
-async def main():
- config_path = Path(__file__).parent / "mcp_servers_config.json"
- mcp_toolkit = MCPToolkit(config_path=str(config_path))
-
- try:
- await mcp_toolkit.connect()
-
- # Default task
- default_task = (
- "Help me search the latest reports about smart city, "
- "summarize them and help me generate a PDF file. You have "
- "been provided with tools to do browser operation. Open "
- "browser to finish the task."
- )
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Connect to toolkits
- tools = [
- *mcp_toolkit.get_tools(),
- *FileWriteToolkit().get_tools(),
- *CodeExecutionToolkit().get_tools(),
- ]
- society = await construct_society(task, tools)
- answer, chat_history, token_count = await arun_society(society)
- print(f"\033[94mAnswer: {answer}\033[0m")
-
- finally:
- # Make sure to disconnect safely after all operations are completed.
- try:
- await mcp_toolkit.disconnect()
- except Exception:
- print("Disconnect failed")
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/run_novita_ai.py b/examples/run_novita_ai.py
deleted file mode 100644
index 3f6a768..0000000
--- a/examples/run_novita_ai.py
+++ /dev/null
@@ -1,135 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-import sys
-import pathlib
-from dotenv import load_dotenv
-from camel.models import ModelFactory
-from camel.toolkits import (
- CodeExecutionToolkit,
- ExcelToolkit,
- ImageAnalysisToolkit,
- BrowserToolkit,
- FileWriteToolkit,
-)
-from camel.types import ModelPlatformType, ModelType
-from camel.logger import set_log_level
-from camel.societies import RolePlaying
-
-from owl.utils import run_society, DocumentProcessingToolkit
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-
-def construct_society(question: str) -> RolePlaying:
- r"""Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- RolePlaying: A configured society of agents ready to address the question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.NOVITA,
- model_type=ModelType.NOVITA_LLAMA_4_SCOUT_17B,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.NOVITA,
- model_type=ModelType.NOVITA_LLAMA_4_SCOUT_17B,
- model_config_dict={"temperature": 0},
- ),
- "browsing": ModelFactory.create(
- model_platform=ModelPlatformType.NOVITA,
- model_type=ModelType.NOVITA_LLAMA_4_SCOUT_17B,
- model_config_dict={"temperature": 0},
- ),
- "planning": ModelFactory.create(
- model_platform=ModelPlatformType.NOVITA,
- model_type=ModelType.NOVITA_LLAMA_4_SCOUT_17B,
- model_config_dict={"temperature": 0},
- ),
- "image": ModelFactory.create(
- model_platform=ModelPlatformType.NOVITA,
- model_type=ModelType.NOVITA_LLAMA_4_SCOUT_17B,
- model_config_dict={"temperature": 0},
- ),
- "document": ModelFactory.create(
- model_platform=ModelPlatformType.NOVITA,
- model_type=ModelType.NOVITA_LLAMA_4_SCOUT_17B,
- model_config_dict={"temperature": 0},
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- ).get_tools(),
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- *ImageAnalysisToolkit(model=models["image"]).get_tools(),
- *ExcelToolkit().get_tools(),
- *DocumentProcessingToolkit(model=models["document"]).get_tools(),
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- )
-
- return society
-
-
-def main():
- r"""Main function to run the OWL system with an example question."""
- # Default research question
- default_task = "Open Brave search, summarize the github stars, fork counts, etc. of camel-ai's camel framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Construct and run the society
- society = construct_society(task)
- answer, chat_history, token_count = run_society(society)
-
- # Output the result
- print(f"\033[94mAnswer: {answer}\033[0m")
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_ollama.py b/examples/run_ollama.py
deleted file mode 100644
index 2ff5357..0000000
--- a/examples/run_ollama.py
+++ /dev/null
@@ -1,143 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# run_ollama.py by tj-scripts(https://github.com/tj-scripts)
-
-import sys
-from dotenv import load_dotenv
-from camel.models import ModelFactory
-from camel.toolkits import (
- CodeExecutionToolkit,
- ExcelToolkit,
- ImageAnalysisToolkit,
- SearchToolkit,
- BrowserToolkit,
- FileWriteToolkit,
-)
-from camel.types import ModelPlatformType
-
-from owl.utils import run_society
-
-from camel.societies import RolePlaying
-
-from camel.logger import set_log_level
-
-import pathlib
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-
-def construct_society(question: str) -> RolePlaying:
- r"""Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- RolePlaying: A configured society of agents ready to address the question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.OLLAMA,
- model_type="qwen2.5:72b",
- url="http://localhost:11434/v1",
- model_config_dict={"temperature": 0.8, "max_tokens": 1000000},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.OLLAMA,
- model_type="qwen2.5:72b",
- url="http://localhost:11434/v1",
- model_config_dict={"temperature": 0.2, "max_tokens": 1000000},
- ),
- "browsing": ModelFactory.create(
- model_platform=ModelPlatformType.OLLAMA,
- model_type="llava:latest",
- url="http://localhost:11434/v1",
- model_config_dict={"temperature": 0.4, "max_tokens": 1000000},
- ),
- "planning": ModelFactory.create(
- model_platform=ModelPlatformType.OLLAMA,
- model_type="qwen2.5:72b",
- url="http://localhost:11434/v1",
- model_config_dict={"temperature": 0.4, "max_tokens": 1000000},
- ),
- "image": ModelFactory.create(
- model_platform=ModelPlatformType.OLLAMA,
- model_type="llava:latest",
- url="http://localhost:11434/v1",
- model_config_dict={"temperature": 0.4, "max_tokens": 1000000},
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- ).get_tools(),
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- *ImageAnalysisToolkit(model=models["image"]).get_tools(),
- SearchToolkit().search_duckduckgo,
- # SearchToolkit().search_google, # Comment this out if you don't have google search
- SearchToolkit().search_wiki,
- *ExcelToolkit().get_tools(),
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- )
-
- return society
-
-
-def main():
- r"""Main function to run the OWL system with an example question."""
- # Default research question
- default_task = "Open Brave search, summarize the github stars, fork counts, etc. of camel-ai's camel framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Construct and run the society
- society = construct_society(task)
- answer, chat_history, token_count = run_society(society)
-
- # Output the result
- print(f"\033[94mAnswer: {answer}\033[0m")
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_openai_compatible_model.py b/examples/run_openai_compatible_model.py
deleted file mode 100644
index 0cc4693..0000000
--- a/examples/run_openai_compatible_model.py
+++ /dev/null
@@ -1,147 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-import os
-import sys
-
-from dotenv import load_dotenv
-from camel.models import ModelFactory
-from camel.toolkits import (
- CodeExecutionToolkit,
- ExcelToolkit,
- ImageAnalysisToolkit,
- SearchToolkit,
- BrowserToolkit,
- FileWriteToolkit,
-)
-from camel.types import ModelPlatformType
-
-from owl.utils import run_society
-from camel.societies import RolePlaying
-from camel.logger import set_log_level
-
-import pathlib
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-
-def construct_society(question: str) -> RolePlaying:
- r"""Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- RolePlaying: A configured society of agents ready to address the question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
- model_type="qwen-max",
- api_key=os.getenv("QWEN_API_KEY"),
- url="https://dashscope.aliyuncs.com/compatible-mode/v1",
- model_config_dict={"temperature": 0.4, "max_tokens": 128000},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
- model_type="qwen-max",
- api_key=os.getenv("QWEN_API_KEY"),
- url="https://dashscope.aliyuncs.com/compatible-mode/v1",
- model_config_dict={"temperature": 0.4, "max_tokens": 128000},
- ),
- "browsing": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
- model_type="qwen-vl-max",
- api_key=os.getenv("QWEN_API_KEY"),
- url="https://dashscope.aliyuncs.com/compatible-mode/v1",
- model_config_dict={"temperature": 0.4, "max_tokens": 128000},
- ),
- "planning": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
- model_type="qwen-max",
- api_key=os.getenv("QWEN_API_KEY"),
- url="https://dashscope.aliyuncs.com/compatible-mode/v1",
- model_config_dict={"temperature": 0.4, "max_tokens": 128000},
- ),
- "image": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
- model_type="qwen-vl-max",
- api_key=os.getenv("QWEN_API_KEY"),
- url="https://dashscope.aliyuncs.com/compatible-mode/v1",
- model_config_dict={"temperature": 0.4, "max_tokens": 128000},
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- ).get_tools(),
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- *ImageAnalysisToolkit(model=models["image"]).get_tools(),
- SearchToolkit().search_duckduckgo,
- SearchToolkit().search_google, # Comment this out if you don't have google search
- SearchToolkit().search_wiki,
- *ExcelToolkit().get_tools(),
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- )
-
- return society
-
-
-def main():
- r"""Main function to run the OWL system with an example question."""
- # Example research question
- default_task = "Open Brave search, summarize the github stars, fork counts, etc. of camel-ai's camel framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Construct and run the society
- society = construct_society(task)
-
- answer, chat_history, token_count = run_society(society)
-
- # Output the result
- print(f"\033[94mAnswer: {answer}\033[0m")
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_ppio.py b/examples/run_ppio.py
deleted file mode 100644
index 23c6734..0000000
--- a/examples/run_ppio.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-
-
-# To run this file, you need to configure the PPIO API key
-# You can obtain your API key from PPIO platform: https://ppinfra.com/settings/key-management?utm_source=github_owl
-# Set it as PPIO_API_KEY="your-api-key" in your .env file or add it to your environment variables
-
-import sys
-from dotenv import load_dotenv
-
-from camel.models import ModelFactory
-from camel.toolkits import (
- ExcelToolkit,
- SearchToolkit,
- FileWriteToolkit,
- CodeExecutionToolkit,
-)
-from camel.types import ModelPlatformType, ModelType
-from camel.societies import RolePlaying
-from camel.logger import set_log_level
-
-from owl.utils import run_society
-
-import pathlib
-
-set_log_level(level="DEBUG")
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-
-def construct_society(question: str) -> RolePlaying:
- r"""Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- RolePlaying: A configured society of agents ready to address the question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.PPIO,
- model_type=ModelType.PPIO_DEEPSEEK_V3_COMMUNITY,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.PPIO,
- model_type=ModelType.PPIO_DEEPSEEK_V3_COMMUNITY,
- model_config_dict={"temperature": 0},
- ),
- }
-
- # Configure toolkits
- tools = [
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- SearchToolkit().search_duckduckgo,
- SearchToolkit().search_wiki,
- SearchToolkit().search_baidu,
- *ExcelToolkit().get_tools(),
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- output_language="Chinese",
- )
-
- return society
-
-
-def main():
- r"""Main function to run the OWL system with an example question."""
- # Example research question
- default_task = "使用百度整理2023年1月1日到2023年12月31日,中国股市的涨跌情况。"
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Construct and run the society
- society = construct_society(task)
-
- answer, chat_history, token_count = run_society(society)
-
- # Output the result
- print(f"\033[94mAnswer: {answer}\033[0m")
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_qwen.py b/examples/run_qwen.py
new file mode 100644
index 0000000..31f2d6c
--- /dev/null
+++ b/examples/run_qwen.py
@@ -0,0 +1,234 @@
+# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You can obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
+
+"""
+Workforce example using Qwen models from Alibaba Cloud.
+
+To run this file, you need to configure the Qwen API key.
+You can obtain your API key from Bailian platform: bailian.console.aliyun.com
+Set it as QWEN_API_KEY="your-api-key" in your .env file or add it to your environment variables.
+
+Qwen models support:
+- QWEN_MAX: For text-based tasks
+- QWEN_VL_MAX: For vision-language tasks (multimodal)
+"""
+
+import sys
+import pathlib
+from dotenv import load_dotenv
+from camel.models import ModelFactory
+from camel.agents import ChatAgent
+from camel.toolkits import (
+ FunctionTool,
+ CodeExecutionToolkit,
+ ExcelToolkit,
+ ImageAnalysisToolkit,
+ SearchToolkit,
+ VideoAnalysisToolkit,
+ FileToolkit,
+)
+from camel.types import ModelPlatformType, ModelType
+from camel.logger import set_log_level
+from camel.tasks.task import Task
+
+from camel.societies import Workforce
+
+from owl.utils import DocumentProcessingToolkit
+
+from typing import List, Dict, Any
+
+base_dir = pathlib.Path(__file__).parent.parent
+env_path = base_dir / "owl" / ".env"
+load_dotenv(dotenv_path=str(env_path))
+
+set_log_level(level="DEBUG")
+
+
+def construct_agent_list() -> List[Dict[str, Any]]:
+ """Construct a list of agents with their configurations."""
+
+ # Use QWEN_MAX for text-based tasks
+ web_model = ModelFactory.create(
+ model_platform=ModelPlatformType.QWEN,
+ model_type=ModelType.QWEN_MAX,
+ model_config_dict={"temperature": 0},
+ )
+
+ # Use QWEN_VL_MAX for document processing (supports multimodal)
+ document_processing_model = ModelFactory.create(
+ model_platform=ModelPlatformType.QWEN,
+ model_type=ModelType.QWEN_VL_MAX,
+ model_config_dict={"temperature": 0},
+ )
+
+ # Use QWEN_MAX for reasoning tasks
+ reasoning_model = ModelFactory.create(
+ model_platform=ModelPlatformType.QWEN,
+ model_type=ModelType.QWEN_MAX,
+ model_config_dict={"temperature": 0},
+ )
+
+ # Use QWEN_VL_MAX for image analysis
+ image_analysis_model = ModelFactory.create(
+ model_platform=ModelPlatformType.QWEN,
+ model_type=ModelType.QWEN_VL_MAX,
+ model_config_dict={"temperature": 0},
+ )
+
+ search_toolkit = SearchToolkit()
+ document_processing_toolkit = DocumentProcessingToolkit(model=document_processing_model)
+ image_analysis_toolkit = ImageAnalysisToolkit(model=image_analysis_model)
+ code_runner_toolkit = CodeExecutionToolkit(sandbox="subprocess", verbose=True)
+ file_toolkit = FileToolkit()
+ excel_toolkit = ExcelToolkit()
+
+ web_agent = ChatAgent(
+ """You are a helpful assistant that can search the web, extract webpage content, and provide relevant information to solve the given task.
+Keep in mind that:
+- Do not be overly confident in your own knowledge. Searching can provide a broader perspective and help validate existing knowledge.
+- If one way fails to provide an answer, try other ways or methods. The answer does exist.
+- When looking for specific numerical values (e.g., dollar amounts), prioritize reliable sources.
+- When solving tasks that require web searches, check Wikipedia first before exploring other websites.
+- In your response, you should mention the urls you have visited and processed.
+
+Here are some tips that help you perform web search:
+- Never add too many keywords in your search query!
+- If the question is complex, search results typically do not provide precise answers. The search query should be concise and focuses on finding official sources rather than direct answers.
+- The results you return do not have to directly answer the original question, you only need to collect relevant information.
+""",
+ model=web_model,
+ tools=[
+ FunctionTool(search_toolkit.search_duckduckgo),
+ FunctionTool(search_toolkit.search_wiki),
+ FunctionTool(search_toolkit.search_baidu),
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ ]
+ )
+
+ document_processing_agent = ChatAgent(
+ "You are a helpful assistant that can process documents and multimodal data, and can interact with file system.",
+ document_processing_model,
+ tools=[
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ FunctionTool(image_analysis_toolkit.ask_question_about_image),
+ FunctionTool(code_runner_toolkit.execute_code),
+ *file_toolkit.get_tools(),
+ ]
+ )
+
+ reasoning_coding_agent = ChatAgent(
+ "You are a helpful assistant that specializes in reasoning and coding, and can think step by step to solve the task. When necessary, you can write python code to solve the task. If you have written code, do not forget to execute the code. Never generate codes like 'example code', your code should be able to fully solve the task. You can also leverage multiple libraries, such as requests, BeautifulSoup, re, pandas, etc, to solve the task. For processing excel files, you should write codes to process them.",
+ reasoning_model,
+ tools=[
+ FunctionTool(code_runner_toolkit.execute_code),
+ FunctionTool(excel_toolkit.extract_excel_content),
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ ]
+ )
+
+ agent_list = []
+
+ web_agent_dict = {
+ "name": "Web Agent",
+ "description": "A helpful assistant that can search the web, extract webpage content, and retrieve relevant information.",
+ "agent": web_agent
+ }
+
+ document_processing_agent_dict = {
+ "name": "Document Processing Agent",
+ "description": "A helpful assistant that can process a variety of local and remote documents, including pdf, docx, images, audio, and video, etc.",
+ "agent": document_processing_agent
+ }
+
+ reasoning_coding_agent_dict = {
+ "name": "Reasoning Coding Agent",
+ "description": "A helpful assistant that specializes in reasoning, coding, and processing excel files. However, it cannot access the internet to search for information. If the task requires python execution, it should be informed to execute the code after writing it.",
+ "agent": reasoning_coding_agent
+ }
+
+ agent_list.append(web_agent_dict)
+ agent_list.append(document_processing_agent_dict)
+ agent_list.append(reasoning_coding_agent_dict)
+ return agent_list
+
+
+def construct_workforce() -> Workforce:
+ """Construct a workforce with coordinator and task agents."""
+
+ coordinator_agent_kwargs = {
+ "model": ModelFactory.create(
+ model_platform=ModelPlatformType.QWEN,
+ model_type=ModelType.QWEN_MAX,
+ model_config_dict={"temperature": 0},
+ )
+ }
+
+ task_agent_kwargs = {
+ "model": ModelFactory.create(
+ model_platform=ModelPlatformType.QWEN,
+ model_type=ModelType.QWEN_MAX,
+ model_config_dict={"temperature": 0},
+ )
+ }
+
+ task_agent = ChatAgent(
+ "You are a helpful assistant that can decompose tasks and assign tasks to workers.",
+ **task_agent_kwargs
+ )
+
+ coordinator_agent = ChatAgent(
+ "You are a helpful assistant that can assign tasks to workers.",
+ **coordinator_agent_kwargs
+ )
+
+ workforce = Workforce(
+ "Workforce",
+ task_agent=task_agent,
+ coordinator_agent=coordinator_agent,
+ )
+
+ agent_list = construct_agent_list()
+
+ for agent_dict in agent_list:
+ workforce.add_single_agent_worker(
+ agent_dict["description"],
+ worker=agent_dict["agent"],
+ )
+
+ return workforce
+
+
+def main():
+ r"""Main function to run the OWL system with an example question."""
+ # Default research question
+ default_task_prompt = "Summarize the github stars, fork counts, etc. of camel-ai's owl framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
+
+ # Override default task if command line argument is provided
+ task_prompt = sys.argv[1] if len(sys.argv) > 1 else default_task_prompt
+
+ task = Task(
+ content=task_prompt,
+ )
+
+ workforce = construct_workforce()
+
+ processed_task = workforce.process_task(task)
+
+ # Output the result
+ print(f"\033[94mAnswer: {processed_task.result}\033[0m")
+
+
+if __name__ == "__main__":
+ main()
+
diff --git a/examples/run_qwen_mini_zh.py b/examples/run_qwen_mini_zh.py
deleted file mode 100644
index bd9f1a5..0000000
--- a/examples/run_qwen_mini_zh.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-
-# To run this file, you need to configure the Qwen API key
-# You can obtain your API key from Bailian platform: bailian.console.aliyun.com
-# Set it as QWEN_API_KEY="your-api-key" in your .env file or add it to your environment variables
-
-import sys
-from dotenv import load_dotenv
-from camel.models import ModelFactory
-from camel.toolkits import (
- SearchToolkit,
- BrowserToolkit,
- FileWriteToolkit,
-)
-from camel.types import ModelPlatformType, ModelType
-from camel.societies import RolePlaying
-
-from owl.utils import run_society
-
-from camel.logger import set_log_level
-
-
-import pathlib
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-
-def construct_society(question: str) -> RolePlaying:
- """
- Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- RolePlaying: A configured society of agents ready to address the question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.QWEN,
- model_type=ModelType.QWEN_MAX,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.QWEN,
- model_type=ModelType.QWEN_MAX,
- model_config_dict={"temperature": 0},
- ),
- "browsing": ModelFactory.create(
- model_platform=ModelPlatformType.QWEN,
- model_type=ModelType.QWEN_VL_MAX,
- model_config_dict={"temperature": 0},
- ),
- "planning": ModelFactory.create(
- model_platform=ModelPlatformType.QWEN,
- model_type=ModelType.QWEN_MAX,
- model_config_dict={"temperature": 0},
- ),
- "video": ModelFactory.create(
- model_platform=ModelPlatformType.QWEN,
- model_type=ModelType.QWEN_VL_MAX,
- model_config_dict={"temperature": 0},
- ),
- "image": ModelFactory.create(
- model_platform=ModelPlatformType.QWEN,
- model_type=ModelType.QWEN_VL_MAX,
- model_config_dict={"temperature": 0},
- ),
- "document": ModelFactory.create(
- model_platform=ModelPlatformType.QWEN,
- model_type=ModelType.QWEN_VL_MAX,
- model_config_dict={"temperature": 0},
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- output_language="Chinese",
- ).get_tools(),
- SearchToolkit().search_baidu,
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- output_language="Chinese",
- )
-
- return society
-
-
-def main():
- r"""Main function to run the OWL system with an example question."""
- # Example research question
- default_task = "浏览亚马逊并找出一款对程序员有吸引力的产品。请提供产品名称和价格"
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Construct and run the society
- society = construct_society(task)
- answer, chat_history, token_count = run_society(society)
-
- # Output the result
- print(f"\033[94mAnswer: {answer}\033[0m")
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_qwen_zh.py b/examples/run_qwen_zh.py
deleted file mode 100644
index a34c77f..0000000
--- a/examples/run_qwen_zh.py
+++ /dev/null
@@ -1,158 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-
-# To run this file, you need to configure the Qwen API key
-# You can obtain your API key from Bailian platform: bailian.console.aliyun.com
-# Set it as QWEN_API_KEY="your-api-key" in your .env file or add it to your environment variables
-
-import sys
-from dotenv import load_dotenv
-from camel.models import ModelFactory
-from camel.toolkits import (
- CodeExecutionToolkit,
- ExcelToolkit,
- ImageAnalysisToolkit,
- SearchToolkit,
- VideoAnalysisToolkit,
- BrowserToolkit,
- FileWriteToolkit,
-)
-from camel.types import ModelPlatformType, ModelType
-from camel.societies import RolePlaying
-
-from owl.utils import run_society, DocumentProcessingToolkit
-
-from camel.logger import set_log_level
-
-
-import pathlib
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-
-def construct_society(question: str) -> RolePlaying:
- """
- Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- RolePlaying: A configured society of agents ready to address the question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.QWEN,
- model_type=ModelType.QWEN_MAX,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.QWEN,
- model_type=ModelType.QWEN_MAX,
- model_config_dict={"temperature": 0},
- ),
- "browsing": ModelFactory.create(
- model_platform=ModelPlatformType.QWEN,
- model_type=ModelType.QWEN_VL_MAX,
- model_config_dict={"temperature": 0},
- ),
- "planning": ModelFactory.create(
- model_platform=ModelPlatformType.QWEN,
- model_type=ModelType.QWEN_MAX,
- model_config_dict={"temperature": 0},
- ),
- "video": ModelFactory.create(
- model_platform=ModelPlatformType.QWEN,
- model_type=ModelType.QWEN_VL_MAX,
- model_config_dict={"temperature": 0},
- ),
- "image": ModelFactory.create(
- model_platform=ModelPlatformType.QWEN,
- model_type=ModelType.QWEN_VL_MAX,
- model_config_dict={"temperature": 0},
- ),
- "document": ModelFactory.create(
- model_platform=ModelPlatformType.QWEN,
- model_type=ModelType.QWEN_VL_MAX,
- model_config_dict={"temperature": 0},
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- output_language="Chinese",
- ).get_tools(),
- *VideoAnalysisToolkit(model=models["video"]).get_tools(),
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- *ImageAnalysisToolkit(model=models["image"]).get_tools(),
- SearchToolkit().search_duckduckgo,
- SearchToolkit().search_google, # Comment this out if you don't have google search
- SearchToolkit().search_wiki,
- SearchToolkit().search_baidu,
- *ExcelToolkit().get_tools(),
- *DocumentProcessingToolkit(model=models["document"]).get_tools(),
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- output_language="Chinese",
- )
-
- return society
-
-
-def main():
- r"""Main function to run the OWL system with an example question."""
- # Example research question
- default_task = "浏览亚马逊并找出一款对程序员有吸引力的产品。请提供产品名称和价格"
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Construct and run the society
- society = construct_society(task)
- answer, chat_history, token_count = run_society(society)
-
- # Output the result
- print(f"\033[94mAnswer: {answer}\033[0m")
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_terminal.py b/examples/run_terminal.py
deleted file mode 100644
index 2d47dd3..0000000
--- a/examples/run_terminal.py
+++ /dev/null
@@ -1,131 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-from dotenv import load_dotenv
-import sys
-import os
-from camel.models import ModelFactory
-from camel.toolkits import (
- SearchToolkit,
- BrowserToolkit,
- FileWriteToolkit,
- TerminalToolkit,
-)
-from camel.types import ModelPlatformType, ModelType
-from camel.logger import set_log_level
-
-from owl.utils import run_society
-from camel.societies import RolePlaying
-
-import pathlib
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-
-def construct_society(question: str) -> RolePlaying:
- r"""Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- RolePlaying: A configured society of agents ready to address the
- question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "browsing": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "planning": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- ).get_tools(),
- SearchToolkit().search_duckduckgo,
- SearchToolkit().search_wiki,
- *FileWriteToolkit(output_dir="./").get_tools(),
- *TerminalToolkit().get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- )
-
- return society
-
-
-def main():
- r"""Main function to run the OWL system with an example question."""
- # Example research question
- default_task = f"""Open Google Search, summarize the number of GitHub stars, forks, etc., of the camel framework of camel-ai,
- and write the numbers into a Python file using the plot package,
- save it to "+{os.path.join(base_dir, 'final_output')}+",
- and execute the Python file with the local terminal to display the graph for me."""
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Construct and run the society
- society = construct_society(task)
- answer, chat_history, token_count = run_society(society)
-
- # Output the result
- print(
- f"\033[94mAnswer: {answer}\nChat History: {chat_history}\ntoken_count:{token_count}\033[0m"
- )
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_terminal_zh.py b/examples/run_terminal_zh.py
deleted file mode 100644
index 46fb30a..0000000
--- a/examples/run_terminal_zh.py
+++ /dev/null
@@ -1,129 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-from dotenv import load_dotenv
-import sys
-import os
-from camel.models import ModelFactory
-from camel.toolkits import (
- SearchToolkit,
- BrowserToolkit,
- FileWriteToolkit,
- TerminalToolkit,
-)
-from camel.types import ModelPlatformType, ModelType
-from camel.logger import set_log_level
-
-from owl.utils import run_society
-from camel.societies import RolePlaying
-
-import pathlib
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-
-def construct_society(question: str) -> RolePlaying:
- r"""Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- RolePlaying: A configured society of agents ready to address the
- question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "browsing": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- "planning": ModelFactory.create(
- model_platform=ModelPlatformType.OPENAI,
- model_type=ModelType.GPT_4O,
- model_config_dict={"temperature": 0},
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- ).get_tools(),
- SearchToolkit().search_duckduckgo,
- SearchToolkit().search_wiki,
- *FileWriteToolkit(output_dir="./").get_tools(),
- *TerminalToolkit().get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- )
-
- return society
-
-
-def main():
- r"""Main function to run the OWL system with an example question."""
- # Example research question
- default_task = f"""打开百度搜索,总结一下camel-ai的camel框架的github star、fork数目等,并把数字用plot包写成python文件保存到"+{os.path.join
-(base_dir, 'final_output')}+",用本地终端执行python文件显示图出来给我"""
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Construct and run the society
- society = construct_society(task)
- answer, chat_history, token_count = run_society(society)
-
- # Output the result
- print(
- f"\033[94mAnswer: {answer}\nChat History: {chat_history}\ntoken_count:{token_count}\033[0m"
- )
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_together_ai.py b/examples/run_together_ai.py
deleted file mode 100644
index 7f60931..0000000
--- a/examples/run_together_ai.py
+++ /dev/null
@@ -1,135 +0,0 @@
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
-import sys
-import pathlib
-from dotenv import load_dotenv
-from camel.models import ModelFactory
-from camel.toolkits import (
- CodeExecutionToolkit,
- ExcelToolkit,
- ImageAnalysisToolkit,
- BrowserToolkit,
- FileWriteToolkit,
-)
-from camel.types import ModelPlatformType, ModelType
-from camel.logger import set_log_level
-from camel.societies import RolePlaying
-
-from owl.utils import run_society, DocumentProcessingToolkit
-
-base_dir = pathlib.Path(__file__).parent.parent
-env_path = base_dir / "owl" / ".env"
-load_dotenv(dotenv_path=str(env_path))
-
-set_log_level(level="DEBUG")
-
-
-def construct_society(question: str) -> RolePlaying:
- r"""Construct a society of agents based on the given question.
-
- Args:
- question (str): The task or question to be addressed by the society.
-
- Returns:
- RolePlaying: A configured society of agents ready to address the question.
- """
-
- # Create models for different components
- models = {
- "user": ModelFactory.create(
- model_platform=ModelPlatformType.TOGETHER,
- model_type=ModelType.TOGETHER_LLAMA_4_MAVERICK,
- model_config_dict={"temperature": 0},
- ),
- "assistant": ModelFactory.create(
- model_platform=ModelPlatformType.TOGETHER,
- model_type=ModelType.TOGETHER_LLAMA_4_MAVERICK,
- model_config_dict={"temperature": 0},
- ),
- "browsing": ModelFactory.create(
- model_platform=ModelPlatformType.TOGETHER,
- model_type=ModelType.TOGETHER_LLAMA_4_MAVERICK,
- model_config_dict={"temperature": 0},
- ),
- "planning": ModelFactory.create(
- model_platform=ModelPlatformType.TOGETHER,
- model_type=ModelType.TOGETHER_LLAMA_4_MAVERICK,
- model_config_dict={"temperature": 0},
- ),
- "image": ModelFactory.create(
- model_platform=ModelPlatformType.TOGETHER,
- model_type=ModelType.TOGETHER_LLAMA_4_MAVERICK,
- model_config_dict={"temperature": 0},
- ),
- "document": ModelFactory.create(
- model_platform=ModelPlatformType.TOGETHER,
- model_type=ModelType.TOGETHER_LLAMA_4_MAVERICK,
- model_config_dict={"temperature": 0},
- ),
- }
-
- # Configure toolkits
- tools = [
- *BrowserToolkit(
- headless=False, # Set to True for headless mode (e.g., on remote servers)
- web_agent_model=models["browsing"],
- planning_agent_model=models["planning"],
- ).get_tools(),
- *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(),
- *ImageAnalysisToolkit(model=models["image"]).get_tools(),
- *ExcelToolkit().get_tools(),
- *DocumentProcessingToolkit(model=models["document"]).get_tools(),
- *FileWriteToolkit(output_dir="./").get_tools(),
- ]
-
- # Configure agent roles and parameters
- user_agent_kwargs = {"model": models["user"]}
- assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
-
- # Configure task parameters
- task_kwargs = {
- "task_prompt": question,
- "with_task_specify": False,
- }
-
- # Create and return the society
- society = RolePlaying(
- **task_kwargs,
- user_role_name="user",
- user_agent_kwargs=user_agent_kwargs,
- assistant_role_name="assistant",
- assistant_agent_kwargs=assistant_agent_kwargs,
- )
-
- return society
-
-
-def main():
- r"""Main function to run the OWL system with an example question."""
- # Default research question
- default_task = "Open Brave search, summarize the github stars, fork counts, etc. of camel-ai's camel framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
-
- # Override default task if command line argument is provided
- task = sys.argv[1] if len(sys.argv) > 1 else default_task
-
- # Construct and run the society
- society = construct_society(task)
- answer, chat_history, token_count = run_society(society)
-
- # Output the result
- print(f"\033[94mAnswer: {answer}\033[0m")
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/run_vllm.py b/examples/run_vllm.py
new file mode 100644
index 0000000..2b887f9
--- /dev/null
+++ b/examples/run_vllm.py
@@ -0,0 +1,255 @@
+# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You can obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
+
+"""
+Workforce example using VLLM or other OpenAI-compatible models.
+
+This example demonstrates how to use VLLM or any other OpenAI-compatible API endpoint
+with the Workforce architecture. VLLM provides a high-performance inference server
+that is compatible with OpenAI's API format.
+
+To use this file:
+1. Set up a VLLM server or any OpenAI-compatible API endpoint
+2. Set the API endpoint URL in VLLM_API_URL environment variable (default: http://localhost:8000/v1)
+3. Optionally set VLLM_API_KEY if your endpoint requires authentication
+4. Set the model name in VLLM_MODEL_NAME environment variable (e.g., "meta-llama/Llama-2-7b-chat-hf")
+5. Run with: python -m examples.run_workforce_vllm
+
+Example VLLM setup:
+```bash
+# Start VLLM server
+python -m vllm.entrypoints.openai.api_server \
+ --model meta-llama/Llama-2-7b-chat-hf \
+ --port 8000
+```
+
+Then set in .env:
+VLLM_API_URL=http://localhost:8000/v1
+VLLM_MODEL_NAME=meta-llama/Llama-2-7b-chat-hf
+"""
+
+import os
+import sys
+import pathlib
+from dotenv import load_dotenv
+from camel.models import ModelFactory
+from camel.agents import ChatAgent
+from camel.toolkits import (
+ FunctionTool,
+ CodeExecutionToolkit,
+ ExcelToolkit,
+ SearchToolkit,
+ FileToolkit,
+)
+from camel.types import ModelPlatformType
+from camel.logger import set_log_level
+from camel.tasks.task import Task
+
+from camel.societies import Workforce
+
+from owl.utils import DocumentProcessingToolkit
+
+from typing import List, Dict, Any
+
+base_dir = pathlib.Path(__file__).parent.parent
+env_path = base_dir / "owl" / ".env"
+load_dotenv(dotenv_path=str(env_path))
+
+set_log_level(level="DEBUG")
+
+
+def construct_agent_list() -> List[Dict[str, Any]]:
+ """Construct a list of agents with their configurations."""
+
+ # Get configuration from environment variables
+ api_url = os.getenv("VLLM_API_URL", "http://localhost:8000/v1")
+ api_key = os.getenv("VLLM_API_KEY", None)
+ model_name = os.getenv("VLLM_MODEL_NAME", "meta-llama/Llama-2-7b-chat-hf")
+
+ web_model = ModelFactory.create(
+ model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
+ model_type=model_name,
+ url=api_url,
+ api_key=api_key,
+ model_config_dict={"temperature": 0},
+ )
+
+ document_processing_model = ModelFactory.create(
+ model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
+ model_type=model_name,
+ url=api_url,
+ api_key=api_key,
+ model_config_dict={"temperature": 0},
+ )
+
+ reasoning_model = ModelFactory.create(
+ model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
+ model_type=model_name,
+ url=api_url,
+ api_key=api_key,
+ model_config_dict={"temperature": 0},
+ )
+
+ search_toolkit = SearchToolkit()
+ document_processing_toolkit = DocumentProcessingToolkit(model=document_processing_model)
+ code_runner_toolkit = CodeExecutionToolkit(sandbox="subprocess", verbose=True)
+ file_toolkit = FileToolkit()
+ excel_toolkit = ExcelToolkit()
+
+ web_agent = ChatAgent(
+ """You are a helpful assistant that can search the web, extract webpage content, and provide relevant information to solve the given task.
+Keep in mind that:
+- Do not be overly confident in your own knowledge. Searching can provide a broader perspective and help validate existing knowledge.
+- If one way fails to provide an answer, try other ways or methods. The answer does exist.
+- When looking for specific numerical values (e.g., dollar amounts), prioritize reliable sources.
+- When solving tasks that require web searches, check Wikipedia first before exploring other websites.
+- In your response, you should mention the urls you have visited and processed.
+
+Here are some tips that help you perform web search:
+- Never add too many keywords in your search query!
+- If the question is complex, search results typically do not provide precise answers. The search query should be concise and focuses on finding official sources rather than direct answers.
+- The results you return do not have to directly answer the original question, you only need to collect relevant information.
+""",
+ model=web_model,
+ tools=[
+ FunctionTool(search_toolkit.search_duckduckgo),
+ FunctionTool(search_toolkit.search_wiki),
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ ]
+ )
+
+ document_processing_agent = ChatAgent(
+ "You are a helpful assistant that can process documents and multimodal data, and can interact with file system.",
+ document_processing_model,
+ tools=[
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ FunctionTool(code_runner_toolkit.execute_code),
+ *file_toolkit.get_tools(),
+ ]
+ )
+
+ reasoning_coding_agent = ChatAgent(
+ "You are a helpful assistant that specializes in reasoning and coding, and can think step by step to solve the task. When necessary, you can write python code to solve the task. If you have written code, do not forget to execute the code. Never generate codes like 'example code', your code should be able to fully solve the task. You can also leverage multiple libraries, such as requests, BeautifulSoup, re, pandas, etc, to solve the task. For processing excel files, you should write codes to process them.",
+ reasoning_model,
+ tools=[
+ FunctionTool(code_runner_toolkit.execute_code),
+ FunctionTool(excel_toolkit.extract_excel_content),
+ FunctionTool(document_processing_toolkit.extract_document_content),
+ ]
+ )
+
+ agent_list = []
+
+ web_agent_dict = {
+ "name": "Web Agent",
+ "description": "A helpful assistant that can search the web, extract webpage content, and retrieve relevant information.",
+ "agent": web_agent
+ }
+
+ document_processing_agent_dict = {
+ "name": "Document Processing Agent",
+ "description": "A helpful assistant that can process a variety of local and remote documents, including pdf, docx, images, audio, and video, etc.",
+ "agent": document_processing_agent
+ }
+
+ reasoning_coding_agent_dict = {
+ "name": "Reasoning Coding Agent",
+ "description": "A helpful assistant that specializes in reasoning, coding, and processing excel files. However, it cannot access the internet to search for information. If the task requires python execution, it should be informed to execute the code after writing it.",
+ "agent": reasoning_coding_agent
+ }
+
+ agent_list.append(web_agent_dict)
+ agent_list.append(document_processing_agent_dict)
+ agent_list.append(reasoning_coding_agent_dict)
+ return agent_list
+
+
+def construct_workforce() -> Workforce:
+ """Construct a workforce with coordinator and task agents."""
+
+ # Get configuration from environment variables
+ api_url = os.getenv("VLLM_API_URL", "http://localhost:8000/v1")
+ api_key = os.getenv("VLLM_API_KEY", None)
+ model_name = os.getenv("VLLM_MODEL_NAME", "meta-llama/Llama-2-7b-chat-hf")
+
+ coordinator_agent_kwargs = {
+ "model": ModelFactory.create(
+ model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
+ model_type=model_name,
+ url=api_url,
+ api_key=api_key,
+ model_config_dict={"temperature": 0},
+ )
+ }
+
+ task_agent_kwargs = {
+ "model": ModelFactory.create(
+ model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
+ model_type=model_name,
+ url=api_url,
+ api_key=api_key,
+ model_config_dict={"temperature": 0},
+ )
+ }
+
+ task_agent = ChatAgent(
+ "You are a helpful assistant that can decompose tasks and assign tasks to workers.",
+ **task_agent_kwargs
+ )
+
+ coordinator_agent = ChatAgent(
+ "You are a helpful assistant that can assign tasks to workers.",
+ **coordinator_agent_kwargs
+ )
+
+ workforce = Workforce(
+ "Workforce",
+ task_agent=task_agent,
+ coordinator_agent=coordinator_agent,
+ )
+
+ agent_list = construct_agent_list()
+
+ for agent_dict in agent_list:
+ workforce.add_single_agent_worker(
+ agent_dict["description"],
+ worker=agent_dict["agent"],
+ )
+
+ return workforce
+
+
+def main():
+ r"""Main function to run the OWL system with an example question."""
+ # Default research question
+ default_task_prompt = "Summarize the github stars, fork counts, etc. of camel-ai's owl framework, and write the numbers into a python file using the plot package, save it locally, and run the generated python file. Note: You have been provided with the necessary tools to complete this task."
+
+ # Override default task if command line argument is provided
+ task_prompt = sys.argv[1] if len(sys.argv) > 1 else default_task_prompt
+
+ task = Task(
+ content=task_prompt,
+ )
+
+ workforce = construct_workforce()
+
+ processed_task = workforce.process_task(task)
+
+ # Output the result
+ print(f"\033[94mAnswer: {processed_task.result}\033[0m")
+
+
+if __name__ == "__main__":
+ main()
+
diff --git a/owl/utils/document_toolkit.py b/owl/utils/document_toolkit.py
index c31d366..5b4d1cf 100644
--- a/owl/utils/document_toolkit.py
+++ b/owl/utils/document_toolkit.py
@@ -30,6 +30,8 @@ import subprocess
import xmltodict
import nest_asyncio
import traceback
+import asyncio
+from crawl4ai import AsyncWebCrawler
nest_asyncio.apply()
@@ -218,22 +220,51 @@ class DocumentProcessingToolkit(BaseToolkit):
@retry_on_error()
def _extract_webpage_content(self, url: str) -> str:
api_key = os.getenv("FIRECRAWL_API_KEY")
- from firecrawl import FirecrawlApp
+ if api_key is not None:
+ from firecrawl import FirecrawlApp
- # Initialize the FirecrawlApp with your API key
- app = FirecrawlApp(api_key=api_key)
+ # Initialize the FirecrawlApp with your API key
+ app = FirecrawlApp(api_key=api_key)
- data = app.crawl_url(
- url, params={"limit": 1, "scrapeOptions": {"formats": ["markdown"]}}
- )
- logger.debug(f"Extractred data from {url}: {data}")
- if len(data["data"]) == 0:
- if data["success"]:
- return "No content found on the webpage."
- else:
- return "Error while crawling the webpage."
+ data = app.crawl_url(
+ url, params={"limit": 1, "scrapeOptions": {"formats": ["markdown"]}}
+ )
+ logger.debug(f"Extractred data from {url}: {data}")
+ if len(data["data"]) == 0:
+ if data["success"]:
+ return "No content found on the webpage."
+ else:
+ return "Error while crawling the webpage."
+
+ return str(data["data"][0]["markdown"])
+ else:
+ logger.warning("Firecrawl API key is not set. Use crawl4ai to extract the content of the webpage.")
+ return self._extract_webpage_content_with_crawl4ai(url)
+
+
+ def _extract_webpage_content_with_crawl4ai(self, url: str) -> str:
+ r"""Extract the content of a webpage using crawl4ai."""
+ try:
+ # Use asyncio.run to execute the async function
+ return asyncio.run(self._async_extract_webpage_content_with_crawl4ai(url))
+ except Exception as e:
+ logger.error(f"Error while extracting the content of the webpage: {e}")
+ return "Error while extracting the content of the webpage."
+
+ async def _async_extract_webpage_content_with_crawl4ai(self, url: str) -> str:
+ r"""Async helper method to extract webpage content using crawl4ai."""
+ try:
+ async with AsyncWebCrawler(verbose=False) as crawler:
+ result = await crawler.arun(url=url)
+ if result.markdown:
+ return result.markdown
+ else:
+ logger.warning("No markdown content extracted from the webpage.")
+ return "No content found on the webpage."
+ except Exception as e:
+ logger.error(f"Error while extracting the content of the webpage with crawl4ai: {e}")
+ return "Error while extracting the content of the webpage."
- return str(data["data"][0]["markdown"])
def _download_file(self, url: str):
r"""Download a file from a URL and save it to the cache directory."""
diff --git a/owl/utils/enhanced_role_playing.py b/owl/utils/enhanced_role_playing.py
index f6aaa55..cba8321 100644
--- a/owl/utils/enhanced_role_playing.py
+++ b/owl/utils/enhanced_role_playing.py
@@ -67,13 +67,15 @@ class OwlRolePlaying(RolePlaying):
def _init_agents(
self,
- init_assistant_sys_msg: BaseMessage,
- init_user_sys_msg: BaseMessage,
+ init_assistant_sys_msg: Optional[BaseMessage],
+ init_user_sys_msg: Optional[BaseMessage],
assistant_agent_kwargs: Optional[Dict] = None,
user_agent_kwargs: Optional[Dict] = None,
output_language: Optional[str] = None,
is_reasoning_task: bool = False,
stop_event: Optional[threading.Event] = None,
+ assistant_agent: Optional[ChatAgent] = None,
+ user_agent: Optional[ChatAgent] = None,
) -> None:
r"""Initialize assistant and user agents with their system messages.
@@ -105,20 +107,60 @@ class OwlRolePlaying(RolePlaying):
# model_platform=ModelPlatformType.OPENAI,
# model_type=ModelType.O3_MINI,
# )
+ if assistant_agent is not None:
+ # Ensure functionality consistent with our configuration
+ if (
+ hasattr(assistant_agent, 'output_language')
+ and output_language is not None
+ ):
+ assistant_agent.output_language = output_language
+ if hasattr(assistant_agent, 'stop_event'):
+ assistant_agent.stop_event = stop_event
+ self.assistant_agent = assistant_agent
+ # Handle potential None system_message - use provided or fallback
+ if assistant_agent.system_message is not None:
+ self.assistant_sys_msg = assistant_agent.system_message
+ elif init_assistant_sys_msg is not None:
+ self.assistant_sys_msg = init_assistant_sys_msg
+ else:
+ raise ValueError("Assistant system message cannot be None")
+ else:
+ if init_assistant_sys_msg is None:
+ raise ValueError("Assistant system message cannot be None")
- self.assistant_agent = ChatAgent(
- init_assistant_sys_msg,
- output_language=output_language,
- **(assistant_agent_kwargs or {}),
- )
- self.assistant_sys_msg = self.assistant_agent.system_message
+ self.assistant_agent = ChatAgent(
+ init_assistant_sys_msg,
+ output_language=output_language,
+ **(assistant_agent_kwargs or {}),
+ )
+ self.assistant_sys_msg = self.assistant_agent.system_message
- self.user_agent = ChatAgent(
- init_user_sys_msg,
- output_language=output_language,
- **(user_agent_kwargs or {}),
- )
- self.user_sys_msg = self.user_agent.system_message
+ if user_agent is not None:
+ # Ensure functionality consistent with our configuration
+ if (
+ hasattr(user_agent, 'output_language')
+ and output_language is not None
+ ):
+ user_agent.output_language = output_language
+ if hasattr(user_agent, 'stop_event'):
+ user_agent.stop_event = stop_event
+ self.user_agent = user_agent
+ # Handle potential None system_message - use provided or fallback
+ if user_agent.system_message is not None:
+ self.user_sys_msg = user_agent.system_message
+ elif init_user_sys_msg is not None:
+ self.user_sys_msg = init_user_sys_msg
+ else:
+ raise ValueError("User system message cannot be None")
+ else:
+ if init_user_sys_msg is None:
+ raise ValueError("User system message cannot be None")
+ self.user_agent = ChatAgent(
+ init_user_sys_msg,
+ output_language=output_language,
+ **(user_agent_kwargs or {}),
+ )
+ self.user_sys_msg = self.user_agent.system_message
# def _judge_if_reasoning_task(self, question: str) -> bool:
# r"""Judge if the question is a reasoning task."""
diff --git a/owl/utils/gaia.py b/owl/utils/gaia.py
index 83e8744..138e02c 100644
--- a/owl/utils/gaia.py
+++ b/owl/utils/gaia.py
@@ -19,6 +19,7 @@ import json
import random
import re
import string
+import pandas as pd
from pathlib import Path
from typing import Any, Dict, List, Literal, Optional, Union, Tuple
@@ -120,15 +121,31 @@ class GAIABenchmark(BaseBenchmark):
# Load metadata for both validation and test datasets
for path, label in zip([valid_dir, test_dir], ["valid", "test"]):
self._data[label] = []
- with open(path / "metadata.jsonl", "r") as f:
- lines = f.readlines()
- for line in lines:
- data = json.loads(line)
+ metadata_jsonl_path = path / "metadata.jsonl"
+ metadata_parquet_path = path / "metadata.parquet"
+ if metadata_parquet_path.exists():
+ raw_data = pd.read_parquet(metadata_parquet_path)
+ # convert to dict
+ raw_data = raw_data.to_dict(orient="records")
+ for data in raw_data:
if data["task_id"] == "0-0-0-0-0":
continue
if data["file_name"]:
data["file_name"] = path / data["file_name"]
self._data[label].append(data)
+ elif metadata_jsonl_path.exists():
+ with open(metadata_jsonl_path, "r") as f:
+ lines = f.readlines()
+ for line in lines:
+ data = json.loads(line)
+ if data["task_id"] == "0-0-0-0-0":
+ continue
+ if data["file_name"]:
+ data["file_name"] = path / data["file_name"]
+ self._data[label].append(data)
+ else:
+ raise FileNotFoundError(f"Metadata file not found: {metadata_parquet_path} or {metadata_jsonl_path}")
+
return self
@property
@@ -167,7 +184,7 @@ class GAIABenchmark(BaseBenchmark):
f"Invalid value for `level`: {level}, expected 1, 2, 3 " "or 'all'."
)
logger.info(f"Running benchmark on {on} set at levels {levels}.")
- datas = [data for data in self._data[on] if data["Level"] in levels]
+ datas = [data for data in self._data[on] if int(data["Level"]) in levels]
# Shuffle and subset data if necessary
if randomize:
random.shuffle(datas)
diff --git a/pyproject.toml b/pyproject.toml
index 0ffc927..073c02e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -21,14 +21,16 @@ keywords = [
"learning-systems"
]
dependencies = [
- "camel-ai[owl]==0.2.57",
+ "camel-ai[owl]==0.2.84",
"docx2markdown>=0.1.1",
"gradio>=6.4.0",
"mcp-simple-arxiv==0.2.2",
"mcp-server-fetch==2025.1.17",
"xmltodict>=0.14.2",
"firecrawl>=2.5.3",
+ "crawl4ai>=0.3.0",
"mistralai>=1.7.0",
+ "retry==0.9.2",
]
[project.urls]
diff --git a/requirements.txt b/requirements.txt
index 80da4b7..c50915f 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,7 +1,9 @@
-camel-ai[owl]==0.2.57
+camel-ai[owl]==0.2.84
docx2markdown>=0.1.1
gradio>=3.50.2
mcp-simple-arxiv==0.2.2
mcp-server-fetch==2025.1.17
xmltodict>=0.14.2
-firecrawl>=2.5.3
\ No newline at end of file
+firecrawl>=2.5.3
+crawl4ai>=0.3.0
+retry==0.9.2
\ No newline at end of file
diff --git a/uv.lock b/uv.lock
index 1473b7b..28fb9ec 100644
--- a/uv.lock
+++ b/uv.lock
@@ -137,15 +137,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl", hash = "sha256:2549cf4057f95f53dcba16f2b64e8e2791d7e1adedb13197dd8ed77bb226d7d0", size = 15792 },
]
-[[package]]
-name = "airportsdata"
-version = "20250224"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/03/9a/e079f29ed111d9f2c28e00d36e791cf53f2f6d76873ed1821d2c2aff55ef/airportsdata-20250224.tar.gz", hash = "sha256:7f4538a613504444a13149be701aac5f9599b86da476d26b46aa24fd54714eda", size = 904203 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/19/c3/3fc94ab580f50f56a8f68fd4e619730fbc8c079f0028cf37664c1c7411de/airportsdata-20250224-py3-none-any.whl", hash = "sha256:006128bca2cc1983dc5ed4fb1227e8df2289b5e95b8ab30d9bdd4eb7c6d2160d", size = 913673 },
-]
-
[[package]]
name = "annotated-types"
version = "0.7.0"
@@ -217,36 +208,31 @@ wheels = [
[[package]]
name = "av"
-version = "14.3.0"
+version = "15.1.0"
source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e9/c3/83e6e73d1592bc54436eae0bc61704ae0cff0c3cfbde7b58af9ed67ebb49/av-15.1.0.tar.gz", hash = "sha256:39cda2dc810e11c1938f8cb5759c41d6b630550236b3365790e67a313660ec85", size = 3774192 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/88/c9/7b28af53ceb7ed80671657c3219de4da71ae5306843ecc0749b0f5bfb8dc/av-14.3.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:fb2fbd93685086c859748c147861dfb97ccf896dfbaa0141b8f15a1493d758e8", size = 20029577 },
- { url = "https://files.pythonhosted.org/packages/b5/4a/e5bf3212db0ab6c2ca21dc87727a305614af4830fad58cae05e011aed273/av-14.3.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:187fa564b130ac15b6ea7124c289be7fa8687d8e121d69b3000225cbff6414b0", size = 23819523 },
- { url = "https://files.pythonhosted.org/packages/f7/76/c1cf614263702606623685ac9b6d6ca50a2ae93f7d8aac9c8b52b7117260/av-14.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c789487510e9630ce46610ecdb3b2271ec720b839282884c04950f3b8be65f2", size = 33053959 },
- { url = "https://files.pythonhosted.org/packages/e5/4c/149eea76fe2eb7e637324f35588e28941212eff5bdc21a0aae7f50379525/av-14.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca1711ef45fd711736125cb7e63e71dd9016127baae84c73cf0f08fb63d09a0b", size = 31699556 },
- { url = "https://files.pythonhosted.org/packages/4c/86/292aa2aee50902d55ea8cb94e6d6112d20884b340a6d75f8521f671c8556/av-14.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c69df85a9eb5d70709578954839dfe09fa952b177666fe963c96a052031eaee", size = 34670935 },
- { url = "https://files.pythonhosted.org/packages/85/f4/feeddb7712238aff51184f537f374809fbc29546e68a22f0ef34bfbeea55/av-14.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bf000c608a15ae27c51c49142c3a2be0618bd7263cd804b1bfa30dd55460b3a0", size = 35716047 },
- { url = "https://files.pythonhosted.org/packages/4b/12/45c8cdb863b4bd075e2382b91013bd8f15f8bb8bd8332d6dcab5739b9b1a/av-14.3.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:bc723464d8ee806b5ac5a3915244019080e22ed55283884c729b336806483a62", size = 34064482 },
- { url = "https://files.pythonhosted.org/packages/96/57/cee24def34261f0bc7b7aed63424a54d1744e45df0c52b89412abda420a8/av-14.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d8e36dea941f3e1e7f3791c758cf52c392472cf36c51da19fd7288ab94b5d0e2", size = 36688268 },
- { url = "https://files.pythonhosted.org/packages/6e/31/047e25e2d52489819cf5d400cc66c0d6d70b3f603b3662c12f9bac1dafa2/av-14.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:18680276d534b327e108d08ab8b35da1500696a4f1ce9658c4324028cfb4641e", size = 27465841 },
- { url = "https://files.pythonhosted.org/packages/a0/a1/97ea1de8f0818d13847c4534d3799e7b7cf1cfb3e1b8cda2bb4afbcebb76/av-14.3.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c3c6aa31553de2578ca7424ce05803c0672525d0cef542495f47c5a923466dcc", size = 20014633 },
- { url = "https://files.pythonhosted.org/packages/bc/88/6714076267b6ecb3b635c606d046ad8ec4838eb14bc717ee300d71323850/av-14.3.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:5bc930153f945f858c2aca98b8a4fa7265f93d6015729dbb6b780b58ce26325c", size = 23803761 },
- { url = "https://files.pythonhosted.org/packages/c0/06/058499e504469daa8242c9646e84b7a557ba4bf57bdf3c555bec0d902085/av-14.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:943d46a1a93f1282abaeec0d1c62698104958865c30df9478f48a6aef7328eb8", size = 33578833 },
- { url = "https://files.pythonhosted.org/packages/e8/b5/db140404e7c0ba3e07fe7ffd17e04e7762e8d96af7a65d89452baad743bf/av-14.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8485965f71c84f15cf597e5e5e1731e076d967fc519e074f6f7737a26f3fd89b", size = 32161538 },
- { url = "https://files.pythonhosted.org/packages/2b/6a/b88bfb2cd832a410690d97c3ba917e4d01782ca635675ca5a93854530e6c/av-14.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b64f9410121548ca3ce4283d9f42dbaadfc2af508810bafea1f0fa745d2a9dee", size = 35209923 },
- { url = "https://files.pythonhosted.org/packages/08/e0/d5b97c9f6ccfbda59410cccda0abbfd80a509f8b6f63a0c95a60b1ab4d1d/av-14.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8de6a2b6964d68897249dd41cdb99ca21a59e2907f378dc7e56268a9b6b3a5a8", size = 36215727 },
- { url = "https://files.pythonhosted.org/packages/4a/2f/1a151f94072b0bbc80ed0dc50b7264e384a6cedbaa52762308d1fd92aa33/av-14.3.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5f901aaaf9f59119717ae37924ff81f9a4e2405177e5acf5176335b37dba41ba", size = 34493728 },
- { url = "https://files.pythonhosted.org/packages/d0/68/65414390b4b8069947be20eac60ff28ae21a6d2a2b989f916828f3e2e6a2/av-14.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:655fe073fa0c97abada8991d362bdb2cc09b021666ca94b82820c64e11fd9f13", size = 37193276 },
- { url = "https://files.pythonhosted.org/packages/6d/d8/c0cb086fa61c05183e48309885afef725b367f01c103d56695f359f9bf8e/av-14.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:5135318ffa86241d5370b6d1711aedf6a0c9bea181e52d9eb69d545358183be5", size = 27460406 },
- { url = "https://files.pythonhosted.org/packages/1b/ff/092b5bba046a9fd7324d9eee498683ee9e410715d21eff9d3db92dd14910/av-14.3.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:8250680e4e17c404008005b60937248712e9c621689bbc647577d8e2eaa00a66", size = 20004033 },
- { url = "https://files.pythonhosted.org/packages/90/b8/fa4fb7d5f1c6299c2f691d527c47a717155acb9ff9f3c30358d7d50d60e1/av-14.3.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:349aa6ef529daaede95f37e9825c6e36fddb15906b27938d9e22dcdca2e1f648", size = 23804484 },
- { url = "https://files.pythonhosted.org/packages/79/f3/230b2d05a918ed4f9390f8d7ca766250662e6200d77453852e85cd854291/av-14.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f953a9c999add37b953cb3ad4ef3744d3d4eee50ef1ffeb10cb1f2e6e2cbc088", size = 33727815 },
- { url = "https://files.pythonhosted.org/packages/95/f8/593ab784116356e8eb00e1f1b3ab2383c59c1ef40d6bcf19be7cb4679237/av-14.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1eaefb47d2ee178adfcedb9a70678b1a340a6670262d06ffa476da9c7d315aef", size = 32307276 },
- { url = "https://files.pythonhosted.org/packages/40/ff/2237657852dac32052b7401da6bc7fc23127dc7a1ccbb23d4c640c8ea95b/av-14.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e3b7ca97af1eb3e41e7971a0eb75c1375f73b89ff54afb6d8bf431107160855", size = 35439982 },
- { url = "https://files.pythonhosted.org/packages/01/f7/e4561cabd16e96a482609211eb8d260a720f222e28bdd80e3af0bbc560a6/av-14.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e2a0404ac4bfa984528538fb7edeb4793091a5cc6883a473d13cb82c505b62e0", size = 36366758 },
- { url = "https://files.pythonhosted.org/packages/ce/ee/7334ca271b71c394ef400a11b54b1d8d3eb28a40681b37c3a022d9dc59c8/av-14.3.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2ceb45e998184231bcc99a14f91f4265d959e6b804fe9054728e9855214b2ad5", size = 34643022 },
- { url = "https://files.pythonhosted.org/packages/db/4f/c692ee808a68aa2ec634a00ce084d3f68f28ab6ab7a847780974d780762d/av-14.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f87df669f49d5202f3933dc94e606353f5c5f9a709a1c0823b3f6d6333560bd7", size = 37448043 },
- { url = "https://files.pythonhosted.org/packages/84/7d/ed088731274746667e18951cc51d4e054bec941898b853e211df84d47745/av-14.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:90ef006bc334fff31d5e839368bcd8c6345959749a980ce6f7a8a5fa2c8396e7", size = 27460903 },
+ { url = "https://files.pythonhosted.org/packages/3a/6a/91e3e68ae0d1b53b480ec69a96f2ae820fb007bc60e6b821741f31c7ba4e/av-15.1.0-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:cf067b66cee2248220b29df33b60eb4840d9e7b9b75545d6b922f9c41d88c4ee", size = 21781685 },
+ { url = "https://files.pythonhosted.org/packages/bc/6d/afa951b9cb615c3bc6d95c4eed280c6cefb52c006f4e15e79043626fab39/av-15.1.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:26426163d96fc3bde9a015ba4d60da09ef848d9284fe79b4ca5e60965a008fc5", size = 26962481 },
+ { url = "https://files.pythonhosted.org/packages/3c/42/0c384884235c42c439cef28cbd129e4624ad60229119bf3c6c6020805119/av-15.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:92f524541ce74b8a12491d8934164a5c57e983da24826547c212f60123de400b", size = 37571839 },
+ { url = "https://files.pythonhosted.org/packages/25/c0/5c967b0872fce1add80a8f50fa7ce11e3e3e5257c2b079263570bc854699/av-15.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:659f9d6145fb2c58e8b31907283b6ba876570f5dd6e7e890d74c09614c436c8e", size = 39070227 },
+ { url = "https://files.pythonhosted.org/packages/e2/81/e333056d49363c35a74b828ed5f87c96dfbcc1a506b49d79a31ac773b94d/av-15.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:07a8ae30c0cfc3132eff320a6b27d18a5e0dda36effd0ae28892888f4ee14729", size = 39619362 },
+ { url = "https://files.pythonhosted.org/packages/d5/ae/50cc2af1bf68452cbfec8d1b2554c18f6d167c8ba6d7ad7707797dfd1541/av-15.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e33a76e38f03bb5de026b9f66ccf23dc01ddd2223221096992cb52ac22e62538", size = 40371627 },
+ { url = "https://files.pythonhosted.org/packages/50/e6/381edf1779106dd31c9ef1ac9842f643af4465b8a87cbc278d3eaa76229a/av-15.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:aa4bf12bdce20edc2a3b13a2776c474c5ab63e1817d53793714504476eeba82e", size = 31340369 },
+ { url = "https://files.pythonhosted.org/packages/47/58/4e44cf6939be7aba96a4abce024e1be11ba7539ecac74d09369b8c03aa05/av-15.1.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b785948762a8d45fc58fc24a20251496829ace1817e9a7a508a348d6de2182c3", size = 21767323 },
+ { url = "https://files.pythonhosted.org/packages/9b/f6/a946544cdb49f6d892d2761b1d61a8bc6ce912fe57ba06769bdc640c0a7f/av-15.1.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:9c7131494a3a318612b4ee4db98fe5bc50eb705f6b6536127c7ab776c524fd8b", size = 26946268 },
+ { url = "https://files.pythonhosted.org/packages/70/7c/b33513c0af73d0033af59a98f035b521c5b93445a6af7e9efbf41a6e8383/av-15.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2b9623ae848625c59213b610c8665817924f913580c7c5c91e0dc18936deb00d", size = 38062118 },
+ { url = "https://files.pythonhosted.org/packages/5e/95/31b7fb34f9fea7c7389240364194f4f56ad2d460095038cc720f50a90bb3/av-15.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:c8ef597087db560514617143532b1fafc4825ebb2dda9a22418f548b113a0cc7", size = 39571086 },
+ { url = "https://files.pythonhosted.org/packages/e7/b0/7b0b45474a4e90c35c11d0032947d8b3c7386872957ce29c6f12add69a74/av-15.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:08eac47a90ebae1e2bd5935f400dd515166019bab4ff5b03c4625fa6ac3a0a5e", size = 40112634 },
+ { url = "https://files.pythonhosted.org/packages/aa/04/038b94bc9a1ee10a451c867d4a2fc91e845f83bfc2dae9df25893abcb57f/av-15.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d3f66ff200ea166e606cb3c5cb1bd2fc714effbec2e262a5d67ce60450c8234a", size = 40878695 },
+ { url = "https://files.pythonhosted.org/packages/1d/3d/9f8f96c0deeaaf648485a3dbd1699b2f0580f2ce8a36cb616c0138ba7615/av-15.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:57b99544d91121b8bea570e4ddf61700f679a6b677c1f37966bc1a22e1d4cd5c", size = 31335683 },
+ { url = "https://files.pythonhosted.org/packages/d1/58/de78b276d20db6ffcd4371283df771721a833ba525a3d57e753d00a9fe79/av-15.1.0-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:40c5df37f4c354ab8190c6fd68dab7881d112f527906f64ca73da4c252a58cee", size = 21760991 },
+ { url = "https://files.pythonhosted.org/packages/56/cc/45f85775304ae60b66976360d82ba5b152ad3fd91f9267d5020a51e9a828/av-15.1.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:af455ce65ada3d361f80c90c810d9bced4db5655ab9aa513024d6c71c5c476d5", size = 26953097 },
+ { url = "https://files.pythonhosted.org/packages/f3/f8/2d781e5e71d02fc829487e775ccb1185e72f95340d05f2e84eb57a11e093/av-15.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:86226d2474c80c3393fa07a9c366106029ae500716098b72b3ec3f67205524c3", size = 38319710 },
+ { url = "https://files.pythonhosted.org/packages/ac/13/37737ef2193e83862ccacff23580c39de251da456a1bf0459e762cca273c/av-15.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:11326f197e7001c4ca53a83b2dbc67fd39ddff8cdf62ce6be3b22d9f3f9338bd", size = 39915519 },
+ { url = "https://files.pythonhosted.org/packages/26/e9/e8032c7b8f2a4129a03f63f896544f8b7cf068e2db2950326fa2400d5c47/av-15.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a631ea879cc553080ee62874f4284765c42ba08ee0279851a98a85e2ceb3cc8d", size = 40286166 },
+ { url = "https://files.pythonhosted.org/packages/e2/23/612c0fd809444d04b8387a2dfd942ccc77829507bd78a387ff65a9d98c24/av-15.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8f383949b010c3e731c245f80351d19dc0c08f345e194fc46becb1cb279be3ff", size = 41150592 },
+ { url = "https://files.pythonhosted.org/packages/15/74/6f8e38a3b0aea5f28e72813672ff45b64615f2c69e6a4a558718c95edb9f/av-15.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:d5921aa45f4c1f8c1a8d8185eb347e02aa4c3071278a2e2dd56368d54433d643", size = 31336093 },
]
[[package]]
@@ -272,58 +258,121 @@ wheels = [
]
[[package]]
-name = "camel-ai"
-version = "0.2.57"
+name = "brotli"
+version = "1.2.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f7/16/c92ca344d646e71a43b8bb353f0a6490d7f6e06210f8554c8f874e454285/brotli-1.2.0.tar.gz", hash = "sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a", size = 7388632 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/64/10/a090475284fc4a71aed40a96f32e44a7fe5bda39687353dd977720b211b6/brotli-1.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e", size = 863089 },
+ { url = "https://files.pythonhosted.org/packages/03/41/17416630e46c07ac21e378c3464815dd2e120b441e641bc516ac32cc51d2/brotli-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984", size = 445442 },
+ { url = "https://files.pythonhosted.org/packages/24/31/90cc06584deb5d4fcafc0985e37741fc6b9717926a78674bbb3ce018957e/brotli-1.2.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de", size = 1532658 },
+ { url = "https://files.pythonhosted.org/packages/62/17/33bf0c83bcbc96756dfd712201d87342732fad70bb3472c27e833a44a4f9/brotli-1.2.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947", size = 1631241 },
+ { url = "https://files.pythonhosted.org/packages/48/10/f47854a1917b62efe29bc98ac18e5d4f71df03f629184575b862ef2e743b/brotli-1.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2", size = 1424307 },
+ { url = "https://files.pythonhosted.org/packages/e4/b7/f88eb461719259c17483484ea8456925ee057897f8e64487d76e24e5e38d/brotli-1.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84", size = 1488208 },
+ { url = "https://files.pythonhosted.org/packages/26/59/41bbcb983a0c48b0b8004203e74706c6b6e99a04f3c7ca6f4f41f364db50/brotli-1.2.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d", size = 1597574 },
+ { url = "https://files.pythonhosted.org/packages/8e/e6/8c89c3bdabbe802febb4c5c6ca224a395e97913b5df0dff11b54f23c1788/brotli-1.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1", size = 1492109 },
+ { url = "https://files.pythonhosted.org/packages/ed/9a/4b19d4310b2dbd545c0c33f176b0528fa68c3cd0754e34b2f2bcf56548ae/brotli-1.2.0-cp310-cp310-win32.whl", hash = "sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997", size = 334461 },
+ { url = "https://files.pythonhosted.org/packages/ac/39/70981d9f47705e3c2b95c0847dfa3e7a37aa3b7c6030aedc4873081ed005/brotli-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196", size = 369035 },
+ { url = "https://files.pythonhosted.org/packages/7a/ef/f285668811a9e1ddb47a18cb0b437d5fc2760d537a2fe8a57875ad6f8448/brotli-1.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744", size = 863110 },
+ { url = "https://files.pythonhosted.org/packages/50/62/a3b77593587010c789a9d6eaa527c79e0848b7b860402cc64bc0bc28a86c/brotli-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f", size = 445438 },
+ { url = "https://files.pythonhosted.org/packages/cd/e1/7fadd47f40ce5549dc44493877db40292277db373da5053aff181656e16e/brotli-1.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd", size = 1534420 },
+ { url = "https://files.pythonhosted.org/packages/12/8b/1ed2f64054a5a008a4ccd2f271dbba7a5fb1a3067a99f5ceadedd4c1d5a7/brotli-1.2.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe", size = 1632619 },
+ { url = "https://files.pythonhosted.org/packages/89/5a/7071a621eb2d052d64efd5da2ef55ecdac7c3b0c6e4f9d519e9c66d987ef/brotli-1.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a", size = 1426014 },
+ { url = "https://files.pythonhosted.org/packages/26/6d/0971a8ea435af5156acaaccec1a505f981c9c80227633851f2810abd252a/brotli-1.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b", size = 1489661 },
+ { url = "https://files.pythonhosted.org/packages/f3/75/c1baca8b4ec6c96a03ef8230fab2a785e35297632f402ebb1e78a1e39116/brotli-1.2.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3", size = 1599150 },
+ { url = "https://files.pythonhosted.org/packages/0d/1a/23fcfee1c324fd48a63d7ebf4bac3a4115bdb1b00e600f80f727d850b1ae/brotli-1.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae", size = 1493505 },
+ { url = "https://files.pythonhosted.org/packages/36/e5/12904bbd36afeef53d45a84881a4810ae8810ad7e328a971ebbfd760a0b3/brotli-1.2.0-cp311-cp311-win32.whl", hash = "sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03", size = 334451 },
+ { url = "https://files.pythonhosted.org/packages/02/8b/ecb5761b989629a4758c394b9301607a5880de61ee2ee5fe104b87149ebc/brotli-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24", size = 369035 },
+ { url = "https://files.pythonhosted.org/packages/11/ee/b0a11ab2315c69bb9b45a2aaed022499c9c24a205c3a49c3513b541a7967/brotli-1.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84", size = 861543 },
+ { url = "https://files.pythonhosted.org/packages/e1/2f/29c1459513cd35828e25531ebfcbf3e92a5e49f560b1777a9af7203eb46e/brotli-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b", size = 444288 },
+ { url = "https://files.pythonhosted.org/packages/3d/6f/feba03130d5fceadfa3a1bb102cb14650798c848b1df2a808356f939bb16/brotli-1.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d", size = 1528071 },
+ { url = "https://files.pythonhosted.org/packages/2b/38/f3abb554eee089bd15471057ba85f47e53a44a462cfce265d9bf7088eb09/brotli-1.2.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca", size = 1626913 },
+ { url = "https://files.pythonhosted.org/packages/03/a7/03aa61fbc3c5cbf99b44d158665f9b0dd3d8059be16c460208d9e385c837/brotli-1.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f", size = 1419762 },
+ { url = "https://files.pythonhosted.org/packages/21/1b/0374a89ee27d152a5069c356c96b93afd1b94eae83f1e004b57eb6ce2f10/brotli-1.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28", size = 1484494 },
+ { url = "https://files.pythonhosted.org/packages/cf/57/69d4fe84a67aef4f524dcd075c6eee868d7850e85bf01d778a857d8dbe0a/brotli-1.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7", size = 1593302 },
+ { url = "https://files.pythonhosted.org/packages/d5/3b/39e13ce78a8e9a621c5df3aeb5fd181fcc8caba8c48a194cd629771f6828/brotli-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036", size = 1487913 },
+ { url = "https://files.pythonhosted.org/packages/62/28/4d00cb9bd76a6357a66fcd54b4b6d70288385584063f4b07884c1e7286ac/brotli-1.2.0-cp312-cp312-win32.whl", hash = "sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161", size = 334362 },
+ { url = "https://files.pythonhosted.org/packages/1c/4e/bc1dcac9498859d5e353c9b153627a3752868a9d5f05ce8dedd81a2354ab/brotli-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44", size = 369115 },
+]
+
+[[package]]
+name = "brotlicffi"
+version = "1.2.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
+ { name = "cffi" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/84/85/57c314a6b35336efbbdc13e5fc9ae13f6b60a0647cfa7c1221178ac6d8ae/brotlicffi-1.2.0.0.tar.gz", hash = "sha256:34345d8d1f9d534fcac2249e57a4c3c8801a33c9942ff9f8574f67a175e17adb", size = 476682 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e4/df/a72b284d8c7bef0ed5756b41c2eb7d0219a1dd6ac6762f1c7bdbc31ef3af/brotlicffi-1.2.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:9458d08a7ccde8e3c0afedbf2c70a8263227a68dea5ab13590593f4c0a4fd5f4", size = 432340 },
+ { url = "https://files.pythonhosted.org/packages/74/2b/cc55a2d1d6fb4f5d458fba44a3d3f91fb4320aa14145799fd3a996af0686/brotlicffi-1.2.0.0-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:84e3d0020cf1bd8b8131f4a07819edee9f283721566fe044a20ec792ca8fd8b7", size = 1534002 },
+ { url = "https://files.pythonhosted.org/packages/e4/9c/d51486bf366fc7d6735f0e46b5b96ca58dc005b250263525a1eea3cd5d21/brotlicffi-1.2.0.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:33cfb408d0cff64cd50bef268c0fed397c46fbb53944aa37264148614a62e990", size = 1536547 },
+ { url = "https://files.pythonhosted.org/packages/1b/37/293a9a0a7caf17e6e657668bebb92dfe730305999fe8c0e2703b8888789c/brotlicffi-1.2.0.0-cp38-abi3-win32.whl", hash = "sha256:23e5c912fdc6fd37143203820230374d24babd078fc054e18070a647118158f6", size = 343085 },
+ { url = "https://files.pythonhosted.org/packages/07/6b/6e92009df3b8b7272f85a0992b306b61c34b7ea1c4776643746e61c380ac/brotlicffi-1.2.0.0-cp38-abi3-win_amd64.whl", hash = "sha256:f139a7cdfe4ae7859513067b736eb44d19fae1186f9e99370092f6915216451b", size = 378586 },
+ { url = "https://files.pythonhosted.org/packages/a4/ec/52488a0563f1663e2ccc75834b470650f4b8bcdea3132aef3bf67219c661/brotlicffi-1.2.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:fa102a60e50ddbd08de86a63431a722ea216d9bc903b000bf544149cc9b823dc", size = 402002 },
+ { url = "https://files.pythonhosted.org/packages/e4/63/d4aea4835fd97da1401d798d9b8ba77227974de565faea402f520b37b10f/brotlicffi-1.2.0.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d3c4332fc808a94e8c1035950a10d04b681b03ab585ce897ae2a360d479037c", size = 406447 },
+ { url = "https://files.pythonhosted.org/packages/62/4e/5554ecb2615ff035ef8678d4e419549a0f7a28b3f096b272174d656749fb/brotlicffi-1.2.0.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb4eb5830026b79a93bf503ad32b2c5257315e9ffc49e76b2715cffd07c8e3db", size = 402521 },
+ { url = "https://files.pythonhosted.org/packages/b5/d3/b07f8f125ac52bbee5dc00ef0d526f820f67321bf4184f915f17f50a4657/brotlicffi-1.2.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3832c66e00d6d82087f20a972b2fc03e21cd99ef22705225a6f8f418a9158ecc", size = 374730 },
+]
+
+[[package]]
+name = "camel-ai"
+version = "0.2.84"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "astor" },
{ name = "colorama" },
{ name = "docstring-parser" },
+ { name = "google-search-results" },
{ name = "httpx" },
{ name = "jsonschema" },
{ name = "mcp" },
{ name = "openai" },
+ { name = "pillow" },
{ name = "psutil" },
{ name = "pydantic" },
{ name = "tiktoken" },
+ { name = "websockets" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/a4/4c/661e2c4a947e5c084397ac47159ae3533c210707dbcec3f844906cb37dea/camel_ai-0.2.57.tar.gz", hash = "sha256:3ef07ef094ace46b676a920b5677a2fc5f0ef8d774cad1444fecb183a2fb055c", size = 552190 }
+sdist = { url = "https://files.pythonhosted.org/packages/9b/62/96d922750b304ab2dd0ac1ef35dd3fbbf0e9a44f147e08a1ddfeb94c51c6/camel_ai-0.2.84.tar.gz", hash = "sha256:173c79755fc986e3fa8e27523606222c5f8816fc085abb24831912dcd4a0dec3", size = 1125724 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/38/ce/2557b71145150ae0ebf2e56e6500f2372ea635b70e67c0c60f51d6a8c65e/camel_ai-0.2.57-py3-none-any.whl", hash = "sha256:b7ae7fd28eca743d9008a9ca7f3af5079c9732547e625fa2682c38d1e85be4af", size = 921717 },
+ { url = "https://files.pythonhosted.org/packages/ec/8b/246abd2c47154de6220fd0a286c3fe50f343d49943ae17e26b9f824a1ca0/camel_ai-0.2.84-py3-none-any.whl", hash = "sha256:63bfbd09e605f9087bb73eb9b929e162fbc6778084ce50e43a367fc0e98cbc65", size = 1599378 },
]
[package.optional-dependencies]
owl = [
{ name = "aci-sdk" },
{ name = "anthropic" },
+ { name = "av" },
{ name = "beautifulsoup4" },
{ name = "chunkr-ai" },
{ name = "crawl4ai" },
{ name = "datasets" },
+ { name = "ddgs" },
{ name = "docx" },
{ name = "docx2txt" },
- { name = "duckduckgo-search" },
{ name = "e2b-code-interpreter" },
+ { name = "exa-py" },
{ name = "ffmpeg-python" },
- { name = "fpdf" },
{ name = "html2text" },
{ name = "imageio", extra = ["pyav"] },
{ name = "mcp-server-fetch" },
{ name = "mcp-simple-arxiv" },
- { name = "newspaper3k" },
{ name = "numpy" },
+ { name = "onnxruntime" },
{ name = "openapi-spec-validator" },
- { name = "opencv-python" },
{ name = "openpyxl" },
- { name = "outlines" },
{ name = "pandas" },
- { name = "pandasai" },
- { name = "pillow" },
{ name = "playwright" },
{ name = "prance" },
{ name = "pyautogui" },
{ name = "pydub" },
+ { name = "pylatex" },
{ name = "pymupdf" },
+ { name = "pytesseract" },
{ name = "python-dotenv" },
+ { name = "python-pptx" },
+ { name = "reportlab" },
{ name = "requests-oauthlib" },
{ name = "rouge" },
{ name = "scenedetect" },
@@ -336,6 +385,7 @@ owl = [
{ name = "tree-sitter-python" },
{ name = "typer" },
{ name = "unstructured" },
+ { name = "websockets" },
{ name = "wikipedia" },
{ name = "xls2xlsx" },
{ name = "yt-dlp" },
@@ -455,7 +505,7 @@ wheels = [
[[package]]
name = "chunkr-ai"
-version = "0.0.48"
+version = "0.0.50"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "httpx" },
@@ -464,9 +514,9 @@ dependencies = [
{ name = "pydantic" },
{ name = "python-dotenv" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/ee/ef/bc87a6ce9753dc48fae1803d2fbb6873dc416c01548824fc069f127a85c6/chunkr_ai-0.0.48.tar.gz", hash = "sha256:0219697557d4134d1f952cc8a5ff3ca01dcc9ae57fec2b78def246b1608a1abe", size = 19449 }
+sdist = { url = "https://files.pythonhosted.org/packages/fe/93/2a8262f50fda96068e6ea9acb387fb87f201457c1fa65474abbc318e6d96/chunkr_ai-0.0.50.tar.gz", hash = "sha256:da4d94866818d42997e479bad8d8414b2876b06a98e2ec4788cd89b24fd712df", size = 20023 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/72/69/dd878390a88d00df8901c4be9c23b9a3f4282832129c17b6ddb788dc065c/chunkr_ai-0.0.48-py3-none-any.whl", hash = "sha256:caeb3f898e69d3943db35f73af320fbabb42be9aed763de61395df70431e3703", size = 16735 },
+ { url = "https://files.pythonhosted.org/packages/37/ca/57d7647caf903ff465b5af4e6e1ea75dc2f42b2b0684487e02161706773b/chunkr_ai-0.0.50-py3-none-any.whl", hash = "sha256:3a8652cf16a3fd9d1f51d8a922dfc91984e2befab32a6faaaa28dae7dcb6324d", size = 16751 },
]
[[package]]
@@ -481,15 +531,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 },
]
-[[package]]
-name = "cloudpickle"
-version = "3.1.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/52/39/069100b84d7418bc358d81669d5748efb14b9cceacd2f9c75f550424132f/cloudpickle-3.1.1.tar.gz", hash = "sha256:b216fa8ae4019d5482a8ac3c95d8f6346115d8835911fd4aefd1a445e4242c64", size = 22113 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl", hash = "sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e", size = 20992 },
-]
-
[[package]]
name = "colorama"
version = "0.4.6"
@@ -500,50 +541,15 @@ wheels = [
]
[[package]]
-name = "contourpy"
-version = "1.3.2"
+name = "coloredlogs"
+version = "15.0.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "numpy" },
+ { name = "humanfriendly" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130 }
+sdist = { url = "https://files.pythonhosted.org/packages/cc/c7/eed8f27100517e8c0e6b923d5f0845d0cb99763da6fdee00478f91db7325/coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0", size = 278520 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/12/a3/da4153ec8fe25d263aa48c1a4cbde7f49b59af86f0b6f7862788c60da737/contourpy-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934", size = 268551 },
- { url = "https://files.pythonhosted.org/packages/2f/6c/330de89ae1087eb622bfca0177d32a7ece50c3ef07b28002de4757d9d875/contourpy-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989", size = 253399 },
- { url = "https://files.pythonhosted.org/packages/c1/bd/20c6726b1b7f81a8bee5271bed5c165f0a8e1f572578a9d27e2ccb763cb2/contourpy-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d", size = 312061 },
- { url = "https://files.pythonhosted.org/packages/22/fc/a9665c88f8a2473f823cf1ec601de9e5375050f1958cbb356cdf06ef1ab6/contourpy-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9", size = 351956 },
- { url = "https://files.pythonhosted.org/packages/25/eb/9f0a0238f305ad8fb7ef42481020d6e20cf15e46be99a1fcf939546a177e/contourpy-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512", size = 320872 },
- { url = "https://files.pythonhosted.org/packages/32/5c/1ee32d1c7956923202f00cf8d2a14a62ed7517bdc0ee1e55301227fc273c/contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631", size = 325027 },
- { url = "https://files.pythonhosted.org/packages/83/bf/9baed89785ba743ef329c2b07fd0611d12bfecbedbdd3eeecf929d8d3b52/contourpy-1.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f", size = 1306641 },
- { url = "https://files.pythonhosted.org/packages/d4/cc/74e5e83d1e35de2d28bd97033426b450bc4fd96e092a1f7a63dc7369b55d/contourpy-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2", size = 1374075 },
- { url = "https://files.pythonhosted.org/packages/0c/42/17f3b798fd5e033b46a16f8d9fcb39f1aba051307f5ebf441bad1ecf78f8/contourpy-1.3.2-cp310-cp310-win32.whl", hash = "sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0", size = 177534 },
- { url = "https://files.pythonhosted.org/packages/54/ec/5162b8582f2c994721018d0c9ece9dc6ff769d298a8ac6b6a652c307e7df/contourpy-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a", size = 221188 },
- { url = "https://files.pythonhosted.org/packages/b3/b9/ede788a0b56fc5b071639d06c33cb893f68b1178938f3425debebe2dab78/contourpy-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a37a2fb93d4df3fc4c0e363ea4d16f83195fc09c891bc8ce072b9d084853445", size = 269636 },
- { url = "https://files.pythonhosted.org/packages/e6/75/3469f011d64b8bbfa04f709bfc23e1dd71be54d05b1b083be9f5b22750d1/contourpy-1.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b7cd50c38f500bbcc9b6a46643a40e0913673f869315d8e70de0438817cb7773", size = 254636 },
- { url = "https://files.pythonhosted.org/packages/8d/2f/95adb8dae08ce0ebca4fd8e7ad653159565d9739128b2d5977806656fcd2/contourpy-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6658ccc7251a4433eebd89ed2672c2ed96fba367fd25ca9512aa92a4b46c4f1", size = 313053 },
- { url = "https://files.pythonhosted.org/packages/c3/a6/8ccf97a50f31adfa36917707fe39c9a0cbc24b3bbb58185577f119736cc9/contourpy-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:70771a461aaeb335df14deb6c97439973d253ae70660ca085eec25241137ef43", size = 352985 },
- { url = "https://files.pythonhosted.org/packages/1d/b6/7925ab9b77386143f39d9c3243fdd101621b4532eb126743201160ffa7e6/contourpy-1.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65a887a6e8c4cd0897507d814b14c54a8c2e2aa4ac9f7686292f9769fcf9a6ab", size = 323750 },
- { url = "https://files.pythonhosted.org/packages/c2/f3/20c5d1ef4f4748e52d60771b8560cf00b69d5c6368b5c2e9311bcfa2a08b/contourpy-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3859783aefa2b8355697f16642695a5b9792e7a46ab86da1118a4a23a51a33d7", size = 326246 },
- { url = "https://files.pythonhosted.org/packages/8c/e5/9dae809e7e0b2d9d70c52b3d24cba134dd3dad979eb3e5e71f5df22ed1f5/contourpy-1.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eab0f6db315fa4d70f1d8ab514e527f0366ec021ff853d7ed6a2d33605cf4b83", size = 1308728 },
- { url = "https://files.pythonhosted.org/packages/e2/4a/0058ba34aeea35c0b442ae61a4f4d4ca84d6df8f91309bc2d43bb8dd248f/contourpy-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d91a3ccc7fea94ca0acab82ceb77f396d50a1f67412efe4c526f5d20264e6ecd", size = 1375762 },
- { url = "https://files.pythonhosted.org/packages/09/33/7174bdfc8b7767ef2c08ed81244762d93d5c579336fc0b51ca57b33d1b80/contourpy-1.3.2-cp311-cp311-win32.whl", hash = "sha256:1c48188778d4d2f3d48e4643fb15d8608b1d01e4b4d6b0548d9b336c28fc9b6f", size = 178196 },
- { url = "https://files.pythonhosted.org/packages/5e/fe/4029038b4e1c4485cef18e480b0e2cd2d755448bb071eb9977caac80b77b/contourpy-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:5ebac872ba09cb8f2131c46b8739a7ff71de28a24c869bcad554477eb089a878", size = 222017 },
- { url = "https://files.pythonhosted.org/packages/34/f7/44785876384eff370c251d58fd65f6ad7f39adce4a093c934d4a67a7c6b6/contourpy-1.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2", size = 271580 },
- { url = "https://files.pythonhosted.org/packages/93/3b/0004767622a9826ea3d95f0e9d98cd8729015768075d61f9fea8eeca42a8/contourpy-1.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15", size = 255530 },
- { url = "https://files.pythonhosted.org/packages/e7/bb/7bd49e1f4fa805772d9fd130e0d375554ebc771ed7172f48dfcd4ca61549/contourpy-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92", size = 307688 },
- { url = "https://files.pythonhosted.org/packages/fc/97/e1d5dbbfa170725ef78357a9a0edc996b09ae4af170927ba8ce977e60a5f/contourpy-1.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87", size = 347331 },
- { url = "https://files.pythonhosted.org/packages/6f/66/e69e6e904f5ecf6901be3dd16e7e54d41b6ec6ae3405a535286d4418ffb4/contourpy-1.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415", size = 318963 },
- { url = "https://files.pythonhosted.org/packages/a8/32/b8a1c8965e4f72482ff2d1ac2cd670ce0b542f203c8e1d34e7c3e6925da7/contourpy-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe", size = 323681 },
- { url = "https://files.pythonhosted.org/packages/30/c6/12a7e6811d08757c7162a541ca4c5c6a34c0f4e98ef2b338791093518e40/contourpy-1.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441", size = 1308674 },
- { url = "https://files.pythonhosted.org/packages/2a/8a/bebe5a3f68b484d3a2b8ffaf84704b3e343ef1addea528132ef148e22b3b/contourpy-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e", size = 1380480 },
- { url = "https://files.pythonhosted.org/packages/34/db/fcd325f19b5978fb509a7d55e06d99f5f856294c1991097534360b307cf1/contourpy-1.3.2-cp312-cp312-win32.whl", hash = "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912", size = 178489 },
- { url = "https://files.pythonhosted.org/packages/01/c8/fadd0b92ffa7b5eb5949bf340a63a4a496a6930a6c37a7ba0f12acb076d6/contourpy-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73", size = 223042 },
- { url = "https://files.pythonhosted.org/packages/33/05/b26e3c6ecc05f349ee0013f0bb850a761016d89cec528a98193a48c34033/contourpy-1.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c", size = 265681 },
- { url = "https://files.pythonhosted.org/packages/2b/25/ac07d6ad12affa7d1ffed11b77417d0a6308170f44ff20fa1d5aa6333f03/contourpy-1.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16", size = 315101 },
- { url = "https://files.pythonhosted.org/packages/8f/4d/5bb3192bbe9d3f27e3061a6a8e7733c9120e203cb8515767d30973f71030/contourpy-1.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad", size = 220599 },
- { url = "https://files.pythonhosted.org/packages/ff/c0/91f1215d0d9f9f343e4773ba6c9b89e8c0cc7a64a6263f21139da639d848/contourpy-1.3.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5f5964cdad279256c084b69c3f412b7801e15356b16efa9d78aa974041903da0", size = 266807 },
- { url = "https://files.pythonhosted.org/packages/d4/79/6be7e90c955c0487e7712660d6cead01fa17bff98e0ea275737cc2bc8e71/contourpy-1.3.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49b65a95d642d4efa8f64ba12558fcb83407e58a2dfba9d796d77b63ccfcaff5", size = 318729 },
- { url = "https://files.pythonhosted.org/packages/87/68/7f46fb537958e87427d98a4074bcde4b67a70b04900cfc5ce29bc2f556c1/contourpy-1.3.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:8c5acb8dddb0752bf252e01a3035b21443158910ac16a3b0d20e7fed7d534ce5", size = 221791 },
+ { url = "https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934", size = 46018 },
]
[[package]]
@@ -619,15 +625,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/57/ff/f3b4b2d007c2a646b0f69440ab06224f9cf37a977a72cdb7b50632174e8a/cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:04abd71114848aa25edb28e225ab5f268096f44cf0127f3d36975bdf1bdf3390", size = 4107081 },
]
-[[package]]
-name = "cssselect"
-version = "1.3.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/72/0a/c3ea9573b1dc2e151abfe88c7fe0c26d1892fe6ed02d0cdb30f0d57029d5/cssselect-1.3.0.tar.gz", hash = "sha256:57f8a99424cfab289a1b6a816a43075a4b00948c86b4dcf3ef4ee7e15f7ab0c7", size = 42870 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/ee/58/257350f7db99b4ae12b614a36256d9cc870d71d9e451e79c2dc3b23d7c3c/cssselect-1.3.0-py3-none-any.whl", hash = "sha256:56d1bf3e198080cc1667e137bc51de9cadfca259f03c2d4e09037b3e01e30f0d", size = 18786 },
-]
-
[[package]]
name = "cssutils"
version = "2.11.1"
@@ -649,15 +646,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/20/42/70e58c51f5c519fcfe8a633702562a9dda4e54b7d5dcdbee511cd6250d57/currency_symbols-2.0.3-py3-none-any.whl", hash = "sha256:e71c82320f1b410ab15614f5df6ea3645b204752081689bae30b6331006357f0", size = 5030 },
]
-[[package]]
-name = "cycler"
-version = "0.12.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 },
-]
-
[[package]]
name = "dataclasses-json"
version = "0.6.7"
@@ -696,6 +684,31 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/e3/f5/668b3444a2f487b0052b908af631fe39eeb2bdb2359d9bbc2c3b80b71119/datasets-3.5.1-py3-none-any.whl", hash = "sha256:4074dda8dd6e9ece242b1580a8ef3928777d59ae1db144d911229e443a093cbb", size = 491436 },
]
+[[package]]
+name = "ddgs"
+version = "9.10.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "click" },
+ { name = "fake-useragent" },
+ { name = "httpx", extra = ["brotli", "http2", "socks"] },
+ { name = "lxml" },
+ { name = "primp" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/07/76/8dc0323d1577037abad7a679f8af150ebb73a94995d3012de71a8898e6e6/ddgs-9.10.0.tar.gz", hash = "sha256:d9381ff75bdf1ad6691d3d1dc2be12be190d1d32ecd24f1002c492143c52c34f", size = 31491 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b5/0e/d4b7d6a8df5074cf67bc14adead39955b0bf847c947ff6cad0bb527887f4/ddgs-9.10.0-py3-none-any.whl", hash = "sha256:81233d79309836eb03e7df2a0d2697adc83c47c342713132c0ba618f1f2c6eee", size = 40311 },
+]
+
+[[package]]
+name = "decorator"
+version = "5.2.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 },
+]
+
[[package]]
name = "dill"
version = "0.3.8"
@@ -705,15 +718,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/c9/7a/cef76fd8438a42f96db64ddaa85280485a9c395e7df3db8158cfec1eee34/dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7", size = 116252 },
]
-[[package]]
-name = "diskcache"
-version = "5.6.3"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/3f/21/1c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6/diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc", size = 67916 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550 },
-]
-
[[package]]
name = "distro"
version = "1.9.0"
@@ -725,11 +729,11 @@ wheels = [
[[package]]
name = "docstring-parser"
-version = "0.15"
+version = "0.17.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/e8/2d/ea1dfc15b909cc660f657a3a9d698a2916b7f3b05535a2d72e8d7ea3ad5b/docstring_parser-0.15.tar.gz", hash = "sha256:48ddc093e8b1865899956fcc03b03e66bb7240c310fac5af81814580c55bf682", size = 26768 }
+sdist = { url = "https://files.pythonhosted.org/packages/b2/9d/c3b43da9515bd270df0f80548d9944e389870713cc1fe2b8fb35fe2bcefd/docstring_parser-0.17.0.tar.gz", hash = "sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912", size = 27442 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/89/e3/32e272db7adcf90e93f73e9a98fd763049ed7c641fb57ab26cb8f3e7e79c/docstring_parser-0.15-py3-none-any.whl", hash = "sha256:d1679b86250d269d06a99670924d6bce45adc00b08069dae8c47d98e89b667a9", size = 36093 },
+ { url = "https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl", hash = "sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708", size = 36896 },
]
[[package]]
@@ -761,51 +765,6 @@ version = "0.8"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/7d/7d/60ee3f2b16d9bfdfa72e8599470a2c1a5b759cb113c6fe1006be28359327/docx2txt-0.8.tar.gz", hash = "sha256:2c06d98d7cfe2d3947e5760a57d924e3ff07745b379c8737723922e7009236e5", size = 2814 }
-[[package]]
-name = "duckdb"
-version = "1.2.2"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/28/b8/0f86278684fb7a1fac7c0c869fc6d68ed005cdc91c963eb4373e0551bc0a/duckdb-1.2.2.tar.gz", hash = "sha256:1e53555dece49201df08645dbfa4510c86440339889667702f936b7d28d39e43", size = 11595514 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/cc/47/d17eecc8bf23519f4385a7ad361482e5791f6b94995a50839f130c469626/duckdb-1.2.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:6e5e6c333b550903ff11919ed1154c60c9b9d935db51afdb263babe523a8a69e", size = 15255351 },
- { url = "https://files.pythonhosted.org/packages/bd/d1/317397198e0481339c469441762ce4e563f612479c2be70ddba3c1493bf2/duckdb-1.2.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:c1fcbc579de8e4fa7e34242fd6f419c1a39520073b1fe0c29ed6e60ed5553f38", size = 31925074 },
- { url = "https://files.pythonhosted.org/packages/3d/e2/9f8cfa9d8a8d1370ae2b5cf0c6a34e6adc51be533771fd75b5ff84fb2441/duckdb-1.2.2-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:690885060c4140922ffa2f6935291c6e74ddad0ca2cf33bff66474ce89312ab3", size = 16779904 },
- { url = "https://files.pythonhosted.org/packages/e6/47/3651b1ab62b6e8ce15a1ead5d81d4bc76b09912c2ae0b11aa0bbcbd0209d/duckdb-1.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a382782980643f5ee827990b76f079b22f47786509061c0afac28afaa5b8bf5", size = 18726556 },
- { url = "https://files.pythonhosted.org/packages/6d/66/6b2a433d042a3a5109c1a62a4daaea40b908e7876756aed2837adaf0ca26/duckdb-1.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7c33345570ed8c50c9fe340c2767470115cc02d330f25384104cfad1f6e54f5", size = 20195269 },
- { url = "https://files.pythonhosted.org/packages/a3/38/1737151fba968c0e7221b68d11c80ed9ff63edf380d91058426b51f1b233/duckdb-1.2.2-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b744f8293ce649d802a9eabbf88e4930d672cf9de7d4fc9af5d14ceaeeec5805", size = 18737528 },
- { url = "https://files.pythonhosted.org/packages/b3/37/bfde2ea14353a297e7effe9e4688b4e60a3ec08a9bd67c404c64046e5d9e/duckdb-1.2.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c8680e81b0c77be9fc968c1dd4cd38395c34b18bb693cbfc7b7742c18221cc9b", size = 22254571 },
- { url = "https://files.pythonhosted.org/packages/f0/42/392736bfd62b5b5f0d9ea15b010c90a8c92c21fdfc4372e46160f3d8f680/duckdb-1.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:fb41f2035a70378b3021f724bb08b047ca4aa475850a3744c442570054af3c52", size = 11366201 },
- { url = "https://files.pythonhosted.org/packages/c1/41/78c63937a4f7a5de7d128203c567303d4813c1109b7d17e6b3959f0882e1/duckdb-1.2.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:081110ffbc9d53c9740ef55482c93b97db2f8030d681d1658827d2e94f77da03", size = 15258298 },
- { url = "https://files.pythonhosted.org/packages/94/b2/91d983ecd67a1b87343e98395ffe7d77c996e1798c1bab339beed4680693/duckdb-1.2.2-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:53a154dbc074604036a537784ce5d1468edf263745a4363ca06fdb922f0d0a99", size = 31933969 },
- { url = "https://files.pythonhosted.org/packages/ad/12/4737b682cbc1b4778ffb37e4f4cdb603676c50aec89d6c9781ec29d3e904/duckdb-1.2.2-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:0353f80882c066f7b14451852395b7a360f3d4846a10555c4268eb49144ea11c", size = 16784775 },
- { url = "https://files.pythonhosted.org/packages/71/be/dfb52b579a0b82aa92993aecc100bd951d0bd1850c6a8d47c68953a9de62/duckdb-1.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b134a5002757af1ae44a9ae26c2fe963ffa09eb47a62779ce0c5eeb44bfc2f28", size = 18731124 },
- { url = "https://files.pythonhosted.org/packages/ca/49/153dd6289a3d06e87c3199a5547ccc04c574d167d7f85c1a8196218bf040/duckdb-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd9c434127fd1575694e1cf19a393bed301f5d6e80b4bcdae80caa368a61a678", size = 20199712 },
- { url = "https://files.pythonhosted.org/packages/97/ce/f27a7b735a8abb04e2c1efcc05178e25e455539c74d70f76c2845bae8473/duckdb-1.2.2-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:890f58855d127c25bc3a53f4c24b27e79391c4468c4fcc99bc10d87b5d4bd1c4", size = 18739966 },
- { url = "https://files.pythonhosted.org/packages/d8/f2/a8066267eb5fcd1f535776efde29b6d0fa678d978a7de73f47bc59cc940d/duckdb-1.2.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a5002305cdd4e76c94b61b50abc5e3f4e32c9cb81116960bb4b74acbbc9c6c8", size = 22255946 },
- { url = "https://files.pythonhosted.org/packages/df/74/8a05ef00c554882d8300c2c261e8f7e7ead74e2b3ff66059599ff2646cf4/duckdb-1.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:cdb9999c6a109aa31196cdd22fc58a810a3d35d08181a25d1bf963988e89f0a5", size = 11368173 },
- { url = "https://files.pythonhosted.org/packages/77/25/549f68e55e1b455bd2daf2e5fc912000a3139fe0395111b3d49b23a2cec1/duckdb-1.2.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f745379f44ad302560688855baaed9739c03b37a331338eda6a4ac655e4eb42f", size = 15271882 },
- { url = "https://files.pythonhosted.org/packages/f6/84/13de7bf9056dcc7a346125d9a9f0f26f76c633db6b54052738f78f828538/duckdb-1.2.2-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:087713fc5958cae5eb59097856b3deaae0def021660c8f2052ec83fa8345174a", size = 31964873 },
- { url = "https://files.pythonhosted.org/packages/0f/53/c8d2d56a801b7843ea87f8533a3634e6b38f06910098a266f8a096bd4c61/duckdb-1.2.2-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:a1f96395319c447a31b9477881bd84b4cb8323d6f86f21ceaef355d22dd90623", size = 16800653 },
- { url = "https://files.pythonhosted.org/packages/bb/36/e25791d879fb93b92a56bf481ce11949ab19109103ae2ba12d64e49355d9/duckdb-1.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6aba3bc0acf4f8d52b94f7746c3b0007b78b517676d482dc516d63f48f967baf", size = 18735524 },
- { url = "https://files.pythonhosted.org/packages/d7/46/4745aa10a1e460f4c8b473eddaffe2c783ac5280e1e5929dd84bd1a1acde/duckdb-1.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5c1556775a9ebaa49b5c8d64718f155ac3e05b34a49e9c99443cf105e8b0371", size = 20210314 },
- { url = "https://files.pythonhosted.org/packages/ff/0d/8563fc5ece36252e3d07dd3d29c7a0a034dcf62f14bed7cdc016d95adcbe/duckdb-1.2.2-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d625cc7d2faacfb2fc83ebbe001ae75dda175b3d8dce6a51a71c199ffac3627a", size = 18755134 },
- { url = "https://files.pythonhosted.org/packages/11/f1/b7ade7d980eee4fb3ad7469ccf23adb3668a9a28cf3989b24418392d3786/duckdb-1.2.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:73263f81545c5cb4360fbaf7b22a493e55ddf88fadbe639c43efb7bc8d7554c4", size = 22294397 },
- { url = "https://files.pythonhosted.org/packages/eb/c9/896e8ced7b408df81e015fe0c6497cda46c92d9dfc8bf84b6d13f5dad473/duckdb-1.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:b1c0c4d737fd2ab9681e4e78b9f361e0a827916a730e84fa91e76dca451b14d5", size = 11370381 },
-]
-
-[[package]]
-name = "duckduckgo-search"
-version = "6.4.2"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "click" },
- { name = "primp" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/31/3f/c36407a7be9cad84c2f15ec38839a9fbc2ad2f8cc051a9ebfd70cddd813a/duckduckgo_search-6.4.2.tar.gz", hash = "sha256:173c6988cbac1f3ccecc2c645e44e69fc49c4e94c06ee7c09e9dd8ad39d63b0c", size = 33341 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/d5/2e/c8bfff437be4d53a0156d75334234e59ba2e8d8fd24b618b1cef15e8e2ee/duckduckgo_search-6.4.2-py3-none-any.whl", hash = "sha256:1e9e64a5379a5330bd99885c053185c9e133eb30f397701fdd6e4f448da1843c", size = 27808 },
-]
-
[[package]]
name = "e2b"
version = "1.3.5"
@@ -865,6 +824,24 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/ce/31/55cd413eaccd39125368be33c46de24a1f639f2e12349b0361b4678f3915/eval_type_backport-0.2.2-py3-none-any.whl", hash = "sha256:cb6ad7c393517f476f96d456d0412ea80f0a8cf96f6892834cd9340149111b0a", size = 5830 },
]
+[[package]]
+name = "exa-py"
+version = "1.16.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "httpcore" },
+ { name = "httpx" },
+ { name = "openai" },
+ { name = "pydantic" },
+ { name = "python-dotenv" },
+ { name = "requests" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/77/15/abbe4361f42416c1741d252821bdfffe0e1ad9b39655b04db417b79b0d55/exa_py-1.16.1.tar.gz", hash = "sha256:3cb371b8efd321881a8217070f16afdac5afbaa9229177f80d5c427e1a6dbd59", size = 41364 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/95/28/5b871e0ac1b76e560f75226f70897cb3e7cb66022cfb58507d0e7d6217ca/exa_py-1.16.1-py3-none-any.whl", hash = "sha256:3b323ed32725b72110720306ea12da09161cfa9c8ac64797a9c0b66869741f27", size = 56631 },
+]
+
[[package]]
name = "exceptiongroup"
version = "1.2.2"
@@ -883,15 +860,12 @@ wheels = [
]
[[package]]
-name = "faker"
-version = "19.13.0"
+name = "fake-useragent"
+version = "2.2.0"
source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "python-dateutil" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/d9/b1/82df1201efdf0216f656caf7f7052f2fedf6bbb86998cac8e8926bca621e/Faker-19.13.0.tar.gz", hash = "sha256:14ccb0aec342d33aa3889a864a56e5b3c2d56bce1b89f9189f4fbc128b9afc1e", size = 1699872 }
+sdist = { url = "https://files.pythonhosted.org/packages/41/43/948d10bf42735709edb5ae51e23297d034086f17fc7279fef385a7acb473/fake_useragent-2.2.0.tar.gz", hash = "sha256:4e6ab6571e40cc086d788523cf9e018f618d07f9050f822ff409a4dfe17c16b2", size = 158898 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/18/d6/314868f573b09d9f0590a2c2f7dd7463153d3dab1049f0ba5e7008776d91/Faker-19.13.0-py3-none-any.whl", hash = "sha256:da880a76322db7a879c848a0771e129338e0a680a9f695fd9a3e7a6ac82b45e1", size = 1737393 },
+ { url = "https://files.pythonhosted.org/packages/51/37/b3ea9cd5558ff4cb51957caca2193981c6b0ff30bd0d2630ac62505d99d0/fake_useragent-2.2.0-py3-none-any.whl", hash = "sha256:67f35ca4d847b0d298187443aaf020413746e56acd985a611908c73dba2daa24", size = 161695 },
]
[[package]]
@@ -908,17 +882,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/50/b3/b51f09c2ba432a576fe63758bddc81f78f0c6309d9e5c10d194313bf021e/fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d", size = 95164 },
]
-[[package]]
-name = "feedfinder2"
-version = "0.0.4"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "beautifulsoup4" },
- { name = "requests" },
- { name = "six" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/35/82/1251fefec3bb4b03fd966c7e7f7a41c9fc2bb00d823a34c13f847fd61406/feedfinder2-0.0.4.tar.gz", hash = "sha256:3701ee01a6c85f8b865a049c30ba0b4608858c803fe8e30d1d289fdbe89d0efe", size = 3297 }
-
[[package]]
name = "feedparser"
version = "6.0.11"
@@ -987,6 +950,14 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/7b/ca/de512a8330d113826ae333d94640674a8f22ffe832832275d91bda3a4907/firecrawl-2.5.3-py3-none-any.whl", hash = "sha256:9162fb9e2db26dfcc8e6748c2ee794e7c64f337ed74d6f487b5792d8d5d86c5b", size = 137845 },
]
+[[package]]
+name = "flatbuffers"
+version = "25.12.19"
+source = { registry = "https://pypi.org/simple" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl", hash = "sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4", size = 26661 },
+]
+
[[package]]
name = "fonttools"
version = "4.57.0"
@@ -1020,12 +991,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/90/27/45f8957c3132917f91aaa56b700bcfc2396be1253f685bd5c68529b6f610/fonttools-4.57.0-py3-none-any.whl", hash = "sha256:3122c604a675513c68bd24c6a8f9091f1c2376d18e8f5fe5a101746c81b3e98f", size = 1093605 },
]
-[[package]]
-name = "fpdf"
-version = "1.7.2"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/37/c6/608a9e6c172bf9124aa687ec8b9f0e8e5d697d59a5f4fad0e2d5ec2a7556/fpdf-1.7.2.tar.gz", hash = "sha256:125840783289e7d12552b1e86ab692c37322e7a65b96a99e0ea86cca041b6779", size = 39504 }
-
[[package]]
name = "frozenlist"
version = "1.6.0"
@@ -1110,13 +1075,13 @@ wheels = [
]
[[package]]
-name = "genson"
-version = "1.3.0"
+name = "google-search-results"
+version = "2.4.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/c5/cf/2303c8ad276dcf5ee2ad6cf69c4338fd86ef0f471a5207b069adf7a393cf/genson-1.3.0.tar.gz", hash = "sha256:e02db9ac2e3fd29e65b5286f7135762e2cd8a986537c075b06fc5f1517308e37", size = 34919 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/f8/5c/e226de133afd8bb267ec27eead9ae3d784b95b39a287ed404caab39a5f50/genson-1.3.0-py3-none-any.whl", hash = "sha256:468feccd00274cc7e4c09e84b08704270ba8d95232aa280f65b986139cec67f7", size = 21470 },
+dependencies = [
+ { name = "requests" },
]
+sdist = { url = "https://files.pythonhosted.org/packages/77/30/b3a6f6a2e00f8153549c2fa345c58ae1ce8e5f3153c2fe0484d444c3abcb/google_search_results-2.4.2.tar.gz", hash = "sha256:603a30ecae2af8e600b22635757a6df275dad4b934f975e67878ccd640b78245", size = 18818 }
[[package]]
name = "gradio"
@@ -1239,6 +1204,28 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515 },
]
+[[package]]
+name = "h2"
+version = "4.3.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "hpack" },
+ { name = "hyperframe" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/1d/17/afa56379f94ad0fe8defd37d6eb3f89a25404ffc71d4d848893d270325fc/h2-4.3.0.tar.gz", hash = "sha256:6c59efe4323fa18b47a632221a1888bd7fde6249819beda254aeca909f221bf1", size = 2152026 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/69/b2/119f6e6dcbd96f9069ce9a2665e0146588dc9f88f29549711853645e736a/h2-4.3.0-py3-none-any.whl", hash = "sha256:c438f029a25f7945c69e0ccf0fb951dc3f73a5f6412981daee861431b70e2bdd", size = 61779 },
+]
+
+[[package]]
+name = "hpack"
+version = "4.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/2c/48/71de9ed269fdae9c8057e5a4c0aa7402e8bb16f2c6e90b3aa53327b113f8/hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca", size = 51276 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/07/c6/80c95b1b2b94682a72cbdbfb85b81ae2daffa4291fbfa1b1464502ede10d/hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496", size = 34357 },
+]
+
[[package]]
name = "html2text"
version = "2025.4.15"
@@ -1289,6 +1276,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
]
+[package.optional-dependencies]
+brotli = [
+ { name = "brotli", marker = "platform_python_implementation == 'CPython'" },
+ { name = "brotlicffi", marker = "platform_python_implementation != 'CPython'" },
+]
+http2 = [
+ { name = "h2" },
+]
+socks = [
+ { name = "socksio" },
+]
+
[[package]]
name = "httpx-sse"
version = "0.4.0"
@@ -1316,6 +1315,27 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/93/27/1fb384a841e9661faad1c31cbfa62864f59632e876df5d795234da51c395/huggingface_hub-0.30.2-py3-none-any.whl", hash = "sha256:68ff05969927058cfa41df4f2155d4bb48f5f54f719dd0390103eefa9b191e28", size = 481433 },
]
+[[package]]
+name = "humanfriendly"
+version = "10.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pyreadline3", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/cc/3f/2c29224acb2e2df4d2046e4c73ee2662023c58ff5b113c4c1adac0886c43/humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc", size = 360702 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477", size = 86794 },
+]
+
+[[package]]
+name = "hyperframe"
+version = "6.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/02/e7/94f8232d4a74cc99514c13a9f995811485a6903d48e5d952771ef6322e30/hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08", size = 26566 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5", size = 13007 },
+]
+
[[package]]
name = "idna"
version = "3.10"
@@ -1355,21 +1375,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656 },
]
-[[package]]
-name = "interegular"
-version = "0.3.3"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/dc/9d/8b6dde58a028a3962ce17e84d5fe73758df61378e00ef8ac3d85da34b0ff/interegular-0.3.3.tar.gz", hash = "sha256:d9b697b21b34884711399ba0f0376914b81899ce670032486d0d048344a76600", size = 24705 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/c4/01/72d6472f80651673716d1deda2a5bbb633e563ecf94f4479da5519d69d25/interegular-0.3.3-py37-none-any.whl", hash = "sha256:b0c07007d48c89d6d19f7204972d369b2a77222722e126b6aa63aa721dc3b19c", size = 23635 },
-]
-
-[[package]]
-name = "jieba3k"
-version = "0.35.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/a9/cb/2c8332bcdc14d33b0bedd18ae0a4981a069c3513e445120da3c3f23a8aaa/jieba3k-0.35.1.zip", hash = "sha256:980a4f2636b778d312518066be90c7697d410dd5a472385f5afced71a2db1c10", size = 7423646 }
-
[[package]]
name = "jinja2"
version = "3.1.6"
@@ -1384,46 +1389,48 @@ wheels = [
[[package]]
name = "jiter"
-version = "0.9.0"
+version = "0.12.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/1e/c2/e4562507f52f0af7036da125bb699602ead37a2332af0788f8e0a3417f36/jiter-0.9.0.tar.gz", hash = "sha256:aadba0964deb424daa24492abc3d229c60c4a31bfee205aedbf1acc7639d7893", size = 162604 }
+sdist = { url = "https://files.pythonhosted.org/packages/45/9d/e0660989c1370e25848bb4c52d061c71837239738ad937e83edca174c273/jiter-0.12.0.tar.gz", hash = "sha256:64dfcd7d5c168b38d3f9f8bba7fc639edb3418abcc74f22fdbe6b8938293f30b", size = 168294 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/b0/82/39f7c9e67b3b0121f02a0b90d433626caa95a565c3d2449fea6bcfa3f5f5/jiter-0.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:816ec9b60fdfd1fec87da1d7ed46c66c44ffec37ab2ef7de5b147b2fce3fd5ad", size = 314540 },
- { url = "https://files.pythonhosted.org/packages/01/07/7bf6022c5a152fca767cf5c086bb41f7c28f70cf33ad259d023b53c0b858/jiter-0.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b1d3086f8a3ee0194ecf2008cf81286a5c3e540d977fa038ff23576c023c0ea", size = 321065 },
- { url = "https://files.pythonhosted.org/packages/6c/b2/de3f3446ecba7c48f317568e111cc112613da36c7b29a6de45a1df365556/jiter-0.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1339f839b91ae30b37c409bf16ccd3dc453e8b8c3ed4bd1d6a567193651a4a51", size = 341664 },
- { url = "https://files.pythonhosted.org/packages/13/cf/6485a4012af5d407689c91296105fcdb080a3538e0658d2abf679619c72f/jiter-0.9.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ffba79584b3b670fefae66ceb3a28822365d25b7bf811e030609a3d5b876f538", size = 364635 },
- { url = "https://files.pythonhosted.org/packages/0d/f7/4a491c568f005553240b486f8e05c82547340572d5018ef79414b4449327/jiter-0.9.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cfc7d0a8e899089d11f065e289cb5b2daf3d82fbe028f49b20d7b809193958d", size = 406288 },
- { url = "https://files.pythonhosted.org/packages/d3/ca/f4263ecbce7f5e6bded8f52a9f1a66540b270c300b5c9f5353d163f9ac61/jiter-0.9.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e00a1a2bbfaaf237e13c3d1592356eab3e9015d7efd59359ac8b51eb56390a12", size = 397499 },
- { url = "https://files.pythonhosted.org/packages/ac/a2/522039e522a10bac2f2194f50e183a49a360d5f63ebf46f6d890ef8aa3f9/jiter-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1d9870561eb26b11448854dce0ff27a9a27cb616b632468cafc938de25e9e51", size = 352926 },
- { url = "https://files.pythonhosted.org/packages/b1/67/306a5c5abc82f2e32bd47333a1c9799499c1c3a415f8dde19dbf876f00cb/jiter-0.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9872aeff3f21e437651df378cb75aeb7043e5297261222b6441a620218b58708", size = 384506 },
- { url = "https://files.pythonhosted.org/packages/0f/89/c12fe7b65a4fb74f6c0d7b5119576f1f16c79fc2953641f31b288fad8a04/jiter-0.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1fd19112d1049bdd47f17bfbb44a2c0001061312dcf0e72765bfa8abd4aa30e5", size = 520621 },
- { url = "https://files.pythonhosted.org/packages/c4/2b/d57900c5c06e6273fbaa76a19efa74dbc6e70c7427ab421bf0095dfe5d4a/jiter-0.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6ef5da104664e526836070e4a23b5f68dec1cc673b60bf1edb1bfbe8a55d0678", size = 512613 },
- { url = "https://files.pythonhosted.org/packages/89/05/d8b90bfb21e58097d5a4e0224f2940568366f68488a079ae77d4b2653500/jiter-0.9.0-cp310-cp310-win32.whl", hash = "sha256:cb12e6d65ebbefe5518de819f3eda53b73187b7089040b2d17f5b39001ff31c4", size = 206613 },
- { url = "https://files.pythonhosted.org/packages/2c/1d/5767f23f88e4f885090d74bbd2755518050a63040c0f59aa059947035711/jiter-0.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:c43ca669493626d8672be3b645dbb406ef25af3f4b6384cfd306da7eb2e70322", size = 208371 },
- { url = "https://files.pythonhosted.org/packages/23/44/e241a043f114299254e44d7e777ead311da400517f179665e59611ab0ee4/jiter-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6c4d99c71508912a7e556d631768dcdef43648a93660670986916b297f1c54af", size = 314654 },
- { url = "https://files.pythonhosted.org/packages/fb/1b/a7e5e42db9fa262baaa9489d8d14ca93f8663e7f164ed5e9acc9f467fc00/jiter-0.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8f60fb8ce7df529812bf6c625635a19d27f30806885139e367af93f6e734ef58", size = 320909 },
- { url = "https://files.pythonhosted.org/packages/60/bf/8ebdfce77bc04b81abf2ea316e9c03b4a866a7d739cf355eae4d6fd9f6fe/jiter-0.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51c4e1a4f8ea84d98b7b98912aa4290ac3d1eabfde8e3c34541fae30e9d1f08b", size = 341733 },
- { url = "https://files.pythonhosted.org/packages/a8/4e/754ebce77cff9ab34d1d0fa0fe98f5d42590fd33622509a3ba6ec37ff466/jiter-0.9.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f4c677c424dc76684fea3e7285a7a2a7493424bea89ac441045e6a1fb1d7b3b", size = 365097 },
- { url = "https://files.pythonhosted.org/packages/32/2c/6019587e6f5844c612ae18ca892f4cd7b3d8bbf49461ed29e384a0f13d98/jiter-0.9.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2221176dfec87f3470b21e6abca056e6b04ce9bff72315cb0b243ca9e835a4b5", size = 406603 },
- { url = "https://files.pythonhosted.org/packages/da/e9/c9e6546c817ab75a1a7dab6dcc698e62e375e1017113e8e983fccbd56115/jiter-0.9.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c7adb66f899ffa25e3c92bfcb593391ee1947dbdd6a9a970e0d7e713237d572", size = 396625 },
- { url = "https://files.pythonhosted.org/packages/be/bd/976b458add04271ebb5a255e992bd008546ea04bb4dcadc042a16279b4b4/jiter-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c98d27330fdfb77913c1097a7aab07f38ff2259048949f499c9901700789ac15", size = 351832 },
- { url = "https://files.pythonhosted.org/packages/07/51/fe59e307aaebec9265dbad44d9d4381d030947e47b0f23531579b9a7c2df/jiter-0.9.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eda3f8cc74df66892b1d06b5d41a71670c22d95a1ca2cbab73654745ce9d0419", size = 384590 },
- { url = "https://files.pythonhosted.org/packages/db/55/5dcd2693794d8e6f4889389ff66ef3be557a77f8aeeca8973a97a7c00557/jiter-0.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dd5ab5ddc11418dce28343123644a100f487eaccf1de27a459ab36d6cca31043", size = 520690 },
- { url = "https://files.pythonhosted.org/packages/54/d5/9f51dc90985e9eb251fbbb747ab2b13b26601f16c595a7b8baba964043bd/jiter-0.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42f8a68a69f047b310319ef8e2f52fdb2e7976fb3313ef27df495cf77bcad965", size = 512649 },
- { url = "https://files.pythonhosted.org/packages/a6/e5/4e385945179bcf128fa10ad8dca9053d717cbe09e258110e39045c881fe5/jiter-0.9.0-cp311-cp311-win32.whl", hash = "sha256:a25519efb78a42254d59326ee417d6f5161b06f5da827d94cf521fed961b1ff2", size = 206920 },
- { url = "https://files.pythonhosted.org/packages/4c/47/5e0b94c603d8e54dd1faab439b40b832c277d3b90743e7835879ab663757/jiter-0.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:923b54afdd697dfd00d368b7ccad008cccfeb1efb4e621f32860c75e9f25edbd", size = 210119 },
- { url = "https://files.pythonhosted.org/packages/af/d7/c55086103d6f29b694ec79156242304adf521577530d9031317ce5338c59/jiter-0.9.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7b46249cfd6c48da28f89eb0be3f52d6fdb40ab88e2c66804f546674e539ec11", size = 309203 },
- { url = "https://files.pythonhosted.org/packages/b0/01/f775dfee50beb420adfd6baf58d1c4d437de41c9b666ddf127c065e5a488/jiter-0.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:609cf3c78852f1189894383cf0b0b977665f54cb38788e3e6b941fa6d982c00e", size = 319678 },
- { url = "https://files.pythonhosted.org/packages/ab/b8/09b73a793714726893e5d46d5c534a63709261af3d24444ad07885ce87cb/jiter-0.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d726a3890a54561e55a9c5faea1f7655eda7f105bd165067575ace6e65f80bb2", size = 341816 },
- { url = "https://files.pythonhosted.org/packages/35/6f/b8f89ec5398b2b0d344257138182cc090302854ed63ed9c9051e9c673441/jiter-0.9.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2e89dc075c1fef8fa9be219e249f14040270dbc507df4215c324a1839522ea75", size = 364152 },
- { url = "https://files.pythonhosted.org/packages/9b/ca/978cc3183113b8e4484cc7e210a9ad3c6614396e7abd5407ea8aa1458eef/jiter-0.9.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04e8ffa3c353b1bc4134f96f167a2082494351e42888dfcf06e944f2729cbe1d", size = 406991 },
- { url = "https://files.pythonhosted.org/packages/13/3a/72861883e11a36d6aa314b4922125f6ae90bdccc225cd96d24cc78a66385/jiter-0.9.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:203f28a72a05ae0e129b3ed1f75f56bc419d5f91dfacd057519a8bd137b00c42", size = 395824 },
- { url = "https://files.pythonhosted.org/packages/87/67/22728a86ef53589c3720225778f7c5fdb617080e3deaed58b04789418212/jiter-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fca1a02ad60ec30bb230f65bc01f611c8608b02d269f998bc29cca8619a919dc", size = 351318 },
- { url = "https://files.pythonhosted.org/packages/69/b9/f39728e2e2007276806d7a6609cda7fac44ffa28ca0d02c49a4f397cc0d9/jiter-0.9.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:237e5cee4d5d2659aaf91bbf8ec45052cc217d9446070699441a91b386ae27dc", size = 384591 },
- { url = "https://files.pythonhosted.org/packages/eb/8f/8a708bc7fd87b8a5d861f1c118a995eccbe6d672fe10c9753e67362d0dd0/jiter-0.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:528b6b71745e7326eed73c53d4aa57e2a522242320b6f7d65b9c5af83cf49b6e", size = 520746 },
- { url = "https://files.pythonhosted.org/packages/95/1e/65680c7488bd2365dbd2980adaf63c562d3d41d3faac192ebc7ef5b4ae25/jiter-0.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9f48e86b57bc711eb5acdfd12b6cb580a59cc9a993f6e7dcb6d8b50522dcd50d", size = 512754 },
- { url = "https://files.pythonhosted.org/packages/78/f3/fdc43547a9ee6e93c837685da704fb6da7dba311fc022e2766d5277dfde5/jiter-0.9.0-cp312-cp312-win32.whl", hash = "sha256:699edfde481e191d81f9cf6d2211debbfe4bd92f06410e7637dffb8dd5dfde06", size = 207075 },
- { url = "https://files.pythonhosted.org/packages/cd/9d/742b289016d155f49028fe1bfbeb935c9bf0ffeefdf77daf4a63a42bb72b/jiter-0.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:099500d07b43f61d8bd780466d429c45a7b25411b334c60ca875fa775f68ccb0", size = 207999 },
+ { url = "https://files.pythonhosted.org/packages/3b/91/13cb9505f7be74a933f37da3af22e029f6ba64f5669416cb8b2774bc9682/jiter-0.12.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:e7acbaba9703d5de82a2c98ae6a0f59ab9770ab5af5fa35e43a303aee962cf65", size = 316652 },
+ { url = "https://files.pythonhosted.org/packages/4e/76/4e9185e5d9bb4e482cf6dec6410d5f78dfeb374cfcecbbe9888d07c52daa/jiter-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:364f1a7294c91281260364222f535bc427f56d4de1d8ffd718162d21fbbd602e", size = 319829 },
+ { url = "https://files.pythonhosted.org/packages/86/af/727de50995d3a153138139f259baae2379d8cb0522c0c00419957bc478a6/jiter-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85ee4d25805d4fb23f0a5167a962ef8e002dbfb29c0989378488e32cf2744b62", size = 350568 },
+ { url = "https://files.pythonhosted.org/packages/6a/c1/d6e9f4b7a3d5ac63bcbdfddeb50b2dcfbdc512c86cffc008584fdc350233/jiter-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:796f466b7942107eb889c08433b6e31b9a7ed31daceaecf8af1be26fb26c0ca8", size = 369052 },
+ { url = "https://files.pythonhosted.org/packages/eb/be/00824cd530f30ed73fa8a4f9f3890a705519e31ccb9e929f1e22062e7c76/jiter-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:35506cb71f47dba416694e67af996bbdefb8e3608f1f78799c2e1f9058b01ceb", size = 481585 },
+ { url = "https://files.pythonhosted.org/packages/74/b6/2ad7990dff9504d4b5052eef64aa9574bd03d722dc7edced97aad0d47be7/jiter-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:726c764a90c9218ec9e4f99a33d6bf5ec169163f2ca0fc21b654e88c2abc0abc", size = 380541 },
+ { url = "https://files.pythonhosted.org/packages/b5/c7/f3c26ecbc1adbf1db0d6bba99192143d8fe8504729d9594542ecc4445784/jiter-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa47810c5565274810b726b0dc86d18dce5fd17b190ebdc3890851d7b2a0e74", size = 364423 },
+ { url = "https://files.pythonhosted.org/packages/18/51/eac547bf3a2d7f7e556927278e14c56a0604b8cddae75815d5739f65f81d/jiter-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8ec0259d3f26c62aed4d73b198c53e316ae11f0f69c8fbe6682c6dcfa0fcce2", size = 389958 },
+ { url = "https://files.pythonhosted.org/packages/2c/1f/9ca592e67175f2db156cff035e0d817d6004e293ee0c1d73692d38fcb596/jiter-0.12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:79307d74ea83465b0152fa23e5e297149506435535282f979f18b9033c0bb025", size = 522084 },
+ { url = "https://files.pythonhosted.org/packages/83/ff/597d9cdc3028f28224f53e1a9d063628e28b7a5601433e3196edda578cdd/jiter-0.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cf6e6dd18927121fec86739f1a8906944703941d000f0639f3eb6281cc601dca", size = 513054 },
+ { url = "https://files.pythonhosted.org/packages/24/6d/1970bce1351bd02e3afcc5f49e4f7ef3dabd7fb688f42be7e8091a5b809a/jiter-0.12.0-cp310-cp310-win32.whl", hash = "sha256:b6ae2aec8217327d872cbfb2c1694489057b9433afce447955763e6ab015b4c4", size = 206368 },
+ { url = "https://files.pythonhosted.org/packages/e3/6b/eb1eb505b2d86709b59ec06681a2b14a94d0941db091f044b9f0e16badc0/jiter-0.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:c7f49ce90a71e44f7e1aa9e7ec415b9686bbc6a5961e57eab511015e6759bc11", size = 204847 },
+ { url = "https://files.pythonhosted.org/packages/32/f9/eaca4633486b527ebe7e681c431f529b63fe2709e7c5242fc0f43f77ce63/jiter-0.12.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8f8a7e317190b2c2d60eb2e8aa835270b008139562d70fe732e1c0020ec53c9", size = 316435 },
+ { url = "https://files.pythonhosted.org/packages/10/c1/40c9f7c22f5e6ff715f28113ebaba27ab85f9af2660ad6e1dd6425d14c19/jiter-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2218228a077e784c6c8f1a8e5d6b8cb1dea62ce25811c356364848554b2056cd", size = 320548 },
+ { url = "https://files.pythonhosted.org/packages/6b/1b/efbb68fe87e7711b00d2cfd1f26bb4bfc25a10539aefeaa7727329ffb9cb/jiter-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9354ccaa2982bf2188fd5f57f79f800ef622ec67beb8329903abf6b10da7d423", size = 351915 },
+ { url = "https://files.pythonhosted.org/packages/15/2d/c06e659888c128ad1e838123d0638f0efad90cc30860cb5f74dd3f2fc0b3/jiter-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2607185ea89b4af9a604d4c7ec40e45d3ad03ee66998b031134bc510232bb7", size = 368966 },
+ { url = "https://files.pythonhosted.org/packages/6b/20/058db4ae5fb07cf6a4ab2e9b9294416f606d8e467fb74c2184b2a1eeacba/jiter-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a585a5e42d25f2e71db5f10b171f5e5ea641d3aa44f7df745aa965606111cc2", size = 482047 },
+ { url = "https://files.pythonhosted.org/packages/49/bb/dc2b1c122275e1de2eb12905015d61e8316b2f888bdaac34221c301495d6/jiter-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd9e21d34edff5a663c631f850edcb786719c960ce887a5661e9c828a53a95d9", size = 380835 },
+ { url = "https://files.pythonhosted.org/packages/23/7d/38f9cd337575349de16da575ee57ddb2d5a64d425c9367f5ef9e4612e32e/jiter-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a612534770470686cd5431478dc5a1b660eceb410abade6b1b74e320ca98de6", size = 364587 },
+ { url = "https://files.pythonhosted.org/packages/f0/a3/b13e8e61e70f0bb06085099c4e2462647f53cc2ca97614f7fedcaa2bb9f3/jiter-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3985aea37d40a908f887b34d05111e0aae822943796ebf8338877fee2ab67725", size = 390492 },
+ { url = "https://files.pythonhosted.org/packages/07/71/e0d11422ed027e21422f7bc1883c61deba2d9752b720538430c1deadfbca/jiter-0.12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b1207af186495f48f72529f8d86671903c8c10127cac6381b11dddc4aaa52df6", size = 522046 },
+ { url = "https://files.pythonhosted.org/packages/9f/59/b968a9aa7102a8375dbbdfbd2aeebe563c7e5dddf0f47c9ef1588a97e224/jiter-0.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef2fb241de583934c9915a33120ecc06d94aa3381a134570f59eed784e87001e", size = 513392 },
+ { url = "https://files.pythonhosted.org/packages/ca/e4/7df62002499080dbd61b505c5cb351aa09e9959d176cac2aa8da6f93b13b/jiter-0.12.0-cp311-cp311-win32.whl", hash = "sha256:453b6035672fecce8007465896a25b28a6b59cfe8fbc974b2563a92f5a92a67c", size = 206096 },
+ { url = "https://files.pythonhosted.org/packages/bb/60/1032b30ae0572196b0de0e87dce3b6c26a1eff71aad5fe43dee3082d32e0/jiter-0.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:ca264b9603973c2ad9435c71a8ec8b49f8f715ab5ba421c85a51cde9887e421f", size = 204899 },
+ { url = "https://files.pythonhosted.org/packages/49/d5/c145e526fccdb834063fb45c071df78b0cc426bbaf6de38b0781f45d956f/jiter-0.12.0-cp311-cp311-win_arm64.whl", hash = "sha256:cb00ef392e7d684f2754598c02c409f376ddcef857aae796d559e6cacc2d78a5", size = 188070 },
+ { url = "https://files.pythonhosted.org/packages/92/c9/5b9f7b4983f1b542c64e84165075335e8a236fa9e2ea03a0c79780062be8/jiter-0.12.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:305e061fa82f4680607a775b2e8e0bcb071cd2205ac38e6ef48c8dd5ebe1cf37", size = 314449 },
+ { url = "https://files.pythonhosted.org/packages/98/6e/e8efa0e78de00db0aee82c0cf9e8b3f2027efd7f8a71f859d8f4be8e98ef/jiter-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5c1860627048e302a528333c9307c818c547f214d8659b0705d2195e1a94b274", size = 319855 },
+ { url = "https://files.pythonhosted.org/packages/20/26/894cd88e60b5d58af53bec5c6759d1292bd0b37a8b5f60f07abf7a63ae5f/jiter-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df37577a4f8408f7e0ec3205d2a8f87672af8f17008358063a4d6425b6081ce3", size = 350171 },
+ { url = "https://files.pythonhosted.org/packages/f5/27/a7b818b9979ac31b3763d25f3653ec3a954044d5e9f5d87f2f247d679fd1/jiter-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:75fdd787356c1c13a4f40b43c2156276ef7a71eb487d98472476476d803fb2cf", size = 365590 },
+ { url = "https://files.pythonhosted.org/packages/ba/7e/e46195801a97673a83746170b17984aa8ac4a455746354516d02ca5541b4/jiter-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1eb5db8d9c65b112aacf14fcd0faae9913d07a8afea5ed06ccdd12b724e966a1", size = 479462 },
+ { url = "https://files.pythonhosted.org/packages/ca/75/f833bfb009ab4bd11b1c9406d333e3b4357709ed0570bb48c7c06d78c7dd/jiter-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73c568cc27c473f82480abc15d1301adf333a7ea4f2e813d6a2c7d8b6ba8d0df", size = 378983 },
+ { url = "https://files.pythonhosted.org/packages/71/b3/7a69d77943cc837d30165643db753471aff5df39692d598da880a6e51c24/jiter-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4321e8a3d868919bcb1abb1db550d41f2b5b326f72df29e53b2df8b006eb9403", size = 361328 },
+ { url = "https://files.pythonhosted.org/packages/b0/ac/a78f90caf48d65ba70d8c6efc6f23150bc39dc3389d65bbec2a95c7bc628/jiter-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a51bad79f8cc9cac2b4b705039f814049142e0050f30d91695a2d9a6611f126", size = 386740 },
+ { url = "https://files.pythonhosted.org/packages/39/b6/5d31c2cc8e1b6a6bcf3c5721e4ca0a3633d1ab4754b09bc7084f6c4f5327/jiter-0.12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2a67b678f6a5f1dd6c36d642d7db83e456bc8b104788262aaefc11a22339f5a9", size = 520875 },
+ { url = "https://files.pythonhosted.org/packages/30/b5/4df540fae4e9f68c54b8dab004bd8c943a752f0b00efd6e7d64aa3850339/jiter-0.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efe1a211fe1fd14762adea941e3cfd6c611a136e28da6c39272dbb7a1bbe6a86", size = 511457 },
+ { url = "https://files.pythonhosted.org/packages/07/65/86b74010e450a1a77b2c1aabb91d4a91dd3cd5afce99f34d75fd1ac64b19/jiter-0.12.0-cp312-cp312-win32.whl", hash = "sha256:d779d97c834b4278276ec703dc3fc1735fca50af63eb7262f05bdb4e62203d44", size = 204546 },
+ { url = "https://files.pythonhosted.org/packages/1c/c7/6659f537f9562d963488e3e55573498a442503ced01f7e169e96a6110383/jiter-0.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e8269062060212b373316fe69236096aaf4c49022d267c6736eebd66bbbc60bb", size = 205196 },
+ { url = "https://files.pythonhosted.org/packages/21/f4/935304f5169edadfec7f9c01eacbce4c90bb9a82035ac1de1f3bd2d40be6/jiter-0.12.0-cp312-cp312-win_arm64.whl", hash = "sha256:06cb970936c65de926d648af0ed3d21857f026b1cf5525cb2947aa5e01e05789", size = 186100 },
]
[[package]]
@@ -1477,65 +1484,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437 },
]
-[[package]]
-name = "kiwisolver"
-version = "1.4.8"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/47/5f/4d8e9e852d98ecd26cdf8eaf7ed8bc33174033bba5e07001b289f07308fd/kiwisolver-1.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db", size = 124623 },
- { url = "https://files.pythonhosted.org/packages/1d/70/7f5af2a18a76fe92ea14675f8bd88ce53ee79e37900fa5f1a1d8e0b42998/kiwisolver-1.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b", size = 66720 },
- { url = "https://files.pythonhosted.org/packages/c6/13/e15f804a142353aefd089fadc8f1d985561a15358c97aca27b0979cb0785/kiwisolver-1.4.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce2cf1e5688edcb727fdf7cd1bbd0b6416758996826a8be1d958f91880d0809d", size = 65413 },
- { url = "https://files.pythonhosted.org/packages/ce/6d/67d36c4d2054e83fb875c6b59d0809d5c530de8148846b1370475eeeece9/kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c8bf637892dc6e6aad2bc6d4d69d08764166e5e3f69d469e55427b6ac001b19d", size = 1650826 },
- { url = "https://files.pythonhosted.org/packages/de/c6/7b9bb8044e150d4d1558423a1568e4f227193662a02231064e3824f37e0a/kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:034d2c891f76bd3edbdb3ea11140d8510dca675443da7304205a2eaa45d8334c", size = 1628231 },
- { url = "https://files.pythonhosted.org/packages/b6/38/ad10d437563063eaaedbe2c3540a71101fc7fb07a7e71f855e93ea4de605/kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47b28d1dfe0793d5e96bce90835e17edf9a499b53969b03c6c47ea5985844c3", size = 1408938 },
- { url = "https://files.pythonhosted.org/packages/52/ce/c0106b3bd7f9e665c5f5bc1e07cc95b5dabd4e08e3dad42dbe2faad467e7/kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb158fe28ca0c29f2260cca8c43005329ad58452c36f0edf298204de32a9a3ed", size = 1422799 },
- { url = "https://files.pythonhosted.org/packages/d0/87/efb704b1d75dc9758087ba374c0f23d3254505edaedd09cf9d247f7878b9/kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5536185fce131780ebd809f8e623bf4030ce1b161353166c49a3c74c287897f", size = 1354362 },
- { url = "https://files.pythonhosted.org/packages/eb/b3/fd760dc214ec9a8f208b99e42e8f0130ff4b384eca8b29dd0efc62052176/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:369b75d40abedc1da2c1f4de13f3482cb99e3237b38726710f4a793432b1c5ff", size = 2222695 },
- { url = "https://files.pythonhosted.org/packages/a2/09/a27fb36cca3fc01700687cc45dae7a6a5f8eeb5f657b9f710f788748e10d/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:641f2ddf9358c80faa22e22eb4c9f54bd3f0e442e038728f500e3b978d00aa7d", size = 2370802 },
- { url = "https://files.pythonhosted.org/packages/3d/c3/ba0a0346db35fe4dc1f2f2cf8b99362fbb922d7562e5f911f7ce7a7b60fa/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d561d2d8883e0819445cfe58d7ddd673e4015c3c57261d7bdcd3710d0d14005c", size = 2334646 },
- { url = "https://files.pythonhosted.org/packages/41/52/942cf69e562f5ed253ac67d5c92a693745f0bed3c81f49fc0cbebe4d6b00/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1732e065704b47c9afca7ffa272f845300a4eb959276bf6970dc07265e73b605", size = 2467260 },
- { url = "https://files.pythonhosted.org/packages/32/26/2d9668f30d8a494b0411d4d7d4ea1345ba12deb6a75274d58dd6ea01e951/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bcb1ebc3547619c3b58a39e2448af089ea2ef44b37988caf432447374941574e", size = 2288633 },
- { url = "https://files.pythonhosted.org/packages/98/99/0dd05071654aa44fe5d5e350729961e7bb535372935a45ac89a8924316e6/kiwisolver-1.4.8-cp310-cp310-win_amd64.whl", hash = "sha256:89c107041f7b27844179ea9c85d6da275aa55ecf28413e87624d033cf1f6b751", size = 71885 },
- { url = "https://files.pythonhosted.org/packages/6c/fc/822e532262a97442989335394d441cd1d0448c2e46d26d3e04efca84df22/kiwisolver-1.4.8-cp310-cp310-win_arm64.whl", hash = "sha256:b5773efa2be9eb9fcf5415ea3ab70fc785d598729fd6057bea38d539ead28271", size = 65175 },
- { url = "https://files.pythonhosted.org/packages/da/ed/c913ee28936c371418cb167b128066ffb20bbf37771eecc2c97edf8a6e4c/kiwisolver-1.4.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a4d3601908c560bdf880f07d94f31d734afd1bb71e96585cace0e38ef44c6d84", size = 124635 },
- { url = "https://files.pythonhosted.org/packages/4c/45/4a7f896f7467aaf5f56ef093d1f329346f3b594e77c6a3c327b2d415f521/kiwisolver-1.4.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:856b269c4d28a5c0d5e6c1955ec36ebfd1651ac00e1ce0afa3e28da95293b561", size = 66717 },
- { url = "https://files.pythonhosted.org/packages/5f/b4/c12b3ac0852a3a68f94598d4c8d569f55361beef6159dce4e7b624160da2/kiwisolver-1.4.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c2b9a96e0f326205af81a15718a9073328df1173a2619a68553decb7097fd5d7", size = 65413 },
- { url = "https://files.pythonhosted.org/packages/a9/98/1df4089b1ed23d83d410adfdc5947245c753bddfbe06541c4aae330e9e70/kiwisolver-1.4.8-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5020c83e8553f770cb3b5fc13faac40f17e0b205bd237aebd21d53d733adb03", size = 1343994 },
- { url = "https://files.pythonhosted.org/packages/8d/bf/b4b169b050c8421a7c53ea1ea74e4ef9c335ee9013216c558a047f162d20/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dace81d28c787956bfbfbbfd72fdcef014f37d9b48830829e488fdb32b49d954", size = 1434804 },
- { url = "https://files.pythonhosted.org/packages/66/5a/e13bd341fbcf73325ea60fdc8af752addf75c5079867af2e04cc41f34434/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11e1022b524bd48ae56c9b4f9296bce77e15a2e42a502cceba602f804b32bb79", size = 1450690 },
- { url = "https://files.pythonhosted.org/packages/9b/4f/5955dcb376ba4a830384cc6fab7d7547bd6759fe75a09564910e9e3bb8ea/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b9b4d2892fefc886f30301cdd80debd8bb01ecdf165a449eb6e78f79f0fabd6", size = 1376839 },
- { url = "https://files.pythonhosted.org/packages/3a/97/5edbed69a9d0caa2e4aa616ae7df8127e10f6586940aa683a496c2c280b9/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a96c0e790ee875d65e340ab383700e2b4891677b7fcd30a699146f9384a2bb0", size = 1435109 },
- { url = "https://files.pythonhosted.org/packages/13/fc/e756382cb64e556af6c1809a1bbb22c141bbc2445049f2da06b420fe52bf/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23454ff084b07ac54ca8be535f4174170c1094a4cff78fbae4f73a4bcc0d4dab", size = 2245269 },
- { url = "https://files.pythonhosted.org/packages/76/15/e59e45829d7f41c776d138245cabae6515cb4eb44b418f6d4109c478b481/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:87b287251ad6488e95b4f0b4a79a6d04d3ea35fde6340eb38fbd1ca9cd35bbbc", size = 2393468 },
- { url = "https://files.pythonhosted.org/packages/e9/39/483558c2a913ab8384d6e4b66a932406f87c95a6080112433da5ed668559/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b21dbe165081142b1232a240fc6383fd32cdd877ca6cc89eab93e5f5883e1c25", size = 2355394 },
- { url = "https://files.pythonhosted.org/packages/01/aa/efad1fbca6570a161d29224f14b082960c7e08268a133fe5dc0f6906820e/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:768cade2c2df13db52475bd28d3a3fac8c9eff04b0e9e2fda0f3760f20b3f7fc", size = 2490901 },
- { url = "https://files.pythonhosted.org/packages/c9/4f/15988966ba46bcd5ab9d0c8296914436720dd67fca689ae1a75b4ec1c72f/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d47cfb2650f0e103d4bf68b0b5804c68da97272c84bb12850d877a95c056bd67", size = 2312306 },
- { url = "https://files.pythonhosted.org/packages/2d/27/bdf1c769c83f74d98cbc34483a972f221440703054894a37d174fba8aa68/kiwisolver-1.4.8-cp311-cp311-win_amd64.whl", hash = "sha256:ed33ca2002a779a2e20eeb06aea7721b6e47f2d4b8a8ece979d8ba9e2a167e34", size = 71966 },
- { url = "https://files.pythonhosted.org/packages/4a/c9/9642ea855604aeb2968a8e145fc662edf61db7632ad2e4fb92424be6b6c0/kiwisolver-1.4.8-cp311-cp311-win_arm64.whl", hash = "sha256:16523b40aab60426ffdebe33ac374457cf62863e330a90a0383639ce14bf44b2", size = 65311 },
- { url = "https://files.pythonhosted.org/packages/fc/aa/cea685c4ab647f349c3bc92d2daf7ae34c8e8cf405a6dcd3a497f58a2ac3/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", size = 124152 },
- { url = "https://files.pythonhosted.org/packages/c5/0b/8db6d2e2452d60d5ebc4ce4b204feeb16176a851fd42462f66ade6808084/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", size = 66555 },
- { url = "https://files.pythonhosted.org/packages/60/26/d6a0db6785dd35d3ba5bf2b2df0aedc5af089962c6eb2cbf67a15b81369e/kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", size = 65067 },
- { url = "https://files.pythonhosted.org/packages/c9/ed/1d97f7e3561e09757a196231edccc1bcf59d55ddccefa2afc9c615abd8e0/kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", size = 1378443 },
- { url = "https://files.pythonhosted.org/packages/29/61/39d30b99954e6b46f760e6289c12fede2ab96a254c443639052d1b573fbc/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", size = 1472728 },
- { url = "https://files.pythonhosted.org/packages/0c/3e/804163b932f7603ef256e4a715e5843a9600802bb23a68b4e08c8c0ff61d/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", size = 1478388 },
- { url = "https://files.pythonhosted.org/packages/8a/9e/60eaa75169a154700be74f875a4d9961b11ba048bef315fbe89cb6999056/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", size = 1413849 },
- { url = "https://files.pythonhosted.org/packages/bc/b3/9458adb9472e61a998c8c4d95cfdfec91c73c53a375b30b1428310f923e4/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", size = 1475533 },
- { url = "https://files.pythonhosted.org/packages/e4/7a/0a42d9571e35798de80aef4bb43a9b672aa7f8e58643d7bd1950398ffb0a/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", size = 2268898 },
- { url = "https://files.pythonhosted.org/packages/d9/07/1255dc8d80271400126ed8db35a1795b1a2c098ac3a72645075d06fe5c5d/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", size = 2425605 },
- { url = "https://files.pythonhosted.org/packages/84/df/5a3b4cf13780ef6f6942df67b138b03b7e79e9f1f08f57c49957d5867f6e/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", size = 2375801 },
- { url = "https://files.pythonhosted.org/packages/8f/10/2348d068e8b0f635c8c86892788dac7a6b5c0cb12356620ab575775aad89/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", size = 2520077 },
- { url = "https://files.pythonhosted.org/packages/32/d8/014b89fee5d4dce157d814303b0fce4d31385a2af4c41fed194b173b81ac/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", size = 2338410 },
- { url = "https://files.pythonhosted.org/packages/bd/72/dfff0cc97f2a0776e1c9eb5bef1ddfd45f46246c6533b0191887a427bca5/kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", size = 71853 },
- { url = "https://files.pythonhosted.org/packages/dc/85/220d13d914485c0948a00f0b9eb419efaf6da81b7d72e88ce2391f7aed8d/kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", size = 65424 },
- { url = "https://files.pythonhosted.org/packages/1f/f9/ae81c47a43e33b93b0a9819cac6723257f5da2a5a60daf46aa5c7226ea85/kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e7a019419b7b510f0f7c9dceff8c5eae2392037eae483a7f9162625233802b0a", size = 60403 },
- { url = "https://files.pythonhosted.org/packages/58/ca/f92b5cb6f4ce0c1ebfcfe3e2e42b96917e16f7090e45b21102941924f18f/kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:286b18e86682fd2217a48fc6be6b0f20c1d0ed10958d8dc53453ad58d7be0bf8", size = 58657 },
- { url = "https://files.pythonhosted.org/packages/80/28/ae0240f732f0484d3a4dc885d055653c47144bdf59b670aae0ec3c65a7c8/kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4191ee8dfd0be1c3666ccbac178c5a05d5f8d689bbe3fc92f3c4abec817f8fe0", size = 84948 },
- { url = "https://files.pythonhosted.org/packages/5d/eb/78d50346c51db22c7203c1611f9b513075f35c4e0e4877c5dde378d66043/kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd2785b9391f2873ad46088ed7599a6a71e762e1ea33e87514b1a441ed1da1c", size = 81186 },
- { url = "https://files.pythonhosted.org/packages/43/f8/7259f18c77adca88d5f64f9a522792e178b2691f3748817a8750c2d216ef/kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c07b29089b7ba090b6f1a669f1411f27221c3662b3a1b7010e67b59bb5a6f10b", size = 80279 },
- { url = "https://files.pythonhosted.org/packages/3a/1d/50ad811d1c5dae091e4cf046beba925bcae0a610e79ae4c538f996f63ed5/kiwisolver-1.4.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:65ea09a5a3faadd59c2ce96dc7bf0f364986a315949dc6374f04396b0d60e09b", size = 71762 },
-]
-
[[package]]
name = "langdetect"
version = "1.0.9"
@@ -1545,15 +1493,6 @@ dependencies = [
]
sdist = { url = "https://files.pythonhosted.org/packages/0e/72/a3add0e4eec4eb9e2569554f7c70f4a3c27712f40e3284d483e88094cc0e/langdetect-1.0.9.tar.gz", hash = "sha256:cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0", size = 981474 }
-[[package]]
-name = "lark"
-version = "1.2.2"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036 },
-]
-
[[package]]
name = "lazy-object-proxy"
version = "1.11.0"
@@ -1731,46 +1670,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/34/75/51952c7b2d3873b44a0028b1bd26a25078c18f92f256608e8d1dc61b39fd/marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c", size = 50878 },
]
-[[package]]
-name = "matplotlib"
-version = "3.10.1"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "contourpy" },
- { name = "cycler" },
- { name = "fonttools" },
- { name = "kiwisolver" },
- { name = "numpy" },
- { name = "packaging" },
- { name = "pillow" },
- { name = "pyparsing" },
- { name = "python-dateutil" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/2f/08/b89867ecea2e305f408fbb417139a8dd941ecf7b23a2e02157c36da546f0/matplotlib-3.10.1.tar.gz", hash = "sha256:e8d2d0e3881b129268585bf4765ad3ee73a4591d77b9a18c214ac7e3a79fb2ba", size = 36743335 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/ee/b1/f70e27cf1cd76ce2a5e1aa5579d05afe3236052c6d9b9a96325bc823a17e/matplotlib-3.10.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ff2ae14910be903f4a24afdbb6d7d3a6c44da210fc7d42790b87aeac92238a16", size = 8163654 },
- { url = "https://files.pythonhosted.org/packages/26/af/5ec3d4636106718bb62503a03297125d4514f98fe818461bd9e6b9d116e4/matplotlib-3.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0721a3fd3d5756ed593220a8b86808a36c5031fce489adb5b31ee6dbb47dd5b2", size = 8037943 },
- { url = "https://files.pythonhosted.org/packages/a1/3d/07f9003a71b698b848c9925d05979ffa94a75cd25d1a587202f0bb58aa81/matplotlib-3.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0673b4b8f131890eb3a1ad058d6e065fb3c6e71f160089b65f8515373394698", size = 8449510 },
- { url = "https://files.pythonhosted.org/packages/12/87/9472d4513ff83b7cd864311821793ab72234fa201ab77310ec1b585d27e2/matplotlib-3.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e875b95ac59a7908978fe307ecdbdd9a26af7fa0f33f474a27fcf8c99f64a19", size = 8586585 },
- { url = "https://files.pythonhosted.org/packages/31/9e/fe74d237d2963adae8608faeb21f778cf246dbbf4746cef87cffbc82c4b6/matplotlib-3.10.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2589659ea30726284c6c91037216f64a506a9822f8e50592d48ac16a2f29e044", size = 9397911 },
- { url = "https://files.pythonhosted.org/packages/b6/1b/025d3e59e8a4281ab463162ad7d072575354a1916aba81b6a11507dfc524/matplotlib-3.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a97ff127f295817bc34517255c9db6e71de8eddaab7f837b7d341dee9f2f587f", size = 8052998 },
- { url = "https://files.pythonhosted.org/packages/a5/14/a1b840075be247bb1834b22c1e1d558740b0f618fe3a823740181ca557a1/matplotlib-3.10.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:057206ff2d6ab82ff3e94ebd94463d084760ca682ed5f150817b859372ec4401", size = 8174669 },
- { url = "https://files.pythonhosted.org/packages/0a/e4/300b08e3e08f9c98b0d5635f42edabf2f7a1d634e64cb0318a71a44ff720/matplotlib-3.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a144867dd6bf8ba8cb5fc81a158b645037e11b3e5cf8a50bd5f9917cb863adfe", size = 8047996 },
- { url = "https://files.pythonhosted.org/packages/75/f9/8d99ff5a2498a5f1ccf919fb46fb945109623c6108216f10f96428f388bc/matplotlib-3.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56c5d9fcd9879aa8040f196a235e2dcbdf7dd03ab5b07c0696f80bc6cf04bedd", size = 8461612 },
- { url = "https://files.pythonhosted.org/packages/40/b8/53fa08a5eaf78d3a7213fd6da1feec4bae14a81d9805e567013811ff0e85/matplotlib-3.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f69dc9713e4ad2fb21a1c30e37bd445d496524257dfda40ff4a8efb3604ab5c", size = 8602258 },
- { url = "https://files.pythonhosted.org/packages/40/87/4397d2ce808467af86684a622dd112664553e81752ea8bf61bdd89d24a41/matplotlib-3.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c59af3e8aca75d7744b68e8e78a669e91ccbcf1ac35d0102a7b1b46883f1dd7", size = 9408896 },
- { url = "https://files.pythonhosted.org/packages/d7/68/0d03098b3feb786cbd494df0aac15b571effda7f7cbdec267e8a8d398c16/matplotlib-3.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:11b65088c6f3dae784bc72e8d039a2580186285f87448babb9ddb2ad0082993a", size = 8061281 },
- { url = "https://files.pythonhosted.org/packages/7c/1d/5e0dc3b59c034e43de16f94deb68f4ad8a96b3ea00f4b37c160b7474928e/matplotlib-3.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:66e907a06e68cb6cfd652c193311d61a12b54f56809cafbed9736ce5ad92f107", size = 8175488 },
- { url = "https://files.pythonhosted.org/packages/7a/81/dae7e14042e74da658c3336ab9799128e09a1ee03964f2d89630b5d12106/matplotlib-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b4bb156abb8fa5e5b2b460196f7db7264fc6d62678c03457979e7d5254b7be", size = 8046264 },
- { url = "https://files.pythonhosted.org/packages/21/c4/22516775dcde10fc9c9571d155f90710761b028fc44f660508106c363c97/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1985ad3d97f51307a2cbfc801a930f120def19ba22864182dacef55277102ba6", size = 8452048 },
- { url = "https://files.pythonhosted.org/packages/63/23/c0615001f67ce7c96b3051d856baedc0c818a2ed84570b9bf9bde200f85d/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96f2c2f825d1257e437a1482c5a2cf4fee15db4261bd6fc0750f81ba2b4ba3d", size = 8597111 },
- { url = "https://files.pythonhosted.org/packages/ca/c0/a07939a82aed77770514348f4568177d7dadab9787ebc618a616fe3d665e/matplotlib-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35e87384ee9e488d8dd5a2dd7baf471178d38b90618d8ea147aced4ab59c9bea", size = 9402771 },
- { url = "https://files.pythonhosted.org/packages/a6/b6/a9405484fb40746fdc6ae4502b16a9d6e53282ba5baaf9ebe2da579f68c4/matplotlib-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfd414bce89cc78a7e1d25202e979b3f1af799e416010a20ab2b5ebb3a02425c", size = 8063742 },
- { url = "https://files.pythonhosted.org/packages/c8/f6/10adb696d8cbeed2ab4c2e26ecf1c80dd3847bbf3891f4a0c362e0e08a5a/matplotlib-3.10.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:648406f1899f9a818cef8c0231b44dcfc4ff36f167101c3fd1c9151f24220fdc", size = 8158685 },
- { url = "https://files.pythonhosted.org/packages/3f/84/0603d917406072763e7f9bb37747d3d74d7ecd4b943a8c947cc3ae1cf7af/matplotlib-3.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:02582304e352f40520727984a5a18f37e8187861f954fea9be7ef06569cf85b4", size = 8035491 },
- { url = "https://files.pythonhosted.org/packages/fd/7d/6a8b31dd07ed856b3eae001c9129670ef75c4698fa1c2a6ac9f00a4a7054/matplotlib-3.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3809916157ba871bcdd33d3493acd7fe3037db5daa917ca6e77975a94cef779", size = 8590087 },
-]
-
[[package]]
name = "mcp"
version = "1.7.0"
@@ -1976,39 +1875,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 },
]
-[[package]]
-name = "networkx"
-version = "3.4.2"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 },
-]
-
-[[package]]
-name = "newspaper3k"
-version = "0.2.8"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "beautifulsoup4" },
- { name = "cssselect" },
- { name = "feedfinder2" },
- { name = "feedparser" },
- { name = "jieba3k" },
- { name = "lxml" },
- { name = "nltk" },
- { name = "pillow" },
- { name = "python-dateutil" },
- { name = "pyyaml" },
- { name = "requests" },
- { name = "tinysegmenter" },
- { name = "tldextract" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/ce/fb/8f8525be0cafa48926e85b0c06a7cb3e2a892d340b8036f8c8b1b572df1c/newspaper3k-0.2.8.tar.gz", hash = "sha256:9f1bd3e1fb48f400c715abf875cc7b0a67b7ddcd87f50c9aeeb8fcbbbd9004fb", size = 205685 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/d7/b9/51afecb35bb61b188a4b44868001de348a0e8134b4dfa00ffc191567c4b9/newspaper3k-0.2.8-py3-none-any.whl", hash = "sha256:44a864222633d3081113d1030615991c3dbba87239f6bbf59d91240f71a22e3e", size = 211132 },
-]
-
[[package]]
name = "nltk"
version = "3.9.1"
@@ -2056,139 +1922,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/16/2e/86f24451c2d530c88daf997cb8d6ac622c1d40d19f5a031ed68a4b73a374/numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818", size = 15517754 },
]
-[[package]]
-name = "nvidia-cublas-cu12"
-version = "12.6.4.1"
-source = { registry = "https://pypi.org/simple" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/af/eb/ff4b8c503fa1f1796679dce648854d58751982426e4e4b37d6fce49d259c/nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08ed2686e9875d01b58e3cb379c6896df8e76c75e0d4a7f7dace3d7b6d9ef8eb", size = 393138322 },
-]
-
-[[package]]
-name = "nvidia-cuda-cupti-cu12"
-version = "12.6.80"
-source = { registry = "https://pypi.org/simple" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/49/60/7b6497946d74bcf1de852a21824d63baad12cd417db4195fc1bfe59db953/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6768bad6cab4f19e8292125e5f1ac8aa7d1718704012a0e3272a6f61c4bce132", size = 8917980 },
- { url = "https://files.pythonhosted.org/packages/a5/24/120ee57b218d9952c379d1e026c4479c9ece9997a4fb46303611ee48f038/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a3eff6cdfcc6a4c35db968a06fcadb061cbc7d6dde548609a941ff8701b98b73", size = 8917972 },
-]
-
-[[package]]
-name = "nvidia-cuda-nvrtc-cu12"
-version = "12.6.77"
-source = { registry = "https://pypi.org/simple" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/75/2e/46030320b5a80661e88039f59060d1790298b4718944a65a7f2aeda3d9e9/nvidia_cuda_nvrtc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:35b0cc6ee3a9636d5409133e79273ce1f3fd087abb0532d2d2e8fff1fe9efc53", size = 23650380 },
-]
-
-[[package]]
-name = "nvidia-cuda-runtime-cu12"
-version = "12.6.77"
-source = { registry = "https://pypi.org/simple" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/e1/23/e717c5ac26d26cf39a27fbc076240fad2e3b817e5889d671b67f4f9f49c5/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ba3b56a4f896141e25e19ab287cd71e52a6a0f4b29d0d31609f60e3b4d5219b7", size = 897690 },
- { url = "https://files.pythonhosted.org/packages/f0/62/65c05e161eeddbafeca24dc461f47de550d9fa8a7e04eb213e32b55cfd99/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a84d15d5e1da416dd4774cb42edf5e954a3e60cc945698dc1d5be02321c44dc8", size = 897678 },
-]
-
-[[package]]
-name = "nvidia-cudnn-cu12"
-version = "9.5.1.17"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "nvidia-cublas-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
-]
-wheels = [
- { url = "https://files.pythonhosted.org/packages/2a/78/4535c9c7f859a64781e43c969a3a7e84c54634e319a996d43ef32ce46f83/nvidia_cudnn_cu12-9.5.1.17-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:30ac3869f6db17d170e0e556dd6cc5eee02647abc31ca856634d5a40f82c15b2", size = 570988386 },
-]
-
-[[package]]
-name = "nvidia-cufft-cu12"
-version = "11.3.0.4"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
-]
-wheels = [
- { url = "https://files.pythonhosted.org/packages/8f/16/73727675941ab8e6ffd86ca3a4b7b47065edcca7a997920b831f8147c99d/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ccba62eb9cef5559abd5e0d54ceed2d9934030f51163df018532142a8ec533e5", size = 200221632 },
- { url = "https://files.pythonhosted.org/packages/60/de/99ec247a07ea40c969d904fc14f3a356b3e2a704121675b75c366b694ee1/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.whl", hash = "sha256:768160ac89f6f7b459bee747e8d175dbf53619cfe74b2a5636264163138013ca", size = 200221622 },
-]
-
-[[package]]
-name = "nvidia-cufile-cu12"
-version = "1.11.1.6"
-source = { registry = "https://pypi.org/simple" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/b2/66/cc9876340ac68ae71b15c743ddb13f8b30d5244af344ec8322b449e35426/nvidia_cufile_cu12-1.11.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc23469d1c7e52ce6c1d55253273d32c565dd22068647f3aa59b3c6b005bf159", size = 1142103 },
-]
-
-[[package]]
-name = "nvidia-curand-cu12"
-version = "10.3.7.77"
-source = { registry = "https://pypi.org/simple" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/73/1b/44a01c4e70933637c93e6e1a8063d1e998b50213a6b65ac5a9169c47e98e/nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a42cd1344297f70b9e39a1e4f467a4e1c10f1da54ff7a85c12197f6c652c8bdf", size = 56279010 },
- { url = "https://files.pythonhosted.org/packages/4a/aa/2c7ff0b5ee02eaef890c0ce7d4f74bc30901871c5e45dee1ae6d0083cd80/nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:99f1a32f1ac2bd134897fc7a203f779303261268a65762a623bf30cc9fe79117", size = 56279000 },
-]
-
-[[package]]
-name = "nvidia-cusolver-cu12"
-version = "11.7.1.2"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "nvidia-cublas-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
- { name = "nvidia-cusparse-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
- { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
-]
-wheels = [
- { url = "https://files.pythonhosted.org/packages/f0/6e/c2cf12c9ff8b872e92b4a5740701e51ff17689c4d726fca91875b07f655d/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e9e49843a7707e42022babb9bcfa33c29857a93b88020c4e4434656a655b698c", size = 158229790 },
- { url = "https://files.pythonhosted.org/packages/9f/81/baba53585da791d043c10084cf9553e074548408e04ae884cfe9193bd484/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6cf28f17f64107a0c4d7802be5ff5537b2130bfc112f25d5a30df227058ca0e6", size = 158229780 },
-]
-
-[[package]]
-name = "nvidia-cusparse-cu12"
-version = "12.5.4.2"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "nvidia-nvjitlink-cu12", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
-]
-wheels = [
- { url = "https://files.pythonhosted.org/packages/06/1e/b8b7c2f4099a37b96af5c9bb158632ea9e5d9d27d7391d7eb8fc45236674/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7556d9eca156e18184b94947ade0fba5bb47d69cec46bf8660fd2c71a4b48b73", size = 216561367 },
- { url = "https://files.pythonhosted.org/packages/43/ac/64c4316ba163e8217a99680c7605f779accffc6a4bcd0c778c12948d3707/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:23749a6571191a215cb74d1cdbff4a86e7b19f1200c071b3fcf844a5bea23a2f", size = 216561357 },
-]
-
-[[package]]
-name = "nvidia-cusparselt-cu12"
-version = "0.6.3"
-source = { registry = "https://pypi.org/simple" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/3b/9a/72ef35b399b0e183bc2e8f6f558036922d453c4d8237dab26c666a04244b/nvidia_cusparselt_cu12-0.6.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e5c8a26c36445dd2e6812f1177978a24e2d37cacce7e090f297a688d1ec44f46", size = 156785796 },
-]
-
-[[package]]
-name = "nvidia-nccl-cu12"
-version = "2.26.2"
-source = { registry = "https://pypi.org/simple" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/67/ca/f42388aed0fddd64ade7493dbba36e1f534d4e6fdbdd355c6a90030ae028/nvidia_nccl_cu12-2.26.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:694cf3879a206553cc9d7dbda76b13efaf610fdb70a50cba303de1b0d1530ac6", size = 201319755 },
-]
-
-[[package]]
-name = "nvidia-nvjitlink-cu12"
-version = "12.6.85"
-source = { registry = "https://pypi.org/simple" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/9d/d7/c5383e47c7e9bf1c99d5bd2a8c935af2b6d705ad831a7ec5c97db4d82f4f/nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:eedc36df9e88b682efe4309aa16b5b4e78c2407eac59e8c10a6a47535164369a", size = 19744971 },
-]
-
-[[package]]
-name = "nvidia-nvtx-cu12"
-version = "12.6.77"
-source = { registry = "https://pypi.org/simple" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/56/9a/fff8376f8e3d084cd1530e1ef7b879bb7d6d265620c95c1b322725c694f4/nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b90bed3df379fa79afbd21be8e04a0314336b8ae16768b58f2d34cb1d04cd7d2", size = 89276 },
- { url = "https://files.pythonhosted.org/packages/9e/4e/0d0c945463719429b7bd21dece907ad0bde437a2ff12b9b12fee94722ab0/nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6574241a3ec5fdc9334353ab8c479fe75841dbe8f4532a8fc97ce63503330ba1", size = 89265 },
-]
-
[[package]]
name = "oauthlib"
version = "3.2.2"
@@ -2207,9 +1940,39 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/17/d3/b64c356a907242d719fc668b71befd73324e47ab46c8ebbbede252c154b2/olefile-0.47-py2.py3-none-any.whl", hash = "sha256:543c7da2a7adadf21214938bb79c83ea12b473a4b6ee4ad4bf854e7715e13d1f", size = 114565 },
]
+[[package]]
+name = "onnxruntime"
+version = "1.19.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "coloredlogs" },
+ { name = "flatbuffers" },
+ { name = "numpy" },
+ { name = "packaging" },
+ { name = "protobuf" },
+ { name = "sympy" },
+]
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/39/18/272d3d7406909141d3c9943796e3e97cafa53f4342d9231c0cfd8cb05702/onnxruntime-1.19.2-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:84fa57369c06cadd3c2a538ae2a26d76d583e7c34bdecd5769d71ca5c0fc750e", size = 16776408 },
+ { url = "https://files.pythonhosted.org/packages/d8/d3/eb93f4ae511cfc725d0c69e07008800f8ac018de19ea1e497b306f174ccc/onnxruntime-1.19.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdc471a66df0c1cdef774accef69e9f2ca168c851ab5e4f2f3341512c7ef4666", size = 11491779 },
+ { url = "https://files.pythonhosted.org/packages/ca/4b/ce5958074abe4b6e8d1da9c10e443e01a681558a9ec17e5cc7619438e094/onnxruntime-1.19.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e3a4ce906105d99ebbe817f536d50a91ed8a4d1592553f49b3c23c4be2560ae6", size = 13170428 },
+ { url = "https://files.pythonhosted.org/packages/ce/0f/6df82dfe02467d12adbaa05c2bd17519c29c7df531ed600231f0c741ad22/onnxruntime-1.19.2-cp310-cp310-win32.whl", hash = "sha256:4b3d723cc154c8ddeb9f6d0a8c0d6243774c6b5930847cc83170bfe4678fafb3", size = 9591305 },
+ { url = "https://files.pythonhosted.org/packages/3c/d8/68b63dc86b502169d017a86fe8bc718f4b0055ef1f6895bfaddd04f2eead/onnxruntime-1.19.2-cp310-cp310-win_amd64.whl", hash = "sha256:17ed7382d2c58d4b7354fb2b301ff30b9bf308a1c7eac9546449cd122d21cae5", size = 11084902 },
+ { url = "https://files.pythonhosted.org/packages/f0/ff/77bee5df55f034ee81d2e1bc58b2b8511b9c54f06ce6566cb562c5d95aa5/onnxruntime-1.19.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:d863e8acdc7232d705d49e41087e10b274c42f09e259016a46f32c34e06dc4fd", size = 16779187 },
+ { url = "https://files.pythonhosted.org/packages/f3/78/e29f5fb76e0f6524f3520e8e5b9d53282784b45d14068c5112db9f712b0a/onnxruntime-1.19.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c1dfe4f660a71b31caa81fc298a25f9612815215a47b286236e61d540350d7b6", size = 11496005 },
+ { url = "https://files.pythonhosted.org/packages/60/ce/be4152da5c1030ab5a159a4a792ed9abad6ba498d79ef0aeba593ff7b5bf/onnxruntime-1.19.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a36511dc07c5c964b916697e42e366fa43c48cdb3d3503578d78cef30417cb84", size = 13167809 },
+ { url = "https://files.pythonhosted.org/packages/e1/00/9740a074eb0e0a21ff13a2c4f32aecc5b21110b2c9b9177d8ac132b66e2d/onnxruntime-1.19.2-cp311-cp311-win32.whl", hash = "sha256:50cbb8dc69d6befad4746a69760e5b00cc3ff0a59c6c3fb27f8afa20e2cab7e7", size = 9591445 },
+ { url = "https://files.pythonhosted.org/packages/1e/f5/9d995a685f97508b3254f17015b4a78641b0625e79480a7aed7a7a105d7c/onnxruntime-1.19.2-cp311-cp311-win_amd64.whl", hash = "sha256:1c3e5d415b78337fa0b1b75291e9ea9fb2a4c1f148eb5811e7212fed02cfffa8", size = 11085695 },
+ { url = "https://files.pythonhosted.org/packages/f2/a5/2a02687a88fc8a2507bef65876c90e96b9f8de5ba1f810acbf67c140fc67/onnxruntime-1.19.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:68e7051bef9cfefcbb858d2d2646536829894d72a4130c24019219442b1dd2ed", size = 16790434 },
+ { url = "https://files.pythonhosted.org/packages/47/64/da42254ec14452cad2cdd4cf407094841c0a378c0d08944e9a36172197e9/onnxruntime-1.19.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d2d366fbcc205ce68a8a3bde2185fd15c604d9645888703785b61ef174265168", size = 11486028 },
+ { url = "https://files.pythonhosted.org/packages/b2/92/3574f6836f33b1b25f272293e72538c38451b12c2d9aa08630bb6bc0f057/onnxruntime-1.19.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:477b93df4db467e9cbf34051662a4b27c18e131fa1836e05974eae0d6e4cf29b", size = 13175054 },
+ { url = "https://files.pythonhosted.org/packages/ff/c9/8c37e413a830cac7f7dc094fffbd0c998c8bcb66a6f0b0a3201a49bc742b/onnxruntime-1.19.2-cp312-cp312-win32.whl", hash = "sha256:9a174073dc5608fad05f7cf7f320b52e8035e73d80b0a23c80f840e5a97c0147", size = 9592681 },
+ { url = "https://files.pythonhosted.org/packages/44/c0/59768846533786a82cafb38d8d2f900ad666bc91f0ae634774d286fa3c47/onnxruntime-1.19.2-cp312-cp312-win_amd64.whl", hash = "sha256:190103273ea4507638ffc31d66a980594b237874b65379e273125150eb044857", size = 11086411 },
+]
+
[[package]]
name = "openai"
-version = "1.76.2"
+version = "2.15.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
@@ -2221,9 +1984,9 @@ dependencies = [
{ name = "tqdm" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/d5/48/e767710b07acc1fca1f6b8cacd743102c71b8fdeca603876de0749ec00f1/openai-1.76.2.tar.gz", hash = "sha256:f430c8b848775907405c6eff54621254c96f6444c593c097e0cc3a9f8fdda96f", size = 434922 }
+sdist = { url = "https://files.pythonhosted.org/packages/94/f4/4690ecb5d70023ce6bfcfeabfe717020f654bde59a775058ec6ac4692463/openai-2.15.0.tar.gz", hash = "sha256:42eb8cbb407d84770633f31bf727d4ffb4138711c670565a41663d9439174fba", size = 627383 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/00/5f/aecb820917e93ca9fcac408e998dc22ee0561c308ed58dc8f328e3f7ef14/openai-1.76.2-py3-none-any.whl", hash = "sha256:9c1d9ad59e6e3bea7205eedc9ca66eeebae18d47b527e505a2b0d2fb1538e26e", size = 661253 },
+ { url = "https://files.pythonhosted.org/packages/b5/df/c306f7375d42bafb379934c2df4c2fa3964656c8c782bac75ee10c102818/openai-2.15.0-py3-none-any.whl", hash = "sha256:6ae23b932cd7230f7244e52954daa6602716d6b9bf235401a107af731baea6c3", size = 1067879 },
]
[[package]]
@@ -2255,23 +2018,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/2b/4d/e744fff95aaf3aeafc968d5ba7297c8cda0d1ecb8e3acd21b25adae4d835/openapi_spec_validator-0.7.1-py3-none-any.whl", hash = "sha256:3c81825043f24ccbcd2f4b149b11e8231abce5ba84f37065e14ec947d8f4e959", size = 38998 },
]
-[[package]]
-name = "opencv-python"
-version = "4.11.0.86"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "numpy" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/17/06/68c27a523103dad5837dc5b87e71285280c4f098c60e4fe8a8db6486ab09/opencv-python-4.11.0.86.tar.gz", hash = "sha256:03d60ccae62304860d232272e4a4fda93c39d595780cb40b161b310244b736a4", size = 95171956 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/05/4d/53b30a2a3ac1f75f65a59eb29cf2ee7207ce64867db47036ad61743d5a23/opencv_python-4.11.0.86-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:432f67c223f1dc2824f5e73cdfcd9db0efc8710647d4e813012195dc9122a52a", size = 37326322 },
- { url = "https://files.pythonhosted.org/packages/3b/84/0a67490741867eacdfa37bc18df96e08a9d579583b419010d7f3da8ff503/opencv_python-4.11.0.86-cp37-abi3-macosx_13_0_x86_64.whl", hash = "sha256:9d05ef13d23fe97f575153558653e2d6e87103995d54e6a35db3f282fe1f9c66", size = 56723197 },
- { url = "https://files.pythonhosted.org/packages/f3/bd/29c126788da65c1fb2b5fb621b7fed0ed5f9122aa22a0868c5e2c15c6d23/opencv_python-4.11.0.86-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b92ae2c8852208817e6776ba1ea0d6b1e0a1b5431e971a2a0ddd2a8cc398202", size = 42230439 },
- { url = "https://files.pythonhosted.org/packages/2c/8b/90eb44a40476fa0e71e05a0283947cfd74a5d36121a11d926ad6f3193cc4/opencv_python-4.11.0.86-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b02611523803495003bd87362db3e1d2a0454a6a63025dc6658a9830570aa0d", size = 62986597 },
- { url = "https://files.pythonhosted.org/packages/fb/d7/1d5941a9dde095468b288d989ff6539dd69cd429dbf1b9e839013d21b6f0/opencv_python-4.11.0.86-cp37-abi3-win32.whl", hash = "sha256:810549cb2a4aedaa84ad9a1c92fbfdfc14090e2749cedf2c1589ad8359aa169b", size = 29384337 },
- { url = "https://files.pythonhosted.org/packages/a4/7d/f1c30a92854540bf789e9cd5dde7ef49bbe63f855b85a2e6b3db8135c591/opencv_python-4.11.0.86-cp37-abi3-win_amd64.whl", hash = "sha256:085ad9b77c18853ea66283e98affefe2de8cc4c1f43eda4c100cf9b2721142ec", size = 39488044 },
-]
-
[[package]]
name = "openpyxl"
version = "3.1.5"
@@ -2284,6 +2030,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910 },
]
+[[package]]
+name = "ordered-set"
+version = "4.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/4c/ca/bfac8bc689799bcca4157e0e0ced07e70ce125193fc2e166d2e685b7e2fe/ordered-set-4.1.0.tar.gz", hash = "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8", size = 12826 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/33/55/af02708f230eb77084a299d7b08175cff006dea4f2721074b92cdb0296c0/ordered_set-4.1.0-py3-none-any.whl", hash = "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562", size = 7634 },
+]
+
[[package]]
name = "orjson"
version = "3.10.18"
@@ -2335,89 +2090,34 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/10/b0/1040c447fac5b91bc1e9c004b69ee50abb0c1ffd0d24406e1350c58a7fcb/orjson-3.10.18-cp312-cp312-win_arm64.whl", hash = "sha256:3d600be83fe4514944500fa8c2a0a77099025ec6482e8087d7659e891f23058a", size = 131218 },
]
-[[package]]
-name = "outlines"
-version = "0.1.14"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "airportsdata" },
- { name = "cloudpickle" },
- { name = "diskcache" },
- { name = "genson" },
- { name = "interegular" },
- { name = "jinja2" },
- { name = "jsonschema" },
- { name = "lark" },
- { name = "nest-asyncio" },
- { name = "numpy" },
- { name = "outlines-core" },
- { name = "pycountry" },
- { name = "pydantic" },
- { name = "referencing" },
- { name = "requests" },
- { name = "torch" },
- { name = "tqdm" },
- { name = "typing-extensions" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/e9/54/dfa5fea9283174f5febbd0aae3f082c3e2c2888bedcc9fb6f07f174d9382/outlines-0.1.14.tar.gz", hash = "sha256:35f0c49fc7eedc64ec08e2d6fd434845cf63cc0c3fdeb5900ac7902d074e57be", size = 2492199 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/bf/bb/a9639289a5d591a33585086aa3bf7722bc93e77769d050dd888db5d87395/outlines-0.1.14-py3-none-any.whl", hash = "sha256:a5090d50c368ed078051de25686a53032cd9f1702528afc646c3dae9482598ce", size = 88002 },
-]
-
-[[package]]
-name = "outlines-core"
-version = "0.1.26"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "interegular" },
- { name = "jsonschema" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/d3/f3/274d07f4702728b43581235a77e545ec602b25f9b0098b288a0f3052521d/outlines_core-0.1.26.tar.gz", hash = "sha256:481c4301341e77cc8f1832d616784adb4d461b4fec65878e7c0d2cba7163a189", size = 75139 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/e2/df/e9ff00f1dcf671cb8c4c20abcfd53406328b344cafa689a2832e8059c0b4/outlines_core-0.1.26-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6a962a7452e7ac170fa04d405342cadae2d28fafa5b1830cef7aa610257ed32f", size = 322602 },
- { url = "https://files.pythonhosted.org/packages/3c/f1/e9064f18c462a61f4abbe73b24f25e36d8abef19c593416fa69dce6a83c0/outlines_core-0.1.26-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15a3684fa29564da2db03934cf0097bef3e871f70d3af0ef2b52fdb886da2e09", size = 301929 },
- { url = "https://files.pythonhosted.org/packages/76/c3/6bc82db40b4818421e573237f43d4026c40a3305fa2558eb0aa1a7aa08f7/outlines_core-0.1.26-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64e01c0cfa9ba371634d7c3f6ea1862397cef98e4509fe98e3f57faa721a72d6", size = 321355 },
- { url = "https://files.pythonhosted.org/packages/c9/c2/1d85bfeaee3a83327e0d162bee4bdc7d7889bea5998e44fcc66c924dc1fd/outlines_core-0.1.26-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3c4196148e47f455f1ace78e329d5b97e531cbc406456d681592952adae7e17", size = 343552 },
- { url = "https://files.pythonhosted.org/packages/45/da/1e61d3d997ba1858fb8e71c3127f24a95c30575559da012ea5b45b147ad3/outlines_core-0.1.26-cp310-cp310-win32.whl", hash = "sha256:f38d290a7f6e5e12cbfcaee03269dfc0dbda49b360024b4279d1aba251fdc346", size = 234750 },
- { url = "https://files.pythonhosted.org/packages/1c/04/6d7968019a81df235ad6bc7405eefe32be8da4c4153792655e7490d06c8d/outlines_core-0.1.26-cp310-cp310-win_amd64.whl", hash = "sha256:11ff56af56cb54c563b7f25d86cd9ee77f3fed825f1d4dccd9449bb1e4e89538", size = 243713 },
- { url = "https://files.pythonhosted.org/packages/17/94/19d5c50c303ba71f3465c81620ca9b5af4db07fd8922dfe59ae5a9ae61d1/outlines_core-0.1.26-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b6787b07b7c673fc3087d2b537719ecac8e03b10a47d032dd1926985c32885b0", size = 322344 },
- { url = "https://files.pythonhosted.org/packages/f2/ea/f44beea7f610f2737ebb908c8dfa37d8324e92ca529468a56b00a77af199/outlines_core-0.1.26-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e0ea28a76da31d25b6f53242bf13e1b59a0241badf82353c88f55e1cf81b128", size = 301670 },
- { url = "https://files.pythonhosted.org/packages/6a/a6/ceac3760e1feb898b4047aeb54e0a3de975b59e87a17d6ba0a04dec5eaed/outlines_core-0.1.26-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8932044a3d9329be53a226118850638f85b4d7842f9b863d0a123f23de220cd", size = 321067 },
- { url = "https://files.pythonhosted.org/packages/92/f0/ad0074d6726fed86bb0bba1b9307cbbd67a2af5debd3540d66c69298a001/outlines_core-0.1.26-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a84b7cd2fb6268bf990dd3d479ffb4fa0bace6f571cb85b15b6cdb44b84f5b69", size = 343264 },
- { url = "https://files.pythonhosted.org/packages/e6/bd/198c9a73d5f36e2ecad558a26359af3f0dbe4f5ba11c4629e46fccdfe2d6/outlines_core-0.1.26-cp311-cp311-win32.whl", hash = "sha256:f19765c151abfc970996368080aeea6d2a19e927817fe4e2af6726e639be3de4", size = 234529 },
- { url = "https://files.pythonhosted.org/packages/b9/27/354b484045e6368c92f688d954124064ec2ce961681e56711852904e1ec2/outlines_core-0.1.26-cp311-cp311-win_amd64.whl", hash = "sha256:3f59aeccea21ed6ff3cf52102fd163f26d279821c20e5127ddd18d4ea4d0c8d2", size = 243457 },
- { url = "https://files.pythonhosted.org/packages/c6/86/0fb40746e579db38d89f127122a3900d9e0350f76aae8cb61adeaff44cc2/outlines_core-0.1.26-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f54633bca50055d42ea4d94ae06dcbe52d3d76a9b621b75723b1177d0d952953", size = 321874 },
- { url = "https://files.pythonhosted.org/packages/ab/0c/b91f7bc03843796c1d643ee030b6cd8fd5a8ba2cd4856c855f140c878976/outlines_core-0.1.26-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9525321b48700dcaaabf60bcdc951e45f9357ba3fb3e1bfc81b662d7d4170e7c", size = 301995 },
- { url = "https://files.pythonhosted.org/packages/ad/db/fa91a2d54288b900de82d86eda3adb2417b3b5b2db6256854a5e8bc85c32/outlines_core-0.1.26-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00f409f72c11f6ffadb57066950dd384d5388015028c1a1a615c9a64988dae3e", size = 321050 },
- { url = "https://files.pythonhosted.org/packages/e2/1d/a36292b6198986bd9c3ff8c24355deb82ed5475403379ee40b5b5473e2e3/outlines_core-0.1.26-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e86a1bb46adc5cbf6dfd7a7fe4105e0e2a4c6e041732a053126b41c521a1f223", size = 343201 },
- { url = "https://files.pythonhosted.org/packages/08/63/5dd2b5a364412f674b6edcb59b0c21513bdb07cdcc7613b064c1a0660d01/outlines_core-0.1.26-cp312-cp312-win32.whl", hash = "sha256:19f462f6b00935708677ad27cb4df55e0e17f6ffe713ab750f5f2683b090f95d", size = 233970 },
- { url = "https://files.pythonhosted.org/packages/a5/56/8adf0b7446d1e975c2314454813c59eb7b195889908a2932ed34148c113c/outlines_core-0.1.26-cp312-cp312-win_amd64.whl", hash = "sha256:9b36bff12779e58883747116893a17b3551bbd10865878b951b03a44d112229a", size = 243578 },
-]
-
[[package]]
name = "owl"
version = "0.0.1"
source = { editable = "." }
dependencies = [
{ name = "camel-ai", extra = ["owl"] },
+ { name = "crawl4ai" },
{ name = "docx2markdown" },
{ name = "firecrawl" },
{ name = "gradio" },
{ name = "mcp-server-fetch" },
{ name = "mcp-simple-arxiv" },
{ name = "mistralai" },
+ { name = "retry" },
{ name = "xmltodict" },
]
[package.metadata]
requires-dist = [
- { name = "camel-ai", extras = ["owl"], specifier = "==0.2.57" },
+ { name = "camel-ai", extras = ["owl"], specifier = "==0.2.84" },
+ { name = "crawl4ai", specifier = ">=0.3.0" },
{ name = "docx2markdown", specifier = ">=0.1.1" },
{ name = "firecrawl", specifier = ">=2.5.3" },
{ name = "gradio", specifier = ">=3.50.2" },
{ name = "mcp-server-fetch", specifier = "==2025.1.17" },
{ name = "mcp-simple-arxiv", specifier = "==0.2.2" },
{ name = "mistralai", specifier = ">=1.7.0" },
+ { name = "retry", specifier = "==0.9.2" },
{ name = "xmltodict", specifier = ">=0.14.2" },
]
@@ -2432,52 +2132,37 @@ wheels = [
[[package]]
name = "pandas"
-version = "1.5.3"
+version = "2.3.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "numpy" },
{ name = "python-dateutil" },
{ name = "pytz" },
+ { name = "tzdata" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/74/ee/146cab1ff6d575b54ace8a6a5994048380dc94879b0125b25e62edcb9e52/pandas-1.5.3.tar.gz", hash = "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1", size = 5203060 }
+sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/a9/cd/34f6b0780301be81be804d7aa71d571457369e6131e2b330af2b0fed1aad/pandas-1.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406", size = 18619230 },
- { url = "https://files.pythonhosted.org/packages/5f/34/b7858bb7d6d6bf4d9df1dde777a11fcf3ff370e1d1b3956e3d0fcca8322c/pandas-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572", size = 11982991 },
- { url = "https://files.pythonhosted.org/packages/b8/6c/005bd604994f7cbede4d7bf030614ef49a2213f76bc3d738ecf5b0dcc810/pandas-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996", size = 10927131 },
- { url = "https://files.pythonhosted.org/packages/27/c7/35b81ce5f680f2dac55eac14d103245cd8cf656ae4a2ff3be2e69fd1d330/pandas-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354", size = 11368188 },
- { url = "https://files.pythonhosted.org/packages/49/e2/79e46612dc25ebc7603dc11c560baa7266c90f9e48537ecf1a02a0dd6bff/pandas-1.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23", size = 12062104 },
- { url = "https://files.pythonhosted.org/packages/d9/cd/f27c2992cbe05a3e39937f73a4be635a9ec149ec3ca4467d8cf039718994/pandas-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328", size = 10362473 },
- { url = "https://files.pythonhosted.org/packages/e2/24/a26af514113fd5eca2d8fe41ba4f22f70dfe6afefde4a6beb6a203570935/pandas-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc", size = 18387750 },
- { url = "https://files.pythonhosted.org/packages/53/c9/d2f910dace7ef849b626980d0fd033b9cded36568949c8d560c9630ad2e0/pandas-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d", size = 11868668 },
- { url = "https://files.pythonhosted.org/packages/b0/be/1843b9aff84b98899663e7cad9f45513dfdd11d69cb5bd85c648aaf6a8d4/pandas-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc", size = 10814036 },
- { url = "https://files.pythonhosted.org/packages/63/8d/c2bd356b9d4baf1c5cf8d7e251fb4540e87083072c905430da48c2bb31eb/pandas-1.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae", size = 11374218 },
- { url = "https://files.pythonhosted.org/packages/56/73/3351beeb807dca69fcc3c4966bcccc51552bd01549a9b13c04ab00a43f21/pandas-1.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6", size = 12017319 },
- { url = "https://files.pythonhosted.org/packages/da/6d/1235da14daddaa6e47f74ba0c255358f0ce7a6ee05da8bf8eb49161aa6b5/pandas-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003", size = 10303385 },
-]
-
-[[package]]
-name = "pandasai"
-version = "2.3.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "astor" },
- { name = "duckdb" },
- { name = "faker" },
- { name = "jinja2" },
- { name = "matplotlib" },
- { name = "openai" },
- { name = "pandas" },
- { name = "pillow" },
- { name = "pydantic" },
- { name = "python-dotenv" },
- { name = "requests" },
- { name = "scipy" },
- { name = "sqlalchemy" },
- { name = "sqlglot", extra = ["rs"] },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/8c/b6/434c9ff142617e8dcd6964e8711572d935d6307ca9e29b1204de3796facf/pandasai-2.3.0.tar.gz", hash = "sha256:fb58d2c55dd53988dcf6207ea196ee52eb2c2262fbd389e1ecddaed3a6093ecf", size = 114873 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/71/ca/0bcaf20b4cb305f4cfbca7be09cf2b06d09cbabbfe7d7ea0035d3322b214/pandasai-2.3.0-py3-none-any.whl", hash = "sha256:15a586e5b90e16ca685b31d7eb2dcff2783c97feac9e0e4e1090b2b16d931d3e", size = 185988 },
+ { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763 },
+ { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217 },
+ { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791 },
+ { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373 },
+ { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444 },
+ { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459 },
+ { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086 },
+ { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790 },
+ { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831 },
+ { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267 },
+ { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281 },
+ { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453 },
+ { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361 },
+ { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702 },
+ { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846 },
+ { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618 },
+ { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212 },
+ { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693 },
+ { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002 },
+ { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971 },
+ { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722 },
]
[[package]]
@@ -2691,6 +2376,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/05/33/2d74d588408caedd065c2497bdb5ef83ce6082db01289a1e1147f6639802/psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8", size = 249898 },
]
+[[package]]
+name = "py"
+version = "1.11.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/98/ff/fec109ceb715d2a6b4c4a85a61af3b40c723a961e8828319fbcb15b868dc/py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719", size = 207796 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378", size = 98708 },
+]
+
[[package]]
name = "pyarrow"
version = "20.0.0"
@@ -2742,15 +2436,6 @@ dependencies = [
]
sdist = { url = "https://files.pythonhosted.org/packages/65/ff/cdae0a8c2118a0de74b6cf4cbcdcaf8fd25857e6c3f205ce4b1794b27814/PyAutoGUI-0.9.54.tar.gz", hash = "sha256:dd1d29e8fd118941cb193f74df57e5c6ff8e9253b99c7b04f39cfc69f3ae04b2", size = 61236 }
-[[package]]
-name = "pycountry"
-version = "24.6.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/76/57/c389fa68c50590881a75b7883eeb3dc15e9e73a0fdc001cdd45c13290c92/pycountry-24.6.1.tar.gz", hash = "sha256:b61b3faccea67f87d10c1f2b0fc0be714409e8fcdcc1315613174f6466c10221", size = 6043910 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/b1/ec/1fb891d8a2660716aadb2143235481d15ed1cbfe3ad669194690b0604492/pycountry-24.6.1-py3-none-any.whl", hash = "sha256:f1a4fb391cd7214f8eefd39556d740adcc233c778a27f8942c8dca351d6ce06f", size = 6335189 },
-]
-
[[package]]
name = "pycparser"
version = "2.22"
@@ -2898,6 +2583,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 },
]
+[[package]]
+name = "pylatex"
+version = "1.4.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "ordered-set" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/6d/a8/10cf6b955b5fa19438790d9949867e04c785ae845e631c5ef6db444401d1/PyLaTeX-1.4.2.tar.gz", hash = "sha256:bb7b21bec57ecdba3f6f44c856ebebdf6549fd6e80661bd44fd5094236729242", size = 59710 }
+
[[package]]
name = "pymsgbox"
version = "1.0.9"
@@ -2972,15 +2666,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/ca/d7/eb76863d2060dcbe7c7e6cccfd95ac02ea0b9acc37745a0d99ff6457aefb/pyOpenSSL-25.0.0-py3-none-any.whl", hash = "sha256:424c247065e46e76a37411b9ab1782541c23bb658bf003772c3405fbaa128e90", size = 56453 },
]
-[[package]]
-name = "pyparsing"
-version = "3.2.3"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120 },
-]
-
[[package]]
name = "pypdf"
version = "5.4.0"
@@ -2999,6 +2684,15 @@ version = "1.9.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/30/23/2f0a3efc4d6a32f3b63cdff36cd398d9701d26cda58e3ab97ac79fb5e60d/pyperclip-1.9.0.tar.gz", hash = "sha256:b7de0142ddc81bfc5c7507eea19da920b92252b548b96186caf94a5e2527d310", size = 20961 }
+[[package]]
+name = "pyreadline3"
+version = "3.5.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/0f/49/4cea918a08f02817aabae639e3d0ac046fef9f9180518a3ad394e22da148/pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7", size = 99839 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6", size = 83178 },
+]
+
[[package]]
name = "pyrect"
version = "0.2.0"
@@ -3014,6 +2708,19 @@ dependencies = [
]
sdist = { url = "https://files.pythonhosted.org/packages/ee/f0/cb456ac4f1a73723d5b866933b7986f02bacea27516629c00f8e7da94c2d/pyscreeze-1.0.1.tar.gz", hash = "sha256:cf1662710f1b46aa5ff229ee23f367da9e20af4a78e6e365bee973cad0ead4be", size = 27826 }
+[[package]]
+name = "pytesseract"
+version = "0.3.13"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "packaging" },
+ { name = "pillow" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/9f/a6/7d679b83c285974a7cb94d739b461fa7e7a9b17a3abfd7bf6cbc5c2394b0/pytesseract-0.3.13.tar.gz", hash = "sha256:4bf5f880c99406f52a3cfc2633e42d9dc67615e69d8a509d74867d3baddb5db9", size = 17689 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7a/33/8312d7ce74670c9d39a532b2c246a853861120486be9443eebf048043637/pytesseract-0.3.13-py3-none-any.whl", hash = "sha256:7a99c6c2ac598360693d83a416e36e0b33a67638bb9d77fdcac094a3589d4b34", size = 14705 },
+]
+
[[package]]
name = "python-dateutil"
version = "2.9.0.post0"
@@ -3089,6 +2796,21 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/53/67/f56c69a98c7eb244025845506387d0f961681657c9fcd8b2d2edd148f9d2/python_oxmsg-0.0.2-py3-none-any.whl", hash = "sha256:22be29b14c46016bcd05e34abddfd8e05ee82082f53b82753d115da3fc7d0355", size = 31455 },
]
+[[package]]
+name = "python-pptx"
+version = "1.0.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "lxml" },
+ { name = "pillow" },
+ { name = "typing-extensions" },
+ { name = "xlsxwriter" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/52/a9/0c0db8d37b2b8a645666f7fd8accea4c6224e013c42b1d5c17c93590cd06/python_pptx-1.0.2.tar.gz", hash = "sha256:479a8af0eaf0f0d76b6f00b0887732874ad2e3188230315290cd1f9dd9cc7095", size = 10109297 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d9/4f/00be2196329ebbff56ce564aa94efb0fbc828d00de250b1980de1a34ab49/python_pptx-1.0.2-py3-none-any.whl", hash = "sha256:160838e0b8565a8b1f67947675886e9fea18aa5e795db7ae531606d68e785cba", size = 472788 },
+]
+
[[package]]
name = "python3-xlib"
version = "0.15"
@@ -3305,6 +3027,19 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/38/ec/ad2d7de49a600cdb8dd78434a1aeffe28b9d6fc42eb36afab4a27ad23384/regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b", size = 273567 },
]
+[[package]]
+name = "reportlab"
+version = "4.4.9"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "charset-normalizer" },
+ { name = "pillow" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/1a/39/42cf24aee570a80e1903221ae3a92a2e34c324794a392eb036cbb6dc3839/reportlab-4.4.9.tar.gz", hash = "sha256:7cf487764294ee791a4781f5a157bebce262a666ae4bbb87786760a9676c9378", size = 3911246 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/17/77/546e50edfaba6a0e58e8ec5fdc4446510227cec9e8f40172b60941d5a633/reportlab-4.4.9-py3-none-any.whl", hash = "sha256:68e2d103ae8041a37714e8896ec9b79a1c1e911d68c3bd2ea17546568cf17bfd", size = 1954401 },
+]
+
[[package]]
name = "requests"
version = "2.32.3"
@@ -3320,18 +3055,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 },
]
-[[package]]
-name = "requests-file"
-version = "2.1.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "requests" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/72/97/bf44e6c6bd8ddbb99943baf7ba8b1a8485bcd2fe0e55e5708d7fee4ff1ae/requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658", size = 6891 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/d7/25/dd878a121fcfdf38f52850f11c512e13ec87c2ea72385933818e5b6c15ce/requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c", size = 4244 },
-]
-
[[package]]
name = "requests-oauthlib"
version = "1.3.1"
@@ -3357,6 +3080,19 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481 },
]
+[[package]]
+name = "retry"
+version = "0.9.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "decorator" },
+ { name = "py" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/9d/72/75d0b85443fbc8d9f38d08d2b1b67cc184ce35280e4a3813cda2f445f3a4/retry-0.9.2.tar.gz", hash = "sha256:f8bfa8b99b69c4506d6f5bd3b0aabf77f98cdb17f3c9fc3f5ca820033336fba4", size = 6448 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4b/0d/53aea75710af4528a25ed6837d71d117602b01946b307a3912cb3cfcbcba/retry-0.9.2-py2.py3-none-any.whl", hash = "sha256:ccddf89761fa2c726ab29391837d4327f819ea14d244c232a1d24c67a2f98606", size = 7986 },
+]
+
[[package]]
name = "rfc3339-validator"
version = "0.1.4"
@@ -3595,44 +3331,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/b1/5b/c090fe55521265eb1816c303267e985125000a4e32237e95562ed462608f/scenedetect-0.6.6-py3-none-any.whl", hash = "sha256:cbd47e4aff1d3ba6f4ee00e54ff9af26378aa2b48f501003dddf5f96e37d3eb0", size = 131581 },
]
-[[package]]
-name = "scipy"
-version = "1.15.2"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "numpy" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/b7/b9/31ba9cd990e626574baf93fbc1ac61cf9ed54faafd04c479117517661637/scipy-1.15.2.tar.gz", hash = "sha256:cd58a314d92838f7e6f755c8a2167ead4f27e1fd5c1251fd54289569ef3495ec", size = 59417316 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/95/df/ef233fff6838fe6f7840d69b5ef9f20d2b5c912a8727b21ebf876cb15d54/scipy-1.15.2-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a2ec871edaa863e8213ea5df811cd600734f6400b4af272e1c011e69401218e9", size = 38692502 },
- { url = "https://files.pythonhosted.org/packages/5c/20/acdd4efb8a68b842968f7bc5611b1aeb819794508771ad104de418701422/scipy-1.15.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:6f223753c6ea76983af380787611ae1291e3ceb23917393079dcc746ba60cfb5", size = 30085508 },
- { url = "https://files.pythonhosted.org/packages/42/55/39cf96ca7126f1e78ee72a6344ebdc6702fc47d037319ad93221063e6cf4/scipy-1.15.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:ecf797d2d798cf7c838c6d98321061eb3e72a74710e6c40540f0e8087e3b499e", size = 22359166 },
- { url = "https://files.pythonhosted.org/packages/51/48/708d26a4ab8a1441536bf2dfcad1df0ca14a69f010fba3ccbdfc02df7185/scipy-1.15.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:9b18aa747da280664642997e65aab1dd19d0c3d17068a04b3fe34e2559196cb9", size = 25112047 },
- { url = "https://files.pythonhosted.org/packages/dd/65/f9c5755b995ad892020381b8ae11f16d18616208e388621dfacc11df6de6/scipy-1.15.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87994da02e73549dfecaed9e09a4f9d58a045a053865679aeb8d6d43747d4df3", size = 35536214 },
- { url = "https://files.pythonhosted.org/packages/de/3c/c96d904b9892beec978562f64d8cc43f9cca0842e65bd3cd1b7f7389b0ba/scipy-1.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69ea6e56d00977f355c0f84eba69877b6df084516c602d93a33812aa04d90a3d", size = 37646981 },
- { url = "https://files.pythonhosted.org/packages/3d/74/c2d8a24d18acdeae69ed02e132b9bc1bb67b7bee90feee1afe05a68f9d67/scipy-1.15.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:888307125ea0c4466287191e5606a2c910963405ce9671448ff9c81c53f85f58", size = 37230048 },
- { url = "https://files.pythonhosted.org/packages/42/19/0aa4ce80eca82d487987eff0bc754f014dec10d20de2f66754fa4ea70204/scipy-1.15.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9412f5e408b397ff5641080ed1e798623dbe1ec0d78e72c9eca8992976fa65aa", size = 40010322 },
- { url = "https://files.pythonhosted.org/packages/d0/d2/f0683b7e992be44d1475cc144d1f1eeae63c73a14f862974b4db64af635e/scipy-1.15.2-cp310-cp310-win_amd64.whl", hash = "sha256:b5e025e903b4f166ea03b109bb241355b9c42c279ea694d8864d033727205e65", size = 41233385 },
- { url = "https://files.pythonhosted.org/packages/40/1f/bf0a5f338bda7c35c08b4ed0df797e7bafe8a78a97275e9f439aceb46193/scipy-1.15.2-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:92233b2df6938147be6fa8824b8136f29a18f016ecde986666be5f4d686a91a4", size = 38703651 },
- { url = "https://files.pythonhosted.org/packages/de/54/db126aad3874601048c2c20ae3d8a433dbfd7ba8381551e6f62606d9bd8e/scipy-1.15.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:62ca1ff3eb513e09ed17a5736929429189adf16d2d740f44e53270cc800ecff1", size = 30102038 },
- { url = "https://files.pythonhosted.org/packages/61/d8/84da3fffefb6c7d5a16968fe5b9f24c98606b165bb801bb0b8bc3985200f/scipy-1.15.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4c6676490ad76d1c2894d77f976144b41bd1a4052107902238047fb6a473e971", size = 22375518 },
- { url = "https://files.pythonhosted.org/packages/44/78/25535a6e63d3b9c4c90147371aedb5d04c72f3aee3a34451f2dc27c0c07f/scipy-1.15.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a8bf5cb4a25046ac61d38f8d3c3426ec11ebc350246a4642f2f315fe95bda655", size = 25142523 },
- { url = "https://files.pythonhosted.org/packages/e0/22/4b4a26fe1cd9ed0bc2b2cb87b17d57e32ab72c346949eaf9288001f8aa8e/scipy-1.15.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a8e34cf4c188b6dd004654f88586d78f95639e48a25dfae9c5e34a6dc34547e", size = 35491547 },
- { url = "https://files.pythonhosted.org/packages/32/ea/564bacc26b676c06a00266a3f25fdfe91a9d9a2532ccea7ce6dd394541bc/scipy-1.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28a0d2c2075946346e4408b211240764759e0fabaeb08d871639b5f3b1aca8a0", size = 37634077 },
- { url = "https://files.pythonhosted.org/packages/43/c2/bfd4e60668897a303b0ffb7191e965a5da4056f0d98acfb6ba529678f0fb/scipy-1.15.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:42dabaaa798e987c425ed76062794e93a243be8f0f20fff6e7a89f4d61cb3d40", size = 37231657 },
- { url = "https://files.pythonhosted.org/packages/4a/75/5f13050bf4f84c931bcab4f4e83c212a36876c3c2244475db34e4b5fe1a6/scipy-1.15.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6f5e296ec63c5da6ba6fa0343ea73fd51b8b3e1a300b0a8cae3ed4b1122c7462", size = 40035857 },
- { url = "https://files.pythonhosted.org/packages/b9/8b/7ec1832b09dbc88f3db411f8cdd47db04505c4b72c99b11c920a8f0479c3/scipy-1.15.2-cp311-cp311-win_amd64.whl", hash = "sha256:597a0c7008b21c035831c39927406c6181bcf8f60a73f36219b69d010aa04737", size = 41217654 },
- { url = "https://files.pythonhosted.org/packages/4b/5d/3c78815cbab499610f26b5bae6aed33e227225a9fa5290008a733a64f6fc/scipy-1.15.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c4697a10da8f8765bb7c83e24a470da5797e37041edfd77fd95ba3811a47c4fd", size = 38756184 },
- { url = "https://files.pythonhosted.org/packages/37/20/3d04eb066b471b6e171827548b9ddb3c21c6bbea72a4d84fc5989933910b/scipy-1.15.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:869269b767d5ee7ea6991ed7e22b3ca1f22de73ab9a49c44bad338b725603301", size = 30163558 },
- { url = "https://files.pythonhosted.org/packages/a4/98/e5c964526c929ef1f795d4c343b2ff98634ad2051bd2bbadfef9e772e413/scipy-1.15.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bad78d580270a4d32470563ea86c6590b465cb98f83d760ff5b0990cb5518a93", size = 22437211 },
- { url = "https://files.pythonhosted.org/packages/1d/cd/1dc7371e29195ecbf5222f9afeedb210e0a75057d8afbd942aa6cf8c8eca/scipy-1.15.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b09ae80010f52efddb15551025f9016c910296cf70adbf03ce2a8704f3a5ad20", size = 25232260 },
- { url = "https://files.pythonhosted.org/packages/f0/24/1a181a9e5050090e0b5138c5f496fee33293c342b788d02586bc410c6477/scipy-1.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a6fd6eac1ce74a9f77a7fc724080d507c5812d61e72bd5e4c489b042455865e", size = 35198095 },
- { url = "https://files.pythonhosted.org/packages/c0/53/eaada1a414c026673eb983f8b4a55fe5eb172725d33d62c1b21f63ff6ca4/scipy-1.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b871df1fe1a3ba85d90e22742b93584f8d2b8e6124f8372ab15c71b73e428b8", size = 37297371 },
- { url = "https://files.pythonhosted.org/packages/e9/06/0449b744892ed22b7e7b9a1994a866e64895363572677a316a9042af1fe5/scipy-1.15.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:03205d57a28e18dfd39f0377d5002725bf1f19a46f444108c29bdb246b6c8a11", size = 36872390 },
- { url = "https://files.pythonhosted.org/packages/6a/6f/a8ac3cfd9505ec695c1bc35edc034d13afbd2fc1882a7c6b473e280397bb/scipy-1.15.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:601881dfb761311045b03114c5fe718a12634e5608c3b403737ae463c9885d53", size = 39700276 },
- { url = "https://files.pythonhosted.org/packages/f5/6f/e6e5aff77ea2a48dd96808bb51d7450875af154ee7cbe72188afb0b37929/scipy-1.15.2-cp312-cp312-win_amd64.whl", hash = "sha256:e7c68b6a43259ba0aab737237876e5c2c549a031ddb7abc28c7b47f22e202ded", size = 40942317 },
-]
-
[[package]]
name = "scrapegraph-py"
version = "1.12.0"
@@ -3690,15 +3388,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/c6/97/d159c32642306ee2b70732077632895438867b3b6df282354bd550cf2a67/sentencepiece-0.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:7a673a72aab81fef5ebe755c6e0cc60087d1f3a4700835d40537183c1703a45f", size = 991994 },
]
-[[package]]
-name = "setuptools"
-version = "80.1.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/aa/b2/bd26ed086b842b68c8fe9aac380ad7e5118cf84fa7abd45bb059a88368a8/setuptools-80.1.0.tar.gz", hash = "sha256:2e308396e1d83de287ada2c2fd6e64286008fe6aca5008e0b6a8cb0e2c86eedd", size = 1354038 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/8b/f6/126c9309c8fe93e5d6bb850593cd58d591daf2da45cc78b61e48d8d95879/setuptools-80.1.0-py3-none-any.whl", hash = "sha256:ea0e7655c05b74819f82e76e11a85b31779fee7c4969e82f72bab0664e8317e4", size = 1240689 },
-]
-
[[package]]
name = "sgmllib3k"
version = "1.0.0"
@@ -3741,6 +3430,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a", size = 93002 },
]
+[[package]]
+name = "socksio"
+version = "1.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f8/5c/48a7d9495be3d1c651198fd99dbb6ce190e2274d0f28b9051307bdec6b85/socksio-1.0.0.tar.gz", hash = "sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac", size = 19055 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/37/c3/6eeb6034408dac0fa653d126c9204ade96b819c936e136c5e8a6897eee9c/socksio-1.0.0-py3-none-any.whl", hash = "sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3", size = 12763 },
+]
+
[[package]]
name = "soundfile"
version = "0.13.1"
@@ -3769,95 +3467,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677 },
]
-[[package]]
-name = "sqlalchemy"
-version = "2.0.40"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'" },
- { name = "typing-extensions" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/68/c3/3f2bfa5e4dcd9938405fe2fab5b6ab94a9248a4f9536ea2fd497da20525f/sqlalchemy-2.0.40.tar.gz", hash = "sha256:d827099289c64589418ebbcaead0145cd19f4e3e8a93919a0100247af245fa00", size = 9664299 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/87/fa/8e8fd93684b04e65816be864bebf0000fe1602e5452d006f9acc5db14ce5/sqlalchemy-2.0.40-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f1ea21bef99c703f44444ad29c2c1b6bd55d202750b6de8e06a955380f4725d7", size = 2112843 },
- { url = "https://files.pythonhosted.org/packages/ba/87/06992f78a9ce545dfd1fea3dd99262bec5221f6f9d2d2066c3e94662529f/sqlalchemy-2.0.40-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:afe63b208153f3a7a2d1a5b9df452b0673082588933e54e7c8aac457cf35e758", size = 2104032 },
- { url = "https://files.pythonhosted.org/packages/92/ee/57dc77282e8be22d686bd4681825299aa1069bbe090564868ea270ed5214/sqlalchemy-2.0.40-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8aae085ea549a1eddbc9298b113cffb75e514eadbb542133dd2b99b5fb3b6af", size = 3086406 },
- { url = "https://files.pythonhosted.org/packages/94/3f/ceb9ab214b2e42d2e74a9209b3a2f2f073504eee16cddd2df81feeb67c2f/sqlalchemy-2.0.40-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ea9181284754d37db15156eb7be09c86e16e50fbe77610e9e7bee09291771a1", size = 3094652 },
- { url = "https://files.pythonhosted.org/packages/00/0a/3401232a5b6d91a2df16c1dc39c6504c54575744c2faafa1e5a50de96621/sqlalchemy-2.0.40-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5434223b795be5c5ef8244e5ac98056e290d3a99bdcc539b916e282b160dda00", size = 3050503 },
- { url = "https://files.pythonhosted.org/packages/93/c2/ea7171415ab131397f71a2673645c2fe29ebe9a93063d458eb89e42bf051/sqlalchemy-2.0.40-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:15d08d5ef1b779af6a0909b97be6c1fd4298057504eb6461be88bd1696cb438e", size = 3076011 },
- { url = "https://files.pythonhosted.org/packages/3d/ee/d8e229280d621bed8c51eebf1dd413aa09ca89e309b1fff40d881dd149af/sqlalchemy-2.0.40-cp310-cp310-win32.whl", hash = "sha256:cd2f75598ae70bcfca9117d9e51a3b06fe29edd972fdd7fd57cc97b4dbf3b08a", size = 2085136 },
- { url = "https://files.pythonhosted.org/packages/60/7f/ea1086136bc648cd4713a1e01869f7fc31979d67b3a8f973f5d9ab8de7e1/sqlalchemy-2.0.40-cp310-cp310-win_amd64.whl", hash = "sha256:2cbafc8d39ff1abdfdda96435f38fab141892dc759a2165947d1a8fffa7ef596", size = 2109421 },
- { url = "https://files.pythonhosted.org/packages/77/7e/55044a9ec48c3249bb38d5faae93f09579c35e862bb318ebd1ed7a1994a5/sqlalchemy-2.0.40-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f6bacab7514de6146a1976bc56e1545bee247242fab030b89e5f70336fc0003e", size = 2114025 },
- { url = "https://files.pythonhosted.org/packages/77/0f/dcf7bba95f847aec72f638750747b12d37914f71c8cc7c133cf326ab945c/sqlalchemy-2.0.40-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5654d1ac34e922b6c5711631f2da497d3a7bffd6f9f87ac23b35feea56098011", size = 2104419 },
- { url = "https://files.pythonhosted.org/packages/75/70/c86a5c20715e4fe903dde4c2fd44fc7e7a0d5fb52c1b954d98526f65a3ea/sqlalchemy-2.0.40-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35904d63412db21088739510216e9349e335f142ce4a04b69e2528020ee19ed4", size = 3222720 },
- { url = "https://files.pythonhosted.org/packages/12/cf/b891a8c1d0c27ce9163361664c2128c7a57de3f35000ea5202eb3a2917b7/sqlalchemy-2.0.40-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c7a80ed86d6aaacb8160a1caef6680d4ddd03c944d985aecee940d168c411d1", size = 3222682 },
- { url = "https://files.pythonhosted.org/packages/15/3f/7709d8c8266953d945435a96b7f425ae4172a336963756b58e996fbef7f3/sqlalchemy-2.0.40-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:519624685a51525ddaa7d8ba8265a1540442a2ec71476f0e75241eb8263d6f51", size = 3159542 },
- { url = "https://files.pythonhosted.org/packages/85/7e/717eaabaf0f80a0132dc2032ea8f745b7a0914451c984821a7c8737fb75a/sqlalchemy-2.0.40-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2ee5f9999a5b0e9689bed96e60ee53c3384f1a05c2dd8068cc2e8361b0df5b7a", size = 3179864 },
- { url = "https://files.pythonhosted.org/packages/e4/cc/03eb5dfcdb575cbecd2bd82487b9848f250a4b6ecfb4707e834b4ce4ec07/sqlalchemy-2.0.40-cp311-cp311-win32.whl", hash = "sha256:c0cae71e20e3c02c52f6b9e9722bca70e4a90a466d59477822739dc31ac18b4b", size = 2084675 },
- { url = "https://files.pythonhosted.org/packages/9a/48/440946bf9dc4dc231f4f31ef0d316f7135bf41d4b86aaba0c0655150d370/sqlalchemy-2.0.40-cp311-cp311-win_amd64.whl", hash = "sha256:574aea2c54d8f1dd1699449f332c7d9b71c339e04ae50163a3eb5ce4c4325ee4", size = 2110099 },
- { url = "https://files.pythonhosted.org/packages/92/06/552c1f92e880b57d8b92ce6619bd569b25cead492389b1d84904b55989d8/sqlalchemy-2.0.40-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9d3b31d0a1c44b74d3ae27a3de422dfccd2b8f0b75e51ecb2faa2bf65ab1ba0d", size = 2112620 },
- { url = "https://files.pythonhosted.org/packages/01/72/a5bc6e76c34cebc071f758161dbe1453de8815ae6e662393910d3be6d70d/sqlalchemy-2.0.40-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:37f7a0f506cf78c80450ed1e816978643d3969f99c4ac6b01104a6fe95c5490a", size = 2103004 },
- { url = "https://files.pythonhosted.org/packages/bf/fd/0e96c8e6767618ed1a06e4d7a167fe13734c2f8113c4cb704443e6783038/sqlalchemy-2.0.40-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bb933a650323e476a2e4fbef8997a10d0003d4da996aad3fd7873e962fdde4d", size = 3252440 },
- { url = "https://files.pythonhosted.org/packages/cd/6a/eb82e45b15a64266a2917a6833b51a334ea3c1991728fd905bfccbf5cf63/sqlalchemy-2.0.40-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6959738971b4745eea16f818a2cd086fb35081383b078272c35ece2b07012716", size = 3263277 },
- { url = "https://files.pythonhosted.org/packages/45/97/ebe41ab4530f50af99e3995ebd4e0204bf1b0dc0930f32250dde19c389fe/sqlalchemy-2.0.40-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:110179728e442dae85dd39591beb74072ae4ad55a44eda2acc6ec98ead80d5f2", size = 3198591 },
- { url = "https://files.pythonhosted.org/packages/e6/1c/a569c1b2b2f5ac20ba6846a1321a2bf52e9a4061001f282bf1c5528dcd69/sqlalchemy-2.0.40-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8040680eaacdce4d635f12c55c714f3d4c7f57da2bc47a01229d115bd319191", size = 3225199 },
- { url = "https://files.pythonhosted.org/packages/8f/91/87cc71a6b10065ca0209d19a4bb575378abda6085e72fa0b61ffb2201b84/sqlalchemy-2.0.40-cp312-cp312-win32.whl", hash = "sha256:650490653b110905c10adac69408380688cefc1f536a137d0d69aca1069dc1d1", size = 2082959 },
- { url = "https://files.pythonhosted.org/packages/2a/9f/14c511cda174aa1ad9b0e42b64ff5a71db35d08b0d80dc044dae958921e5/sqlalchemy-2.0.40-cp312-cp312-win_amd64.whl", hash = "sha256:2be94d75ee06548d2fc591a3513422b873490efb124048f50556369a834853b0", size = 2108526 },
- { url = "https://files.pythonhosted.org/packages/d1/7c/5fc8e802e7506fe8b55a03a2e1dab156eae205c91bee46305755e086d2e2/sqlalchemy-2.0.40-py3-none-any.whl", hash = "sha256:32587e2e1e359276957e6fe5dad089758bc042a971a8a09ae8ecf7a8fe23d07a", size = 1903894 },
-]
-
-[[package]]
-name = "sqlglot"
-version = "25.34.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/76/f3/a7d1a7bcd4477e062e540829030f28cebdbbf83000715cb673d2174f5b09/sqlglot-25.34.1.tar.gz", hash = "sha256:6952c083c4a8b8de3c09c10b262a03c6853071bd397f05759c08f1e2f3c683cb", size = 19772522 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/1a/6f/7673d955e127b1b306e22112e9fadd75ed409a60f9b3cfd7325d58d07bc5/sqlglot-25.34.1-py3-none-any.whl", hash = "sha256:15099f8af832e6f5593fb92211d8b3f0810744ac0dc443fb70010fa38dc2562b", size = 435088 },
-]
-
-[package.optional-dependencies]
-rs = [
- { name = "sqlglotrs" },
-]
-
-[[package]]
-name = "sqlglotrs"
-version = "0.3.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/56/56/745df1a83ead916eb26314a81d3ae8860d9cee30e7d686d8d041aac41ed2/sqlglotrs-0.3.0.tar.gz", hash = "sha256:e77deb4ad2a94024e07ad9c1a15ad573b5503cacc9a948b0f5fd2d6df32156de", size = 9397 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/f5/b4/4071f789ff1b6e5ee252a235ef51764bf7bdc952923865fcbfc9fa937cb6/sqlglotrs-0.3.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:20483ace62f943d50a7caeae57b434d1872f0dfeebc697f5e97a6851e3cef254", size = 296764 },
- { url = "https://files.pythonhosted.org/packages/65/36/c37fb7d4305e6582d9bddc3d2b381bff6b30a401d98e3fffb129090fd065/sqlglotrs-0.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:602feea94d9cfbba0d8b7cf40f144ce311f8c11f06b6a49638d6311b799ee578", size = 284964 },
- { url = "https://files.pythonhosted.org/packages/0e/f8/6655f484843a32da5c220dbfcfcb27dd2843a13e088bceb587fa13dc763d/sqlglotrs-0.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27a64bf9770c683be0e345020674e52f04eacfccb74ef3529c0dfbaa25099509", size = 321811 },
- { url = "https://files.pythonhosted.org/packages/50/87/05b73aff212540e127ad78798110eb0f33f6d1cdc6e89656873860b14502/sqlglotrs-0.3.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:09e6291cf28dbab1d4fedbe121e6db6bc5ca2fb4d1d60071b632ca4a543d5448", size = 330117 },
- { url = "https://files.pythonhosted.org/packages/46/78/cc9d655978c7242c8666065761f2a4fd5b5d1aaacc6dbdddf7333238f9b5/sqlglotrs-0.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac61397b933471149a0d4227736f8fa727f90b7ae370bfcef9afe7835e1177b8", size = 370578 },
- { url = "https://files.pythonhosted.org/packages/f5/36/e5a0bc8d997d2a09a86308a2b40107c8262eae56b4768eb421c937de803d/sqlglotrs-0.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:93ba39a9ceafd999c9ccc0e53ff08d284915705db5a739b2ab66064e39010418", size = 375587 },
- { url = "https://files.pythonhosted.org/packages/d6/2b/b8bcf5cde39b5571e68715c6d99511068ceab44a1cd7c0925dc08953ad2b/sqlglotrs-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01e059b9ab5ccc98203dee2962e094c8d798cd50d94398740d514d1d5d480171", size = 326979 },
- { url = "https://files.pythonhosted.org/packages/28/38/ac8a07eeae79566c35f757f8365a82b63e41e37476a3be19d8a794042bf8/sqlglotrs-0.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0493ac7c0ec58c1d1f13a931e98389a1dc6492f1ea1ad5b6edcf331ca2a1791", size = 347163 },
- { url = "https://files.pythonhosted.org/packages/7c/04/c19ca120c8a6cf18f8305290f96b84f980daf0120fe2e82ceee668068310/sqlglotrs-0.3.0-cp310-none-win32.whl", hash = "sha256:3b4cbdb225639615402e9fc79661255d9dea5b937d4196a9b499ffccb9560629", size = 177337 },
- { url = "https://files.pythonhosted.org/packages/42/93/b886cfd5a78e172cabdd4d8490606157af4f273299338f2b8633c184d21a/sqlglotrs-0.3.0-cp310-none-win_amd64.whl", hash = "sha256:a9f2ab2fa34d025439491f372c4c065aa921b7b73854647468218778b564f9eb", size = 191373 },
- { url = "https://files.pythonhosted.org/packages/04/52/f43401e9e6836bfaebea4eb5e5f6fd778750861c1006adafc45265abc9af/sqlglotrs-0.3.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5c1b6b80f75676342268e46a47d07b406976a7c058d842d8729227c493540dba", size = 297331 },
- { url = "https://files.pythonhosted.org/packages/a6/67/50738cbc0446b18cd216f27833cd3cf918af813d0d85b52ec4f1b10f0fa7/sqlglotrs-0.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b02f33c570d7a170279a67a66d30602857371aba5c5212af7f544cba41b0f48f", size = 284937 },
- { url = "https://files.pythonhosted.org/packages/d5/a0/28ffda9780781ef9c9d4f13a8d3270370754d38c5e3aebf60bb0f62f3c91/sqlglotrs-0.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5917dc3bba375d1bbb1ec8c72a317c138b95b1c7fcaba9aa5d71f8d2c88e86d", size = 321753 },
- { url = "https://files.pythonhosted.org/packages/2f/05/cec79e288b7387800c1f0da6cb7e0fa3ebb68c4941175dbd56686c855467/sqlglotrs-0.3.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b7be5af42795481047561e2dc67bd20d06291daaa757ffaf0854bacbf280cc", size = 330188 },
- { url = "https://files.pythonhosted.org/packages/cc/b3/421914171f754f0ffd9a17608eb53ae141c29fdbd2d85031bff81188955e/sqlglotrs-0.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b678b19a3ae22068e6f0ec74a87db549d530f7642a9c954d79273eb0d579bb55", size = 370602 },
- { url = "https://files.pythonhosted.org/packages/61/cb/9f30c59f344b03e3a339780a43e0517499508f026e5f8b1c6ddc028a9b9f/sqlglotrs-0.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:809394744715f2992d26e8f6eacddf5961864b1dbd778c9918b0bfc0b49176e3", size = 375443 },
- { url = "https://files.pythonhosted.org/packages/46/bc/5bf1ee3806df146b3f1d2755a333ab699b185ca7d23720b6c2f27193bc88/sqlglotrs-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26036563d4ca30750e44ab5eb1682d3585965df592425a6ecfdb03d154bb6393", size = 327249 },
- { url = "https://files.pythonhosted.org/packages/2a/81/27b606aba16b9365c6494c7cf676410809c2d43ed1aa8e66b4e70425f7a5/sqlglotrs-0.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4718c07e136f94a85dc438d8392d868c14c88e8c27b1cd8a8bd7167c2318453e", size = 347064 },
- { url = "https://files.pythonhosted.org/packages/54/16/895a71abafa718070f1cf1bac74ce34f08ce76e568eda52d9a27af178b49/sqlglotrs-0.3.0-cp311-none-win32.whl", hash = "sha256:99a6380100cb744a56ca24bddb62783b6f3cbddd50529183d95a426d3a9ce052", size = 177332 },
- { url = "https://files.pythonhosted.org/packages/62/22/3943ff69d11e2ef0c90a9352d4fd44fffc1f388aac3e5e2267c79160e7db/sqlglotrs-0.3.0-cp311-none-win_amd64.whl", hash = "sha256:c813e0620dd79573a08682551b90b0e408f52b84d7ffdbdb4cd5346101575239", size = 191472 },
- { url = "https://files.pythonhosted.org/packages/a3/f0/77184812348969ad269eaf4552db687f13526c29e1db4250dc2489d0a81a/sqlglotrs-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b722831fd3de500d3c32169317878fede01880e3f1b6cfae926d60d6fbbde6b1", size = 296583 },
- { url = "https://files.pythonhosted.org/packages/01/36/7e262a2904df9217ec1bea3c34f39e9a59f099248cdd639782e27aeee3a6/sqlglotrs-0.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4eeedf2d77c9a44d75e641fa659da1cf69dfcdc27d4fe23d0ee45666122605ce", size = 284942 },
- { url = "https://files.pythonhosted.org/packages/87/06/aa7a7f466bc3399ee2b1f0ba0215e3b5d1c394a3a70861240e789e5a0fc4/sqlglotrs-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36878452de1c785dcf11792d9c9bd0810f523be02c23406dbeb6eef05c97e515", size = 321587 },
- { url = "https://files.pythonhosted.org/packages/6e/9c/d2bd1d1f05f68d0b5cc26612b6c5fb08c5b470fb34ec5428545635c11707/sqlglotrs-0.3.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3e2771b7c6ac9f3f871751e90f4d864c9c689622a3591d932497bd6f1475677", size = 329519 },
- { url = "https://files.pythonhosted.org/packages/7f/c3/98a90459389a3d604a9f10ef25042053fa51aaeed5fa06fa096c71cee3bc/sqlglotrs-0.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f14e501797e04711a13f766abb31871bc1044ec74e131cabebd7f7757f1cd3f", size = 370422 },
- { url = "https://files.pythonhosted.org/packages/6b/65/e68863bd22395e7060fddd54dcede89f8e65e1d9bc4295c3f5bf051bcd05/sqlglotrs-0.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19bc0293fc586d7c0b5b210f011765cb4378e8f3d77ef93d1937bdd5971d6425", size = 373844 },
- { url = "https://files.pythonhosted.org/packages/ba/e2/01c627f82328cbe252d3cf105522bc6b1bb2a8577fafca0790aa5a2d8107/sqlglotrs-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd5bdc463afe95f00bc9f52e412ea1d52bd958648428e552ecbab5b21d8f93c9", size = 327922 },
- { url = "https://files.pythonhosted.org/packages/cd/52/73d8b502de28b73a9bfadb096ffb2f61c2ac6bd274e9accb0d85751968d7/sqlglotrs-0.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ecacb017d414b21b495e0868ca76b958dbae193ca0e158e0adcaa61b633c0315", size = 346575 },
- { url = "https://files.pythonhosted.org/packages/3d/bb/34d13f76025728d24242675c916f9b84d568c76eab03fa2974b1c722a675/sqlglotrs-0.3.0-cp312-none-win32.whl", hash = "sha256:48d510f5c9704899262ee6b2189eb8eb5639e6474e8141453e93fe10364bde2c", size = 177274 },
- { url = "https://files.pythonhosted.org/packages/6b/ed/8bc1d54387434f4c1b99a54721691444e9e249bb728a0da47b3150c756d6/sqlglotrs-0.3.0-cp312-none-win_amd64.whl", hash = "sha256:b9f308732f12331f06c53fcb1d7c2b135a43aa22486b4c88c26d42710f329448", size = 190557 },
-]
-
[[package]]
name = "sse-starlette"
version = "2.3.3"
@@ -3959,27 +3568,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/bf/4b/48ca098cb580c099b5058bf62c4cb5e90ca6130fa43ef4df27088536245b/tiktoken-0.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0bc603c30b9e371e7c4c7935aba02af5994a909fc3c0fe66e7004070858d3f8f", size = 799281 },
]
-[[package]]
-name = "tinysegmenter"
-version = "0.3"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/17/82/86982e4b6d16e4febc79c2a1d68ee3b707e8a020c5d2bc4af8052d0f136a/tinysegmenter-0.3.tar.gz", hash = "sha256:ed1f6d2e806a4758a73be589754384cbadadc7e1a414c81a166fc9adf2d40c6d", size = 16893 }
-
-[[package]]
-name = "tldextract"
-version = "5.3.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "filelock" },
- { name = "idna" },
- { name = "requests" },
- { name = "requests-file" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/97/78/182641ea38e3cfd56e9c7b3c0d48a53d432eea755003aa544af96403d4ac/tldextract-5.3.0.tar.gz", hash = "sha256:b3d2b70a1594a0ecfa6967d57251527d58e00bb5a91a74387baa0d87a0678609", size = 128502 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/67/7c/ea488ef48f2f544566947ced88541bc45fae9e0e422b2edbf165ee07da99/tldextract-5.3.0-py3-none-any.whl", hash = "sha256:f70f31d10b55c83993f55e91ecb7c5d84532a8972f22ec578ecfbe5ea2292db2", size = 107384 },
-]
-
[[package]]
name = "tokenizers"
version = "0.21.1"
@@ -4014,49 +3602,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde", size = 37955 },
]
-[[package]]
-name = "torch"
-version = "2.7.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "filelock" },
- { name = "fsspec" },
- { name = "jinja2" },
- { name = "networkx" },
- { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "nvidia-cufile-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "setuptools", marker = "python_full_version >= '3.12'" },
- { name = "sympy" },
- { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
- { name = "typing-extensions" },
-]
-wheels = [
- { url = "https://files.pythonhosted.org/packages/46/c2/3fb87940fa160d956ee94d644d37b99a24b9c05a4222bf34f94c71880e28/torch-2.7.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:c9afea41b11e1a1ab1b258a5c31afbd646d6319042bfe4f231b408034b51128b", size = 99158447 },
- { url = "https://files.pythonhosted.org/packages/cc/2c/91d1de65573fce563f5284e69d9c56b57289625cffbbb6d533d5d56c36a5/torch-2.7.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0b9960183b6e5b71239a3e6c883d8852c304e691c0b2955f7045e8a6d05b9183", size = 865164221 },
- { url = "https://files.pythonhosted.org/packages/7f/7e/1b1cc4e0e7cc2666cceb3d250eef47a205f0821c330392cf45eb08156ce5/torch-2.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:2ad79d0d8c2a20a37c5df6052ec67c2078a2c4e9a96dd3a8b55daaff6d28ea29", size = 212521189 },
- { url = "https://files.pythonhosted.org/packages/dc/0b/b2b83f30b8e84a51bf4f96aa3f5f65fdf7c31c591cc519310942339977e2/torch-2.7.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:34e0168ed6de99121612d72224e59b2a58a83dae64999990eada7260c5dd582d", size = 68559462 },
- { url = "https://files.pythonhosted.org/packages/40/da/7378d16cc636697f2a94f791cb496939b60fb8580ddbbef22367db2c2274/torch-2.7.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2b7813e904757b125faf1a9a3154e1d50381d539ced34da1992f52440567c156", size = 99159397 },
- { url = "https://files.pythonhosted.org/packages/0e/6b/87fcddd34df9f53880fa1f0c23af7b6b96c935856473faf3914323588c40/torch-2.7.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:fd5cfbb4c3bbadd57ad1b27d56a28008f8d8753733411a140fcfb84d7f933a25", size = 865183681 },
- { url = "https://files.pythonhosted.org/packages/13/85/6c1092d4b06c3db1ed23d4106488750917156af0b24ab0a2d9951830b0e9/torch-2.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:58df8d5c2eeb81305760282b5069ea4442791a6bbf0c74d9069b7b3304ff8a37", size = 212520100 },
- { url = "https://files.pythonhosted.org/packages/aa/3f/85b56f7e2abcfa558c5fbf7b11eb02d78a4a63e6aeee2bbae3bb552abea5/torch-2.7.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:0a8d43caa342b9986101ec5feb5bbf1d86570b5caa01e9cb426378311258fdde", size = 68569377 },
- { url = "https://files.pythonhosted.org/packages/aa/5e/ac759f4c0ab7c01feffa777bd68b43d2ac61560a9770eeac074b450f81d4/torch-2.7.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:36a6368c7ace41ad1c0f69f18056020b6a5ca47bedaca9a2f3b578f5a104c26c", size = 99013250 },
- { url = "https://files.pythonhosted.org/packages/9c/58/2d245b6f1ef61cf11dfc4aceeaacbb40fea706ccebac3f863890c720ab73/torch-2.7.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:15aab3e31c16feb12ae0a88dba3434a458874636f360c567caa6a91f6bfba481", size = 865042157 },
- { url = "https://files.pythonhosted.org/packages/44/80/b353c024e6b624cd9ce1d66dcb9d24e0294680f95b369f19280e241a0159/torch-2.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:f56d4b2510934e072bab3ab8987e00e60e1262fb238176168f5e0c43a1320c6d", size = 212482262 },
- { url = "https://files.pythonhosted.org/packages/ee/8d/b2939e5254be932db1a34b2bd099070c509e8887e0c5a90c498a917e4032/torch-2.7.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:30b7688a87239a7de83f269333651d8e582afffce6f591fff08c046f7787296e", size = 68574294 },
-]
-
[[package]]
name = "tqdm"
version = "4.67.1"
@@ -4137,19 +3682,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/87/cb/ce35a65f83a47b510d8a2f1eddf3bdbb0d57aabc87351c8788caf3309f76/tree_sitter_python-0.23.6-cp39-abi3-win_arm64.whl", hash = "sha256:71334371bd73d5fe080aed39fbff49ed8efb9506edebe16795b0c7567ed6a272", size = 73649 },
]
-[[package]]
-name = "triton"
-version = "3.3.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "setuptools", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
-]
-wheels = [
- { url = "https://files.pythonhosted.org/packages/76/04/d54d3a6d077c646624dc9461b0059e23fd5d30e0dbe67471e3654aec81f9/triton-3.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fad99beafc860501d7fcc1fb7045d9496cbe2c882b1674640304949165a916e7", size = 156441993 },
- { url = "https://files.pythonhosted.org/packages/3c/c5/4874a81131cc9e934d88377fbc9d24319ae1fb540f3333b4e9c696ebc607/triton-3.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3161a2bf073d6b22c4e2f33f951f3e5e3001462b2570e6df9cd57565bdec2984", size = 156528461 },
- { url = "https://files.pythonhosted.org/packages/11/53/ce18470914ab6cfbec9384ee565d23c4d1c55f0548160b1c7b33000b11fd/triton-3.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b68c778f6c4218403a6bd01be7484f6dc9e20fe2083d22dd8aef33e3b87a10a3", size = 156504509 },
-]
-
[[package]]
name = "typer"
version = "0.15.3"
@@ -4199,6 +3731,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/31/08/aa4fdfb71f7de5176385bd9e90852eaf6b5d622735020ad600f2bab54385/typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", size = 14125 },
]
+[[package]]
+name = "tzdata"
+version = "2025.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521 },
+]
+
[[package]]
name = "unstructured"
version = "0.16.20"
@@ -4424,6 +3965,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/fc/be/8302d331252974200ff4adb392d1fc67e4ff161c85a3109b915f4cbaa1ca/xls2xlsx-0.2.0-py2.py3-none-any.whl", hash = "sha256:a6b9c6f887d2e366a54d26682d1ec399f5dbf408567d47768ef6178ef587af4e", size = 39191 },
]
+[[package]]
+name = "xlsxwriter"
+version = "3.2.9"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315 },
+]
+
[[package]]
name = "xmltodict"
version = "0.14.2"