bogeumkim commited on
Commit
174c3d3
·
1 Parent(s): 6f28304

Modify Gradio UI

Browse files
Files changed (9) hide show
  1. app.py +76 -44
  2. modal/config.py +20 -0
  3. modal/engine.py +103 -0
  4. modal/requirements.txt +0 -0
  5. modal/server.py +103 -0
  6. modal_app.py +0 -12
  7. pyproject.toml +1 -0
  8. requirements.txt +12 -1
  9. uv.lock +123 -0
app.py CHANGED
@@ -1,53 +1,85 @@
1
- import re
2
- import requests
3
- import gradio as gr
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
- from markdownify import markdownify
6
- from requests.exceptions import RequestException
 
 
 
 
 
 
 
 
7
 
8
- from utils.preprocessor import Preprocessor
 
9
 
10
- def visit_webpage(url, max_output_length=40000):
11
- """
12
- Fetch the webpage, convert to markdown, and use Preprocessor methods.
13
- """
 
 
14
  try:
15
- response = requests.get(url, timeout=20)
16
- response.raise_for_status()
17
- markdown_content = markdownify(response.text).strip()
18
- markdown_content = re.sub(r"\n{3,}", "\n\n", markdown_content)
19
- if len(markdown_content) > max_output_length:
20
- markdown_content = (
21
- markdown_content[: max_output_length // 2]
22
- + f"\n..._This content has been truncated to stay below {max_output_length} characters_...\n"
23
- + markdown_content[-max_output_length // 2 :]
24
- )
25
- # Use Preprocessor class methods
26
- section = Preprocessor.extract_section(markdown_content)
27
- dir_paths, files = Preprocessor.extract_dirs_from_text(section)
28
- # Format the result
29
- result = (
30
- f"paths: {dir_paths}\n\n"
31
- f"files: {files}"
32
  )
33
- return result
34
- except requests.exceptions.Timeout:
35
- return "The request timed out. Please try again later or check the URL."
36
- except RequestException as e:
37
- return f"Error fetching the webpage: {str(e)}"
38
  except Exception as e:
39
- return f"An unexpected error occurred: {str(e)}"
40
-
41
- demo = gr.Interface(
42
- fn=visit_webpage,
43
- inputs=[
44
- gr.Textbox(label="Website URL"),
45
- gr.Textbox(label="Files or folders you want to highlight in the README (comma or newline separated)")
46
- ],
47
- outputs=gr.Textbox(label="Extracted Section, Directory Paths, and File Paths", show_copy_button=True),
48
- title="Webpage Section and Path Extractor",
49
- description="Enter a website URL. This tool fetches the page, extracts a markdown section, and lists directory paths and files found in that section. You can also specify files or folders you want to highlight in the generated README."
50
- )
51
 
52
  if __name__ == "__main__":
53
  demo.launch()
 
1
+ # import re
2
+ # import requests
3
+ # import gradio as gr
4
+
5
+ # from markdownify import markdownify
6
+ # from requests.exceptions import RequestException
7
+
8
+ # from utils.preprocessor import Preprocessor
9
+
10
+ # # https://modal.com/docs/guide/webhook-urls
11
+ # MODAL_ENDPOINT = "https://auto-readme-agent--text-to-speech-gradio-app.modal.run"
12
+
13
+ # def visit_webpage(url, max_output_length=40000):
14
+ # """
15
+ # Fetch the webpage, convert to markdown, and use Preprocessor methods.
16
+ # """
17
+ # try:
18
+ # response = requests.get(url, timeout=20)
19
+ # response.raise_for_status()
20
+ # markdown_content = markdownify(response.text).strip()
21
+ # markdown_content = re.sub(r"\n{3,}", "\n\n", markdown_content)
22
+ # # if len(markdown_content) > max_output_length:
23
+ # # markdown_content = (
24
+ # # markdown_content[: max_output_length // 2]
25
+ # # + f"\n..._This content has been truncated to stay below {max_output_length} characters_...\n"
26
+ # # + markdown_content[-max_output_length // 2 :]
27
+ # # )
28
+ # # Use Preprocessor class methods
29
+ # section = Preprocessor.extract_section(markdown_content)
30
+ # dir_paths, files = Preprocessor.extract_dirs_from_text(section)
31
+ # # Format the result
32
+ # result = (
33
+ # f"paths: {dir_paths}\n\n"
34
+ # f"files: {files}"
35
+ # )
36
+ # return result
37
+ # except requests.exceptions.Timeout:
38
+ # return "The request timed out. Please try again later or check the URL."
39
+ # except RequestException as e:
40
+ # return f"Error fetching the webpage: {str(e)}"
41
+ # except Exception as e:
42
+ # return f"An unexpected error occurred: {str(e)}"
43
 
44
+ # demo = gr.Interface(
45
+ # fn=visit_webpage,
46
+ # inputs=[
47
+ # gr.Textbox(label="Website URL"),
48
+ # gr.Textbox(label="Files or folders you want to highlight in the README (comma or newline separated)")
49
+ # ],
50
+ # outputs=gr.Textbox(label="Extracted Section, Directory Paths, and File Paths", show_copy_button=True),
51
+ # title="Webpage Section and Path Extractor",
52
+ # description="Enter a website URL. This tool fetches the page, extracts a markdown section, and lists directory paths and files found in that section. You can also specify files or folders you want to highlight in the generated README."
53
+ # )
54
 
55
+ # if __name__ == "__main__":
56
+ # demo.launch(debug=True)
57
 
58
+ import gradio as gr
59
+ import requests
60
+
61
+ MODAL_API_URL = "https://agents-mcp-hackathon--smolagents-modal-agent-readme-agen-eb6ccb.modal.run" # Replace with your deployed Modal endpoint
62
+
63
+ def generate_readme_from_github(repo_url):
64
  try:
65
+ response = requests.post(
66
+ MODAL_API_URL,
67
+ json={"repo_url": repo_url},
68
+ timeout=600,
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  )
70
+ if response.status_code == 200:
71
+ return response.json().get("readme", "No README generated.")
72
+ else:
73
+ return f"Error: {response.status_code}\n{response.text}"
 
74
  except Exception as e:
75
+ return f"Exception: {str(e)}"
76
+
77
+ with gr.Blocks() as demo:
78
+ gr.Markdown("# 📝 GitHub Repo → README.md Generator\nPaste a public GitHub repo link to generate a draft README.md using AI.")
79
+ repo_input = gr.Textbox(label="GitHub Repository URL", placeholder="https://github.com/owner/repo")
80
+ output = gr.Textbox(label="Generated README.md", lines=20)
81
+ btn = gr.Button("Generate README")
82
+ btn.click(generate_readme_from_github, inputs=repo_input, outputs=output)
 
 
 
 
83
 
84
  if __name__ == "__main__":
85
  demo.launch()
modal/config.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MODEL_DIR = "/model"
2
+ BASE_MODEL="mistralai/Mistral-7B-Instruct-v0.1"
3
+
4
+
5
+ # Name the stub (it should all be in lower case)
6
+ STUB_NAME=f"{BASE_MODEL.lower()}-deployement"
7
+
8
+ ### Server level default configs
9
+ # Keep warm: is the warm pool size or the minimum number of containers that will always be up for your serverless function to get executed (Modal will scale up more containers from there based on need or demand)
10
+
11
+ KEEP_WARM = 1
12
+
13
+ # num of concurrent requests: is the number of concurrent requests a container should handle
14
+ NUM_CONCURRENT_REQUESTS = 10
15
+
16
+ # timeout: This is the server timeout after which it would be shutdown the server.
17
+ TIMEOUT = 600
18
+
19
+ # Number of GPUs to use
20
+ GPU_COUNT = 1
modal/engine.py ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import asyncio
3
+
4
+ from queue import Empty
5
+ from typing import List, Union, List
6
+
7
+ # Import modal's required imports
8
+ from modal import Image, Stub, gpu, method, enter, exit
9
+
10
+ # Import the constants defined in constants.py
11
+ from config import (
12
+ MODEL_DIR,
13
+ BASE_MODEL,
14
+ STUB_NAME,
15
+ NUM_CONCURRENT_REQUESTS,
16
+ TIMEOUT,
17
+ GPU_COUNT
18
+ )
19
+
20
+ # Define our GPU Config
21
+
22
+ if BASE_MODEL == "mistralai/Mistral-7B-Instruct-v0.1":
23
+ GPU_CONFIG = gpu.A100(count=GPU_COUNT, memory=80)
24
+ else:
25
+ GPU_CONFIG = gpu.Any(count=GPU_COUNT)
26
+
27
+ stub = Stub(name=STUB_NAME)
28
+
29
+ def download_model_to_folder():
30
+ from transformers.utils import move_cache
31
+ from huggingface_hub import snapshot_download
32
+
33
+ os.makedirs(MODEL_DIR, exist_ok=True)
34
+
35
+ snapshot_download(
36
+ BASE_MODEL,
37
+ local_dir=MODEL_DIR,
38
+ ignore_patterns=["*.pt"], # Using safetensors
39
+ )
40
+
41
+ move_cache()
42
+
43
+ HF_DOCKER_IMAGE = (
44
+ Image.from_registry("nvidia/cuda:12.1.0-base-ubuntu22.04", add_python="3.10").pip_install_from_requirements("./requirements.txt")
45
+ .env({"HF_HUB_ENABLE_HF_TRANSFER": "1"})
46
+ .run_function(download_model_to_folder)
47
+ )
48
+
49
+ @stub.cls(
50
+ gpu=GPU_CONFIG,
51
+ timeout=TIMEOUT,
52
+ container_idle_timeout=TIMEOUT,
53
+ allow_concurrent_inputs=NUM_CONCURRENT_REQUESTS,
54
+ image=HF_DOCKER_IMAGE,
55
+ )
56
+ class HFEngine:
57
+ model_name_or_path: str = MODEL_DIR
58
+ device: str = "cuda"
59
+
60
+ @enter()
61
+ def start_engine(self):
62
+ from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
63
+
64
+ self.model = AutoModelForCausalLM.from_pretrained(self.model_name_or_path, trust_remote_code=True).to(self.device)
65
+ self.tokenizer = AutoTokenizer.from_pretrained(self.model_name_or_path, trust_remote_code=True)
66
+ self.streamer = TextIteratorStreamer(self.tokenizer)
67
+ return self
68
+
69
+ @exit()
70
+ def terminate_engine(self):
71
+ import gc
72
+ import torch
73
+
74
+ del self.model
75
+ torch.cuda.synchronize()
76
+ gc.collect()
77
+
78
+ @method()
79
+ async def stream(self, chat_input: Union[str, List[dict]], generation_kwargs: dict):
80
+ from threading import Thread
81
+
82
+ if isinstance(chat_input, str):
83
+ chat_input = [{"role": "user", "content": chat_input}]
84
+ input_ids = self.tokenizer.apply_chat_template(
85
+ conversation=chat_input, tokenize=True, return_tensors="pt"
86
+ ).to(self.device)
87
+
88
+ gen_kwargs = dict(
89
+ input_ids=input_ids,
90
+ streamer=self.streamer,
91
+ pad_token_id=self.tokenizer.eos_token_id,
92
+ **generation_kwargs
93
+ )
94
+
95
+ thread = Thread(target=self.model.generate, kwargs=gen_kwargs)
96
+ thread.start()
97
+
98
+ for next_token in self.streamer:
99
+ try:
100
+ if next_token is not None:
101
+ yield next_token
102
+ except Empty:
103
+ await asyncio.sleep(0.001)
modal/requirements.txt ADDED
File without changes
modal/server.py ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import modal
2
+
3
+ image = (
4
+ modal.Image.debian_slim(python_version="3.12")
5
+ .pip_install(
6
+ "smolagents[toolkit]",
7
+ "huggingface_hub",
8
+ "transformers",
9
+ "duckduckgo-search",
10
+ "fastapi",
11
+ "uvicorn",
12
+ "PyGithub",
13
+ "gitpython"
14
+ )
15
+ )
16
+
17
+ app = modal.App("smolagents-modal-agent-readme")
18
+
19
+ HF_SECRET_NAME = "hf-secret"
20
+ MODEL_ID = "mistralai/Mistral-7B-Instruct-v0.2"
21
+
22
+ @app.function(
23
+ image=image,
24
+ gpu="A10G",
25
+ secrets=[modal.Secret.from_name(HF_SECRET_NAME)],
26
+ timeout=600,
27
+ )
28
+ @modal.fastapi_endpoint()
29
+ def agent_server():
30
+ import os
31
+ from fastapi import FastAPI, HTTPException, Request
32
+ import uvicorn
33
+ from huggingface_hub import login as hf_login
34
+ from smolagents import CodeAgent, WebSearchTool, InferenceClientModel
35
+ import tempfile
36
+ import shutil
37
+ import subprocess
38
+
39
+ hf_token = os.environ.get("HF_TOKEN")
40
+ hf_login(token=hf_token)
41
+
42
+ model = InferenceClientModel(
43
+ model_id=MODEL_ID,
44
+ provider="huggingface",
45
+ token=hf_token,
46
+ )
47
+
48
+ agent = CodeAgent(
49
+ tools=[WebSearchTool()],
50
+ model=model,
51
+ stream_outputs=True,
52
+ )
53
+
54
+ app = FastAPI()
55
+
56
+ @app.post("/generate_readme")
57
+ async def generate_readme(request: Request):
58
+ try:
59
+ data = await request.json()
60
+ repo_url = data.get("repo_url")
61
+ if not repo_url:
62
+ raise HTTPException(status_code=400, detail="Missing 'repo_url' in request body")
63
+
64
+ temp_dir = tempfile.mkdtemp()
65
+ try:
66
+ subprocess.run(
67
+ ["git", "clone", "--depth", "1", "--branch", "main", repo_url, temp_dir],
68
+ check=True
69
+ )
70
+
71
+ repo_summary = []
72
+ for root, dirs, files in os.walk(temp_dir):
73
+ depth = root[len(temp_dir):].count(os.sep)
74
+ if depth > 2:
75
+ continue
76
+ rel_root = os.path.relpath(root, temp_dir)
77
+ repo_summary.append(f"Directory: {rel_root}")
78
+ for file in files:
79
+ if file.endswith((".py", ".md", ".txt", ".json", ".yaml", ".yml")):
80
+ file_path = os.path.join(root, file)
81
+ try:
82
+ with open(file_path, "r", encoding="utf-8") as f:
83
+ content = f.read(500)
84
+ except Exception:
85
+ content = "[Could not read file content]"
86
+ repo_summary.append(f"File: {file} Content Preview: {content}")
87
+
88
+ prompt = (
89
+ "You are an AI assistant that drafts a detailed README.md for a GitHub repository. "
90
+ "Based on the following repository structure and code snippets, create a comprehensive README.md content. "
91
+ "Repository summary:\n" + "\n".join(repo_summary)
92
+ )
93
+
94
+ readme_text = agent.run(prompt)
95
+ return {"readme": readme_text}
96
+ finally:
97
+ shutil.rmtree(temp_dir)
98
+
99
+ except Exception as e:
100
+ raise HTTPException(status_code=500, detail=str(e))
101
+
102
+ # Start Uvicorn in blocking mode
103
+ uvicorn.run(app, host="0.0.0.0", port=8000)
modal_app.py DELETED
@@ -1,12 +0,0 @@
1
- import modal
2
-
3
- app = modal.App("auto-readme-agent")
4
-
5
- @app.function()
6
- def square(x):
7
- print("This code is running on a remote worker!")
8
- return x**2
9
-
10
- @app.local_entrypoint()
11
- def main():
12
- print("the square is", square.remote(42))
 
 
 
 
 
 
 
 
 
 
 
 
 
pyproject.toml CHANGED
@@ -9,4 +9,5 @@ dependencies = [
9
  "markdownify>=1.1.0",
10
  "modal>=1.0.3",
11
  "smolagents>=1.17.0",
 
12
  ]
 
9
  "markdownify>=1.1.0",
10
  "modal>=1.0.3",
11
  "smolagents>=1.17.0",
12
+ "transformers>=4.52.4",
13
  ]
requirements.txt CHANGED
@@ -1 +1,12 @@
1
- markdownify
 
 
 
 
 
 
 
 
 
 
 
 
1
+ markdownify
2
+ smolagents[toolkit]
3
+ huggingface_hub
4
+ transformers
5
+ duckduckgo-search
6
+ fastapi
7
+ uvicorn
8
+ PyGithub
9
+ gitpython
10
+ modal
11
+ gradio
12
+ requests
uv.lock CHANGED
@@ -15,6 +15,7 @@ dependencies = [
15
  { name = "markdownify" },
16
  { name = "modal" },
17
  { name = "smolagents" },
 
18
  ]
19
 
20
  [package.metadata]
@@ -23,6 +24,7 @@ requires-dist = [
23
  { name = "markdownify", specifier = ">=1.1.0" },
24
  { name = "modal", specifier = ">=1.0.3" },
25
  { name = "smolagents", specifier = ">=1.17.0" },
 
26
  ]
27
 
28
  [[package]]
@@ -1265,6 +1267,59 @@ wheels = [
1265
  { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 },
1266
  ]
1267
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1268
  [[package]]
1269
  name = "requests"
1270
  version = "2.32.3"
@@ -1330,6 +1385,28 @@ wheels = [
1330
  { url = "https://files.pythonhosted.org/packages/4d/c0/1108ad9f01567f66b3154063605b350b69c3c9366732e09e45f9fd0d1deb/safehttpx-0.1.6-py3-none-any.whl", hash = "sha256:407cff0b410b071623087c63dd2080c3b44dc076888d8c5823c00d1e58cb381c", size = 8692 },
1331
  ]
1332
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1333
  [[package]]
1334
  name = "semantic-version"
1335
  version = "2.10.0"
@@ -1429,6 +1506,31 @@ wheels = [
1429
  { url = "https://files.pythonhosted.org/packages/35/8a/fd0a54e4bc7d09e6296efc7e9712f16e0001e82a13a90acb1e5729d34b39/synchronicity-0.9.13-py3-none-any.whl", hash = "sha256:762bb5f84def464b2c7dbb944d4f19c3336a12ed7046bc5d9646f0b4a3f6a0d5", size = 36974 },
1430
  ]
1431
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1432
  [[package]]
1433
  name = "toml"
1434
  version = "0.10.2"
@@ -1459,6 +1561,27 @@ wheels = [
1459
  { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 },
1460
  ]
1461
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1462
  [[package]]
1463
  name = "typer"
1464
  version = "0.16.0"
 
15
  { name = "markdownify" },
16
  { name = "modal" },
17
  { name = "smolagents" },
18
+ { name = "transformers" },
19
  ]
20
 
21
  [package.metadata]
 
24
  { name = "markdownify", specifier = ">=1.1.0" },
25
  { name = "modal", specifier = ">=1.0.3" },
26
  { name = "smolagents", specifier = ">=1.17.0" },
27
+ { name = "transformers", specifier = ">=4.52.4" },
28
  ]
29
 
30
  [[package]]
 
1267
  { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 },
1268
  ]
1269
 
1270
+ [[package]]
1271
+ name = "regex"
1272
+ version = "2024.11.6"
1273
+ source = { registry = "https://pypi.org/simple" }
1274
+ sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494 }
1275
+ wheels = [
1276
+ { url = "https://files.pythonhosted.org/packages/58/58/7e4d9493a66c88a7da6d205768119f51af0f684fe7be7bac8328e217a52c/regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638", size = 482669 },
1277
+ { url = "https://files.pythonhosted.org/packages/34/4c/8f8e631fcdc2ff978609eaeef1d6994bf2f028b59d9ac67640ed051f1218/regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7", size = 287684 },
1278
+ { url = "https://files.pythonhosted.org/packages/c5/1b/f0e4d13e6adf866ce9b069e191f303a30ab1277e037037a365c3aad5cc9c/regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20", size = 284589 },
1279
+ { url = "https://files.pythonhosted.org/packages/25/4d/ab21047f446693887f25510887e6820b93f791992994f6498b0318904d4a/regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114", size = 792121 },
1280
+ { url = "https://files.pythonhosted.org/packages/45/ee/c867e15cd894985cb32b731d89576c41a4642a57850c162490ea34b78c3b/regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3", size = 831275 },
1281
+ { url = "https://files.pythonhosted.org/packages/b3/12/b0f480726cf1c60f6536fa5e1c95275a77624f3ac8fdccf79e6727499e28/regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f", size = 818257 },
1282
+ { url = "https://files.pythonhosted.org/packages/bf/ce/0d0e61429f603bac433910d99ef1a02ce45a8967ffbe3cbee48599e62d88/regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0", size = 792727 },
1283
+ { url = "https://files.pythonhosted.org/packages/e4/c1/243c83c53d4a419c1556f43777ccb552bccdf79d08fda3980e4e77dd9137/regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55", size = 780667 },
1284
+ { url = "https://files.pythonhosted.org/packages/c5/f4/75eb0dd4ce4b37f04928987f1d22547ddaf6c4bae697623c1b05da67a8aa/regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89", size = 776963 },
1285
+ { url = "https://files.pythonhosted.org/packages/16/5d/95c568574e630e141a69ff8a254c2f188b4398e813c40d49228c9bbd9875/regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d", size = 784700 },
1286
+ { url = "https://files.pythonhosted.org/packages/8e/b5/f8495c7917f15cc6fee1e7f395e324ec3e00ab3c665a7dc9d27562fd5290/regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34", size = 848592 },
1287
+ { url = "https://files.pythonhosted.org/packages/1c/80/6dd7118e8cb212c3c60b191b932dc57db93fb2e36fb9e0e92f72a5909af9/regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d", size = 852929 },
1288
+ { url = "https://files.pythonhosted.org/packages/11/9b/5a05d2040297d2d254baf95eeeb6df83554e5e1df03bc1a6687fc4ba1f66/regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45", size = 781213 },
1289
+ { url = "https://files.pythonhosted.org/packages/26/b7/b14e2440156ab39e0177506c08c18accaf2b8932e39fb092074de733d868/regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9", size = 261734 },
1290
+ { url = "https://files.pythonhosted.org/packages/80/32/763a6cc01d21fb3819227a1cc3f60fd251c13c37c27a73b8ff4315433a8e/regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60", size = 274052 },
1291
+ { url = "https://files.pythonhosted.org/packages/ba/30/9a87ce8336b172cc232a0db89a3af97929d06c11ceaa19d97d84fa90a8f8/regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a", size = 483781 },
1292
+ { url = "https://files.pythonhosted.org/packages/01/e8/00008ad4ff4be8b1844786ba6636035f7ef926db5686e4c0f98093612add/regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9", size = 288455 },
1293
+ { url = "https://files.pythonhosted.org/packages/60/85/cebcc0aff603ea0a201667b203f13ba75d9fc8668fab917ac5b2de3967bc/regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2", size = 284759 },
1294
+ { url = "https://files.pythonhosted.org/packages/94/2b/701a4b0585cb05472a4da28ee28fdfe155f3638f5e1ec92306d924e5faf0/regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4", size = 794976 },
1295
+ { url = "https://files.pythonhosted.org/packages/4b/bf/fa87e563bf5fee75db8915f7352e1887b1249126a1be4813837f5dbec965/regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577", size = 833077 },
1296
+ { url = "https://files.pythonhosted.org/packages/a1/56/7295e6bad94b047f4d0834e4779491b81216583c00c288252ef625c01d23/regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3", size = 823160 },
1297
+ { url = "https://files.pythonhosted.org/packages/fb/13/e3b075031a738c9598c51cfbc4c7879e26729c53aa9cca59211c44235314/regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e", size = 796896 },
1298
+ { url = "https://files.pythonhosted.org/packages/24/56/0b3f1b66d592be6efec23a795b37732682520b47c53da5a32c33ed7d84e3/regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe", size = 783997 },
1299
+ { url = "https://files.pythonhosted.org/packages/f9/a1/eb378dada8b91c0e4c5f08ffb56f25fcae47bf52ad18f9b2f33b83e6d498/regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e", size = 781725 },
1300
+ { url = "https://files.pythonhosted.org/packages/83/f2/033e7dec0cfd6dda93390089864732a3409246ffe8b042e9554afa9bff4e/regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29", size = 789481 },
1301
+ { url = "https://files.pythonhosted.org/packages/83/23/15d4552ea28990a74e7696780c438aadd73a20318c47e527b47a4a5a596d/regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39", size = 852896 },
1302
+ { url = "https://files.pythonhosted.org/packages/e3/39/ed4416bc90deedbfdada2568b2cb0bc1fdb98efe11f5378d9892b2a88f8f/regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51", size = 860138 },
1303
+ { url = "https://files.pythonhosted.org/packages/93/2d/dd56bb76bd8e95bbce684326302f287455b56242a4f9c61f1bc76e28360e/regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad", size = 787692 },
1304
+ { url = "https://files.pythonhosted.org/packages/0b/55/31877a249ab7a5156758246b9c59539abbeba22461b7d8adc9e8475ff73e/regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54", size = 262135 },
1305
+ { url = "https://files.pythonhosted.org/packages/38/ec/ad2d7de49a600cdb8dd78434a1aeffe28b9d6fc42eb36afab4a27ad23384/regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b", size = 273567 },
1306
+ { 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 },
1307
+ { 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 },
1308
+ { 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 },
1309
+ { 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 },
1310
+ { 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 },
1311
+ { 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 },
1312
+ { 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 },
1313
+ { 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 },
1314
+ { 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 },
1315
+ { 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 },
1316
+ { 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 },
1317
+ { 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 },
1318
+ { 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 },
1319
+ { url = "https://files.pythonhosted.org/packages/2b/f1/e40c8373e3480e4f29f2692bd21b3e05f296d3afebc7e5dcf21b9756ca1c/regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", size = 262122 },
1320
+ { url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", size = 273545 },
1321
+ ]
1322
+
1323
  [[package]]
1324
  name = "requests"
1325
  version = "2.32.3"
 
1385
  { url = "https://files.pythonhosted.org/packages/4d/c0/1108ad9f01567f66b3154063605b350b69c3c9366732e09e45f9fd0d1deb/safehttpx-0.1.6-py3-none-any.whl", hash = "sha256:407cff0b410b071623087c63dd2080c3b44dc076888d8c5823c00d1e58cb381c", size = 8692 },
1386
  ]
