Spaces:
Sleeping
Sleeping
Work in progress
Browse files- .vscode/launch.json +28 -0
- app.py +609 -33
- poetry.lock +669 -1
- pyproject.toml +7 -1
- test_agents.py +10 -3
.vscode/launch.json
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
// Use IntelliSense to learn about possible attributes.
|
3 |
+
// Hover to view descriptions of existing attributes.
|
4 |
+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
5 |
+
"version": "0.2.0",
|
6 |
+
"configurations": [
|
7 |
+
|
8 |
+
{
|
9 |
+
"name": "Python Debugger: Current File",
|
10 |
+
"type": "debugpy",
|
11 |
+
"request": "launch",
|
12 |
+
"program": "${file}",
|
13 |
+
"console": "integratedTerminal"
|
14 |
+
},
|
15 |
+
{
|
16 |
+
"name": "Python with UTF-8",
|
17 |
+
"type": "python",
|
18 |
+
"request": "launch",
|
19 |
+
"program": "${workspaceFolder}/simple_test.py",
|
20 |
+
"console": "integratedTerminal",
|
21 |
+
"pythonArgs": [
|
22 |
+
"-X",
|
23 |
+
"utf8"
|
24 |
+
],
|
25 |
+
"justMyCode": false
|
26 |
+
}
|
27 |
+
]
|
28 |
+
}
|
app.py
CHANGED
@@ -1,16 +1,33 @@
|
|
1 |
-
import textwrap
|
2 |
import re
|
3 |
import os
|
4 |
import gradio as gr
|
5 |
import requests
|
6 |
import inspect
|
7 |
import datetime
|
|
|
|
|
8 |
from textwrap import dedent
|
9 |
import pandas as pd
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
from dotenv import load_dotenv
|
11 |
|
|
|
12 |
# Import smolagents components
|
13 |
-
from smolagents import
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
|
15 |
# Load environment variables from .env file
|
16 |
load_dotenv()
|
@@ -22,10 +39,445 @@ DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
|
|
22 |
# --- Basic Agent Definition ---
|
23 |
# ----- THIS IS WERE YOU CAN BUILD WHAT YOU WANT ------
|
24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
# Initialize the search tool
|
26 |
search_tool = DuckDuckGoSearchTool()
|
27 |
|
28 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
class BasicAgent:
|
30 |
def __init__(self):
|
31 |
print("BasicAgent initialized.")
|
@@ -42,45 +494,171 @@ class BasicAgent:
|
|
42 |
with open(self.filename, 'w', encoding='utf-8') as f:
|
43 |
f.write('') # Create empty file
|
44 |
|
45 |
-
|
46 |
# Initialize the Large Language Model
|
47 |
# The model is used by both agents in this simple setup
|
48 |
-
self.model = HfApiModel(model_id="Qwen/Qwen2.5-Coder-32B-Instruct")
|
49 |
# mistralai/Mixtral-8x7B-Instruct-v0.1
|
|
|
|
|
50 |
#self.model = HfApiModel(model_id="mistralai/Mixtral-8x7B-Instruct-v0.1")
|
51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
|
53 |
# Define the Web Search Agent
|
54 |
# This agent is specialised for searching the web using a specific tool
|
55 |
-
self.web_search_agent = CodeAgent(
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
)
|
65 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
# Define the Manager Agent
|
67 |
# This agent manages tasks and delegates to other agents
|
68 |
self.manager_agent = CodeAgent(
|
69 |
model=self.model, # Assign the model to the manager
|
70 |
-
tools=[
|
71 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
name="manager_agent", # Give the manager agent a name
|
73 |
description="Manages tasks by delegating to other agents.", # Describe its role
|
74 |
additional_authorized_imports=[
|
75 |
"json", "re", "pandas", "numpy", "math", "collections", "itertools", "stat", "statistics", "queue", "unicodedata", "time", "random", "datetime"], # Allow specific imports
|
76 |
verbosity_level=1, # Set verbosity level
|
77 |
max_steps=5, # Limit the steps
|
|
|
|
|
78 |
)
|
79 |
|
80 |
print("MultiAgentSystem initialization complete.")
|
81 |
|
82 |
|
83 |
-
def __call__(self, question: str
|
|
|
84 |
print(f"Agent received question (first 50 chars): {question[:50]}...")
|
85 |
|
86 |
|
@@ -100,23 +678,15 @@ class BasicAgent:
|
|
100 |
|
101 |
{question}
|
102 |
|
103 |
-
|
104 |
-
If needed, use web search to find relevant information.
|
105 |
-
Provide a concise, accurate answer to the question.
|
106 |
|
107 |
-
|
108 |
-
|
|
|
|
|
|
|
|
|
109 |
|
110 |
-
Examples of missing capabilities to check for:
|
111 |
-
- YouTube video analysis (if question mentions YouTube videos)
|
112 |
-
- Image analysis (if question refers to analyzing images)
|
113 |
-
- Audio file processing (if question refers to audio files)
|
114 |
-
- Excel/spreadsheet analysis (if question refers to Excel files)
|
115 |
-
- Chess position analysis (if question refers to chess positions)
|
116 |
-
- Code execution (if question requires running Python code)
|
117 |
-
|
118 |
-
Only use the "Missing Tool Warning" format if you CANNOT answer the question with your available tools.
|
119 |
-
If you can answer the question with web search or your existing knowledge, provide the answer.
|
120 |
""")
|
121 |
|
122 |
manager_agent_response = "I apologize, but I couldn't find an answer to this question."
|
@@ -144,7 +714,7 @@ class BasicAgent:
|
|
144 |
return manager_agent_response
|
145 |
|
146 |
|
147 |
-
def run_and_submit_all(
|
148 |
"""
|
149 |
Fetches all questions, runs the BasicAgent on them, submits all answers,
|
150 |
and displays the results.
|
@@ -201,11 +771,17 @@ def run_and_submit_all( profile: gr.OAuthProfile | None):
|
|
201 |
for item in questions_data:
|
202 |
task_id = item.get("task_id")
|
203 |
question_text = item.get("question")
|
|
|
|
|
|
|
|
|
|
|
204 |
if not task_id or question_text is None:
|
205 |
print(f"Skipping item with missing task_id or question: {item}")
|
206 |
continue
|
|
|
207 |
try:
|
208 |
-
submitted_answer = agent(question_text)
|
209 |
answers_payload.append({"task_id": task_id, "submitted_answer": submitted_answer})
|
210 |
results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": submitted_answer})
|
211 |
except Exception as e:
|
|
|
|
|
1 |
import re
|
2 |
import os
|
3 |
import gradio as gr
|
4 |
import requests
|
5 |
import inspect
|
6 |
import datetime
|
7 |
+
from markdownify import markdownify
|
8 |
+
import textwrap
|
9 |
from textwrap import dedent
|
10 |
import pandas as pd
|
11 |
+
import wikipedia
|
12 |
+
import requests
|
13 |
+
from requests.exceptions import RequestException
|
14 |
+
from youtube_transcript_api import YouTubeTranscriptApi
|
15 |
+
from urllib.parse import urlparse, parse_qs
|
16 |
+
|
17 |
from dotenv import load_dotenv
|
18 |
|
19 |
+
|
20 |
# Import smolagents components
|
21 |
+
from smolagents import (
|
22 |
+
tool,
|
23 |
+
CodeAgent,
|
24 |
+
HfApiModel,
|
25 |
+
DuckDuckGoSearchTool,
|
26 |
+
FinalAnswerTool,
|
27 |
+
OpenAIServerModel,
|
28 |
+
ToolCallingAgent
|
29 |
+
)
|
30 |
+
from pypdf import PdfReader
|
31 |
|
32 |
# Load environment variables from .env file
|
33 |
load_dotenv()
|
|
|
39 |
# --- Basic Agent Definition ---
|
40 |
# ----- THIS IS WERE YOU CAN BUILD WHAT YOU WANT ------
|
41 |
|
42 |
+
# Get the directory of the current script
|
43 |
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
44 |
+
|
45 |
+
# Create path to the validation directory
|
46 |
+
GAIA_LEVEL1_VALIDATION_FILES_PATH = os.path.join(
|
47 |
+
current_dir, "GAIA_level1", "validation")
|
48 |
+
|
49 |
# Initialize the search tool
|
50 |
search_tool = DuckDuckGoSearchTool()
|
51 |
|
52 |
|
53 |
+
@tool
|
54 |
+
def load_docx_file(file_path: str) -> str:
|
55 |
+
"""
|
56 |
+
Loads and returns text and tables from a DOCX file in their original order.
|
57 |
+
|
58 |
+
Args:
|
59 |
+
file_path: Path to the .docx file
|
60 |
+
|
61 |
+
Returns:
|
62 |
+
String with paragraphs and markdown-formatted tables in document order.
|
63 |
+
"""
|
64 |
+
from docx import Document
|
65 |
+
from docx.table import Table
|
66 |
+
from docx.text.paragraph import Paragraph
|
67 |
+
|
68 |
+
doc = Document(file_path)
|
69 |
+
content = []
|
70 |
+
table_count = 0
|
71 |
+
|
72 |
+
# Helper function to convert a table to markdown
|
73 |
+
def table_to_markdown(table, table_idx):
|
74 |
+
rows = []
|
75 |
+
for row in table.rows:
|
76 |
+
cells = [cell.text.strip() for cell in row.cells]
|
77 |
+
rows.append("| " + " | ".join(cells) + " |")
|
78 |
+
# Add markdown separator after header if table has at least one row
|
79 |
+
if rows:
|
80 |
+
separator = "| " + \
|
81 |
+
" | ".join(["---"] * len(table.rows[0].cells)) + " |"
|
82 |
+
markdown = f"\n### Table {table_idx}\n" + \
|
83 |
+
"\n".join([rows[0], separator] + rows[1:])
|
84 |
+
return markdown
|
85 |
+
return ""
|
86 |
+
|
87 |
+
# Iterate through the document's block elements in order
|
88 |
+
for block in doc.element.body:
|
89 |
+
if block.tag.endswith('}p'): # Paragraph
|
90 |
+
para = Paragraph(block, doc)
|
91 |
+
text = para.text.strip()
|
92 |
+
if text:
|
93 |
+
content.append(text)
|
94 |
+
elif block.tag.endswith('}tbl'): # Table
|
95 |
+
table_count += 1
|
96 |
+
table = Table(block, doc)
|
97 |
+
markdown = table_to_markdown(table, table_count)
|
98 |
+
if markdown:
|
99 |
+
content.append(markdown)
|
100 |
+
|
101 |
+
return "\n\n".join(content)
|
102 |
+
|
103 |
+
|
104 |
+
@tool
|
105 |
+
def load_pdf_file(file_path: str) -> str:
|
106 |
+
"""
|
107 |
+
Loads and returns text content from a PDF file.
|
108 |
+
|
109 |
+
Args:
|
110 |
+
file_path (str): The path to the .pdf file.
|
111 |
+
|
112 |
+
Returns:
|
113 |
+
str: The extracted text content from the PDF file. Returns an error message if the file cannot be processed.
|
114 |
+
"""
|
115 |
+
extracted_text = []
|
116 |
+
try:
|
117 |
+
# Check if the file exists
|
118 |
+
if not os.path.exists(file_path):
|
119 |
+
return f"Error: PDF file not found at path: {file_path}"
|
120 |
+
|
121 |
+
# Open the PDF file
|
122 |
+
reader = PdfReader(file_path)
|
123 |
+
|
124 |
+
# Iterate through each page and extract text
|
125 |
+
for page_num, page in enumerate(reader.pages):
|
126 |
+
text = page.extract_text()
|
127 |
+
if text: # Ensure text was extracted
|
128 |
+
extracted_text.append(f"--- Page {page_num + 1} ---\n{text.strip()}")
|
129 |
+
else:
|
130 |
+
extracted_text.append(f"--- Page {page_num + 1} --- (No text extracted)")
|
131 |
+
|
132 |
+
# Join the text from all pages
|
133 |
+
full_text = "\n\n".join(extracted_text)
|
134 |
+
if not full_text.strip():
|
135 |
+
return f"Warning: No text could be extracted from the PDF file: {file_path}"
|
136 |
+
return full_text
|
137 |
+
|
138 |
+
except Exception as e:
|
139 |
+
# Catch any other exceptions during PDF processing
|
140 |
+
return f"Error processing PDF file '{file_path}': {type(e).__name__}: {e}"
|
141 |
+
|
142 |
+
@tool
|
143 |
+
def load_xlsx_file_as_markdown(file_path: str) -> str:
|
144 |
+
"""
|
145 |
+
Loads data from all sheets of an XLSX file and returns it as a single
|
146 |
+
markdown-formatted string.
|
147 |
+
|
148 |
+
Args:
|
149 |
+
file_path (str): The path to the .xlsx file.
|
150 |
+
|
151 |
+
Returns:
|
152 |
+
str: A string containing the data from all sheets, formatted as markdown tables.
|
153 |
+
Returns an error message if the file cannot be processed.
|
154 |
+
"""
|
155 |
+
extracted_content = []
|
156 |
+
try:
|
157 |
+
# Check if the file exists
|
158 |
+
if not os.path.exists(file_path):
|
159 |
+
return f"Error: XLSX file not found at path: {file_path}"
|
160 |
+
|
161 |
+
# Read all sheets from the Excel file into a dictionary of DataFrames
|
162 |
+
# sheet_name=None reads all sheets
|
163 |
+
excel_data = pd.read_excel(file_path, sheet_name=None)
|
164 |
+
|
165 |
+
if not excel_data:
|
166 |
+
return f"Warning: No sheets found or the XLSX file is empty: {file_path}"
|
167 |
+
|
168 |
+
# Iterate through each sheet and convert its DataFrame to markdown
|
169 |
+
for sheet_name, df in excel_data.items():
|
170 |
+
if not df.empty:
|
171 |
+
# Convert DataFrame to markdown table string, excluding the index
|
172 |
+
markdown_table = df.to_markdown(index=False)
|
173 |
+
extracted_content.append(f"--- Sheet: {sheet_name} ---\n{markdown_table}")
|
174 |
+
else:
|
175 |
+
extracted_content.append(f"--- Sheet: {sheet_name} --- (Sheet is empty)")
|
176 |
+
|
177 |
+
# Join the content from all sheets
|
178 |
+
full_content = "\n\n".join(extracted_content)
|
179 |
+
if not full_content.strip():
|
180 |
+
return f"Warning: No data could be extracted from the XLSX file: {file_path}"
|
181 |
+
return full_content
|
182 |
+
|
183 |
+
except FileNotFoundError:
|
184 |
+
return f"Error: XLSX file not found at path: {file_path}"
|
185 |
+
except Exception as e:
|
186 |
+
# Catch pandas-specific errors or other general exceptions
|
187 |
+
return f"Error processing XLSX file '{file_path}': {type(e).__name__}: {e}"
|
188 |
+
|
189 |
+
|
190 |
+
@tool
|
191 |
+
def load_xlsx_file_as_dataframe(file_path: str) -> pd.DataFrame:
|
192 |
+
"""
|
193 |
+
Loads data from the first sheet of an XLSX file and returns it as a pandas DataFrame.
|
194 |
+
|
195 |
+
Args:
|
196 |
+
file_path (str): The path to the .xlsx file.
|
197 |
+
|
198 |
+
Returns:
|
199 |
+
pd.DataFrame: A pandas DataFrame containing the data from the first sheet.
|
200 |
+
Returns an empty DataFrame if the file is empty or cannot be processed.
|
201 |
+
"""
|
202 |
+
try:
|
203 |
+
# Check if the file exists
|
204 |
+
if not os.path.exists(file_path):
|
205 |
+
print(
|
206 |
+
f"Warning: XLSX file not found at path: {file_path}. Returning empty DataFrame.")
|
207 |
+
return pd.DataFrame()
|
208 |
+
|
209 |
+
# Read the first sheet (index 0) from the Excel file
|
210 |
+
# If the first sheet is empty or doesn't exist, it might raise an error or return empty
|
211 |
+
# Using try-except to handle cases where the sheet might not exist or is unreadable
|
212 |
+
df = pd.read_excel(file_path, sheet_name=0)
|
213 |
+
|
214 |
+
# Return the DataFrame (it will be empty if the sheet was empty)
|
215 |
+
return df
|
216 |
+
|
217 |
+
except FileNotFoundError:
|
218 |
+
# Return empty DataFrame if file not found (alternative to raising error)
|
219 |
+
print(
|
220 |
+
f"Warning: XLSX file not found at path: {file_path}. Returning empty DataFrame.")
|
221 |
+
return pd.DataFrame()
|
222 |
+
except Exception as e:
|
223 |
+
# Catch pandas-specific errors or other general exceptions
|
224 |
+
print(
|
225 |
+
f"Error processing XLSX file '{file_path}': {type(e).__name__}: {e}. Returning empty DataFrame.")
|
226 |
+
return pd.DataFrame() # Return empty DataFrame on error
|
227 |
+
|
228 |
+
|
229 |
+
@tool
|
230 |
+
def visit_webpage(url: str) -> str:
|
231 |
+
"""Visits a webpage at the given URL and returns its content as a markdown string.
|
232 |
+
|
233 |
+
Args:
|
234 |
+
url: The URL of the webpage to visit.
|
235 |
+
|
236 |
+
Returns:
|
237 |
+
The content of the webpage converted to Markdown, or an error message if the request fails.
|
238 |
+
"""
|
239 |
+
try:
|
240 |
+
# Send a GET request to the URL
|
241 |
+
response = requests.get(url, timeout=10)
|
242 |
+
response.raise_for_status() # Raise an exception for bad status codes
|
243 |
+
|
244 |
+
# Convert the HTML content to Markdown
|
245 |
+
markdown_content = markdownify(response.text).strip()
|
246 |
+
|
247 |
+
# Remove multiple line breaks
|
248 |
+
markdown_content = re.sub(r"\n{3,}", "\n\n", markdown_content)
|
249 |
+
|
250 |
+
return markdown_content
|
251 |
+
|
252 |
+
except RequestException as e:
|
253 |
+
return f"Error fetching the webpage: {str(e)}"
|
254 |
+
except Exception as e:
|
255 |
+
return f"An unexpected error occurred: {str(e)}"
|
256 |
+
|
257 |
+
|
258 |
+
@tool
|
259 |
+
def query_wikipedia(query: str, sentences: int = 5) -> str:
|
260 |
+
"""
|
261 |
+
Searches Wikipedia for a given query and returns a summary of the most relevant page.
|
262 |
+
Use this tool especially when Wikipedia is mentioned in the context.
|
263 |
+
|
264 |
+
Args:
|
265 |
+
query (str): The search term or question for Wikipedia.
|
266 |
+
sentences (int): The desired number of sentences for the summary (default: 5).
|
267 |
+
|
268 |
+
Returns:
|
269 |
+
str: A summary of the Wikipedia page, a list of options if the query is ambiguous,
|
270 |
+
or an error message if the page is not found or another error occurs.
|
271 |
+
"""
|
272 |
+
try:
|
273 |
+
# Set language if needed, defaults to English
|
274 |
+
# wikipedia.set_lang("en")
|
275 |
+
|
276 |
+
# auto_suggest=False prevents Wikipedia from guessing if the exact title isn't found.
|
277 |
+
# We handle potential suggestions in the PageError exception if needed.
|
278 |
+
summary = wikipedia.summary(
|
279 |
+
query, sentences=sentences, auto_suggest=False)
|
280 |
+
|
281 |
+
# Optionally, get the actual page title found
|
282 |
+
try:
|
283 |
+
page_title = wikipedia.page(query, auto_suggest=False).title
|
284 |
+
return f"Wikipedia Summary for '{page_title}':\n\n{summary}"
|
285 |
+
except wikipedia.exceptions.PageError:
|
286 |
+
# If getting the page title fails after summary worked (unlikely but possible)
|
287 |
+
return f"Wikipedia Summary (Query: '{query}'):\n\n{summary}"
|
288 |
+
except wikipedia.exceptions.DisambiguationError as e:
|
289 |
+
# If getting the page title causes disambiguation after summary worked
|
290 |
+
return f"Wikipedia Summary (Query: '{query}'):\n\n{summary}\n\nNote: Query might be ambiguous. Options include: {e.options}"
|
291 |
+
|
292 |
+
except wikipedia.exceptions.DisambiguationError as e:
|
293 |
+
# Handle cases where the query matches multiple pages
|
294 |
+
options_list = "\n - ".join(e.options[:10]) # Limit to 10 options
|
295 |
+
return (f"Wikipedia query '{query}' is ambiguous. "
|
296 |
+
f"Please be more specific or choose from these options:\n - {options_list}")
|
297 |
+
|
298 |
+
except wikipedia.exceptions.PageError:
|
299 |
+
# Handle cases where the page doesn't exist
|
300 |
+
# Try searching for suggestions
|
301 |
+
search_results = wikipedia.search(query, results=5)
|
302 |
+
if search_results:
|
303 |
+
suggestions = "\n - ".join(search_results)
|
304 |
+
return (f"Wikipedia page for '{query}' not found. "
|
305 |
+
f"Did you mean one of these?\n - {suggestions}")
|
306 |
+
else:
|
307 |
+
return f"Wikipedia page for '{query}' not found, and no suggestions available."
|
308 |
+
|
309 |
+
except Exception as e:
|
310 |
+
# Handle other potential errors (network issues, etc.)
|
311 |
+
return f"Error querying Wikipedia for '{query}': {type(e).__name__}: {e}"
|
312 |
+
|
313 |
+
|
314 |
+
@tool
|
315 |
+
def openai_reasoning(question: str) -> str:
|
316 |
+
"""
|
317 |
+
Uses OpenAI's GPT-4o model for in-depth reasoning and analysis of complex questions.
|
318 |
+
Use this for riddles, puzzles, or questions that require deep thinking rather than code execution.
|
319 |
+
|
320 |
+
Args:
|
321 |
+
question: The question or problem to analyze using GPT-4o's reasoning capabilities.
|
322 |
+
|
323 |
+
Returns:
|
324 |
+
The reasoned answer to the question.
|
325 |
+
"""
|
326 |
+
try:
|
327 |
+
# Create a specialized reasoning model instance
|
328 |
+
reasoning_model = OpenAIServerModel(
|
329 |
+
"gpt-4o",
|
330 |
+
max_tokens=1024,
|
331 |
+
temperature=0.05
|
332 |
+
)
|
333 |
+
|
334 |
+
# Craft effective system and user prompts
|
335 |
+
messages = [
|
336 |
+
{
|
337 |
+
"role": "system",
|
338 |
+
"content": """You are an expert reasoning engine specialized in solving complex problems, puzzles and riddles.
|
339 |
+
When tackling problems:
|
340 |
+
1. Understand the question thoroughly
|
341 |
+
2. Break down complex problems into parts
|
342 |
+
3. Consider multiple approaches before deciding on a solution
|
343 |
+
4. Think step by step
|
344 |
+
5. Provide only the final answer unless asked for reasoning
|
345 |
+
|
346 |
+
Be precise and concise in your final response."""
|
347 |
+
},
|
348 |
+
{
|
349 |
+
"role": "user",
|
350 |
+
"content": question
|
351 |
+
}
|
352 |
+
]
|
353 |
+
|
354 |
+
# Get the response
|
355 |
+
response = reasoning_model(messages)
|
356 |
+
|
357 |
+
# Return just the content from the response
|
358 |
+
return response.content
|
359 |
+
|
360 |
+
except Exception as e:
|
361 |
+
return f"Error when processing with reasoning model: {str(e)}"
|
362 |
+
|
363 |
+
|
364 |
+
@tool
|
365 |
+
def extract_youtube_id(url: str) -> str:
|
366 |
+
"""
|
367 |
+
Extract the YouTube video ID from a URL.
|
368 |
+
|
369 |
+
Args:
|
370 |
+
url: The YouTube video URL (may contain spaces or formatting issues)
|
371 |
+
|
372 |
+
Returns:
|
373 |
+
The YouTube video ID
|
374 |
+
"""
|
375 |
+
# Clean the URL by removing extra spaces
|
376 |
+
cleaned_url = url.replace(" ", "")
|
377 |
+
|
378 |
+
try:
|
379 |
+
# Handle different YouTube URL formats
|
380 |
+
parsed_url = urlparse(cleaned_url)
|
381 |
+
|
382 |
+
# Check for video ID in query parameters (youtube.com/watch?v=VIDEO_ID)
|
383 |
+
query_params = parse_qs(parsed_url.query)
|
384 |
+
if 'v' in query_params:
|
385 |
+
return query_params['v'][0]
|
386 |
+
|
387 |
+
# Check for youtu.be short links (youtu.be/VIDEO_ID)
|
388 |
+
if 'youtu.be' in parsed_url.netloc:
|
389 |
+
path = parsed_url.path.strip('/')
|
390 |
+
return path
|
391 |
+
|
392 |
+
# Check for embedded format (youtube.com/embed/VIDEO_ID)
|
393 |
+
if '/embed/' in parsed_url.path:
|
394 |
+
return parsed_url.path.split('/embed/')[1]
|
395 |
+
|
396 |
+
# If URL parsing fails, try regex patterns
|
397 |
+
patterns = [
|
398 |
+
r'(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/|youtube\.com\/v\/|youtube\.com\/e\/|youtube\.com\/watch\?.*v=|youtube\.com\/watch\?.*&v=)([^&\s]+)',
|
399 |
+
r'(?:youtube\.com\/shorts\/)([^&\s]+)',
|
400 |
+
r'v=([^&\s]+)'
|
401 |
+
]
|
402 |
+
|
403 |
+
for pattern in patterns:
|
404 |
+
match = re.search(pattern, cleaned_url)
|
405 |
+
if match:
|
406 |
+
return match.group(1)
|
407 |
+
|
408 |
+
# Try to extract directly from the raw string as a last resort
|
409 |
+
if 'v=' in cleaned_url:
|
410 |
+
v_index = cleaned_url.find('v=')
|
411 |
+
video_id = cleaned_url[v_index +
|
412 |
+
2:].split('&')[0].split('#')[0].split('?')[0].split('/')[0]
|
413 |
+
# YouTube IDs are typically 11 characters
|
414 |
+
if video_id and len(video_id) in range(10, 12):
|
415 |
+
return video_id
|
416 |
+
|
417 |
+
return "Could not extract a valid YouTube video ID from the provided URL."
|
418 |
+
|
419 |
+
except Exception as e:
|
420 |
+
# Attempt direct extraction if parsing fails
|
421 |
+
if 'v=' in url:
|
422 |
+
parts = url.split('v=')
|
423 |
+
if len(parts) > 1:
|
424 |
+
return parts[1].split('&')[0].split('#')[0].strip()
|
425 |
+
|
426 |
+
return f"Error extracting YouTube ID: {str(e)}"
|
427 |
+
|
428 |
+
|
429 |
+
@tool
|
430 |
+
def get_youtube_transcript(video_id: str, language: str = "en") -> str:
|
431 |
+
"""
|
432 |
+
Get the transcript of a YouTube video.
|
433 |
+
|
434 |
+
Args:
|
435 |
+
video_id: The YouTube video ID
|
436 |
+
language: The language code for the transcript (default: 'en' for English)
|
437 |
+
|
438 |
+
Returns:
|
439 |
+
The transcript text of the YouTube video
|
440 |
+
"""
|
441 |
+
try:
|
442 |
+
transcript_list = YouTubeTranscriptApi.get_transcript(
|
443 |
+
video_id, languages=[language])
|
444 |
+
|
445 |
+
# Combine all transcript segments into a single text
|
446 |
+
transcript_text = ""
|
447 |
+
for segment in transcript_list:
|
448 |
+
transcript_text += segment['text'] + " "
|
449 |
+
|
450 |
+
return transcript_text.strip()
|
451 |
+
|
452 |
+
except Exception as e:
|
453 |
+
return f"Error retrieving transcript: {str(e)}"
|
454 |
+
|
455 |
+
# Tool to analyze the transcript and answer a question
|
456 |
+
@tool
|
457 |
+
def analyze_transcript(transcript: str, question: str) -> str:
|
458 |
+
"""
|
459 |
+
Analyze the provided video transcript to answer a specific question.
|
460 |
+
|
461 |
+
Args:
|
462 |
+
transcript: The full transcript text of the video
|
463 |
+
question: The specific question to answer based on the transcript
|
464 |
+
|
465 |
+
Returns:
|
466 |
+
The answer to the question based on the transcript content
|
467 |
+
"""
|
468 |
+
# This tool leverages the LLM's understanding capability
|
469 |
+
# The implementation is simple because the LLM will do the analysis
|
470 |
+
if not transcript or transcript.startswith("Error"):
|
471 |
+
return f"Unable to analyze transcript: {transcript}"
|
472 |
+
|
473 |
+
# Check if transcript has enough content to analyze
|
474 |
+
if len(transcript.split()) < 10:
|
475 |
+
return "The transcript is too short or incomplete to properly analyze."
|
476 |
+
|
477 |
+
return "TRANSCRIPT_ANALYSIS_PLACEHOLDER" # This will be replaced by LLM reasoning
|
478 |
+
|
479 |
+
|
480 |
+
|
481 |
class BasicAgent:
|
482 |
def __init__(self):
|
483 |
print("BasicAgent initialized.")
|
|
|
494 |
with open(self.filename, 'w', encoding='utf-8') as f:
|
495 |
f.write('') # Create empty file
|
496 |
|
|
|
497 |
# Initialize the Large Language Model
|
498 |
# The model is used by both agents in this simple setup
|
|
|
499 |
# mistralai/Mixtral-8x7B-Instruct-v0.1
|
500 |
+
# meta-llama/Llama-3.3-70B-Instruct
|
501 |
+
self.model = HfApiModel(model_id="Qwen/Qwen2.5-Coder-32B-Instruct")
|
502 |
#self.model = HfApiModel(model_id="mistralai/Mixtral-8x7B-Instruct-v0.1")
|
503 |
|
504 |
+
# For TGI container
|
505 |
+
# self.model = OpenAIServerModel(
|
506 |
+
# api_base="http://localhost:8080/v1", # If using TGI container
|
507 |
+
# api_key="not-needed", # Local servers usually don't need API keys
|
508 |
+
# model_id="Qwen/Qwen3-1.7B"
|
509 |
+
# )
|
510 |
+
# self.model = LiteLLMModel(
|
511 |
+
# model_name="ollama/qwen3:1.7b", # Prefix with 'ollama/' to use the Ollama provider
|
512 |
+
# api_base="http://localhost:11434", # Your custom Ollama port
|
513 |
+
# flatten_messages_as_text=True,
|
514 |
+
# api_key="", # Try passing an empty API key
|
515 |
+
# )
|
516 |
+
|
517 |
+
|
518 |
+
#print(self.model)
|
519 |
+
#print(f"Model Name: {self.model.model_name}")
|
520 |
+
#print(f"API Base: {self.model.api_base}")
|
521 |
|
522 |
# Define the Web Search Agent
|
523 |
# This agent is specialised for searching the web using a specific tool
|
524 |
+
# self.web_search_agent = CodeAgent(
|
525 |
+
# model=self.model, # Assign the model to the agent [
|
526 |
+
# tools=[DuckDuckGoSearchTool(),
|
527 |
+
# FinalAnswerTool()], # Provide the web search tool
|
528 |
+
# name="web_search_agent", # Give the agent a name
|
529 |
+
# # Describe its capability [
|
530 |
+
# description="""Searches the web for information.
|
531 |
+
|
532 |
+
# In the end you have to return a final answer using the `final_answer` tool.""",
|
533 |
+
# verbosity_level=1, # Set verbosity level for logging
|
534 |
+
# max_steps=3, # Limit the steps the agent can take
|
535 |
+
# planning_interval=2,
|
536 |
+
# )
|
537 |
+
|
538 |
+
self.web_search_specialist_agent = ToolCallingAgent(
|
539 |
+
model=self.model, # Or any other compatible model instance
|
540 |
+
tools=[
|
541 |
+
DuckDuckGoSearchTool(),
|
542 |
+
query_wikipedia, # Make sure this is the @tool decorated function
|
543 |
+
visit_webpage,
|
544 |
+
FinalAnswerTool()
|
545 |
+
],
|
546 |
+
name="web_search_specialist_agent",
|
547 |
+
description=textwrap.dedent("""\
|
548 |
+
This agent specializes in finding information on the web and answering questions based on web content.
|
549 |
+
|
550 |
+
**Core Strategy:**
|
551 |
+
1. **Understand & Plan:** For any query, especially complex ones or those requiring information from specific sources, first formulate a clear, step-by-step plan. Think about what information is needed and which tools are best for each step.
|
552 |
+
2. **Execute & Adapt:** Execute your plan step-by-step. After each step, review the results and adapt your plan if necessary.
|
553 |
+
3. **Extract & Synthesize:** Once relevant information is found (e.g., on a webpage), don't just return raw data. Carefully extract the specific piece of information that answers the original question.
|
554 |
+
|
555 |
+
**Tool Usage Guidelines:**
|
556 |
+
- Use the `DuckDuckGoSearchTool` for general web searches, to find broad information, current events, or to locate specific websites or pages when the URL is unknown.
|
557 |
+
- If `DuckDuckGoSearchTool` returns URLs, evaluate them. If a URL seems promising for answering the question, a subsequent step in your plan should be to use the `visit_webpage` tool.
|
558 |
+
- Use the `query_wikipedia` tool when the question specifically asks for information from Wikipedia, or when Wikipedia is clearly the most authoritative source (e.g., for definitions, historical events, biographical information).
|
559 |
+
- Use the `visit_webpage` tool to get the content of a specific URL.
|
560 |
+
- **Crucially**: After using `visit_webpage`, your next step is to analyze its content and extract the precise information needed to answer the query. Do not just output the entire page content as the answer.
|
561 |
+
- If the query explicitly mentions a specific website (e.g., "Merriam-Webster", "Cornell Law School website"), your plan should prioritize searching that site.
|
562 |
+
- Use `DuckDuckGoSearchTool` with site-specific queries (e.g., "site:merriam-webster.com <your actual query terms>").
|
563 |
+
- If a direct URL from that site is found or can be inferred, use `visit_webpage` to get the content, then extract the specific information.
|
564 |
+
|
565 |
+
**Search & Iteration Tactics:**
|
566 |
+
- Before taking a new action, review the information and results from your previous steps. Use this history to inform your decisions and refine your plan.
|
567 |
+
- Do not repeat the exact same or very similar queries to the same tool if the initial attempt did not yield useful information. Use knowledge from past attempts to refine your strategy.
|
568 |
+
- If information is not found, consider: rephrasing your query, trying a different aspect of the question, or using an alternative search tool, always considering what you've learned.
|
569 |
+
- Be aware of date format sensitivity in searches. If a date is part of your query, try alternative formats (e.g., "27 July 2010" vs "27/7/2010").
|
570 |
+
|
571 |
+
**Final Output:**
|
572 |
+
- In the end, you must return a final answer using the `final_answer` tool, based on the information you have gathered and processed according to your plan.
|
573 |
+
"""),
|
574 |
+
verbosity_level=1, # Adjust as needed
|
575 |
+
max_steps=3, # Adjust as needed
|
576 |
+
planning_interval=1 # Adjust as needed
|
577 |
)
|
578 |
|
579 |
+
|
580 |
+
# Define your model
|
581 |
+
self.code_model = "gpt-4.1" # or whatever model you're using
|
582 |
+
reasoning_model = OpenAIServerModel(
|
583 |
+
self.code_model,
|
584 |
+
max_completion_tokens=8096
|
585 |
+
)
|
586 |
+
|
587 |
+
# Create your agent with the reasoning tool and other tools
|
588 |
+
self.reasoning_agent = ToolCallingAgent(
|
589 |
+
model=reasoning_model,
|
590 |
+
tools=[openai_reasoning, FinalAnswerTool()],
|
591 |
+
planning_interval=2,
|
592 |
+
max_steps=5,
|
593 |
+
verbosity_level=1,
|
594 |
+
name="reasoning_agent",
|
595 |
+
description="""Solves complex problems riddles and puzzles through reasoning rather than code execution.
|
596 |
+
In the end you have to return a final answer using the `final_answer` tool."""
|
597 |
+
)
|
598 |
+
|
599 |
+
self.youtube_qa_agent = ToolCallingAgent(
|
600 |
+
model=reasoning_model, #self.model,
|
601 |
+
tools=[extract_youtube_id, get_youtube_transcript,
|
602 |
+
analyze_transcript, FinalAnswerTool()],
|
603 |
+
name="youtube_qa_agent",
|
604 |
+
planning_interval=2,
|
605 |
+
max_steps=5,
|
606 |
+
verbosity_level=1,
|
607 |
+
description=textwrap.dedent("""\
|
608 |
+
You are an expert assistant that can answer questions about YouTube videos by analyzing their transcripts.
|
609 |
+
|
610 |
+
When given a YouTube URL and a question, follow these steps IN ORDER:
|
611 |
+
1. Extract the video ID from the URL using the `extract_youtube_id` tool
|
612 |
+
2. Retrieve the transcript of the video using the `get_youtube_transcript` tool
|
613 |
+
3. ALWAYS analyze the transcript to find the answer to the question using the `analyze_transcript` tool
|
614 |
+
4. Provide a clear and concise answer based solely on the transcript content
|
615 |
+
5. Return your final answer using the `final_answer` tool
|
616 |
+
|
617 |
+
IMPORTANT INSTRUCTIONS:
|
618 |
+
- After getting the transcript, you MUST use the analyze_transcript tool. DO NOT call get_youtube_transcript twice.
|
619 |
+
- Never skip the analysis step - it's crucial for answering the question correctly.
|
620 |
+
- Each tool must be used in the correct sequence - ID extraction, then transcript retrieval, then analysis.
|
621 |
+
|
622 |
+
If you cannot find a direct answer to the question in the transcript:
|
623 |
+
- Acknowledge that you couldn't find a specific answer
|
624 |
+
- Provide the transcript for reference
|
625 |
+
- Suggest that the user might want to use a different approach
|
626 |
+
|
627 |
+
DO NOT run the same tool with the same arguments multiple times.
|
628 |
+
DO NOT make up information that is not in the transcript.
|
629 |
+
""")
|
630 |
+
)
|
631 |
+
|
632 |
+
|
633 |
# Define the Manager Agent
|
634 |
# This agent manages tasks and delegates to other agents
|
635 |
self.manager_agent = CodeAgent(
|
636 |
model=self.model, # Assign the model to the manager
|
637 |
+
tools=[load_docx_file,
|
638 |
+
load_pdf_file,
|
639 |
+
load_xlsx_file_as_dataframe,
|
640 |
+
load_xlsx_file_as_markdown,
|
641 |
+
query_wikipedia,
|
642 |
+
FinalAnswerTool()],
|
643 |
+
# Specify the agents this manager oversees
|
644 |
+
managed_agents=[self.web_search_specialist_agent,
|
645 |
+
self.reasoning_agent,
|
646 |
+
self.youtube_qa_agent],
|
647 |
name="manager_agent", # Give the manager agent a name
|
648 |
description="Manages tasks by delegating to other agents.", # Describe its role
|
649 |
additional_authorized_imports=[
|
650 |
"json", "re", "pandas", "numpy", "math", "collections", "itertools", "stat", "statistics", "queue", "unicodedata", "time", "random", "datetime"], # Allow specific imports
|
651 |
verbosity_level=1, # Set verbosity level
|
652 |
max_steps=5, # Limit the steps
|
653 |
+
planning_interval=1,
|
654 |
+
#final_answer_checks=[]
|
655 |
)
|
656 |
|
657 |
print("MultiAgentSystem initialization complete.")
|
658 |
|
659 |
|
660 |
+
def __call__(self, question: str,
|
661 |
+
file_name: str = None) -> str:
|
662 |
print(f"Agent received question (first 50 chars): {question[:50]}...")
|
663 |
|
664 |
|
|
|
678 |
|
679 |
{question}
|
680 |
|
681 |
+
using the following file: '{file_name}' if provided.
|
|
|
|
|
682 |
|
683 |
+
Please analyze this question and determine the best approach to answer it
|
684 |
+
using the available agents and tools.
|
685 |
+
Note that you are provided with a special agent to resolve logical problems, riddles and puzzles named "reasoning_agent".
|
686 |
+
|
687 |
+
If needed, use any of the available tools to find or load the relevant information.
|
688 |
+
Provide a concise, accurate answer to the question.
|
689 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
690 |
""")
|
691 |
|
692 |
manager_agent_response = "I apologize, but I couldn't find an answer to this question."
|
|
|
714 |
return manager_agent_response
|
715 |
|
716 |
|
717 |
+
def run_and_submit_all(profile: gr.OAuthProfile | None):
|
718 |
"""
|
719 |
Fetches all questions, runs the BasicAgent on them, submits all answers,
|
720 |
and displays the results.
|
|
|
771 |
for item in questions_data:
|
772 |
task_id = item.get("task_id")
|
773 |
question_text = item.get("question")
|
774 |
+
file_name = item.get("file_name", None)
|
775 |
+
if file_name:
|
776 |
+
file_name = os.path.join(GAIA_LEVEL1_VALIDATION_FILES_PATH, file_name)
|
777 |
+
|
778 |
+
continue
|
779 |
if not task_id or question_text is None:
|
780 |
print(f"Skipping item with missing task_id or question: {item}")
|
781 |
continue
|
782 |
+
|
783 |
try:
|
784 |
+
submitted_answer = agent(question_text, file_name)
|
785 |
answers_payload.append({"task_id": task_id, "submitted_answer": submitted_answer})
|
786 |
results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": submitted_answer})
|
787 |
except Exception as e:
|
poetry.lock
CHANGED
@@ -559,6 +559,18 @@ tests-numpy2 = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (>=7.
|
|
559 |
torch = ["torch"]
|
560 |
vision = ["Pillow (>=9.4.0)"]
|
561 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
562 |
[[package]]
|
563 |
name = "dill"
|
564 |
version = "0.3.8"
|
@@ -575,6 +587,18 @@ files = [
|
|
575 |
graph = ["objgraph (>=1.7.2)"]
|
576 |
profile = ["gprof2dot (>=2022.7.29)"]
|
577 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
578 |
[[package]]
|
579 |
name = "duckduckgo-search"
|
580 |
version = "8.0.1"
|
@@ -595,6 +619,18 @@ primp = ">=0.15.0"
|
|
595 |
[package.extras]
|
596 |
dev = ["mypy (>=1.14.1)", "pytest (>=8.3.4)", "pytest-dependency (>=0.6.0)", "ruff (>=0.9.2)"]
|
597 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
598 |
[[package]]
|
599 |
name = "fastapi"
|
600 |
version = "0.115.12"
|
@@ -1062,6 +1098,30 @@ files = [
|
|
1062 |
[package.extras]
|
1063 |
all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"]
|
1064 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1065 |
[[package]]
|
1066 |
name = "itsdangerous"
|
1067 |
version = "2.2.0"
|
@@ -1092,6 +1152,158 @@ MarkupSafe = ">=2.0"
|
|
1092 |
[package.extras]
|
1093 |
i18n = ["Babel (>=2.7)"]
|
1094 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1095 |
[[package]]
|
1096 |
name = "lxml"
|
1097 |
version = "5.4.0"
|
@@ -1566,6 +1778,48 @@ files = [
|
|
1566 |
{file = "numpy-2.2.5.tar.gz", hash = "sha256:a9c0d994680cd991b1cb772e8b297340085466a6fe964bc9d4e80f5e2f43c291"},
|
1567 |
]
|
1568 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1569 |
[[package]]
|
1570 |
name = "orjson"
|
1571 |
version = "3.10.16"
|
@@ -2251,6 +2505,26 @@ files = [
|
|
2251 |
[package.extras]
|
2252 |
windows-terminal = ["colorama (>=0.4.6)"]
|
2253 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2254 |
[[package]]
|
2255 |
name = "python-dateutil"
|
2256 |
version = "2.9.0.post0"
|
@@ -2266,6 +2540,22 @@ files = [
|
|
2266 |
[package.dependencies]
|
2267 |
six = ">=1.5"
|
2268 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2269 |
[[package]]
|
2270 |
name = "python-dotenv"
|
2271 |
version = "1.1.0"
|
@@ -2368,6 +2658,127 @@ files = [
|
|
2368 |
{file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
|
2369 |
]
|
2370 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2371 |
[[package]]
|
2372 |
name = "requests"
|
2373 |
version = "2.32.3"
|
@@ -2409,6 +2820,130 @@ pygments = ">=2.13.0,<3.0.0"
|
|
2409 |
[package.extras]
|
2410 |
jupyter = ["ipywidgets (>=7.5.1,<9)"]
|
2411 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2412 |
[[package]]
|
2413 |
name = "ruff"
|
2414 |
version = "0.11.7"
|
@@ -2513,6 +3048,7 @@ files = [
|
|
2513 |
duckduckgo-search = ">=6.3.7"
|
2514 |
huggingface-hub = ">=0.28.0"
|
2515 |
jinja2 = ">=3.1.4"
|
|
|
2516 |
markdownify = ">=0.14.1"
|
2517 |
pillow = ">=11.0.0"
|
2518 |
python-dotenv = "*"
|
@@ -2581,6 +3117,87 @@ anyio = ">=3.6.2,<5"
|
|
2581 |
[package.extras]
|
2582 |
full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"]
|
2583 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2584 |
[[package]]
|
2585 |
name = "tomlkit"
|
2586 |
version = "0.13.2"
|
@@ -2790,6 +3407,21 @@ files = [
|
|
2790 |
{file = "websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee"},
|
2791 |
]
|
2792 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2793 |
[[package]]
|
2794 |
name = "xxhash"
|
2795 |
version = "3.5.0"
|
@@ -3042,7 +3674,43 @@ idna = ">=2.0"
|
|
3042 |
multidict = ">=4.0"
|
3043 |
propcache = ">=0.2.1"
|
3044 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3045 |
[metadata]
|
3046 |
lock-version = "2.1"
|
3047 |
python-versions = ">=3.12,<3.13"
|
3048 |
-
content-hash = "
|
|
|
559 |
torch = ["torch"]
|
560 |
vision = ["Pillow (>=9.4.0)"]
|
561 |
|
562 |
+
[[package]]
|
563 |
+
name = "defusedxml"
|
564 |
+
version = "0.7.1"
|
565 |
+
description = "XML bomb protection for Python stdlib modules"
|
566 |
+
optional = false
|
567 |
+
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
568 |
+
groups = ["main"]
|
569 |
+
files = [
|
570 |
+
{file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"},
|
571 |
+
{file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"},
|
572 |
+
]
|
573 |
+
|
574 |
[[package]]
|
575 |
name = "dill"
|
576 |
version = "0.3.8"
|
|
|
587 |
graph = ["objgraph (>=1.7.2)"]
|
588 |
profile = ["gprof2dot (>=2022.7.29)"]
|
589 |
|
590 |
+
[[package]]
|
591 |
+
name = "distro"
|
592 |
+
version = "1.9.0"
|
593 |
+
description = "Distro - an OS platform information API"
|
594 |
+
optional = false
|
595 |
+
python-versions = ">=3.6"
|
596 |
+
groups = ["main"]
|
597 |
+
files = [
|
598 |
+
{file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"},
|
599 |
+
{file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"},
|
600 |
+
]
|
601 |
+
|
602 |
[[package]]
|
603 |
name = "duckduckgo-search"
|
604 |
version = "8.0.1"
|
|
|
619 |
[package.extras]
|
620 |
dev = ["mypy (>=1.14.1)", "pytest (>=8.3.4)", "pytest-dependency (>=0.6.0)", "ruff (>=0.9.2)"]
|
621 |
|
622 |
+
[[package]]
|
623 |
+
name = "et-xmlfile"
|
624 |
+
version = "2.0.0"
|
625 |
+
description = "An implementation of lxml.xmlfile for the standard library"
|
626 |
+
optional = false
|
627 |
+
python-versions = ">=3.8"
|
628 |
+
groups = ["main"]
|
629 |
+
files = [
|
630 |
+
{file = "et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa"},
|
631 |
+
{file = "et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54"},
|
632 |
+
]
|
633 |
+
|
634 |
[[package]]
|
635 |
name = "fastapi"
|
636 |
version = "0.115.12"
|
|
|
1098 |
[package.extras]
|
1099 |
all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"]
|
1100 |
|
1101 |
+
[[package]]
|
1102 |
+
name = "importlib-metadata"
|
1103 |
+
version = "8.7.0"
|
1104 |
+
description = "Read metadata from Python packages"
|
1105 |
+
optional = false
|
1106 |
+
python-versions = ">=3.9"
|
1107 |
+
groups = ["main"]
|
1108 |
+
files = [
|
1109 |
+
{file = "importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd"},
|
1110 |
+
{file = "importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000"},
|
1111 |
+
]
|
1112 |
+
|
1113 |
+
[package.dependencies]
|
1114 |
+
zipp = ">=3.20"
|
1115 |
+
|
1116 |
+
[package.extras]
|
1117 |
+
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
|
1118 |
+
cover = ["pytest-cov"]
|
1119 |
+
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
|
1120 |
+
enabler = ["pytest-enabler (>=2.2)"]
|
1121 |
+
perf = ["ipython"]
|
1122 |
+
test = ["flufl.flake8", "importlib_resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"]
|
1123 |
+
type = ["pytest-mypy"]
|
1124 |
+
|
1125 |
[[package]]
|
1126 |
name = "itsdangerous"
|
1127 |
version = "2.2.0"
|
|
|
1152 |
[package.extras]
|
1153 |
i18n = ["Babel (>=2.7)"]
|
1154 |
|
1155 |
+
[[package]]
|
1156 |
+
name = "jiter"
|
1157 |
+
version = "0.9.0"
|
1158 |
+
description = "Fast iterable JSON parser."
|
1159 |
+
optional = false
|
1160 |
+
python-versions = ">=3.8"
|
1161 |
+
groups = ["main"]
|
1162 |
+
files = [
|
1163 |
+
{file = "jiter-0.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:816ec9b60fdfd1fec87da1d7ed46c66c44ffec37ab2ef7de5b147b2fce3fd5ad"},
|
1164 |
+
{file = "jiter-0.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b1d3086f8a3ee0194ecf2008cf81286a5c3e540d977fa038ff23576c023c0ea"},
|
1165 |
+
{file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1339f839b91ae30b37c409bf16ccd3dc453e8b8c3ed4bd1d6a567193651a4a51"},
|
1166 |
+
{file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ffba79584b3b670fefae66ceb3a28822365d25b7bf811e030609a3d5b876f538"},
|
1167 |
+
{file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cfc7d0a8e899089d11f065e289cb5b2daf3d82fbe028f49b20d7b809193958d"},
|
1168 |
+
{file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e00a1a2bbfaaf237e13c3d1592356eab3e9015d7efd59359ac8b51eb56390a12"},
|
1169 |
+
{file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1d9870561eb26b11448854dce0ff27a9a27cb616b632468cafc938de25e9e51"},
|
1170 |
+
{file = "jiter-0.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9872aeff3f21e437651df378cb75aeb7043e5297261222b6441a620218b58708"},
|
1171 |
+
{file = "jiter-0.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1fd19112d1049bdd47f17bfbb44a2c0001061312dcf0e72765bfa8abd4aa30e5"},
|
1172 |
+
{file = "jiter-0.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6ef5da104664e526836070e4a23b5f68dec1cc673b60bf1edb1bfbe8a55d0678"},
|
1173 |
+
{file = "jiter-0.9.0-cp310-cp310-win32.whl", hash = "sha256:cb12e6d65ebbefe5518de819f3eda53b73187b7089040b2d17f5b39001ff31c4"},
|
1174 |
+
{file = "jiter-0.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:c43ca669493626d8672be3b645dbb406ef25af3f4b6384cfd306da7eb2e70322"},
|
1175 |
+
{file = "jiter-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6c4d99c71508912a7e556d631768dcdef43648a93660670986916b297f1c54af"},
|
1176 |
+
{file = "jiter-0.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8f60fb8ce7df529812bf6c625635a19d27f30806885139e367af93f6e734ef58"},
|
1177 |
+
{file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51c4e1a4f8ea84d98b7b98912aa4290ac3d1eabfde8e3c34541fae30e9d1f08b"},
|
1178 |
+
{file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f4c677c424dc76684fea3e7285a7a2a7493424bea89ac441045e6a1fb1d7b3b"},
|
1179 |
+
{file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2221176dfec87f3470b21e6abca056e6b04ce9bff72315cb0b243ca9e835a4b5"},
|
1180 |
+
{file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c7adb66f899ffa25e3c92bfcb593391ee1947dbdd6a9a970e0d7e713237d572"},
|
1181 |
+
{file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c98d27330fdfb77913c1097a7aab07f38ff2259048949f499c9901700789ac15"},
|
1182 |
+
{file = "jiter-0.9.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eda3f8cc74df66892b1d06b5d41a71670c22d95a1ca2cbab73654745ce9d0419"},
|
1183 |
+
{file = "jiter-0.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dd5ab5ddc11418dce28343123644a100f487eaccf1de27a459ab36d6cca31043"},
|
1184 |
+
{file = "jiter-0.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42f8a68a69f047b310319ef8e2f52fdb2e7976fb3313ef27df495cf77bcad965"},
|
1185 |
+
{file = "jiter-0.9.0-cp311-cp311-win32.whl", hash = "sha256:a25519efb78a42254d59326ee417d6f5161b06f5da827d94cf521fed961b1ff2"},
|
1186 |
+
{file = "jiter-0.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:923b54afdd697dfd00d368b7ccad008cccfeb1efb4e621f32860c75e9f25edbd"},
|
1187 |
+
{file = "jiter-0.9.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7b46249cfd6c48da28f89eb0be3f52d6fdb40ab88e2c66804f546674e539ec11"},
|
1188 |
+
{file = "jiter-0.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:609cf3c78852f1189894383cf0b0b977665f54cb38788e3e6b941fa6d982c00e"},
|
1189 |
+
{file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d726a3890a54561e55a9c5faea1f7655eda7f105bd165067575ace6e65f80bb2"},
|
1190 |
+
{file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2e89dc075c1fef8fa9be219e249f14040270dbc507df4215c324a1839522ea75"},
|
1191 |
+
{file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04e8ffa3c353b1bc4134f96f167a2082494351e42888dfcf06e944f2729cbe1d"},
|
1192 |
+
{file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:203f28a72a05ae0e129b3ed1f75f56bc419d5f91dfacd057519a8bd137b00c42"},
|
1193 |
+
{file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fca1a02ad60ec30bb230f65bc01f611c8608b02d269f998bc29cca8619a919dc"},
|
1194 |
+
{file = "jiter-0.9.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:237e5cee4d5d2659aaf91bbf8ec45052cc217d9446070699441a91b386ae27dc"},
|
1195 |
+
{file = "jiter-0.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:528b6b71745e7326eed73c53d4aa57e2a522242320b6f7d65b9c5af83cf49b6e"},
|
1196 |
+
{file = "jiter-0.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9f48e86b57bc711eb5acdfd12b6cb580a59cc9a993f6e7dcb6d8b50522dcd50d"},
|
1197 |
+
{file = "jiter-0.9.0-cp312-cp312-win32.whl", hash = "sha256:699edfde481e191d81f9cf6d2211debbfe4bd92f06410e7637dffb8dd5dfde06"},
|
1198 |
+
{file = "jiter-0.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:099500d07b43f61d8bd780466d429c45a7b25411b334c60ca875fa775f68ccb0"},
|
1199 |
+
{file = "jiter-0.9.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:2764891d3f3e8b18dce2cff24949153ee30c9239da7c00f032511091ba688ff7"},
|
1200 |
+
{file = "jiter-0.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:387b22fbfd7a62418d5212b4638026d01723761c75c1c8232a8b8c37c2f1003b"},
|
1201 |
+
{file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d8da8629ccae3606c61d9184970423655fb4e33d03330bcdfe52d234d32f69"},
|
1202 |
+
{file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1be73d8982bdc278b7b9377426a4b44ceb5c7952073dd7488e4ae96b88e1103"},
|
1203 |
+
{file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2228eaaaa111ec54b9e89f7481bffb3972e9059301a878d085b2b449fbbde635"},
|
1204 |
+
{file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:11509bfecbc319459647d4ac3fd391d26fdf530dad00c13c4dadabf5b81f01a4"},
|
1205 |
+
{file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f22238da568be8bbd8e0650e12feeb2cfea15eda4f9fc271d3b362a4fa0604d"},
|
1206 |
+
{file = "jiter-0.9.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17f5d55eb856597607562257c8e36c42bc87f16bef52ef7129b7da11afc779f3"},
|
1207 |
+
{file = "jiter-0.9.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:6a99bed9fbb02f5bed416d137944419a69aa4c423e44189bc49718859ea83bc5"},
|
1208 |
+
{file = "jiter-0.9.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e057adb0cd1bd39606100be0eafe742de2de88c79df632955b9ab53a086b3c8d"},
|
1209 |
+
{file = "jiter-0.9.0-cp313-cp313-win32.whl", hash = "sha256:f7e6850991f3940f62d387ccfa54d1a92bd4bb9f89690b53aea36b4364bcab53"},
|
1210 |
+
{file = "jiter-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:c8ae3bf27cd1ac5e6e8b7a27487bf3ab5f82318211ec2e1346a5b058756361f7"},
|
1211 |
+
{file = "jiter-0.9.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0b2827fb88dda2cbecbbc3e596ef08d69bda06c6f57930aec8e79505dc17001"},
|
1212 |
+
{file = "jiter-0.9.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062b756ceb1d40b0b28f326cba26cfd575a4918415b036464a52f08632731e5a"},
|
1213 |
+
{file = "jiter-0.9.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6f7838bc467ab7e8ef9f387bd6de195c43bad82a569c1699cb822f6609dd4cdf"},
|
1214 |
+
{file = "jiter-0.9.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4a2d16360d0642cd68236f931b85fe50288834c383492e4279d9f1792e309571"},
|
1215 |
+
{file = "jiter-0.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e84ed1c9c9ec10bbb8c37f450077cbe3c0d4e8c2b19f0a49a60ac7ace73c7452"},
|
1216 |
+
{file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f3c848209ccd1bfa344a1240763975ca917de753c7875c77ec3034f4151d06c"},
|
1217 |
+
{file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7825f46e50646bee937e0f849d14ef3a417910966136f59cd1eb848b8b5bb3e4"},
|
1218 |
+
{file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d82a811928b26d1a6311a886b2566f68ccf2b23cf3bfed042e18686f1f22c2d7"},
|
1219 |
+
{file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c058ecb51763a67f019ae423b1cbe3fa90f7ee6280c31a1baa6ccc0c0e2d06e"},
|
1220 |
+
{file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9897115ad716c48f0120c1f0c4efae348ec47037319a6c63b2d7838bb53aaef4"},
|
1221 |
+
{file = "jiter-0.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:351f4c90a24c4fb8c87c6a73af2944c440494ed2bea2094feecacb75c50398ae"},
|
1222 |
+
{file = "jiter-0.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d45807b0f236c485e1e525e2ce3a854807dfe28ccf0d013dd4a563395e28008a"},
|
1223 |
+
{file = "jiter-0.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1537a890724ba00fdba21787010ac6f24dad47f763410e9e1093277913592784"},
|
1224 |
+
{file = "jiter-0.9.0-cp38-cp38-win32.whl", hash = "sha256:e3630ec20cbeaddd4b65513fa3857e1b7c4190d4481ef07fb63d0fad59033321"},
|
1225 |
+
{file = "jiter-0.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:2685f44bf80e95f8910553bf2d33b9c87bf25fceae6e9f0c1355f75d2922b0ee"},
|
1226 |
+
{file = "jiter-0.9.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:9ef340fae98065071ccd5805fe81c99c8f80484e820e40043689cf97fb66b3e2"},
|
1227 |
+
{file = "jiter-0.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:efb767d92c63b2cd9ec9f24feeb48f49574a713870ec87e9ba0c2c6e9329c3e2"},
|
1228 |
+
{file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:113f30f87fb1f412510c6d7ed13e91422cfd329436364a690c34c8b8bd880c42"},
|
1229 |
+
{file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8793b6df019b988526f5a633fdc7456ea75e4a79bd8396a3373c371fc59f5c9b"},
|
1230 |
+
{file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a9aaa5102dba4e079bb728076fadd5a2dca94c05c04ce68004cfd96f128ea34"},
|
1231 |
+
{file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d838650f6ebaf4ccadfb04522463e74a4c378d7e667e0eb1865cfe3990bfac49"},
|
1232 |
+
{file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0194f813efdf4b8865ad5f5c5f50f8566df7d770a82c51ef593d09e0b347020"},
|
1233 |
+
{file = "jiter-0.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a7954a401d0a8a0b8bc669199db78af435aae1e3569187c2939c477c53cb6a0a"},
|
1234 |
+
{file = "jiter-0.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4feafe787eb8a8d98168ab15637ca2577f6ddf77ac6c8c66242c2d028aa5420e"},
|
1235 |
+
{file = "jiter-0.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:27cd1f2e8bb377f31d3190b34e4328d280325ad7ef55c6ac9abde72f79e84d2e"},
|
1236 |
+
{file = "jiter-0.9.0-cp39-cp39-win32.whl", hash = "sha256:161d461dcbe658cf0bd0aa375b30a968b087cdddc624fc585f3867c63c6eca95"},
|
1237 |
+
{file = "jiter-0.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:e8b36d8a16a61993be33e75126ad3d8aa29cf450b09576f3c427d27647fcb4aa"},
|
1238 |
+
{file = "jiter-0.9.0.tar.gz", hash = "sha256:aadba0964deb424daa24492abc3d229c60c4a31bfee205aedbf1acc7639d7893"},
|
1239 |
+
]
|
1240 |
+
|
1241 |
+
[[package]]
|
1242 |
+
name = "jsonschema"
|
1243 |
+
version = "4.23.0"
|
1244 |
+
description = "An implementation of JSON Schema validation for Python"
|
1245 |
+
optional = false
|
1246 |
+
python-versions = ">=3.8"
|
1247 |
+
groups = ["main"]
|
1248 |
+
files = [
|
1249 |
+
{file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"},
|
1250 |
+
{file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"},
|
1251 |
+
]
|
1252 |
+
|
1253 |
+
[package.dependencies]
|
1254 |
+
attrs = ">=22.2.0"
|
1255 |
+
jsonschema-specifications = ">=2023.03.6"
|
1256 |
+
referencing = ">=0.28.4"
|
1257 |
+
rpds-py = ">=0.7.1"
|
1258 |
+
|
1259 |
+
[package.extras]
|
1260 |
+
format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
|
1261 |
+
format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"]
|
1262 |
+
|
1263 |
+
[[package]]
|
1264 |
+
name = "jsonschema-specifications"
|
1265 |
+
version = "2025.4.1"
|
1266 |
+
description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
|
1267 |
+
optional = false
|
1268 |
+
python-versions = ">=3.9"
|
1269 |
+
groups = ["main"]
|
1270 |
+
files = [
|
1271 |
+
{file = "jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af"},
|
1272 |
+
{file = "jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608"},
|
1273 |
+
]
|
1274 |
+
|
1275 |
+
[package.dependencies]
|
1276 |
+
referencing = ">=0.31.0"
|
1277 |
+
|
1278 |
+
[[package]]
|
1279 |
+
name = "litellm"
|
1280 |
+
version = "1.67.5"
|
1281 |
+
description = "Library to easily interface with LLM API providers"
|
1282 |
+
optional = false
|
1283 |
+
python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8"
|
1284 |
+
groups = ["main"]
|
1285 |
+
files = [
|
1286 |
+
{file = "litellm-1.67.5-py3-none-any.whl", hash = "sha256:bd3329731a36200539293521d312adf4f05fc4a6312a84baff2ce5a8b1507a43"},
|
1287 |
+
{file = "litellm-1.67.5.tar.gz", hash = "sha256:a9c73feed05aba33b3f2879658f57bb3480b43404ae693ebc827f1c157affde5"},
|
1288 |
+
]
|
1289 |
+
|
1290 |
+
[package.dependencies]
|
1291 |
+
aiohttp = "*"
|
1292 |
+
click = "*"
|
1293 |
+
httpx = ">=0.23.0"
|
1294 |
+
importlib-metadata = ">=6.8.0"
|
1295 |
+
jinja2 = ">=3.1.2,<4.0.0"
|
1296 |
+
jsonschema = ">=4.22.0,<5.0.0"
|
1297 |
+
openai = ">=1.68.2"
|
1298 |
+
pydantic = ">=2.0.0,<3.0.0"
|
1299 |
+
python-dotenv = ">=0.2.0"
|
1300 |
+
tiktoken = ">=0.7.0"
|
1301 |
+
tokenizers = "*"
|
1302 |
+
|
1303 |
+
[package.extras]
|
1304 |
+
extra-proxy = ["azure-identity (>=1.15.0,<2.0.0)", "azure-keyvault-secrets (>=4.8.0,<5.0.0)", "google-cloud-kms (>=2.21.3,<3.0.0)", "prisma (==0.11.0)", "redisvl (>=0.4.1,<0.5.0)", "resend (>=0.8.0,<0.9.0)"]
|
1305 |
+
proxy = ["PyJWT (>=2.8.0,<3.0.0)", "apscheduler (>=3.10.4,<4.0.0)", "backoff", "boto3 (==1.34.34)", "cryptography (>=43.0.1,<44.0.0)", "fastapi (>=0.115.5,<0.116.0)", "fastapi-sso (>=0.16.0,<0.17.0)", "gunicorn (>=23.0.0,<24.0.0)", "litellm-proxy-extras (==0.1.13)", "mcp (==1.5.0)", "orjson (>=3.9.7,<4.0.0)", "pynacl (>=1.5.0,<2.0.0)", "python-multipart (>=0.0.18,<0.0.19)", "pyyaml (>=6.0.1,<7.0.0)", "rq", "uvicorn (>=0.29.0,<0.30.0)", "uvloop (>=0.21.0,<0.22.0)", "websockets (>=13.1.0,<14.0.0)"]
|
1306 |
+
|
1307 |
[[package]]
|
1308 |
name = "lxml"
|
1309 |
version = "5.4.0"
|
|
|
1778 |
{file = "numpy-2.2.5.tar.gz", hash = "sha256:a9c0d994680cd991b1cb772e8b297340085466a6fe964bc9d4e80f5e2f43c291"},
|
1779 |
]
|
1780 |
|
1781 |
+
[[package]]
|
1782 |
+
name = "openai"
|
1783 |
+
version = "1.77.0"
|
1784 |
+
description = "The official Python library for the openai API"
|
1785 |
+
optional = false
|
1786 |
+
python-versions = ">=3.8"
|
1787 |
+
groups = ["main"]
|
1788 |
+
files = [
|
1789 |
+
{file = "openai-1.77.0-py3-none-any.whl", hash = "sha256:07706e91eb71631234996989a8ea991d5ee56f0744ef694c961e0824d4f39218"},
|
1790 |
+
{file = "openai-1.77.0.tar.gz", hash = "sha256:897969f927f0068b8091b4b041d1f8175bcf124f7ea31bab418bf720971223bc"},
|
1791 |
+
]
|
1792 |
+
|
1793 |
+
[package.dependencies]
|
1794 |
+
anyio = ">=3.5.0,<5"
|
1795 |
+
distro = ">=1.7.0,<2"
|
1796 |
+
httpx = ">=0.23.0,<1"
|
1797 |
+
jiter = ">=0.4.0,<1"
|
1798 |
+
pydantic = ">=1.9.0,<3"
|
1799 |
+
sniffio = "*"
|
1800 |
+
tqdm = ">4"
|
1801 |
+
typing-extensions = ">=4.11,<5"
|
1802 |
+
|
1803 |
+
[package.extras]
|
1804 |
+
datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"]
|
1805 |
+
realtime = ["websockets (>=13,<16)"]
|
1806 |
+
voice-helpers = ["numpy (>=2.0.2)", "sounddevice (>=0.5.1)"]
|
1807 |
+
|
1808 |
+
[[package]]
|
1809 |
+
name = "openpyxl"
|
1810 |
+
version = "3.1.5"
|
1811 |
+
description = "A Python library to read/write Excel 2010 xlsx/xlsm files"
|
1812 |
+
optional = false
|
1813 |
+
python-versions = ">=3.8"
|
1814 |
+
groups = ["main"]
|
1815 |
+
files = [
|
1816 |
+
{file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"},
|
1817 |
+
{file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"},
|
1818 |
+
]
|
1819 |
+
|
1820 |
+
[package.dependencies]
|
1821 |
+
et-xmlfile = "*"
|
1822 |
+
|
1823 |
[[package]]
|
1824 |
name = "orjson"
|
1825 |
version = "3.10.16"
|
|
|
2505 |
[package.extras]
|
2506 |
windows-terminal = ["colorama (>=0.4.6)"]
|
2507 |
|
2508 |
+
[[package]]
|
2509 |
+
name = "pypdf"
|
2510 |
+
version = "5.4.0"
|
2511 |
+
description = "A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files"
|
2512 |
+
optional = false
|
2513 |
+
python-versions = ">=3.8"
|
2514 |
+
groups = ["main"]
|
2515 |
+
files = [
|
2516 |
+
{file = "pypdf-5.4.0-py3-none-any.whl", hash = "sha256:db994ab47cadc81057ea1591b90e5b543e2b7ef2d0e31ef41a9bfe763c119dab"},
|
2517 |
+
{file = "pypdf-5.4.0.tar.gz", hash = "sha256:9af476a9dc30fcb137659b0dec747ea94aa954933c52cf02ee33e39a16fe9175"},
|
2518 |
+
]
|
2519 |
+
|
2520 |
+
[package.extras]
|
2521 |
+
crypto = ["cryptography"]
|
2522 |
+
cryptodome = ["PyCryptodome"]
|
2523 |
+
dev = ["black", "flit", "pip-tools", "pre-commit (<2.18.0)", "pytest-cov", "pytest-socket", "pytest-timeout", "pytest-xdist", "wheel"]
|
2524 |
+
docs = ["myst_parser", "sphinx", "sphinx_rtd_theme"]
|
2525 |
+
full = ["Pillow (>=8.0.0)", "cryptography"]
|
2526 |
+
image = ["Pillow (>=8.0.0)"]
|
2527 |
+
|
2528 |
[[package]]
|
2529 |
name = "python-dateutil"
|
2530 |
version = "2.9.0.post0"
|
|
|
2540 |
[package.dependencies]
|
2541 |
six = ">=1.5"
|
2542 |
|
2543 |
+
[[package]]
|
2544 |
+
name = "python-docx"
|
2545 |
+
version = "1.1.2"
|
2546 |
+
description = "Create, read, and update Microsoft Word .docx files."
|
2547 |
+
optional = false
|
2548 |
+
python-versions = ">=3.7"
|
2549 |
+
groups = ["main"]
|
2550 |
+
files = [
|
2551 |
+
{file = "python_docx-1.1.2-py3-none-any.whl", hash = "sha256:08c20d6058916fb19853fcf080f7f42b6270d89eac9fa5f8c15f691c0017fabe"},
|
2552 |
+
{file = "python_docx-1.1.2.tar.gz", hash = "sha256:0cf1f22e95b9002addca7948e16f2cd7acdfd498047f1941ca5d293db7762efd"},
|
2553 |
+
]
|
2554 |
+
|
2555 |
+
[package.dependencies]
|
2556 |
+
lxml = ">=3.1.0"
|
2557 |
+
typing-extensions = ">=4.9.0"
|
2558 |
+
|
2559 |
[[package]]
|
2560 |
name = "python-dotenv"
|
2561 |
version = "1.1.0"
|
|
|
2658 |
{file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
|
2659 |
]
|
2660 |
|
2661 |
+
[[package]]
|
2662 |
+
name = "referencing"
|
2663 |
+
version = "0.36.2"
|
2664 |
+
description = "JSON Referencing + Python"
|
2665 |
+
optional = false
|
2666 |
+
python-versions = ">=3.9"
|
2667 |
+
groups = ["main"]
|
2668 |
+
files = [
|
2669 |
+
{file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"},
|
2670 |
+
{file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"},
|
2671 |
+
]
|
2672 |
+
|
2673 |
+
[package.dependencies]
|
2674 |
+
attrs = ">=22.2.0"
|
2675 |
+
rpds-py = ">=0.7.0"
|
2676 |
+
typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""}
|
2677 |
+
|
2678 |
+
[[package]]
|
2679 |
+
name = "regex"
|
2680 |
+
version = "2024.11.6"
|
2681 |
+
description = "Alternative regular expression module, to replace re."
|
2682 |
+
optional = false
|
2683 |
+
python-versions = ">=3.8"
|
2684 |
+
groups = ["main"]
|
2685 |
+
files = [
|
2686 |
+
{file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"},
|
2687 |
+
{file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"},
|
2688 |
+
{file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"},
|
2689 |
+
{file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"},
|
2690 |
+
{file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"},
|
2691 |
+
{file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"},
|
2692 |
+
{file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"},
|
2693 |
+
{file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"},
|
2694 |
+
{file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"},
|
2695 |
+
{file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"},
|
2696 |
+
{file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"},
|
2697 |
+
{file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"},
|
2698 |
+
{file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"},
|
2699 |
+
{file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"},
|
2700 |
+
{file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"},
|
2701 |
+
{file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"},
|
2702 |
+
{file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"},
|
2703 |
+
{file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"},
|
2704 |
+
{file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"},
|
2705 |
+
{file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"},
|
2706 |
+
{file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"},
|
2707 |
+
{file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"},
|
2708 |
+
{file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"},
|
2709 |
+
{file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"},
|
2710 |
+
{file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"},
|
2711 |
+
{file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"},
|
2712 |
+
{file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"},
|
2713 |
+
{file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"},
|
2714 |
+
{file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"},
|
2715 |
+
{file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"},
|
2716 |
+
{file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"},
|
2717 |
+
{file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"},
|
2718 |
+
{file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"},
|
2719 |
+
{file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"},
|
2720 |
+
{file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"},
|
2721 |
+
{file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"},
|
2722 |
+
{file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"},
|
2723 |
+
{file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"},
|
2724 |
+
{file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"},
|
2725 |
+
{file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"},
|
2726 |
+
{file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"},
|
2727 |
+
{file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"},
|
2728 |
+
{file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"},
|
2729 |
+
{file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"},
|
2730 |
+
{file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"},
|
2731 |
+
{file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"},
|
2732 |
+
{file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"},
|
2733 |
+
{file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"},
|
2734 |
+
{file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"},
|
2735 |
+
{file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"},
|
2736 |
+
{file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"},
|
2737 |
+
{file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"},
|
2738 |
+
{file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"},
|
2739 |
+
{file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"},
|
2740 |
+
{file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"},
|
2741 |
+
{file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"},
|
2742 |
+
{file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"},
|
2743 |
+
{file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"},
|
2744 |
+
{file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"},
|
2745 |
+
{file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"},
|
2746 |
+
{file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"},
|
2747 |
+
{file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"},
|
2748 |
+
{file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"},
|
2749 |
+
{file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"},
|
2750 |
+
{file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"},
|
2751 |
+
{file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"},
|
2752 |
+
{file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"},
|
2753 |
+
{file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"},
|
2754 |
+
{file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"},
|
2755 |
+
{file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"},
|
2756 |
+
{file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"},
|
2757 |
+
{file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"},
|
2758 |
+
{file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"},
|
2759 |
+
{file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"},
|
2760 |
+
{file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"},
|
2761 |
+
{file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"},
|
2762 |
+
{file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"},
|
2763 |
+
{file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"},
|
2764 |
+
{file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"},
|
2765 |
+
{file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"},
|
2766 |
+
{file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"},
|
2767 |
+
{file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"},
|
2768 |
+
{file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"},
|
2769 |
+
{file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"},
|
2770 |
+
{file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"},
|
2771 |
+
{file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"},
|
2772 |
+
{file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"},
|
2773 |
+
{file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"},
|
2774 |
+
{file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"},
|
2775 |
+
{file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"},
|
2776 |
+
{file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"},
|
2777 |
+
{file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"},
|
2778 |
+
{file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"},
|
2779 |
+
{file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"},
|
2780 |
+
]
|
2781 |
+
|
2782 |
[[package]]
|
2783 |
name = "requests"
|
2784 |
version = "2.32.3"
|
|
|
2820 |
[package.extras]
|
2821 |
jupyter = ["ipywidgets (>=7.5.1,<9)"]
|
2822 |
|
2823 |
+
[[package]]
|
2824 |
+
name = "rpds-py"
|
2825 |
+
version = "0.24.0"
|
2826 |
+
description = "Python bindings to Rust's persistent data structures (rpds)"
|
2827 |
+
optional = false
|
2828 |
+
python-versions = ">=3.9"
|
2829 |
+
groups = ["main"]
|
2830 |
+
files = [
|
2831 |
+
{file = "rpds_py-0.24.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:006f4342fe729a368c6df36578d7a348c7c716be1da0a1a0f86e3021f8e98724"},
|
2832 |
+
{file = "rpds_py-0.24.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2d53747da70a4e4b17f559569d5f9506420966083a31c5fbd84e764461c4444b"},
|
2833 |
+
{file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8acd55bd5b071156bae57b555f5d33697998752673b9de554dd82f5b5352727"},
|
2834 |
+
{file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7e80d375134ddb04231a53800503752093dbb65dad8dabacce2c84cccc78e964"},
|
2835 |
+
{file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60748789e028d2a46fc1c70750454f83c6bdd0d05db50f5ae83e2db500b34da5"},
|
2836 |
+
{file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e1daf5bf6c2be39654beae83ee6b9a12347cb5aced9a29eecf12a2d25fff664"},
|
2837 |
+
{file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b221c2457d92a1fb3c97bee9095c874144d196f47c038462ae6e4a14436f7bc"},
|
2838 |
+
{file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:66420986c9afff67ef0c5d1e4cdc2d0e5262f53ad11e4f90e5e22448df485bf0"},
|
2839 |
+
{file = "rpds_py-0.24.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:43dba99f00f1d37b2a0265a259592d05fcc8e7c19d140fe51c6e6f16faabeb1f"},
|
2840 |
+
{file = "rpds_py-0.24.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a88c0d17d039333a41d9bf4616bd062f0bd7aa0edeb6cafe00a2fc2a804e944f"},
|
2841 |
+
{file = "rpds_py-0.24.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc31e13ce212e14a539d430428cd365e74f8b2d534f8bc22dd4c9c55b277b875"},
|
2842 |
+
{file = "rpds_py-0.24.0-cp310-cp310-win32.whl", hash = "sha256:fc2c1e1b00f88317d9de6b2c2b39b012ebbfe35fe5e7bef980fd2a91f6100a07"},
|
2843 |
+
{file = "rpds_py-0.24.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0145295ca415668420ad142ee42189f78d27af806fcf1f32a18e51d47dd2052"},
|
2844 |
+
{file = "rpds_py-0.24.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2d3ee4615df36ab8eb16c2507b11e764dcc11fd350bbf4da16d09cda11fcedef"},
|
2845 |
+
{file = "rpds_py-0.24.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e13ae74a8a3a0c2f22f450f773e35f893484fcfacb00bb4344a7e0f4f48e1f97"},
|
2846 |
+
{file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf86f72d705fc2ef776bb7dd9e5fbba79d7e1f3e258bf9377f8204ad0fc1c51e"},
|
2847 |
+
{file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c43583ea8517ed2e780a345dd9960896afc1327e8cf3ac8239c167530397440d"},
|
2848 |
+
{file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4cd031e63bc5f05bdcda120646a0d32f6d729486d0067f09d79c8db5368f4586"},
|
2849 |
+
{file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34d90ad8c045df9a4259c47d2e16a3f21fdb396665c94520dbfe8766e62187a4"},
|
2850 |
+
{file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e838bf2bb0b91ee67bf2b889a1a841e5ecac06dd7a2b1ef4e6151e2ce155c7ae"},
|
2851 |
+
{file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04ecf5c1ff4d589987b4d9882872f80ba13da7d42427234fce8f22efb43133bc"},
|
2852 |
+
{file = "rpds_py-0.24.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:630d3d8ea77eabd6cbcd2ea712e1c5cecb5b558d39547ac988351195db433f6c"},
|
2853 |
+
{file = "rpds_py-0.24.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ebcb786b9ff30b994d5969213a8430cbb984cdd7ea9fd6df06663194bd3c450c"},
|
2854 |
+
{file = "rpds_py-0.24.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:174e46569968ddbbeb8a806d9922f17cd2b524aa753b468f35b97ff9c19cb718"},
|
2855 |
+
{file = "rpds_py-0.24.0-cp311-cp311-win32.whl", hash = "sha256:5ef877fa3bbfb40b388a5ae1cb00636a624690dcb9a29a65267054c9ea86d88a"},
|
2856 |
+
{file = "rpds_py-0.24.0-cp311-cp311-win_amd64.whl", hash = "sha256:e274f62cbd274359eff63e5c7e7274c913e8e09620f6a57aae66744b3df046d6"},
|
2857 |
+
{file = "rpds_py-0.24.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d8551e733626afec514b5d15befabea0dd70a343a9f23322860c4f16a9430205"},
|
2858 |
+
{file = "rpds_py-0.24.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e374c0ce0ca82e5b67cd61fb964077d40ec177dd2c4eda67dba130de09085c7"},
|
2859 |
+
{file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d69d003296df4840bd445a5d15fa5b6ff6ac40496f956a221c4d1f6f7b4bc4d9"},
|
2860 |
+
{file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8212ff58ac6dfde49946bea57474a386cca3f7706fc72c25b772b9ca4af6b79e"},
|
2861 |
+
{file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:528927e63a70b4d5f3f5ccc1fa988a35456eb5d15f804d276709c33fc2f19bda"},
|
2862 |
+
{file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a824d2c7a703ba6daaca848f9c3d5cb93af0505be505de70e7e66829affd676e"},
|
2863 |
+
{file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d51febb7a114293ffd56c6cf4736cb31cd68c0fddd6aa303ed09ea5a48e029"},
|
2864 |
+
{file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3fab5f4a2c64a8fb64fc13b3d139848817a64d467dd6ed60dcdd6b479e7febc9"},
|
2865 |
+
{file = "rpds_py-0.24.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9be4f99bee42ac107870c61dfdb294d912bf81c3c6d45538aad7aecab468b6b7"},
|
2866 |
+
{file = "rpds_py-0.24.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:564c96b6076a98215af52f55efa90d8419cc2ef45d99e314fddefe816bc24f91"},
|
2867 |
+
{file = "rpds_py-0.24.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:75a810b7664c17f24bf2ffd7f92416c00ec84b49bb68e6a0d93e542406336b56"},
|
2868 |
+
{file = "rpds_py-0.24.0-cp312-cp312-win32.whl", hash = "sha256:f6016bd950be4dcd047b7475fdf55fb1e1f59fc7403f387be0e8123e4a576d30"},
|
2869 |
+
{file = "rpds_py-0.24.0-cp312-cp312-win_amd64.whl", hash = "sha256:998c01b8e71cf051c28f5d6f1187abbdf5cf45fc0efce5da6c06447cba997034"},
|
2870 |
+
{file = "rpds_py-0.24.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3d2d8e4508e15fc05b31285c4b00ddf2e0eb94259c2dc896771966a163122a0c"},
|
2871 |
+
{file = "rpds_py-0.24.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f00c16e089282ad68a3820fd0c831c35d3194b7cdc31d6e469511d9bffc535c"},
|
2872 |
+
{file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951cc481c0c395c4a08639a469d53b7d4afa252529a085418b82a6b43c45c240"},
|
2873 |
+
{file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9ca89938dff18828a328af41ffdf3902405a19f4131c88e22e776a8e228c5a8"},
|
2874 |
+
{file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0ef550042a8dbcd657dfb284a8ee00f0ba269d3f2286b0493b15a5694f9fe8"},
|
2875 |
+
{file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b2356688e5d958c4d5cb964af865bea84db29971d3e563fb78e46e20fe1848b"},
|
2876 |
+
{file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78884d155fd15d9f64f5d6124b486f3d3f7fd7cd71a78e9670a0f6f6ca06fb2d"},
|
2877 |
+
{file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a4a535013aeeef13c5532f802708cecae8d66c282babb5cd916379b72110cf7"},
|
2878 |
+
{file = "rpds_py-0.24.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:84e0566f15cf4d769dade9b366b7b87c959be472c92dffb70462dd0844d7cbad"},
|
2879 |
+
{file = "rpds_py-0.24.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:823e74ab6fbaa028ec89615ff6acb409e90ff45580c45920d4dfdddb069f2120"},
|
2880 |
+
{file = "rpds_py-0.24.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c61a2cb0085c8783906b2f8b1f16a7e65777823c7f4d0a6aaffe26dc0d358dd9"},
|
2881 |
+
{file = "rpds_py-0.24.0-cp313-cp313-win32.whl", hash = "sha256:60d9b630c8025b9458a9d114e3af579a2c54bd32df601c4581bd054e85258143"},
|
2882 |
+
{file = "rpds_py-0.24.0-cp313-cp313-win_amd64.whl", hash = "sha256:6eea559077d29486c68218178ea946263b87f1c41ae7f996b1f30a983c476a5a"},
|
2883 |
+
{file = "rpds_py-0.24.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:d09dc82af2d3c17e7dd17120b202a79b578d79f2b5424bda209d9966efeed114"},
|
2884 |
+
{file = "rpds_py-0.24.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5fc13b44de6419d1e7a7e592a4885b323fbc2f46e1f22151e3a8ed3b8b920405"},
|
2885 |
+
{file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c347a20d79cedc0a7bd51c4d4b7dbc613ca4e65a756b5c3e57ec84bd43505b47"},
|
2886 |
+
{file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20f2712bd1cc26a3cc16c5a1bfee9ed1abc33d4cdf1aabd297fe0eb724df4272"},
|
2887 |
+
{file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aad911555286884be1e427ef0dc0ba3929e6821cbeca2194b13dc415a462c7fd"},
|
2888 |
+
{file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0aeb3329c1721c43c58cae274d7d2ca85c1690d89485d9c63a006cb79a85771a"},
|
2889 |
+
{file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a0f156e9509cee987283abd2296ec816225145a13ed0391df8f71bf1d789e2d"},
|
2890 |
+
{file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa6800adc8204ce898c8a424303969b7aa6a5e4ad2789c13f8648739830323b7"},
|
2891 |
+
{file = "rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a18fc371e900a21d7392517c6f60fe859e802547309e94313cd8181ad9db004d"},
|
2892 |
+
{file = "rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9168764133fd919f8dcca2ead66de0105f4ef5659cbb4fa044f7014bed9a1797"},
|
2893 |
+
{file = "rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f6e3cec44ba05ee5cbdebe92d052f69b63ae792e7d05f1020ac5e964394080c"},
|
2894 |
+
{file = "rpds_py-0.24.0-cp313-cp313t-win32.whl", hash = "sha256:8ebc7e65ca4b111d928b669713865f021b7773350eeac4a31d3e70144297baba"},
|
2895 |
+
{file = "rpds_py-0.24.0-cp313-cp313t-win_amd64.whl", hash = "sha256:675269d407a257b8c00a6b58205b72eec8231656506c56fd429d924ca00bb350"},
|
2896 |
+
{file = "rpds_py-0.24.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a36b452abbf29f68527cf52e181fced56685731c86b52e852053e38d8b60bc8d"},
|
2897 |
+
{file = "rpds_py-0.24.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b3b397eefecec8e8e39fa65c630ef70a24b09141a6f9fc17b3c3a50bed6b50e"},
|
2898 |
+
{file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdabcd3beb2a6dca7027007473d8ef1c3b053347c76f685f5f060a00327b8b65"},
|
2899 |
+
{file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5db385bacd0c43f24be92b60c857cf760b7f10d8234f4bd4be67b5b20a7c0b6b"},
|
2900 |
+
{file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8097b3422d020ff1c44effc40ae58e67d93e60d540a65649d2cdaf9466030791"},
|
2901 |
+
{file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:493fe54318bed7d124ce272fc36adbf59d46729659b2c792e87c3b95649cdee9"},
|
2902 |
+
{file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8aa362811ccdc1f8dadcc916c6d47e554169ab79559319ae9fae7d7752d0d60c"},
|
2903 |
+
{file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d8f9a6e7fd5434817526815f09ea27f2746c4a51ee11bb3439065f5fc754db58"},
|
2904 |
+
{file = "rpds_py-0.24.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8205ee14463248d3349131bb8099efe15cd3ce83b8ef3ace63c7e976998e7124"},
|
2905 |
+
{file = "rpds_py-0.24.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:921ae54f9ecba3b6325df425cf72c074cd469dea843fb5743a26ca7fb2ccb149"},
|
2906 |
+
{file = "rpds_py-0.24.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32bab0a56eac685828e00cc2f5d1200c548f8bc11f2e44abf311d6b548ce2e45"},
|
2907 |
+
{file = "rpds_py-0.24.0-cp39-cp39-win32.whl", hash = "sha256:f5c0ed12926dec1dfe7d645333ea59cf93f4d07750986a586f511c0bc61fe103"},
|
2908 |
+
{file = "rpds_py-0.24.0-cp39-cp39-win_amd64.whl", hash = "sha256:afc6e35f344490faa8276b5f2f7cbf71f88bc2cda4328e00553bd451728c571f"},
|
2909 |
+
{file = "rpds_py-0.24.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:619ca56a5468f933d940e1bf431c6f4e13bef8e688698b067ae68eb4f9b30e3a"},
|
2910 |
+
{file = "rpds_py-0.24.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:4b28e5122829181de1898c2c97f81c0b3246d49f585f22743a1246420bb8d399"},
|
2911 |
+
{file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e5ab32cf9eb3647450bc74eb201b27c185d3857276162c101c0f8c6374e098"},
|
2912 |
+
{file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:208b3a70a98cf3710e97cabdc308a51cd4f28aa6e7bb11de3d56cd8b74bab98d"},
|
2913 |
+
{file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbc4362e06f950c62cad3d4abf1191021b2ffaf0b31ac230fbf0526453eee75e"},
|
2914 |
+
{file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ebea2821cdb5f9fef44933617be76185b80150632736f3d76e54829ab4a3b4d1"},
|
2915 |
+
{file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a4df06c35465ef4d81799999bba810c68d29972bf1c31db61bfdb81dd9d5bb"},
|
2916 |
+
{file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d3aa13bdf38630da298f2e0d77aca967b200b8cc1473ea05248f6c5e9c9bdb44"},
|
2917 |
+
{file = "rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:041f00419e1da7a03c46042453598479f45be3d787eb837af382bfc169c0db33"},
|
2918 |
+
{file = "rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8754d872a5dfc3c5bf9c0e059e8107451364a30d9fd50f1f1a85c4fb9481164"},
|
2919 |
+
{file = "rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:896c41007931217a343eff197c34513c154267636c8056fb409eafd494c3dcdc"},
|
2920 |
+
{file = "rpds_py-0.24.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:92558d37d872e808944c3c96d0423b8604879a3d1c86fdad508d7ed91ea547d5"},
|
2921 |
+
{file = "rpds_py-0.24.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f9e0057a509e096e47c87f753136c9b10d7a91842d8042c2ee6866899a717c0d"},
|
2922 |
+
{file = "rpds_py-0.24.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6e109a454412ab82979c5b1b3aee0604eca4bbf9a02693bb9df027af2bfa91a"},
|
2923 |
+
{file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc1c892b1ec1f8cbd5da8de287577b455e388d9c328ad592eabbdcb6fc93bee5"},
|
2924 |
+
{file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c39438c55983d48f4bb3487734d040e22dad200dab22c41e331cee145e7a50d"},
|
2925 |
+
{file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d7e8ce990ae17dda686f7e82fd41a055c668e13ddcf058e7fb5e9da20b57793"},
|
2926 |
+
{file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9ea7f4174d2e4194289cb0c4e172d83e79a6404297ff95f2875cf9ac9bced8ba"},
|
2927 |
+
{file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb2954155bb8f63bb19d56d80e5e5320b61d71084617ed89efedb861a684baea"},
|
2928 |
+
{file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04f2b712a2206e13800a8136b07aaedc23af3facab84918e7aa89e4be0260032"},
|
2929 |
+
{file = "rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:eda5c1e2a715a4cbbca2d6d304988460942551e4e5e3b7457b50943cd741626d"},
|
2930 |
+
{file = "rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:9abc80fe8c1f87218db116016de575a7998ab1629078c90840e8d11ab423ee25"},
|
2931 |
+
{file = "rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6a727fd083009bc83eb83d6950f0c32b3c94c8b80a9b667c87f4bd1274ca30ba"},
|
2932 |
+
{file = "rpds_py-0.24.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e0f3ef95795efcd3b2ec3fe0a5bcfb5dadf5e3996ea2117427e524d4fbf309c6"},
|
2933 |
+
{file = "rpds_py-0.24.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:2c13777ecdbbba2077670285dd1fe50828c8742f6a4119dbef6f83ea13ad10fb"},
|
2934 |
+
{file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79e8d804c2ccd618417e96720ad5cd076a86fa3f8cb310ea386a3e6229bae7d1"},
|
2935 |
+
{file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd822f019ccccd75c832deb7aa040bb02d70a92eb15a2f16c7987b7ad4ee8d83"},
|
2936 |
+
{file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0047638c3aa0dbcd0ab99ed1e549bbf0e142c9ecc173b6492868432d8989a046"},
|
2937 |
+
{file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5b66d1b201cc71bc3081bc2f1fc36b0c1f268b773e03bbc39066651b9e18391"},
|
2938 |
+
{file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbcbb6db5582ea33ce46a5d20a5793134b5365110d84df4e30b9d37c6fd40ad3"},
|
2939 |
+
{file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63981feca3f110ed132fd217bf7768ee8ed738a55549883628ee3da75bb9cb78"},
|
2940 |
+
{file = "rpds_py-0.24.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:3a55fc10fdcbf1a4bd3c018eea422c52cf08700cf99c28b5cb10fe97ab77a0d3"},
|
2941 |
+
{file = "rpds_py-0.24.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:c30ff468163a48535ee7e9bf21bd14c7a81147c0e58a36c1078289a8ca7af0bd"},
|
2942 |
+
{file = "rpds_py-0.24.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:369d9c6d4c714e36d4a03957b4783217a3ccd1e222cdd67d464a3a479fc17796"},
|
2943 |
+
{file = "rpds_py-0.24.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:24795c099453e3721fda5d8ddd45f5dfcc8e5a547ce7b8e9da06fecc3832e26f"},
|
2944 |
+
{file = "rpds_py-0.24.0.tar.gz", hash = "sha256:772cc1b2cd963e7e17e6cc55fe0371fb9c704d63e44cacec7b9b7f523b78919e"},
|
2945 |
+
]
|
2946 |
+
|
2947 |
[[package]]
|
2948 |
name = "ruff"
|
2949 |
version = "0.11.7"
|
|
|
3048 |
duckduckgo-search = ">=6.3.7"
|
3049 |
huggingface-hub = ">=0.28.0"
|
3050 |
jinja2 = ">=3.1.4"
|
3051 |
+
litellm = {version = ">=1.60.2", optional = true, markers = "extra == \"litellm\""}
|
3052 |
markdownify = ">=0.14.1"
|
3053 |
pillow = ">=11.0.0"
|
3054 |
python-dotenv = "*"
|
|
|
3117 |
[package.extras]
|
3118 |
full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"]
|
3119 |
|
3120 |
+
[[package]]
|
3121 |
+
name = "tiktoken"
|
3122 |
+
version = "0.9.0"
|
3123 |
+
description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models"
|
3124 |
+
optional = false
|
3125 |
+
python-versions = ">=3.9"
|
3126 |
+
groups = ["main"]
|
3127 |
+
files = [
|
3128 |
+
{file = "tiktoken-0.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:586c16358138b96ea804c034b8acf3f5d3f0258bd2bc3b0227af4af5d622e382"},
|
3129 |
+
{file = "tiktoken-0.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d9c59ccc528c6c5dd51820b3474402f69d9a9e1d656226848ad68a8d5b2e5108"},
|
3130 |
+
{file = "tiktoken-0.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0968d5beeafbca2a72c595e8385a1a1f8af58feaebb02b227229b69ca5357fd"},
|
3131 |
+
{file = "tiktoken-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92a5fb085a6a3b7350b8fc838baf493317ca0e17bd95e8642f95fc69ecfed1de"},
|
3132 |
+
{file = "tiktoken-0.9.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:15a2752dea63d93b0332fb0ddb05dd909371ededa145fe6a3242f46724fa7990"},
|
3133 |
+
{file = "tiktoken-0.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:26113fec3bd7a352e4b33dbaf1bd8948de2507e30bd95a44e2b1156647bc01b4"},
|
3134 |
+
{file = "tiktoken-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f32cc56168eac4851109e9b5d327637f15fd662aa30dd79f964b7c39fbadd26e"},
|
3135 |
+
{file = "tiktoken-0.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:45556bc41241e5294063508caf901bf92ba52d8ef9222023f83d2483a3055348"},
|
3136 |
+
{file = "tiktoken-0.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03935988a91d6d3216e2ec7c645afbb3d870b37bcb67ada1943ec48678e7ee33"},
|
3137 |
+
{file = "tiktoken-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b3d80aad8d2c6b9238fc1a5524542087c52b860b10cbf952429ffb714bc1136"},
|
3138 |
+
{file = "tiktoken-0.9.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b2a21133be05dc116b1d0372af051cd2c6aa1d2188250c9b553f9fa49301b336"},
|
3139 |
+
{file = "tiktoken-0.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:11a20e67fdf58b0e2dea7b8654a288e481bb4fc0289d3ad21291f8d0849915fb"},
|
3140 |
+
{file = "tiktoken-0.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e88f121c1c22b726649ce67c089b90ddda8b9662545a8aeb03cfef15967ddd03"},
|
3141 |
+
{file = "tiktoken-0.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a6600660f2f72369acb13a57fb3e212434ed38b045fd8cc6cdd74947b4b5d210"},
|
3142 |
+
{file = "tiktoken-0.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95e811743b5dfa74f4b227927ed86cbc57cad4df859cb3b643be797914e41794"},
|
3143 |
+
{file = "tiktoken-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99376e1370d59bcf6935c933cb9ba64adc29033b7e73f5f7569f3aad86552b22"},
|
3144 |
+
{file = "tiktoken-0.9.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:badb947c32739fb6ddde173e14885fb3de4d32ab9d8c591cbd013c22b4c31dd2"},
|
3145 |
+
{file = "tiktoken-0.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:5a62d7a25225bafed786a524c1b9f0910a1128f4232615bf3f8257a73aaa3b16"},
|
3146 |
+
{file = "tiktoken-0.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b0e8e05a26eda1249e824156d537015480af7ae222ccb798e5234ae0285dbdb"},
|
3147 |
+
{file = "tiktoken-0.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:27d457f096f87685195eea0165a1807fae87b97b2161fe8c9b1df5bd74ca6f63"},
|
3148 |
+
{file = "tiktoken-0.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cf8ded49cddf825390e36dd1ad35cd49589e8161fdcb52aa25f0583e90a3e01"},
|
3149 |
+
{file = "tiktoken-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc156cb314119a8bb9748257a2eaebd5cc0753b6cb491d26694ed42fc7cb3139"},
|
3150 |
+
{file = "tiktoken-0.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cd69372e8c9dd761f0ab873112aba55a0e3e506332dd9f7522ca466e817b1b7a"},
|
3151 |
+
{file = "tiktoken-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5ea0edb6f83dc56d794723286215918c1cde03712cbbafa0348b33448faf5b95"},
|
3152 |
+
{file = "tiktoken-0.9.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c6386ca815e7d96ef5b4ac61e0048cd32ca5a92d5781255e13b31381d28667dc"},
|
3153 |
+
{file = "tiktoken-0.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:75f6d5db5bc2c6274b674ceab1615c1778e6416b14705827d19b40e6355f03e0"},
|
3154 |
+
{file = "tiktoken-0.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e15b16f61e6f4625a57a36496d28dd182a8a60ec20a534c5343ba3cafa156ac7"},
|
3155 |
+
{file = "tiktoken-0.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebcec91babf21297022882344c3f7d9eed855931466c3311b1ad6b64befb3df"},
|
3156 |
+
{file = "tiktoken-0.9.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e5fd49e7799579240f03913447c0cdfa1129625ebd5ac440787afc4345990427"},
|
3157 |
+
{file = "tiktoken-0.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:26242ca9dc8b58e875ff4ca078b9a94d2f0813e6a535dcd2205df5d49d927cc7"},
|
3158 |
+
{file = "tiktoken-0.9.0.tar.gz", hash = "sha256:d02a5ca6a938e0490e1ff957bc48c8b078c88cb83977be1625b1fd8aac792c5d"},
|
3159 |
+
]
|
3160 |
+
|
3161 |
+
[package.dependencies]
|
3162 |
+
regex = ">=2022.1.18"
|
3163 |
+
requests = ">=2.26.0"
|
3164 |
+
|
3165 |
+
[package.extras]
|
3166 |
+
blobfile = ["blobfile (>=2)"]
|
3167 |
+
|
3168 |
+
[[package]]
|
3169 |
+
name = "tokenizers"
|
3170 |
+
version = "0.21.1"
|
3171 |
+
description = ""
|
3172 |
+
optional = false
|
3173 |
+
python-versions = ">=3.9"
|
3174 |
+
groups = ["main"]
|
3175 |
+
files = [
|
3176 |
+
{file = "tokenizers-0.21.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e78e413e9e668ad790a29456e677d9d3aa50a9ad311a40905d6861ba7692cf41"},
|
3177 |
+
{file = "tokenizers-0.21.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:cd51cd0a91ecc801633829fcd1fda9cf8682ed3477c6243b9a095539de4aecf3"},
|
3178 |
+
{file = "tokenizers-0.21.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28da6b72d4fb14ee200a1bd386ff74ade8992d7f725f2bde2c495a9a98cf4d9f"},
|
3179 |
+
{file = "tokenizers-0.21.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:34d8cfde551c9916cb92014e040806122295a6800914bab5865deb85623931cf"},
|
3180 |
+
{file = "tokenizers-0.21.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaa852d23e125b73d283c98f007e06d4595732104b65402f46e8ef24b588d9f8"},
|
3181 |
+
{file = "tokenizers-0.21.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a21a15d5c8e603331b8a59548bbe113564136dc0f5ad8306dd5033459a226da0"},
|
3182 |
+
{file = "tokenizers-0.21.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2fdbd4c067c60a0ac7eca14b6bd18a5bebace54eb757c706b47ea93204f7a37c"},
|
3183 |
+
{file = "tokenizers-0.21.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dd9a0061e403546f7377df940e866c3e678d7d4e9643d0461ea442b4f89e61a"},
|
3184 |
+
{file = "tokenizers-0.21.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:db9484aeb2e200c43b915a1a0150ea885e35f357a5a8fabf7373af333dcc8dbf"},
|
3185 |
+
{file = "tokenizers-0.21.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:ed248ab5279e601a30a4d67bdb897ecbe955a50f1e7bb62bd99f07dd11c2f5b6"},
|
3186 |
+
{file = "tokenizers-0.21.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:9ac78b12e541d4ce67b4dfd970e44c060a2147b9b2a21f509566d556a509c67d"},
|
3187 |
+
{file = "tokenizers-0.21.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e5a69c1a4496b81a5ee5d2c1f3f7fbdf95e90a0196101b0ee89ed9956b8a168f"},
|
3188 |
+
{file = "tokenizers-0.21.1-cp39-abi3-win32.whl", hash = "sha256:1039a3a5734944e09de1d48761ade94e00d0fa760c0e0551151d4dd851ba63e3"},
|
3189 |
+
{file = "tokenizers-0.21.1-cp39-abi3-win_amd64.whl", hash = "sha256:0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382"},
|
3190 |
+
{file = "tokenizers-0.21.1.tar.gz", hash = "sha256:a1bb04dc5b448985f86ecd4b05407f5a8d97cb2c0532199b2a302a604a0165ab"},
|
3191 |
+
]
|
3192 |
+
|
3193 |
+
[package.dependencies]
|
3194 |
+
huggingface-hub = ">=0.16.4,<1.0"
|
3195 |
+
|
3196 |
+
[package.extras]
|
3197 |
+
dev = ["tokenizers[testing]"]
|
3198 |
+
docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"]
|
3199 |
+
testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests", "ruff"]
|
3200 |
+
|
3201 |
[[package]]
|
3202 |
name = "tomlkit"
|
3203 |
version = "0.13.2"
|
|
|
3407 |
{file = "websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee"},
|
3408 |
]
|
3409 |
|
3410 |
+
[[package]]
|
3411 |
+
name = "wikipedia"
|
3412 |
+
version = "1.4.0"
|
3413 |
+
description = "Wikipedia API for Python"
|
3414 |
+
optional = false
|
3415 |
+
python-versions = "*"
|
3416 |
+
groups = ["main"]
|
3417 |
+
files = [
|
3418 |
+
{file = "wikipedia-1.4.0.tar.gz", hash = "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2"},
|
3419 |
+
]
|
3420 |
+
|
3421 |
+
[package.dependencies]
|
3422 |
+
beautifulsoup4 = "*"
|
3423 |
+
requests = ">=2.0.0,<3.0.0"
|
3424 |
+
|
3425 |
[[package]]
|
3426 |
name = "xxhash"
|
3427 |
version = "3.5.0"
|
|
|
3674 |
multidict = ">=4.0"
|
3675 |
propcache = ">=0.2.1"
|
3676 |
|
3677 |
+
[[package]]
|
3678 |
+
name = "youtube-transcript-api"
|
3679 |
+
version = "1.0.3"
|
3680 |
+
description = "This is an python API which allows you to get the transcripts/subtitles for a given YouTube video. It also works for automatically generated subtitles, supports translating subtitles and it does not require a headless browser, like other selenium based solutions do!"
|
3681 |
+
optional = false
|
3682 |
+
python-versions = "<3.14,>=3.8"
|
3683 |
+
groups = ["main"]
|
3684 |
+
files = [
|
3685 |
+
{file = "youtube_transcript_api-1.0.3-py3-none-any.whl", hash = "sha256:d1874e57de65cf14c9d7d09b2b37c814d6287fa0e770d4922c4cd32a5b3f6c47"},
|
3686 |
+
{file = "youtube_transcript_api-1.0.3.tar.gz", hash = "sha256:902baf90e7840a42e1e148335e09fe5575dbff64c81414957aea7038e8a4db46"},
|
3687 |
+
]
|
3688 |
+
|
3689 |
+
[package.dependencies]
|
3690 |
+
defusedxml = ">=0.7.1,<0.8.0"
|
3691 |
+
requests = "*"
|
3692 |
+
|
3693 |
+
[[package]]
|
3694 |
+
name = "zipp"
|
3695 |
+
version = "3.21.0"
|
3696 |
+
description = "Backport of pathlib-compatible object wrapper for zip files"
|
3697 |
+
optional = false
|
3698 |
+
python-versions = ">=3.9"
|
3699 |
+
groups = ["main"]
|
3700 |
+
files = [
|
3701 |
+
{file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"},
|
3702 |
+
{file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"},
|
3703 |
+
]
|
3704 |
+
|
3705 |
+
[package.extras]
|
3706 |
+
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
|
3707 |
+
cover = ["pytest-cov"]
|
3708 |
+
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
|
3709 |
+
enabler = ["pytest-enabler (>=2.2)"]
|
3710 |
+
test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"]
|
3711 |
+
type = ["pytest-mypy"]
|
3712 |
+
|
3713 |
[metadata]
|
3714 |
lock-version = "2.1"
|
3715 |
python-versions = ">=3.12,<3.13"
|
3716 |
+
content-hash = "e29835a62bb0b14f8ba9524f2c6c9a58128a40946e4e719dd9f8864a98aa3820"
|
pyproject.toml
CHANGED
@@ -8,13 +8,19 @@ authors = [
|
|
8 |
readme = "README.md"
|
9 |
requires-python = ">=3.12,<3.13"
|
10 |
dependencies = [
|
11 |
-
"smolagents (>=1.14.0,<2.0.0)",
|
12 |
"gradio[oauth] (>=5.27.0,<6.0.0)",
|
13 |
"requests (>=2.32.3,<3.0.0)",
|
14 |
"pandas (>=2.2.3,<3.0.0)",
|
15 |
"python-dotenv (>=1.1.0,<2.0.0)",
|
16 |
"playwright (>=1.52.0,<2.0.0)",
|
17 |
"datasets (>=3.5.1,<4.0.0)",
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
]
|
19 |
|
20 |
|
|
|
8 |
readme = "README.md"
|
9 |
requires-python = ">=3.12,<3.13"
|
10 |
dependencies = [
|
11 |
+
"smolagents[litellm] (>=1.14.0,<2.0.0)",
|
12 |
"gradio[oauth] (>=5.27.0,<6.0.0)",
|
13 |
"requests (>=2.32.3,<3.0.0)",
|
14 |
"pandas (>=2.2.3,<3.0.0)",
|
15 |
"python-dotenv (>=1.1.0,<2.0.0)",
|
16 |
"playwright (>=1.52.0,<2.0.0)",
|
17 |
"datasets (>=3.5.1,<4.0.0)",
|
18 |
+
"python-docx (>=1.1.2,<2.0.0)",
|
19 |
+
"pypdf (>=5.4.0,<6.0.0)",
|
20 |
+
"openpyxl (>=3.1.5,<4.0.0)",
|
21 |
+
"wikipedia (>=1.4.0,<2.0.0)",
|
22 |
+
"openai (>=1.77.0,<2.0.0)",
|
23 |
+
"youtube-transcript-api (>=1.0.3,<2.0.0)",
|
24 |
]
|
25 |
|
26 |
|
test_agents.py
CHANGED
@@ -4,7 +4,7 @@ import time
|
|
4 |
import datetime
|
5 |
import os
|
6 |
from dotenv import load_dotenv
|
7 |
-
from app import BasicAgent
|
8 |
|
9 |
# Import the BasicAgent from your app module
|
10 |
try:
|
@@ -85,11 +85,18 @@ def eval_GAIA(json_file_path="GAIA_level1_status.json"):
|
|
85 |
start_time = time.time()
|
86 |
|
87 |
# 4. Process questions
|
|
|
88 |
for q_num, data in gaia_data.items():
|
|
|
|
|
89 |
if data.get("status") is False:
|
90 |
processed_count += 1
|
91 |
question = data.get("Q")
|
92 |
correct_answer = data.get("A")
|
|
|
|
|
|
|
|
|
93 |
status = data.get("status") # Should be False here
|
94 |
|
95 |
if question is None or correct_answer is None:
|
@@ -102,7 +109,7 @@ def eval_GAIA(json_file_path="GAIA_level1_status.json"):
|
|
102 |
print(f"Q: {question[:100]}...") # Print first 100 chars
|
103 |
|
104 |
try:
|
105 |
-
agent_response = agent(question)
|
106 |
print(f"Agent A: {agent_response}")
|
107 |
print(f"Correct A: {correct_answer}")
|
108 |
|
@@ -140,7 +147,7 @@ def eval_GAIA(json_file_path="GAIA_level1_status.json"):
|
|
140 |
print(f"Skipping question {q_num}: Status is already True.")
|
141 |
|
142 |
# Exit
|
143 |
-
|
144 |
|
145 |
end_time = time.time()
|
146 |
total_time = end_time - start_time
|
|
|
4 |
import datetime
|
5 |
import os
|
6 |
from dotenv import load_dotenv
|
7 |
+
from app import BasicAgent, GAIA_LEVEL1_VALIDATION_FILES_PATH
|
8 |
|
9 |
# Import the BasicAgent from your app module
|
10 |
try:
|
|
|
85 |
start_time = time.time()
|
86 |
|
87 |
# 4. Process questions
|
88 |
+
test_questions = ["27"]
|
89 |
for q_num, data in gaia_data.items():
|
90 |
+
if q_num not in test_questions:
|
91 |
+
continue
|
92 |
if data.get("status") is False:
|
93 |
processed_count += 1
|
94 |
question = data.get("Q")
|
95 |
correct_answer = data.get("A")
|
96 |
+
file_name = data.get("file_name", None)
|
97 |
+
if file_name:
|
98 |
+
file_name = os.path.join(GAIA_LEVEL1_VALIDATION_FILES_PATH, file_name)
|
99 |
+
|
100 |
status = data.get("status") # Should be False here
|
101 |
|
102 |
if question is None or correct_answer is None:
|
|
|
109 |
print(f"Q: {question[:100]}...") # Print first 100 chars
|
110 |
|
111 |
try:
|
112 |
+
agent_response = agent(question, file_name)
|
113 |
print(f"Agent A: {agent_response}")
|
114 |
print(f"Correct A: {correct_answer}")
|
115 |
|
|
|
147 |
print(f"Skipping question {q_num}: Status is already True.")
|
148 |
|
149 |
# Exit
|
150 |
+
break
|
151 |
|
152 |
end_time = time.time()
|
153 |
total_time = end_time - start_time
|