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
|
||||
.env
|
||||
.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 os
|
||||
from collections import defaultdict
|
||||
import numpy as np # Import numpy for nan handling if necessary
|
||||
import numpy as np
|
||||
|
||||
# --- Configuration ---
|
||||
DB_FILE = "onet.database"
|
||||
OUTPUT_FILE = "task_ratings_enriched.json"
|
||||
OUTPUT_FILE = "task_ratings_enriched.json" # Changed output filename
|
||||
|
||||
# --- Database Interaction ---
|
||||
|
||||
|
||||
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:
|
||||
db_path (str): Path to the SQLite database file.
|
||||
|
||||
Returns:
|
||||
pandas.DataFrame: DataFrame containing joined data from task_ratings,
|
||||
task_statements, and occupation_data.
|
||||
Returns None if the database file doesn't exist or an error occurs.
|
||||
tuple(pandas.DataFrame, pandas.DataFrame): A tuple containing:
|
||||
- DataFrame with task ratings info.
|
||||
- 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):
|
||||
print(f"Error: Database file not found at {db_path}")
|
||||
return None
|
||||
return None, None
|
||||
|
||||
try:
|
||||
conn = sqlite3.connect(db_path)
|
||||
# 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 = """
|
||||
SELECT
|
||||
tr.onetsoc_code,
|
||||
|
@ -41,136 +44,277 @@ def fetch_data_from_db(db_path):
|
|||
od.description AS occupation_description,
|
||||
tr.scale_id,
|
||||
tr.category,
|
||||
tr.data_value
|
||||
tr.data_value,
|
||||
dr.dwa_title -- Added DWA title
|
||||
FROM
|
||||
task_ratings tr
|
||||
JOIN
|
||||
task_statements ts ON tr.task_id = ts.task_id
|
||||
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)
|
||||
conn.close()
|
||||
print(f"Successfully fetched {len(df)} records from the database.")
|
||||
return df
|
||||
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
|
||||
print(
|
||||
f"Successfully fetched {len(df)} records (including DWA info) from the database."
|
||||
)
|
||||
|
||||
|
||||
# --- Data Processing ---
|
||||
|
||||
|
||||
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[
|
||||
[
|
||||
if df.empty:
|
||||
print("Warning: Fetched DataFrame is empty.")
|
||||
# Return empty DataFrames with expected columns if the main fetch is empty
|
||||
ratings_cols = [
|
||||
"onetsoc_code",
|
||||
"task_id",
|
||||
"task",
|
||||
"occupation_title",
|
||||
"occupation_description",
|
||||
"scale_id",
|
||||
"category",
|
||||
"data_value",
|
||||
]
|
||||
]
|
||||
.drop_duplicates()
|
||||
.set_index(["onetsoc_code", "task_id"])
|
||||
)
|
||||
print(f"Extracted base info. Shape: {base_info.shape}")
|
||||
dwa_cols = ["onetsoc_code", "task_id", "dwa_title"]
|
||||
return pd.DataFrame(columns=ratings_cols), pd.DataFrame(columns=dwa_cols)
|
||||
|
||||
# --- 5. Merge Processed Data ---
|
||||
# Start with the base info and merge the calculated/pivoted data
|
||||
# Use 'left' joins to ensure all tasks/occupations from the base_info are kept.
|
||||
# If a task/occupation doesn't have frequency, importance, or relevance ratings,
|
||||
# the corresponding columns will have NaN values after the merge.
|
||||
# Remove duplicates caused by joining ratings with potentially multiple DWAs per task
|
||||
# Keep only unique combinations of the core task/rating info before processing
|
||||
core_cols = [
|
||||
"onetsoc_code",
|
||||
"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...")
|
||||
# Start with base_info, which should have the index ['onetsoc_code', 'task_id']
|
||||
final_df = base_info.merge(
|
||||
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.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.
|
||||
# For averages, NaN might mean no rating was provided. We can leave them as NaN
|
||||
# or fill with 0 or another placeholder depending on desired interpretation.
|
||||
# For frequency categories, NaN could mean that category wasn't rated. We filled with 0 during pivot.
|
||||
# Example: Fill NaN averages with 0
|
||||
# final_df['importance_average'].fillna(0, inplace=True)
|
||||
# final_df['relevance_average'].fillna(0, inplace=True)
|
||||
# Note: Leaving NaNs might be more informative.
|
||||
# Merge averages - check if they are not empty before merging
|
||||
if not imp_avg.empty:
|
||||
final_df = final_df.merge(imp_avg, on=["onetsoc_code", "task_id"], how="left")
|
||||
else:
|
||||
final_df["importance_average"] = np.nan # Add column if imp_avg was empty
|
||||
|
||||
if not rel_avg.empty:
|
||||
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}")
|
||||
|
||||
# Convert DataFrame to list of dictionaries for JSON output
|
||||
# Handle potential NaN values during JSON conversion
|
||||
final_df = final_df.replace(
|
||||
{np.nan: None}
|
||||
) # Replace numpy NaN with Python None for JSON compatibility
|
||||
# Replace numpy NaN with Python None for JSON compatibility
|
||||
final_df = final_df.replace({np.nan: None})
|
||||
result_list = final_df.to_dict(orient="records")
|
||||
|
||||
return result_list
|
||||
|
@ -190,13 +334,30 @@ def write_to_json(data, output_path):
|
|||
if data is None:
|
||||
print("No data to write to JSON.")
|
||||
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:
|
||||
with open(output_path, "w", encoding="utf-8") as f:
|
||||
json.dump(data, f, indent=4, ensure_ascii=False)
|
||||
print(f"Successfully wrote enriched data to {output_path}")
|
||||
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:
|
||||
print(f"An unexpected error occurred during JSON writing: {e}")
|
||||
|
||||
|
@ -204,20 +365,28 @@ def write_to_json(data, output_path):
|
|||
# --- Main Execution ---
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Starting O*NET Task Ratings Enrichment Script...")
|
||||
print("Starting O*NET Task Ratings & DWAs Enrichment Script...")
|
||||
# 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
|
||||
if raw_data_df is not None:
|
||||
enriched_data = process_task_ratings(raw_data_df)
|
||||
# Proceed only if ratings_data_df is a valid DataFrame (even if empty)
|
||||
# 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
|
||||
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)
|
||||
else:
|
||||
print("Data processing failed. No output file generated.")
|
||||
print("Data processing failed or returned None. No output file generated.")
|
||||
else:
|
||||
print("Data fetching failed. Script terminated.")
|
||||
print(
|
||||
"Data fetching failed or returned invalid type for ratings data. Script terminated."
|
||||
)
|
||||
|
||||
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",
|
||||
"execution_count": 9,
|
||||
"execution_count": 3,
|
||||
"id": "941d511f-ad72-4306-bbab-52127583e513",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
|
@ -55,7 +55,7 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"execution_count": 4,
|
||||
"id": "a5351f8b-c2ad-4d3e-af4a-992f539a6064",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
|
@ -73,7 +73,7 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"execution_count": 5,
|
||||
"id": "8b2ab22a-afab-41f9-81a3-48eab261b568",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
|
@ -106,87 +106,9 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"execution_count": 16,
|
||||
"id": "d2e4a855-f327-4b3d-ad0b-ed997e720639",
|
||||
"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": [
|
||||
{
|
||||
"data": {
|
||||
|
@ -214,16 +136,15 @@
|
|||
" <th>task</th>\n",
|
||||
" <th>occupation_title</th>\n",
|
||||
" <th>occupation_description</th>\n",
|
||||
" <th>Yearly or less</th>\n",
|
||||
" <th>More than yearly</th>\n",
|
||||
" <th>More than monthly</th>\n",
|
||||
" <th>More than weekly</th>\n",
|
||||
" <th>Daily</th>\n",
|
||||
" <th>Several times daily</th>\n",
|
||||
" <th>Hourly or more</th>\n",
|
||||
" <th>frequency_category_1</th>\n",
|
||||
" <th>frequency_category_2</th>\n",
|
||||
" <th>frequency_category_3</th>\n",
|
||||
" <th>frequency_category_4</th>\n",
|
||||
" <th>frequency_category_5</th>\n",
|
||||
" <th>frequency_category_6</th>\n",
|
||||
" <th>frequency_category_7</th>\n",
|
||||
" <th>importance_average</th>\n",
|
||||
" <th>relevance_average</th>\n",
|
||||
" <th>remote</th>\n",
|
||||
" <th>OCC_CODE</th>\n",
|
||||
" <th>TOT_EMP</th>\n",
|
||||
" <th>H_MEAN</th>\n",
|
||||
|
@ -247,7 +168,6 @@
|
|||
" <td>2.63</td>\n",
|
||||
" <td>4.52</td>\n",
|
||||
" <td>74.44</td>\n",
|
||||
" <td>remote</td>\n",
|
||||
" <td>11-1011</td>\n",
|
||||
" <td>211230.0</td>\n",
|
||||
" <td>124.47</td>\n",
|
||||
|
@ -256,20 +176,19 @@
|
|||
" <tr>\n",
|
||||
" <th>1</th>\n",
|
||||
" <td>11-1011.00</td>\n",
|
||||
" <td>8823</td>\n",
|
||||
" <td>Direct or coordinate an organization's financi...</td>\n",
|
||||
" <td>8824</td>\n",
|
||||
" <td>Confer with board members, organization offici...</td>\n",
|
||||
" <td>Chief Executives</td>\n",
|
||||
" <td>Determine and formulate policies and provide o...</td>\n",
|
||||
" <td>5.92</td>\n",
|
||||
" <td>15.98</td>\n",
|
||||
" <td>29.68</td>\n",
|
||||
" <td>21.18</td>\n",
|
||||
" <td>19.71</td>\n",
|
||||
" <td>4.91</td>\n",
|
||||
" <td>2.63</td>\n",
|
||||
" <td>4.52</td>\n",
|
||||
" <td>74.44</td>\n",
|
||||
" <td>remote</td>\n",
|
||||
" <td>1.42</td>\n",
|
||||
" <td>14.44</td>\n",
|
||||
" <td>27.31</td>\n",
|
||||
" <td>25.52</td>\n",
|
||||
" <td>26.88</td>\n",
|
||||
" <td>2.52</td>\n",
|
||||
" <td>1.90</td>\n",
|
||||
" <td>4.32</td>\n",
|
||||
" <td>81.71</td>\n",
|
||||
" <td>11-1011</td>\n",
|
||||
" <td>211230.0</td>\n",
|
||||
" <td>124.47</td>\n",
|
||||
|
@ -278,20 +197,19 @@
|
|||
" <tr>\n",
|
||||
" <th>2</th>\n",
|
||||
" <td>11-1011.00</td>\n",
|
||||
" <td>8823</td>\n",
|
||||
" <td>Direct or coordinate an organization's financi...</td>\n",
|
||||
" <td>8827</td>\n",
|
||||
" <td>Prepare budgets for approval, including those ...</td>\n",
|
||||
" <td>Chief Executives</td>\n",
|
||||
" <td>Determine and formulate policies and provide o...</td>\n",
|
||||
" <td>5.92</td>\n",
|
||||
" <td>15.98</td>\n",
|
||||
" <td>29.68</td>\n",
|
||||
" <td>21.18</td>\n",
|
||||
" <td>19.71</td>\n",
|
||||
" <td>4.91</td>\n",
|
||||
" <td>2.63</td>\n",
|
||||
" <td>4.52</td>\n",
|
||||
" <td>74.44</td>\n",
|
||||
" <td>remote</td>\n",
|
||||
" <td>15.50</td>\n",
|
||||
" <td>38.21</td>\n",
|
||||
" <td>32.73</td>\n",
|
||||
" <td>5.15</td>\n",
|
||||
" <td>5.25</td>\n",
|
||||
" <td>0.19</td>\n",
|
||||
" <td>2.98</td>\n",
|
||||
" <td>4.30</td>\n",
|
||||
" <td>93.41</td>\n",
|
||||
" <td>11-1011</td>\n",
|
||||
" <td>211230.0</td>\n",
|
||||
" <td>124.47</td>\n",
|
||||
|
@ -300,20 +218,19 @@
|
|||
" <tr>\n",
|
||||
" <th>3</th>\n",
|
||||
" <td>11-1011.00</td>\n",
|
||||
" <td>8823</td>\n",
|
||||
" <td>Direct or coordinate an organization's financi...</td>\n",
|
||||
" <td>8826</td>\n",
|
||||
" <td>Direct, plan, or implement policies, objective...</td>\n",
|
||||
" <td>Chief Executives</td>\n",
|
||||
" <td>Determine and formulate policies and provide o...</td>\n",
|
||||
" <td>5.92</td>\n",
|
||||
" <td>15.98</td>\n",
|
||||
" <td>29.68</td>\n",
|
||||
" <td>21.18</td>\n",
|
||||
" <td>19.71</td>\n",
|
||||
" <td>4.91</td>\n",
|
||||
" <td>2.63</td>\n",
|
||||
" <td>4.52</td>\n",
|
||||
" <td>74.44</td>\n",
|
||||
" <td>remote</td>\n",
|
||||
" <td>3.03</td>\n",
|
||||
" <td>17.33</td>\n",
|
||||
" <td>20.30</td>\n",
|
||||
" <td>18.10</td>\n",
|
||||
" <td>33.16</td>\n",
|
||||
" <td>2.01</td>\n",
|
||||
" <td>6.07</td>\n",
|
||||
" <td>4.24</td>\n",
|
||||
" <td>97.79</td>\n",
|
||||
" <td>11-1011</td>\n",
|
||||
" <td>211230.0</td>\n",
|
||||
" <td>124.47</td>\n",
|
||||
|
@ -322,20 +239,19 @@
|
|||
" <tr>\n",
|
||||
" <th>4</th>\n",
|
||||
" <td>11-1011.00</td>\n",
|
||||
" <td>8823</td>\n",
|
||||
" <td>Direct or coordinate an organization's financi...</td>\n",
|
||||
" <td>8834</td>\n",
|
||||
" <td>Prepare or present reports concerning activiti...</td>\n",
|
||||
" <td>Chief Executives</td>\n",
|
||||
" <td>Determine and formulate policies and provide o...</td>\n",
|
||||
" <td>5.92</td>\n",
|
||||
" <td>15.98</td>\n",
|
||||
" <td>29.68</td>\n",
|
||||
" <td>21.18</td>\n",
|
||||
" <td>19.71</td>\n",
|
||||
" <td>4.91</td>\n",
|
||||
" <td>2.63</td>\n",
|
||||
" <td>4.52</td>\n",
|
||||
" <td>74.44</td>\n",
|
||||
" <td>remote</td>\n",
|
||||
" <td>1.98</td>\n",
|
||||
" <td>14.06</td>\n",
|
||||
" <td>42.60</td>\n",
|
||||
" <td>21.24</td>\n",
|
||||
" <td>13.18</td>\n",
|
||||
" <td>6.24</td>\n",
|
||||
" <td>0.70</td>\n",
|
||||
" <td>4.17</td>\n",
|
||||
" <td>92.92</td>\n",
|
||||
" <td>11-1011</td>\n",
|
||||
" <td>211230.0</td>\n",
|
||||
" <td>124.47</td>\n",
|
||||
|
@ -361,10 +277,9 @@
|
|||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>127653</th>\n",
|
||||
" <th>17634</th>\n",
|
||||
" <td>53-7121.00</td>\n",
|
||||
" <td>12807</td>\n",
|
||||
" <td>Unload cars containing liquids by connecting h...</td>\n",
|
||||
|
@ -379,14 +294,13 @@
|
|||
" <td>8.34</td>\n",
|
||||
" <td>4.08</td>\n",
|
||||
" <td>64.04</td>\n",
|
||||
" <td>remote</td>\n",
|
||||
" <td>53-7121</td>\n",
|
||||
" <td>11400.0</td>\n",
|
||||
" <td>29.1</td>\n",
|
||||
" <td>60530</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>127654</th>\n",
|
||||
" <th>17635</th>\n",
|
||||
" <td>53-7121.00</td>\n",
|
||||
" <td>12804</td>\n",
|
||||
" <td>Clean interiors of tank cars or tank trucks, u...</td>\n",
|
||||
|
@ -401,14 +315,13 @@
|
|||
" <td>0.00</td>\n",
|
||||
" <td>4.02</td>\n",
|
||||
" <td>44.33</td>\n",
|
||||
" <td>remote</td>\n",
|
||||
" <td>53-7121</td>\n",
|
||||
" <td>11400.0</td>\n",
|
||||
" <td>29.1</td>\n",
|
||||
" <td>60530</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>127655</th>\n",
|
||||
" <th>17636</th>\n",
|
||||
" <td>53-7121.00</td>\n",
|
||||
" <td>12803</td>\n",
|
||||
" <td>Lower gauge rods into tanks or read meters to ...</td>\n",
|
||||
|
@ -423,14 +336,13 @@
|
|||
" <td>10.55</td>\n",
|
||||
" <td>3.88</td>\n",
|
||||
" <td>65.00</td>\n",
|
||||
" <td>remote</td>\n",
|
||||
" <td>53-7121</td>\n",
|
||||
" <td>11400.0</td>\n",
|
||||
" <td>29.1</td>\n",
|
||||
" <td>60530</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>127656</th>\n",
|
||||
" <th>17637</th>\n",
|
||||
" <td>53-7121.00</td>\n",
|
||||
" <td>12805</td>\n",
|
||||
" <td>Operate conveyors and equipment to transfer gr...</td>\n",
|
||||
|
@ -445,14 +357,13 @@
|
|||
" <td>15.05</td>\n",
|
||||
" <td>3.87</td>\n",
|
||||
" <td>47.90</td>\n",
|
||||
" <td>remote</td>\n",
|
||||
" <td>53-7121</td>\n",
|
||||
" <td>11400.0</td>\n",
|
||||
" <td>29.1</td>\n",
|
||||
" <td>60530</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>127657</th>\n",
|
||||
" <th>17638</th>\n",
|
||||
" <td>53-7121.00</td>\n",
|
||||
" <td>12810</td>\n",
|
||||
" <td>Perform general warehouse activities, such as ...</td>\n",
|
||||
|
@ -467,7 +378,6 @@
|
|||
" <td>11.78</td>\n",
|
||||
" <td>3.53</td>\n",
|
||||
" <td>47.84</td>\n",
|
||||
" <td>remote</td>\n",
|
||||
" <td>53-7121</td>\n",
|
||||
" <td>11400.0</td>\n",
|
||||
" <td>29.1</td>\n",
|
||||
|
@ -475,109 +385,186 @@
|
|||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"<p>127658 rows × 19 columns</p>\n",
|
||||
"<p>17639 rows × 18 columns</p>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" onetsoc_code task_id \\\n",
|
||||
"0 11-1011.00 8823 \n",
|
||||
"1 11-1011.00 8823 \n",
|
||||
"2 11-1011.00 8823 \n",
|
||||
"3 11-1011.00 8823 \n",
|
||||
"4 11-1011.00 8823 \n",
|
||||
"... ... ... \n",
|
||||
"127653 53-7121.00 12807 \n",
|
||||
"127654 53-7121.00 12804 \n",
|
||||
"127655 53-7121.00 12803 \n",
|
||||
"127656 53-7121.00 12805 \n",
|
||||
"127657 53-7121.00 12810 \n",
|
||||
" onetsoc_code task_id \\\n",
|
||||
"0 11-1011.00 8823 \n",
|
||||
"1 11-1011.00 8824 \n",
|
||||
"2 11-1011.00 8827 \n",
|
||||
"3 11-1011.00 8826 \n",
|
||||
"4 11-1011.00 8834 \n",
|
||||
"... ... ... \n",
|
||||
"17634 53-7121.00 12807 \n",
|
||||
"17635 53-7121.00 12804 \n",
|
||||
"17636 53-7121.00 12803 \n",
|
||||
"17637 53-7121.00 12805 \n",
|
||||
"17638 53-7121.00 12810 \n",
|
||||
"\n",
|
||||
" task \\\n",
|
||||
"0 Direct or coordinate an organization's financi... \n",
|
||||
"1 Direct or coordinate an organization's financi... \n",
|
||||
"2 Direct or coordinate an organization's financi... \n",
|
||||
"3 Direct or coordinate an organization's financi... \n",
|
||||
"4 Direct or coordinate an organization's financi... \n",
|
||||
"... ... \n",
|
||||
"127653 Unload cars containing liquids by connecting h... \n",
|
||||
"127654 Clean interiors of tank cars or tank trucks, u... \n",
|
||||
"127655 Lower gauge rods into tanks or read meters to ... \n",
|
||||
"127656 Operate conveyors and equipment to transfer gr... \n",
|
||||
"127657 Perform general warehouse activities, such as ... \n",
|
||||
" task \\\n",
|
||||
"0 Direct or coordinate an organization's financi... \n",
|
||||
"1 Confer with board members, organization offici... \n",
|
||||
"2 Prepare budgets for approval, including those ... \n",
|
||||
"3 Direct, plan, or implement policies, objective... \n",
|
||||
"4 Prepare or present reports concerning activiti... \n",
|
||||
"... ... \n",
|
||||
"17634 Unload cars containing liquids by connecting h... \n",
|
||||
"17635 Clean interiors of tank cars or tank trucks, u... \n",
|
||||
"17636 Lower gauge rods into tanks or read meters to ... \n",
|
||||
"17637 Operate conveyors and equipment to transfer gr... \n",
|
||||
"17638 Perform general warehouse activities, such as ... \n",
|
||||
"\n",
|
||||
" occupation_title \\\n",
|
||||
"0 Chief Executives \n",
|
||||
"1 Chief Executives \n",
|
||||
"2 Chief Executives \n",
|
||||
"3 Chief Executives \n",
|
||||
"4 Chief Executives \n",
|
||||
"... ... \n",
|
||||
"127653 Tank Car, Truck, and Ship Loaders \n",
|
||||
"127654 Tank Car, Truck, and Ship Loaders \n",
|
||||
"127655 Tank Car, Truck, and Ship Loaders \n",
|
||||
"127656 Tank Car, Truck, and Ship Loaders \n",
|
||||
"127657 Tank Car, Truck, and Ship Loaders \n",
|
||||
" occupation_title \\\n",
|
||||
"0 Chief Executives \n",
|
||||
"1 Chief Executives \n",
|
||||
"2 Chief Executives \n",
|
||||
"3 Chief Executives \n",
|
||||
"4 Chief Executives \n",
|
||||
"... ... \n",
|
||||
"17634 Tank Car, Truck, and Ship Loaders \n",
|
||||
"17635 Tank Car, Truck, and Ship Loaders \n",
|
||||
"17636 Tank Car, Truck, and Ship Loaders \n",
|
||||
"17637 Tank Car, Truck, and Ship Loaders \n",
|
||||
"17638 Tank Car, Truck, and Ship Loaders \n",
|
||||
"\n",
|
||||
" occupation_description Yearly or less \\\n",
|
||||
"0 Determine and formulate policies and provide o... 5.92 \n",
|
||||
"1 Determine and formulate policies and provide o... 5.92 \n",
|
||||
"2 Determine and formulate policies and provide o... 5.92 \n",
|
||||
"3 Determine and formulate policies and provide o... 5.92 \n",
|
||||
"4 Determine and formulate policies and provide o... 5.92 \n",
|
||||
"... ... ... \n",
|
||||
"127653 Load and unload chemicals and bulk solids, suc... 6.05 \n",
|
||||
"127654 Load and unload chemicals and bulk solids, suc... 1.47 \n",
|
||||
"127655 Load and unload chemicals and bulk solids, suc... 4.52 \n",
|
||||
"127656 Load and unload chemicals and bulk solids, suc... 6.97 \n",
|
||||
"127657 Load and unload chemicals and bulk solids, suc... 5.91 \n",
|
||||
" occupation_description \\\n",
|
||||
"0 Determine and formulate policies and provide o... \n",
|
||||
"1 Determine and formulate policies and provide o... \n",
|
||||
"2 Determine and formulate policies and provide o... \n",
|
||||
"3 Determine and formulate policies and provide o... \n",
|
||||
"4 Determine and formulate policies and provide o... \n",
|
||||
"... ... \n",
|
||||
"17634 Load and unload chemicals and bulk solids, suc... \n",
|
||||
"17635 Load and unload chemicals and bulk solids, suc... \n",
|
||||
"17636 Load and unload chemicals and bulk solids, suc... \n",
|
||||
"17637 Load and unload chemicals and bulk solids, suc... \n",
|
||||
"17638 Load and unload chemicals and bulk solids, suc... \n",
|
||||
"\n",
|
||||
" More than yearly More than monthly More than weekly Daily \\\n",
|
||||
"0 15.98 29.68 21.18 19.71 \n",
|
||||
"1 15.98 29.68 21.18 19.71 \n",
|
||||
"2 15.98 29.68 21.18 19.71 \n",
|
||||
"3 15.98 29.68 21.18 19.71 \n",
|
||||
"4 15.98 29.68 21.18 19.71 \n",
|
||||
"... ... ... ... ... \n",
|
||||
"127653 29.21 6.88 13.95 27.65 \n",
|
||||
"127654 6.33 21.70 25.69 32.35 \n",
|
||||
"127655 1.76 4.65 17.81 37.42 \n",
|
||||
"127656 12.00 2.52 5.90 35.48 \n",
|
||||
"127657 10.85 6.46 14.46 34.14 \n",
|
||||
" frequency_category_1 frequency_category_2 frequency_category_3 \\\n",
|
||||
"0 5.92 15.98 29.68 \n",
|
||||
"1 1.42 14.44 27.31 \n",
|
||||
"2 15.50 38.21 32.73 \n",
|
||||
"3 3.03 17.33 20.30 \n",
|
||||
"4 1.98 14.06 42.60 \n",
|
||||
"... ... ... ... \n",
|
||||
"17634 6.05 29.21 6.88 \n",
|
||||
"17635 1.47 6.33 21.70 \n",
|
||||
"17636 4.52 1.76 4.65 \n",
|
||||
"17637 6.97 12.00 2.52 \n",
|
||||
"17638 5.91 10.85 6.46 \n",
|
||||
"\n",
|
||||
" Several times daily Hourly or more importance_average \\\n",
|
||||
"0 4.91 2.63 4.52 \n",
|
||||
"1 4.91 2.63 4.52 \n",
|
||||
"2 4.91 2.63 4.52 \n",
|
||||
"3 4.91 2.63 4.52 \n",
|
||||
"4 4.91 2.63 4.52 \n",
|
||||
"... ... ... ... \n",
|
||||
"127653 7.93 8.34 4.08 \n",
|
||||
"127654 12.47 0.00 4.02 \n",
|
||||
"127655 23.31 10.55 3.88 \n",
|
||||
"127656 22.08 15.05 3.87 \n",
|
||||
"127657 16.39 11.78 3.53 \n",
|
||||
" frequency_category_4 frequency_category_5 frequency_category_6 \\\n",
|
||||
"0 21.18 19.71 4.91 \n",
|
||||
"1 25.52 26.88 2.52 \n",
|
||||
"2 5.15 5.25 0.19 \n",
|
||||
"3 18.10 33.16 2.01 \n",
|
||||
"4 21.24 13.18 6.24 \n",
|
||||
"... ... ... ... \n",
|
||||
"17634 13.95 27.65 7.93 \n",
|
||||
"17635 25.69 32.35 12.47 \n",
|
||||
"17636 17.81 37.42 23.31 \n",
|
||||
"17637 5.90 35.48 22.08 \n",
|
||||
"17638 14.46 34.14 16.39 \n",
|
||||
"\n",
|
||||
" relevance_average remote OCC_CODE TOT_EMP H_MEAN A_MEAN \n",
|
||||
"0 74.44 remote 11-1011 211230.0 124.47 258900 \n",
|
||||
"1 74.44 remote 11-1011 211230.0 124.47 258900 \n",
|
||||
"2 74.44 remote 11-1011 211230.0 124.47 258900 \n",
|
||||
"3 74.44 remote 11-1011 211230.0 124.47 258900 \n",
|
||||
"4 74.44 remote 11-1011 211230.0 124.47 258900 \n",
|
||||
"... ... ... ... ... ... ... \n",
|
||||
"127653 64.04 remote 53-7121 11400.0 29.1 60530 \n",
|
||||
"127654 44.33 remote 53-7121 11400.0 29.1 60530 \n",
|
||||
"127655 65.00 remote 53-7121 11400.0 29.1 60530 \n",
|
||||
"127656 47.90 remote 53-7121 11400.0 29.1 60530 \n",
|
||||
"127657 47.84 remote 53-7121 11400.0 29.1 60530 \n",
|
||||
" frequency_category_7 importance_average relevance_average OCC_CODE \\\n",
|
||||
"0 2.63 4.52 74.44 11-1011 \n",
|
||||
"1 1.90 4.32 81.71 11-1011 \n",
|
||||
"2 2.98 4.30 93.41 11-1011 \n",
|
||||
"3 6.07 4.24 97.79 11-1011 \n",
|
||||
"4 0.70 4.17 92.92 11-1011 \n",
|
||||
"... ... ... ... ... \n",
|
||||
"17634 8.34 4.08 64.04 53-7121 \n",
|
||||
"17635 0.00 4.02 44.33 53-7121 \n",
|
||||
"17636 10.55 3.88 65.00 53-7121 \n",
|
||||
"17637 15.05 3.87 47.90 53-7121 \n",
|
||||
"17638 11.78 3.53 47.84 53-7121 \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": {},
|
||||
"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": [
|
||||
"# Cross-reference woth BLS OEWS\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 = [
|
||||
"dotenv>=0.9.9",
|
||||
"jupyter>=1.1.1",
|
||||
"litellm==1.67.0",
|
||||
"notebook>=7.4.1",
|
||||
"openai>=1.76.0",
|
||||
"openpyxl>=3.1.5",
|
||||
"pandas>=2.2.3",
|
||||
"requests>=2.32.3",
|
||||
"tenacity>=9.1.2",
|
||||
"tqdm>=4.67.1",
|
||||
]
|
||||
|
||||
|
|
399
uv.lock
generated
399
uv.lock
generated
|
@ -2,6 +2,60 @@ version = 1
|
|||
revision = 2
|
||||
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]]
|
||||
name = "annotated-types"
|
||||
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" },
|
||||
]
|
||||
|
||||
[[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]]
|
||||
name = "colorama"
|
||||
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" },
|
||||
]
|
||||
|
||||
[[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]]
|
||||
name = "fqdn"
|
||||
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" },
|
||||
]
|
||||
|
||||
[[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]]
|
||||
name = "h11"
|
||||
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" },
|
||||
]
|
||||
|
||||
[[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]]
|
||||
name = "idna"
|
||||
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" },
|
||||
]
|
||||
|
||||
[[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]]
|
||||
name = "ipykernel"
|
||||
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" },
|
||||
]
|
||||
|
||||
[[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]]
|
||||
name = "markupsafe"
|
||||
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" },
|
||||
]
|
||||
|
||||
[[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]]
|
||||
name = "nbclient"
|
||||
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" },
|
||||
]
|
||||
|
||||
[[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]]
|
||||
name = "psutil"
|
||||
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" },
|
||||
]
|
||||
|
||||
[[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]]
|
||||
name = "requests"
|
||||
version = "2.32.3"
|
||||
|
@ -1381,11 +1667,13 @@ source = { virtual = "." }
|
|||
dependencies = [
|
||||
{ name = "dotenv" },
|
||||
{ name = "jupyter" },
|
||||
{ name = "litellm" },
|
||||
{ name = "notebook" },
|
||||
{ name = "openai" },
|
||||
{ name = "openpyxl" },
|
||||
{ name = "pandas" },
|
||||
{ name = "requests" },
|
||||
{ name = "tenacity" },
|
||||
{ name = "tqdm" },
|
||||
]
|
||||
|
||||
|
@ -1393,11 +1681,13 @@ dependencies = [
|
|||
requires-dist = [
|
||||
{ name = "dotenv", specifier = ">=0.9.9" },
|
||||
{ name = "jupyter", specifier = ">=1.1.1" },
|
||||
{ name = "litellm", specifier = "==1.67.0" },
|
||||
{ name = "notebook", specifier = ">=7.4.1" },
|
||||
{ name = "openai", specifier = ">=1.76.0" },
|
||||
{ name = "openpyxl", specifier = ">=3.1.5" },
|
||||
{ name = "pandas", specifier = ">=2.2.3" },
|
||||
{ name = "requests", specifier = ">=2.32.3" },
|
||||
{ name = "tenacity", specifier = ">=9.1.2" },
|
||||
{ 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" },
|
||||
]
|
||||
|
||||
[[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]]
|
||||
name = "terminado"
|
||||
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" },
|
||||
]
|
||||
|
||||
[[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]]
|
||||
name = "tinycss2"
|
||||
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" },
|
||||
]
|
||||
|
||||
[[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]]
|
||||
name = "tornado"
|
||||
version = "6.4.2"
|
||||
|
@ -1584,3 +1926,60 @@ sdist = { url = "https://files.pythonhosted.org/packages/41/53/2e0253c5efd69c965
|
|||
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" },
|
||||
]
|
||||
|
||||
[[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