1387
 
1388
+ [[package]]
1389
+ name = "safetensors"
1390
+ version = "0.5.3"
1391
+ source = { registry = "https://pypi.org/simple" }
1392
+ sdist = { url = "https://files.pythonhosted.org/packages/71/7e/2d5d6ee7b40c0682315367ec7475693d110f512922d582fef1bd4a63adc3/safetensors-0.5.3.tar.gz", hash = "sha256:b6b0d6ecacec39a4fdd99cc19f4576f5219ce858e6fd8dbe7609df0b8dc56965", size = 67210 }
1393
+ wheels = [
1394
+ { url = "https://files.pythonhosted.org/packages/18/ae/88f6c49dbd0cc4da0e08610019a3c78a7d390879a919411a410a1876d03a/safetensors-0.5.3-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bd20eb133db8ed15b40110b7c00c6df51655a2998132193de2f75f72d99c7073", size = 436917 },
1395
+ { url = "https://files.pythonhosted.org/packages/b8/3b/11f1b4a2f5d2ab7da34ecc062b0bc301f2be024d110a6466726bec8c055c/safetensors-0.5.3-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:21d01c14ff6c415c485616b8b0bf961c46b3b343ca59110d38d744e577f9cce7", size = 418419 },
1396
+ { url = "https://files.pythonhosted.org/packages/5d/9a/add3e6fef267658075c5a41573c26d42d80c935cdc992384dfae435feaef/safetensors-0.5.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11bce6164887cd491ca75c2326a113ba934be596e22b28b1742ce27b1d076467", size = 459493 },
1397
+ { url = "https://files.pythonhosted.org/packages/df/5c/bf2cae92222513cc23b3ff85c4a1bb2811a2c3583ac0f8e8d502751de934/safetensors-0.5.3-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4a243be3590bc3301c821da7a18d87224ef35cbd3e5f5727e4e0728b8172411e", size = 472400 },
1398
+ { url = "https://files.pythonhosted.org/packages/58/11/7456afb740bd45782d0f4c8e8e1bb9e572f1bf82899fb6ace58af47b4282/safetensors-0.5.3-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8bd84b12b1670a6f8e50f01e28156422a2bc07fb16fc4e98bded13039d688a0d", size = 522891 },
1399
+ { url = "https://files.pythonhosted.org/packages/57/3d/fe73a9d2ace487e7285f6e157afee2383bd1ddb911b7cb44a55cf812eae3/safetensors-0.5.3-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:391ac8cab7c829452175f871fcaf414aa1e292b5448bd02620f675a7f3e7abb9", size = 537694 },
1400
+ { url = "https://files.pythonhosted.org/packages/a6/f8/dae3421624fcc87a89d42e1898a798bc7ff72c61f38973a65d60df8f124c/safetensors-0.5.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cead1fa41fc54b1e61089fa57452e8834f798cb1dc7a09ba3524f1eb08e0317a", size = 471642 },
1401
+ { url = "https://files.pythonhosted.org/packages/ce/20/1fbe16f9b815f6c5a672f5b760951e20e17e43f67f231428f871909a37f6/safetensors-0.5.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1077f3e94182d72618357b04b5ced540ceb71c8a813d3319f1aba448e68a770d", size = 502241 },
1402
+ { url = "https://files.pythonhosted.org/packages/5f/18/8e108846b506487aa4629fe4116b27db65c3dde922de2c8e0cc1133f3f29/safetensors-0.5.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:799021e78287bac619c7b3f3606730a22da4cda27759ddf55d37c8db7511c74b", size = 638001 },
1403
+ { url = "https://files.pythonhosted.org/packages/82/5a/c116111d8291af6c8c8a8b40628fe833b9db97d8141c2a82359d14d9e078/safetensors-0.5.3-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:df26da01aaac504334644e1b7642fa000bfec820e7cef83aeac4e355e03195ff", size = 734013 },
1404
+ { url = "https://files.pythonhosted.org/packages/7d/ff/41fcc4d3b7de837963622e8610d998710705bbde9a8a17221d85e5d0baad/safetensors-0.5.3-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:32c3ef2d7af8b9f52ff685ed0bc43913cdcde135089ae322ee576de93eae5135", size = 670687 },
1405
+ { url = "https://files.pythonhosted.org/packages/40/ad/2b113098e69c985a3d8fbda4b902778eae4a35b7d5188859b4a63d30c161/safetensors-0.5.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:37f1521be045e56fc2b54c606d4455573e717b2d887c579ee1dbba5f868ece04", size = 643147 },
1406
+ { url = "https://files.pythonhosted.org/packages/0a/0c/95aeb51d4246bd9a3242d3d8349c1112b4ee7611a4b40f0c5c93b05f001d/safetensors-0.5.3-cp38-abi3-win32.whl", hash = "sha256:cfc0ec0846dcf6763b0ed3d1846ff36008c6e7290683b61616c4b040f6a54ace", size = 296677 },
1407
+ { url = "https://files.pythonhosted.org/packages/69/e2/b011c38e5394c4c18fb5500778a55ec43ad6106126e74723ffaee246f56e/safetensors-0.5.3-cp38-abi3-win_amd64.whl", hash = "sha256:836cbbc320b47e80acd40e44c8682db0e8ad7123209f69b093def21ec7cafd11", size = 308878 },
1408
+ ]
1409
+
1410
  [[package]]
