wip
This commit is contained in:
parent
19bf2e6b18
commit
720f21a85b
10 changed files with 11122 additions and 356 deletions
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -6,3 +6,10 @@ schema.sql
|
||||||
task_ratings_enriched.json
|
task_ratings_enriched.json
|
||||||
.env
|
.env
|
||||||
.ipynb_checkpoints
|
.ipynb_checkpoints
|
||||||
|
80percent-8h.png
|
||||||
|
add
|
||||||
|
df_sample.csv
|
||||||
|
df_sample_with_estimates.csv
|
||||||
|
sampled_tasks.csv
|
||||||
|
task_to_estimate.csv
|
||||||
|
Untitled.png
|
||||||
|
|
22
README.md
Normal file
22
README.md
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# Presentation
|
||||||
|
|
||||||
|
## Notebooks
|
||||||
|
|
||||||
|
- [data enrichment](data_enrichment.ipynb) - contains the code to gather things from the O\*NET data, BLS's OEWS database (unused for now), Barnett's data...
|
||||||
|
- [prompt evaluation](evaluate_llm_time_estimations.ipynb) - the playground used to evaluate change in hyperparameters (system prompt, user prompt, schema, model...)
|
||||||
|
- [analysis](analysis.ipynb) - code to generate the graphs in the paper
|
||||||
|
- [legacy](legacy.ipynb) - if there are some missing pieces, it's worth looking in there.
|
||||||
|
|
||||||
|
## Running the non-notebook code
|
||||||
|
|
||||||
|
To re-run everything, you need python and uv up and running, if you use have nix installed, run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix develop .#impure
|
||||||
|
```
|
||||||
|
|
||||||
|
and then `uv run ...` as requested in the notebooks.
|
||||||
|
|
||||||
|
If some things are missing, email <dorn@xfe.li>, I'm usually reactive.
|
||||||
|
|
||||||
|
Copy `.env.example` to `.env` and fill in OPENAI_API_KEY. The total run and experiments cost less than <10$.
|
425
add_task_estimates_to_samples.py
Normal file
425
add_task_estimates_to_samples.py
Normal file
|
@ -0,0 +1,425 @@
|
||||||
|
# Import necessary libraries
|
||||||
|
import pandas as pd
|
||||||
|
import litellm # Ensure this is installed in your environment
|
||||||
|
import dotenv
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
import json
|
||||||
|
import math
|
||||||
|
import numpy as np # Added for NaN handling
|
||||||
|
|
||||||
|
# Load environment variables
|
||||||
|
dotenv.load_dotenv(override=True)
|
||||||
|
|
||||||
|
# --- Configuration ---
|
||||||
|
MODEL = "gpt-4.1-mini"
|
||||||
|
# Consider adjusting RATE_LIMIT based on the specific model's actual limits
|
||||||
|
RATE_LIMIT = 5000 # Max requests per minute
|
||||||
|
# Smaller chunk size results in more frequent saving but potentially slower overall processing
|
||||||
|
CHUNK_SIZE = 10 # Process messages in chunks of this size
|
||||||
|
SECONDS_PER_MINUTE = 60
|
||||||
|
# **UPDATED:** Filename changed as requested
|
||||||
|
FILENAME = "task_to_estimate.csv" # Use a single filename for in-place updates
|
||||||
|
|
||||||
|
# --- Prompts and Schema ---
|
||||||
|
SYSTEM_PROMPT = """
|
||||||
|
You are an expert assistant evaluating the time required for job tasks. Your goal is to estimate the 'effective time' range needed for a skilled human to complete the following job task **remotely**, without supervision
|
||||||
|
|
||||||
|
'Effective time' is the active, focused work duration required to complete the task. Crucially, **exclude all waiting periods, delays, or time spent on other unrelated activities**. Think of it as the continuous, productive time investment needed if the worker could pause and resume instantly without cost.
|
||||||
|
|
||||||
|
Provide a lower and upper bound estimate for the 'effective time'. These bounds should capture the time within which approximately 80% of instances of performing this specific task are typically completed by a qualified individual.
|
||||||
|
|
||||||
|
You MUST output a JSON object containing the lower and upper bound estimates. Select your lower and upper bound estimates **only** from the following discrete durations:
|
||||||
|
['10 minutes', '30 minutes', '1 hour', '2 hours', '4 hours', '8 hours', '16 hours', '3 days', '1 week', '3 weeks', '6 weeks', '3 months', '6 months', '1 year', '3 years', '10 years']
|
||||||
|
|
||||||
|
Example Output Format:
|
||||||
|
{
|
||||||
|
"lower_bound_estimate": "1 hour",
|
||||||
|
"upper_bound_estimate": "4 hours"
|
||||||
|
}
|
||||||
|
|
||||||
|
Base your estimate on the provided task description, its associated activities, and the occupational context. Only output the JSON object.
|
||||||
|
""".strip() # Modified prompt slightly to emphasize JSON output for response_format mode
|
||||||
|
|
||||||
|
# Template uses the correct column names based on previous update
|
||||||
|
USER_MESSAGE_TEMPLATE = """
|
||||||
|
Please estimate the effective time range for the following remote task:
|
||||||
|
|
||||||
|
**Occupation Category:** {occupation_title}
|
||||||
|
**Occupation Description:** {occupation_description}
|
||||||
|
|
||||||
|
**Task Description:** {task}
|
||||||
|
**Relevant steps for the task:**
|
||||||
|
{dwas}
|
||||||
|
|
||||||
|
Consider the complexity and the typical steps involved. Output ONLY the JSON object with keys "lower_bound_estimate" and "upper_bound_estimate".
|
||||||
|
""".strip() # Modified prompt slightly to emphasize JSON output for response_format mode
|
||||||
|
|
||||||
|
|
||||||
|
ALLOWED_DURATIONS = [
|
||||||
|
"10 minutes",
|
||||||
|
"30 minutes",
|
||||||
|
"1 hour",
|
||||||
|
"2 hours",
|
||||||
|
"4 hours",
|
||||||
|
"8 hours",
|
||||||
|
"16 hours",
|
||||||
|
"3 days",
|
||||||
|
"1 week",
|
||||||
|
"3 weeks",
|
||||||
|
"6 weeks",
|
||||||
|
"3 months",
|
||||||
|
"6 months",
|
||||||
|
"1 year",
|
||||||
|
"3 years",
|
||||||
|
"10 years",
|
||||||
|
]
|
||||||
|
|
||||||
|
# Schema definition for litellm's response_format validation
|
||||||
|
# **REVERTED:** Using the schema definition compatible with response_format
|
||||||
|
SCHEMA_FOR_VALIDATION = {
|
||||||
|
"name": "get_time_estimate",
|
||||||
|
"strict": True,
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"lower_bound_estimate": {"type": "string", "enum": ALLOWED_DURATIONS},
|
||||||
|
"upper_bound_estimate": {"type": "string", "enum": ALLOWED_DURATIONS},
|
||||||
|
},
|
||||||
|
"required": ["lower_bound_estimate", "upper_bound_estimate"],
|
||||||
|
"additionalProperties": False,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# --- Function to Save DataFrame In-Place ---
|
||||||
|
def save_dataframe(df_to_save, filename):
|
||||||
|
"""Saves the DataFrame to the specified CSV file using atomic write."""
|
||||||
|
try:
|
||||||
|
# Use a temporary file for atomic write to prevent corruption if script crashes during save
|
||||||
|
temp_filename = filename + ".tmp"
|
||||||
|
df_to_save.to_csv(temp_filename, encoding="utf-8-sig", index=False)
|
||||||
|
os.replace(temp_filename, filename) # Atomic replace
|
||||||
|
# print(f"--- DataFrame successfully saved to {filename} ---") # Optional: uncomment for verbose logging
|
||||||
|
except Exception as e:
|
||||||
|
print(f"--- Error saving DataFrame to {filename}: {e} ---")
|
||||||
|
# Clean up temp file if rename failed
|
||||||
|
if os.path.exists(temp_filename):
|
||||||
|
try:
|
||||||
|
os.remove(temp_filename)
|
||||||
|
except Exception as remove_err:
|
||||||
|
print(
|
||||||
|
f"--- Error removing temporary save file {temp_filename}: {remove_err} ---"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# --- Main Script Logic ---
|
||||||
|
try:
|
||||||
|
# Read the CSV
|
||||||
|
if os.path.exists(FILENAME):
|
||||||
|
df = pd.read_csv(FILENAME, encoding="utf-8-sig")
|
||||||
|
print(f"Successfully read {len(df)} rows from {FILENAME}.")
|
||||||
|
# Check if estimate columns exist, add them if not, initialized with NaN
|
||||||
|
save_needed = False
|
||||||
|
if "lb_estimate" not in df.columns:
|
||||||
|
df["lb_estimate"] = np.nan
|
||||||
|
print("Added 'lb_estimate' column.")
|
||||||
|
save_needed = True
|
||||||
|
# Ensure column is float/object type to hold NaNs and strings
|
||||||
|
elif not pd.api.types.is_object_dtype(
|
||||||
|
df["lb_estimate"]
|
||||||
|
) and not pd.api.types.is_float_dtype(df["lb_estimate"]):
|
||||||
|
df["lb_estimate"] = df["lb_estimate"].astype(object)
|
||||||
|
|
||||||
|
if "ub_estimate" not in df.columns:
|
||||||
|
df["ub_estimate"] = np.nan
|
||||||
|
print("Added 'ub_estimate' column.")
|
||||||
|
save_needed = True
|
||||||
|
elif not pd.api.types.is_object_dtype(
|
||||||
|
df["ub_estimate"]
|
||||||
|
) and not pd.api.types.is_float_dtype(df["ub_estimate"]):
|
||||||
|
df["ub_estimate"] = df["ub_estimate"].astype(object)
|
||||||
|
|
||||||
|
# Fill potential empty strings or other placeholders with actual NaN for consistency
|
||||||
|
df["lb_estimate"].replace(["", None], np.nan, inplace=True)
|
||||||
|
df["ub_estimate"].replace(["", None], np.nan, inplace=True)
|
||||||
|
|
||||||
|
if save_needed:
|
||||||
|
print(f"Saving {FILENAME} after adding missing estimate columns.")
|
||||||
|
save_dataframe(df, FILENAME)
|
||||||
|
else:
|
||||||
|
print(f"Error: {FILENAME} not found. Please ensure the file exists.")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
print(f"Error: {FILENAME} not found. Please ensure the file exists.")
|
||||||
|
exit()
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error reading or initializing {FILENAME}: {e}")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
|
||||||
|
# --- Identify Rows to Process ---
|
||||||
|
unprocessed_mask = df["lb_estimate"].isna()
|
||||||
|
start_index = unprocessed_mask.idxmax() # Finds the index of the first True value
|
||||||
|
|
||||||
|
if unprocessed_mask.any() and pd.isna(df.loc[start_index, "lb_estimate"]):
|
||||||
|
print(f"Resuming processing from index {start_index}.")
|
||||||
|
df_to_process = df.loc[unprocessed_mask].copy()
|
||||||
|
original_indices = df_to_process.index # Keep track of original indices
|
||||||
|
else:
|
||||||
|
print("All rows seem to have estimates already. Exiting.")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
|
||||||
|
# --- Prepare messages for batch completion (only for rows needing processing) ---
|
||||||
|
messages_list = []
|
||||||
|
skipped_rows_indices = []
|
||||||
|
valid_original_indices = []
|
||||||
|
|
||||||
|
if not df_to_process.empty:
|
||||||
|
# Use the correct column names
|
||||||
|
required_cols = ["task", "occupation_title", "occupation_description", "dwas"]
|
||||||
|
print(
|
||||||
|
f"Preparing messages for up to {len(df_to_process)} rows starting from index {start_index}..."
|
||||||
|
)
|
||||||
|
print(f"Checking for required columns: {required_cols}")
|
||||||
|
|
||||||
|
for index, row in df_to_process.iterrows():
|
||||||
|
missing_or_empty = []
|
||||||
|
for col in required_cols:
|
||||||
|
if col not in row or pd.isna(row[col]) or str(row[col]).strip() == "":
|
||||||
|
missing_or_empty.append(col)
|
||||||
|
|
||||||
|
if missing_or_empty:
|
||||||
|
print(
|
||||||
|
f"Warning: Skipping row index {index} due to missing/empty required data in columns: {', '.join(missing_or_empty)}."
|
||||||
|
)
|
||||||
|
skipped_rows_indices.append(index)
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Format user message using the template with correct column names
|
||||||
|
try:
|
||||||
|
user_message = USER_MESSAGE_TEMPLATE.format(
|
||||||
|
task=row["task"],
|
||||||
|
occupation_title=row["occupation_title"],
|
||||||
|
occupation_description=row["occupation_description"],
|
||||||
|
dwas=row["dwas"],
|
||||||
|
)
|
||||||
|
except KeyError as e:
|
||||||
|
print(
|
||||||
|
f"Error: Skipping row index {index} due to formatting error - missing key: {e}. Check USER_MESSAGE_TEMPLATE and CSV columns."
|
||||||
|
)
|
||||||
|
skipped_rows_indices.append(index)
|
||||||
|
continue
|
||||||
|
|
||||||
|
messages_for_row = [
|
||||||
|
{"role": "system", "content": SYSTEM_PROMPT},
|
||||||
|
{"role": "user", "content": user_message},
|
||||||
|
]
|
||||||
|
messages_list.append(messages_for_row)
|
||||||
|
valid_original_indices.append(index)
|
||||||
|
|
||||||
|
print(
|
||||||
|
f"Prepared {len(messages_list)} valid message sets for batch completion (skipped {len(skipped_rows_indices)} rows)."
|
||||||
|
)
|
||||||
|
if not messages_list:
|
||||||
|
print("No valid rows found to process after checking required data. Exiting.")
|
||||||
|
exit()
|
||||||
|
else:
|
||||||
|
print("No rows found needing processing.")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
|
||||||
|
# --- Call batch_completion in chunks with rate limiting and periodic saving ---
|
||||||
|
total_messages_to_send = len(messages_list)
|
||||||
|
num_chunks = math.ceil(total_messages_to_send / CHUNK_SIZE)
|
||||||
|
|
||||||
|
print(
|
||||||
|
f"\nStarting batch completion for {total_messages_to_send} items in {num_chunks} chunks..."
|
||||||
|
)
|
||||||
|
|
||||||
|
overall_start_time = time.time()
|
||||||
|
processed_count_total = 0
|
||||||
|
|
||||||
|
for i in range(num_chunks):
|
||||||
|
chunk_start_message_index = i * CHUNK_SIZE
|
||||||
|
chunk_end_message_index = min((i + 1) * CHUNK_SIZE, total_messages_to_send)
|
||||||
|
message_chunk = messages_list[chunk_start_message_index:chunk_end_message_index]
|
||||||
|
chunk_original_indices = valid_original_indices[
|
||||||
|
chunk_start_message_index:chunk_end_message_index
|
||||||
|
]
|
||||||
|
|
||||||
|
if not message_chunk:
|
||||||
|
continue
|
||||||
|
|
||||||
|
min_idx = min(chunk_original_indices) if chunk_original_indices else "N/A"
|
||||||
|
max_idx = max(chunk_original_indices) if chunk_original_indices else "N/A"
|
||||||
|
print(
|
||||||
|
f"\nProcessing chunk {i + 1}/{num_chunks} (Messages {chunk_start_message_index + 1}-{chunk_end_message_index} of this run)..."
|
||||||
|
f" Corresponding to original indices: {min_idx} - {max_idx}"
|
||||||
|
)
|
||||||
|
chunk_start_time = time.time()
|
||||||
|
responses = []
|
||||||
|
try:
|
||||||
|
print(f"Sending {len(message_chunk)} requests for chunk {i + 1}...")
|
||||||
|
# **REVERTED:** Using response_format with json_schema
|
||||||
|
responses = litellm.batch_completion(
|
||||||
|
model=MODEL,
|
||||||
|
messages=message_chunk,
|
||||||
|
response_format={
|
||||||
|
"type": "json_schema",
|
||||||
|
"json_schema": SCHEMA_FOR_VALIDATION,
|
||||||
|
},
|
||||||
|
num_retries=3,
|
||||||
|
# request_timeout=60 # Optional: uncomment if needed
|
||||||
|
)
|
||||||
|
print(f"Chunk {i + 1} API call completed.")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error during litellm.batch_completion for chunk {i + 1}: {e}")
|
||||||
|
responses = [None] * len(message_chunk)
|
||||||
|
|
||||||
|
# --- Process responses for the current chunk ---
|
||||||
|
chunk_lb_estimates = {}
|
||||||
|
chunk_ub_estimates = {}
|
||||||
|
successful_in_chunk = 0
|
||||||
|
failed_in_chunk = 0
|
||||||
|
|
||||||
|
if responses and len(responses) == len(message_chunk):
|
||||||
|
for j, response in enumerate(responses):
|
||||||
|
original_df_index = chunk_original_indices[j]
|
||||||
|
lb_estimate = None
|
||||||
|
ub_estimate = None
|
||||||
|
content_str = None # Initialize for potential error logging
|
||||||
|
|
||||||
|
if response is None:
|
||||||
|
print(
|
||||||
|
f"Skipping processing for original index {original_df_index} due to API call failure for this item/chunk."
|
||||||
|
)
|
||||||
|
failed_in_chunk += 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
try:
|
||||||
|
# **REVERTED:** Check for content in the message, not tool_calls
|
||||||
|
if (
|
||||||
|
response.choices
|
||||||
|
and response.choices[0].message
|
||||||
|
and response.choices[0].message.content # Check if content exists
|
||||||
|
):
|
||||||
|
content_str = response.choices[0].message.content
|
||||||
|
# Attempt to parse the JSON string content
|
||||||
|
estimate_data = json.loads(content_str)
|
||||||
|
lb_estimate = estimate_data.get("lower_bound_estimate")
|
||||||
|
ub_estimate = estimate_data.get("upper_bound_estimate")
|
||||||
|
|
||||||
|
# Validate against allowed durations
|
||||||
|
if (
|
||||||
|
lb_estimate in ALLOWED_DURATIONS
|
||||||
|
and ub_estimate in ALLOWED_DURATIONS
|
||||||
|
):
|
||||||
|
successful_in_chunk += 1
|
||||||
|
else:
|
||||||
|
print(
|
||||||
|
f"Warning: Invalid duration value(s) in JSON for original index {original_df_index}. LB: '{lb_estimate}', UB: '{ub_estimate}'. Setting to None."
|
||||||
|
)
|
||||||
|
lb_estimate = None
|
||||||
|
ub_estimate = None
|
||||||
|
failed_in_chunk += 1
|
||||||
|
else:
|
||||||
|
# Handle cases where the response structure is unexpected or indicates an error
|
||||||
|
finish_reason = (
|
||||||
|
response.choices[0].finish_reason
|
||||||
|
if (response.choices and response.choices[0].finish_reason)
|
||||||
|
else "unknown"
|
||||||
|
)
|
||||||
|
print(
|
||||||
|
f"Warning: Received non-standard or empty response content for original index {original_df_index}. "
|
||||||
|
f"Finish Reason: '{finish_reason}'. Raw Response Choices: {response.choices}"
|
||||||
|
)
|
||||||
|
failed_in_chunk += 1
|
||||||
|
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
# Log content_str which failed parsing
|
||||||
|
print(
|
||||||
|
f"Warning: Could not decode JSON for original index {original_df_index}. Content received: '{content_str}'"
|
||||||
|
)
|
||||||
|
failed_in_chunk += 1
|
||||||
|
except AttributeError as ae:
|
||||||
|
print(
|
||||||
|
f"Warning: Missing expected attribute processing response for original index {original_df_index}: {ae}. Response: {response}"
|
||||||
|
)
|
||||||
|
failed_in_chunk += 1
|
||||||
|
except Exception as e:
|
||||||
|
print(
|
||||||
|
f"Warning: An unexpected error occurred processing response for original index {original_df_index}: {type(e).__name__} - {e}. Response: {response}"
|
||||||
|
)
|
||||||
|
failed_in_chunk += 1
|
||||||
|
|
||||||
|
# Store successfully parsed results
|
||||||
|
if lb_estimate is not None:
|
||||||
|
chunk_lb_estimates[original_df_index] = lb_estimate
|
||||||
|
if ub_estimate is not None:
|
||||||
|
chunk_ub_estimates[original_df_index] = ub_estimate
|
||||||
|
|
||||||
|
else:
|
||||||
|
print(
|
||||||
|
f"Warning: Mismatch between number of responses ({len(responses) if responses else 0}) "
|
||||||
|
f"and messages sent ({len(message_chunk)}) for chunk {i + 1}. Marking all as failed."
|
||||||
|
)
|
||||||
|
failed_in_chunk = len(message_chunk)
|
||||||
|
|
||||||
|
print(
|
||||||
|
f"Chunk {i + 1} processing summary: Success={successful_in_chunk}, Failed/Skipped={failed_in_chunk}"
|
||||||
|
)
|
||||||
|
processed_count_total += successful_in_chunk
|
||||||
|
|
||||||
|
# --- Update Main DataFrame and Save Periodically ---
|
||||||
|
if chunk_lb_estimates or chunk_ub_estimates:
|
||||||
|
print(
|
||||||
|
f"Updating main DataFrame with {len(chunk_lb_estimates)} LB and {len(chunk_ub_estimates)} UB estimates for chunk {i + 1}..."
|
||||||
|
)
|
||||||
|
if not pd.api.types.is_object_dtype(df["lb_estimate"]):
|
||||||
|
df["lb_estimate"] = df["lb_estimate"].astype(object)
|
||||||
|
if not pd.api.types.is_object_dtype(df["ub_estimate"]):
|
||||||
|
df["ub_estimate"] = df["ub_estimate"].astype(object)
|
||||||
|
|
||||||
|
for idx, lb in chunk_lb_estimates.items():
|
||||||
|
if idx in df.index:
|
||||||
|
df.loc[idx, "lb_estimate"] = lb
|
||||||
|
for idx, ub in chunk_ub_estimates.items():
|
||||||
|
if idx in df.index:
|
||||||
|
df.loc[idx, "ub_estimate"] = ub
|
||||||
|
|
||||||
|
print(f"Saving progress to {FILENAME}...")
|
||||||
|
save_dataframe(df, FILENAME)
|
||||||
|
else:
|
||||||
|
print(f"No successful estimates obtained in chunk {i + 1} to save.")
|
||||||
|
|
||||||
|
# --- Rate Limiting Pause ---
|
||||||
|
chunk_end_time = time.time()
|
||||||
|
chunk_duration = chunk_end_time - chunk_start_time
|
||||||
|
print(f"Chunk {i + 1} took {chunk_duration:.2f} seconds.")
|
||||||
|
|
||||||
|
if i < num_chunks - 1:
|
||||||
|
time_per_request = SECONDS_PER_MINUTE / RATE_LIMIT if RATE_LIMIT > 0 else 0
|
||||||
|
min_chunk_duration_for_rate = len(message_chunk) * time_per_request
|
||||||
|
pause_needed = max(0, min_chunk_duration_for_rate - chunk_duration)
|
||||||
|
|
||||||
|
if pause_needed > 0:
|
||||||
|
print(
|
||||||
|
f"Pausing for {pause_needed:.2f} seconds to respect rate limit ({RATE_LIMIT}/min)..."
|
||||||
|
)
|
||||||
|
time.sleep(pause_needed)
|
||||||
|
|
||||||
|
overall_end_time = time.time()
|
||||||
|
total_duration_minutes = (overall_end_time - overall_start_time) / 60
|
||||||
|
print(
|
||||||
|
f"\nBatch completion finished."
|
||||||
|
f" Processed {processed_count_total} new estimates in this run in {total_duration_minutes:.2f} minutes."
|
||||||
|
)
|
||||||
|
|
||||||
|
print(f"Performing final save check to {FILENAME}...")
|
||||||
|
save_dataframe(df, FILENAME)
|
||||||
|
|
||||||
|
print("\nScript finished.")
|
2416
analysis.ipynb
Normal file
2416
analysis.ipynb
Normal file
File diff suppressed because one or more lines are too long
4898
data_enrichment.ipynb
Normal file
4898
data_enrichment.ipynb
Normal file
File diff suppressed because one or more lines are too long
|
@ -3,35 +3,38 @@ import pandas as pd
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
import numpy as np # Import numpy for nan handling if necessary
|
import numpy as np
|
||||||
|
|
||||||
# --- Configuration ---
|
# --- Configuration ---
|
||||||
DB_FILE = "onet.database"
|
DB_FILE = "onet.database"
|
||||||
OUTPUT_FILE = "task_ratings_enriched.json"
|
OUTPUT_FILE = "task_ratings_enriched.json" # Changed output filename
|
||||||
|
|
||||||
# --- Database Interaction ---
|
# --- Database Interaction ---
|
||||||
|
|
||||||
|
|
||||||
def fetch_data_from_db(db_path):
|
def fetch_data_from_db(db_path):
|
||||||
"""
|
"""
|
||||||
Fetches required data from the O*NET SQLite database using JOINs.
|
Fetches required data from the O*NET SQLite database using JOINs,
|
||||||
|
including DWAs.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
db_path (str): Path to the SQLite database file.
|
db_path (str): Path to the SQLite database file.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
pandas.DataFrame: DataFrame containing joined data from task_ratings,
|
tuple(pandas.DataFrame, pandas.DataFrame): A tuple containing:
|
||||||
task_statements, and occupation_data.
|
- DataFrame with task ratings info.
|
||||||
Returns None if the database file doesn't exist or an error occurs.
|
- DataFrame with task-to-DWA mapping.
|
||||||
|
Returns (None, None) if the database file doesn't exist or an error occurs.
|
||||||
"""
|
"""
|
||||||
if not os.path.exists(db_path):
|
if not os.path.exists(db_path):
|
||||||
print(f"Error: Database file not found at {db_path}")
|
print(f"Error: Database file not found at {db_path}")
|
||||||
return None
|
return None, None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
conn = sqlite3.connect(db_path)
|
conn = sqlite3.connect(db_path)
|
||||||
# Construct the SQL query to join the tables and select necessary columns
|
# Construct the SQL query to join the tables and select necessary columns
|
||||||
# We select all relevant columns needed for processing.
|
# Added LEFT JOINs for tasks_to_dwas and dwa_reference
|
||||||
|
# Use LEFT JOIN in case a task has no DWAs
|
||||||
query = """
|
query = """
|
||||||
SELECT
|
SELECT
|
||||||
tr.onetsoc_code,
|
tr.onetsoc_code,
|
||||||
|
@ -41,136 +44,277 @@ def fetch_data_from_db(db_path):
|
||||||
od.description AS occupation_description,
|
od.description AS occupation_description,
|
||||||
tr.scale_id,
|
tr.scale_id,
|
||||||
tr.category,
|
tr.category,
|
||||||
tr.data_value
|
tr.data_value,
|
||||||
|
dr.dwa_title -- Added DWA title
|
||||||
FROM
|
FROM
|
||||||
task_ratings tr
|
task_ratings tr
|
||||||
JOIN
|
JOIN
|
||||||
task_statements ts ON tr.task_id = ts.task_id
|
task_statements ts ON tr.task_id = ts.task_id
|
||||||
JOIN
|
JOIN
|
||||||
occupation_data od ON tr.onetsoc_code = od.onetsoc_code;
|
occupation_data od ON tr.onetsoc_code = od.onetsoc_code
|
||||||
|
LEFT JOIN
|
||||||
|
tasks_to_dwas td ON tr.onetsoc_code = td.onetsoc_code AND tr.task_id = td.task_id --
|
||||||
|
LEFT JOIN
|
||||||
|
dwa_reference dr ON td.dwa_id = dr.dwa_id; --
|
||||||
"""
|
"""
|
||||||
df = pd.read_sql_query(query, conn)
|
df = pd.read_sql_query(query, conn)
|
||||||
conn.close()
|
conn.close()
|
||||||
print(f"Successfully fetched {len(df)} records from the database.")
|
print(
|
||||||
return df
|
f"Successfully fetched {len(df)} records (including DWA info) from the database."
|
||||||
except sqlite3.Error as e:
|
)
|
||||||
print(f"SQLite error: {e}")
|
|
||||||
if conn:
|
|
||||||
conn.close()
|
|
||||||
return None
|
|
||||||
except Exception as e:
|
|
||||||
print(f"An error occurred during data fetching: {e}")
|
|
||||||
if "conn" in locals() and conn:
|
|
||||||
conn.close()
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
if df.empty:
|
||||||
# --- Data Processing ---
|
print("Warning: Fetched DataFrame is empty.")
|
||||||
|
# Return empty DataFrames with expected columns if the main fetch is empty
|
||||||
|
ratings_cols = [
|
||||||
def process_task_ratings(df):
|
|
||||||
"""
|
|
||||||
Processes the fetched data to group, pivot frequency, calculate averages,
|
|
||||||
and structure the output.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
df (pandas.DataFrame): The input DataFrame with joined data.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
list: A list of dictionaries, each representing an enriched task rating.
|
|
||||||
Returns None if the input DataFrame is invalid.
|
|
||||||
"""
|
|
||||||
if df is None or df.empty:
|
|
||||||
print("Error: Input DataFrame is empty or invalid.")
|
|
||||||
return None
|
|
||||||
|
|
||||||
print("Starting data processing...")
|
|
||||||
|
|
||||||
# --- 1. Handle Frequency (FT) ---
|
|
||||||
# Filter for Frequency ratings
|
|
||||||
freq_df = df[df["scale_id"] == "FT"].copy()
|
|
||||||
# Pivot the frequency data: index by task and occupation, columns by category
|
|
||||||
# We fill missing frequency values with 0, assuming no rating means 0% for that category.
|
|
||||||
freq_pivot = freq_df.pivot_table(
|
|
||||||
index=["onetsoc_code", "task_id"],
|
|
||||||
columns="category",
|
|
||||||
values="data_value",
|
|
||||||
fill_value=0, # Fill missing categories for a task/occupation with 0
|
|
||||||
)
|
|
||||||
# Rename columns for clarity using the requested format
|
|
||||||
freq_pivot.columns = [
|
|
||||||
f"frequency_category_{int(col)}" for col in freq_pivot.columns
|
|
||||||
] # <-- UPDATED LINE
|
|
||||||
print(f"Processed Frequency data. Shape: {freq_pivot.shape}")
|
|
||||||
|
|
||||||
# --- 2. Handle Importance (IM, IJ) ---
|
|
||||||
# Filter for Importance ratings
|
|
||||||
imp_df = df[df["scale_id"].isin(["IM", "IJ"])].copy()
|
|
||||||
# Group by task and occupation, calculate the mean importance
|
|
||||||
# Using np.nanmean to handle potential NaN values gracefully if any exist
|
|
||||||
imp_avg = (
|
|
||||||
imp_df.groupby(["onetsoc_code", "task_id"])["data_value"].mean().reset_index()
|
|
||||||
)
|
|
||||||
imp_avg.rename(columns={"data_value": "importance_average"}, inplace=True)
|
|
||||||
print(f"Processed Importance data. Shape: {imp_avg.shape}")
|
|
||||||
|
|
||||||
# --- 3. Handle Relevance (RT) ---
|
|
||||||
# Filter for Relevance ratings
|
|
||||||
rel_df = df[df["scale_id"] == "RT"].copy()
|
|
||||||
# Group by task and occupation, calculate the mean relevance
|
|
||||||
rel_avg = (
|
|
||||||
rel_df.groupby(["onetsoc_code", "task_id"])["data_value"].mean().reset_index()
|
|
||||||
)
|
|
||||||
rel_avg.rename(columns={"data_value": "relevance_average"}, inplace=True)
|
|
||||||
print(f"Processed Relevance data. Shape: {rel_avg.shape}")
|
|
||||||
|
|
||||||
# --- 4. Get Base Task/Occupation Info ---
|
|
||||||
# Select unique combinations of task and occupation details
|
|
||||||
base_info = (
|
|
||||||
df[
|
|
||||||
[
|
|
||||||
"onetsoc_code",
|
"onetsoc_code",
|
||||||
"task_id",
|
"task_id",
|
||||||
"task",
|
"task",
|
||||||
"occupation_title",
|
"occupation_title",
|
||||||
"occupation_description",
|
"occupation_description",
|
||||||
|
"scale_id",
|
||||||
|
"category",
|
||||||
|
"data_value",
|
||||||
]
|
]
|
||||||
]
|
dwa_cols = ["onetsoc_code", "task_id", "dwa_title"]
|
||||||
.drop_duplicates()
|
return pd.DataFrame(columns=ratings_cols), pd.DataFrame(columns=dwa_cols)
|
||||||
.set_index(["onetsoc_code", "task_id"])
|
|
||||||
)
|
|
||||||
print(f"Extracted base info. Shape: {base_info.shape}")
|
|
||||||
|
|
||||||
# --- 5. Merge Processed Data ---
|
# Remove duplicates caused by joining ratings with potentially multiple DWAs per task
|
||||||
# Start with the base info and merge the calculated/pivoted data
|
# Keep only unique combinations of the core task/rating info before processing
|
||||||
# Use 'left' joins to ensure all tasks/occupations from the base_info are kept.
|
core_cols = [
|
||||||
# If a task/occupation doesn't have frequency, importance, or relevance ratings,
|
"onetsoc_code",
|
||||||
# the corresponding columns will have NaN values after the merge.
|
"task_id",
|
||||||
|
"task",
|
||||||
|
"occupation_title",
|
||||||
|
"occupation_description",
|
||||||
|
"scale_id",
|
||||||
|
"category",
|
||||||
|
"data_value",
|
||||||
|
]
|
||||||
|
# Check if all core columns exist before attempting to drop duplicates
|
||||||
|
missing_core_cols = [col for col in core_cols if col not in df.columns]
|
||||||
|
if missing_core_cols:
|
||||||
|
print(f"Error: Missing core columns in fetched data: {missing_core_cols}")
|
||||||
|
return None, None
|
||||||
|
ratings_df = df[core_cols].drop_duplicates().reset_index(drop=True)
|
||||||
|
|
||||||
|
# Get unique DWA info separately
|
||||||
|
dwa_cols = ["onetsoc_code", "task_id", "dwa_title"]
|
||||||
|
# Check if all DWA columns exist before processing
|
||||||
|
if all(col in df.columns for col in dwa_cols):
|
||||||
|
dwas_df = (
|
||||||
|
df[dwa_cols]
|
||||||
|
.dropna(subset=["dwa_title"])
|
||||||
|
.drop_duplicates()
|
||||||
|
.reset_index(drop=True)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
print("Warning: DWA related columns missing, creating empty DWA DataFrame.")
|
||||||
|
dwas_df = pd.DataFrame(
|
||||||
|
columns=dwa_cols
|
||||||
|
) # Create empty df if columns missing
|
||||||
|
|
||||||
|
return ratings_df, dwas_df # Return two dataframes now
|
||||||
|
|
||||||
|
except sqlite3.Error as e:
|
||||||
|
print(f"SQLite error: {e}")
|
||||||
|
if "conn" in locals() and conn:
|
||||||
|
conn.close()
|
||||||
|
return None, None # Return None for both if error
|
||||||
|
except Exception as e:
|
||||||
|
print(f"An error occurred during data fetching: {e}")
|
||||||
|
if "conn" in locals() and conn:
|
||||||
|
conn.close()
|
||||||
|
return None, None # Return None for both if error
|
||||||
|
|
||||||
|
|
||||||
|
# --- Data Processing ---
|
||||||
|
|
||||||
|
|
||||||
|
def process_task_ratings_with_dwas(ratings_df, dwas_df):
|
||||||
|
"""
|
||||||
|
Processes the fetched data to group, pivot frequency, calculate averages,
|
||||||
|
structure the output, and add associated DWAs.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
ratings_df (pandas.DataFrame): The input DataFrame with task ratings info.
|
||||||
|
dwas_df (pandas.DataFrame): The input DataFrame with task-to-DWA mapping. Can be None or empty.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list: A list of dictionaries, each representing an enriched task rating with DWAs.
|
||||||
|
Returns None if the input ratings DataFrame is invalid.
|
||||||
|
"""
|
||||||
|
if ratings_df is None or not isinstance(
|
||||||
|
ratings_df, pd.DataFrame
|
||||||
|
): # Check if it's a DataFrame
|
||||||
|
print("Error: Input ratings DataFrame is invalid.")
|
||||||
|
return None
|
||||||
|
if ratings_df.empty:
|
||||||
|
print(
|
||||||
|
"Warning: Input ratings DataFrame is empty. Processing will yield empty result."
|
||||||
|
)
|
||||||
|
# Decide how to handle empty input, maybe return empty list directly
|
||||||
|
# return []
|
||||||
|
|
||||||
|
# Ensure dwas_df is a DataFrame, even if empty
|
||||||
|
if dwas_df is None or not isinstance(dwas_df, pd.DataFrame):
|
||||||
|
print("Warning: Invalid or missing DWA DataFrame. Proceeding without DWA data.")
|
||||||
|
dwas_df = pd.DataFrame(
|
||||||
|
columns=["onetsoc_code", "task_id", "dwa_title"]
|
||||||
|
) # Ensure it's an empty DF
|
||||||
|
|
||||||
|
print("Starting data processing...")
|
||||||
|
|
||||||
|
# --- 1. Handle Frequency (FT) ---
|
||||||
|
freq_df = ratings_df[ratings_df["scale_id"] == "FT"].copy()
|
||||||
|
if not freq_df.empty:
|
||||||
|
freq_pivot = freq_df.pivot_table(
|
||||||
|
index=["onetsoc_code", "task_id"],
|
||||||
|
columns="category",
|
||||||
|
values="data_value",
|
||||||
|
fill_value=0,
|
||||||
|
)
|
||||||
|
freq_pivot.columns = [
|
||||||
|
f"frequency_category_{int(col)}" for col in freq_pivot.columns
|
||||||
|
]
|
||||||
|
print(f"Processed Frequency data. Shape: {freq_pivot.shape}")
|
||||||
|
else:
|
||||||
|
print("No Frequency (FT) data found.")
|
||||||
|
# Create an empty DataFrame with the multi-index to allow merging later
|
||||||
|
idx = pd.MultiIndex(
|
||||||
|
levels=[[], []], codes=[[], []], names=["onetsoc_code", "task_id"]
|
||||||
|
)
|
||||||
|
freq_pivot = pd.DataFrame(index=idx)
|
||||||
|
|
||||||
|
# --- 2. Handle Importance (IM, IJ) ---
|
||||||
|
imp_df = ratings_df[ratings_df["scale_id"].isin(["IM", "IJ"])].copy()
|
||||||
|
if not imp_df.empty:
|
||||||
|
imp_avg = (
|
||||||
|
imp_df.groupby(["onetsoc_code", "task_id"])["data_value"]
|
||||||
|
.mean()
|
||||||
|
.reset_index()
|
||||||
|
)
|
||||||
|
imp_avg.rename(columns={"data_value": "importance_average"}, inplace=True)
|
||||||
|
print(f"Processed Importance data. Shape: {imp_avg.shape}")
|
||||||
|
else:
|
||||||
|
print("No Importance (IM, IJ) data found.")
|
||||||
|
imp_avg = pd.DataFrame(
|
||||||
|
columns=["onetsoc_code", "task_id", "importance_average"]
|
||||||
|
)
|
||||||
|
|
||||||
|
# --- 3. Handle Relevance (RT) ---
|
||||||
|
rel_df = ratings_df[ratings_df["scale_id"] == "RT"].copy()
|
||||||
|
if not rel_df.empty:
|
||||||
|
rel_avg = (
|
||||||
|
rel_df.groupby(["onetsoc_code", "task_id"])["data_value"]
|
||||||
|
.mean()
|
||||||
|
.reset_index()
|
||||||
|
)
|
||||||
|
rel_avg.rename(columns={"data_value": "relevance_average"}, inplace=True)
|
||||||
|
print(f"Processed Relevance data. Shape: {rel_avg.shape}")
|
||||||
|
else:
|
||||||
|
print("No Relevance (RT) data found.")
|
||||||
|
rel_avg = pd.DataFrame(columns=["onetsoc_code", "task_id", "relevance_average"])
|
||||||
|
|
||||||
|
# --- 4. Process DWAs ---
|
||||||
|
if dwas_df is not None and not dwas_df.empty and "dwa_title" in dwas_df.columns:
|
||||||
|
print("Processing DWA data...")
|
||||||
|
# Group DWAs by task_id and aggregate titles into a list
|
||||||
|
dwas_grouped = (
|
||||||
|
dwas_df.groupby(["onetsoc_code", "task_id"])["dwa_title"]
|
||||||
|
.apply(list)
|
||||||
|
.reset_index()
|
||||||
|
) #
|
||||||
|
dwas_grouped.rename(
|
||||||
|
columns={"dwa_title": "dwas"}, inplace=True
|
||||||
|
) # Rename column to 'dwas'
|
||||||
|
print(f"Processed DWA data. Shape: {dwas_grouped.shape}")
|
||||||
|
else:
|
||||||
|
print("No valid DWA data found or provided for processing.")
|
||||||
|
dwas_grouped = None # Set to None if no DWAs
|
||||||
|
|
||||||
|
# --- 5. Get Base Task/Occupation Info ---
|
||||||
|
base_cols = [
|
||||||
|
"onetsoc_code",
|
||||||
|
"task_id",
|
||||||
|
"task",
|
||||||
|
"occupation_title",
|
||||||
|
"occupation_description",
|
||||||
|
]
|
||||||
|
# Check if base columns exist in ratings_df
|
||||||
|
missing_base_cols = [col for col in base_cols if col not in ratings_df.columns]
|
||||||
|
if missing_base_cols:
|
||||||
|
print(
|
||||||
|
f"Error: Missing base info columns in ratings_df: {missing_base_cols}. Cannot proceed."
|
||||||
|
)
|
||||||
|
return None
|
||||||
|
if not ratings_df.empty:
|
||||||
|
base_info = (
|
||||||
|
ratings_df[base_cols]
|
||||||
|
.drop_duplicates()
|
||||||
|
.set_index(["onetsoc_code", "task_id"])
|
||||||
|
)
|
||||||
|
print(f"Extracted base info. Shape: {base_info.shape}")
|
||||||
|
else:
|
||||||
|
print("Cannot extract base info from empty ratings DataFrame.")
|
||||||
|
# Create an empty df with index to avoid errors later if possible
|
||||||
|
idx = pd.MultiIndex(
|
||||||
|
levels=[[], []], codes=[[], []], names=["onetsoc_code", "task_id"]
|
||||||
|
)
|
||||||
|
base_info = pd.DataFrame(
|
||||||
|
index=idx,
|
||||||
|
columns=[
|
||||||
|
col for col in base_cols if col not in ["onetsoc_code", "task_id"]
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
# --- 6. Merge Processed Data ---
|
||||||
print("Merging processed data...")
|
print("Merging processed data...")
|
||||||
|
# Start with base_info, which should have the index ['onetsoc_code', 'task_id']
|
||||||
final_df = base_info.merge(
|
final_df = base_info.merge(
|
||||||
freq_pivot, left_index=True, right_index=True, how="left"
|
freq_pivot, left_index=True, right_index=True, how="left"
|
||||||
)
|
)
|
||||||
# Set index before merging averages which are not multi-indexed
|
# Reset index before merging non-indexed dfs
|
||||||
final_df = final_df.reset_index()
|
final_df = final_df.reset_index()
|
||||||
final_df = final_df.merge(imp_avg, on=["onetsoc_code", "task_id"], how="left")
|
|
||||||
final_df = final_df.merge(rel_avg, on=["onetsoc_code", "task_id"], how="left")
|
|
||||||
|
|
||||||
# Fill potential NaN values resulting from left joins if needed.
|
# Merge averages - check if they are not empty before merging
|
||||||
# For averages, NaN might mean no rating was provided. We can leave them as NaN
|
if not imp_avg.empty:
|
||||||
# or fill with 0 or another placeholder depending on desired interpretation.
|
final_df = final_df.merge(imp_avg, on=["onetsoc_code", "task_id"], how="left")
|
||||||
# For frequency categories, NaN could mean that category wasn't rated. We filled with 0 during pivot.
|
else:
|
||||||
# Example: Fill NaN averages with 0
|
final_df["importance_average"] = np.nan # Add column if imp_avg was empty
|
||||||
# final_df['importance_average'].fillna(0, inplace=True)
|
|
||||||
# final_df['relevance_average'].fillna(0, inplace=True)
|
if not rel_avg.empty:
|
||||||
# Note: Leaving NaNs might be more informative.
|
final_df = final_df.merge(rel_avg, on=["onetsoc_code", "task_id"], how="left")
|
||||||
|
else:
|
||||||
|
final_df["relevance_average"] = np.nan # Add column if rel_avg was empty
|
||||||
|
|
||||||
|
# Merge DWAs if available
|
||||||
|
if dwas_grouped is not None and not dwas_grouped.empty:
|
||||||
|
final_df = final_df.merge(
|
||||||
|
dwas_grouped, on=["onetsoc_code", "task_id"], how="left"
|
||||||
|
) # Merge the dwas list
|
||||||
|
# Fill NaN in 'dwas' column (for tasks with no DWAs) with empty lists
|
||||||
|
# Check if 'dwas' column exists before applying function
|
||||||
|
if "dwas" in final_df.columns:
|
||||||
|
final_df["dwas"] = final_df["dwas"].apply(
|
||||||
|
lambda x: x if isinstance(x, list) else []
|
||||||
|
) # Ensure tasks without DWAs get []
|
||||||
|
else:
|
||||||
|
print("Warning: 'dwas' column not created during merge.")
|
||||||
|
final_df["dwas"] = [
|
||||||
|
[] for _ in range(len(final_df))
|
||||||
|
] # Add empty list column
|
||||||
|
|
||||||
|
else:
|
||||||
|
# Add an empty 'dwas' column if no DWA data was processed or merged
|
||||||
|
final_df["dwas"] = [[] for _ in range(len(final_df))]
|
||||||
|
|
||||||
print(f"Final merged data shape: {final_df.shape}")
|
print(f"Final merged data shape: {final_df.shape}")
|
||||||
|
|
||||||
# Convert DataFrame to list of dictionaries for JSON output
|
# Convert DataFrame to list of dictionaries for JSON output
|
||||||
# Handle potential NaN values during JSON conversion
|
# Handle potential NaN values during JSON conversion
|
||||||
final_df = final_df.replace(
|
# Replace numpy NaN with Python None for JSON compatibility
|
||||||
{np.nan: None}
|
final_df = final_df.replace({np.nan: None})
|
||||||
) # Replace numpy NaN with Python None for JSON compatibility
|
|
||||||
result_list = final_df.to_dict(orient="records")
|
result_list = final_df.to_dict(orient="records")
|
||||||
|
|
||||||
return result_list
|
return result_list
|
||||||
|
@ -190,13 +334,30 @@ def write_to_json(data, output_path):
|
||||||
if data is None:
|
if data is None:
|
||||||
print("No data to write to JSON.")
|
print("No data to write to JSON.")
|
||||||
return
|
return
|
||||||
|
if not isinstance(data, list):
|
||||||
|
print(
|
||||||
|
f"Error: Data to write is not a list (type: {type(data)}). Cannot write to JSON."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
# Create directory if it doesn't exist
|
||||||
|
output_dir = os.path.dirname(output_path)
|
||||||
|
if output_dir and not os.path.exists(output_dir):
|
||||||
|
try:
|
||||||
|
os.makedirs(output_dir)
|
||||||
|
print(f"Created output directory: {output_dir}")
|
||||||
|
except OSError as e:
|
||||||
|
print(f"Error creating output directory {output_dir}: {e}")
|
||||||
|
return # Exit if cannot create directory
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(output_path, "w", encoding="utf-8") as f:
|
with open(output_path, "w", encoding="utf-8") as f:
|
||||||
json.dump(data, f, indent=4, ensure_ascii=False)
|
json.dump(data, f, indent=4, ensure_ascii=False)
|
||||||
print(f"Successfully wrote enriched data to {output_path}")
|
print(f"Successfully wrote enriched data to {output_path}")
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
print(f"Error writing JSON file: {e}")
|
print(f"Error writing JSON file to {output_path}: {e}")
|
||||||
|
except TypeError as e:
|
||||||
|
print(f"Error during JSON serialization: {e}. Check data types.")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"An unexpected error occurred during JSON writing: {e}")
|
print(f"An unexpected error occurred during JSON writing: {e}")
|
||||||
|
|
||||||
|
@ -204,20 +365,28 @@ def write_to_json(data, output_path):
|
||||||
# --- Main Execution ---
|
# --- Main Execution ---
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print("Starting O*NET Task Ratings Enrichment Script...")
|
print("Starting O*NET Task Ratings & DWAs Enrichment Script...")
|
||||||
# 1. Fetch data
|
# 1. Fetch data
|
||||||
raw_data_df = fetch_data_from_db(DB_FILE)
|
ratings_data_df, dwas_data_df = fetch_data_from_db(DB_FILE) # Fetch both datasets
|
||||||
|
|
||||||
# 2. Process data
|
# 2. Process data
|
||||||
if raw_data_df is not None:
|
# Proceed only if ratings_data_df is a valid DataFrame (even if empty)
|
||||||
enriched_data = process_task_ratings(raw_data_df)
|
# dwas_data_df can be None or empty, handled inside process function
|
||||||
|
if isinstance(ratings_data_df, pd.DataFrame):
|
||||||
|
enriched_data = process_task_ratings_with_dwas(
|
||||||
|
ratings_data_df, dwas_data_df
|
||||||
|
) # Pass both dataframes
|
||||||
|
|
||||||
# 3. Write output
|
# 3. Write output
|
||||||
if enriched_data:
|
if (
|
||||||
|
enriched_data is not None
|
||||||
|
): # Check if processing returned data (even an empty list is valid)
|
||||||
write_to_json(enriched_data, OUTPUT_FILE)
|
write_to_json(enriched_data, OUTPUT_FILE)
|
||||||
else:
|
else:
|
||||||
print("Data processing failed. No output file generated.")
|
print("Data processing failed or returned None. No output file generated.")
|
||||||
else:
|
else:
|
||||||
print("Data fetching failed. Script terminated.")
|
print(
|
||||||
|
"Data fetching failed or returned invalid type for ratings data. Script terminated."
|
||||||
|
)
|
||||||
|
|
||||||
print("Script finished.")
|
print("Script finished.")
|
||||||
|
|
2441
evaluate_llm_time_estimations.ipynb
Normal file
2441
evaluate_llm_time_estimations.ipynb
Normal file
File diff suppressed because one or more lines are too long
|
@ -24,7 +24,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 9,
|
"execution_count": 3,
|
||||||
"id": "941d511f-ad72-4306-bbab-52127583e513",
|
"id": "941d511f-ad72-4306-bbab-52127583e513",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 3,
|
"execution_count": 4,
|
||||||
"id": "a5351f8b-c2ad-4d3e-af4a-992f539a6064",
|
"id": "a5351f8b-c2ad-4d3e-af4a-992f539a6064",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
|
@ -73,7 +73,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 4,
|
"execution_count": 5,
|
||||||
"id": "8b2ab22a-afab-41f9-81a3-48eab261b568",
|
"id": "8b2ab22a-afab-41f9-81a3-48eab261b568",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
|
@ -106,87 +106,9 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 11,
|
"execution_count": 16,
|
||||||
"id": "d2e4a855-f327-4b3d-ad0b-ed997e720639",
|
"id": "d2e4a855-f327-4b3d-ad0b-ed997e720639",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"df_oesm_detailed = df_oesm[df_oesm['O_GROUP'] == 'detailed'][['OCC_CODE', 'TOT_EMP', 'H_MEAN', 'A_MEAN']].copy()\n",
|
|
||||||
"df_enriched_trs['occ_code_join'] = df_enriched_trs['onetsoc_code'].str[:7]\n",
|
|
||||||
"df_merged = pd.merge(\n",
|
|
||||||
" df_enriched_trs,\n",
|
|
||||||
" df_oesm_detailed,\n",
|
|
||||||
" left_on='occ_code_join',\n",
|
|
||||||
" right_on='OCC_CODE',\n",
|
|
||||||
" how='left'\n",
|
|
||||||
")\n",
|
|
||||||
"df_merged = df_merged.drop(columns=['occ_code_join'])"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 12,
|
|
||||||
"id": "9be7acb5-2374-4f61-bba3-13b0077c0bd2",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "stdout",
|
|
||||||
"output_type": "stream",
|
|
||||||
"text": [
|
|
||||||
"Task: Develop or recommend network security measures, such as firewalls, network security audits, or automated security probes.\n",
|
|
||||||
"Occupation Description: Design and implement computer and information networks, such as local area networks (LAN), wide area networks (WAN), intranets, extranets, and other data communications networks. Perform network modeling, analysis, and planning, including analysis of capacity needs for network infrastructures. May also design network and computer security measures. May research and recommend network and data communications hardware and software.\n",
|
|
||||||
"Occupation Title: Computer Network Architects\n"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"data": {
|
|
||||||
"text/plain": [
|
|
||||||
"onetsoc_code 15-1241.00\n",
|
|
||||||
"task_id 18971\n",
|
|
||||||
"task Develop or recommend network security measures...\n",
|
|
||||||
"occupation_title Computer Network Architects\n",
|
|
||||||
"occupation_description Design and implement computer and information ...\n",
|
|
||||||
"Yearly or less 0.0\n",
|
|
||||||
"More than yearly 30.0\n",
|
|
||||||
"More than monthly 15.0\n",
|
|
||||||
"More than weekly 20.0\n",
|
|
||||||
"Daily 15.0\n",
|
|
||||||
"Several times daily 15.0\n",
|
|
||||||
"Hourly or more 5.0\n",
|
|
||||||
"importance_average 4.35\n",
|
|
||||||
"relevance_average 100.0\n",
|
|
||||||
"occ_code_join 15-1241\n",
|
|
||||||
"remote remote\n",
|
|
||||||
"Name: 45200, dtype: object"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"execution_count": 12,
|
|
||||||
"metadata": {},
|
|
||||||
"output_type": "execute_result"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
|
||||||
"\n",
|
|
||||||
"df_merged = pd \\\n",
|
|
||||||
" .merge(left=df_enriched_trs, right=df_remote_status[['O*NET-SOC Code', 'Remote']], how='left', left_on='onetsoc_code', right_on='O*NET-SOC Code') \\\n",
|
|
||||||
" .drop(columns=['O*NET-SOC Code']) \\\n",
|
|
||||||
" .rename(columns={'Remote': 'remote'}) \\\n",
|
|
||||||
" .rename(columns=FREQUENCY_MAP) \\\n",
|
|
||||||
" .query('remote == \"remote\" and importance_average >= 3')\n",
|
|
||||||
"\n",
|
|
||||||
"row = df_merged.iloc[30000]\n",
|
|
||||||
"print('Task: ', row['task'])\n",
|
|
||||||
"print('Occupation Description: ', row['occupation_description'])\n",
|
|
||||||
"print('Occupation Title: ', row['occupation_title'])\n",
|
|
||||||
"\n",
|
|
||||||
"row"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 13,
|
|
||||||
"id": "9e5ea89f-2c18-459d-851d-dacb379f4a2e",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
|
@ -214,16 +136,15 @@
|
||||||
" <th>task</th>\n",
|
" <th>task</th>\n",
|
||||||
" <th>occupation_title</th>\n",
|
" <th>occupation_title</th>\n",
|
||||||
" <th>occupation_description</th>\n",
|
" <th>occupation_description</th>\n",
|
||||||
" <th>Yearly or less</th>\n",
|
" <th>frequency_category_1</th>\n",
|
||||||
" <th>More than yearly</th>\n",
|
" <th>frequency_category_2</th>\n",
|
||||||
" <th>More than monthly</th>\n",
|
" <th>frequency_category_3</th>\n",
|
||||||
" <th>More than weekly</th>\n",
|
" <th>frequency_category_4</th>\n",
|
||||||
" <th>Daily</th>\n",
|
" <th>frequency_category_5</th>\n",
|
||||||
" <th>Several times daily</th>\n",
|
" <th>frequency_category_6</th>\n",
|
||||||
" <th>Hourly or more</th>\n",
|
" <th>frequency_category_7</th>\n",
|
||||||
" <th>importance_average</th>\n",
|
" <th>importance_average</th>\n",
|
||||||
" <th>relevance_average</th>\n",
|
" <th>relevance_average</th>\n",
|
||||||
" <th>remote</th>\n",
|
|
||||||
" <th>OCC_CODE</th>\n",
|
" <th>OCC_CODE</th>\n",
|
||||||
" <th>TOT_EMP</th>\n",
|
" <th>TOT_EMP</th>\n",
|
||||||
" <th>H_MEAN</th>\n",
|
" <th>H_MEAN</th>\n",
|
||||||
|
@ -247,7 +168,6 @@
|
||||||
" <td>2.63</td>\n",
|
" <td>2.63</td>\n",
|
||||||
" <td>4.52</td>\n",
|
" <td>4.52</td>\n",
|
||||||
" <td>74.44</td>\n",
|
" <td>74.44</td>\n",
|
||||||
" <td>remote</td>\n",
|
|
||||||
" <td>11-1011</td>\n",
|
" <td>11-1011</td>\n",
|
||||||
" <td>211230.0</td>\n",
|
" <td>211230.0</td>\n",
|
||||||
" <td>124.47</td>\n",
|
" <td>124.47</td>\n",
|
||||||
|
@ -256,20 +176,19 @@
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>1</th>\n",
|
" <th>1</th>\n",
|
||||||
" <td>11-1011.00</td>\n",
|
" <td>11-1011.00</td>\n",
|
||||||
" <td>8823</td>\n",
|
" <td>8824</td>\n",
|
||||||
" <td>Direct or coordinate an organization's financi...</td>\n",
|
" <td>Confer with board members, organization offici...</td>\n",
|
||||||
" <td>Chief Executives</td>\n",
|
" <td>Chief Executives</td>\n",
|
||||||
" <td>Determine and formulate policies and provide o...</td>\n",
|
" <td>Determine and formulate policies and provide o...</td>\n",
|
||||||
" <td>5.92</td>\n",
|
" <td>1.42</td>\n",
|
||||||
" <td>15.98</td>\n",
|
" <td>14.44</td>\n",
|
||||||
" <td>29.68</td>\n",
|
" <td>27.31</td>\n",
|
||||||
" <td>21.18</td>\n",
|
" <td>25.52</td>\n",
|
||||||
" <td>19.71</td>\n",
|
" <td>26.88</td>\n",
|
||||||
" <td>4.91</td>\n",
|
" <td>2.52</td>\n",
|
||||||
" <td>2.63</td>\n",
|
" <td>1.90</td>\n",
|
||||||
" <td>4.52</td>\n",
|
" <td>4.32</td>\n",
|
||||||
" <td>74.44</td>\n",
|
" <td>81.71</td>\n",
|
||||||
" <td>remote</td>\n",
|
|
||||||
" <td>11-1011</td>\n",
|
" <td>11-1011</td>\n",
|
||||||
" <td>211230.0</td>\n",
|
" <td>211230.0</td>\n",
|
||||||
" <td>124.47</td>\n",
|
" <td>124.47</td>\n",
|
||||||
|
@ -278,20 +197,19 @@
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>2</th>\n",
|
" <th>2</th>\n",
|
||||||
" <td>11-1011.00</td>\n",
|
" <td>11-1011.00</td>\n",
|
||||||
" <td>8823</td>\n",
|
" <td>8827</td>\n",
|
||||||
" <td>Direct or coordinate an organization's financi...</td>\n",
|
" <td>Prepare budgets for approval, including those ...</td>\n",
|
||||||
" <td>Chief Executives</td>\n",
|
" <td>Chief Executives</td>\n",
|
||||||
" <td>Determine and formulate policies and provide o...</td>\n",
|
" <td>Determine and formulate policies and provide o...</td>\n",
|
||||||
" <td>5.92</td>\n",
|
" <td>15.50</td>\n",
|
||||||
" <td>15.98</td>\n",
|
" <td>38.21</td>\n",
|
||||||
" <td>29.68</td>\n",
|
" <td>32.73</td>\n",
|
||||||
" <td>21.18</td>\n",
|
" <td>5.15</td>\n",
|
||||||
" <td>19.71</td>\n",
|
" <td>5.25</td>\n",
|
||||||
" <td>4.91</td>\n",
|
" <td>0.19</td>\n",
|
||||||
" <td>2.63</td>\n",
|
" <td>2.98</td>\n",
|
||||||
" <td>4.52</td>\n",
|
" <td>4.30</td>\n",
|
||||||
" <td>74.44</td>\n",
|
" <td>93.41</td>\n",
|
||||||
" <td>remote</td>\n",
|
|
||||||
" <td>11-1011</td>\n",
|
" <td>11-1011</td>\n",
|
||||||
" <td>211230.0</td>\n",
|
" <td>211230.0</td>\n",
|
||||||
" <td>124.47</td>\n",
|
" <td>124.47</td>\n",
|
||||||
|
@ -300,20 +218,19 @@
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>3</th>\n",
|
" <th>3</th>\n",
|
||||||
" <td>11-1011.00</td>\n",
|
" <td>11-1011.00</td>\n",
|
||||||
" <td>8823</td>\n",
|
" <td>8826</td>\n",
|
||||||
" <td>Direct or coordinate an organization's financi...</td>\n",
|
" <td>Direct, plan, or implement policies, objective...</td>\n",
|
||||||
" <td>Chief Executives</td>\n",
|
" <td>Chief Executives</td>\n",
|
||||||
" <td>Determine and formulate policies and provide o...</td>\n",
|
" <td>Determine and formulate policies and provide o...</td>\n",
|
||||||
" <td>5.92</td>\n",
|
" <td>3.03</td>\n",
|
||||||
" <td>15.98</td>\n",
|
" <td>17.33</td>\n",
|
||||||
" <td>29.68</td>\n",
|
" <td>20.30</td>\n",
|
||||||
" <td>21.18</td>\n",
|
" <td>18.10</td>\n",
|
||||||
" <td>19.71</td>\n",
|
" <td>33.16</td>\n",
|
||||||
" <td>4.91</td>\n",
|
" <td>2.01</td>\n",
|
||||||
" <td>2.63</td>\n",
|
" <td>6.07</td>\n",
|
||||||
" <td>4.52</td>\n",
|
" <td>4.24</td>\n",
|
||||||
" <td>74.44</td>\n",
|
" <td>97.79</td>\n",
|
||||||
" <td>remote</td>\n",
|
|
||||||
" <td>11-1011</td>\n",
|
" <td>11-1011</td>\n",
|
||||||
" <td>211230.0</td>\n",
|
" <td>211230.0</td>\n",
|
||||||
" <td>124.47</td>\n",
|
" <td>124.47</td>\n",
|
||||||
|
@ -322,20 +239,19 @@
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>4</th>\n",
|
" <th>4</th>\n",
|
||||||
" <td>11-1011.00</td>\n",
|
" <td>11-1011.00</td>\n",
|
||||||
" <td>8823</td>\n",
|
" <td>8834</td>\n",
|
||||||
" <td>Direct or coordinate an organization's financi...</td>\n",
|
" <td>Prepare or present reports concerning activiti...</td>\n",
|
||||||
" <td>Chief Executives</td>\n",
|
" <td>Chief Executives</td>\n",
|
||||||
" <td>Determine and formulate policies and provide o...</td>\n",
|
" <td>Determine and formulate policies and provide o...</td>\n",
|
||||||
" <td>5.92</td>\n",
|
" <td>1.98</td>\n",
|
||||||
" <td>15.98</td>\n",
|
" <td>14.06</td>\n",
|
||||||
" <td>29.68</td>\n",
|
" <td>42.60</td>\n",
|
||||||
" <td>21.18</td>\n",
|
" <td>21.24</td>\n",
|
||||||
" <td>19.71</td>\n",
|
" <td>13.18</td>\n",
|
||||||
" <td>4.91</td>\n",
|
" <td>6.24</td>\n",
|
||||||
" <td>2.63</td>\n",
|
" <td>0.70</td>\n",
|
||||||
" <td>4.52</td>\n",
|
" <td>4.17</td>\n",
|
||||||
" <td>74.44</td>\n",
|
" <td>92.92</td>\n",
|
||||||
" <td>remote</td>\n",
|
|
||||||
" <td>11-1011</td>\n",
|
" <td>11-1011</td>\n",
|
||||||
" <td>211230.0</td>\n",
|
" <td>211230.0</td>\n",
|
||||||
" <td>124.47</td>\n",
|
" <td>124.47</td>\n",
|
||||||
|
@ -361,10 +277,9 @@
|
||||||
" <td>...</td>\n",
|
" <td>...</td>\n",
|
||||||
" <td>...</td>\n",
|
" <td>...</td>\n",
|
||||||
" <td>...</td>\n",
|
" <td>...</td>\n",
|
||||||
" <td>...</td>\n",
|
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>127653</th>\n",
|
" <th>17634</th>\n",
|
||||||
" <td>53-7121.00</td>\n",
|
" <td>53-7121.00</td>\n",
|
||||||
" <td>12807</td>\n",
|
" <td>12807</td>\n",
|
||||||
" <td>Unload cars containing liquids by connecting h...</td>\n",
|
" <td>Unload cars containing liquids by connecting h...</td>\n",
|
||||||
|
@ -379,14 +294,13 @@
|
||||||
" <td>8.34</td>\n",
|
" <td>8.34</td>\n",
|
||||||
" <td>4.08</td>\n",
|
" <td>4.08</td>\n",
|
||||||
" <td>64.04</td>\n",
|
" <td>64.04</td>\n",
|
||||||
" <td>remote</td>\n",
|
|
||||||
" <td>53-7121</td>\n",
|
" <td>53-7121</td>\n",
|
||||||
" <td>11400.0</td>\n",
|
" <td>11400.0</td>\n",
|
||||||
" <td>29.1</td>\n",
|
" <td>29.1</td>\n",
|
||||||
" <td>60530</td>\n",
|
" <td>60530</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>127654</th>\n",
|
" <th>17635</th>\n",
|
||||||
" <td>53-7121.00</td>\n",
|
" <td>53-7121.00</td>\n",
|
||||||
" <td>12804</td>\n",
|
" <td>12804</td>\n",
|
||||||
" <td>Clean interiors of tank cars or tank trucks, u...</td>\n",
|
" <td>Clean interiors of tank cars or tank trucks, u...</td>\n",
|
||||||
|
@ -401,14 +315,13 @@
|
||||||
" <td>0.00</td>\n",
|
" <td>0.00</td>\n",
|
||||||
" <td>4.02</td>\n",
|
" <td>4.02</td>\n",
|
||||||
" <td>44.33</td>\n",
|
" <td>44.33</td>\n",
|
||||||
" <td>remote</td>\n",
|
|
||||||
" <td>53-7121</td>\n",
|
" <td>53-7121</td>\n",
|
||||||
" <td>11400.0</td>\n",
|
" <td>11400.0</td>\n",
|
||||||
" <td>29.1</td>\n",
|
" <td>29.1</td>\n",
|
||||||
" <td>60530</td>\n",
|
" <td>60530</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>127655</th>\n",
|
" <th>17636</th>\n",
|
||||||
" <td>53-7121.00</td>\n",
|
" <td>53-7121.00</td>\n",
|
||||||
" <td>12803</td>\n",
|
" <td>12803</td>\n",
|
||||||
" <td>Lower gauge rods into tanks or read meters to ...</td>\n",
|
" <td>Lower gauge rods into tanks or read meters to ...</td>\n",
|
||||||
|
@ -423,14 +336,13 @@
|
||||||
" <td>10.55</td>\n",
|
" <td>10.55</td>\n",
|
||||||
" <td>3.88</td>\n",
|
" <td>3.88</td>\n",
|
||||||
" <td>65.00</td>\n",
|
" <td>65.00</td>\n",
|
||||||
" <td>remote</td>\n",
|
|
||||||
" <td>53-7121</td>\n",
|
" <td>53-7121</td>\n",
|
||||||
" <td>11400.0</td>\n",
|
" <td>11400.0</td>\n",
|
||||||
" <td>29.1</td>\n",
|
" <td>29.1</td>\n",
|
||||||
" <td>60530</td>\n",
|
" <td>60530</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>127656</th>\n",
|
" <th>17637</th>\n",
|
||||||
" <td>53-7121.00</td>\n",
|
" <td>53-7121.00</td>\n",
|
||||||
" <td>12805</td>\n",
|
" <td>12805</td>\n",
|
||||||
" <td>Operate conveyors and equipment to transfer gr...</td>\n",
|
" <td>Operate conveyors and equipment to transfer gr...</td>\n",
|
||||||
|
@ -445,14 +357,13 @@
|
||||||
" <td>15.05</td>\n",
|
" <td>15.05</td>\n",
|
||||||
" <td>3.87</td>\n",
|
" <td>3.87</td>\n",
|
||||||
" <td>47.90</td>\n",
|
" <td>47.90</td>\n",
|
||||||
" <td>remote</td>\n",
|
|
||||||
" <td>53-7121</td>\n",
|
" <td>53-7121</td>\n",
|
||||||
" <td>11400.0</td>\n",
|
" <td>11400.0</td>\n",
|
||||||
" <td>29.1</td>\n",
|
" <td>29.1</td>\n",
|
||||||
" <td>60530</td>\n",
|
" <td>60530</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>127657</th>\n",
|
" <th>17638</th>\n",
|
||||||
" <td>53-7121.00</td>\n",
|
" <td>53-7121.00</td>\n",
|
||||||
" <td>12810</td>\n",
|
" <td>12810</td>\n",
|
||||||
" <td>Perform general warehouse activities, such as ...</td>\n",
|
" <td>Perform general warehouse activities, such as ...</td>\n",
|
||||||
|
@ -467,7 +378,6 @@
|
||||||
" <td>11.78</td>\n",
|
" <td>11.78</td>\n",
|
||||||
" <td>3.53</td>\n",
|
" <td>3.53</td>\n",
|
||||||
" <td>47.84</td>\n",
|
" <td>47.84</td>\n",
|
||||||
" <td>remote</td>\n",
|
|
||||||
" <td>53-7121</td>\n",
|
" <td>53-7121</td>\n",
|
||||||
" <td>11400.0</td>\n",
|
" <td>11400.0</td>\n",
|
||||||
" <td>29.1</td>\n",
|
" <td>29.1</td>\n",
|
||||||
|
@ -475,109 +385,186 @@
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" </tbody>\n",
|
" </tbody>\n",
|
||||||
"</table>\n",
|
"</table>\n",
|
||||||
"<p>127658 rows × 19 columns</p>\n",
|
"<p>17639 rows × 18 columns</p>\n",
|
||||||
"</div>"
|
"</div>"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
" onetsoc_code task_id \\\n",
|
" onetsoc_code task_id \\\n",
|
||||||
"0 11-1011.00 8823 \n",
|
"0 11-1011.00 8823 \n",
|
||||||
"1 11-1011.00 8823 \n",
|
"1 11-1011.00 8824 \n",
|
||||||
"2 11-1011.00 8823 \n",
|
"2 11-1011.00 8827 \n",
|
||||||
"3 11-1011.00 8823 \n",
|
"3 11-1011.00 8826 \n",
|
||||||
"4 11-1011.00 8823 \n",
|
"4 11-1011.00 8834 \n",
|
||||||
"... ... ... \n",
|
"... ... ... \n",
|
||||||
"127653 53-7121.00 12807 \n",
|
"17634 53-7121.00 12807 \n",
|
||||||
"127654 53-7121.00 12804 \n",
|
"17635 53-7121.00 12804 \n",
|
||||||
"127655 53-7121.00 12803 \n",
|
"17636 53-7121.00 12803 \n",
|
||||||
"127656 53-7121.00 12805 \n",
|
"17637 53-7121.00 12805 \n",
|
||||||
"127657 53-7121.00 12810 \n",
|
"17638 53-7121.00 12810 \n",
|
||||||
"\n",
|
"\n",
|
||||||
" task \\\n",
|
" task \\\n",
|
||||||
"0 Direct or coordinate an organization's financi... \n",
|
"0 Direct or coordinate an organization's financi... \n",
|
||||||
"1 Direct or coordinate an organization's financi... \n",
|
"1 Confer with board members, organization offici... \n",
|
||||||
"2 Direct or coordinate an organization's financi... \n",
|
"2 Prepare budgets for approval, including those ... \n",
|
||||||
"3 Direct or coordinate an organization's financi... \n",
|
"3 Direct, plan, or implement policies, objective... \n",
|
||||||
"4 Direct or coordinate an organization's financi... \n",
|
"4 Prepare or present reports concerning activiti... \n",
|
||||||
"... ... \n",
|
"... ... \n",
|
||||||
"127653 Unload cars containing liquids by connecting h... \n",
|
"17634 Unload cars containing liquids by connecting h... \n",
|
||||||
"127654 Clean interiors of tank cars or tank trucks, u... \n",
|
"17635 Clean interiors of tank cars or tank trucks, u... \n",
|
||||||
"127655 Lower gauge rods into tanks or read meters to ... \n",
|
"17636 Lower gauge rods into tanks or read meters to ... \n",
|
||||||
"127656 Operate conveyors and equipment to transfer gr... \n",
|
"17637 Operate conveyors and equipment to transfer gr... \n",
|
||||||
"127657 Perform general warehouse activities, such as ... \n",
|
"17638 Perform general warehouse activities, such as ... \n",
|
||||||
"\n",
|
"\n",
|
||||||
" occupation_title \\\n",
|
" occupation_title \\\n",
|
||||||
"0 Chief Executives \n",
|
"0 Chief Executives \n",
|
||||||
"1 Chief Executives \n",
|
"1 Chief Executives \n",
|
||||||
"2 Chief Executives \n",
|
"2 Chief Executives \n",
|
||||||
"3 Chief Executives \n",
|
"3 Chief Executives \n",
|
||||||
"4 Chief Executives \n",
|
"4 Chief Executives \n",
|
||||||
"... ... \n",
|
"... ... \n",
|
||||||
"127653 Tank Car, Truck, and Ship Loaders \n",
|
"17634 Tank Car, Truck, and Ship Loaders \n",
|
||||||
"127654 Tank Car, Truck, and Ship Loaders \n",
|
"17635 Tank Car, Truck, and Ship Loaders \n",
|
||||||
"127655 Tank Car, Truck, and Ship Loaders \n",
|
"17636 Tank Car, Truck, and Ship Loaders \n",
|
||||||
"127656 Tank Car, Truck, and Ship Loaders \n",
|
"17637 Tank Car, Truck, and Ship Loaders \n",
|
||||||
"127657 Tank Car, Truck, and Ship Loaders \n",
|
"17638 Tank Car, Truck, and Ship Loaders \n",
|
||||||
"\n",
|
"\n",
|
||||||
" occupation_description Yearly or less \\\n",
|
" occupation_description \\\n",
|
||||||
"0 Determine and formulate policies and provide o... 5.92 \n",
|
"0 Determine and formulate policies and provide o... \n",
|
||||||
"1 Determine and formulate policies and provide o... 5.92 \n",
|
"1 Determine and formulate policies and provide o... \n",
|
||||||
"2 Determine and formulate policies and provide o... 5.92 \n",
|
"2 Determine and formulate policies and provide o... \n",
|
||||||
"3 Determine and formulate policies and provide o... 5.92 \n",
|
"3 Determine and formulate policies and provide o... \n",
|
||||||
"4 Determine and formulate policies and provide o... 5.92 \n",
|
"4 Determine and formulate policies and provide o... \n",
|
||||||
"... ... ... \n",
|
"... ... \n",
|
||||||
"127653 Load and unload chemicals and bulk solids, suc... 6.05 \n",
|
"17634 Load and unload chemicals and bulk solids, suc... \n",
|
||||||
"127654 Load and unload chemicals and bulk solids, suc... 1.47 \n",
|
"17635 Load and unload chemicals and bulk solids, suc... \n",
|
||||||
"127655 Load and unload chemicals and bulk solids, suc... 4.52 \n",
|
"17636 Load and unload chemicals and bulk solids, suc... \n",
|
||||||
"127656 Load and unload chemicals and bulk solids, suc... 6.97 \n",
|
"17637 Load and unload chemicals and bulk solids, suc... \n",
|
||||||
"127657 Load and unload chemicals and bulk solids, suc... 5.91 \n",
|
"17638 Load and unload chemicals and bulk solids, suc... \n",
|
||||||
"\n",
|
"\n",
|
||||||
" More than yearly More than monthly More than weekly Daily \\\n",
|
" frequency_category_1 frequency_category_2 frequency_category_3 \\\n",
|
||||||
"0 15.98 29.68 21.18 19.71 \n",
|
"0 5.92 15.98 29.68 \n",
|
||||||
"1 15.98 29.68 21.18 19.71 \n",
|
"1 1.42 14.44 27.31 \n",
|
||||||
"2 15.98 29.68 21.18 19.71 \n",
|
"2 15.50 38.21 32.73 \n",
|
||||||
"3 15.98 29.68 21.18 19.71 \n",
|
"3 3.03 17.33 20.30 \n",
|
||||||
"4 15.98 29.68 21.18 19.71 \n",
|
"4 1.98 14.06 42.60 \n",
|
||||||
"... ... ... ... ... \n",
|
"... ... ... ... \n",
|
||||||
"127653 29.21 6.88 13.95 27.65 \n",
|
"17634 6.05 29.21 6.88 \n",
|
||||||
"127654 6.33 21.70 25.69 32.35 \n",
|
"17635 1.47 6.33 21.70 \n",
|
||||||
"127655 1.76 4.65 17.81 37.42 \n",
|
"17636 4.52 1.76 4.65 \n",
|
||||||
"127656 12.00 2.52 5.90 35.48 \n",
|
"17637 6.97 12.00 2.52 \n",
|
||||||
"127657 10.85 6.46 14.46 34.14 \n",
|
"17638 5.91 10.85 6.46 \n",
|
||||||
"\n",
|
"\n",
|
||||||
" Several times daily Hourly or more importance_average \\\n",
|
" frequency_category_4 frequency_category_5 frequency_category_6 \\\n",
|
||||||
"0 4.91 2.63 4.52 \n",
|
"0 21.18 19.71 4.91 \n",
|
||||||
"1 4.91 2.63 4.52 \n",
|
"1 25.52 26.88 2.52 \n",
|
||||||
"2 4.91 2.63 4.52 \n",
|
"2 5.15 5.25 0.19 \n",
|
||||||
"3 4.91 2.63 4.52 \n",
|
"3 18.10 33.16 2.01 \n",
|
||||||
"4 4.91 2.63 4.52 \n",
|
"4 21.24 13.18 6.24 \n",
|
||||||
"... ... ... ... \n",
|
"... ... ... ... \n",
|
||||||
"127653 7.93 8.34 4.08 \n",
|
"17634 13.95 27.65 7.93 \n",
|
||||||
"127654 12.47 0.00 4.02 \n",
|
"17635 25.69 32.35 12.47 \n",
|
||||||
"127655 23.31 10.55 3.88 \n",
|
"17636 17.81 37.42 23.31 \n",
|
||||||
"127656 22.08 15.05 3.87 \n",
|
"17637 5.90 35.48 22.08 \n",
|
||||||
"127657 16.39 11.78 3.53 \n",
|
"17638 14.46 34.14 16.39 \n",
|
||||||
"\n",
|
"\n",
|
||||||
" relevance_average remote OCC_CODE TOT_EMP H_MEAN A_MEAN \n",
|
" frequency_category_7 importance_average relevance_average OCC_CODE \\\n",
|
||||||
"0 74.44 remote 11-1011 211230.0 124.47 258900 \n",
|
"0 2.63 4.52 74.44 11-1011 \n",
|
||||||
"1 74.44 remote 11-1011 211230.0 124.47 258900 \n",
|
"1 1.90 4.32 81.71 11-1011 \n",
|
||||||
"2 74.44 remote 11-1011 211230.0 124.47 258900 \n",
|
"2 2.98 4.30 93.41 11-1011 \n",
|
||||||
"3 74.44 remote 11-1011 211230.0 124.47 258900 \n",
|
"3 6.07 4.24 97.79 11-1011 \n",
|
||||||
"4 74.44 remote 11-1011 211230.0 124.47 258900 \n",
|
"4 0.70 4.17 92.92 11-1011 \n",
|
||||||
"... ... ... ... ... ... ... \n",
|
"... ... ... ... ... \n",
|
||||||
"127653 64.04 remote 53-7121 11400.0 29.1 60530 \n",
|
"17634 8.34 4.08 64.04 53-7121 \n",
|
||||||
"127654 44.33 remote 53-7121 11400.0 29.1 60530 \n",
|
"17635 0.00 4.02 44.33 53-7121 \n",
|
||||||
"127655 65.00 remote 53-7121 11400.0 29.1 60530 \n",
|
"17636 10.55 3.88 65.00 53-7121 \n",
|
||||||
"127656 47.90 remote 53-7121 11400.0 29.1 60530 \n",
|
"17637 15.05 3.87 47.90 53-7121 \n",
|
||||||
"127657 47.84 remote 53-7121 11400.0 29.1 60530 \n",
|
"17638 11.78 3.53 47.84 53-7121 \n",
|
||||||
"\n",
|
"\n",
|
||||||
"[127658 rows x 19 columns]"
|
" TOT_EMP H_MEAN A_MEAN \n",
|
||||||
|
"0 211230.0 124.47 258900 \n",
|
||||||
|
"1 211230.0 124.47 258900 \n",
|
||||||
|
"2 211230.0 124.47 258900 \n",
|
||||||
|
"3 211230.0 124.47 258900 \n",
|
||||||
|
"4 211230.0 124.47 258900 \n",
|
||||||
|
"... ... ... ... \n",
|
||||||
|
"17634 11400.0 29.1 60530 \n",
|
||||||
|
"17635 11400.0 29.1 60530 \n",
|
||||||
|
"17636 11400.0 29.1 60530 \n",
|
||||||
|
"17637 11400.0 29.1 60530 \n",
|
||||||
|
"17638 11400.0 29.1 60530 \n",
|
||||||
|
"\n",
|
||||||
|
"[17639 rows x 18 columns]"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"execution_count": 13,
|
"execution_count": 16,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"output_type": "execute_result"
|
"output_type": "execute_result"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"source": [
|
||||||
|
"df_oesm_detailed = df_oesm[df_oesm['O_GROUP'] == 'detailed'][['OCC_CODE', 'TOT_EMP', 'H_MEAN', 'A_MEAN']].copy()\n",
|
||||||
|
"df_enriched_trs['occ_code_join'] = df_enriched_trs['onetsoc_code'].str[:7]\n",
|
||||||
|
"df = pd.merge(\n",
|
||||||
|
" df_enriched_trs,\n",
|
||||||
|
" df_oesm_detailed,\n",
|
||||||
|
" left_on='occ_code_join',\n",
|
||||||
|
" right_on='OCC_CODE',\n",
|
||||||
|
" how='left'\n",
|
||||||
|
")\n",
|
||||||
|
"df = df.drop(columns=['occ_code_join'])\n",
|
||||||
|
"df"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 11,
|
||||||
|
"id": "9be7acb5-2374-4f61-bba3-13b0077c0bd2",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Task: Identify, evaluate and recommend hardware or software technologies to achieve desired database performance.\n",
|
||||||
|
"Occupation Description: Design strategies for enterprise databases, data warehouse systems, and multidimensional networks. Set standards for database operations, programming, query processes, and security. Model, design, and construct large relational databases or data warehouses. Create and optimize data models for warehouse infrastructure and workflow. Integrate new systems with existing warehouse structure and refine system performance and functionality.\n",
|
||||||
|
"Occupation Title: Database Architects\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"119976"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 11,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"df_merged = pd \\\n",
|
||||||
|
" .merge(left=df_enriched_trs, right=df_remote_status[['O*NET-SOC Code', 'Remote']], how='left', left_on='onetsoc_code', right_on='O*NET-SOC Code') \\\n",
|
||||||
|
" .drop(columns=['O*NET-SOC Code']) \\\n",
|
||||||
|
" .rename(columns={'Remote': 'remote'}) \\\n",
|
||||||
|
" .rename(columns=FREQUENCY_MAP) \\\n",
|
||||||
|
" .query('remote == \"remote\" and importance_average >= 3 and relevance_average > 50')\n",
|
||||||
|
"\n",
|
||||||
|
"row = df_merged.iloc[30000]\n",
|
||||||
|
"print('Task: ', row['task'])\n",
|
||||||
|
"print('Occupation Description: ', row['occupation_description'])\n",
|
||||||
|
"print('Occupation Title: ', row['occupation_title'])\n",
|
||||||
|
"\n",
|
||||||
|
"len(df_merged)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "fd9ac1c3-6d17-4764-8a2e-c84d4019bd9e",
|
||||||
|
"metadata": {
|
||||||
|
"jp-MarkdownHeadingCollapsed": true
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"# Cross-reference woth BLS OEWS\n",
|
"# Cross-reference woth BLS OEWS\n",
|
||||||
"# It doesn't really make sens to have it per-task, we only need it per-occupation...\n",
|
"# It doesn't really make sens to have it per-task, we only need it per-occupation...\n",
|
|
@ -7,11 +7,13 @@ requires-python = ">=3.13"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dotenv>=0.9.9",
|
"dotenv>=0.9.9",
|
||||||
"jupyter>=1.1.1",
|
"jupyter>=1.1.1",
|
||||||
|
"litellm==1.67.0",
|
||||||
"notebook>=7.4.1",
|
"notebook>=7.4.1",
|
||||||
"openai>=1.76.0",
|
"openai>=1.76.0",
|
||||||
"openpyxl>=3.1.5",
|
"openpyxl>=3.1.5",
|
||||||
"pandas>=2.2.3",
|
"pandas>=2.2.3",
|
||||||
"requests>=2.32.3",
|
"requests>=2.32.3",
|
||||||
|
"tenacity>=9.1.2",
|
||||||
"tqdm>=4.67.1",
|
"tqdm>=4.67.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
399
uv.lock
generated
399
uv.lock
generated
|
@ -2,6 +2,60 @@ version = 1
|
||||||
revision = 2
|
revision = 2
|
||||||
requires-python = ">=3.13"
|
requires-python = ">=3.13"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aiohappyeyeballs"
|
||||||
|
version = "2.6.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload_time = "2025-03-12T01:42:48.764Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload_time = "2025-03-12T01:42:47.083Z" },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aiohttp"
|
||||||
|
version = "3.11.18"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "aiohappyeyeballs" },
|
||||||
|
{ name = "aiosignal" },
|
||||||
|
{ name = "attrs" },
|
||||||
|
{ name = "frozenlist" },
|
||||||
|
{ name = "multidict" },
|
||||||
|
{ name = "propcache" },
|
||||||
|
{ name = "yarl" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/63/e7/fa1a8c00e2c54b05dc8cb5d1439f627f7c267874e3f7bb047146116020f9/aiohttp-3.11.18.tar.gz", hash = "sha256:ae856e1138612b7e412db63b7708735cff4d38d0399f6a5435d3dac2669f558a", size = 7678653, upload_time = "2025-04-21T09:43:09.191Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0a/18/be8b5dd6b9cf1b2172301dbed28e8e5e878ee687c21947a6c81d6ceaa15d/aiohttp-3.11.18-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:474215ec618974054cf5dc465497ae9708543cbfc312c65212325d4212525811", size = 699833, upload_time = "2025-04-21T09:42:00.298Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0d/84/ecdc68e293110e6f6f6d7b57786a77555a85f70edd2b180fb1fafaff361a/aiohttp-3.11.18-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ced70adf03920d4e67c373fd692123e34d3ac81dfa1c27e45904a628567d804", size = 462774, upload_time = "2025-04-21T09:42:02.015Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d7/85/f07718cca55884dad83cc2433746384d267ee970e91f0dcc75c6d5544079/aiohttp-3.11.18-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2d9f6c0152f8d71361905aaf9ed979259537981f47ad099c8b3d81e0319814bd", size = 454429, upload_time = "2025-04-21T09:42:03.728Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/82/02/7f669c3d4d39810db8842c4e572ce4fe3b3a9b82945fdd64affea4c6947e/aiohttp-3.11.18-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a35197013ed929c0aed5c9096de1fc5a9d336914d73ab3f9df14741668c0616c", size = 1670283, upload_time = "2025-04-21T09:42:06.053Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ec/79/b82a12f67009b377b6c07a26bdd1b81dab7409fc2902d669dbfa79e5ac02/aiohttp-3.11.18-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:540b8a1f3a424f1af63e0af2d2853a759242a1769f9f1ab053996a392bd70118", size = 1717231, upload_time = "2025-04-21T09:42:07.953Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a6/38/d5a1f28c3904a840642b9a12c286ff41fc66dfa28b87e204b1f242dbd5e6/aiohttp-3.11.18-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9e6710ebebfce2ba21cee6d91e7452d1125100f41b906fb5af3da8c78b764c1", size = 1769621, upload_time = "2025-04-21T09:42:09.855Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/53/2d/deb3749ba293e716b5714dda06e257f123c5b8679072346b1eb28b766a0b/aiohttp-3.11.18-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8af2ef3b4b652ff109f98087242e2ab974b2b2b496304063585e3d78de0b000", size = 1678667, upload_time = "2025-04-21T09:42:11.741Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b8/a8/04b6e11683a54e104b984bd19a9790eb1ae5f50968b601bb202d0406f0ff/aiohttp-3.11.18-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28c3f975e5ae3dbcbe95b7e3dcd30e51da561a0a0f2cfbcdea30fc1308d72137", size = 1601592, upload_time = "2025-04-21T09:42:14.137Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5e/9d/c33305ae8370b789423623f0e073d09ac775cd9c831ac0f11338b81c16e0/aiohttp-3.11.18-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c28875e316c7b4c3e745172d882d8a5c835b11018e33432d281211af35794a93", size = 1621679, upload_time = "2025-04-21T09:42:16.056Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/56/45/8e9a27fff0538173d47ba60362823358f7a5f1653c6c30c613469f94150e/aiohttp-3.11.18-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:13cd38515568ae230e1ef6919e2e33da5d0f46862943fcda74e7e915096815f3", size = 1656878, upload_time = "2025-04-21T09:42:18.368Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/84/5b/8c5378f10d7a5a46b10cb9161a3aac3eeae6dba54ec0f627fc4ddc4f2e72/aiohttp-3.11.18-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0e2a92101efb9f4c2942252c69c63ddb26d20f46f540c239ccfa5af865197bb8", size = 1620509, upload_time = "2025-04-21T09:42:20.141Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9e/2f/99dee7bd91c62c5ff0aa3c55f4ae7e1bc99c6affef780d7777c60c5b3735/aiohttp-3.11.18-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e6d3e32b8753c8d45ac550b11a1090dd66d110d4ef805ffe60fa61495360b3b2", size = 1680263, upload_time = "2025-04-21T09:42:21.993Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/03/0a/378745e4ff88acb83e2d5c884a4fe993a6e9f04600a4560ce0e9b19936e3/aiohttp-3.11.18-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ea4cf2488156e0f281f93cc2fd365025efcba3e2d217cbe3df2840f8c73db261", size = 1715014, upload_time = "2025-04-21T09:42:23.87Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f6/0b/b5524b3bb4b01e91bc4323aad0c2fcaebdf2f1b4d2eb22743948ba364958/aiohttp-3.11.18-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d4df95ad522c53f2b9ebc07f12ccd2cb15550941e11a5bbc5ddca2ca56316d7", size = 1666614, upload_time = "2025-04-21T09:42:25.764Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c7/b7/3d7b036d5a4ed5a4c704e0754afe2eef24a824dfab08e6efbffb0f6dd36a/aiohttp-3.11.18-cp313-cp313-win32.whl", hash = "sha256:cdd1bbaf1e61f0d94aced116d6e95fe25942f7a5f42382195fd9501089db5d78", size = 411358, upload_time = "2025-04-21T09:42:27.558Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1e/3c/143831b32cd23b5263a995b2a1794e10aa42f8a895aae5074c20fda36c07/aiohttp-3.11.18-cp313-cp313-win_amd64.whl", hash = "sha256:bdd619c27e44382cf642223f11cfd4d795161362a5a1fc1fa3940397bc89db01", size = 437658, upload_time = "2025-04-21T09:42:29.209Z" },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aiosignal"
|
||||||
|
version = "1.3.2"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "frozenlist" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/ba/b5/6d55e80f6d8a08ce22b982eafa278d823b541c925f11ee774b0b9c43473d/aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54", size = 19424, upload_time = "2024-12-13T17:10:40.86Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ec/6a/bc7e17a3e87a2985d3e8f4da4cd0f481060eb78fb08596c42be62c90a4d9/aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5", size = 7597, upload_time = "2024-12-13T17:10:38.469Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "annotated-types"
|
name = "annotated-types"
|
||||||
version = "0.7.0"
|
version = "0.7.0"
|
||||||
|
@ -198,6 +252,18 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767, upload_time = "2024-12-24T18:12:32.852Z" },
|
{ url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767, upload_time = "2024-12-24T18:12:32.852Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "click"
|
||||||
|
version = "8.1.8"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload_time = "2024-12-21T18:38:44.339Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload_time = "2024-12-21T18:38:41.666Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "colorama"
|
name = "colorama"
|
||||||
version = "0.4.6"
|
version = "0.4.6"
|
||||||
|
@ -297,6 +363,15 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/90/2b/0817a2b257fe88725c25589d89aec060581aabf668707a8d03b2e9e0cb2a/fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667", size = 23924, upload_time = "2024-12-02T10:55:07.599Z" },
|
{ url = "https://files.pythonhosted.org/packages/90/2b/0817a2b257fe88725c25589d89aec060581aabf668707a8d03b2e9e0cb2a/fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667", size = 23924, upload_time = "2024-12-02T10:55:07.599Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "filelock"
|
||||||
|
version = "3.18.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075, upload_time = "2025-03-14T07:11:40.47Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload_time = "2025-03-14T07:11:39.145Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fqdn"
|
name = "fqdn"
|
||||||
version = "1.5.1"
|
version = "1.5.1"
|
||||||
|
@ -306,6 +381,58 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121, upload_time = "2021-03-11T07:16:28.351Z" },
|
{ url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121, upload_time = "2021-03-11T07:16:28.351Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "frozenlist"
|
||||||
|
version = "1.6.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/ee/f4/d744cba2da59b5c1d88823cf9e8a6c74e4659e2b27604ed973be2a0bf5ab/frozenlist-1.6.0.tar.gz", hash = "sha256:b99655c32c1c8e06d111e7f41c06c29a5318cb1835df23a45518e02a47c63b68", size = 42831, upload_time = "2025-04-17T22:38:53.099Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6f/e5/04c7090c514d96ca00887932417f04343ab94904a56ab7f57861bf63652d/frozenlist-1.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1d7fb014fe0fbfee3efd6a94fc635aeaa68e5e1720fe9e57357f2e2c6e1a647e", size = 158182, upload_time = "2025-04-17T22:37:16.837Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e9/8f/60d0555c61eec855783a6356268314d204137f5e0c53b59ae2fc28938c99/frozenlist-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01bcaa305a0fdad12745502bfd16a1c75b14558dabae226852f9159364573117", size = 122838, upload_time = "2025-04-17T22:37:18.352Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5a/a7/d0ec890e3665b4b3b7c05dc80e477ed8dc2e2e77719368e78e2cd9fec9c8/frozenlist-1.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8b314faa3051a6d45da196a2c495e922f987dc848e967d8cfeaee8a0328b1cd4", size = 120980, upload_time = "2025-04-17T22:37:19.857Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/cc/19/9b355a5e7a8eba903a008579964192c3e427444752f20b2144b10bb336df/frozenlist-1.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da62fecac21a3ee10463d153549d8db87549a5e77eefb8c91ac84bb42bb1e4e3", size = 305463, upload_time = "2025-04-17T22:37:21.328Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9c/8d/5b4c758c2550131d66935ef2fa700ada2461c08866aef4229ae1554b93ca/frozenlist-1.6.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1eb89bf3454e2132e046f9599fbcf0a4483ed43b40f545551a39316d0201cd1", size = 297985, upload_time = "2025-04-17T22:37:23.55Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/48/2c/537ec09e032b5865715726b2d1d9813e6589b571d34d01550c7aeaad7e53/frozenlist-1.6.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18689b40cb3936acd971f663ccb8e2589c45db5e2c5f07e0ec6207664029a9c", size = 311188, upload_time = "2025-04-17T22:37:25.221Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/31/2f/1aa74b33f74d54817055de9a4961eff798f066cdc6f67591905d4fc82a84/frozenlist-1.6.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e67ddb0749ed066b1a03fba812e2dcae791dd50e5da03be50b6a14d0c1a9ee45", size = 311874, upload_time = "2025-04-17T22:37:26.791Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/bf/f0/cfec18838f13ebf4b37cfebc8649db5ea71a1b25dacd691444a10729776c/frozenlist-1.6.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc5e64626e6682638d6e44398c9baf1d6ce6bc236d40b4b57255c9d3f9761f1f", size = 291897, upload_time = "2025-04-17T22:37:28.958Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ea/a5/deb39325cbbea6cd0a46db8ccd76150ae2fcbe60d63243d9df4a0b8c3205/frozenlist-1.6.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:437cfd39564744ae32ad5929e55b18ebd88817f9180e4cc05e7d53b75f79ce85", size = 305799, upload_time = "2025-04-17T22:37:30.889Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/78/22/6ddec55c5243a59f605e4280f10cee8c95a449f81e40117163383829c241/frozenlist-1.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:62dd7df78e74d924952e2feb7357d826af8d2f307557a779d14ddf94d7311be8", size = 302804, upload_time = "2025-04-17T22:37:32.489Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5d/b7/d9ca9bab87f28855063c4d202936800219e39db9e46f9fb004d521152623/frozenlist-1.6.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a66781d7e4cddcbbcfd64de3d41a61d6bdde370fc2e38623f30b2bd539e84a9f", size = 316404, upload_time = "2025-04-17T22:37:34.59Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a6/3a/1255305db7874d0b9eddb4fe4a27469e1fb63720f1fc6d325a5118492d18/frozenlist-1.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:482fe06e9a3fffbcd41950f9d890034b4a54395c60b5e61fae875d37a699813f", size = 295572, upload_time = "2025-04-17T22:37:36.337Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/2a/f2/8d38eeee39a0e3a91b75867cc102159ecccf441deb6ddf67be96d3410b84/frozenlist-1.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e4f9373c500dfc02feea39f7a56e4f543e670212102cc2eeb51d3a99c7ffbde6", size = 307601, upload_time = "2025-04-17T22:37:37.923Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/38/04/80ec8e6b92f61ef085422d7b196822820404f940950dde5b2e367bede8bc/frozenlist-1.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e69bb81de06827147b7bfbaeb284d85219fa92d9f097e32cc73675f279d70188", size = 314232, upload_time = "2025-04-17T22:37:39.669Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3a/58/93b41fb23e75f38f453ae92a2f987274c64637c450285577bd81c599b715/frozenlist-1.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7613d9977d2ab4a9141dde4a149f4357e4065949674c5649f920fec86ecb393e", size = 308187, upload_time = "2025-04-17T22:37:41.662Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6a/a2/e64df5c5aa36ab3dee5a40d254f3e471bb0603c225f81664267281c46a2d/frozenlist-1.6.0-cp313-cp313-win32.whl", hash = "sha256:4def87ef6d90429f777c9d9de3961679abf938cb6b7b63d4a7eb8a268babfce4", size = 114772, upload_time = "2025-04-17T22:37:43.132Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a0/77/fead27441e749b2d574bb73d693530d59d520d4b9e9679b8e3cb779d37f2/frozenlist-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:37a8a52c3dfff01515e9bbbee0e6063181362f9de3db2ccf9bc96189b557cbfd", size = 119847, upload_time = "2025-04-17T22:37:45.118Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/df/bd/cc6d934991c1e5d9cafda83dfdc52f987c7b28343686aef2e58a9cf89f20/frozenlist-1.6.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:46138f5a0773d064ff663d273b309b696293d7a7c00a0994c5c13a5078134b64", size = 174937, upload_time = "2025-04-17T22:37:46.635Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f2/a2/daf945f335abdbfdd5993e9dc348ef4507436936ab3c26d7cfe72f4843bf/frozenlist-1.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f88bc0a2b9c2a835cb888b32246c27cdab5740059fb3688852bf91e915399b91", size = 136029, upload_time = "2025-04-17T22:37:48.192Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/51/65/4c3145f237a31247c3429e1c94c384d053f69b52110a0d04bfc8afc55fb2/frozenlist-1.6.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:777704c1d7655b802c7850255639672e90e81ad6fa42b99ce5ed3fbf45e338dd", size = 134831, upload_time = "2025-04-17T22:37:50.485Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/77/38/03d316507d8dea84dfb99bdd515ea245628af964b2bf57759e3c9205cc5e/frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85ef8d41764c7de0dcdaf64f733a27352248493a85a80661f3c678acd27e31f2", size = 392981, upload_time = "2025-04-17T22:37:52.558Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/37/02/46285ef9828f318ba400a51d5bb616ded38db8466836a9cfa39f3903260b/frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:da5cb36623f2b846fb25009d9d9215322318ff1c63403075f812b3b2876c8506", size = 371999, upload_time = "2025-04-17T22:37:54.092Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0d/64/1212fea37a112c3c5c05bfb5f0a81af4836ce349e69be75af93f99644da9/frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbb56587a16cf0fb8acd19e90ff9924979ac1431baea8681712716a8337577b0", size = 392200, upload_time = "2025-04-17T22:37:55.951Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/81/ce/9a6ea1763e3366e44a5208f76bf37c76c5da570772375e4d0be85180e588/frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6154c3ba59cda3f954c6333025369e42c3acd0c6e8b6ce31eb5c5b8116c07e0", size = 390134, upload_time = "2025-04-17T22:37:57.633Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/bc/36/939738b0b495b2c6d0c39ba51563e453232813042a8d908b8f9544296c29/frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e8246877afa3f1ae5c979fe85f567d220f86a50dc6c493b9b7d8191181ae01e", size = 365208, upload_time = "2025-04-17T22:37:59.742Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b4/8b/939e62e93c63409949c25220d1ba8e88e3960f8ef6a8d9ede8f94b459d27/frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0f6cce16306d2e117cf9db71ab3a9e8878a28176aeaf0dbe35248d97b28d0c", size = 385548, upload_time = "2025-04-17T22:38:01.416Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/62/38/22d2873c90102e06a7c5a3a5b82ca47e393c6079413e8a75c72bff067fa8/frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1b8e8cd8032ba266f91136d7105706ad57770f3522eac4a111d77ac126a25a9b", size = 391123, upload_time = "2025-04-17T22:38:03.049Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/44/78/63aaaf533ee0701549500f6d819be092c6065cb5c577edb70c09df74d5d0/frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:e2ada1d8515d3ea5378c018a5f6d14b4994d4036591a52ceaf1a1549dec8e1ad", size = 394199, upload_time = "2025-04-17T22:38:04.776Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/54/45/71a6b48981d429e8fbcc08454dc99c4c2639865a646d549812883e9c9dd3/frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:cdb2c7f071e4026c19a3e32b93a09e59b12000751fc9b0b7758da899e657d215", size = 373854, upload_time = "2025-04-17T22:38:06.576Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3f/f3/dbf2a5e11736ea81a66e37288bf9f881143a7822b288a992579ba1b4204d/frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:03572933a1969a6d6ab509d509e5af82ef80d4a5d4e1e9f2e1cdd22c77a3f4d2", size = 395412, upload_time = "2025-04-17T22:38:08.197Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b3/f1/c63166806b331f05104d8ea385c4acd511598568b1f3e4e8297ca54f2676/frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:77effc978947548b676c54bbd6a08992759ea6f410d4987d69feea9cd0919911", size = 394936, upload_time = "2025-04-17T22:38:10.056Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ef/ea/4f3e69e179a430473eaa1a75ff986526571215fefc6b9281cdc1f09a4eb8/frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a2bda8be77660ad4089caf2223fdbd6db1858462c4b85b67fbfa22102021e497", size = 391459, upload_time = "2025-04-17T22:38:11.826Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d3/c3/0fc2c97dea550df9afd072a37c1e95421652e3206bbeaa02378b24c2b480/frozenlist-1.6.0-cp313-cp313t-win32.whl", hash = "sha256:a4d96dc5bcdbd834ec6b0f91027817214216b5b30316494d2b1aebffb87c534f", size = 128797, upload_time = "2025-04-17T22:38:14.013Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ae/f5/79c9320c5656b1965634fe4be9c82b12a3305bdbc58ad9cb941131107b20/frozenlist-1.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e18036cb4caa17ea151fd5f3d70be9d354c99eb8cf817a3ccde8a7873b074348", size = 134709, upload_time = "2025-04-17T22:38:15.551Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/71/3e/b04a0adda73bd52b390d730071c0d577073d3d26740ee1bad25c3ad0f37b/frozenlist-1.6.0-py3-none-any.whl", hash = "sha256:535eec9987adb04701266b92745d6cdcef2e77669299359c3009c3404dd5d191", size = 12404, upload_time = "2025-04-17T22:38:51.668Z" },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fsspec"
|
||||||
|
version = "2025.3.2"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/45/d8/8425e6ba5fcec61a1d16e41b1b71d2bf9344f1fe48012c2b48b9620feae5/fsspec-2025.3.2.tar.gz", hash = "sha256:e52c77ef398680bbd6a98c0e628fbc469491282981209907bbc8aea76a04fdc6", size = 299281, upload_time = "2025-03-31T15:27:08.524Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl", hash = "sha256:2daf8dc3d1dfa65b6aa37748d112773a7a08416f6c70d96b264c96476ecaf711", size = 194435, upload_time = "2025-03-31T15:27:07.028Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "h11"
|
name = "h11"
|
||||||
version = "0.16.0"
|
version = "0.16.0"
|
||||||
|
@ -343,6 +470,24 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload_time = "2024-12-06T15:37:21.509Z" },
|
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload_time = "2024-12-06T15:37:21.509Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "huggingface-hub"
|
||||||
|
version = "0.30.2"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "filelock" },
|
||||||
|
{ name = "fsspec" },
|
||||||
|
{ name = "packaging" },
|
||||||
|
{ name = "pyyaml" },
|
||||||
|
{ name = "requests" },
|
||||||
|
{ name = "tqdm" },
|
||||||
|
{ name = "typing-extensions" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/df/22/8eb91736b1dcb83d879bd49050a09df29a57cc5cd9f38e48a4b1c45ee890/huggingface_hub-0.30.2.tar.gz", hash = "sha256:9a7897c5b6fd9dad3168a794a8998d6378210f5b9688d0dfc180b1a228dc2466", size = 400868, upload_time = "2025-04-08T08:32:45.26Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/93/27/1fb384a841e9661faad1c31cbfa62864f59632e876df5d795234da51c395/huggingface_hub-0.30.2-py3-none-any.whl", hash = "sha256:68ff05969927058cfa41df4f2155d4bb48f5f54f719dd0390103eefa9b191e28", size = 481433, upload_time = "2025-04-08T08:32:43.305Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "idna"
|
name = "idna"
|
||||||
version = "3.10"
|
version = "3.10"
|
||||||
|
@ -352,6 +497,18 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload_time = "2024-09-15T18:07:37.964Z" },
|
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload_time = "2024-09-15T18:07:37.964Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "importlib-metadata"
|
||||||
|
version = "8.6.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "zipp" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/33/08/c1395a292bb23fd03bdf572a1357c5a733d3eecbab877641ceacab23db6e/importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580", size = 55767, upload_time = "2025-01-20T22:21:30.429Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/79/9d/0fb148dc4d6fa4a7dd1d8378168d9b4cd8d4560a6fbf6f0121c5fc34eb68/importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e", size = 26971, upload_time = "2025-01-20T22:21:29.177Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ipykernel"
|
name = "ipykernel"
|
||||||
version = "6.29.5"
|
version = "6.29.5"
|
||||||
|
@ -741,6 +898,28 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/64/7a/f2479ba401e02f7fcbd3fc6af201eac888eaa188574b8e9df19452ab4972/jupyterlab_widgets-3.0.14-py3-none-any.whl", hash = "sha256:54c33e3306b7fca139d165d6190dc6c0627aafa5d14adfc974a4e9a3d26cb703", size = 213999, upload_time = "2025-04-10T13:00:38.626Z" },
|
{ url = "https://files.pythonhosted.org/packages/64/7a/f2479ba401e02f7fcbd3fc6af201eac888eaa188574b8e9df19452ab4972/jupyterlab_widgets-3.0.14-py3-none-any.whl", hash = "sha256:54c33e3306b7fca139d165d6190dc6c0627aafa5d14adfc974a4e9a3d26cb703", size = 213999, upload_time = "2025-04-10T13:00:38.626Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "litellm"
|
||||||
|
version = "1.67.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "aiohttp" },
|
||||||
|
{ name = "click" },
|
||||||
|
{ name = "httpx" },
|
||||||
|
{ name = "importlib-metadata" },
|
||||||
|
{ name = "jinja2" },
|
||||||
|
{ name = "jsonschema" },
|
||||||
|
{ name = "openai" },
|
||||||
|
{ name = "pydantic" },
|
||||||
|
{ name = "python-dotenv" },
|
||||||
|
{ name = "tiktoken" },
|
||||||
|
{ name = "tokenizers" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/b5/dc/d3d27a140b40398b103727f9b7689da545bc605ecf0edd79cfd14edb2126/litellm-1.67.0.tar.gz", hash = "sha256:18439db292d85b1d886bfa35de9d999600ecc6b4fc1137f12e6810d2133c8cec", size = 7238539, upload_time = "2025-04-19T22:45:20.068Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ec/ee/745092a4acf931548eae4f442d366b5e0f7282fb4054d6989045c74bd2c2/litellm-1.67.0-py3-none-any.whl", hash = "sha256:d297126f45eea8d8a3df9c0de1d9491ff20e78dab5d1aa3820602082501ba89e", size = 7601690, upload_time = "2025-04-19T22:45:17.01Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "markupsafe"
|
name = "markupsafe"
|
||||||
version = "3.0.2"
|
version = "3.0.2"
|
||||||
|
@ -790,6 +969,49 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", size = 53410, upload_time = "2025-03-19T14:27:23.451Z" },
|
{ url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", size = 53410, upload_time = "2025-03-19T14:27:23.451Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "multidict"
|
||||||
|
version = "6.4.3"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/da/2c/e367dfb4c6538614a0c9453e510d75d66099edf1c4e69da1b5ce691a1931/multidict-6.4.3.tar.gz", hash = "sha256:3ada0b058c9f213c5f95ba301f922d402ac234f1111a7d8fd70f1b99f3c281ec", size = 89372, upload_time = "2025-04-10T22:20:17.956Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6c/4b/86fd786d03915c6f49998cf10cd5fe6b6ac9e9a071cb40885d2e080fb90d/multidict-6.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a76534263d03ae0cfa721fea40fd2b5b9d17a6f85e98025931d41dc49504474", size = 63831, upload_time = "2025-04-10T22:18:48.748Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/45/05/9b51fdf7aef2563340a93be0a663acba2c428c4daeaf3960d92d53a4a930/multidict-6.4.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:805031c2f599eee62ac579843555ed1ce389ae00c7e9f74c2a1b45e0564a88dd", size = 37888, upload_time = "2025-04-10T22:18:50.021Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0b/43/53fc25394386c911822419b522181227ca450cf57fea76e6188772a1bd91/multidict-6.4.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c56c179839d5dcf51d565132185409d1d5dd8e614ba501eb79023a6cab25576b", size = 36852, upload_time = "2025-04-10T22:18:51.246Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/8a/68/7b99c751e822467c94a235b810a2fd4047d4ecb91caef6b5c60116991c4b/multidict-6.4.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c64f4ddb3886dd8ab71b68a7431ad4aa01a8fa5be5b11543b29674f29ca0ba3", size = 223644, upload_time = "2025-04-10T22:18:52.965Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/80/1b/d458d791e4dd0f7e92596667784fbf99e5c8ba040affe1ca04f06b93ae92/multidict-6.4.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3002a856367c0b41cad6784f5b8d3ab008eda194ed7864aaa58f65312e2abcac", size = 230446, upload_time = "2025-04-10T22:18:54.509Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e2/46/9793378d988905491a7806d8987862dc5a0bae8a622dd896c4008c7b226b/multidict-6.4.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d75e621e7d887d539d6e1d789f0c64271c250276c333480a9e1de089611f790", size = 231070, upload_time = "2025-04-10T22:18:56.019Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a7/b8/b127d3e1f8dd2a5bf286b47b24567ae6363017292dc6dec44656e6246498/multidict-6.4.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:995015cf4a3c0d72cbf453b10a999b92c5629eaf3a0c3e1efb4b5c1f602253bb", size = 229956, upload_time = "2025-04-10T22:18:59.146Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0c/93/f70a4c35b103fcfe1443059a2bb7f66e5c35f2aea7804105ff214f566009/multidict-6.4.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b0fabae7939d09d7d16a711468c385272fa1b9b7fb0d37e51143585d8e72e0", size = 222599, upload_time = "2025-04-10T22:19:00.657Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/63/8c/e28e0eb2fe34921d6aa32bfc4ac75b09570b4d6818cc95d25499fe08dc1d/multidict-6.4.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61ed4d82f8a1e67eb9eb04f8587970d78fe7cddb4e4d6230b77eda23d27938f9", size = 216136, upload_time = "2025-04-10T22:19:02.244Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/72/f5/fbc81f866585b05f89f99d108be5d6ad170e3b6c4d0723d1a2f6ba5fa918/multidict-6.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:062428944a8dc69df9fdc5d5fc6279421e5f9c75a9ee3f586f274ba7b05ab3c8", size = 228139, upload_time = "2025-04-10T22:19:04.151Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/bb/ba/7d196bad6b85af2307d81f6979c36ed9665f49626f66d883d6c64d156f78/multidict-6.4.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b90e27b4674e6c405ad6c64e515a505c6d113b832df52fdacb6b1ffd1fa9a1d1", size = 226251, upload_time = "2025-04-10T22:19:06.117Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/cc/e2/fae46a370dce79d08b672422a33df721ec8b80105e0ea8d87215ff6b090d/multidict-6.4.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7d50d4abf6729921e9613d98344b74241572b751c6b37feed75fb0c37bd5a817", size = 221868, upload_time = "2025-04-10T22:19:07.981Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/26/20/bbc9a3dec19d5492f54a167f08546656e7aef75d181d3d82541463450e88/multidict-6.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:43fe10524fb0a0514be3954be53258e61d87341008ce4914f8e8b92bee6f875d", size = 233106, upload_time = "2025-04-10T22:19:09.5Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ee/8d/f30ae8f5ff7a2461177f4d8eb0d8f69f27fb6cfe276b54ec4fd5a282d918/multidict-6.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:236966ca6c472ea4e2d3f02f6673ebfd36ba3f23159c323f5a496869bc8e47c9", size = 230163, upload_time = "2025-04-10T22:19:11Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/15/e9/2833f3c218d3c2179f3093f766940ded6b81a49d2e2f9c46ab240d23dfec/multidict-6.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:422a5ec315018e606473ba1f5431e064cf8b2a7468019233dcf8082fabad64c8", size = 225906, upload_time = "2025-04-10T22:19:12.875Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f1/31/6edab296ac369fd286b845fa5dd4c409e63bc4655ed8c9510fcb477e9ae9/multidict-6.4.3-cp313-cp313-win32.whl", hash = "sha256:f901a5aace8e8c25d78960dcc24c870c8d356660d3b49b93a78bf38eb682aac3", size = 35238, upload_time = "2025-04-10T22:19:14.41Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/23/57/2c0167a1bffa30d9a1383c3dab99d8caae985defc8636934b5668830d2ef/multidict-6.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:1c152c49e42277bc9a2f7b78bd5fa10b13e88d1b0328221e7aef89d5c60a99a5", size = 38799, upload_time = "2025-04-10T22:19:15.869Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c9/13/2ead63b9ab0d2b3080819268acb297bd66e238070aa8d42af12b08cbee1c/multidict-6.4.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:be8751869e28b9c0d368d94f5afcb4234db66fe8496144547b4b6d6a0645cfc6", size = 68642, upload_time = "2025-04-10T22:19:17.527Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/85/45/f1a751e1eede30c23951e2ae274ce8fad738e8a3d5714be73e0a41b27b16/multidict-6.4.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0d4b31f8a68dccbcd2c0ea04f0e014f1defc6b78f0eb8b35f2265e8716a6df0c", size = 40028, upload_time = "2025-04-10T22:19:19.465Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a7/29/fcc53e886a2cc5595cc4560df333cb9630257bda65003a7eb4e4e0d8f9c1/multidict-6.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:032efeab3049e37eef2ff91271884303becc9e54d740b492a93b7e7266e23756", size = 39424, upload_time = "2025-04-10T22:19:20.762Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f6/f0/056c81119d8b88703971f937b371795cab1407cd3c751482de5bfe1a04a9/multidict-6.4.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e78006af1a7c8a8007e4f56629d7252668344442f66982368ac06522445e375", size = 226178, upload_time = "2025-04-10T22:19:22.17Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a3/79/3b7e5fea0aa80583d3a69c9d98b7913dfd4fbc341fb10bb2fb48d35a9c21/multidict-6.4.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:daeac9dd30cda8703c417e4fddccd7c4dc0c73421a0b54a7da2713be125846be", size = 222617, upload_time = "2025-04-10T22:19:23.773Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/06/db/3ed012b163e376fc461e1d6a67de69b408339bc31dc83d39ae9ec3bf9578/multidict-6.4.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f6f90700881438953eae443a9c6f8a509808bc3b185246992c4233ccee37fea", size = 227919, upload_time = "2025-04-10T22:19:25.35Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b1/db/0433c104bca380989bc04d3b841fc83e95ce0c89f680e9ea4251118b52b6/multidict-6.4.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f84627997008390dd15762128dcf73c3365f4ec0106739cde6c20a07ed198ec8", size = 226097, upload_time = "2025-04-10T22:19:27.183Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c2/95/910db2618175724dd254b7ae635b6cd8d2947a8b76b0376de7b96d814dab/multidict-6.4.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3307b48cd156153b117c0ea54890a3bdbf858a5b296ddd40dc3852e5f16e9b02", size = 220706, upload_time = "2025-04-10T22:19:28.882Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d1/af/aa176c6f5f1d901aac957d5258d5e22897fe13948d1e69063ae3d5d0ca01/multidict-6.4.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ead46b0fa1dcf5af503a46e9f1c2e80b5d95c6011526352fa5f42ea201526124", size = 211728, upload_time = "2025-04-10T22:19:30.481Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e7/42/d51cc5fc1527c3717d7f85137d6c79bb7a93cd214c26f1fc57523774dbb5/multidict-6.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1748cb2743bedc339d63eb1bca314061568793acd603a6e37b09a326334c9f44", size = 226276, upload_time = "2025-04-10T22:19:32.454Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/28/6b/d836dea45e0b8432343ba4acf9a8ecaa245da4c0960fb7ab45088a5e568a/multidict-6.4.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:acc9fa606f76fc111b4569348cc23a771cb52c61516dcc6bcef46d612edb483b", size = 212069, upload_time = "2025-04-10T22:19:34.17Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/55/34/0ee1a7adb3560e18ee9289c6e5f7db54edc312b13e5c8263e88ea373d12c/multidict-6.4.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:31469d5832b5885adeb70982e531ce86f8c992334edd2f2254a10fa3182ac504", size = 217858, upload_time = "2025-04-10T22:19:35.879Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/04/08/586d652c2f5acefe0cf4e658eedb4d71d4ba6dfd4f189bd81b400fc1bc6b/multidict-6.4.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ba46b51b6e51b4ef7bfb84b82f5db0dc5e300fb222a8a13b8cd4111898a869cf", size = 226988, upload_time = "2025-04-10T22:19:37.434Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/82/e3/cc59c7e2bc49d7f906fb4ffb6d9c3a3cf21b9f2dd9c96d05bef89c2b1fd1/multidict-6.4.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:389cfefb599edf3fcfd5f64c0410da686f90f5f5e2c4d84e14f6797a5a337af4", size = 220435, upload_time = "2025-04-10T22:19:39.005Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e0/32/5c3a556118aca9981d883f38c4b1bfae646f3627157f70f4068e5a648955/multidict-6.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:64bc2bbc5fba7b9db5c2c8d750824f41c6994e3882e6d73c903c2afa78d091e4", size = 221494, upload_time = "2025-04-10T22:19:41.447Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b9/3b/1599631f59024b75c4d6e3069f4502409970a336647502aaf6b62fb7ac98/multidict-6.4.3-cp313-cp313t-win32.whl", hash = "sha256:0ecdc12ea44bab2807d6b4a7e5eef25109ab1c82a8240d86d3c1fc9f3b72efd5", size = 41775, upload_time = "2025-04-10T22:19:43.707Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e8/4e/09301668d675d02ca8e8e1a3e6be046619e30403f5ada2ed5b080ae28d02/multidict-6.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:7146a8742ea71b5d7d955bffcef58a9e6e04efba704b52a460134fefd10a8208", size = 45946, upload_time = "2025-04-10T22:19:45.071Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/96/10/7d526c8974f017f1e7ca584c71ee62a638e9334d8d33f27d7cdfc9ae79e4/multidict-6.4.3-py3-none-any.whl", hash = "sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9", size = 10400, upload_time = "2025-04-10T22:20:16.445Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nbclient"
|
name = "nbclient"
|
||||||
version = "0.10.2"
|
version = "0.10.2"
|
||||||
|
@ -1046,6 +1268,47 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810, upload_time = "2025-04-15T09:18:44.753Z" },
|
{ url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810, upload_time = "2025-04-15T09:18:44.753Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "propcache"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/07/c8/fdc6686a986feae3541ea23dcaa661bd93972d3940460646c6bb96e21c40/propcache-0.3.1.tar.gz", hash = "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf", size = 43651, upload_time = "2025-03-26T03:06:12.05Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/58/60/f645cc8b570f99be3cf46714170c2de4b4c9d6b827b912811eff1eb8a412/propcache-0.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8", size = 77865, upload_time = "2025-03-26T03:04:53.406Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6f/d4/c1adbf3901537582e65cf90fd9c26fde1298fde5a2c593f987112c0d0798/propcache-0.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f", size = 45452, upload_time = "2025-03-26T03:04:54.624Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d1/b5/fe752b2e63f49f727c6c1c224175d21b7d1727ce1d4873ef1c24c9216830/propcache-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111", size = 44800, upload_time = "2025-03-26T03:04:55.844Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/62/37/fc357e345bc1971e21f76597028b059c3d795c5ca7690d7a8d9a03c9708a/propcache-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5", size = 225804, upload_time = "2025-03-26T03:04:57.158Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0d/f1/16e12c33e3dbe7f8b737809bad05719cff1dccb8df4dafbcff5575002c0e/propcache-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb", size = 230650, upload_time = "2025-03-26T03:04:58.61Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3e/a2/018b9f2ed876bf5091e60153f727e8f9073d97573f790ff7cdf6bc1d1fb8/propcache-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7", size = 234235, upload_time = "2025-03-26T03:05:00.599Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/45/5f/3faee66fc930dfb5da509e34c6ac7128870631c0e3582987fad161fcb4b1/propcache-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120", size = 228249, upload_time = "2025-03-26T03:05:02.11Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/62/1e/a0d5ebda5da7ff34d2f5259a3e171a94be83c41eb1e7cd21a2105a84a02e/propcache-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654", size = 214964, upload_time = "2025-03-26T03:05:03.599Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/db/a0/d72da3f61ceab126e9be1f3bc7844b4e98c6e61c985097474668e7e52152/propcache-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e", size = 222501, upload_time = "2025-03-26T03:05:05.107Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/18/6d/a008e07ad7b905011253adbbd97e5b5375c33f0b961355ca0a30377504ac/propcache-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b", size = 217917, upload_time = "2025-03-26T03:05:06.59Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/98/37/02c9343ffe59e590e0e56dc5c97d0da2b8b19fa747ebacf158310f97a79a/propcache-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53", size = 217089, upload_time = "2025-03-26T03:05:08.1Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/53/1b/d3406629a2c8a5666d4674c50f757a77be119b113eedd47b0375afdf1b42/propcache-0.3.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5", size = 228102, upload_time = "2025-03-26T03:05:09.982Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/cd/a7/3664756cf50ce739e5f3abd48febc0be1a713b1f389a502ca819791a6b69/propcache-0.3.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7", size = 230122, upload_time = "2025-03-26T03:05:11.408Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/35/36/0bbabaacdcc26dac4f8139625e930f4311864251276033a52fd52ff2a274/propcache-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef", size = 226818, upload_time = "2025-03-26T03:05:12.909Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/cc/27/4e0ef21084b53bd35d4dae1634b6d0bad35e9c58ed4f032511acca9d4d26/propcache-0.3.1-cp313-cp313-win32.whl", hash = "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24", size = 40112, upload_time = "2025-03-26T03:05:14.289Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a6/2c/a54614d61895ba6dd7ac8f107e2b2a0347259ab29cbf2ecc7b94fa38c4dc/propcache-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037", size = 44034, upload_time = "2025-03-26T03:05:15.616Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5a/a8/0a4fd2f664fc6acc66438370905124ce62e84e2e860f2557015ee4a61c7e/propcache-0.3.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f", size = 82613, upload_time = "2025-03-26T03:05:16.913Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4d/e5/5ef30eb2cd81576256d7b6caaa0ce33cd1d2c2c92c8903cccb1af1a4ff2f/propcache-0.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c", size = 47763, upload_time = "2025-03-26T03:05:18.607Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/87/9a/87091ceb048efeba4d28e903c0b15bcc84b7c0bf27dc0261e62335d9b7b8/propcache-0.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc", size = 47175, upload_time = "2025-03-26T03:05:19.85Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3e/2f/854e653c96ad1161f96194c6678a41bbb38c7947d17768e8811a77635a08/propcache-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de", size = 292265, upload_time = "2025-03-26T03:05:21.654Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/40/8d/090955e13ed06bc3496ba4a9fb26c62e209ac41973cb0d6222de20c6868f/propcache-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6", size = 294412, upload_time = "2025-03-26T03:05:23.147Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/39/e6/d51601342e53cc7582449e6a3c14a0479fab2f0750c1f4d22302e34219c6/propcache-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7", size = 294290, upload_time = "2025-03-26T03:05:24.577Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3b/4d/be5f1a90abc1881884aa5878989a1acdafd379a91d9c7e5e12cef37ec0d7/propcache-0.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458", size = 282926, upload_time = "2025-03-26T03:05:26.459Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/57/2b/8f61b998c7ea93a2b7eca79e53f3e903db1787fca9373af9e2cf8dc22f9d/propcache-0.3.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11", size = 267808, upload_time = "2025-03-26T03:05:28.188Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/11/1c/311326c3dfce59c58a6098388ba984b0e5fb0381ef2279ec458ef99bd547/propcache-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c", size = 290916, upload_time = "2025-03-26T03:05:29.757Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4b/74/91939924b0385e54dc48eb2e4edd1e4903ffd053cf1916ebc5347ac227f7/propcache-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf", size = 262661, upload_time = "2025-03-26T03:05:31.472Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c2/d7/e6079af45136ad325c5337f5dd9ef97ab5dc349e0ff362fe5c5db95e2454/propcache-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27", size = 264384, upload_time = "2025-03-26T03:05:32.984Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b7/d5/ba91702207ac61ae6f1c2da81c5d0d6bf6ce89e08a2b4d44e411c0bbe867/propcache-0.3.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757", size = 291420, upload_time = "2025-03-26T03:05:34.496Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/58/70/2117780ed7edcd7ba6b8134cb7802aada90b894a9810ec56b7bb6018bee7/propcache-0.3.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18", size = 290880, upload_time = "2025-03-26T03:05:36.256Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4a/1f/ecd9ce27710021ae623631c0146719280a929d895a095f6d85efb6a0be2e/propcache-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a", size = 287407, upload_time = "2025-03-26T03:05:37.799Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3e/66/2e90547d6b60180fb29e23dc87bd8c116517d4255240ec6d3f7dc23d1926/propcache-0.3.1-cp313-cp313t-win32.whl", hash = "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d", size = 42573, upload_time = "2025-03-26T03:05:39.193Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/cb/8f/50ad8599399d1861b4d2b6b45271f0ef6af1b09b0a2386a46dbaf19c9535/propcache-0.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e", size = 46757, upload_time = "2025-03-26T03:05:40.811Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b8/d3/c3cb8f1d6ae3b37f83e1de806713a9b3642c5895f0215a62e1a4bd6e5e34/propcache-0.3.1-py3-none-any.whl", hash = "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40", size = 12376, upload_time = "2025-03-26T03:06:10.5Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "psutil"
|
name = "psutil"
|
||||||
version = "7.0.0"
|
version = "7.0.0"
|
||||||
|
@ -1259,6 +1522,29 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload_time = "2025-01-25T08:48:14.241Z" },
|
{ url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload_time = "2025-01-25T08:48:14.241Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex"
|
||||||
|
version = "2024.11.6"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494, upload_time = "2024-11-06T20:12:31.635Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/90/73/bcb0e36614601016552fa9344544a3a2ae1809dc1401b100eab02e772e1f/regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", size = 483525, upload_time = "2024-11-06T20:10:45.19Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0f/3f/f1a082a46b31e25291d830b369b6b0c5576a6f7fb89d3053a354c24b8a83/regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", size = 288324, upload_time = "2024-11-06T20:10:47.177Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/09/c9/4e68181a4a652fb3ef5099e077faf4fd2a694ea6e0f806a7737aff9e758a/regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", size = 284617, upload_time = "2024-11-06T20:10:49.312Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/fc/fd/37868b75eaf63843165f1d2122ca6cb94bfc0271e4428cf58c0616786dce/regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0", size = 795023, upload_time = "2024-11-06T20:10:51.102Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c4/7c/d4cd9c528502a3dedb5c13c146e7a7a539a3853dc20209c8e75d9ba9d1b2/regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7", size = 833072, upload_time = "2024-11-06T20:10:52.926Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4f/db/46f563a08f969159c5a0f0e722260568425363bea43bb7ae370becb66a67/regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7", size = 823130, upload_time = "2024-11-06T20:10:54.828Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/db/60/1eeca2074f5b87df394fccaa432ae3fc06c9c9bfa97c5051aed70e6e00c2/regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c", size = 796857, upload_time = "2024-11-06T20:10:56.634Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/10/db/ac718a08fcee981554d2f7bb8402f1faa7e868c1345c16ab1ebec54b0d7b/regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3", size = 784006, upload_time = "2024-11-06T20:10:59.369Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c2/41/7da3fe70216cea93144bf12da2b87367590bcf07db97604edeea55dac9ad/regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07", size = 781650, upload_time = "2024-11-06T20:11:02.042Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a7/d5/880921ee4eec393a4752e6ab9f0fe28009435417c3102fc413f3fe81c4e5/regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e", size = 789545, upload_time = "2024-11-06T20:11:03.933Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/dc/96/53770115e507081122beca8899ab7f5ae28ae790bfcc82b5e38976df6a77/regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6", size = 853045, upload_time = "2024-11-06T20:11:06.497Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/31/d3/1372add5251cc2d44b451bd94f43b2ec78e15a6e82bff6a290ef9fd8f00a/regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4", size = 860182, upload_time = "2024-11-06T20:11:09.06Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ed/e3/c446a64984ea9f69982ba1a69d4658d5014bc7a0ea468a07e1a1265db6e2/regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d", size = 787733, upload_time = "2024-11-06T20:11:11.256Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/2b/f1/e40c8373e3480e4f29f2692bd21b3e05f296d3afebc7e5dcf21b9756ca1c/regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", size = 262122, upload_time = "2024-11-06T20:11:13.161Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", size = 273545, upload_time = "2024-11-06T20:11:15Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "requests"
|
name = "requests"
|
||||||
version = "2.32.3"
|
version = "2.32.3"
|
||||||
|
@ -1381,11 +1667,13 @@ source = { virtual = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "dotenv" },
|
{ name = "dotenv" },
|
||||||
{ name = "jupyter" },
|
{ name = "jupyter" },
|
||||||
|
{ name = "litellm" },
|
||||||
{ name = "notebook" },
|
{ name = "notebook" },
|
||||||
{ name = "openai" },
|
{ name = "openai" },
|
||||||
{ name = "openpyxl" },
|
{ name = "openpyxl" },
|
||||||
{ name = "pandas" },
|
{ name = "pandas" },
|
||||||
{ name = "requests" },
|
{ name = "requests" },
|
||||||
|
{ name = "tenacity" },
|
||||||
{ name = "tqdm" },
|
{ name = "tqdm" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1393,11 +1681,13 @@ dependencies = [
|
||||||
requires-dist = [
|
requires-dist = [
|
||||||
{ name = "dotenv", specifier = ">=0.9.9" },
|
{ name = "dotenv", specifier = ">=0.9.9" },
|
||||||
{ name = "jupyter", specifier = ">=1.1.1" },
|
{ name = "jupyter", specifier = ">=1.1.1" },
|
||||||
|
{ name = "litellm", specifier = "==1.67.0" },
|
||||||
{ name = "notebook", specifier = ">=7.4.1" },
|
{ name = "notebook", specifier = ">=7.4.1" },
|
||||||
{ name = "openai", specifier = ">=1.76.0" },
|
{ name = "openai", specifier = ">=1.76.0" },
|
||||||
{ name = "openpyxl", specifier = ">=3.1.5" },
|
{ name = "openpyxl", specifier = ">=3.1.5" },
|
||||||
{ name = "pandas", specifier = ">=2.2.3" },
|
{ name = "pandas", specifier = ">=2.2.3" },
|
||||||
{ name = "requests", specifier = ">=2.32.3" },
|
{ name = "requests", specifier = ">=2.32.3" },
|
||||||
|
{ name = "tenacity", specifier = ">=9.1.2" },
|
||||||
{ name = "tqdm", specifier = ">=4.67.1" },
|
{ name = "tqdm", specifier = ">=4.67.1" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1418,6 +1708,15 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload_time = "2023-09-30T13:58:03.53Z" },
|
{ url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload_time = "2023-09-30T13:58:03.53Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tenacity"
|
||||||
|
version = "9.1.2"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036, upload_time = "2025-04-02T08:25:09.966Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248, upload_time = "2025-04-02T08:25:07.678Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "terminado"
|
name = "terminado"
|
||||||
version = "0.18.1"
|
version = "0.18.1"
|
||||||
|
@ -1432,6 +1731,24 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154, upload_time = "2024-03-12T14:34:36.569Z" },
|
{ url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154, upload_time = "2024-03-12T14:34:36.569Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tiktoken"
|
||||||
|
version = "0.9.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "regex" },
|
||||||
|
{ name = "requests" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/ea/cf/756fedf6981e82897f2d570dd25fa597eb3f4459068ae0572d7e888cfd6f/tiktoken-0.9.0.tar.gz", hash = "sha256:d02a5ca6a938e0490e1ff957bc48c8b078c88cb83977be1625b1fd8aac792c5d", size = 35991, upload_time = "2025-02-14T06:03:01.003Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7a/11/09d936d37f49f4f494ffe660af44acd2d99eb2429d60a57c71318af214e0/tiktoken-0.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b0e8e05a26eda1249e824156d537015480af7ae222ccb798e5234ae0285dbdb", size = 1064919, upload_time = "2025-02-14T06:02:37.494Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/80/0e/f38ba35713edb8d4197ae602e80837d574244ced7fb1b6070b31c29816e0/tiktoken-0.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:27d457f096f87685195eea0165a1807fae87b97b2161fe8c9b1df5bd74ca6f63", size = 1007877, upload_time = "2025-02-14T06:02:39.516Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/fe/82/9197f77421e2a01373e27a79dd36efdd99e6b4115746ecc553318ecafbf0/tiktoken-0.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cf8ded49cddf825390e36dd1ad35cd49589e8161fdcb52aa25f0583e90a3e01", size = 1140095, upload_time = "2025-02-14T06:02:41.791Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f2/bb/4513da71cac187383541facd0291c4572b03ec23c561de5811781bbd988f/tiktoken-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc156cb314119a8bb9748257a2eaebd5cc0753b6cb491d26694ed42fc7cb3139", size = 1195649, upload_time = "2025-02-14T06:02:43Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/fa/5c/74e4c137530dd8504e97e3a41729b1103a4ac29036cbfd3250b11fd29451/tiktoken-0.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cd69372e8c9dd761f0ab873112aba55a0e3e506332dd9f7522ca466e817b1b7a", size = 1258465, upload_time = "2025-02-14T06:02:45.046Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/de/a8/8f499c179ec900783ffe133e9aab10044481679bb9aad78436d239eee716/tiktoken-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5ea0edb6f83dc56d794723286215918c1cde03712cbbafa0348b33448faf5b95", size = 894669, upload_time = "2025-02-14T06:02:47.341Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tinycss2"
|
name = "tinycss2"
|
||||||
version = "1.4.0"
|
version = "1.4.0"
|
||||||
|
@ -1444,6 +1761,31 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload_time = "2024-10-24T14:58:28.029Z" },
|
{ url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload_time = "2024-10-24T14:58:28.029Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokenizers"
|
||||||
|
version = "0.21.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "huggingface-hub" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/92/76/5ac0c97f1117b91b7eb7323dcd61af80d72f790b4df71249a7850c195f30/tokenizers-0.21.1.tar.gz", hash = "sha256:a1bb04dc5b448985f86ecd4b05407f5a8d97cb2c0532199b2a302a604a0165ab", size = 343256, upload_time = "2025-03-13T10:51:18.189Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a5/1f/328aee25f9115bf04262e8b4e5a2050b7b7cf44b59c74e982db7270c7f30/tokenizers-0.21.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e78e413e9e668ad790a29456e677d9d3aa50a9ad311a40905d6861ba7692cf41", size = 2780767, upload_time = "2025-03-13T10:51:09.459Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ae/1a/4526797f3719b0287853f12c5ad563a9be09d446c44ac784cdd7c50f76ab/tokenizers-0.21.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:cd51cd0a91ecc801633829fcd1fda9cf8682ed3477c6243b9a095539de4aecf3", size = 2650555, upload_time = "2025-03-13T10:51:07.692Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4d/7a/a209b29f971a9fdc1da86f917fe4524564924db50d13f0724feed37b2a4d/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28da6b72d4fb14ee200a1bd386ff74ade8992d7f725f2bde2c495a9a98cf4d9f", size = 2937541, upload_time = "2025-03-13T10:50:56.679Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3c/1e/b788b50ffc6191e0b1fc2b0d49df8cff16fe415302e5ceb89f619d12c5bc/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:34d8cfde551c9916cb92014e040806122295a6800914bab5865deb85623931cf", size = 2819058, upload_time = "2025-03-13T10:50:59.525Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/36/aa/3626dfa09a0ecc5b57a8c58eeaeb7dd7ca9a37ad9dd681edab5acd55764c/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaa852d23e125b73d283c98f007e06d4595732104b65402f46e8ef24b588d9f8", size = 3133278, upload_time = "2025-03-13T10:51:04.678Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a4/4d/8fbc203838b3d26269f944a89459d94c858f5b3f9a9b6ee9728cdcf69161/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a21a15d5c8e603331b8a59548bbe113564136dc0f5ad8306dd5033459a226da0", size = 3144253, upload_time = "2025-03-13T10:51:01.261Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d8/1b/2bd062adeb7c7511b847b32e356024980c0ffcf35f28947792c2d8ad2288/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2fdbd4c067c60a0ac7eca14b6bd18a5bebace54eb757c706b47ea93204f7a37c", size = 3398225, upload_time = "2025-03-13T10:51:03.243Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/8a/63/38be071b0c8e06840bc6046991636bcb30c27f6bb1e670f4f4bc87cf49cc/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dd9a0061e403546f7377df940e866c3e678d7d4e9643d0461ea442b4f89e61a", size = 3038874, upload_time = "2025-03-13T10:51:06.235Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ec/83/afa94193c09246417c23a3c75a8a0a96bf44ab5630a3015538d0c316dd4b/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:db9484aeb2e200c43b915a1a0150ea885e35f357a5a8fabf7373af333dcc8dbf", size = 9014448, upload_time = "2025-03-13T10:51:10.927Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ae/b3/0e1a37d4f84c0f014d43701c11eb8072704f6efe8d8fc2dcdb79c47d76de/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:ed248ab5279e601a30a4d67bdb897ecbe955a50f1e7bb62bd99f07dd11c2f5b6", size = 8937877, upload_time = "2025-03-13T10:51:12.688Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ac/33/ff08f50e6d615eb180a4a328c65907feb6ded0b8f990ec923969759dc379/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:9ac78b12e541d4ce67b4dfd970e44c060a2147b9b2a21f509566d556a509c67d", size = 9186645, upload_time = "2025-03-13T10:51:14.723Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5f/aa/8ae85f69a9f6012c6f8011c6f4aa1c96154c816e9eea2e1b758601157833/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e5a69c1a4496b81a5ee5d2c1f3f7fbdf95e90a0196101b0ee89ed9956b8a168f", size = 9384380, upload_time = "2025-03-13T10:51:16.526Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e8/5b/a5d98c89f747455e8b7a9504910c865d5e51da55e825a7ae641fb5ff0a58/tokenizers-0.21.1-cp39-abi3-win32.whl", hash = "sha256:1039a3a5734944e09de1d48761ade94e00d0fa760c0e0551151d4dd851ba63e3", size = 2239506, upload_time = "2025-03-13T10:51:20.643Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e6/b6/072a8e053ae600dcc2ac0da81a23548e3b523301a442a6ca900e92ac35be/tokenizers-0.21.1-cp39-abi3-win_amd64.whl", hash = "sha256:0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382", size = 2435481, upload_time = "2025-03-13T10:51:19.243Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tornado"
|
name = "tornado"
|
||||||
version = "6.4.2"
|
version = "6.4.2"
|
||||||
|
@ -1584,3 +1926,60 @@ sdist = { url = "https://files.pythonhosted.org/packages/41/53/2e0253c5efd69c965
|
||||||
wheels = [
|
wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/ca/51/5447876806d1088a0f8f71e16542bf350918128d0a69437df26047c8e46f/widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575", size = 2196503, upload_time = "2025-04-10T13:01:23.086Z" },
|
{ url = "https://files.pythonhosted.org/packages/ca/51/5447876806d1088a0f8f71e16542bf350918128d0a69437df26047c8e46f/widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575", size = 2196503, upload_time = "2025-04-10T13:01:23.086Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "yarl"
|
||||||
|
version = "1.20.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "idna" },
|
||||||
|
{ name = "multidict" },
|
||||||
|
{ name = "propcache" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/62/51/c0edba5219027f6eab262e139f73e2417b0f4efffa23bf562f6e18f76ca5/yarl-1.20.0.tar.gz", hash = "sha256:686d51e51ee5dfe62dec86e4866ee0e9ed66df700d55c828a615640adc885307", size = 185258, upload_time = "2025-04-17T00:45:14.661Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0f/6f/514c9bff2900c22a4f10e06297714dbaf98707143b37ff0bcba65a956221/yarl-1.20.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2137810a20b933b1b1b7e5cf06a64c3ed3b4747b0e5d79c9447c00db0e2f752f", size = 145030, upload_time = "2025-04-17T00:43:15.083Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4e/9d/f88da3fa319b8c9c813389bfb3463e8d777c62654c7168e580a13fadff05/yarl-1.20.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:447c5eadd750db8389804030d15f43d30435ed47af1313303ed82a62388176d3", size = 96894, upload_time = "2025-04-17T00:43:17.372Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/cd/57/92e83538580a6968b2451d6c89c5579938a7309d4785748e8ad42ddafdce/yarl-1.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42fbe577272c203528d402eec8bf4b2d14fd49ecfec92272334270b850e9cd7d", size = 94457, upload_time = "2025-04-17T00:43:19.431Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e9/ee/7ee43bd4cf82dddd5da97fcaddb6fa541ab81f3ed564c42f146c83ae17ce/yarl-1.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18e321617de4ab170226cd15006a565d0fa0d908f11f724a2c9142d6b2812ab0", size = 343070, upload_time = "2025-04-17T00:43:21.426Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4a/12/b5eccd1109e2097bcc494ba7dc5de156e41cf8309fab437ebb7c2b296ce3/yarl-1.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4345f58719825bba29895011e8e3b545e6e00257abb984f9f27fe923afca2501", size = 337739, upload_time = "2025-04-17T00:43:23.634Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7d/6b/0eade8e49af9fc2585552f63c76fa59ef469c724cc05b29519b19aa3a6d5/yarl-1.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d9b980d7234614bc4674468ab173ed77d678349c860c3af83b1fffb6a837ddc", size = 351338, upload_time = "2025-04-17T00:43:25.695Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/45/cb/aaaa75d30087b5183c7b8a07b4fb16ae0682dd149a1719b3a28f54061754/yarl-1.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af4baa8a445977831cbaa91a9a84cc09debb10bc8391f128da2f7bd070fc351d", size = 353636, upload_time = "2025-04-17T00:43:27.876Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/98/9d/d9cb39ec68a91ba6e66fa86d97003f58570327d6713833edf7ad6ce9dde5/yarl-1.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:123393db7420e71d6ce40d24885a9e65eb1edefc7a5228db2d62bcab3386a5c0", size = 348061, upload_time = "2025-04-17T00:43:29.788Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/72/6b/103940aae893d0cc770b4c36ce80e2ed86fcb863d48ea80a752b8bda9303/yarl-1.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab47acc9332f3de1b39e9b702d9c916af7f02656b2a86a474d9db4e53ef8fd7a", size = 334150, upload_time = "2025-04-17T00:43:31.742Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ef/b2/986bd82aa222c3e6b211a69c9081ba46484cffa9fab2a5235e8d18ca7a27/yarl-1.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4a34c52ed158f89876cba9c600b2c964dfc1ca52ba7b3ab6deb722d1d8be6df2", size = 362207, upload_time = "2025-04-17T00:43:34.099Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/14/7c/63f5922437b873795d9422cbe7eb2509d4b540c37ae5548a4bb68fd2c546/yarl-1.20.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:04d8cfb12714158abf2618f792c77bc5c3d8c5f37353e79509608be4f18705c9", size = 361277, upload_time = "2025-04-17T00:43:36.202Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/81/83/450938cccf732466953406570bdb42c62b5ffb0ac7ac75a1f267773ab5c8/yarl-1.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7dc63ad0d541c38b6ae2255aaa794434293964677d5c1ec5d0116b0e308031f5", size = 364990, upload_time = "2025-04-17T00:43:38.551Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b4/de/af47d3a47e4a833693b9ec8e87debb20f09d9fdc9139b207b09a3e6cbd5a/yarl-1.20.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d02b591a64e4e6ca18c5e3d925f11b559c763b950184a64cf47d74d7e41877", size = 374684, upload_time = "2025-04-17T00:43:40.481Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/62/0b/078bcc2d539f1faffdc7d32cb29a2d7caa65f1a6f7e40795d8485db21851/yarl-1.20.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:95fc9876f917cac7f757df80a5dda9de59d423568460fe75d128c813b9af558e", size = 382599, upload_time = "2025-04-17T00:43:42.463Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/74/a9/4fdb1a7899f1fb47fd1371e7ba9e94bff73439ce87099d5dd26d285fffe0/yarl-1.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bb769ae5760cd1c6a712135ee7915f9d43f11d9ef769cb3f75a23e398a92d384", size = 378573, upload_time = "2025-04-17T00:43:44.797Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/fd/be/29f5156b7a319e4d2e5b51ce622b4dfb3aa8d8204cd2a8a339340fbfad40/yarl-1.20.0-cp313-cp313-win32.whl", hash = "sha256:70e0c580a0292c7414a1cead1e076c9786f685c1fc4757573d2967689b370e62", size = 86051, upload_time = "2025-04-17T00:43:47.076Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/52/56/05fa52c32c301da77ec0b5f63d2d9605946fe29defacb2a7ebd473c23b81/yarl-1.20.0-cp313-cp313-win_amd64.whl", hash = "sha256:4c43030e4b0af775a85be1fa0433119b1565673266a70bf87ef68a9d5ba3174c", size = 92742, upload_time = "2025-04-17T00:43:49.193Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d4/2f/422546794196519152fc2e2f475f0e1d4d094a11995c81a465faf5673ffd/yarl-1.20.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b6c4c3d0d6a0ae9b281e492b1465c72de433b782e6b5001c8e7249e085b69051", size = 163575, upload_time = "2025-04-17T00:43:51.533Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/90/fc/67c64ddab6c0b4a169d03c637fb2d2a212b536e1989dec8e7e2c92211b7f/yarl-1.20.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8681700f4e4df891eafa4f69a439a6e7d480d64e52bf460918f58e443bd3da7d", size = 106121, upload_time = "2025-04-17T00:43:53.506Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6d/00/29366b9eba7b6f6baed7d749f12add209b987c4cfbfa418404dbadc0f97c/yarl-1.20.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:84aeb556cb06c00652dbf87c17838eb6d92cfd317799a8092cee0e570ee11229", size = 103815, upload_time = "2025-04-17T00:43:55.41Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/28/f4/a2a4c967c8323c03689383dff73396281ced3b35d0ed140580825c826af7/yarl-1.20.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f166eafa78810ddb383e930d62e623d288fb04ec566d1b4790099ae0f31485f1", size = 408231, upload_time = "2025-04-17T00:43:57.825Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0f/a1/66f7ffc0915877d726b70cc7a896ac30b6ac5d1d2760613603b022173635/yarl-1.20.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5d3d6d14754aefc7a458261027a562f024d4f6b8a798adb472277f675857b1eb", size = 390221, upload_time = "2025-04-17T00:44:00.526Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/41/15/cc248f0504610283271615e85bf38bc014224122498c2016d13a3a1b8426/yarl-1.20.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a8f64df8ed5d04c51260dbae3cc82e5649834eebea9eadfd829837b8093eb00", size = 411400, upload_time = "2025-04-17T00:44:02.853Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5c/af/f0823d7e092bfb97d24fce6c7269d67fcd1aefade97d0a8189c4452e4d5e/yarl-1.20.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d9949eaf05b4d30e93e4034a7790634bbb41b8be2d07edd26754f2e38e491de", size = 411714, upload_time = "2025-04-17T00:44:04.904Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/83/70/be418329eae64b9f1b20ecdaac75d53aef098797d4c2299d82ae6f8e4663/yarl-1.20.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c366b254082d21cc4f08f522ac201d0d83a8b8447ab562732931d31d80eb2a5", size = 404279, upload_time = "2025-04-17T00:44:07.721Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/19/f5/52e02f0075f65b4914eb890eea1ba97e6fd91dd821cc33a623aa707b2f67/yarl-1.20.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91bc450c80a2e9685b10e34e41aef3d44ddf99b3a498717938926d05ca493f6a", size = 384044, upload_time = "2025-04-17T00:44:09.708Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6a/36/b0fa25226b03d3f769c68d46170b3e92b00ab3853d73127273ba22474697/yarl-1.20.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c2aa4387de4bc3a5fe158080757748d16567119bef215bec643716b4fbf53f9", size = 416236, upload_time = "2025-04-17T00:44:11.734Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/cb/3a/54c828dd35f6831dfdd5a79e6c6b4302ae2c5feca24232a83cb75132b205/yarl-1.20.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:d2cbca6760a541189cf87ee54ff891e1d9ea6406079c66341008f7ef6ab61145", size = 402034, upload_time = "2025-04-17T00:44:13.975Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/10/97/c7bf5fba488f7e049f9ad69c1b8fdfe3daa2e8916b3d321aa049e361a55a/yarl-1.20.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:798a5074e656f06b9fad1a162be5a32da45237ce19d07884d0b67a0aa9d5fdda", size = 407943, upload_time = "2025-04-17T00:44:16.052Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/fd/a4/022d2555c1e8fcff08ad7f0f43e4df3aba34f135bff04dd35d5526ce54ab/yarl-1.20.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f106e75c454288472dbe615accef8248c686958c2e7dd3b8d8ee2669770d020f", size = 423058, upload_time = "2025-04-17T00:44:18.547Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4c/f6/0873a05563e5df29ccf35345a6ae0ac9e66588b41fdb7043a65848f03139/yarl-1.20.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3b60a86551669c23dc5445010534d2c5d8a4e012163218fc9114e857c0586fdd", size = 423792, upload_time = "2025-04-17T00:44:20.639Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9e/35/43fbbd082708fa42e923f314c24f8277a28483d219e049552e5007a9aaca/yarl-1.20.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e429857e341d5e8e15806118e0294f8073ba9c4580637e59ab7b238afca836f", size = 422242, upload_time = "2025-04-17T00:44:22.851Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ed/f7/f0f2500cf0c469beb2050b522c7815c575811627e6d3eb9ec7550ddd0bfe/yarl-1.20.0-cp313-cp313t-win32.whl", hash = "sha256:65a4053580fe88a63e8e4056b427224cd01edfb5f951498bfefca4052f0ce0ac", size = 93816, upload_time = "2025-04-17T00:44:25.491Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3f/93/f73b61353b2a699d489e782c3f5998b59f974ec3156a2050a52dfd7e8946/yarl-1.20.0-cp313-cp313t-win_amd64.whl", hash = "sha256:53b2da3a6ca0a541c1ae799c349788d480e5144cac47dba0266c7cb6c76151fe", size = 101093, upload_time = "2025-04-17T00:44:27.418Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ea/1f/70c57b3d7278e94ed22d85e09685d3f0a38ebdd8c5c73b65ba4c0d0fe002/yarl-1.20.0-py3-none-any.whl", hash = "sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124", size = 46124, upload_time = "2025-04-17T00:45:12.199Z" },
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "zipp"
|
||||||
|
version = "3.21.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/3f/50/bad581df71744867e9468ebd0bcd6505de3b275e06f202c2cb016e3ff56f/zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4", size = 24545, upload_time = "2024-11-10T15:05:20.202Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931", size = 9630, upload_time = "2024-11-10T15:05:19.275Z" },
|
||||||
|
]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue