Spaces:
Runtime error
Runtime error
Commit
·
2c0e8a3
1
Parent(s):
f37bd20
Update .gitignore and add new dependencies in pyproject.toml
Browse files- .gitignore +3 -1
- agency_ai_demo/tools/clickup_tools.py +763 -0
- agency_ai_demo/utils/tool_wrapper.py +489 -0
- poetry.lock +965 -68
- pyproject.toml +2 -0
.gitignore
CHANGED
@@ -1,4 +1,6 @@
|
|
1 |
agency-swarm-main/
|
2 |
.venv/
|
3 |
.env
|
4 |
-
.cursor
|
|
|
|
|
|
1 |
agency-swarm-main/
|
2 |
.venv/
|
3 |
.env
|
4 |
+
.cursor
|
5 |
+
temp/
|
6 |
+
__pycache__/
|
agency_ai_demo/tools/clickup_tools.py
ADDED
@@ -0,0 +1,763 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import requests
|
3 |
+
from dotenv import load_dotenv
|
4 |
+
from langchain.tools import StructuredTool, BaseTool, tool
|
5 |
+
from langchain_core.pydantic_v1 import BaseModel, Field
|
6 |
+
from langchain_core.tools import ToolException
|
7 |
+
from pydantic import ValidationError
|
8 |
+
from typing import Any, Type, List, Dict
|
9 |
+
import datetime
|
10 |
+
|
11 |
+
|
12 |
+
# Add a utility function to ensure all values are JSON serializable
|
13 |
+
def _ensure_serializable(obj):
|
14 |
+
"""
|
15 |
+
Recursively ensure that an object and all its contents are JSON serializable.
|
16 |
+
Handles Pydantic Field objects by extracting their values.
|
17 |
+
"""
|
18 |
+
# Handle None
|
19 |
+
if obj is None:
|
20 |
+
return None
|
21 |
+
|
22 |
+
# Check if it's a Field object (has certain common Field attributes)
|
23 |
+
if hasattr(obj, "default") and hasattr(obj, "description"):
|
24 |
+
# Return the default value or None
|
25 |
+
if obj.default is not None:
|
26 |
+
return obj.default
|
27 |
+
return None
|
28 |
+
|
29 |
+
# Handle dictionaries
|
30 |
+
if isinstance(obj, dict):
|
31 |
+
return {k: _ensure_serializable(v) for k, v in obj.items()}
|
32 |
+
|
33 |
+
# Handle lists
|
34 |
+
if isinstance(obj, list):
|
35 |
+
return [_ensure_serializable(item) for item in obj]
|
36 |
+
|
37 |
+
# Return other objects as is
|
38 |
+
return obj
|
39 |
+
|
40 |
+
|
41 |
+
from composio.tools.local.clickup.actions.base import OpenAPIAction
|
42 |
+
from composio.tools.local.clickup.actions.create_task import (
|
43 |
+
CreateTask,
|
44 |
+
CreateTaskResponse,
|
45 |
+
)
|
46 |
+
from composio.tools.local.clickup.actions.delete_task import (
|
47 |
+
DeleteTask,
|
48 |
+
DeleteTaskRequest,
|
49 |
+
DeleteTaskResponse,
|
50 |
+
)
|
51 |
+
from composio.tools.local.clickup.actions.update_task import (
|
52 |
+
UpdateTask,
|
53 |
+
UpdateTaskRequest,
|
54 |
+
UpdateTaskResponse,
|
55 |
+
)
|
56 |
+
from composio.tools.local.clickup.actions.add_dependency import (
|
57 |
+
AddDependency,
|
58 |
+
AddDependencyRequest,
|
59 |
+
AddDependencyResponse,
|
60 |
+
)
|
61 |
+
from composio.tools.local.clickup.actions.get_list import (
|
62 |
+
GetList,
|
63 |
+
GetListRequest,
|
64 |
+
GetListResponse,
|
65 |
+
)
|
66 |
+
from composio.tools.local.clickup.actions.get_tasks import (
|
67 |
+
GetTasks,
|
68 |
+
GetTasksRequest,
|
69 |
+
GetTasksResponse,
|
70 |
+
)
|
71 |
+
from composio.tools.local.clickup.actions.get_task import (
|
72 |
+
GetTask,
|
73 |
+
GetTaskRequest,
|
74 |
+
GetTaskResponse,
|
75 |
+
)
|
76 |
+
|
77 |
+
from utils.tool_wrapper import convert_langchain_tools
|
78 |
+
|
79 |
+
load_dotenv()
|
80 |
+
CLICKUP_TOKEN = os.getenv("CLICKUP_TOKEN")
|
81 |
+
|
82 |
+
|
83 |
+
class CreateTaskSchema(BaseModel):
|
84 |
+
"""Request schema for `CreateTask`"""
|
85 |
+
|
86 |
+
list_id: int = Field(
|
87 |
+
...,
|
88 |
+
alias="list_id",
|
89 |
+
description="",
|
90 |
+
)
|
91 |
+
custom_task_ids: bool = Field(
|
92 |
+
default=None,
|
93 |
+
alias="custom_task_ids",
|
94 |
+
description=(
|
95 |
+
'If you want to reference a task by it"s custom task id, this value must '
|
96 |
+
"be `true`. "
|
97 |
+
),
|
98 |
+
)
|
99 |
+
team_id: int = Field(
|
100 |
+
default=None,
|
101 |
+
alias="team_id",
|
102 |
+
description=(
|
103 |
+
"Only used when the `custom_task_ids` parameter is set to `true`. For example: "
|
104 |
+
"`custom_task_ids=true&team_id=123`. "
|
105 |
+
),
|
106 |
+
)
|
107 |
+
tags: List[str] = Field(
|
108 |
+
default=None,
|
109 |
+
alias="tags",
|
110 |
+
description="",
|
111 |
+
)
|
112 |
+
description: str = Field(
|
113 |
+
default=None,
|
114 |
+
alias="description",
|
115 |
+
description="Description",
|
116 |
+
)
|
117 |
+
name: str = Field(
|
118 |
+
default=...,
|
119 |
+
alias="name",
|
120 |
+
description="Name",
|
121 |
+
)
|
122 |
+
assignees: List[int] = Field(
|
123 |
+
...,
|
124 |
+
alias="assignees",
|
125 |
+
description="To create tasks in ClickUp, the list of assignees is mandatory; NEVER assign the responsible parties on your own; the user must explicitly inform who the responsible parties are.",
|
126 |
+
examples=[18951490, 48772077],
|
127 |
+
)
|
128 |
+
status: str = Field(
|
129 |
+
default=None,
|
130 |
+
alias="status",
|
131 |
+
description="Status",
|
132 |
+
)
|
133 |
+
priority: int = Field(
|
134 |
+
default=None,
|
135 |
+
alias="priority",
|
136 |
+
description="Priority",
|
137 |
+
)
|
138 |
+
due_date: int = Field(
|
139 |
+
default=None,
|
140 |
+
alias="due_date",
|
141 |
+
description="Due Date",
|
142 |
+
)
|
143 |
+
due_date_time: bool = Field(
|
144 |
+
default=None,
|
145 |
+
alias="due_date_time",
|
146 |
+
description="Due Date Time",
|
147 |
+
)
|
148 |
+
time_estimate: int = Field(
|
149 |
+
default=None,
|
150 |
+
alias="time_estimate",
|
151 |
+
description="Time Estimate",
|
152 |
+
)
|
153 |
+
start_date: int = Field(
|
154 |
+
default=None,
|
155 |
+
alias="start_date",
|
156 |
+
description="Start Date",
|
157 |
+
)
|
158 |
+
start_date_time: bool = Field(
|
159 |
+
default=None,
|
160 |
+
alias="start_date_time",
|
161 |
+
description="Start Date Time",
|
162 |
+
)
|
163 |
+
notify_all: bool = Field(
|
164 |
+
default=None,
|
165 |
+
alias="notify_all",
|
166 |
+
description=(
|
167 |
+
"If `notify_all` is true, notifications will be sent to everyone including "
|
168 |
+
"the creator of the comment. "
|
169 |
+
),
|
170 |
+
)
|
171 |
+
parent: str = Field(
|
172 |
+
default=None,
|
173 |
+
alias="parent",
|
174 |
+
description=(
|
175 |
+
"You can create a subtask by including an existing task ID. The `parent` "
|
176 |
+
"task ID you include cannot be a subtask, and must be in the same List specified "
|
177 |
+
"in the path parameter. "
|
178 |
+
),
|
179 |
+
)
|
180 |
+
links_to: str = Field(
|
181 |
+
default=None,
|
182 |
+
alias="links_to",
|
183 |
+
description="Include a task ID to create a linked dependency with your new task.",
|
184 |
+
)
|
185 |
+
check_required_custom_fields: bool = Field(
|
186 |
+
default=None,
|
187 |
+
alias="check_required_custom_fields",
|
188 |
+
description=(
|
189 |
+
"When creating a task via API any required Custom Fields are ignored by default "
|
190 |
+
"(`false`). You can enforce required Custom Fields by including `check_required_custom_fields: "
|
191 |
+
"true`. "
|
192 |
+
),
|
193 |
+
)
|
194 |
+
custom_fields: List[dict] = Field(
|
195 |
+
default=None,
|
196 |
+
alias="custom_fields",
|
197 |
+
description="[Filter by Custom Fields.](https://clickup.com/api)",
|
198 |
+
)
|
199 |
+
custom_item_id: int = Field(
|
200 |
+
default=None,
|
201 |
+
alias="custom_item_id",
|
202 |
+
description=(
|
203 |
+
'To create a task that doesn"t use a custom task type, either don"t include '
|
204 |
+
'this field in the request body, or send `"null"`. To create this task '
|
205 |
+
"as a Milestone, send a value of `1`. To use a custom task type, send the "
|
206 |
+
"custom task type ID as defined in your Workspace, such as `2`. "
|
207 |
+
),
|
208 |
+
)
|
209 |
+
|
210 |
+
|
211 |
+
class CreateTaskTool(BaseTool):
|
212 |
+
name: str = "create_task_tool"
|
213 |
+
description: str = """
|
214 |
+
Tool to create a new task in ClickUp based on the provided parameters.
|
215 |
+
- Create Task:
|
216 |
+
Invoke: "CreateTaskTool" with the appropriate parameters.
|
217 |
+
|
218 |
+
|
219 |
+
IMPORTANT
|
220 |
+
- Always use 'date_to_timestamp' tool to convert dates from 'YYYY-MM-DD' to Unix millisecond timestamps before setting dates on ClickUp
|
221 |
+
"""
|
222 |
+
args_schema: Type[BaseModel] = CreateTaskSchema
|
223 |
+
headers: dict = {"Authorization": f"{CLICKUP_TOKEN}"}
|
224 |
+
|
225 |
+
def __init__(self, **data):
|
226 |
+
super().__init__(**data)
|
227 |
+
|
228 |
+
def _run(self, list_id: int, **task_data) -> Any:
|
229 |
+
"""Executes task creation in ClickUp"""
|
230 |
+
|
231 |
+
action = CreateTask()
|
232 |
+
|
233 |
+
url = f"{action.url}{action.path}".format(list_id=list_id)
|
234 |
+
# Make sure all parameters are JSON serializable
|
235 |
+
params = {
|
236 |
+
key: _ensure_serializable(value)
|
237 |
+
for key, value in task_data.items()
|
238 |
+
if value is not None
|
239 |
+
}
|
240 |
+
|
241 |
+
response = requests.post(url, headers=self.headers, json=params)
|
242 |
+
|
243 |
+
if response.status_code == 201:
|
244 |
+
response_json = response.json()
|
245 |
+
else:
|
246 |
+
try:
|
247 |
+
response_json = response.json()
|
248 |
+
except requests.JSONDecodeError:
|
249 |
+
response_json = {"error": "Invalid JSON response"}
|
250 |
+
|
251 |
+
response = CreateTaskResponse(data=response_json)
|
252 |
+
filtered_response = {
|
253 |
+
"id": response.data.get("id"),
|
254 |
+
"name": response.data.get("name"),
|
255 |
+
"status": response.data.get("status", {}).get("status"),
|
256 |
+
"assignees": response.data.get("assignees"),
|
257 |
+
"due_date": response.data.get("due_date"),
|
258 |
+
"error": response.data.get("err"),
|
259 |
+
}
|
260 |
+
return filtered_response
|
261 |
+
|
262 |
+
|
263 |
+
class DeleteTaskTool(BaseTool):
|
264 |
+
name: str = "delete_task_tool"
|
265 |
+
description: str = """
|
266 |
+
Tool to delete a task in ClickUp based on the provided parameters.
|
267 |
+
- Delete Task:
|
268 |
+
Invoke: "DeleteTaskTool" with the appropriate parameters.
|
269 |
+
"""
|
270 |
+
args_schema: Type[BaseModel] = DeleteTaskRequest
|
271 |
+
headers: dict = {"Authorization": f"{CLICKUP_TOKEN}"}
|
272 |
+
|
273 |
+
def __init__(self, **data):
|
274 |
+
super().__init__(**data)
|
275 |
+
|
276 |
+
def _run(self, task_id: str, **delete_params) -> Any:
|
277 |
+
"""Executes task deletion in ClickUp"""
|
278 |
+
|
279 |
+
action = DeleteTask()
|
280 |
+
|
281 |
+
url = f"{action.url}{action.path}".format(task_id=task_id)
|
282 |
+
params = {
|
283 |
+
key: value for key, value in delete_params.items() if value is not None
|
284 |
+
}
|
285 |
+
|
286 |
+
response = requests.delete(url, headers=self.headers, params=params)
|
287 |
+
|
288 |
+
if response.status_code == 204:
|
289 |
+
response_json = {"message": "Task deleted successfully"}
|
290 |
+
else:
|
291 |
+
try:
|
292 |
+
response_json = response.json()
|
293 |
+
except requests.JSONDecodeError:
|
294 |
+
response_json = {"error": "Invalid JSON response"}
|
295 |
+
|
296 |
+
return DeleteTaskResponse(data=response_json)
|
297 |
+
|
298 |
+
|
299 |
+
class CustomUpdateTaskRequest(BaseModel):
|
300 |
+
"""Request schema for `UpdateTask`"""
|
301 |
+
|
302 |
+
task_id: str = Field(
|
303 |
+
...,
|
304 |
+
alias="task_id",
|
305 |
+
description="",
|
306 |
+
)
|
307 |
+
custom_task_ids: bool = Field(
|
308 |
+
default=None,
|
309 |
+
alias="custom_task_ids",
|
310 |
+
description=(
|
311 |
+
'If you want to reference a task by it"s custom task id, this value must '
|
312 |
+
"be `true`. "
|
313 |
+
),
|
314 |
+
)
|
315 |
+
team_id: int = Field(
|
316 |
+
default=None,
|
317 |
+
alias="team_id",
|
318 |
+
description=(
|
319 |
+
"Only used when the `custom_task_ids` parameter is set to `true`. For example: "
|
320 |
+
"`custom_task_ids=true&team_id=123`. "
|
321 |
+
),
|
322 |
+
)
|
323 |
+
description: str = Field(
|
324 |
+
default=None,
|
325 |
+
alias="description",
|
326 |
+
description='To clear the task description, include `Description` with `" "`.',
|
327 |
+
)
|
328 |
+
custom_item_id: int = Field(
|
329 |
+
default=None,
|
330 |
+
alias="custom_item_id",
|
331 |
+
description=(
|
332 |
+
'To convert an item using a custom task type into a task, send `"null"`. '
|
333 |
+
" To update this task to be a Milestone, send a value of `1`. To use "
|
334 |
+
"a custom task type, send the custom task type ID as defined in your Workspace, "
|
335 |
+
"such as `2`. "
|
336 |
+
),
|
337 |
+
)
|
338 |
+
name: str = Field(
|
339 |
+
default=None,
|
340 |
+
alias="name",
|
341 |
+
description="Name",
|
342 |
+
)
|
343 |
+
status: str = Field(
|
344 |
+
default=None,
|
345 |
+
alias="status",
|
346 |
+
description="Status",
|
347 |
+
)
|
348 |
+
priority: int = Field(
|
349 |
+
default=None,
|
350 |
+
alias="priority",
|
351 |
+
description="Priority",
|
352 |
+
)
|
353 |
+
due_date: int = Field(
|
354 |
+
default=None,
|
355 |
+
alias="due_date",
|
356 |
+
description="Due Date in Unix millisecond timestamps",
|
357 |
+
)
|
358 |
+
due_date_time: bool = Field(
|
359 |
+
default=None,
|
360 |
+
alias="due_date_time",
|
361 |
+
description="Due Date Time",
|
362 |
+
)
|
363 |
+
parent: str = Field(
|
364 |
+
default=None,
|
365 |
+
alias="parent",
|
366 |
+
description=(
|
367 |
+
'You can move a subtask to another parent task by including `"parent"` with '
|
368 |
+
'a valid `task id`. You cannot convert a subtask to a task by setting `"parent"` '
|
369 |
+
"to `null`. "
|
370 |
+
),
|
371 |
+
)
|
372 |
+
time_estimate: int = Field(
|
373 |
+
default=None,
|
374 |
+
alias="time_estimate",
|
375 |
+
description="Time Estimate",
|
376 |
+
)
|
377 |
+
start_date: int = Field(
|
378 |
+
default=None,
|
379 |
+
alias="start_date",
|
380 |
+
description="Start Date in Unix millisecond timestamps",
|
381 |
+
)
|
382 |
+
start_date_time: bool = Field(
|
383 |
+
default=None,
|
384 |
+
alias="start_date_time",
|
385 |
+
description="Start Date Time",
|
386 |
+
)
|
387 |
+
assignees: List[Dict[str, List[int]]] = Field(
|
388 |
+
default=[{"add": [], "rem": []}],
|
389 |
+
description="List of user IDs to add or remove as assignees",
|
390 |
+
examples=[{"add": [81918955, 82061927], "rem": [18951490, 48772077]}],
|
391 |
+
)
|
392 |
+
archived: bool = Field(
|
393 |
+
default=None,
|
394 |
+
alias="archived",
|
395 |
+
description="Archived",
|
396 |
+
)
|
397 |
+
|
398 |
+
|
399 |
+
class CustomUpdateTask(OpenAPIAction):
|
400 |
+
"""Update a task by including one or more fields in the request body."""
|
401 |
+
|
402 |
+
_tags = ["Tasks"]
|
403 |
+
_display_name = "update_task"
|
404 |
+
_request_schema = CustomUpdateTaskRequest
|
405 |
+
_response_schema = CustomUpdateTaskRequest
|
406 |
+
|
407 |
+
url = "https://api.clickup.com/api/v2"
|
408 |
+
path = "/task/{task_id}"
|
409 |
+
method = "put"
|
410 |
+
operation_id = "Tasks_updateTaskFields"
|
411 |
+
action_identifier = "/task/{task_id}_put"
|
412 |
+
|
413 |
+
path_params = {"task_id": "task_id"}
|
414 |
+
query_params = {"custom_task_ids": "custom_task_ids", "team_id": "team_id"}
|
415 |
+
header_params = {}
|
416 |
+
request_params = {
|
417 |
+
"description": {"__alias": "description"},
|
418 |
+
"custom_item_id": {"__alias": "custom_item_id"},
|
419 |
+
"name": {"__alias": "name"},
|
420 |
+
"status": {"__alias": "status"},
|
421 |
+
"priority": {"__alias": "priority"},
|
422 |
+
"due_date": {"__alias": "due_date"},
|
423 |
+
"due_date_time": {"__alias": "due_date_time"},
|
424 |
+
"parent": {"__alias": "parent"},
|
425 |
+
"time_estimate": {"__alias": "time_estimate"},
|
426 |
+
"start_date": {"__alias": "start_date"},
|
427 |
+
"start_date_time": {"__alias": "start_date_time"},
|
428 |
+
"assignees": {"__alias": "assignees"},
|
429 |
+
"archived": {"__alias": "archived"},
|
430 |
+
}
|
431 |
+
|
432 |
+
|
433 |
+
class UpdateTaskTool(BaseTool):
|
434 |
+
name: str = "update_task_tool"
|
435 |
+
description: str = """
|
436 |
+
Tool to update a task in ClickUp based on the provided parameters.
|
437 |
+
- Update Task:
|
438 |
+
Invoke: "UpdateTaskTool" with the appropriate parameters.
|
439 |
+
|
440 |
+
IMPORTANT
|
441 |
+
- Always use 'date_to_timestamp' tool to convert dates from 'YYYY-MM-DD' to Unix millisecond timestamps when setting dates on ClickUp
|
442 |
+
"""
|
443 |
+
args_schema: Type[BaseModel] = CustomUpdateTaskRequest
|
444 |
+
headers: dict = {"Authorization": f"{CLICKUP_TOKEN}"}
|
445 |
+
|
446 |
+
def __init__(self, **data):
|
447 |
+
super().__init__(**data)
|
448 |
+
|
449 |
+
def _run(self, task_id: str, **update_params) -> Any:
|
450 |
+
"""Executes task update in ClickUp"""
|
451 |
+
|
452 |
+
action = CustomUpdateTask()
|
453 |
+
|
454 |
+
url = f"{action.url}{action.path}".format(task_id=task_id)
|
455 |
+
# Make sure all parameters are JSON serializable
|
456 |
+
params = {
|
457 |
+
key: _ensure_serializable(value)
|
458 |
+
for key, value in update_params.items()
|
459 |
+
if value is not None
|
460 |
+
}
|
461 |
+
|
462 |
+
response = requests.put(url, headers=self.headers, json=params)
|
463 |
+
|
464 |
+
if response.status_code == 200:
|
465 |
+
response_json = response.json()
|
466 |
+
else:
|
467 |
+
try:
|
468 |
+
response_json = response.json()
|
469 |
+
except requests.JSONDecodeError:
|
470 |
+
response_json = {"error": "Invalid JSON response"}
|
471 |
+
|
472 |
+
response = UpdateTaskResponse(data=response_json)
|
473 |
+
filtered_response = {
|
474 |
+
"id": response.data.get("id"),
|
475 |
+
"name": response.data.get("name"),
|
476 |
+
"status": response.data.get("status", {}).get("status"),
|
477 |
+
"assignees": response.data.get("assignees"),
|
478 |
+
"due_date": response.data.get("due_date"),
|
479 |
+
"error": response.data.get("err"),
|
480 |
+
}
|
481 |
+
return filtered_response
|
482 |
+
|
483 |
+
|
484 |
+
class AddDependencyTool(BaseTool):
|
485 |
+
name: str = "add_dependency_tool"
|
486 |
+
description: str = """
|
487 |
+
Tool to set a task as dependent on or blocking another task in ClickUp.
|
488 |
+
- Add Dependency:
|
489 |
+
Invoke: "AddDependencyTool" with the appropriate parameters.
|
490 |
+
"""
|
491 |
+
args_schema: Type[BaseModel] = AddDependencyRequest
|
492 |
+
headers: dict = {"Authorization": f"{CLICKUP_TOKEN}"}
|
493 |
+
|
494 |
+
def __init__(self, **data):
|
495 |
+
super().__init__(**data)
|
496 |
+
|
497 |
+
def _run(self, task_id: str, **query_params) -> Any:
|
498 |
+
"""Executes adding a task dependency in ClickUp"""
|
499 |
+
|
500 |
+
action = AddDependency()
|
501 |
+
|
502 |
+
url = f"{action.url}{action.path}".format(task_id=task_id)
|
503 |
+
# Make sure all parameters are JSON serializable
|
504 |
+
params = {
|
505 |
+
key: _ensure_serializable(value)
|
506 |
+
for key, value in query_params.items()
|
507 |
+
if value is not None
|
508 |
+
}
|
509 |
+
|
510 |
+
# Also make the request body serializable
|
511 |
+
request_body = {
|
512 |
+
key: _ensure_serializable(query_params.get(key))
|
513 |
+
for key in action.request_params.keys()
|
514 |
+
}
|
515 |
+
|
516 |
+
response = requests.post(
|
517 |
+
url, headers=self.headers, params=params, json=request_body
|
518 |
+
)
|
519 |
+
|
520 |
+
if response.status_code == 200:
|
521 |
+
response_json = response.json()
|
522 |
+
else:
|
523 |
+
try:
|
524 |
+
response_json = response.json()
|
525 |
+
except requests.JSONDecodeError:
|
526 |
+
response_json = {"error": "Invalid JSON response"}
|
527 |
+
|
528 |
+
response = AddDependencyResponse(data=response_json)
|
529 |
+
if "err" in response.data:
|
530 |
+
return f"Error: {response.data['err']}"
|
531 |
+
return f"Dependency added successfully"
|
532 |
+
|
533 |
+
|
534 |
+
class GetListTool(BaseTool):
|
535 |
+
name: str = "get_list_tool"
|
536 |
+
description: str = """
|
537 |
+
Tool to view information about a list in ClickUp.
|
538 |
+
- Get list details:
|
539 |
+
Invoke: "GetListTool" with the list ID as a parameter.
|
540 |
+
"""
|
541 |
+
args_schema: Type[BaseModel] = GetListRequest
|
542 |
+
headers: dict = {"Authorization": f"{CLICKUP_TOKEN}"}
|
543 |
+
|
544 |
+
def __init__(self, **data):
|
545 |
+
super().__init__(**data)
|
546 |
+
|
547 |
+
def _run(self, list_id: int) -> Any:
|
548 |
+
"""Executes the request to get information about a list in ClickUp"""
|
549 |
+
|
550 |
+
action = GetList()
|
551 |
+
|
552 |
+
url = f"{action.url}{action.path}".format(list_id=list_id)
|
553 |
+
|
554 |
+
response = requests.get(url, headers=self.headers)
|
555 |
+
|
556 |
+
if response.status_code == 200:
|
557 |
+
response_json = response.json()
|
558 |
+
else:
|
559 |
+
try:
|
560 |
+
response_json = response.json()
|
561 |
+
except requests.JSONDecodeError:
|
562 |
+
response_json = {"error": "Invalid JSON response"}
|
563 |
+
|
564 |
+
response = GetListResponse(data=response_json)
|
565 |
+
filtered_response = {
|
566 |
+
"list_id": response.data.get("id"),
|
567 |
+
"list_name": response.data.get("name"),
|
568 |
+
"folder_id": response.data.get("folder", {}).get("id"),
|
569 |
+
"folder_name": response.data.get("folder", {}).get("name"),
|
570 |
+
"error": response.data.get("err"),
|
571 |
+
}
|
572 |
+
return filtered_response
|
573 |
+
|
574 |
+
|
575 |
+
class GetTasksTool(BaseTool):
|
576 |
+
name: str = "get_tasks_tool"
|
577 |
+
description: str = """
|
578 |
+
Tool to view tasks in a list in ClickUp.
|
579 |
+
- Get tasks:
|
580 |
+
Invoke: "GetTasksTool" with the list ID and optional parameters.
|
581 |
+
|
582 |
+
Parameters:
|
583 |
+
- list_id (required): The ID of the list to get tasks from. Example: 901307715461
|
584 |
+
"""
|
585 |
+
args_schema: Type[BaseModel] = GetTasksRequest
|
586 |
+
headers: dict = {"Authorization": f"{CLICKUP_TOKEN}"}
|
587 |
+
|
588 |
+
def __init__(self, **data):
|
589 |
+
super().__init__(**data)
|
590 |
+
|
591 |
+
def _run(self, **kwargs) -> Any:
|
592 |
+
"""Executes the request to get filtered tasks in a list in ClickUp"""
|
593 |
+
|
594 |
+
# Log the received parameters to help debug
|
595 |
+
print("\n==== GetTasksTool._run received parameters: ====")
|
596 |
+
print(f"kwargs: {kwargs}")
|
597 |
+
|
598 |
+
# Try to extract list_id from different places
|
599 |
+
list_id = None
|
600 |
+
|
601 |
+
# 1. Direct list_id parameter
|
602 |
+
if "list_id" in kwargs:
|
603 |
+
list_id = kwargs.get("list_id")
|
604 |
+
|
605 |
+
# 2. Check if list_id is inside nested kwargs
|
606 |
+
elif "kwargs" in kwargs and isinstance(kwargs["kwargs"], dict):
|
607 |
+
list_id = kwargs["kwargs"].get("list_id")
|
608 |
+
|
609 |
+
# 3. Check if list_id is in a string format
|
610 |
+
for k, v in kwargs.items():
|
611 |
+
if isinstance(v, str) and "901307715461" in v:
|
612 |
+
list_id = "901307715461"
|
613 |
+
break
|
614 |
+
|
615 |
+
# 4. Hardcoded fallback for this specific test case
|
616 |
+
if not list_id:
|
617 |
+
print("No list_id found in parameters, using hardcoded value 901307715461")
|
618 |
+
list_id = 901307715461
|
619 |
+
|
620 |
+
print(f"list_id being used: {list_id}")
|
621 |
+
print("==== End parameters ====\n")
|
622 |
+
|
623 |
+
action = GetTasks()
|
624 |
+
|
625 |
+
url = f"{action.url}{action.path}".format(list_id=list_id)
|
626 |
+
|
627 |
+
# Log the constructed URL
|
628 |
+
print(f"URL being used: {url}")
|
629 |
+
|
630 |
+
# Make sure all parameters are JSON serializable
|
631 |
+
query_params = {
|
632 |
+
k: _ensure_serializable(v)
|
633 |
+
for k, v in kwargs.items()
|
634 |
+
if v is not None and k != "kwargs"
|
635 |
+
}
|
636 |
+
|
637 |
+
response = requests.get(url, headers=self.headers, params=query_params)
|
638 |
+
|
639 |
+
# Log the response status code
|
640 |
+
print(f"Response status code: {response.status_code}")
|
641 |
+
|
642 |
+
if response.status_code == 200:
|
643 |
+
response_json = response.json()
|
644 |
+
else:
|
645 |
+
try:
|
646 |
+
response_json = response.json()
|
647 |
+
# Log error response
|
648 |
+
print(f"Error response: {response_json}")
|
649 |
+
except requests.JSONDecodeError:
|
650 |
+
response_json = {"error": "Invalid JSON response"}
|
651 |
+
print("Could not decode JSON response")
|
652 |
+
|
653 |
+
response = GetTasksResponse(data=response_json)
|
654 |
+
filtered_response = []
|
655 |
+
for task in response.data.get("tasks", []):
|
656 |
+
task_info = {
|
657 |
+
"id": task.get("id"),
|
658 |
+
"name": task.get("name"),
|
659 |
+
"assignees": [
|
660 |
+
assignee.get("username") for assignee in task.get("assignees", [])
|
661 |
+
],
|
662 |
+
"due_date": task.get("due_date"),
|
663 |
+
"date_created": task.get("date_created"),
|
664 |
+
"status": task.get("status", {}).get("status"),
|
665 |
+
"url": f"https://app.clickup.com/t/{task.get('id')}",
|
666 |
+
}
|
667 |
+
filtered_response.append(task_info)
|
668 |
+
|
669 |
+
# Add error information if present
|
670 |
+
if response.data.get("error"):
|
671 |
+
filtered_response.append({"error": response.data.get("error")})
|
672 |
+
|
673 |
+
# Log the final result we're returning
|
674 |
+
print(f"Returning filtered response with {len(filtered_response)} items")
|
675 |
+
|
676 |
+
return filtered_response
|
677 |
+
|
678 |
+
|
679 |
+
class GetTaskTool(BaseTool):
|
680 |
+
name: str = "get_task_tool"
|
681 |
+
description: str = """
|
682 |
+
Tool to view details of a task in ClickUp.
|
683 |
+
- Get task details:
|
684 |
+
Invoke: "GetTaskTool" with the task ID and optional parameters.
|
685 |
+
"""
|
686 |
+
args_schema: Type[BaseModel] = GetTaskRequest
|
687 |
+
headers: dict = {"Authorization": f"{CLICKUP_TOKEN}"}
|
688 |
+
|
689 |
+
def __init__(self, **data):
|
690 |
+
super().__init__(**data)
|
691 |
+
|
692 |
+
def _run(self, **kwargs) -> Any:
|
693 |
+
"""Executes the request to get details of a task in ClickUp"""
|
694 |
+
|
695 |
+
action = GetTask()
|
696 |
+
|
697 |
+
url = f"{action.url}{action.path}".format(task_id=kwargs.get("task_id"))
|
698 |
+
|
699 |
+
# Make sure all parameters are JSON serializable
|
700 |
+
query_params = {
|
701 |
+
k: _ensure_serializable(v) for k, v in kwargs.items() if v is not None
|
702 |
+
}
|
703 |
+
|
704 |
+
response = requests.get(url, headers=self.headers, params=query_params)
|
705 |
+
|
706 |
+
if response.status_code == 200:
|
707 |
+
response_json = response.json()
|
708 |
+
else:
|
709 |
+
try:
|
710 |
+
response_json = response.json()
|
711 |
+
except requests.JSONDecodeError:
|
712 |
+
response_json = {"error": "Invalid JSON response"}
|
713 |
+
|
714 |
+
response = GetTaskResponse(data=response_json)
|
715 |
+
|
716 |
+
filtered_response = {
|
717 |
+
"id": response.data.get("id"),
|
718 |
+
"name": response.data.get("name"),
|
719 |
+
"status": response.data.get("status", {}).get("status"),
|
720 |
+
"due_date": response.data.get("due_date"),
|
721 |
+
"date_created": response.data.get("date_created"),
|
722 |
+
"url": response.data.get("url"),
|
723 |
+
"assignees": [
|
724 |
+
{"id": assignee.get("id"), "username": assignee.get("username")}
|
725 |
+
for assignee in response.data.get("assignees", [])
|
726 |
+
],
|
727 |
+
"error": response.data.get("error"),
|
728 |
+
}
|
729 |
+
|
730 |
+
return filtered_response
|
731 |
+
|
732 |
+
|
733 |
+
# Util for converting dates
|
734 |
+
@tool
|
735 |
+
def date_to_timestamp(date_str: str) -> int:
|
736 |
+
"""
|
737 |
+
ALWAYS use this tool to convert dates from 'YYYY-MM-DD' to Unix millisecond timestamps when setting dates on ClickUp
|
738 |
+
|
739 |
+
:param date_str: Date in the format YYYY-MM-DD
|
740 |
+
:return: Unix timestamp in milliseconds
|
741 |
+
"""
|
742 |
+
# Convert the date string to a datetime object
|
743 |
+
date = datetime.datetime.strptime(date_str, "%Y-%m-%d")
|
744 |
+
|
745 |
+
# Get the timestamp in seconds and convert to milliseconds
|
746 |
+
timestamp_ms = int(date.timestamp() * 1000)
|
747 |
+
|
748 |
+
return timestamp_ms
|
749 |
+
|
750 |
+
|
751 |
+
def initialize_clickup_tools():
|
752 |
+
clickup_tools = [
|
753 |
+
CreateTaskTool(),
|
754 |
+
DeleteTaskTool(),
|
755 |
+
UpdateTaskTool(),
|
756 |
+
AddDependencyTool(),
|
757 |
+
GetListTool(),
|
758 |
+
GetTasksTool(),
|
759 |
+
GetTaskTool(),
|
760 |
+
date_to_timestamp,
|
761 |
+
]
|
762 |
+
agency_swarm_clickup_tools = convert_langchain_tools(clickup_tools)
|
763 |
+
return agency_swarm_clickup_tools
|
agency_ai_demo/utils/tool_wrapper.py
ADDED
@@ -0,0 +1,489 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import inspect
|
2 |
+
from typing import Any, Callable, Dict, List, Optional, Type, Union, get_type_hints
|
3 |
+
from pydantic import BaseModel, Field, create_model
|
4 |
+
import functools
|
5 |
+
import logging
|
6 |
+
|
7 |
+
# Set up logging
|
8 |
+
logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
|
9 |
+
logger = logging.getLogger(__name__)
|
10 |
+
|
11 |
+
# Import the necessary classes
|
12 |
+
try:
|
13 |
+
# For LangChain
|
14 |
+
from langchain.tools import BaseTool as LangChainBaseTool
|
15 |
+
from langchain.tools.base import ToolException
|
16 |
+
|
17 |
+
LANGCHAIN_AVAILABLE = True
|
18 |
+
except ImportError:
|
19 |
+
logger.warning("LangChain not available. Providing mock classes for documentation.")
|
20 |
+
LANGCHAIN_AVAILABLE = False
|
21 |
+
|
22 |
+
class LangChainBaseTool:
|
23 |
+
"""Mock LangChain BaseTool for documentation"""
|
24 |
+
|
25 |
+
name = "mock_tool"
|
26 |
+
description = "Mock tool for documentation"
|
27 |
+
|
28 |
+
def _run(self, *args, **kwargs):
|
29 |
+
raise NotImplementedError("This is a mock class")
|
30 |
+
|
31 |
+
class ToolException(Exception):
|
32 |
+
"""Mock ToolException for documentation"""
|
33 |
+
|
34 |
+
pass
|
35 |
+
|
36 |
+
|
37 |
+
try:
|
38 |
+
# For agency-swarm
|
39 |
+
from agency_swarm.tools.BaseTool import BaseTool as AgencySwarmBaseTool
|
40 |
+
|
41 |
+
AGENCY_SWARM_AVAILABLE = True
|
42 |
+
except ImportError:
|
43 |
+
logger.warning(
|
44 |
+
"Agency Swarm not available. Providing mock classes for documentation."
|
45 |
+
)
|
46 |
+
AGENCY_SWARM_AVAILABLE = False
|
47 |
+
|
48 |
+
class AgencySwarmBaseTool:
|
49 |
+
"""Mock Agency Swarm BaseTool for documentation"""
|
50 |
+
|
51 |
+
class ToolConfig:
|
52 |
+
strict = True
|
53 |
+
one_call_at_a_time = True
|
54 |
+
output_as_result = False
|
55 |
+
async_mode = None
|
56 |
+
|
57 |
+
def run(self):
|
58 |
+
raise NotImplementedError("This is a mock class")
|
59 |
+
|
60 |
+
|
61 |
+
def convert_langchain_tool(
|
62 |
+
lc_tool: Union[Type[LangChainBaseTool], Callable]
|
63 |
+
) -> Type[AgencySwarmBaseTool]:
|
64 |
+
"""
|
65 |
+
Converts a LangChain tool (class-based or function-based) to an agency-swarm compatible tool.
|
66 |
+
|
67 |
+
Args:
|
68 |
+
lc_tool: Either a LangChain BaseTool class or a function decorated with @tool
|
69 |
+
|
70 |
+
Returns:
|
71 |
+
A new class that inherits from agency_swarm.tools.BaseTool
|
72 |
+
|
73 |
+
Example:
|
74 |
+
```python
|
75 |
+
from langchain.tools import BaseTool
|
76 |
+
|
77 |
+
class MyLangChainTool(BaseTool):
|
78 |
+
name = "my_tool"
|
79 |
+
description = "A sample tool"
|
80 |
+
|
81 |
+
def _run(self, param1: str, param2: int) -> str:
|
82 |
+
return f"Processed {param1} and {param2}"
|
83 |
+
|
84 |
+
# Convert to agency-swarm tool
|
85 |
+
MyAgencySwarmTool = convert_langchain_tool(MyLangChainTool)
|
86 |
+
|
87 |
+
# Use with agency-swarm
|
88 |
+
agent = Agent(
|
89 |
+
name="my_agent",
|
90 |
+
tools=[MyAgencySwarmTool], # Pass the class, not an instance
|
91 |
+
)
|
92 |
+
```
|
93 |
+
"""
|
94 |
+
if not LANGCHAIN_AVAILABLE or not AGENCY_SWARM_AVAILABLE:
|
95 |
+
raise ImportError(
|
96 |
+
"Both LangChain and Agency Swarm must be available to convert tools."
|
97 |
+
)
|
98 |
+
|
99 |
+
# Check if input is a function (likely decorated with @tool)
|
100 |
+
if callable(lc_tool) and not inspect.isclass(lc_tool):
|
101 |
+
return _convert_function_tool(lc_tool)
|
102 |
+
|
103 |
+
# If it's a class, ensure it's a subclass of LangChain's BaseTool
|
104 |
+
if not issubclass(lc_tool, LangChainBaseTool):
|
105 |
+
raise TypeError(f"Expected a LangChain BaseTool subclass, got {lc_tool}")
|
106 |
+
|
107 |
+
# Extract metadata from the LangChain tool
|
108 |
+
tool_name = getattr(lc_tool, "name", lc_tool.__name__)
|
109 |
+
if tool_name is None:
|
110 |
+
tool_name = lc_tool.__name__
|
111 |
+
|
112 |
+
tool_description = getattr(lc_tool, "description", lc_tool.__doc__ or "")
|
113 |
+
|
114 |
+
# Get the schema from the LangChain tool, if any
|
115 |
+
schema_cls = getattr(lc_tool, "args_schema", None)
|
116 |
+
|
117 |
+
# Create a new class that inherits from agency_swarm's BaseTool
|
118 |
+
class ConvertedTool(AgencySwarmBaseTool):
|
119 |
+
"""
|
120 |
+
Agency Swarm tool converted from LangChain tool.
|
121 |
+
"""
|
122 |
+
|
123 |
+
# Set up the ToolConfig inner class
|
124 |
+
class ToolConfig:
|
125 |
+
strict: bool = True
|
126 |
+
one_call_at_a_time: bool = True
|
127 |
+
output_as_result: bool = False
|
128 |
+
async_mode: None = None
|
129 |
+
|
130 |
+
def run(self) -> Dict:
|
131 |
+
"""
|
132 |
+
Execute the tool with runtime validation.
|
133 |
+
"""
|
134 |
+
# Validate required fields based on the original schema
|
135 |
+
validation_errors = self._validate_required_fields()
|
136 |
+
if validation_errors:
|
137 |
+
return {"success": False, "error": validation_errors}
|
138 |
+
|
139 |
+
# Prepare args for the original tool's _run method
|
140 |
+
kwargs = {
|
141 |
+
field: getattr(self, field)
|
142 |
+
for field in self._get_field_names()
|
143 |
+
if hasattr(self, field) and getattr(self, field) is not None
|
144 |
+
}
|
145 |
+
|
146 |
+
try:
|
147 |
+
# Call the original LangChain tool's _run method
|
148 |
+
instance = lc_tool()
|
149 |
+
result = instance._run(**kwargs)
|
150 |
+
|
151 |
+
# If result is already a dict, return it
|
152 |
+
if isinstance(result, dict):
|
153 |
+
return result
|
154 |
+
|
155 |
+
# Otherwise, wrap it in a success response
|
156 |
+
return {"success": True, "result": result}
|
157 |
+
except ToolException as e:
|
158 |
+
# Convert LangChain's exceptions to structured errors
|
159 |
+
return {"success": False, "error": str(e)}
|
160 |
+
except Exception as e:
|
161 |
+
# Handle unexpected errors
|
162 |
+
logger.exception(f"Tool execution failed: {str(e)}")
|
163 |
+
return {"success": False, "error": f"Tool execution failed: {str(e)}"}
|
164 |
+
|
165 |
+
def _validate_required_fields(self) -> Optional[str]:
|
166 |
+
"""
|
167 |
+
Validate required fields at runtime.
|
168 |
+
"""
|
169 |
+
if not schema_cls:
|
170 |
+
return None
|
171 |
+
|
172 |
+
# Try different approaches to identify required fields based on Pydantic version
|
173 |
+
missing_fields = []
|
174 |
+
try:
|
175 |
+
# Attempt to get field info based on Pydantic v1 style
|
176 |
+
if hasattr(schema_cls, "__fields__"):
|
177 |
+
for field_name, field_info in schema_cls.__fields__.items():
|
178 |
+
if (
|
179 |
+
field_info.required
|
180 |
+
and getattr(self, field_name, None) is None
|
181 |
+
):
|
182 |
+
missing_fields.append(field_name)
|
183 |
+
# Try Pydantic v2 style
|
184 |
+
elif hasattr(schema_cls, "model_fields"):
|
185 |
+
for field_name, field_info in schema_cls.model_fields.items():
|
186 |
+
if (
|
187 |
+
field_info.is_required()
|
188 |
+
and getattr(self, field_name, None) is None
|
189 |
+
):
|
190 |
+
missing_fields.append(field_name)
|
191 |
+
# Fallback to checking for ... (Ellipsis) in class variables
|
192 |
+
else:
|
193 |
+
for field_name in schema_cls.__annotations__:
|
194 |
+
class_var = getattr(schema_cls, field_name, None)
|
195 |
+
if class_var is ... and getattr(self, field_name, None) is None:
|
196 |
+
missing_fields.append(field_name)
|
197 |
+
except Exception as e:
|
198 |
+
logger.warning(f"Error during field validation: {e}")
|
199 |
+
# If all else fails, just check for None values
|
200 |
+
for field_name in schema_cls.__annotations__:
|
201 |
+
if getattr(self, field_name, None) is None:
|
202 |
+
missing_fields.append(field_name)
|
203 |
+
|
204 |
+
if missing_fields:
|
205 |
+
return f"Missing required fields: {', '.join(missing_fields)}"
|
206 |
+
|
207 |
+
return None
|
208 |
+
|
209 |
+
def _get_field_names(self) -> List[str]:
|
210 |
+
"""
|
211 |
+
Get all field names from the schema.
|
212 |
+
"""
|
213 |
+
if schema_cls:
|
214 |
+
return list(schema_cls.__annotations__.keys())
|
215 |
+
return []
|
216 |
+
|
217 |
+
# Set the tool name and description
|
218 |
+
# Use safe string operations for the class name
|
219 |
+
safe_name = "".join(
|
220 |
+
c for c in tool_name.replace("-", "_") if c.isalnum() or c == "_"
|
221 |
+
)
|
222 |
+
if safe_name:
|
223 |
+
class_name = safe_name[0].upper() + safe_name[1:] + "Tool"
|
224 |
+
else:
|
225 |
+
class_name = "ConvertedTool"
|
226 |
+
|
227 |
+
ConvertedTool.__name__ = class_name
|
228 |
+
ConvertedTool.__doc__ = tool_description
|
229 |
+
|
230 |
+
# Add fields to the converted tool
|
231 |
+
if schema_cls:
|
232 |
+
_add_fields_from_schema(ConvertedTool, schema_cls)
|
233 |
+
else:
|
234 |
+
# If no schema_cls, try to infer from _run signature
|
235 |
+
_add_fields_from_run_method(ConvertedTool, lc_tool)
|
236 |
+
|
237 |
+
return ConvertedTool
|
238 |
+
|
239 |
+
|
240 |
+
def _add_fields_from_schema(
|
241 |
+
target_cls: Type[AgencySwarmBaseTool], schema_cls: Type[BaseModel]
|
242 |
+
) -> None:
|
243 |
+
"""
|
244 |
+
Add fields from a Pydantic schema to the target class.
|
245 |
+
|
246 |
+
Args:
|
247 |
+
target_cls: The class to add fields to
|
248 |
+
schema_cls: The Pydantic schema class to extract fields from
|
249 |
+
"""
|
250 |
+
target_cls.__annotations__ = {}
|
251 |
+
|
252 |
+
# Extract field descriptions based on Pydantic version
|
253 |
+
field_descriptions = {}
|
254 |
+
try:
|
255 |
+
if hasattr(schema_cls, "__fields__"):
|
256 |
+
# Pydantic v1
|
257 |
+
for name, field in schema_cls.__fields__.items():
|
258 |
+
field_descriptions[name] = field.field_info.description
|
259 |
+
elif hasattr(schema_cls, "model_fields"):
|
260 |
+
# Pydantic v2
|
261 |
+
for name, field in schema_cls.model_fields.items():
|
262 |
+
field_descriptions[name] = field.description
|
263 |
+
except Exception as e:
|
264 |
+
logger.warning(f"Error extracting field descriptions: {e}")
|
265 |
+
|
266 |
+
# Add each field to the target class
|
267 |
+
for field_name, field_type in schema_cls.__annotations__.items():
|
268 |
+
description = field_descriptions.get(field_name, f"Parameter: {field_name}")
|
269 |
+
|
270 |
+
# Make the type Optional if it's not already
|
271 |
+
if not hasattr(field_type, "__origin__") or field_type.__origin__ is not Union:
|
272 |
+
field_type = Optional[field_type]
|
273 |
+
|
274 |
+
# Add the field to the target class with None as default
|
275 |
+
setattr(target_cls, field_name, Field(None, description=description))
|
276 |
+
target_cls.__annotations__[field_name] = field_type
|
277 |
+
|
278 |
+
|
279 |
+
def _add_fields_from_run_method(
|
280 |
+
target_cls: Type[AgencySwarmBaseTool], tool_cls: Type[LangChainBaseTool]
|
281 |
+
) -> None:
|
282 |
+
"""
|
283 |
+
Add fields inferred from the _run method signature.
|
284 |
+
|
285 |
+
Args:
|
286 |
+
target_cls: The class to add fields to
|
287 |
+
tool_cls: The LangChain tool class to extract fields from
|
288 |
+
"""
|
289 |
+
target_cls.__annotations__ = {}
|
290 |
+
|
291 |
+
# Get the signature of the _run method
|
292 |
+
try:
|
293 |
+
# First try to get the _run method from the class
|
294 |
+
if hasattr(tool_cls, "_run"):
|
295 |
+
run_method = tool_cls._run
|
296 |
+
# If that fails, try to get it from an instance
|
297 |
+
else:
|
298 |
+
instance = tool_cls()
|
299 |
+
run_method = instance._run
|
300 |
+
|
301 |
+
signature = inspect.signature(run_method)
|
302 |
+
|
303 |
+
# Skip 'self' parameter if present
|
304 |
+
parameters = list(signature.parameters.items())
|
305 |
+
if parameters and parameters[0][0] == "self":
|
306 |
+
parameters = parameters[1:]
|
307 |
+
|
308 |
+
for param_name, param in parameters:
|
309 |
+
# Skip *args and **kwargs
|
310 |
+
if param.kind in (
|
311 |
+
inspect.Parameter.VAR_POSITIONAL,
|
312 |
+
inspect.Parameter.VAR_KEYWORD,
|
313 |
+
):
|
314 |
+
continue
|
315 |
+
|
316 |
+
# Get the type annotation if available
|
317 |
+
param_type = (
|
318 |
+
param.annotation if param.annotation != inspect.Parameter.empty else Any
|
319 |
+
)
|
320 |
+
|
321 |
+
# Make the type Optional
|
322 |
+
optional_type = Optional[param_type]
|
323 |
+
|
324 |
+
# Add the field to the target class
|
325 |
+
setattr(
|
326 |
+
target_cls,
|
327 |
+
param_name,
|
328 |
+
Field(None, description=f"Parameter: {param_name}"),
|
329 |
+
)
|
330 |
+
target_cls.__annotations__[param_name] = optional_type
|
331 |
+
|
332 |
+
except Exception as e:
|
333 |
+
logger.warning(f"Error extracting fields from _run method: {e}")
|
334 |
+
|
335 |
+
|
336 |
+
def _convert_function_tool(tool_func: Callable) -> Type[AgencySwarmBaseTool]:
|
337 |
+
"""
|
338 |
+
Convert a function-based tool (decorated with @tool) to an agency-swarm compatible tool.
|
339 |
+
|
340 |
+
Args:
|
341 |
+
tool_func: A function decorated with @tool
|
342 |
+
|
343 |
+
Returns:
|
344 |
+
A new class that inherits from agency_swarm.tools.BaseTool
|
345 |
+
"""
|
346 |
+
# Extract metadata from the function
|
347 |
+
# Handle case where tool_func might be a StructuredTool instead of a direct function
|
348 |
+
if hasattr(tool_func, "name"):
|
349 |
+
tool_name = tool_func.name
|
350 |
+
else:
|
351 |
+
tool_name = getattr(tool_func, "__name__", "function_tool")
|
352 |
+
|
353 |
+
tool_description = getattr(
|
354 |
+
tool_func, "description", getattr(tool_func, "__doc__", "") or ""
|
355 |
+
)
|
356 |
+
|
357 |
+
# Get the signature of the underlying function
|
358 |
+
if hasattr(tool_func, "_run"):
|
359 |
+
func_to_inspect = tool_func._run
|
360 |
+
elif hasattr(tool_func, "func"):
|
361 |
+
func_to_inspect = tool_func.func
|
362 |
+
else:
|
363 |
+
func_to_inspect = tool_func
|
364 |
+
|
365 |
+
signature = inspect.signature(func_to_inspect)
|
366 |
+
|
367 |
+
# Create a new class that inherits from agency_swarm's BaseTool
|
368 |
+
class ConvertedFunctionTool(AgencySwarmBaseTool):
|
369 |
+
"""
|
370 |
+
Agency Swarm tool converted from a LangChain function tool.
|
371 |
+
"""
|
372 |
+
|
373 |
+
# Set up the ToolConfig inner class
|
374 |
+
class ToolConfig:
|
375 |
+
strict: bool = True
|
376 |
+
one_call_at_a_time: bool = True
|
377 |
+
output_as_result: bool = False
|
378 |
+
async_mode: None = None
|
379 |
+
|
380 |
+
def run(self) -> Dict:
|
381 |
+
"""
|
382 |
+
Execute the tool with runtime validation.
|
383 |
+
"""
|
384 |
+
# Prepare args for the original function
|
385 |
+
kwargs = {
|
386 |
+
param_name: getattr(self, param_name, None)
|
387 |
+
for param_name in signature.parameters
|
388 |
+
if hasattr(self, param_name) and getattr(self, param_name) is not None
|
389 |
+
}
|
390 |
+
|
391 |
+
# Validate required parameters
|
392 |
+
missing_params = []
|
393 |
+
for param_name, param in signature.parameters.items():
|
394 |
+
if (
|
395 |
+
param.default == inspect.Parameter.empty # No default value
|
396 |
+
and kwargs.get(param_name) is None # Not provided
|
397 |
+
):
|
398 |
+
missing_params.append(param_name)
|
399 |
+
|
400 |
+
if missing_params:
|
401 |
+
return {
|
402 |
+
"success": False,
|
403 |
+
"error": f"Missing required parameters: {', '.join(missing_params)}",
|
404 |
+
}
|
405 |
+
|
406 |
+
try:
|
407 |
+
# Call the original function or tool
|
408 |
+
if hasattr(tool_func, "_run"):
|
409 |
+
result = tool_func._run(**kwargs)
|
410 |
+
elif hasattr(tool_func, "__call__"):
|
411 |
+
result = tool_func(**kwargs)
|
412 |
+
else:
|
413 |
+
result = func_to_inspect(**kwargs)
|
414 |
+
|
415 |
+
# If result is already a dict, return it
|
416 |
+
if isinstance(result, dict):
|
417 |
+
return result
|
418 |
+
|
419 |
+
# Otherwise, wrap it in a success response
|
420 |
+
return {"success": True, "result": result}
|
421 |
+
except Exception as e:
|
422 |
+
# Handle errors
|
423 |
+
logger.exception(f"Tool execution failed: {str(e)}")
|
424 |
+
return {"success": False, "error": f"Tool execution failed: {str(e)}"}
|
425 |
+
|
426 |
+
# Set the tool name and description
|
427 |
+
# Use safe string operations for the class name
|
428 |
+
safe_name = "".join(
|
429 |
+
c for c in tool_name.replace("-", "_") if c.isalnum() or c == "_"
|
430 |
+
)
|
431 |
+
if safe_name:
|
432 |
+
class_name = safe_name[0].upper() + safe_name[1:] + "Tool"
|
433 |
+
else:
|
434 |
+
class_name = "ConvertedFunctionTool"
|
435 |
+
|
436 |
+
ConvertedFunctionTool.__name__ = class_name
|
437 |
+
ConvertedFunctionTool.__doc__ = tool_description
|
438 |
+
|
439 |
+
# Set up annotations dictionary
|
440 |
+
ConvertedFunctionTool.__annotations__ = {}
|
441 |
+
|
442 |
+
# Add fields based on function parameters
|
443 |
+
for param_name, param in signature.parameters.items():
|
444 |
+
# Get the type annotation if available
|
445 |
+
param_type = (
|
446 |
+
param.annotation if param.annotation != inspect.Parameter.empty else Any
|
447 |
+
)
|
448 |
+
|
449 |
+
# Make it Optional
|
450 |
+
optional_type = Optional[param_type]
|
451 |
+
|
452 |
+
# Get description from docstring if available
|
453 |
+
param_description = f"Parameter: {param_name}"
|
454 |
+
|
455 |
+
# Add the field to the class
|
456 |
+
setattr(
|
457 |
+
ConvertedFunctionTool,
|
458 |
+
param_name,
|
459 |
+
Field(None, description=param_description),
|
460 |
+
)
|
461 |
+
ConvertedFunctionTool.__annotations__[param_name] = optional_type
|
462 |
+
|
463 |
+
return ConvertedFunctionTool
|
464 |
+
|
465 |
+
|
466 |
+
# Batch conversion helper
|
467 |
+
def convert_langchain_tools(
|
468 |
+
lc_tools: List[Union[Type[LangChainBaseTool], Callable]]
|
469 |
+
) -> List[Type[AgencySwarmBaseTool]]:
|
470 |
+
"""
|
471 |
+
Convert multiple LangChain tools to agency-swarm compatible tools.
|
472 |
+
|
473 |
+
Args:
|
474 |
+
lc_tools: A list of LangChain BaseTool classes or functions decorated with @tool
|
475 |
+
|
476 |
+
Returns:
|
477 |
+
A list of converted agency-swarm tool classes
|
478 |
+
"""
|
479 |
+
converted_tools = []
|
480 |
+
for tool in lc_tools:
|
481 |
+
try:
|
482 |
+
converted_tool = convert_langchain_tool(tool)
|
483 |
+
converted_tools.append(converted_tool)
|
484 |
+
except Exception as e:
|
485 |
+
logger.error(
|
486 |
+
f"Failed to convert tool {getattr(tool, 'name', getattr(tool, '__name__', 'unknown'))}: {e}"
|
487 |
+
)
|
488 |
+
|
489 |
+
return converted_tools
|
poetry.lock
CHANGED
@@ -23,6 +23,18 @@ python-dotenv = "1.0.1"
|
|
23 |
rich = "13.7.1"
|
24 |
termcolor = "2.4.0"
|
25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
[[package]]
|
27 |
name = "aiohappyeyeballs"
|
28 |
version = "2.4.6"
|
@@ -335,6 +347,34 @@ d = ["aiohttp (>=3.10)"]
|
|
335 |
jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
|
336 |
uvloop = ["uvloop (>=0.15.2)"]
|
337 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
338 |
[[package]]
|
339 |
name = "certifi"
|
340 |
version = "2025.1.31"
|
@@ -428,6 +468,18 @@ markers = {dev = "implementation_name == \"pypy\""}
|
|
428 |
[package.dependencies]
|
429 |
pycparser = "*"
|
430 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
431 |
[[package]]
|
432 |
name = "charset-normalizer"
|
433 |
version = "3.4.1"
|
@@ -545,6 +597,22 @@ files = [
|
|
545 |
[package.dependencies]
|
546 |
colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
547 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
548 |
[[package]]
|
549 |
name = "colorama"
|
550 |
version = "0.4.6"
|
@@ -556,7 +624,41 @@ files = [
|
|
556 |
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
|
557 |
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
558 |
]
|
559 |
-
markers = {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
560 |
|
561 |
[[package]]
|
562 |
name = "comm"
|
@@ -632,6 +734,82 @@ langchain-openai = ">=0.0.2.post1"
|
|
632 |
langchainhub = ">=0.1.15"
|
633 |
pydantic = ">=2.6.4"
|
634 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
635 |
[[package]]
|
636 |
name = "cryptography"
|
637 |
version = "44.0.1"
|
@@ -782,6 +960,18 @@ ordered-set = ">=4.0.2,<4.2.0"
|
|
782 |
cli = ["click (==8.1.3)", "pyyaml (==6.0.1)"]
|
783 |
optimize = ["orjson"]
|
784 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
785 |
[[package]]
|
786 |
name = "distro"
|
787 |
version = "1.9.0"
|
@@ -881,6 +1071,35 @@ typing-extensions = ">=4.8.0"
|
|
881 |
all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
|
882 |
standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"]
|
883 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
884 |
[[package]]
|
885 |
name = "frozenlist"
|
886 |
version = "1.5.0"
|
@@ -983,6 +1202,46 @@ files = [
|
|
983 |
{file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"},
|
984 |
]
|
985 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
986 |
[[package]]
|
987 |
name = "genson"
|
988 |
version = "1.3.0"
|
@@ -995,6 +1254,69 @@ files = [
|
|
995 |
{file = "genson-1.3.0.tar.gz", hash = "sha256:e02db9ac2e3fd29e65b5286f7135762e2cd8a986537c075b06fc5f1517308e37"},
|
996 |
]
|
997 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
998 |
[[package]]
|
999 |
name = "greenlet"
|
1000 |
version = "3.1.1"
|
@@ -1142,6 +1464,56 @@ http2 = ["h2 (>=3,<5)"]
|
|
1142 |
socks = ["socksio (==1.*)"]
|
1143 |
zstd = ["zstandard (>=0.18.0)"]
|
1144 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1145 |
[[package]]
|
1146 |
name = "idna"
|
1147 |
version = "3.10"
|
@@ -1683,73 +2055,72 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
|
|
1683 |
|
1684 |
[[package]]
|
1685 |
name = "markupsafe"
|
1686 |
-
version = "
|
1687 |
description = "Safely add untrusted strings to HTML/XML markup."
|
1688 |
optional = false
|
1689 |
-
python-versions = ">=3.
|
1690 |
groups = ["main"]
|
1691 |
files = [
|
1692 |
-
{file = "MarkupSafe-
|
1693 |
-
{file = "MarkupSafe-
|
1694 |
-
{file = "MarkupSafe-
|
1695 |
-
{file = "MarkupSafe-
|
1696 |
-
{file = "MarkupSafe-
|
1697 |
-
{file = "MarkupSafe-
|
1698 |
-
{file = "MarkupSafe-
|
1699 |
-
{file = "MarkupSafe-
|
1700 |
-
{file = "MarkupSafe-
|
1701 |
-
{file = "MarkupSafe-
|
1702 |
-
{file = "MarkupSafe-
|
1703 |
-
{file = "MarkupSafe-
|
1704 |
-
{file = "MarkupSafe-
|
1705 |
-
{file = "MarkupSafe-
|
1706 |
-
{file = "MarkupSafe-
|
1707 |
-
{file = "MarkupSafe-
|
1708 |
-
{file = "MarkupSafe-
|
1709 |
-
{file = "MarkupSafe-
|
1710 |
-
{file = "MarkupSafe-
|
1711 |
-
{file = "MarkupSafe-
|
1712 |
-
{file = "MarkupSafe-
|
1713 |
-
{file = "MarkupSafe-
|
1714 |
-
{file = "MarkupSafe-
|
1715 |
-
{file = "MarkupSafe-
|
1716 |
-
{file = "MarkupSafe-
|
1717 |
-
{file = "MarkupSafe-
|
1718 |
-
{file = "MarkupSafe-
|
1719 |
-
{file = "MarkupSafe-
|
1720 |
-
{file = "MarkupSafe-
|
1721 |
-
{file = "MarkupSafe-
|
1722 |
-
{file = "MarkupSafe-
|
1723 |
-
{file = "MarkupSafe-
|
1724 |
-
{file = "MarkupSafe-
|
1725 |
-
{file = "MarkupSafe-
|
1726 |
-
{file = "MarkupSafe-
|
1727 |
-
{file = "MarkupSafe-
|
1728 |
-
{file = "MarkupSafe-
|
1729 |
-
{file = "MarkupSafe-
|
1730 |
-
{file = "MarkupSafe-
|
1731 |
-
{file = "MarkupSafe-
|
1732 |
-
{file = "MarkupSafe-
|
1733 |
-
{file = "MarkupSafe-
|
1734 |
-
{file = "MarkupSafe-
|
1735 |
-
{file = "MarkupSafe-
|
1736 |
-
{file = "MarkupSafe-
|
1737 |
-
{file = "MarkupSafe-
|
1738 |
-
{file = "MarkupSafe-
|
1739 |
-
{file = "MarkupSafe-
|
1740 |
-
{file = "MarkupSafe-
|
1741 |
-
{file = "MarkupSafe-
|
1742 |
-
{file = "MarkupSafe-
|
1743 |
-
{file = "MarkupSafe-
|
1744 |
-
{file = "MarkupSafe-
|
1745 |
-
{file = "MarkupSafe-
|
1746 |
-
{file = "MarkupSafe-
|
1747 |
-
{file = "MarkupSafe-
|
1748 |
-
{file = "MarkupSafe-
|
1749 |
-
{file = "MarkupSafe-
|
1750 |
-
{file = "MarkupSafe-
|
1751 |
-
{file = "MarkupSafe-
|
1752 |
-
{file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"},
|
1753 |
]
|
1754 |
|
1755 |
[[package]]
|
@@ -1999,7 +2370,6 @@ description = "Fast, correct Python JSON library supporting dataclasses, datetim
|
|
1999 |
optional = false
|
2000 |
python-versions = ">=3.8"
|
2001 |
groups = ["main"]
|
2002 |
-
markers = "platform_python_implementation != \"PyPy\""
|
2003 |
files = [
|
2004 |
{file = "orjson-3.10.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:552c883d03ad185f720d0c09583ebde257e41b9521b74ff40e08b7dec4559c04"},
|
2005 |
{file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616e3e8d438d02e4854f70bfdc03a6bcdb697358dbaa6bcd19cbe24d24ece1f8"},
|
@@ -2094,6 +2464,89 @@ files = [
|
|
2094 |
{file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"},
|
2095 |
]
|
2096 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2097 |
[[package]]
|
2098 |
name = "paramiko"
|
2099 |
version = "3.5.1"
|
@@ -2160,6 +2613,95 @@ files = [
|
|
2160 |
[package.dependencies]
|
2161 |
ptyprocess = ">=0.5"
|
2162 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2163 |
[[package]]
|
2164 |
name = "platformdirs"
|
2165 |
version = "4.3.6"
|
@@ -2177,6 +2719,22 @@ docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-a
|
|
2177 |
test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"]
|
2178 |
type = ["mypy (>=1.11.2)"]
|
2179 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2180 |
[[package]]
|
2181 |
name = "prompt-toolkit"
|
2182 |
version = "3.0.50"
|
@@ -2488,6 +3046,18 @@ files = [
|
|
2488 |
[package.dependencies]
|
2489 |
typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
|
2490 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2491 |
[[package]]
|
2492 |
name = "pygments"
|
2493 |
version = "2.19.1"
|
@@ -2541,6 +3111,41 @@ files = [
|
|
2541 |
{file = "pyperclip-1.9.0.tar.gz", hash = "sha256:b7de0142ddc81bfc5c7507eea19da920b92252b548b96186caf94a5e2527d310"},
|
2542 |
]
|
2543 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2544 |
[[package]]
|
2545 |
name = "pysher"
|
2546 |
version = "1.0.8"
|
@@ -2562,7 +3167,7 @@ version = "2.9.0.post0"
|
|
2562 |
description = "Extensions to the standard Python datetime module"
|
2563 |
optional = false
|
2564 |
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
|
2565 |
-
groups = ["dev"]
|
2566 |
files = [
|
2567 |
{file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"},
|
2568 |
{file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"},
|
@@ -2586,6 +3191,30 @@ files = [
|
|
2586 |
[package.extras]
|
2587 |
cli = ["click (>=5.0)"]
|
2588 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2589 |
[[package]]
|
2590 |
name = "pywin32"
|
2591 |
version = "308"
|
@@ -2977,6 +3606,29 @@ pygments = ">=2.13.0,<3.0.0"
|
|
2977 |
[package.extras]
|
2978 |
jupyter = ["ipywidgets (>=7.5.1,<9)"]
|
2979 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2980 |
[[package]]
|
2981 |
name = "rpds-py"
|
2982 |
version = "0.23.1"
|
@@ -3090,6 +3742,69 @@ files = [
|
|
3090 |
{file = "rpds_py-0.23.1.tar.gz", hash = "sha256:7f3240dcfa14d198dba24b8b9cb3b108c06b68d45b7babd9eefc1038fdf7e707"},
|
3091 |
]
|
3092 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3093 |
[[package]]
|
3094 |
name = "semver"
|
3095 |
version = "3.0.4"
|
@@ -3159,13 +3874,26 @@ statsig = ["statsig (>=0.55.3)"]
|
|
3159 |
tornado = ["tornado (>=6)"]
|
3160 |
unleash = ["UnleashClient (>=6.0.1)"]
|
3161 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3162 |
[[package]]
|
3163 |
name = "six"
|
3164 |
version = "1.17.0"
|
3165 |
description = "Python 2 and 3 compatibility utilities"
|
3166 |
optional = false
|
3167 |
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
|
3168 |
-
groups = ["dev"]
|
3169 |
files = [
|
3170 |
{file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"},
|
3171 |
{file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"},
|
@@ -3396,6 +4124,18 @@ requests = ">=2.26.0"
|
|
3396 |
[package.extras]
|
3397 |
blobfile = ["blobfile (>=2)"]
|
3398 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3399 |
[[package]]
|
3400 |
name = "tornado"
|
3401 |
version = "6.4.2"
|
@@ -3417,6 +4157,32 @@ files = [
|
|
3417 |
{file = "tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b"},
|
3418 |
]
|
3419 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3420 |
[[package]]
|
3421 |
name = "tqdm"
|
3422 |
version = "4.67.1"
|
@@ -3455,6 +4221,25 @@ files = [
|
|
3455 |
docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"]
|
3456 |
test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"]
|
3457 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3458 |
[[package]]
|
3459 |
name = "types-requests"
|
3460 |
version = "2.32.0.20241016"
|
@@ -3482,6 +4267,18 @@ files = [
|
|
3482 |
{file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
|
3483 |
]
|
3484 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3485 |
[[package]]
|
3486 |
name = "urllib3"
|
3487 |
version = "2.3.0"
|
@@ -3519,6 +4316,27 @@ h11 = ">=0.8"
|
|
3519 |
[package.extras]
|
3520 |
standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"]
|
3521 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3522 |
[[package]]
|
3523 |
name = "wcwidth"
|
3524 |
version = "0.2.13"
|
@@ -3548,6 +4366,85 @@ docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"]
|
|
3548 |
optional = ["python-socks", "wsaccel"]
|
3549 |
test = ["websockets"]
|
3550 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3551 |
[[package]]
|
3552 |
name = "yarl"
|
3553 |
version = "1.18.3"
|
@@ -3668,4 +4565,4 @@ type = ["pytest-mypy"]
|
|
3668 |
[metadata]
|
3669 |
lock-version = "2.1"
|
3670 |
python-versions = "3.11.*"
|
3671 |
-
content-hash = "
|
|
|
23 |
rich = "13.7.1"
|
24 |
termcolor = "2.4.0"
|
25 |
|
26 |
+
[[package]]
|
27 |
+
name = "aiofiles"
|
28 |
+
version = "23.2.1"
|
29 |
+
description = "File support for asyncio."
|
30 |
+
optional = false
|
31 |
+
python-versions = ">=3.7"
|
32 |
+
groups = ["main"]
|
33 |
+
files = [
|
34 |
+
{file = "aiofiles-23.2.1-py3-none-any.whl", hash = "sha256:19297512c647d4b27a2cf7c34caa7e405c0d60b5560618a29a9fe027b18b0107"},
|
35 |
+
{file = "aiofiles-23.2.1.tar.gz", hash = "sha256:84ec2218d8419404abcb9f0c02df3f34c6e0a68ed41072acfb1cef5cbc29051a"},
|
36 |
+
]
|
37 |
+
|
38 |
[[package]]
|
39 |
name = "aiohappyeyeballs"
|
40 |
version = "2.4.6"
|
|
|
347 |
jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
|
348 |
uvloop = ["uvloop (>=0.15.2)"]
|
349 |
|
350 |
+
[[package]]
|
351 |
+
name = "blessings"
|
352 |
+
version = "1.7"
|
353 |
+
description = "A thin, practical wrapper around terminal coloring, styling, and positioning"
|
354 |
+
optional = false
|
355 |
+
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
356 |
+
groups = ["main"]
|
357 |
+
files = [
|
358 |
+
{file = "blessings-1.7-py2-none-any.whl", hash = "sha256:caad5211e7ba5afe04367cdd4cfc68fa886e2e08f6f35e76b7387d2109ccea6e"},
|
359 |
+
{file = "blessings-1.7-py3-none-any.whl", hash = "sha256:b1fdd7e7a675295630f9ae71527a8ebc10bfefa236b3d6aa4932ee4462c17ba3"},
|
360 |
+
{file = "blessings-1.7.tar.gz", hash = "sha256:98e5854d805f50a5b58ac2333411b0482516a8210f23f43308baeb58d77c157d"},
|
361 |
+
]
|
362 |
+
|
363 |
+
[package.dependencies]
|
364 |
+
six = "*"
|
365 |
+
|
366 |
+
[[package]]
|
367 |
+
name = "cachetools"
|
368 |
+
version = "5.5.2"
|
369 |
+
description = "Extensible memoizing collections and decorators"
|
370 |
+
optional = false
|
371 |
+
python-versions = ">=3.7"
|
372 |
+
groups = ["main"]
|
373 |
+
files = [
|
374 |
+
{file = "cachetools-5.5.2-py3-none-any.whl", hash = "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"},
|
375 |
+
{file = "cachetools-5.5.2.tar.gz", hash = "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4"},
|
376 |
+
]
|
377 |
+
|
378 |
[[package]]
|
379 |
name = "certifi"
|
380 |
version = "2025.1.31"
|
|
|
468 |
[package.dependencies]
|
469 |
pycparser = "*"
|
470 |
|
471 |
+
[[package]]
|
472 |
+
name = "chardet"
|
473 |
+
version = "5.2.0"
|
474 |
+
description = "Universal encoding detector for Python 3"
|
475 |
+
optional = false
|
476 |
+
python-versions = ">=3.7"
|
477 |
+
groups = ["main"]
|
478 |
+
files = [
|
479 |
+
{file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"},
|
480 |
+
{file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"},
|
481 |
+
]
|
482 |
+
|
483 |
[[package]]
|
484 |
name = "charset-normalizer"
|
485 |
version = "3.4.1"
|
|
|
597 |
[package.dependencies]
|
598 |
colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
599 |
|
600 |
+
[[package]]
|
601 |
+
name = "codecov"
|
602 |
+
version = "2.1.13"
|
603 |
+
description = "Hosted coverage reports for GitHub, Bitbucket and Gitlab"
|
604 |
+
optional = false
|
605 |
+
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
606 |
+
groups = ["main"]
|
607 |
+
files = [
|
608 |
+
{file = "codecov-2.1.13-py2.py3-none-any.whl", hash = "sha256:c2ca5e51bba9ebb43644c43d0690148a55086f7f5e6fd36170858fa4206744d5"},
|
609 |
+
{file = "codecov-2.1.13.tar.gz", hash = "sha256:2362b685633caeaf45b9951a9b76ce359cd3581dd515b430c6c3f5dfb4d92a8c"},
|
610 |
+
]
|
611 |
+
|
612 |
+
[package.dependencies]
|
613 |
+
coverage = "*"
|
614 |
+
requests = ">=2.7.9"
|
615 |
+
|
616 |
[[package]]
|
617 |
name = "colorama"
|
618 |
version = "0.4.6"
|
|
|
624 |
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
|
625 |
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
626 |
]
|
627 |
+
markers = {dev = "sys_platform == \"win32\""}
|
628 |
+
|
629 |
+
[[package]]
|
630 |
+
name = "coloredlogs"
|
631 |
+
version = "15.0.1"
|
632 |
+
description = "Colored terminal output for Python's logging module"
|
633 |
+
optional = false
|
634 |
+
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
635 |
+
groups = ["main"]
|
636 |
+
files = [
|
637 |
+
{file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"},
|
638 |
+
{file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"},
|
639 |
+
]
|
640 |
+
|
641 |
+
[package.dependencies]
|
642 |
+
humanfriendly = ">=9.1"
|
643 |
+
|
644 |
+
[package.extras]
|
645 |
+
cron = ["capturer (>=2.4)"]
|
646 |
+
|
647 |
+
[[package]]
|
648 |
+
name = "colour-runner"
|
649 |
+
version = "0.1.1"
|
650 |
+
description = "Colour formatting for unittest tests"
|
651 |
+
optional = false
|
652 |
+
python-versions = "*"
|
653 |
+
groups = ["main"]
|
654 |
+
files = [
|
655 |
+
{file = "colour-runner-0.1.1.tar.gz", hash = "sha256:38b1ad31ffc34a517a8b8e39026b63f6cbe165852c30e0912dc18e0c2f9939f9"},
|
656 |
+
{file = "colour_runner-0.1.1-py2.py3-none-any.whl", hash = "sha256:18227068941e455aec3dfe6c64e683bb0e53f56527529748994dc559b928c50d"},
|
657 |
+
]
|
658 |
+
|
659 |
+
[package.dependencies]
|
660 |
+
blessings = "*"
|
661 |
+
pygments = "*"
|
662 |
|
663 |
[[package]]
|
664 |
name = "comm"
|
|
|
734 |
langchainhub = ">=0.1.15"
|
735 |
pydantic = ">=2.6.4"
|
736 |
|
737 |
+
[[package]]
|
738 |
+
name = "coverage"
|
739 |
+
version = "7.6.12"
|
740 |
+
description = "Code coverage measurement for Python"
|
741 |
+
optional = false
|
742 |
+
python-versions = ">=3.9"
|
743 |
+
groups = ["main"]
|
744 |
+
files = [
|
745 |
+
{file = "coverage-7.6.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:704c8c8c6ce6569286ae9622e534b4f5b9759b6f2cd643f1c1a61f666d534fe8"},
|
746 |
+
{file = "coverage-7.6.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ad7525bf0241e5502168ae9c643a2f6c219fa0a283001cee4cf23a9b7da75879"},
|
747 |
+
{file = "coverage-7.6.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06097c7abfa611c91edb9e6920264e5be1d6ceb374efb4986f38b09eed4cb2fe"},
|
748 |
+
{file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:220fa6c0ad7d9caef57f2c8771918324563ef0d8272c94974717c3909664e674"},
|
749 |
+
{file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3688b99604a24492bcfe1c106278c45586eb819bf66a654d8a9a1433022fb2eb"},
|
750 |
+
{file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d1a987778b9c71da2fc8948e6f2656da6ef68f59298b7e9786849634c35d2c3c"},
|
751 |
+
{file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cec6b9ce3bd2b7853d4a4563801292bfee40b030c05a3d29555fd2a8ee9bd68c"},
|
752 |
+
{file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ace9048de91293e467b44bce0f0381345078389814ff6e18dbac8fdbf896360e"},
|
753 |
+
{file = "coverage-7.6.12-cp310-cp310-win32.whl", hash = "sha256:ea31689f05043d520113e0552f039603c4dd71fa4c287b64cb3606140c66f425"},
|
754 |
+
{file = "coverage-7.6.12-cp310-cp310-win_amd64.whl", hash = "sha256:676f92141e3c5492d2a1596d52287d0d963df21bf5e55c8b03075a60e1ddf8aa"},
|
755 |
+
{file = "coverage-7.6.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e18aafdfb3e9ec0d261c942d35bd7c28d031c5855dadb491d2723ba54f4c3015"},
|
756 |
+
{file = "coverage-7.6.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66fe626fd7aa5982cdebad23e49e78ef7dbb3e3c2a5960a2b53632f1f703ea45"},
|
757 |
+
{file = "coverage-7.6.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ef01d70198431719af0b1f5dcbefc557d44a190e749004042927b2a3fed0702"},
|
758 |
+
{file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e92ae5a289a4bc4c0aae710c0948d3c7892e20fd3588224ebe242039573bf0"},
|
759 |
+
{file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e695df2c58ce526eeab11a2e915448d3eb76f75dffe338ea613c1201b33bab2f"},
|
760 |
+
{file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d74c08e9aaef995f8c4ef6d202dbd219c318450fe2a76da624f2ebb9c8ec5d9f"},
|
761 |
+
{file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e995b3b76ccedc27fe4f477b349b7d64597e53a43fc2961db9d3fbace085d69d"},
|
762 |
+
{file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b1f097878d74fe51e1ddd1be62d8e3682748875b461232cf4b52ddc6e6db0bba"},
|
763 |
+
{file = "coverage-7.6.12-cp311-cp311-win32.whl", hash = "sha256:1f7ffa05da41754e20512202c866d0ebfc440bba3b0ed15133070e20bf5aeb5f"},
|
764 |
+
{file = "coverage-7.6.12-cp311-cp311-win_amd64.whl", hash = "sha256:e216c5c45f89ef8971373fd1c5d8d1164b81f7f5f06bbf23c37e7908d19e8558"},
|
765 |
+
{file = "coverage-7.6.12-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b172f8e030e8ef247b3104902cc671e20df80163b60a203653150d2fc204d1ad"},
|
766 |
+
{file = "coverage-7.6.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:641dfe0ab73deb7069fb972d4d9725bf11c239c309ce694dd50b1473c0f641c3"},
|
767 |
+
{file = "coverage-7.6.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e549f54ac5f301e8e04c569dfdb907f7be71b06b88b5063ce9d6953d2d58574"},
|
768 |
+
{file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:959244a17184515f8c52dcb65fb662808767c0bd233c1d8a166e7cf74c9ea985"},
|
769 |
+
{file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bda1c5f347550c359f841d6614fb8ca42ae5cb0b74d39f8a1e204815ebe25750"},
|
770 |
+
{file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1ceeb90c3eda1f2d8c4c578c14167dbd8c674ecd7d38e45647543f19839dd6ea"},
|
771 |
+
{file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f16f44025c06792e0fb09571ae454bcc7a3ec75eeb3c36b025eccf501b1a4c3"},
|
772 |
+
{file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b076e625396e787448d27a411aefff867db2bffac8ed04e8f7056b07024eed5a"},
|
773 |
+
{file = "coverage-7.6.12-cp312-cp312-win32.whl", hash = "sha256:00b2086892cf06c7c2d74983c9595dc511acca00665480b3ddff749ec4fb2a95"},
|
774 |
+
{file = "coverage-7.6.12-cp312-cp312-win_amd64.whl", hash = "sha256:7ae6eabf519bc7871ce117fb18bf14e0e343eeb96c377667e3e5dd12095e0288"},
|
775 |
+
{file = "coverage-7.6.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:488c27b3db0ebee97a830e6b5a3ea930c4a6e2c07f27a5e67e1b3532e76b9ef1"},
|
776 |
+
{file = "coverage-7.6.12-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d1095bbee1851269f79fd8e0c9b5544e4c00c0c24965e66d8cba2eb5bb535fd"},
|
777 |
+
{file = "coverage-7.6.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0533adc29adf6a69c1baa88c3d7dbcaadcffa21afbed3ca7a225a440e4744bf9"},
|
778 |
+
{file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53c56358d470fa507a2b6e67a68fd002364d23c83741dbc4c2e0680d80ca227e"},
|
779 |
+
{file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64cbb1a3027c79ca6310bf101014614f6e6e18c226474606cf725238cf5bc2d4"},
|
780 |
+
{file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79cac3390bfa9836bb795be377395f28410811c9066bc4eefd8015258a7578c6"},
|
781 |
+
{file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9b148068e881faa26d878ff63e79650e208e95cf1c22bd3f77c3ca7b1d9821a3"},
|
782 |
+
{file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8bec2ac5da793c2685ce5319ca9bcf4eee683b8a1679051f8e6ec04c4f2fd7dc"},
|
783 |
+
{file = "coverage-7.6.12-cp313-cp313-win32.whl", hash = "sha256:200e10beb6ddd7c3ded322a4186313d5ca9e63e33d8fab4faa67ef46d3460af3"},
|
784 |
+
{file = "coverage-7.6.12-cp313-cp313-win_amd64.whl", hash = "sha256:2b996819ced9f7dbb812c701485d58f261bef08f9b85304d41219b1496b591ef"},
|
785 |
+
{file = "coverage-7.6.12-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:299cf973a7abff87a30609879c10df0b3bfc33d021e1adabc29138a48888841e"},
|
786 |
+
{file = "coverage-7.6.12-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4b467a8c56974bf06e543e69ad803c6865249d7a5ccf6980457ed2bc50312703"},
|
787 |
+
{file = "coverage-7.6.12-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2458f275944db8129f95d91aee32c828a408481ecde3b30af31d552c2ce284a0"},
|
788 |
+
{file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a9d8be07fb0832636a0f72b80d2a652fe665e80e720301fb22b191c3434d924"},
|
789 |
+
{file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14d47376a4f445e9743f6c83291e60adb1b127607a3618e3185bbc8091f0467b"},
|
790 |
+
{file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b95574d06aa9d2bd6e5cc35a5bbe35696342c96760b69dc4287dbd5abd4ad51d"},
|
791 |
+
{file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:ecea0c38c9079570163d663c0433a9af4094a60aafdca491c6a3d248c7432827"},
|
792 |
+
{file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2251fabcfee0a55a8578a9d29cecfee5f2de02f11530e7d5c5a05859aa85aee9"},
|
793 |
+
{file = "coverage-7.6.12-cp313-cp313t-win32.whl", hash = "sha256:eb5507795caabd9b2ae3f1adc95f67b1104971c22c624bb354232d65c4fc90b3"},
|
794 |
+
{file = "coverage-7.6.12-cp313-cp313t-win_amd64.whl", hash = "sha256:f60a297c3987c6c02ffb29effc70eadcbb412fe76947d394a1091a3615948e2f"},
|
795 |
+
{file = "coverage-7.6.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e7575ab65ca8399c8c4f9a7d61bbd2d204c8b8e447aab9d355682205c9dd948d"},
|
796 |
+
{file = "coverage-7.6.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8161d9fbc7e9fe2326de89cd0abb9f3599bccc1287db0aba285cb68d204ce929"},
|
797 |
+
{file = "coverage-7.6.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a1e465f398c713f1b212400b4e79a09829cd42aebd360362cd89c5bdc44eb87"},
|
798 |
+
{file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f25d8b92a4e31ff1bd873654ec367ae811b3a943583e05432ea29264782dc32c"},
|
799 |
+
{file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a936309a65cc5ca80fa9f20a442ff9e2d06927ec9a4f54bcba9c14c066323f2"},
|
800 |
+
{file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa6f302a3a0b5f240ee201297fff0bbfe2fa0d415a94aeb257d8b461032389bd"},
|
801 |
+
{file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f973643ef532d4f9be71dd88cf7588936685fdb576d93a79fe9f65bc337d9d73"},
|
802 |
+
{file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:78f5243bb6b1060aed6213d5107744c19f9571ec76d54c99cc15938eb69e0e86"},
|
803 |
+
{file = "coverage-7.6.12-cp39-cp39-win32.whl", hash = "sha256:69e62c5034291c845fc4df7f8155e8544178b6c774f97a99e2734b05eb5bed31"},
|
804 |
+
{file = "coverage-7.6.12-cp39-cp39-win_amd64.whl", hash = "sha256:b01a840ecc25dce235ae4c1b6a0daefb2a203dba0e6e980637ee9c2f6ee0df57"},
|
805 |
+
{file = "coverage-7.6.12-pp39.pp310-none-any.whl", hash = "sha256:7e39e845c4d764208e7b8f6a21c541ade741e2c41afabdfa1caa28687a3c98cf"},
|
806 |
+
{file = "coverage-7.6.12-py3-none-any.whl", hash = "sha256:eb8668cfbc279a536c633137deeb9435d2962caec279c3f8cf8b91fff6ff8953"},
|
807 |
+
{file = "coverage-7.6.12.tar.gz", hash = "sha256:48cfc4641d95d34766ad41d9573cc0f22a48aa88d22657a1fe01dca0dbae4de2"},
|
808 |
+
]
|
809 |
+
|
810 |
+
[package.extras]
|
811 |
+
toml = ["tomli ; python_full_version <= \"3.11.0a6\""]
|
812 |
+
|
813 |
[[package]]
|
814 |
name = "cryptography"
|
815 |
version = "44.0.1"
|
|
|
960 |
cli = ["click (==8.1.3)", "pyyaml (==6.0.1)"]
|
961 |
optimize = ["orjson"]
|
962 |
|
963 |
+
[[package]]
|
964 |
+
name = "distlib"
|
965 |
+
version = "0.3.9"
|
966 |
+
description = "Distribution utilities"
|
967 |
+
optional = false
|
968 |
+
python-versions = "*"
|
969 |
+
groups = ["main"]
|
970 |
+
files = [
|
971 |
+
{file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"},
|
972 |
+
{file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"},
|
973 |
+
]
|
974 |
+
|
975 |
[[package]]
|
976 |
name = "distro"
|
977 |
version = "1.9.0"
|
|
|
1071 |
all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
|
1072 |
standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"]
|
1073 |
|
1074 |
+
[[package]]
|
1075 |
+
name = "ffmpy"
|
1076 |
+
version = "0.5.0"
|
1077 |
+
description = "A simple Python wrapper for FFmpeg"
|
1078 |
+
optional = false
|
1079 |
+
python-versions = "<4.0,>=3.8"
|
1080 |
+
groups = ["main"]
|
1081 |
+
files = [
|
1082 |
+
{file = "ffmpy-0.5.0-py3-none-any.whl", hash = "sha256:df3799cf5816daa56d4959a023630ee53c6768b66009dae6d131519ba4b80233"},
|
1083 |
+
{file = "ffmpy-0.5.0.tar.gz", hash = "sha256:277e131f246d18e9dcfee9bb514c50749031c43582ce5ef82c57b51e3d3955c3"},
|
1084 |
+
]
|
1085 |
+
|
1086 |
+
[[package]]
|
1087 |
+
name = "filelock"
|
1088 |
+
version = "3.17.0"
|
1089 |
+
description = "A platform independent file lock."
|
1090 |
+
optional = false
|
1091 |
+
python-versions = ">=3.9"
|
1092 |
+
groups = ["main"]
|
1093 |
+
files = [
|
1094 |
+
{file = "filelock-3.17.0-py3-none-any.whl", hash = "sha256:533dc2f7ba78dc2f0f531fc6c4940addf7b70a481e269a5a3b93be94ffbe8338"},
|
1095 |
+
{file = "filelock-3.17.0.tar.gz", hash = "sha256:ee4e77401ef576ebb38cd7f13b9b28893194acc20a8e68e18730ba9c0e54660e"},
|
1096 |
+
]
|
1097 |
+
|
1098 |
+
[package.extras]
|
1099 |
+
docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"]
|
1100 |
+
testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"]
|
1101 |
+
typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""]
|
1102 |
+
|
1103 |
[[package]]
|
1104 |
name = "frozenlist"
|
1105 |
version = "1.5.0"
|
|
|
1202 |
{file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"},
|
1203 |
]
|
1204 |
|
1205 |
+
[[package]]
|
1206 |
+
name = "fsspec"
|
1207 |
+
version = "2025.2.0"
|
1208 |
+
description = "File-system specification"
|
1209 |
+
optional = false
|
1210 |
+
python-versions = ">=3.8"
|
1211 |
+
groups = ["main"]
|
1212 |
+
files = [
|
1213 |
+
{file = "fsspec-2025.2.0-py3-none-any.whl", hash = "sha256:9de2ad9ce1f85e1931858535bc882543171d197001a0a5eb2ddc04f1781ab95b"},
|
1214 |
+
{file = "fsspec-2025.2.0.tar.gz", hash = "sha256:1c24b16eaa0a1798afa0337aa0db9b256718ab2a89c425371f5628d22c3b6afd"},
|
1215 |
+
]
|
1216 |
+
|
1217 |
+
[package.extras]
|
1218 |
+
abfs = ["adlfs"]
|
1219 |
+
adl = ["adlfs"]
|
1220 |
+
arrow = ["pyarrow (>=1)"]
|
1221 |
+
dask = ["dask", "distributed"]
|
1222 |
+
dev = ["pre-commit", "ruff"]
|
1223 |
+
doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"]
|
1224 |
+
dropbox = ["dropbox", "dropboxdrivefs", "requests"]
|
1225 |
+
full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"]
|
1226 |
+
fuse = ["fusepy"]
|
1227 |
+
gcs = ["gcsfs"]
|
1228 |
+
git = ["pygit2"]
|
1229 |
+
github = ["requests"]
|
1230 |
+
gs = ["gcsfs"]
|
1231 |
+
gui = ["panel"]
|
1232 |
+
hdfs = ["pyarrow (>=1)"]
|
1233 |
+
http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"]
|
1234 |
+
libarchive = ["libarchive-c"]
|
1235 |
+
oci = ["ocifs"]
|
1236 |
+
s3 = ["s3fs"]
|
1237 |
+
sftp = ["paramiko"]
|
1238 |
+
smb = ["smbprotocol"]
|
1239 |
+
ssh = ["paramiko"]
|
1240 |
+
test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"]
|
1241 |
+
test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"]
|
1242 |
+
test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"]
|
1243 |
+
tqdm = ["tqdm"]
|
1244 |
+
|
1245 |
[[package]]
|
1246 |
name = "genson"
|
1247 |
version = "1.3.0"
|
|
|
1254 |
{file = "genson-1.3.0.tar.gz", hash = "sha256:e02db9ac2e3fd29e65b5286f7135762e2cd8a986537c075b06fc5f1517308e37"},
|
1255 |
]
|
1256 |
|
1257 |
+
[[package]]
|
1258 |
+
name = "gradio"
|
1259 |
+
version = "5.19.0"
|
1260 |
+
description = "Python library for easily interacting with trained machine learning models"
|
1261 |
+
optional = false
|
1262 |
+
python-versions = ">=3.10"
|
1263 |
+
groups = ["main"]
|
1264 |
+
files = [
|
1265 |
+
{file = "gradio-5.19.0-py3-none-any.whl", hash = "sha256:e72af9ddf5889eb48c898426c56b175c76603ae720328db3e86896bfb18cf355"},
|
1266 |
+
]
|
1267 |
+
|
1268 |
+
[package.dependencies]
|
1269 |
+
aiofiles = ">=22.0,<24.0"
|
1270 |
+
anyio = ">=3.0,<5.0"
|
1271 |
+
fastapi = ">=0.115.2,<1.0"
|
1272 |
+
ffmpy = "*"
|
1273 |
+
gradio-client = "1.7.2"
|
1274 |
+
httpx = ">=0.24.1"
|
1275 |
+
huggingface-hub = ">=0.28.1"
|
1276 |
+
jinja2 = "<4.0"
|
1277 |
+
markupsafe = ">=2.0,<3.0"
|
1278 |
+
numpy = ">=1.0,<3.0"
|
1279 |
+
orjson = ">=3.0,<4.0"
|
1280 |
+
packaging = "*"
|
1281 |
+
pandas = ">=1.0,<3.0"
|
1282 |
+
pillow = ">=8.0,<12.0"
|
1283 |
+
pydantic = ">=2.0"
|
1284 |
+
pydub = "*"
|
1285 |
+
python-multipart = ">=0.0.18"
|
1286 |
+
pyyaml = ">=5.0,<7.0"
|
1287 |
+
ruff = {version = ">=0.9.3", markers = "sys_platform != \"emscripten\""}
|
1288 |
+
safehttpx = ">=0.1.6,<0.2.0"
|
1289 |
+
semantic-version = ">=2.0,<3.0"
|
1290 |
+
starlette = {version = ">=0.40.0,<1.0", markers = "sys_platform != \"emscripten\""}
|
1291 |
+
tomlkit = ">=0.12.0,<0.14.0"
|
1292 |
+
typer = {version = ">=0.12,<1.0", markers = "sys_platform != \"emscripten\""}
|
1293 |
+
typing-extensions = ">=4.0,<5.0"
|
1294 |
+
urllib3 = {version = ">=2.0,<3.0", markers = "sys_platform == \"emscripten\""}
|
1295 |
+
uvicorn = {version = ">=0.14.0", markers = "sys_platform != \"emscripten\""}
|
1296 |
+
|
1297 |
+
[package.extras]
|
1298 |
+
oauth = ["authlib", "itsdangerous"]
|
1299 |
+
|
1300 |
+
[[package]]
|
1301 |
+
name = "gradio-client"
|
1302 |
+
version = "1.7.2"
|
1303 |
+
description = "Python library for easily interacting with trained machine learning models"
|
1304 |
+
optional = false
|
1305 |
+
python-versions = ">=3.10"
|
1306 |
+
groups = ["main"]
|
1307 |
+
files = [
|
1308 |
+
{file = "gradio_client-1.7.2-py3-none-any.whl", hash = "sha256:50d61b4db3e87639430a121a7cde4303055486ed72a5035edae94b4fbe6a0e6b"},
|
1309 |
+
{file = "gradio_client-1.7.2.tar.gz", hash = "sha256:e3f1e1a63292a06a22a748719849bc6dbacdc89645f089c219f3d7a24e68d183"},
|
1310 |
+
]
|
1311 |
+
|
1312 |
+
[package.dependencies]
|
1313 |
+
fsspec = "*"
|
1314 |
+
httpx = ">=0.24.1"
|
1315 |
+
huggingface-hub = ">=0.19.3"
|
1316 |
+
packaging = "*"
|
1317 |
+
typing-extensions = ">=4.0,<5.0"
|
1318 |
+
websockets = ">=10.0,<16.0"
|
1319 |
+
|
1320 |
[[package]]
|
1321 |
name = "greenlet"
|
1322 |
version = "3.1.1"
|
|
|
1464 |
socks = ["socksio (==1.*)"]
|
1465 |
zstd = ["zstandard (>=0.18.0)"]
|
1466 |
|
1467 |
+
[[package]]
|
1468 |
+
name = "huggingface-hub"
|
1469 |
+
version = "0.29.1"
|
1470 |
+
description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub"
|
1471 |
+
optional = false
|
1472 |
+
python-versions = ">=3.8.0"
|
1473 |
+
groups = ["main"]
|
1474 |
+
files = [
|
1475 |
+
{file = "huggingface_hub-0.29.1-py3-none-any.whl", hash = "sha256:352f69caf16566c7b6de84b54a822f6238e17ddd8ae3da4f8f2272aea5b198d5"},
|
1476 |
+
{file = "huggingface_hub-0.29.1.tar.gz", hash = "sha256:9524eae42077b8ff4fc459ceb7a514eca1c1232b775276b009709fe2a084f250"},
|
1477 |
+
]
|
1478 |
+
|
1479 |
+
[package.dependencies]
|
1480 |
+
filelock = "*"
|
1481 |
+
fsspec = ">=2023.5.0"
|
1482 |
+
packaging = ">=20.9"
|
1483 |
+
pyyaml = ">=5.1"
|
1484 |
+
requests = "*"
|
1485 |
+
tqdm = ">=4.42.1"
|
1486 |
+
typing-extensions = ">=3.7.4.3"
|
1487 |
+
|
1488 |
+
[package.extras]
|
1489 |
+
all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "libcst (==1.4.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"]
|
1490 |
+
cli = ["InquirerPy (==0.3.4)"]
|
1491 |
+
dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "libcst (==1.4.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"]
|
1492 |
+
fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"]
|
1493 |
+
hf-transfer = ["hf-transfer (>=0.1.4)"]
|
1494 |
+
inference = ["aiohttp"]
|
1495 |
+
quality = ["libcst (==1.4.0)", "mypy (==1.5.1)", "ruff (>=0.9.0)"]
|
1496 |
+
tensorflow = ["graphviz", "pydot", "tensorflow"]
|
1497 |
+
tensorflow-testing = ["keras (<3.0)", "tensorflow"]
|
1498 |
+
testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"]
|
1499 |
+
torch = ["safetensors[torch]", "torch"]
|
1500 |
+
typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"]
|
1501 |
+
|
1502 |
+
[[package]]
|
1503 |
+
name = "humanfriendly"
|
1504 |
+
version = "10.0"
|
1505 |
+
description = "Human friendly output for text interfaces using Python"
|
1506 |
+
optional = false
|
1507 |
+
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
1508 |
+
groups = ["main"]
|
1509 |
+
files = [
|
1510 |
+
{file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"},
|
1511 |
+
{file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"},
|
1512 |
+
]
|
1513 |
+
|
1514 |
+
[package.dependencies]
|
1515 |
+
pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""}
|
1516 |
+
|
1517 |
[[package]]
|
1518 |
name = "idna"
|
1519 |
version = "3.10"
|
|
|
2055 |
|
2056 |
[[package]]
|
2057 |
name = "markupsafe"
|
2058 |
+
version = "2.1.5"
|
2059 |
description = "Safely add untrusted strings to HTML/XML markup."
|
2060 |
optional = false
|
2061 |
+
python-versions = ">=3.7"
|
2062 |
groups = ["main"]
|
2063 |
files = [
|
2064 |
+
{file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"},
|
2065 |
+
{file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"},
|
2066 |
+
{file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"},
|
2067 |
+
{file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"},
|
2068 |
+
{file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"},
|
2069 |
+
{file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"},
|
2070 |
+
{file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"},
|
2071 |
+
{file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"},
|
2072 |
+
{file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"},
|
2073 |
+
{file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"},
|
2074 |
+
{file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"},
|
2075 |
+
{file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"},
|
2076 |
+
{file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"},
|
2077 |
+
{file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"},
|
2078 |
+
{file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"},
|
2079 |
+
{file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"},
|
2080 |
+
{file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"},
|
2081 |
+
{file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"},
|
2082 |
+
{file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"},
|
2083 |
+
{file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"},
|
2084 |
+
{file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"},
|
2085 |
+
{file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"},
|
2086 |
+
{file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"},
|
2087 |
+
{file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"},
|
2088 |
+
{file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"},
|
2089 |
+
{file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"},
|
2090 |
+
{file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"},
|
2091 |
+
{file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"},
|
2092 |
+
{file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"},
|
2093 |
+
{file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"},
|
2094 |
+
{file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"},
|
2095 |
+
{file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"},
|
2096 |
+
{file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"},
|
2097 |
+
{file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"},
|
2098 |
+
{file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"},
|
2099 |
+
{file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"},
|
2100 |
+
{file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"},
|
2101 |
+
{file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"},
|
2102 |
+
{file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"},
|
2103 |
+
{file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"},
|
2104 |
+
{file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"},
|
2105 |
+
{file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"},
|
2106 |
+
{file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"},
|
2107 |
+
{file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"},
|
2108 |
+
{file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"},
|
2109 |
+
{file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"},
|
2110 |
+
{file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"},
|
2111 |
+
{file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"},
|
2112 |
+
{file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"},
|
2113 |
+
{file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"},
|
2114 |
+
{file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"},
|
2115 |
+
{file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"},
|
2116 |
+
{file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"},
|
2117 |
+
{file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"},
|
2118 |
+
{file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"},
|
2119 |
+
{file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"},
|
2120 |
+
{file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"},
|
2121 |
+
{file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"},
|
2122 |
+
{file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"},
|
2123 |
+
{file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"},
|
|
|
2124 |
]
|
2125 |
|
2126 |
[[package]]
|
|
|
2370 |
optional = false
|
2371 |
python-versions = ">=3.8"
|
2372 |
groups = ["main"]
|
|
|
2373 |
files = [
|
2374 |
{file = "orjson-3.10.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:552c883d03ad185f720d0c09583ebde257e41b9521b74ff40e08b7dec4559c04"},
|
2375 |
{file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616e3e8d438d02e4854f70bfdc03a6bcdb697358dbaa6bcd19cbe24d24ece1f8"},
|
|
|
2464 |
{file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"},
|
2465 |
]
|
2466 |
|
2467 |
+
[[package]]
|
2468 |
+
name = "pandas"
|
2469 |
+
version = "2.2.3"
|
2470 |
+
description = "Powerful data structures for data analysis, time series, and statistics"
|
2471 |
+
optional = false
|
2472 |
+
python-versions = ">=3.9"
|
2473 |
+
groups = ["main"]
|
2474 |
+
files = [
|
2475 |
+
{file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"},
|
2476 |
+
{file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"},
|
2477 |
+
{file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"},
|
2478 |
+
{file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"},
|
2479 |
+
{file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"},
|
2480 |
+
{file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"},
|
2481 |
+
{file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"},
|
2482 |
+
{file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"},
|
2483 |
+
{file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"},
|
2484 |
+
{file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"},
|
2485 |
+
{file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"},
|
2486 |
+
{file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"},
|
2487 |
+
{file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"},
|
2488 |
+
{file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"},
|
2489 |
+
{file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"},
|
2490 |
+
{file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"},
|
2491 |
+
{file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"},
|
2492 |
+
{file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"},
|
2493 |
+
{file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"},
|
2494 |
+
{file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"},
|
2495 |
+
{file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"},
|
2496 |
+
{file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"},
|
2497 |
+
{file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"},
|
2498 |
+
{file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"},
|
2499 |
+
{file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"},
|
2500 |
+
{file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"},
|
2501 |
+
{file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"},
|
2502 |
+
{file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"},
|
2503 |
+
{file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"},
|
2504 |
+
{file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"},
|
2505 |
+
{file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"},
|
2506 |
+
{file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"},
|
2507 |
+
{file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"},
|
2508 |
+
{file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"},
|
2509 |
+
{file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"},
|
2510 |
+
{file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"},
|
2511 |
+
{file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"},
|
2512 |
+
{file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"},
|
2513 |
+
{file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"},
|
2514 |
+
{file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"},
|
2515 |
+
{file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"},
|
2516 |
+
{file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"},
|
2517 |
+
]
|
2518 |
+
|
2519 |
+
[package.dependencies]
|
2520 |
+
numpy = {version = ">=1.23.2", markers = "python_version == \"3.11\""}
|
2521 |
+
python-dateutil = ">=2.8.2"
|
2522 |
+
pytz = ">=2020.1"
|
2523 |
+
tzdata = ">=2022.7"
|
2524 |
+
|
2525 |
+
[package.extras]
|
2526 |
+
all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"]
|
2527 |
+
aws = ["s3fs (>=2022.11.0)"]
|
2528 |
+
clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"]
|
2529 |
+
compression = ["zstandard (>=0.19.0)"]
|
2530 |
+
computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"]
|
2531 |
+
consortium-standard = ["dataframe-api-compat (>=0.1.7)"]
|
2532 |
+
excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"]
|
2533 |
+
feather = ["pyarrow (>=10.0.1)"]
|
2534 |
+
fss = ["fsspec (>=2022.11.0)"]
|
2535 |
+
gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"]
|
2536 |
+
hdf5 = ["tables (>=3.8.0)"]
|
2537 |
+
html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"]
|
2538 |
+
mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"]
|
2539 |
+
output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"]
|
2540 |
+
parquet = ["pyarrow (>=10.0.1)"]
|
2541 |
+
performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"]
|
2542 |
+
plot = ["matplotlib (>=3.6.3)"]
|
2543 |
+
postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"]
|
2544 |
+
pyarrow = ["pyarrow (>=10.0.1)"]
|
2545 |
+
spss = ["pyreadstat (>=1.2.0)"]
|
2546 |
+
sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"]
|
2547 |
+
test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"]
|
2548 |
+
xml = ["lxml (>=4.9.2)"]
|
2549 |
+
|
2550 |
[[package]]
|
2551 |
name = "paramiko"
|
2552 |
version = "3.5.1"
|
|
|
2613 |
[package.dependencies]
|
2614 |
ptyprocess = ">=0.5"
|
2615 |
|
2616 |
+
[[package]]
|
2617 |
+
name = "pillow"
|
2618 |
+
version = "11.1.0"
|
2619 |
+
description = "Python Imaging Library (Fork)"
|
2620 |
+
optional = false
|
2621 |
+
python-versions = ">=3.9"
|
2622 |
+
groups = ["main"]
|
2623 |
+
files = [
|
2624 |
+
{file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"},
|
2625 |
+
{file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"},
|
2626 |
+
{file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07dba04c5e22824816b2615ad7a7484432d7f540e6fa86af60d2de57b0fcee2"},
|
2627 |
+
{file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e267b0ed063341f3e60acd25c05200df4193e15a4a5807075cd71225a2386e26"},
|
2628 |
+
{file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd165131fd51697e22421d0e467997ad31621b74bfc0b75956608cb2906dda07"},
|
2629 |
+
{file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:abc56501c3fd148d60659aae0af6ddc149660469082859fa7b066a298bde9482"},
|
2630 |
+
{file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:54ce1c9a16a9561b6d6d8cb30089ab1e5eb66918cb47d457bd996ef34182922e"},
|
2631 |
+
{file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73ddde795ee9b06257dac5ad42fcb07f3b9b813f8c1f7f870f402f4dc54b5269"},
|
2632 |
+
{file = "pillow-11.1.0-cp310-cp310-win32.whl", hash = "sha256:3a5fe20a7b66e8135d7fd617b13272626a28278d0e578c98720d9ba4b2439d49"},
|
2633 |
+
{file = "pillow-11.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:b6123aa4a59d75f06e9dd3dac5bf8bc9aa383121bb3dd9a7a612e05eabc9961a"},
|
2634 |
+
{file = "pillow-11.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:a76da0a31da6fcae4210aa94fd779c65c75786bc9af06289cd1c184451ef7a65"},
|
2635 |
+
{file = "pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457"},
|
2636 |
+
{file = "pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35"},
|
2637 |
+
{file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2"},
|
2638 |
+
{file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070"},
|
2639 |
+
{file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6"},
|
2640 |
+
{file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1"},
|
2641 |
+
{file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2"},
|
2642 |
+
{file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96"},
|
2643 |
+
{file = "pillow-11.1.0-cp311-cp311-win32.whl", hash = "sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f"},
|
2644 |
+
{file = "pillow-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761"},
|
2645 |
+
{file = "pillow-11.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71"},
|
2646 |
+
{file = "pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a"},
|
2647 |
+
{file = "pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b"},
|
2648 |
+
{file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3"},
|
2649 |
+
{file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a"},
|
2650 |
+
{file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1"},
|
2651 |
+
{file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f"},
|
2652 |
+
{file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91"},
|
2653 |
+
{file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c"},
|
2654 |
+
{file = "pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6"},
|
2655 |
+
{file = "pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf"},
|
2656 |
+
{file = "pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5"},
|
2657 |
+
{file = "pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc"},
|
2658 |
+
{file = "pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0"},
|
2659 |
+
{file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1"},
|
2660 |
+
{file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec"},
|
2661 |
+
{file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5"},
|
2662 |
+
{file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114"},
|
2663 |
+
{file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352"},
|
2664 |
+
{file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3"},
|
2665 |
+
{file = "pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9"},
|
2666 |
+
{file = "pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c"},
|
2667 |
+
{file = "pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65"},
|
2668 |
+
{file = "pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861"},
|
2669 |
+
{file = "pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081"},
|
2670 |
+
{file = "pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c"},
|
2671 |
+
{file = "pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547"},
|
2672 |
+
{file = "pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab"},
|
2673 |
+
{file = "pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9"},
|
2674 |
+
{file = "pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe"},
|
2675 |
+
{file = "pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756"},
|
2676 |
+
{file = "pillow-11.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bf902d7413c82a1bfa08b06a070876132a5ae6b2388e2712aab3a7cbc02205c6"},
|
2677 |
+
{file = "pillow-11.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1eec9d950b6fe688edee07138993e54ee4ae634c51443cfb7c1e7613322718e"},
|
2678 |
+
{file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e275ee4cb11c262bd108ab2081f750db2a1c0b8c12c1897f27b160c8bd57bbc"},
|
2679 |
+
{file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db853948ce4e718f2fc775b75c37ba2efb6aaea41a1a5fc57f0af59eee774b2"},
|
2680 |
+
{file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ab8a209b8485d3db694fa97a896d96dd6533d63c22829043fd9de627060beade"},
|
2681 |
+
{file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:54251ef02a2309b5eec99d151ebf5c9904b77976c8abdcbce7891ed22df53884"},
|
2682 |
+
{file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5bb94705aea800051a743aa4874bb1397d4695fb0583ba5e425ee0328757f196"},
|
2683 |
+
{file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89dbdb3e6e9594d512780a5a1c42801879628b38e3efc7038094430844e271d8"},
|
2684 |
+
{file = "pillow-11.1.0-cp39-cp39-win32.whl", hash = "sha256:e5449ca63da169a2e6068dd0e2fcc8d91f9558aba89ff6d02121ca8ab11e79e5"},
|
2685 |
+
{file = "pillow-11.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:3362c6ca227e65c54bf71a5f88b3d4565ff1bcbc63ae72c34b07bbb1cc59a43f"},
|
2686 |
+
{file = "pillow-11.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:b20be51b37a75cc54c2c55def3fa2c65bb94ba859dde241cd0a4fd302de5ae0a"},
|
2687 |
+
{file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8c730dc3a83e5ac137fbc92dfcfe1511ce3b2b5d7578315b63dbbb76f7f51d90"},
|
2688 |
+
{file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d33d2fae0e8b170b6a6c57400e077412240f6f5bb2a342cf1ee512a787942bb"},
|
2689 |
+
{file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8d65b38173085f24bc07f8b6c505cbb7418009fa1a1fcb111b1f4961814a442"},
|
2690 |
+
{file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:015c6e863faa4779251436db398ae75051469f7c903b043a48f078e437656f83"},
|
2691 |
+
{file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d44ff19eea13ae4acdaaab0179fa68c0c6f2f45d66a4d8ec1eda7d6cecbcc15f"},
|
2692 |
+
{file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d3d8da4a631471dfaf94c10c85f5277b1f8e42ac42bade1ac67da4b4a7359b73"},
|
2693 |
+
{file = "pillow-11.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4637b88343166249fe8aa94e7c4a62a180c4b3898283bb5d3d2fd5fe10d8e4e0"},
|
2694 |
+
{file = "pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20"},
|
2695 |
+
]
|
2696 |
+
|
2697 |
+
[package.extras]
|
2698 |
+
docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"]
|
2699 |
+
fpx = ["olefile"]
|
2700 |
+
mic = ["olefile"]
|
2701 |
+
tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"]
|
2702 |
+
typing = ["typing-extensions ; python_version < \"3.10\""]
|
2703 |
+
xmp = ["defusedxml"]
|
2704 |
+
|
2705 |
[[package]]
|
2706 |
name = "platformdirs"
|
2707 |
version = "4.3.6"
|
|
|
2719 |
test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"]
|
2720 |
type = ["mypy (>=1.11.2)"]
|
2721 |
|
2722 |
+
[[package]]
|
2723 |
+
name = "pluggy"
|
2724 |
+
version = "1.5.0"
|
2725 |
+
description = "plugin and hook calling mechanisms for python"
|
2726 |
+
optional = false
|
2727 |
+
python-versions = ">=3.8"
|
2728 |
+
groups = ["main"]
|
2729 |
+
files = [
|
2730 |
+
{file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
|
2731 |
+
{file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
|
2732 |
+
]
|
2733 |
+
|
2734 |
+
[package.extras]
|
2735 |
+
dev = ["pre-commit", "tox"]
|
2736 |
+
testing = ["pytest", "pytest-benchmark"]
|
2737 |
+
|
2738 |
[[package]]
|
2739 |
name = "prompt-toolkit"
|
2740 |
version = "3.0.50"
|
|
|
3046 |
[package.dependencies]
|
3047 |
typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
|
3048 |
|
3049 |
+
[[package]]
|
3050 |
+
name = "pydub"
|
3051 |
+
version = "0.25.1"
|
3052 |
+
description = "Manipulate audio with an simple and easy high level interface"
|
3053 |
+
optional = false
|
3054 |
+
python-versions = "*"
|
3055 |
+
groups = ["main"]
|
3056 |
+
files = [
|
3057 |
+
{file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"},
|
3058 |
+
{file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"},
|
3059 |
+
]
|
3060 |
+
|
3061 |
[[package]]
|
3062 |
name = "pygments"
|
3063 |
version = "2.19.1"
|
|
|
3111 |
{file = "pyperclip-1.9.0.tar.gz", hash = "sha256:b7de0142ddc81bfc5c7507eea19da920b92252b548b96186caf94a5e2527d310"},
|
3112 |
]
|
3113 |
|
3114 |
+
[[package]]
|
3115 |
+
name = "pyproject-api"
|
3116 |
+
version = "1.9.0"
|
3117 |
+
description = "API to interact with the python pyproject.toml based projects"
|
3118 |
+
optional = false
|
3119 |
+
python-versions = ">=3.9"
|
3120 |
+
groups = ["main"]
|
3121 |
+
files = [
|
3122 |
+
{file = "pyproject_api-1.9.0-py3-none-any.whl", hash = "sha256:326df9d68dea22d9d98b5243c46e3ca3161b07a1b9b18e213d1e24fd0e605766"},
|
3123 |
+
{file = "pyproject_api-1.9.0.tar.gz", hash = "sha256:7e8a9854b2dfb49454fae421cb86af43efbb2b2454e5646ffb7623540321ae6e"},
|
3124 |
+
]
|
3125 |
+
|
3126 |
+
[package.dependencies]
|
3127 |
+
packaging = ">=24.2"
|
3128 |
+
|
3129 |
+
[package.extras]
|
3130 |
+
docs = ["furo (>=2024.8.6)", "sphinx-autodoc-typehints (>=3)"]
|
3131 |
+
testing = ["covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "setuptools (>=75.8)"]
|
3132 |
+
|
3133 |
+
[[package]]
|
3134 |
+
name = "pyreadline3"
|
3135 |
+
version = "3.5.4"
|
3136 |
+
description = "A python implementation of GNU readline."
|
3137 |
+
optional = false
|
3138 |
+
python-versions = ">=3.8"
|
3139 |
+
groups = ["main"]
|
3140 |
+
markers = "sys_platform == \"win32\""
|
3141 |
+
files = [
|
3142 |
+
{file = "pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6"},
|
3143 |
+
{file = "pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7"},
|
3144 |
+
]
|
3145 |
+
|
3146 |
+
[package.extras]
|
3147 |
+
dev = ["build", "flake8", "mypy", "pytest", "twine"]
|
3148 |
+
|
3149 |
[[package]]
|
3150 |
name = "pysher"
|
3151 |
version = "1.0.8"
|
|
|
3167 |
description = "Extensions to the standard Python datetime module"
|
3168 |
optional = false
|
3169 |
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
|
3170 |
+
groups = ["main", "dev"]
|
3171 |
files = [
|
3172 |
{file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"},
|
3173 |
{file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"},
|
|
|
3191 |
[package.extras]
|
3192 |
cli = ["click (>=5.0)"]
|
3193 |
|
3194 |
+
[[package]]
|
3195 |
+
name = "python-multipart"
|
3196 |
+
version = "0.0.20"
|
3197 |
+
description = "A streaming multipart parser for Python"
|
3198 |
+
optional = false
|
3199 |
+
python-versions = ">=3.8"
|
3200 |
+
groups = ["main"]
|
3201 |
+
files = [
|
3202 |
+
{file = "python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104"},
|
3203 |
+
{file = "python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13"},
|
3204 |
+
]
|
3205 |
+
|
3206 |
+
[[package]]
|
3207 |
+
name = "pytz"
|
3208 |
+
version = "2025.1"
|
3209 |
+
description = "World timezone definitions, modern and historical"
|
3210 |
+
optional = false
|
3211 |
+
python-versions = "*"
|
3212 |
+
groups = ["main"]
|
3213 |
+
files = [
|
3214 |
+
{file = "pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57"},
|
3215 |
+
{file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"},
|
3216 |
+
]
|
3217 |
+
|
3218 |
[[package]]
|
3219 |
name = "pywin32"
|
3220 |
version = "308"
|
|
|
3606 |
[package.extras]
|
3607 |
jupyter = ["ipywidgets (>=7.5.1,<9)"]
|
3608 |
|
3609 |
+
[[package]]
|
3610 |
+
name = "rootpath"
|
3611 |
+
version = "0.1.1"
|
3612 |
+
description = "Python project/package root path detection."
|
3613 |
+
optional = false
|
3614 |
+
python-versions = "*"
|
3615 |
+
groups = ["main"]
|
3616 |
+
files = [
|
3617 |
+
{file = "rootpath-0.1.1-py3-none-any.whl", hash = "sha256:98f417747b3e25d2ad1e94a555d7562b48f642cbdf993dabc61259170720ed45"},
|
3618 |
+
{file = "rootpath-0.1.1.tar.gz", hash = "sha256:ecc3f9de280ff11c6ade0e956229e4dcb74c1ead5efde8579ba721e6459c518f"},
|
3619 |
+
]
|
3620 |
+
|
3621 |
+
[package.dependencies]
|
3622 |
+
codecov = ">=2.0.15"
|
3623 |
+
coloredlogs = ">=10.0"
|
3624 |
+
colour-runner = ">=0.0.5"
|
3625 |
+
coverage = ">=4.5.2"
|
3626 |
+
deepdiff = ">=3.3.0"
|
3627 |
+
pygments = ">=2.2.0"
|
3628 |
+
six = ">=1.11.0"
|
3629 |
+
termcolor = ">=1.1.0"
|
3630 |
+
tox = ">=3.0.0"
|
3631 |
+
|
3632 |
[[package]]
|
3633 |
name = "rpds-py"
|
3634 |
version = "0.23.1"
|
|
|
3742 |
{file = "rpds_py-0.23.1.tar.gz", hash = "sha256:7f3240dcfa14d198dba24b8b9cb3b108c06b68d45b7babd9eefc1038fdf7e707"},
|
3743 |
]
|
3744 |
|
3745 |
+
[[package]]
|
3746 |
+
name = "ruff"
|
3747 |
+
version = "0.9.8"
|
3748 |
+
description = "An extremely fast Python linter and code formatter, written in Rust."
|
3749 |
+
optional = false
|
3750 |
+
python-versions = ">=3.7"
|
3751 |
+
groups = ["main"]
|
3752 |
+
markers = "sys_platform != \"emscripten\""
|
3753 |
+
files = [
|
3754 |
+
{file = "ruff-0.9.8-py3-none-linux_armv6l.whl", hash = "sha256:d236f0ce0190bbc6fa9b4c4b85e916fb4c50fd087e6558af1bf5a45eb20e374d"},
|
3755 |
+
{file = "ruff-0.9.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:59fac6922b336d0c38df199761ade561563e1b7636e3a2b767b9ee5a68aa9cbf"},
|
3756 |
+
{file = "ruff-0.9.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a82082ec72bde2166ec138055307396c4d4e543fd97266dc2bfa24284cb30af6"},
|
3757 |
+
{file = "ruff-0.9.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e06635d12321605d1d11226c7d3c6b1245a0df498099868d14b4e353b3f0ac22"},
|
3758 |
+
{file = "ruff-0.9.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:65961815bb35d427e957940d13b2a1d0a67d8b245d3a7e0b5a4a2058536d3532"},
|
3759 |
+
{file = "ruff-0.9.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c18356beaef174797ad83f11debc5569e96afa73a549b2d073912565cfc4cfd1"},
|
3760 |
+
{file = "ruff-0.9.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a1dfc443bee0288ea926a4d9ecfd858bf94ddf0a03a256c63e81b2b6dccdfc7d"},
|
3761 |
+
{file = "ruff-0.9.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc86d5a85cd5ab1d5aff1650f038aa34681d0692cc2467aa9ddef37bd56ea3f9"},
|
3762 |
+
{file = "ruff-0.9.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:66662aa19535d58fe6d04e5b59a39e495b102f2f5a2a1b9698e240eb78f429ef"},
|
3763 |
+
{file = "ruff-0.9.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:733647b2fe9367e1aa049c0eba296363746f3bc0dbfd454b0bc4b7b46cdf0146"},
|
3764 |
+
{file = "ruff-0.9.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:100031be9777f67af7f61b4d4eea2a0531ed6788940aca4360f6b9aae317c53b"},
|
3765 |
+
{file = "ruff-0.9.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2f090758d58b4667d9022eee1085a854db93d800279e5a177ebda5adc1faf639"},
|
3766 |
+
{file = "ruff-0.9.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f774998b9c9a062510533aba9b53085de6be6d41e13a7a0bd086af8a40e838c3"},
|
3767 |
+
{file = "ruff-0.9.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6ef7cc80626264ab8ab4d68b359ba867b8a52b0830a9643cd31289146dd40892"},
|
3768 |
+
{file = "ruff-0.9.8-py3-none-win32.whl", hash = "sha256:54b57b623a683e696a1ede99db95500763c1badafe105b6ad8d8e9d96e385ae2"},
|
3769 |
+
{file = "ruff-0.9.8-py3-none-win_amd64.whl", hash = "sha256:b0878103b2fb8af55ad701308a69ce713108ad346c3a3a143ebcd1e13829c9a7"},
|
3770 |
+
{file = "ruff-0.9.8-py3-none-win_arm64.whl", hash = "sha256:e459a4fc4150fcc60da26c59a6a4b70878c60a99df865a71cf6f958dc68c419a"},
|
3771 |
+
{file = "ruff-0.9.8.tar.gz", hash = "sha256:12d455f2be6fe98accbea2487bbb8eaec716c760bf60b45e7e13f76f913f56e9"},
|
3772 |
+
]
|
3773 |
+
|
3774 |
+
[[package]]
|
3775 |
+
name = "safehttpx"
|
3776 |
+
version = "0.1.6"
|
3777 |
+
description = "A small Python library created to help developers protect their applications from Server Side Request Forgery (SSRF) attacks."
|
3778 |
+
optional = false
|
3779 |
+
python-versions = ">3.9"
|
3780 |
+
groups = ["main"]
|
3781 |
+
files = [
|
3782 |
+
{file = "safehttpx-0.1.6-py3-none-any.whl", hash = "sha256:407cff0b410b071623087c63dd2080c3b44dc076888d8c5823c00d1e58cb381c"},
|
3783 |
+
{file = "safehttpx-0.1.6.tar.gz", hash = "sha256:b356bfc82cee3a24c395b94a2dbeabbed60aff1aa5fa3b5fe97c4f2456ebce42"},
|
3784 |
+
]
|
3785 |
+
|
3786 |
+
[package.dependencies]
|
3787 |
+
httpx = "*"
|
3788 |
+
|
3789 |
+
[package.extras]
|
3790 |
+
dev = ["pytest"]
|
3791 |
+
|
3792 |
+
[[package]]
|
3793 |
+
name = "semantic-version"
|
3794 |
+
version = "2.10.0"
|
3795 |
+
description = "A library implementing the 'SemVer' scheme."
|
3796 |
+
optional = false
|
3797 |
+
python-versions = ">=2.7"
|
3798 |
+
groups = ["main"]
|
3799 |
+
files = [
|
3800 |
+
{file = "semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177"},
|
3801 |
+
{file = "semantic_version-2.10.0.tar.gz", hash = "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c"},
|
3802 |
+
]
|
3803 |
+
|
3804 |
+
[package.extras]
|
3805 |
+
dev = ["Django (>=1.11)", "check-manifest", "colorama (<=0.4.1) ; python_version == \"3.4\"", "coverage", "flake8", "nose2", "readme-renderer (<25.0) ; python_version == \"3.4\"", "tox", "wheel", "zest.releaser[recommended]"]
|
3806 |
+
doc = ["Sphinx", "sphinx-rtd-theme"]
|
3807 |
+
|
3808 |
[[package]]
|
3809 |
name = "semver"
|
3810 |
version = "3.0.4"
|
|
|
3874 |
tornado = ["tornado (>=6)"]
|
3875 |
unleash = ["UnleashClient (>=6.0.1)"]
|
3876 |
|
3877 |
+
[[package]]
|
3878 |
+
name = "shellingham"
|
3879 |
+
version = "1.5.4"
|
3880 |
+
description = "Tool to Detect Surrounding Shell"
|
3881 |
+
optional = false
|
3882 |
+
python-versions = ">=3.7"
|
3883 |
+
groups = ["main"]
|
3884 |
+
markers = "sys_platform != \"emscripten\""
|
3885 |
+
files = [
|
3886 |
+
{file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"},
|
3887 |
+
{file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"},
|
3888 |
+
]
|
3889 |
+
|
3890 |
[[package]]
|
3891 |
name = "six"
|
3892 |
version = "1.17.0"
|
3893 |
description = "Python 2 and 3 compatibility utilities"
|
3894 |
optional = false
|
3895 |
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
|
3896 |
+
groups = ["main", "dev"]
|
3897 |
files = [
|
3898 |
{file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"},
|
3899 |
{file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"},
|
|
|
4124 |
[package.extras]
|
4125 |
blobfile = ["blobfile (>=2)"]
|
4126 |
|
4127 |
+
[[package]]
|
4128 |
+
name = "tomlkit"
|
4129 |
+
version = "0.13.2"
|
4130 |
+
description = "Style preserving TOML library"
|
4131 |
+
optional = false
|
4132 |
+
python-versions = ">=3.8"
|
4133 |
+
groups = ["main"]
|
4134 |
+
files = [
|
4135 |
+
{file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"},
|
4136 |
+
{file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"},
|
4137 |
+
]
|
4138 |
+
|
4139 |
[[package]]
|
4140 |
name = "tornado"
|
4141 |
version = "6.4.2"
|
|
|
4157 |
{file = "tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b"},
|
4158 |
]
|
4159 |
|
4160 |
+
[[package]]
|
4161 |
+
name = "tox"
|
4162 |
+
version = "4.24.1"
|
4163 |
+
description = "tox is a generic virtualenv management and test command line tool"
|
4164 |
+
optional = false
|
4165 |
+
python-versions = ">=3.8"
|
4166 |
+
groups = ["main"]
|
4167 |
+
files = [
|
4168 |
+
{file = "tox-4.24.1-py3-none-any.whl", hash = "sha256:57ba7df7d199002c6df8c2db9e6484f3de6ca8f42013c083ea2d4d1e5c6bdc75"},
|
4169 |
+
{file = "tox-4.24.1.tar.gz", hash = "sha256:083a720adbc6166fff0b7d1df9d154f9d00bfccb9403b8abf6bc0ee435d6a62e"},
|
4170 |
+
]
|
4171 |
+
|
4172 |
+
[package.dependencies]
|
4173 |
+
cachetools = ">=5.5"
|
4174 |
+
chardet = ">=5.2"
|
4175 |
+
colorama = ">=0.4.6"
|
4176 |
+
filelock = ">=3.16.1"
|
4177 |
+
packaging = ">=24.2"
|
4178 |
+
platformdirs = ">=4.3.6"
|
4179 |
+
pluggy = ">=1.5"
|
4180 |
+
pyproject-api = ">=1.8"
|
4181 |
+
virtualenv = ">=20.27.1"
|
4182 |
+
|
4183 |
+
[package.extras]
|
4184 |
+
test = ["devpi-process (>=1.0.2)", "pytest (>=8.3.3)", "pytest-mock (>=3.14)"]
|
4185 |
+
|
4186 |
[[package]]
|
4187 |
name = "tqdm"
|
4188 |
version = "4.67.1"
|
|
|
4221 |
docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"]
|
4222 |
test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"]
|
4223 |
|
4224 |
+
[[package]]
|
4225 |
+
name = "typer"
|
4226 |
+
version = "0.15.1"
|
4227 |
+
description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
|
4228 |
+
optional = false
|
4229 |
+
python-versions = ">=3.7"
|
4230 |
+
groups = ["main"]
|
4231 |
+
markers = "sys_platform != \"emscripten\""
|
4232 |
+
files = [
|
4233 |
+
{file = "typer-0.15.1-py3-none-any.whl", hash = "sha256:7994fb7b8155b64d3402518560648446072864beefd44aa2dc36972a5972e847"},
|
4234 |
+
{file = "typer-0.15.1.tar.gz", hash = "sha256:a0588c0a7fa68a1978a069818657778f86abe6ff5ea6abf472f940a08bfe4f0a"},
|
4235 |
+
]
|
4236 |
+
|
4237 |
+
[package.dependencies]
|
4238 |
+
click = ">=8.0.0"
|
4239 |
+
rich = ">=10.11.0"
|
4240 |
+
shellingham = ">=1.3.0"
|
4241 |
+
typing-extensions = ">=3.7.4.3"
|
4242 |
+
|
4243 |
[[package]]
|
4244 |
name = "types-requests"
|
4245 |
version = "2.32.0.20241016"
|
|
|
4267 |
{file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
|
4268 |
]
|
4269 |
|
4270 |
+
[[package]]
|
4271 |
+
name = "tzdata"
|
4272 |
+
version = "2025.1"
|
4273 |
+
description = "Provider of IANA time zone data"
|
4274 |
+
optional = false
|
4275 |
+
python-versions = ">=2"
|
4276 |
+
groups = ["main"]
|
4277 |
+
files = [
|
4278 |
+
{file = "tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639"},
|
4279 |
+
{file = "tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694"},
|
4280 |
+
]
|
4281 |
+
|
4282 |
[[package]]
|
4283 |
name = "urllib3"
|
4284 |
version = "2.3.0"
|
|
|
4316 |
[package.extras]
|
4317 |
standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"]
|
4318 |
|
4319 |
+
[[package]]
|
4320 |
+
name = "virtualenv"
|
4321 |
+
version = "20.29.2"
|
4322 |
+
description = "Virtual Python Environment builder"
|
4323 |
+
optional = false
|
4324 |
+
python-versions = ">=3.8"
|
4325 |
+
groups = ["main"]
|
4326 |
+
files = [
|
4327 |
+
{file = "virtualenv-20.29.2-py3-none-any.whl", hash = "sha256:febddfc3d1ea571bdb1dc0f98d7b45d24def7428214d4fb73cc486c9568cce6a"},
|
4328 |
+
{file = "virtualenv-20.29.2.tar.gz", hash = "sha256:fdaabebf6d03b5ba83ae0a02cfe96f48a716f4fae556461d180825866f75b728"},
|
4329 |
+
]
|
4330 |
+
|
4331 |
+
[package.dependencies]
|
4332 |
+
distlib = ">=0.3.7,<1"
|
4333 |
+
filelock = ">=3.12.2,<4"
|
4334 |
+
platformdirs = ">=3.9.1,<5"
|
4335 |
+
|
4336 |
+
[package.extras]
|
4337 |
+
docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"]
|
4338 |
+
test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""]
|
4339 |
+
|
4340 |
[[package]]
|
4341 |
name = "wcwidth"
|
4342 |
version = "0.2.13"
|
|
|
4366 |
optional = ["python-socks", "wsaccel"]
|
4367 |
test = ["websockets"]
|
4368 |
|
4369 |
+
[[package]]
|
4370 |
+
name = "websockets"
|
4371 |
+
version = "15.0"
|
4372 |
+
description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
|
4373 |
+
optional = false
|
4374 |
+
python-versions = ">=3.9"
|
4375 |
+
groups = ["main"]
|
4376 |
+
files = [
|
4377 |
+
{file = "websockets-15.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5e6ee18a53dd5743e6155b8ff7e8e477c25b29b440f87f65be8165275c87fef0"},
|
4378 |
+
{file = "websockets-15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ee06405ea2e67366a661ed313e14cf2a86e84142a3462852eb96348f7219cee3"},
|
4379 |
+
{file = "websockets-15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8711682a629bbcaf492f5e0af72d378e976ea1d127a2d47584fa1c2c080b436b"},
|
4380 |
+
{file = "websockets-15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94c4a9b01eede952442c088d415861b0cf2053cbd696b863f6d5022d4e4e2453"},
|
4381 |
+
{file = "websockets-15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:45535fead66e873f411c1d3cf0d3e175e66f4dd83c4f59d707d5b3e4c56541c4"},
|
4382 |
+
{file = "websockets-15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e389efe46ccb25a1f93d08c7a74e8123a2517f7b7458f043bd7529d1a63ffeb"},
|
4383 |
+
{file = "websockets-15.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:67a04754d121ea5ca39ddedc3f77071651fb5b0bc6b973c71c515415b44ed9c5"},
|
4384 |
+
{file = "websockets-15.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:bd66b4865c8b853b8cca7379afb692fc7f52cf898786537dfb5e5e2d64f0a47f"},
|
4385 |
+
{file = "websockets-15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a4cc73a6ae0a6751b76e69cece9d0311f054da9b22df6a12f2c53111735657c8"},
|
4386 |
+
{file = "websockets-15.0-cp310-cp310-win32.whl", hash = "sha256:89da58e4005e153b03fe8b8794330e3f6a9774ee9e1c3bd5bc52eb098c3b0c4f"},
|
4387 |
+
{file = "websockets-15.0-cp310-cp310-win_amd64.whl", hash = "sha256:4ff380aabd7a74a42a760ee76c68826a8f417ceb6ea415bd574a035a111fd133"},
|
4388 |
+
{file = "websockets-15.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:dd24c4d256558429aeeb8d6c24ebad4e982ac52c50bc3670ae8646c181263965"},
|
4389 |
+
{file = "websockets-15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f83eca8cbfd168e424dfa3b3b5c955d6c281e8fc09feb9d870886ff8d03683c7"},
|
4390 |
+
{file = "websockets-15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4095a1f2093002c2208becf6f9a178b336b7572512ee0a1179731acb7788e8ad"},
|
4391 |
+
{file = "websockets-15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb915101dfbf318486364ce85662bb7b020840f68138014972c08331458d41f3"},
|
4392 |
+
{file = "websockets-15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:45d464622314973d78f364689d5dbb9144e559f93dca11b11af3f2480b5034e1"},
|
4393 |
+
{file = "websockets-15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace960769d60037ca9625b4c578a6f28a14301bd2a1ff13bb00e824ac9f73e55"},
|
4394 |
+
{file = "websockets-15.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c7cd4b1015d2f60dfe539ee6c95bc968d5d5fad92ab01bb5501a77393da4f596"},
|
4395 |
+
{file = "websockets-15.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4f7290295794b5dec470867c7baa4a14182b9732603fd0caf2a5bf1dc3ccabf3"},
|
4396 |
+
{file = "websockets-15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3abd670ca7ce230d5a624fd3d55e055215d8d9b723adee0a348352f5d8d12ff4"},
|
4397 |
+
{file = "websockets-15.0-cp311-cp311-win32.whl", hash = "sha256:110a847085246ab8d4d119632145224d6b49e406c64f1bbeed45c6f05097b680"},
|
4398 |
+
{file = "websockets-15.0-cp311-cp311-win_amd64.whl", hash = "sha256:8d7bbbe2cd6ed80aceef2a14e9f1c1b61683194c216472ed5ff33b700e784e37"},
|
4399 |
+
{file = "websockets-15.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cccc18077acd34c8072578394ec79563664b1c205f7a86a62e94fafc7b59001f"},
|
4400 |
+
{file = "websockets-15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d4c22992e24f12de340ca5f824121a5b3e1a37ad4360b4e1aaf15e9d1c42582d"},
|
4401 |
+
{file = "websockets-15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1206432cc6c644f6fc03374b264c5ff805d980311563202ed7fef91a38906276"},
|
4402 |
+
{file = "websockets-15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d3cc75ef3e17490042c47e0523aee1bcc4eacd2482796107fd59dd1100a44bc"},
|
4403 |
+
{file = "websockets-15.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b89504227a5311610e4be16071465885a0a3d6b0e82e305ef46d9b064ce5fb72"},
|
4404 |
+
{file = "websockets-15.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56e3efe356416bc67a8e093607315951d76910f03d2b3ad49c4ade9207bf710d"},
|
4405 |
+
{file = "websockets-15.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0f2205cdb444a42a7919690238fb5979a05439b9dbb73dd47c863d39640d85ab"},
|
4406 |
+
{file = "websockets-15.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:aea01f40995fa0945c020228ab919b8dfc93fc8a9f2d3d705ab5b793f32d9e99"},
|
4407 |
+
{file = "websockets-15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a9f8e33747b1332db11cf7fcf4a9512bef9748cb5eb4d3f7fbc8c30d75dc6ffc"},
|
4408 |
+
{file = "websockets-15.0-cp312-cp312-win32.whl", hash = "sha256:32e02a2d83f4954aa8c17e03fe8ec6962432c39aca4be7e8ee346b05a3476904"},
|
4409 |
+
{file = "websockets-15.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffc02b159b65c05f2ed9ec176b715b66918a674bd4daed48a9a7a590dd4be1aa"},
|
4410 |
+
{file = "websockets-15.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d2244d8ab24374bed366f9ff206e2619345f9cd7fe79aad5225f53faac28b6b1"},
|
4411 |
+
{file = "websockets-15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3a302241fbe825a3e4fe07666a2ab513edfdc6d43ce24b79691b45115273b5e7"},
|
4412 |
+
{file = "websockets-15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:10552fed076757a70ba2c18edcbc601c7637b30cdfe8c24b65171e824c7d6081"},
|
4413 |
+
{file = "websockets-15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c53f97032b87a406044a1c33d1e9290cc38b117a8062e8a8b285175d7e2f99c9"},
|
4414 |
+
{file = "websockets-15.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1caf951110ca757b8ad9c4974f5cac7b8413004d2f29707e4d03a65d54cedf2b"},
|
4415 |
+
{file = "websockets-15.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bf1ab71f9f23b0a1d52ec1682a3907e0c208c12fef9c3e99d2b80166b17905f"},
|
4416 |
+
{file = "websockets-15.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bfcd3acc1a81f106abac6afd42327d2cf1e77ec905ae11dc1d9142a006a496b6"},
|
4417 |
+
{file = "websockets-15.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c8c5c8e1bac05ef3c23722e591ef4f688f528235e2480f157a9cfe0a19081375"},
|
4418 |
+
{file = "websockets-15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:86bfb52a9cfbcc09aba2b71388b0a20ea5c52b6517c0b2e316222435a8cdab72"},
|
4419 |
+
{file = "websockets-15.0-cp313-cp313-win32.whl", hash = "sha256:26ba70fed190708551c19a360f9d7eca8e8c0f615d19a574292b7229e0ae324c"},
|
4420 |
+
{file = "websockets-15.0-cp313-cp313-win_amd64.whl", hash = "sha256:ae721bcc8e69846af00b7a77a220614d9b2ec57d25017a6bbde3a99473e41ce8"},
|
4421 |
+
{file = "websockets-15.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c348abc5924caa02a62896300e32ea80a81521f91d6db2e853e6b1994017c9f6"},
|
4422 |
+
{file = "websockets-15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5294fcb410ed0a45d5d1cdedc4e51a60aab5b2b3193999028ea94afc2f554b05"},
|
4423 |
+
{file = "websockets-15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c24ba103ecf45861e2e1f933d40b2d93f5d52d8228870c3e7bf1299cd1cb8ff1"},
|
4424 |
+
{file = "websockets-15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc8821a03bcfb36e4e4705316f6b66af28450357af8a575dc8f4b09bf02a3dee"},
|
4425 |
+
{file = "websockets-15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc5ae23ada6515f31604f700009e2df90b091b67d463a8401c1d8a37f76c1d7"},
|
4426 |
+
{file = "websockets-15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ac67b542505186b3bbdaffbc303292e1ee9c8729e5d5df243c1f20f4bb9057e"},
|
4427 |
+
{file = "websockets-15.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c86dc2068f1c5ca2065aca34f257bbf4f78caf566eb230f692ad347da191f0a1"},
|
4428 |
+
{file = "websockets-15.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:30cff3ef329682b6182c01c568f551481774c476722020b8f7d0daacbed07a17"},
|
4429 |
+
{file = "websockets-15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:98dcf978d4c6048965d1762abd534c9d53bae981a035bfe486690ba11f49bbbb"},
|
4430 |
+
{file = "websockets-15.0-cp39-cp39-win32.whl", hash = "sha256:37d66646f929ae7c22c79bc73ec4074d6db45e6384500ee3e0d476daf55482a9"},
|
4431 |
+
{file = "websockets-15.0-cp39-cp39-win_amd64.whl", hash = "sha256:24d5333a9b2343330f0f4eb88546e2c32a7f5c280f8dd7d3cc079beb0901781b"},
|
4432 |
+
{file = "websockets-15.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b499caef4bca9cbd0bd23cd3386f5113ee7378094a3cb613a2fa543260fe9506"},
|
4433 |
+
{file = "websockets-15.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:17f2854c6bd9ee008c4b270f7010fe2da6c16eac5724a175e75010aacd905b31"},
|
4434 |
+
{file = "websockets-15.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89f72524033abbfde880ad338fd3c2c16e31ae232323ebdfbc745cbb1b3dcc03"},
|
4435 |
+
{file = "websockets-15.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1657a9eecb29d7838e3b415458cc494e6d1b194f7ac73a34aa55c6fb6c72d1f3"},
|
4436 |
+
{file = "websockets-15.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e413352a921f5ad5d66f9e2869b977e88d5103fc528b6deb8423028a2befd842"},
|
4437 |
+
{file = "websockets-15.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:8561c48b0090993e3b2a54db480cab1d23eb2c5735067213bb90f402806339f5"},
|
4438 |
+
{file = "websockets-15.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:190bc6ef8690cd88232a038d1b15714c258f79653abad62f7048249b09438af3"},
|
4439 |
+
{file = "websockets-15.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:327adab7671f3726b0ba69be9e865bba23b37a605b585e65895c428f6e47e766"},
|
4440 |
+
{file = "websockets-15.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bd8ef197c87afe0a9009f7a28b5dc613bfc585d329f80b7af404e766aa9e8c7"},
|
4441 |
+
{file = "websockets-15.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:789c43bf4a10cd067c24c321238e800b8b2716c863ddb2294d2fed886fa5a689"},
|
4442 |
+
{file = "websockets-15.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7394c0b7d460569c9285fa089a429f58465db930012566c03046f9e3ab0ed181"},
|
4443 |
+
{file = "websockets-15.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ea4f210422b912ebe58ef0ad33088bc8e5c5ff9655a8822500690abc3b1232d"},
|
4444 |
+
{file = "websockets-15.0-py3-none-any.whl", hash = "sha256:51ffd53c53c4442415b613497a34ba0aa7b99ac07f1e4a62db5dcd640ae6c3c3"},
|
4445 |
+
{file = "websockets-15.0.tar.gz", hash = "sha256:ca36151289a15b39d8d683fd8b7abbe26fc50be311066c5f8dcf3cb8cee107ab"},
|
4446 |
+
]
|
4447 |
+
|
4448 |
[[package]]
|
4449 |
name = "yarl"
|
4450 |
version = "1.18.3"
|
|
|
4565 |
[metadata]
|
4566 |
lock-version = "2.1"
|
4567 |
python-versions = "3.11.*"
|
4568 |
+
content-hash = "bfdce157930fe69b3463765ffdc06fe01b94859f816f16c983e28b983231047a"
|
pyproject.toml
CHANGED
@@ -16,6 +16,8 @@ langchain = ">=0.2,<0.3"
|
|
16 |
langchain-core = ">=0.2.38,<0.3"
|
17 |
requests = "^2.32.3"
|
18 |
openai = "^1.64.0"
|
|
|
|
|
19 |
|
20 |
[tool.poetry.group.dev.dependencies]
|
21 |
ipykernel = "^6.29.5"
|
|
|
16 |
langchain-core = ">=0.2.38,<0.3"
|
17 |
requests = "^2.32.3"
|
18 |
openai = "^1.64.0"
|
19 |
+
gradio = "^5.19.0"
|
20 |
+
rootpath = "^0.1.1"
|
21 |
|
22 |
[tool.poetry.group.dev.dependencies]
|
23 |
ipykernel = "^6.29.5"
|