1411
  name = "semantic-version"
1412
  version = "2.10.0"
 
1506
  { url = "https://files.pythonhosted.org/packages/35/8a/fd0a54e4bc7d09e6296efc7e9712f16e0001e82a13a90acb1e5729d34b39/synchronicity-0.9.13-py3-none-any.whl", hash = "sha256:762bb5f84def464b2c7dbb944d4f19c3336a12ed7046bc5d9646f0b4a3f6a0d5", size = 36974 },
1507
  ]
1508
 
1509
+ [[package]]
1510
+ name = "tokenizers"
1511
+ version = "0.21.1"
1512
+ source = { registry = "https://pypi.org/simple" }
1513
+ dependencies = [
1514
+ { name = "huggingface-hub" },
1515
+ ]
1516
+ sdist = { url = "https://files.pythonhosted.org/packages/92/76/5ac0c97f1117b91b7eb7323dcd61af80d72f790b4df71249a7850c195f30/tokenizers-0.21.1.tar.gz", hash = "sha256:a1bb04dc5b448985f86ecd4b05407f5a8d97cb2c0532199b2a302a604a0165ab", size = 343256 }
1517
+ wheels = [
1518
+ { 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 },
1519
+ { 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 },
1520
+ { 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 },
1521
+ { 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 },
1522
+ { 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 },
1523
+ { 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 },
1524
+ { 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 },
1525
+ { 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 },
1526
+ { 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 },
1527
+ { 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 },
1528
+ { 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 },
1529
+ { 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 },
1530
+ { url = "https://files.pythonhosted.org/packages/e8/5b/a5d98c89f747455e8b7a9504910c865d5e51da55e825a7ae641fb5ff0a58/tokenizers-0.21.1-cp39-abi3-win32.whl", hash = "sha256:1039a3a5734944e09de1d48761ade94e00d0fa760c0e0551151d4dd851ba63e3", size = 2239506 },
1531
+ { url = "https://files.pythonhosted.org/packages/e6/b6/072a8e053ae600dcc2ac0da81a23548e3b523301a442a6ca900e92ac35be/tokenizers-0.21.1-cp39-abi3-win_amd64.whl", hash = "sha256:0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382", size = 2435481 },
1532
+ ]
1533
+
1534
  [[package]]
1535
  name = "toml"
1536
  version = "0.10.2"
 
1561
  { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 },
1562
  ]
1563
 
1564
+ [[package]]
1565
+ name = "transformers"
1566
+ version = "4.52.4"
1567
+ source = { registry = "https://pypi.org/simple" }
1568
+ dependencies = [
1569
+ { name = "filelock" },
1570
+ { name = "huggingface-hub" },
1571
+ { name = "numpy" },
1572
+ { name = "packaging" },
1573
+ { name = "pyyaml" },
1574
+ { name = "regex" },
1575
+ { name = "requests" },
1576
+ { name = "safetensors" },
1577
+ { name = "tokenizers" },
1578
+ { name = "tqdm" },
1579
+ ]
1580
+ sdist = { url = "https://files.pythonhosted.org/packages/da/a9/275037087f9d846580b02f2d7cae0e0a6955d46f84583d0151d6227bd416/transformers-4.52.4.tar.gz", hash = "sha256:aff3764441c1adc192a08dba49740d3cbbcb72d850586075aed6bd89b98203e6", size = 8945376 }
1581
+ wheels = [
1582
+ { url = "https://files.pythonhosted.org/packages/96/f2/25b27b396af03d5b64e61976b14f7209e2939e9e806c10749b6d277c273e/transformers-4.52.4-py3-none-any.whl", hash = "sha256:203f5c19416d5877e36e88633943761719538a25d9775977a24fe77a1e5adfc7", size = 10460375 },
1583
+ ]
1584
+
1585
  [[package]]
1586
  name = "typer"
1587
  version = "0.16.0"