Metal3d commited on
Commit
52e44f1
·
0 Parent(s):

Good first version

Browse files
Files changed (5) hide show
  1. app.py +159 -0
  2. dataset.py +46 -0
  3. labelizer/__init__.py +74 -0
  4. pdm.lock +1244 -0
  5. pyproject.toml +15 -0
app.py ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from click import progressbar
2
+ import gradio as gr
3
+ from PIL import Image
4
+
5
+ from dataset import ImageDataset
6
+ from labelizer import get_task_response
7
+
8
+
9
+ def auto_label(image):
10
+ text = get_task_response("<MORE_DETAILED_CAPTION>", image)
11
+ return image, text
12
+
13
+
14
+ def auto_label_and_update(dataset, im, image_id):
15
+ """Generate label and return updated dataset."""
16
+ text = get_task_response("<MORE_DETAILED_CAPTION>", im)
17
+ return dataset.update_label(image_id, text)
18
+
19
+
20
+ def uploaded(files, current_dataset):
21
+ """Handle file upload - return new dataset instance."""
22
+ if current_dataset is None:
23
+ current_dataset = ImageDataset()
24
+ return current_dataset.add_images(files)
25
+
26
+
27
+ def labelize_all_images(dataset, label, progress=gr.Progress(True)):
28
+ """Generate labels for all images and return new dataset instance."""
29
+
30
+ # Generate actual labels
31
+ labels_dict = {}
32
+ for imdata in progress.tqdm(dataset.images):
33
+ text = get_task_response("<MORE_DETAILED_CAPTION>", Image.open(imdata["path"]))
34
+ print(text)
35
+ labels_dict[imdata["id"]] = text
36
+
37
+ return dataset.update_all_labels(labels_dict), label
38
+
39
+
40
+ def update_buttons_states(dataset):
41
+ count = len(dataset.images)
42
+ return (
43
+ gr.update(interactive=count > 0), # remove all
44
+ gr.update(interactive=count > 0), # label all
45
+ )
46
+
47
+
48
+ CSS = """
49
+ .label_image_box {
50
+ border-radius: 1rem;
51
+ background: var(--panel-background-fill);
52
+ .image-frame img {
53
+ height: 300px;
54
+ max-height: 300px;
55
+ }
56
+ }
57
+ """
58
+
59
+ with gr.Blocks(title="Labelizer") as demo:
60
+ dataset = gr.State()
61
+ with gr.Sidebar():
62
+ gr.Markdown("# 🖼️ Image Labeling Tool")
63
+ gr.Markdown("Upload images and add labels to build your dataset.")
64
+ upload_button = gr.UploadButton("Upload images", file_count="multiple")
65
+ label_all = gr.Button("Labelize all images", interactive=False)
66
+ is_labeling_in_progress = gr.State(False)
67
+ progressbar = gr.Label("", visible=False, label="Preparing...")
68
+ remove_all = gr.Button("Remove all", interactive=False)
69
+
70
+ @gr.render(inputs=[dataset, is_labeling_in_progress])
71
+ def render_grid(dataset, is_labeling_in_progress):
72
+ if dataset is None:
73
+ return
74
+ cols = 6
75
+ rows = len(dataset.images) // cols
76
+ if len(dataset.images) > cols * rows:
77
+ rows += 1
78
+ current = 0
79
+ for _ in range(rows):
80
+ with gr.Row(equal_height=True):
81
+ for _ in range(cols):
82
+ with gr.Column(variant="compact", elem_classes=["label_image_box"]):
83
+ if current >= len(dataset.images):
84
+ break
85
+ image = gr.Image(
86
+ dataset.images[current]["path"],
87
+ type="pil",
88
+ container=False,
89
+ sources=None,
90
+ buttons=["fullscreen"],
91
+ )
92
+ label = gr.Text(
93
+ dataset.images[current]["label"],
94
+ placeholder="Description...",
95
+ lines=5,
96
+ container=False,
97
+ interactive=not is_labeling_in_progress,
98
+ )
99
+ with gr.Row():
100
+ button = gr.Button(
101
+ "Generate label",
102
+ interactive=not is_labeling_in_progress,
103
+ )
104
+
105
+ button.click(
106
+ auto_label,
107
+ inputs=[image],
108
+ outputs=[image, label],
109
+ )
110
+
111
+ current += 1
112
+
113
+ remove_all.click(lambda: ImageDataset(), inputs=None, outputs=dataset).then(
114
+ update_buttons_states, inputs=dataset, outputs=[remove_all, label_all]
115
+ )
116
+
117
+ upload_button.upload(
118
+ uploaded, inputs=[upload_button, dataset], outputs=dataset
119
+ ).then(
120
+ update_buttons_states,
121
+ inputs=dataset,
122
+ outputs=[remove_all, label_all],
123
+ )
124
+ label_all.click(
125
+ fn=lambda: (
126
+ gr.update(interactive=False),
127
+ gr.update(interactive=False),
128
+ gr.update(visible=True),
129
+ True,
130
+ ),
131
+ inputs=None,
132
+ outputs=[
133
+ upload_button,
134
+ label_all,
135
+ progressbar,
136
+ is_labeling_in_progress,
137
+ ],
138
+ ).then(
139
+ fn=labelize_all_images,
140
+ inputs=[dataset, progressbar],
141
+ outputs=[dataset, progressbar],
142
+ ).then(
143
+ fn=lambda: (
144
+ gr.update(interactive=True),
145
+ gr.update(interactive=True),
146
+ gr.update(visible=False),
147
+ False,
148
+ ),
149
+ inputs=None,
150
+ outputs=[
151
+ upload_button,
152
+ label_all,
153
+ progressbar,
154
+ is_labeling_in_progress,
155
+ ],
156
+ )
157
+
158
+ if __name__ == "__main__":
159
+ demo.launch(css=CSS)
dataset.py ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class ImageDataset:
2
+ def __init__(self, images=None):
3
+ self.images = images if images is not None else []
4
+
5
+ def add_images(self, files):
6
+ """Return new instance with added images."""
7
+ new_images = self.images.copy()
8
+ for _, file in enumerate(files):
9
+ new_images.append(
10
+ {
11
+ "id": len(new_images),
12
+ "path": file.name,
13
+ "label": "",
14
+ "name": f"Image {len(new_images) + 1}",
15
+ }
16
+ )
17
+ return ImageDataset(new_images)
18
+
19
+ def remove_image(self, image_id):
20
+ """Return new instance with image removed by ID."""
21
+ new_images = [img for img in self.images if img["id"] != image_id]
22
+ # Reindex remaining images
23
+ for i, img in enumerate(new_images):
24
+ img["id"] = i
25
+ img["name"] = f"Image {i + 1}"
26
+ return ImageDataset(new_images)
27
+
28
+ def update_label(self, image_id, label):
29
+ """Return new instance with updated label."""
30
+ new_images = []
31
+ for img in self.images:
32
+ new_img = img.copy()
33
+ if new_img["id"] == image_id:
34
+ new_img["label"] = label
35
+ new_images.append(new_img)
36
+ return ImageDataset(new_images)
37
+
38
+ def update_all_labels(self, labels_dict):
39
+ """Return new instance with all labels updated."""
40
+ new_images = []
41
+ for img in self.images:
42
+ new_img = img.copy()
43
+ if img["id"] in labels_dict:
44
+ new_img["label"] = labels_dict[img["id"]]
45
+ new_images.append(new_img)
46
+ return ImageDataset(new_images)
labelizer/__init__.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from PIL import Image
3
+ from transformers import Florence2ForConditionalGeneration, Florence2Processor
4
+
5
+ MODEL_ID = "ducviet00/Florence-2-large-hf"
6
+
7
+ # Global variables for lazy loading
8
+ _model = None
9
+ _processor = None
10
+ _device = None
11
+ _torch_dtype = None
12
+
13
+
14
+ def _load_model():
15
+ """Load model and processor lazily"""
16
+ global _model, _processor, _device, _torch_dtype
17
+
18
+ if _model is None:
19
+ _device = "cuda:0" if torch.cuda.is_available() else "cpu"
20
+ _torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
21
+
22
+ print(f"Loading model {MODEL_ID} on {_device} with dtype {_torch_dtype}...")
23
+ _model = Florence2ForConditionalGeneration.from_pretrained(
24
+ MODEL_ID, torch_dtype=_torch_dtype, trust_remote_code=True
25
+ ).to(_device) # type: ignore
26
+ _processor = Florence2Processor.from_pretrained(
27
+ MODEL_ID, trust_remote_code=True
28
+ )
29
+ print("Model loaded successfully!")
30
+
31
+ return _model, _processor, _device, _torch_dtype
32
+
33
+
34
+ def get_task_response(task_prompt: str, image: Image.Image, text_input=None):
35
+ """Return associated task response
36
+
37
+ Task can be:
38
+ '<MORE_DETAILED_CAPTION>'
39
+ '<DETAILED_CAPTION>'
40
+ '<CAPTION>'
41
+
42
+ """
43
+ # Lazy load model only when needed
44
+ model, processor, device, torch_dtype = _load_model()
45
+ if text_input is None:
46
+ prompt = task_prompt
47
+ else:
48
+ prompt = task_prompt + text_input
49
+
50
+ # Ensure image is in RGB mode
51
+ if image.mode != "RGB":
52
+ image = image.convert("RGB")
53
+
54
+ if processor is None:
55
+ raise ValueError("processor is None")
56
+ inputs = processor(
57
+ text=prompt,
58
+ images=image,
59
+ return_tensors="pt", # type: ignore
60
+ ).to(device, torch_dtype)
61
+
62
+ generated_ids = model.generate(
63
+ input_ids=inputs["input_ids"],
64
+ pixel_values=inputs["pixel_values"],
65
+ max_new_tokens=1024,
66
+ num_beams=3,
67
+ )
68
+ generated_text = processor.batch_decode(generated_ids, skip_special_tokens=False)[0]
69
+
70
+ parsed_answer = processor.post_process_generation(
71
+ generated_text, task=task_prompt, image_size=(image.width, image.height)
72
+ )
73
+
74
+ return parsed_answer[task_prompt]
pdm.lock ADDED
@@ -0,0 +1,1244 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file is @generated by PDM.
2
+ # It is not intended for manual editing.
3
+
4
+ [metadata]
5
+ groups = ["default"]
6
+ strategy = ["inherit_metadata"]
7
+ lock_version = "4.5.0"
8
+ content_hash = "sha256:ca1f4cf6df24c991a826baf1788242e48e5c757fc53700048e3bea57b9608ca0"
9
+
10
+ [[metadata.targets]]
11
+ requires_python = "==3.12.*"
12
+
13
+ [[package]]
14
+ name = "aiofiles"
15
+ version = "24.1.0"
16
+ requires_python = ">=3.8"
17
+ summary = "File support for asyncio."
18
+ groups = ["default"]
19
+ files = [
20
+ {file = "aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5"},
21
+ {file = "aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c"},
22
+ ]
23
+
24
+ [[package]]
25
+ name = "annotated-doc"
26
+ version = "0.0.4"
27
+ requires_python = ">=3.8"
28
+ summary = "Document parameters, class attributes, return types, and variables inline, with Annotated."
29
+ groups = ["default"]
30
+ files = [
31
+ {file = "annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320"},
32
+ {file = "annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4"},
33
+ ]
34
+
35
+ [[package]]
36
+ name = "annotated-types"
37
+ version = "0.7.0"
38
+ requires_python = ">=3.8"
39
+ summary = "Reusable constraint types to use with typing.Annotated"
40
+ groups = ["default"]
41
+ dependencies = [
42
+ "typing-extensions>=4.0.0; python_version < \"3.9\"",
43
+ ]
44
+ files = [
45
+ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"},
46
+ {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
47
+ ]
48
+
49
+ [[package]]
50
+ name = "anyio"
51
+ version = "4.12.0"
52
+ requires_python = ">=3.9"
53
+ summary = "High-level concurrency and networking framework on top of asyncio or Trio"
54
+ groups = ["default"]
55
+ dependencies = [
56
+ "exceptiongroup>=1.0.2; python_version < \"3.11\"",
57
+ "idna>=2.8",
58
+ "typing-extensions>=4.5; python_version < \"3.13\"",
59
+ ]
60
+ files = [
61
+ {file = "anyio-4.12.0-py3-none-any.whl", hash = "sha256:dad2376a628f98eeca4881fc56cd06affd18f659b17a747d3ff0307ced94b1bb"},
62
+ {file = "anyio-4.12.0.tar.gz", hash = "sha256:73c693b567b0c55130c104d0b43a9baf3aa6a31fc6110116509f27bf75e21ec0"},
63
+ ]
64
+
65
+ [[package]]
66
+ name = "brotli"
67
+ version = "1.2.0"
68
+ summary = "Python bindings for the Brotli compression library"
69
+ groups = ["default"]
70
+ files = [
71
+ {file = "brotli-1.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84"},
72
+ {file = "brotli-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b"},
73
+ {file = "brotli-1.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d"},
74
+ {file = "brotli-1.2.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca"},
75
+ {file = "brotli-1.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f"},
76
+ {file = "brotli-1.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28"},
77
+ {file = "brotli-1.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7"},
78
+ {file = "brotli-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036"},
79
+ {file = "brotli-1.2.0-cp312-cp312-win32.whl", hash = "sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161"},
80
+ {file = "brotli-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44"},
81
+ {file = "brotli-1.2.0.tar.gz", hash = "sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a"},
82
+ ]
83
+
84
+ [[package]]
85
+ name = "certifi"
86
+ version = "2025.11.12"
87
+ requires_python = ">=3.7"
88
+ summary = "Python package for providing Mozilla's CA Bundle."
89
+ groups = ["default"]
90
+ files = [
91
+ {file = "certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b"},
92
+ {file = "certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316"},
93
+ ]
94
+
95
+ [[package]]
96
+ name = "charset-normalizer"
97
+ version = "3.4.4"
98
+ requires_python = ">=3.7"
99
+ summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
100
+ groups = ["default"]
101
+ files = [
102
+ {file = "charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394"},
103
+ {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25"},
104
+ {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef"},
105
+ {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d"},
106
+ {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8"},
107
+ {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86"},
108
+ {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a"},
109
+ {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f"},
110
+ {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc"},
111
+ {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf"},
112
+ {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15"},
113
+ {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9"},
114
+ {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0"},
115
+ {file = "charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26"},
116
+ {file = "charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525"},
117
+ {file = "charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3"},
118
+ {file = "charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f"},
119
+ {file = "charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"},
120
+ ]
121
+
122
+ [[package]]
123
+ name = "click"
124
+ version = "8.3.1"
125
+ requires_python = ">=3.10"
126
+ summary = "Composable command line interface toolkit"
127
+ groups = ["default"]
128
+ dependencies = [
129
+ "colorama; platform_system == \"Windows\"",
130
+ ]
131
+ files = [
132
+ {file = "click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6"},
133
+ {file = "click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a"},
134
+ ]
135
+
136
+ [[package]]
137
+ name = "colorama"
138
+ version = "0.4.6"
139
+ requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
140
+ summary = "Cross-platform colored terminal text."
141
+ groups = ["default"]
142
+ marker = "platform_system == \"Windows\""
143
+ files = [
144
+ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
145
+ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
146
+ ]
147
+
148
+ [[package]]
149
+ name = "fastapi"
150
+ version = "0.124.0"
151
+ requires_python = ">=3.8"
152
+ summary = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
153
+ groups = ["default"]
154
+ dependencies = [
155
+ "annotated-doc>=0.0.2",
156
+ "pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4",
157
+ "starlette<0.51.0,>=0.40.0",
158
+ "typing-extensions>=4.8.0",
159
+ ]
160
+ files = [
161
+ {file = "fastapi-0.124.0-py3-none-any.whl", hash = "sha256:91596bdc6dde303c318f06e8d2bc75eafb341fc793a0c9c92c0bc1db1ac52480"},
162
+ {file = "fastapi-0.124.0.tar.gz", hash = "sha256:260cd178ad75e6d259991f2fd9b0fee924b224850079df576a3ba604ce58f4e6"},
163
+ ]
164
+
165
+ [[package]]
166
+ name = "ffmpy"
167
+ version = "1.0.0"
168
+ requires_python = ">=3.9"
169
+ summary = "A simple Python wrapper for FFmpeg"
170
+ groups = ["default"]
171
+ files = [
172
+ {file = "ffmpy-1.0.0-py3-none-any.whl", hash = "sha256:5640e5f0fd03fb6236d0e119b16ccf6522db1c826fdf35dcb87087b60fd7504f"},
173
+ {file = "ffmpy-1.0.0.tar.gz", hash = "sha256:b12932e95435c8820f1cd041024402765f821971e4bae753b327fc02a6e12f8b"},
174
+ ]
175
+
176
+ [[package]]
177
+ name = "filelock"
178
+ version = "3.20.0"
179
+ requires_python = ">=3.10"
180
+ summary = "A platform independent file lock."
181
+ groups = ["default"]
182
+ files = [
183
+ {file = "filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2"},
184
+ {file = "filelock-3.20.0.tar.gz", hash = "sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4"},
185
+ ]
186
+
187
+ [[package]]
188
+ name = "fsspec"
189
+ version = "2025.12.0"
190
+ requires_python = ">=3.10"
191
+ summary = "File-system specification"
192
+ groups = ["default"]
193
+ files = [
194
+ {file = "fsspec-2025.12.0-py3-none-any.whl", hash = "sha256:8bf1fe301b7d8acfa6e8571e3b1c3d158f909666642431cc78a1b7b4dbc5ec5b"},
195
+ {file = "fsspec-2025.12.0.tar.gz", hash = "sha256:c505de011584597b1060ff778bb664c1bc022e87921b0e4f10cc9c44f9635973"},
196
+ ]
197
+
198
+ [[package]]
199
+ name = "gradio"
200
+ version = "6.0.2"
201
+ requires_python = ">=3.10"
202
+ summary = "Python library for easily interacting with trained machine learning models"
203
+ groups = ["default"]
204
+ dependencies = [
205
+ "aiofiles<25.0,>=22.0",
206
+ "anyio<5.0,>=3.0",
207
+ "audioop-lts<1.0; python_version >= \"3.13\"",
208
+ "brotli>=1.1.0",
209
+ "fastapi<1.0,>=0.115.2",
210
+ "ffmpy",
211
+ "gradio-client==2.0.1",
212
+ "groovy~=0.1",
213
+ "httpx<1.0,>=0.24.1",
214
+ "huggingface-hub<2.0,>=0.33.5",
215
+ "jinja2<4.0",
216
+ "markupsafe<4.0,>=2.0",
217
+ "numpy<3.0,>=1.0",
218
+ "orjson~=3.0",
219
+ "packaging",
220
+ "pandas<3.0,>=1.0",
221
+ "pillow<13.0,>=8.0",
222
+ "pydantic<=2.12.4,>=2.11.10",
223
+ "pydub",
224
+ "python-multipart>=0.0.18",
225
+ "pyyaml<7.0,>=5.0",
226
+ "safehttpx<0.2.0,>=0.1.7",
227
+ "semantic-version~=2.0",
228
+ "starlette<1.0,>=0.40.0",
229
+ "tomlkit<0.14.0,>=0.12.0",
230
+ "typer<1.0,>=0.12",
231
+ "typing-extensions~=4.0",
232
+ "uvicorn>=0.14.0",
233
+ ]
234
+ files = [
235
+ {file = "gradio-6.0.2-py3-none-any.whl", hash = "sha256:bcb8b9d147b313c958f811977527415cfd7871ee9547ccd92ef1911970c49a2c"},
236
+ {file = "gradio-6.0.2.tar.gz", hash = "sha256:e3bb128fd9247a49820048cfb8f5b677b59a0da24f6d81bc990ca1a20eb6d1fb"},
237
+ ]
238
+
239
+ [[package]]
240
+ name = "gradio-client"
241
+ version = "2.0.1"
242
+ requires_python = ">=3.10"
243
+ summary = "Python library for easily interacting with trained machine learning models"
244
+ groups = ["default"]
245
+ dependencies = [
246
+ "fsspec",
247
+ "httpx>=0.24.1",
248
+ "huggingface-hub<2.0,>=0.19.3",
249
+ "packaging",
250
+ "typing-extensions~=4.0",
251
+ ]
252
+ files = [
253
+ {file = "gradio_client-2.0.1-py3-none-any.whl", hash = "sha256:6322eecb5963a07703306c0b048bb98518063d05ca99a65fe384417188af8c63"},
254
+ {file = "gradio_client-2.0.1.tar.gz", hash = "sha256:087eb50652370747c0ce66cd0ae79ecb49f9682188d5348e279d44602cbc2814"},
255
+ ]
256
+
257
+ [[package]]
258
+ name = "groovy"
259
+ version = "0.1.2"
260
+ requires_python = ">3.9"
261
+ summary = "A small Python library created to help developers protect their applications from Server Side Request Forgery (SSRF) attacks."
262
+ groups = ["default"]
263
+ files = [
264
+ {file = "groovy-0.1.2-py3-none-any.whl", hash = "sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64"},
265
+ {file = "groovy-0.1.2.tar.gz", hash = "sha256:25c1dc09b3f9d7e292458aa762c6beb96ea037071bf5e917fc81fb78d2231083"},
266
+ ]
267
+
268
+ [[package]]
269
+ name = "h11"
270
+ version = "0.16.0"
271
+ requires_python = ">=3.8"
272
+ summary = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
273
+ groups = ["default"]
274
+ files = [
275
+ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"},
276
+ {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"},
277
+ ]
278
+
279
+ [[package]]
280
+ name = "hf-xet"
281
+ version = "1.2.0"
282
+ requires_python = ">=3.8"
283
+ summary = "Fast transfer of large files with the Hugging Face Hub."
284
+ groups = ["default"]
285
+ marker = "platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"arm64\" or platform_machine == \"aarch64\""
286
+ files = [
287
+ {file = "hf_xet-1.2.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:46740d4ac024a7ca9b22bebf77460ff43332868b661186a8e46c227fdae01848"},
288
+ {file = "hf_xet-1.2.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:27df617a076420d8845bea087f59303da8be17ed7ec0cd7ee3b9b9f579dff0e4"},
289
+ {file = "hf_xet-1.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3651fd5bfe0281951b988c0facbe726aa5e347b103a675f49a3fa8144c7968fd"},
290
+ {file = "hf_xet-1.2.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d06fa97c8562fb3ee7a378dd9b51e343bc5bc8190254202c9771029152f5e08c"},
291
+ {file = "hf_xet-1.2.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4c1428c9ae73ec0939410ec73023c4f842927f39db09b063b9482dac5a3bb737"},
292
+ {file = "hf_xet-1.2.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a55558084c16b09b5ed32ab9ed38421e2d87cf3f1f89815764d1177081b99865"},
293
+ {file = "hf_xet-1.2.0-cp37-abi3-win_amd64.whl", hash = "sha256:e6584a52253f72c9f52f9e549d5895ca7a471608495c4ecaa6cc73dba2b24d69"},
294
+ {file = "hf_xet-1.2.0.tar.gz", hash = "sha256:a8c27070ca547293b6890c4bf389f713f80e8c478631432962bb7f4bc0bd7d7f"},
295
+ ]
296
+
297
+ [[package]]
298
+ name = "httpcore"
299
+ version = "1.0.9"
300
+ requires_python = ">=3.8"
301
+ summary = "A minimal low-level HTTP client."
302
+ groups = ["default"]
303
+ dependencies = [
304
+ "certifi",
305
+ "h11>=0.16",
306
+ ]
307
+ files = [
308
+ {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"},
309
+ {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"},
310
+ ]
311
+
312
+ [[package]]
313
+ name = "httpx"
314
+ version = "0.28.1"
315
+ requires_python = ">=3.8"
316
+ summary = "The next generation HTTP client."
317
+ groups = ["default"]
318
+ dependencies = [
319
+ "anyio",
320
+ "certifi",
321
+ "httpcore==1.*",
322
+ "idna",
323
+ ]
324
+ files = [
325
+ {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"},
326
+ {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"},
327
+ ]
328
+
329
+ [[package]]
330
+ name = "huggingface-hub"
331
+ version = "0.36.0"
332
+ requires_python = ">=3.8.0"
333
+ summary = "Client library to download and publish models, datasets and other repos on the huggingface.co hub"
334
+ groups = ["default"]
335
+ dependencies = [
336
+ "filelock",
337
+ "fsspec>=2023.5.0",
338
+ "hf-xet<2.0.0,>=1.1.3; platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"arm64\" or platform_machine == \"aarch64\"",
339
+ "packaging>=20.9",
340
+ "pyyaml>=5.1",
341
+ "requests",
342
+ "tqdm>=4.42.1",
343
+ "typing-extensions>=3.7.4.3",
344
+ ]
345
+ files = [
346
+ {file = "huggingface_hub-0.36.0-py3-none-any.whl", hash = "sha256:7bcc9ad17d5b3f07b57c78e79d527102d08313caa278a641993acddcb894548d"},
347
+ {file = "huggingface_hub-0.36.0.tar.gz", hash = "sha256:47b3f0e2539c39bf5cde015d63b72ec49baff67b6931c3d97f3f84532e2b8d25"},
348
+ ]
349
+
350
+ [[package]]
351
+ name = "idna"
352
+ version = "3.11"
353
+ requires_python = ">=3.8"
354
+ summary = "Internationalized Domain Names in Applications (IDNA)"
355
+ groups = ["default"]
356
+ files = [
357
+ {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"},
358
+ {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"},
359
+ ]
360
+
361
+ [[package]]
362
+ name = "jinja2"
363
+ version = "3.1.6"
364
+ requires_python = ">=3.7"
365
+ summary = "A very fast and expressive template engine."
366
+ groups = ["default"]
367
+ dependencies = [
368
+ "MarkupSafe>=2.0",
369
+ ]
370
+ files = [
371
+ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"},
372
+ {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"},
373
+ ]
374
+
375
+ [[package]]
376
+ name = "markdown-it-py"
377
+ version = "4.0.0"
378
+ requires_python = ">=3.10"
379
+ summary = "Python port of markdown-it. Markdown parsing, done right!"
380
+ groups = ["default"]
381
+ dependencies = [
382
+ "mdurl~=0.1",
383
+ ]
384
+ files = [
385
+ {file = "markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147"},
386
+ {file = "markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3"},
387
+ ]
388
+
389
+ [[package]]
390
+ name = "markupsafe"
391
+ version = "3.0.3"
392
+ requires_python = ">=3.9"
393
+ summary = "Safely add untrusted strings to HTML/XML markup."
394
+ groups = ["default"]
395
+ files = [
396
+ {file = "markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e"},
397
+ {file = "markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce"},
398
+ {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d"},
399
+ {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d"},
400
+ {file = "markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a"},
401
+ {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b"},
402
+ {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f"},
403
+ {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b"},
404
+ {file = "markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d"},
405
+ {file = "markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c"},
406
+ {file = "markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f"},
407
+ {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"},
408
+ ]
409
+
410
+ [[package]]
411
+ name = "mdurl"
412
+ version = "0.1.2"
413
+ requires_python = ">=3.7"
414
+ summary = "Markdown URL utilities"
415
+ groups = ["default"]
416
+ files = [
417
+ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"},
418
+ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
419
+ ]
420
+
421
+ [[package]]
422
+ name = "mpmath"
423
+ version = "1.3.0"
424
+ summary = "Python library for arbitrary-precision floating-point arithmetic"
425
+ groups = ["default"]
426
+ files = [
427
+ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"},
428
+ {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"},
429
+ ]
430
+
431
+ [[package]]
432
+ name = "networkx"
433
+ version = "3.6"
434
+ requires_python = ">=3.11"
435
+ summary = "Python package for creating and manipulating graphs and networks"
436
+ groups = ["default"]
437
+ files = [
438
+ {file = "networkx-3.6-py3-none-any.whl", hash = "sha256:cdb395b105806062473d3be36458d8f1459a4e4b98e236a66c3a48996e07684f"},
439
+ {file = "networkx-3.6.tar.gz", hash = "sha256:285276002ad1f7f7da0f7b42f004bcba70d381e936559166363707fdad3d72ad"},
440
+ ]
441
+
442
+ [[package]]
443
+ name = "numpy"
444
+ version = "2.3.5"
445
+ requires_python = ">=3.11"
446
+ summary = "Fundamental package for array computing in Python"
447
+ groups = ["default"]
448
+ files = [
449
+ {file = "numpy-2.3.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e"},
450
+ {file = "numpy-2.3.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769"},
451
+ {file = "numpy-2.3.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5"},
452
+ {file = "numpy-2.3.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4"},
453
+ {file = "numpy-2.3.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d"},
454
+ {file = "numpy-2.3.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28"},
455
+ {file = "numpy-2.3.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b"},
456
+ {file = "numpy-2.3.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c"},
457
+ {file = "numpy-2.3.5-cp312-cp312-win32.whl", hash = "sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952"},
458
+ {file = "numpy-2.3.5-cp312-cp312-win_amd64.whl", hash = "sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa"},
459
+ {file = "numpy-2.3.5-cp312-cp312-win_arm64.whl", hash = "sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013"},
460
+ {file = "numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0"},
461
+ ]
462
+
463
+ [[package]]
464
+ name = "nvidia-cublas-cu12"
465
+ version = "12.8.4.1"
466
+ requires_python = ">=3"
467
+ summary = "CUBLAS native runtime libraries"
468
+ groups = ["default"]
469
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
470
+ files = [
471
+ {file = "nvidia_cublas_cu12-12.8.4.1-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b86f6dd8935884615a0683b663891d43781b819ac4f2ba2b0c9604676af346d0"},
472
+ {file = "nvidia_cublas_cu12-12.8.4.1-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8ac4e771d5a348c551b2a426eda6193c19aa630236b418086020df5ba9667142"},
473
+ {file = "nvidia_cublas_cu12-12.8.4.1-py3-none-win_amd64.whl", hash = "sha256:47e9b82132fa8d2b4944e708049229601448aaad7e6f296f630f2d1a32de35af"},
474
+ ]
475
+
476
+ [[package]]
477
+ name = "nvidia-cuda-cupti-cu12"
478
+ version = "12.8.90"
479
+ requires_python = ">=3"
480
+ summary = "CUDA profiling tools runtime libs."
481
+ groups = ["default"]
482
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
483
+ files = [
484
+ {file = "nvidia_cuda_cupti_cu12-12.8.90-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4412396548808ddfed3f17a467b104ba7751e6b58678a4b840675c56d21cf7ed"},
485
+ {file = "nvidia_cuda_cupti_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ea0cb07ebda26bb9b29ba82cda34849e73c166c18162d3913575b0c9db9a6182"},
486
+ {file = "nvidia_cuda_cupti_cu12-12.8.90-py3-none-win_amd64.whl", hash = "sha256:bb479dcdf7e6d4f8b0b01b115260399bf34154a1a2e9fe11c85c517d87efd98e"},
487
+ ]
488
+
489
+ [[package]]
490
+ name = "nvidia-cuda-nvrtc-cu12"
491
+ version = "12.8.93"
492
+ requires_python = ">=3"
493
+ summary = "NVRTC native runtime libraries"
494
+ groups = ["default"]
495
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
496
+ files = [
497
+ {file = "nvidia_cuda_nvrtc_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a7756528852ef889772a84c6cd89d41dfa74667e24cca16bb31f8f061e3e9994"},
498
+ {file = "nvidia_cuda_nvrtc_cu12-12.8.93-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fc1fec1e1637854b4c0a65fb9a8346b51dd9ee69e61ebaccc82058441f15bce8"},
499
+ {file = "nvidia_cuda_nvrtc_cu12-12.8.93-py3-none-win_amd64.whl", hash = "sha256:7a4b6b2904850fe78e0bd179c4b655c404d4bb799ef03ddc60804247099ae909"},
500
+ ]
501
+
502
+ [[package]]
503
+ name = "nvidia-cuda-runtime-cu12"
504
+ version = "12.8.90"
505
+ requires_python = ">=3"
506
+ summary = "CUDA Runtime native Libraries"
507
+ groups = ["default"]
508
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
509
+ files = [
510
+ {file = "nvidia_cuda_runtime_cu12-12.8.90-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:52bf7bbee900262ffefe5e9d5a2a69a30d97e2bc5bb6cc866688caa976966e3d"},
511
+ {file = "nvidia_cuda_runtime_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:adade8dcbd0edf427b7204d480d6066d33902cab2a4707dcfc48a2d0fd44ab90"},
512
+ {file = "nvidia_cuda_runtime_cu12-12.8.90-py3-none-win_amd64.whl", hash = "sha256:c0c6027f01505bfed6c3b21ec546f69c687689aad5f1a377554bc6ca4aa993a8"},
513
+ ]
514
+
515
+ [[package]]
516
+ name = "nvidia-cudnn-cu12"
517
+ version = "9.10.2.21"
518
+ requires_python = ">=3"
519
+ summary = "cuDNN runtime libraries"
520
+ groups = ["default"]
521
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
522
+ dependencies = [
523
+ "nvidia-cublas-cu12",
524
+ ]
525
+ files = [
526
+ {file = "nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c9132cc3f8958447b4910a1720036d9eff5928cc3179b0a51fb6d167c6cc87d8"},
527
+ {file = "nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8"},
528
+ {file = "nvidia_cudnn_cu12-9.10.2.21-py3-none-win_amd64.whl", hash = "sha256:c6288de7d63e6cf62988f0923f96dc339cea362decb1bf5b3141883392a7d65e"},
529
+ ]
530
+
531
+ [[package]]
532
+ name = "nvidia-cufft-cu12"
533
+ version = "11.3.3.83"
534
+ requires_python = ">=3"
535
+ summary = "CUFFT native runtime libraries"
536
+ groups = ["default"]
537
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
538
+ dependencies = [
539
+ "nvidia-nvjitlink-cu12",
540
+ ]
541
+ files = [
542
+ {file = "nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:848ef7224d6305cdb2a4df928759dca7b1201874787083b6e7550dd6765ce69a"},
543
+ {file = "nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d2dd21ec0b88cf61b62e6b43564355e5222e4a3fb394cac0db101f2dd0d4f74"},
544
+ {file = "nvidia_cufft_cu12-11.3.3.83-py3-none-win_amd64.whl", hash = "sha256:7a64a98ef2a7c47f905aaf8931b69a3a43f27c55530c698bb2ed7c75c0b42cb7"},
545
+ ]
546
+
547
+ [[package]]
548
+ name = "nvidia-cufile-cu12"
549
+ version = "1.13.1.3"
550
+ requires_python = ">=3"
551
+ summary = "cuFile GPUDirect libraries"
552
+ groups = ["default"]
553
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
554
+ files = [
555
+ {file = "nvidia_cufile_cu12-1.13.1.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1d069003be650e131b21c932ec3d8969c1715379251f8d23a1860554b1cb24fc"},
556
+ {file = "nvidia_cufile_cu12-1.13.1.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:4beb6d4cce47c1a0f1013d72e02b0994730359e17801d395bdcbf20cfb3bb00a"},
557
+ ]
558
+
559
+ [[package]]
560
+ name = "nvidia-curand-cu12"
561
+ version = "10.3.9.90"
562
+ requires_python = ">=3"
563
+ summary = "CURAND native runtime libraries"
564
+ groups = ["default"]
565
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
566
+ files = [
567
+ {file = "nvidia_curand_cu12-10.3.9.90-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:dfab99248034673b779bc6decafdc3404a8a6f502462201f2f31f11354204acd"},
568
+ {file = "nvidia_curand_cu12-10.3.9.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:b32331d4f4df5d6eefa0554c565b626c7216f87a06a4f56fab27c3b68a830ec9"},
569
+ {file = "nvidia_curand_cu12-10.3.9.90-py3-none-win_amd64.whl", hash = "sha256:f149a8ca457277da854f89cf282d6ef43176861926c7ac85b2a0fbd237c587ec"},
570
+ ]
571
+
572
+ [[package]]
573
+ name = "nvidia-cusolver-cu12"
574
+ version = "11.7.3.90"
575
+ requires_python = ">=3"
576
+ summary = "CUDA solver native runtime libraries"
577
+ groups = ["default"]
578
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
579
+ dependencies = [
580
+ "nvidia-cublas-cu12",
581
+ "nvidia-cusparse-cu12",
582
+ "nvidia-nvjitlink-cu12",
583
+ ]
584
+ files = [
585
+ {file = "nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:db9ed69dbef9715071232caa9b69c52ac7de3a95773c2db65bdba85916e4e5c0"},
586
+ {file = "nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4376c11ad263152bd50ea295c05370360776f8c3427b30991df774f9fb26c450"},
587
+ {file = "nvidia_cusolver_cu12-11.7.3.90-py3-none-win_amd64.whl", hash = "sha256:4a550db115fcabc4d495eb7d39ac8b58d4ab5d8e63274d3754df1c0ad6a22d34"},
588
+ ]
589
+
590
+ [[package]]
591
+ name = "nvidia-cusparse-cu12"
592
+ version = "12.5.8.93"
593
+ requires_python = ">=3"
594
+ summary = "CUSPARSE native runtime libraries"
595
+ groups = ["default"]
596
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
597
+ dependencies = [
598
+ "nvidia-nvjitlink-cu12",
599
+ ]
600
+ files = [
601
+ {file = "nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b6c161cb130be1a07a27ea6923df8141f3c295852f4b260c65f18f3e0a091dc"},
602
+ {file = "nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ec05d76bbbd8b61b06a80e1eaf8cf4959c3d4ce8e711b65ebd0443bb0ebb13b"},
603
+ {file = "nvidia_cusparse_cu12-12.5.8.93-py3-none-win_amd64.whl", hash = "sha256:9a33604331cb2cac199f2e7f5104dfbb8a5a898c367a53dfda9ff2acb6b6b4dd"},
604
+ ]
605
+
606
+ [[package]]
607
+ name = "nvidia-cusparselt-cu12"
608
+ version = "0.7.1"
609
+ summary = "NVIDIA cuSPARSELt"
610
+ groups = ["default"]
611
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
612
+ files = [
613
+ {file = "nvidia_cusparselt_cu12-0.7.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8878dce784d0fac90131b6817b607e803c36e629ba34dc5b433471382196b6a5"},
614
+ {file = "nvidia_cusparselt_cu12-0.7.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f1bb701d6b930d5a7cea44c19ceb973311500847f81b634d802b7b539dc55623"},
615
+ {file = "nvidia_cusparselt_cu12-0.7.1-py3-none-win_amd64.whl", hash = "sha256:f67fbb5831940ec829c9117b7f33807db9f9678dc2a617fbe781cac17b4e1075"},
616
+ ]
617
+
618
+ [[package]]
619
+ name = "nvidia-nccl-cu12"
620
+ version = "2.27.5"
621
+ requires_python = ">=3"
622
+ summary = "NVIDIA Collective Communication Library (NCCL) Runtime"
623
+ groups = ["default"]
624
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
625
+ files = [
626
+ {file = "nvidia_nccl_cu12-2.27.5-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:31432ad4d1fb1004eb0c56203dc9bc2178a1ba69d1d9e02d64a6938ab5e40e7a"},
627
+ {file = "nvidia_nccl_cu12-2.27.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ad730cf15cb5d25fe849c6e6ca9eb5b76db16a80f13f425ac68d8e2e55624457"},
628
+ ]
629
+
630
+ [[package]]
631
+ name = "nvidia-nvjitlink-cu12"
632
+ version = "12.8.93"
633
+ requires_python = ">=3"
634
+ summary = "Nvidia JIT LTO Library"
635
+ groups = ["default"]
636
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
637
+ files = [
638
+ {file = "nvidia_nvjitlink_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:81ff63371a7ebd6e6451970684f916be2eab07321b73c9d244dc2b4da7f73b88"},
639
+ {file = "nvidia_nvjitlink_cu12-12.8.93-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:adccd7161ace7261e01bb91e44e88da350895c270d23f744f0820c818b7229e7"},
640
+ {file = "nvidia_nvjitlink_cu12-12.8.93-py3-none-win_amd64.whl", hash = "sha256:bd93fbeeee850917903583587f4fc3a4eafa022e34572251368238ab5e6bd67f"},
641
+ ]
642
+
643
+ [[package]]
644
+ name = "nvidia-nvshmem-cu12"
645
+ version = "3.3.20"
646
+ requires_python = ">=3"
647
+ summary = "NVSHMEM creates a global address space that provides efficient and scalable communication for NVIDIA GPU clusters."
648
+ groups = ["default"]
649
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
650
+ files = [
651
+ {file = "nvidia_nvshmem_cu12-3.3.20-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0b0b960da3842212758e4fa4696b94f129090b30e5122fea3c5345916545cff0"},
652
+ {file = "nvidia_nvshmem_cu12-3.3.20-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d00f26d3f9b2e3c3065be895e3059d6479ea5c638a3f38c9fec49b1b9dd7c1e5"},
653
+ ]
654
+
655
+ [[package]]
656
+ name = "nvidia-nvtx-cu12"
657
+ version = "12.8.90"
658
+ requires_python = ">=3"
659
+ summary = "NVIDIA Tools Extension"
660
+ groups = ["default"]
661
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
662
+ files = [
663
+ {file = "nvidia_nvtx_cu12-12.8.90-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d7ad891da111ebafbf7e015d34879f7112832fc239ff0d7d776b6cb685274615"},
664
+ {file = "nvidia_nvtx_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5b17e2001cc0d751a5bc2c6ec6d26ad95913324a4adb86788c944f8ce9ba441f"},
665
+ {file = "nvidia_nvtx_cu12-12.8.90-py3-none-win_amd64.whl", hash = "sha256:619c8304aedc69f02ea82dd244541a83c3d9d40993381b3b590f1adaed3db41e"},
666
+ ]
667
+
668
+ [[package]]
669
+ name = "orjson"
670
+ version = "3.11.5"
671
+ requires_python = ">=3.9"
672
+ summary = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
673
+ groups = ["default"]
674
+ files = [
675
+ {file = "orjson-3.11.5-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:334e5b4bff9ad101237c2d799d9fd45737752929753bf4faf4b207335a416b7d"},
676
+ {file = "orjson-3.11.5-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:ff770589960a86eae279f5d8aa536196ebda8273a2a07db2a54e82b93bc86626"},
677
+ {file = "orjson-3.11.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed24250e55efbcb0b35bed7caaec8cedf858ab2f9f2201f17b8938c618c8ca6f"},
678
+ {file = "orjson-3.11.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a66d7769e98a08a12a139049aac2f0ca3adae989817f8c43337455fbc7669b85"},
679
+ {file = "orjson-3.11.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:86cfc555bfd5794d24c6a1903e558b50644e5e68e6471d66502ce5cb5fdef3f9"},
680
+ {file = "orjson-3.11.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a230065027bc2a025e944f9d4714976a81e7ecfa940923283bca7bbc1f10f626"},
681
+ {file = "orjson-3.11.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b29d36b60e606df01959c4b982729c8845c69d1963f88686608be9ced96dbfaa"},
682
+ {file = "orjson-3.11.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c74099c6b230d4261fdc3169d50efc09abf38ace1a42ea2f9994b1d79153d477"},
683
+ {file = "orjson-3.11.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e697d06ad57dd0c7a737771d470eedc18e68dfdefcdd3b7de7f33dfda5b6212e"},
684
+ {file = "orjson-3.11.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e08ca8a6c851e95aaecc32bc44a5aa75d0ad26af8cdac7c77e4ed93acf3d5b69"},
685
+ {file = "orjson-3.11.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e8b5f96c05fce7d0218df3fdfeb962d6b8cfff7e3e20264306b46dd8b217c0f3"},
686
+ {file = "orjson-3.11.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ddbfdb5099b3e6ba6d6ea818f61997bb66de14b411357d24c4612cf1ebad08ca"},
687
+ {file = "orjson-3.11.5-cp312-cp312-win32.whl", hash = "sha256:9172578c4eb09dbfcf1657d43198de59b6cef4054de385365060ed50c458ac98"},
688
+ {file = "orjson-3.11.5-cp312-cp312-win_amd64.whl", hash = "sha256:2b91126e7b470ff2e75746f6f6ee32b9ab67b7a93c8ba1d15d3a0caaf16ec875"},
689
+ {file = "orjson-3.11.5-cp312-cp312-win_arm64.whl", hash = "sha256:acbc5fac7e06777555b0722b8ad5f574739e99ffe99467ed63da98f97f9ca0fe"},
690
+ {file = "orjson-3.11.5.tar.gz", hash = "sha256:82393ab47b4fe44ffd0a7659fa9cfaacc717eb617c93cde83795f14af5c2e9d5"},
691
+ ]
692
+
693
+ [[package]]
694
+ name = "packaging"
695
+ version = "25.0"
696
+ requires_python = ">=3.8"
697
+ summary = "Core utilities for Python packages"
698
+ groups = ["default"]
699
+ files = [
700
+ {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"},
701
+ {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"},
702
+ ]
703
+
704
+ [[package]]
705
+ name = "pandas"
706
+ version = "2.3.3"
707
+ requires_python = ">=3.9"
708
+ summary = "Powerful data structures for data analysis, time series, and statistics"
709
+ groups = ["default"]
710
+ dependencies = [
711
+ "numpy>=1.22.4; python_version < \"3.11\"",
712
+ "numpy>=1.23.2; python_version == \"3.11\"",
713
+ "numpy>=1.26.0; python_version >= \"3.12\"",
714
+ "python-dateutil>=2.8.2",
715
+ "pytz>=2020.1",
716
+ "tzdata>=2022.7",
717
+ ]
718
+ files = [
719
+ {file = "pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53"},
720
+ {file = "pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35"},
721
+ {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908"},
722
+ {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89"},
723
+ {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98"},
724
+ {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084"},
725
+ {file = "pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b"},
726
+ {file = "pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b"},
727
+ ]
728
+
729
+ [[package]]
730
+ name = "pillow"
731
+ version = "12.0.0"
732
+ requires_python = ">=3.10"
733
+ summary = "Python Imaging Library (fork)"
734
+ groups = ["default"]
735
+ files = [
736
+ {file = "pillow-12.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:53561a4ddc36facb432fae7a9d8afbfaf94795414f5cdc5fc52f28c1dca90371"},
737
+ {file = "pillow-12.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:71db6b4c1653045dacc1585c1b0d184004f0d7e694c7b34ac165ca70c0838082"},
738
+ {file = "pillow-12.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2fa5f0b6716fc88f11380b88b31fe591a06c6315e955c096c35715788b339e3f"},
739
+ {file = "pillow-12.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:82240051c6ca513c616f7f9da06e871f61bfd7805f566275841af15015b8f98d"},
740
+ {file = "pillow-12.0.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55f818bd74fe2f11d4d7cbc65880a843c4075e0ac7226bc1a23261dbea531953"},
741
+ {file = "pillow-12.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b87843e225e74576437fd5b6a4c2205d422754f84a06942cfaf1dc32243e45a8"},
742
+ {file = "pillow-12.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c607c90ba67533e1b2355b821fef6764d1dd2cbe26b8c1005ae84f7aea25ff79"},
743
+ {file = "pillow-12.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:21f241bdd5080a15bc86d3466a9f6074a9c2c2b314100dd896ac81ee6db2f1ba"},
744
+ {file = "pillow-12.0.0-cp312-cp312-win32.whl", hash = "sha256:dd333073e0cacdc3089525c7df7d39b211bcdf31fc2824e49d01c6b6187b07d0"},
745
+ {file = "pillow-12.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:9fe611163f6303d1619bbcb653540a4d60f9e55e622d60a3108be0d5b441017a"},
746
+ {file = "pillow-12.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:7dfb439562f234f7d57b1ac6bc8fe7f838a4bd49c79230e0f6a1da93e82f1fad"},
747
+ {file = "pillow-12.0.0.tar.gz", hash = "sha256:87d4f8125c9988bfbed67af47dd7a953e2fc7b0cc1e7800ec6d2080d490bb353"},
748
+ ]
749
+
750
+ [[package]]
751
+ name = "pydantic"
752
+ version = "2.12.4"
753
+ requires_python = ">=3.9"
754
+ summary = "Data validation using Python type hints"
755
+ groups = ["default"]
756
+ dependencies = [
757
+ "annotated-types>=0.6.0",
758
+ "pydantic-core==2.41.5",
759
+ "typing-extensions>=4.14.1",
760
+ "typing-inspection>=0.4.2",
761
+ ]
762
+ files = [
763
+ {file = "pydantic-2.12.4-py3-none-any.whl", hash = "sha256:92d3d202a745d46f9be6df459ac5a064fdaa3c1c4cd8adcfa332ccf3c05f871e"},
764
+ {file = "pydantic-2.12.4.tar.gz", hash = "sha256:0f8cb9555000a4b5b617f66bfd2566264c4984b27589d3b845685983e8ea85ac"},
765
+ ]
766
+
767
+ [[package]]
768
+ name = "pydantic-core"
769
+ version = "2.41.5"
770
+ requires_python = ">=3.9"
771
+ summary = "Core functionality for Pydantic validation and serialization"
772
+ groups = ["default"]
773
+ dependencies = [
774
+ "typing-extensions>=4.14.1",
775
+ ]
776
+ files = [
777
+ {file = "pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7"},
778
+ {file = "pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0"},
779
+ {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69"},
780
+ {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75"},
781
+ {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05"},
782
+ {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc"},
783
+ {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c"},
784
+ {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5"},
785
+ {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c"},
786
+ {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294"},
787
+ {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1"},
788
+ {file = "pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d"},
789
+ {file = "pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815"},
790
+ {file = "pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3"},
791
+ {file = "pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e"},
792
+ ]
793
+
794
+ [[package]]
795
+ name = "pydub"
796
+ version = "0.25.1"
797
+ summary = "Manipulate audio with an simple and easy high level interface"
798
+ groups = ["default"]
799
+ files = [
800
+ {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"},
801
+ {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"},
802
+ ]
803
+
804
+ [[package]]
805
+ name = "pygments"
806
+ version = "2.19.2"
807
+ requires_python = ">=3.8"
808
+ summary = "Pygments is a syntax highlighting package written in Python."
809
+ groups = ["default"]
810
+ files = [
811
+ {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"},
812
+ {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"},
813
+ ]
814
+
815
+ [[package]]
816
+ name = "python-dateutil"
817
+ version = "2.9.0.post0"
818
+ requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
819
+ summary = "Extensions to the standard Python datetime module"
820
+ groups = ["default"]
821
+ dependencies = [
822
+ "six>=1.5",
823
+ ]
824
+ files = [
825
+ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"},
826
+ {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"},
827
+ ]
828
+
829
+ [[package]]
830
+ name = "python-multipart"
831
+ version = "0.0.20"
832
+ requires_python = ">=3.8"
833
+ summary = "A streaming multipart parser for Python"
834
+ groups = ["default"]
835
+ files = [
836
+ {file = "python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104"},
837
+ {file = "python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13"},
838
+ ]
839
+
840
+ [[package]]
841
+ name = "pytz"
842
+ version = "2025.2"
843
+ summary = "World timezone definitions, modern and historical"
844
+ groups = ["default"]
845
+ files = [
846
+ {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"},
847
+ {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"},
848
+ ]
849
+
850
+ [[package]]
851
+ name = "pyyaml"
852
+ version = "6.0.3"
853
+ requires_python = ">=3.8"
854
+ summary = "YAML parser and emitter for Python"
855
+ groups = ["default"]
856
+ files = [
857
+ {file = "pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196"},
858
+ {file = "pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"},
859
+ {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28"},
860
+ {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c"},
861
+ {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc"},
862
+ {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e"},
863
+ {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea"},
864
+ {file = "pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5"},
865
+ {file = "pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b"},
866
+ {file = "pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd"},
867
+ {file = "pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"},
868
+ ]
869
+
870
+ [[package]]
871
+ name = "regex"
872
+ version = "2025.11.3"
873
+ requires_python = ">=3.9"
874
+ summary = "Alternative regular expression module, to replace re."
875
+ groups = ["default"]
876
+ files = [
877
+ {file = "regex-2025.11.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bc8ab71e2e31b16e40868a40a69007bc305e1109bd4658eb6cad007e0bf67c41"},
878
+ {file = "regex-2025.11.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:22b29dda7e1f7062a52359fca6e58e548e28c6686f205e780b02ad8ef710de36"},
879
+ {file = "regex-2025.11.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3a91e4a29938bc1a082cc28fdea44be420bf2bebe2665343029723892eb073e1"},
880
+ {file = "regex-2025.11.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08b884f4226602ad40c5d55f52bf91a9df30f513864e0054bad40c0e9cf1afb7"},
881
+ {file = "regex-2025.11.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3e0b11b2b2433d1c39c7c7a30e3f3d0aeeea44c2a8d0bae28f6b95f639927a69"},
882
+ {file = "regex-2025.11.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:87eb52a81ef58c7ba4d45c3ca74e12aa4b4e77816f72ca25258a85b3ea96cb48"},
883
+ {file = "regex-2025.11.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a12ab1f5c29b4e93db518f5e3872116b7e9b1646c9f9f426f777b50d44a09e8c"},
884
+ {file = "regex-2025.11.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7521684c8c7c4f6e88e35ec89680ee1aa8358d3f09d27dfbdf62c446f5d4c695"},
885
+ {file = "regex-2025.11.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7fe6e5440584e94cc4b3f5f4d98a25e29ca12dccf8873679a635638349831b98"},
886
+ {file = "regex-2025.11.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:8e026094aa12b43f4fd74576714e987803a315c76edb6b098b9809db5de58f74"},
887
+ {file = "regex-2025.11.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:435bbad13e57eb5606a68443af62bed3556de2f46deb9f7d4237bc2f1c9fb3a0"},
888
+ {file = "regex-2025.11.3-cp312-cp312-win32.whl", hash = "sha256:3839967cf4dc4b985e1570fd8d91078f0c519f30491c60f9ac42a8db039be204"},
889
+ {file = "regex-2025.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:e721d1b46e25c481dc5ded6f4b3f66c897c58d2e8cfdf77bbced84339108b0b9"},
890
+ {file = "regex-2025.11.3-cp312-cp312-win_arm64.whl", hash = "sha256:64350685ff08b1d3a6fff33f45a9ca183dc1d58bbfe4981604e70ec9801bbc26"},
891
+ {file = "regex-2025.11.3.tar.gz", hash = "sha256:1fedc720f9bb2494ce31a58a1631f9c82df6a09b49c19517ea5cc280b4541e01"},
892
+ ]
893
+
894
+ [[package]]
895
+ name = "requests"
896
+ version = "2.32.5"
897
+ requires_python = ">=3.9"
898
+ summary = "Python HTTP for Humans."
899
+ groups = ["default"]
900
+ dependencies = [
901
+ "certifi>=2017.4.17",
902
+ "charset-normalizer<4,>=2",
903
+ "idna<4,>=2.5",
904
+ "urllib3<3,>=1.21.1",
905
+ ]
906
+ files = [
907
+ {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"},
908
+ {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"},
909
+ ]
910
+
911
+ [[package]]
912
+ name = "rich"
913
+ version = "14.2.0"
914
+ requires_python = ">=3.8.0"
915
+ summary = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
916
+ groups = ["default"]
917
+ dependencies = [
918
+ "markdown-it-py>=2.2.0",
919
+ "pygments<3.0.0,>=2.13.0",
920
+ ]
921
+ files = [
922
+ {file = "rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd"},
923
+ {file = "rich-14.2.0.tar.gz", hash = "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4"},
924
+ ]
925
+
926
+ [[package]]
927
+ name = "safehttpx"
928
+ version = "0.1.7"
929
+ requires_python = ">3.9"
930
+ summary = "A small Python library created to help developers protect their applications from Server Side Request Forgery (SSRF) attacks."
931
+ groups = ["default"]
932
+ dependencies = [
933
+ "httpx",
934
+ ]
935
+ files = [
936
+ {file = "safehttpx-0.1.7-py3-none-any.whl", hash = "sha256:c4f4a162db6993464d7ca3d7cc4af0ffc6515a606dfd220b9f82c6945d869cde"},
937
+ {file = "safehttpx-0.1.7.tar.gz", hash = "sha256:db201c0978c41eddb8bb480f3eee59dd67304fdd91646035e9d9a720049a9d23"},
938
+ ]
939
+
940
+ [[package]]
941
+ name = "safetensors"
942
+ version = "0.7.0"
943
+ requires_python = ">=3.9"
944
+ summary = ""
945
+ groups = ["default"]
946
+ files = [
947
+ {file = "safetensors-0.7.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c82f4d474cf725255d9e6acf17252991c3c8aac038d6ef363a4bf8be2f6db517"},
948
+ {file = "safetensors-0.7.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:94fd4858284736bb67a897a41608b5b0c2496c9bdb3bf2af1fa3409127f20d57"},
949
+ {file = "safetensors-0.7.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e07d91d0c92a31200f25351f4acb2bc6aff7f48094e13ebb1d0fb995b54b6542"},
950
+ {file = "safetensors-0.7.0-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8469155f4cb518bafb4acf4865e8bb9d6804110d2d9bdcaa78564b9fd841e104"},
951
+ {file = "safetensors-0.7.0-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:54bef08bf00a2bff599982f6b08e8770e09cc012d7bba00783fc7ea38f1fb37d"},
952
+ {file = "safetensors-0.7.0-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42cb091236206bb2016d245c377ed383aa7f78691748f3bb6ee1bfa51ae2ce6a"},
953
+ {file = "safetensors-0.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac7252938f0696ddea46f5e855dd3138444e82236e3be475f54929f0c510d48"},
954
+ {file = "safetensors-0.7.0-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1d060c70284127fa805085d8f10fbd0962792aed71879d00864acda69dbab981"},
955
+ {file = "safetensors-0.7.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cdab83a366799fa730f90a4ebb563e494f28e9e92c4819e556152ad55e43591b"},
956
+ {file = "safetensors-0.7.0-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:672132907fcad9f2aedcb705b2d7b3b93354a2aec1b2f706c4db852abe338f85"},
957
+ {file = "safetensors-0.7.0-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:5d72abdb8a4d56d4020713724ba81dac065fedb7f3667151c4a637f1d3fb26c0"},
958
+ {file = "safetensors-0.7.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b0f6d66c1c538d5a94a73aa9ddca8ccc4227e6c9ff555322ea40bdd142391dd4"},
959
+ {file = "safetensors-0.7.0-cp38-abi3-win32.whl", hash = "sha256:c74af94bf3ac15ac4d0f2a7c7b4663a15f8c2ab15ed0fc7531ca61d0835eccba"},
960
+ {file = "safetensors-0.7.0-cp38-abi3-win_amd64.whl", hash = "sha256:d1239932053f56f3456f32eb9625590cc7582e905021f94636202a864d470755"},
961
+ {file = "safetensors-0.7.0.tar.gz", hash = "sha256:07663963b67e8bd9f0b8ad15bb9163606cd27cc5a1b96235a50d8369803b96b0"},
962
+ ]
963
+
964
+ [[package]]
965
+ name = "semantic-version"
966
+ version = "2.10.0"
967
+ requires_python = ">=2.7"
968
+ summary = "A library implementing the 'SemVer' scheme."
969
+ groups = ["default"]
970
+ files = [
971
+ {file = "semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177"},
972
+ {file = "semantic_version-2.10.0.tar.gz", hash = "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c"},
973
+ ]
974
+
975
+ [[package]]
976
+ name = "setuptools"
977
+ version = "80.9.0"
978
+ requires_python = ">=3.9"
979
+ summary = "Easily download, build, install, upgrade, and uninstall Python packages"
980
+ groups = ["default"]
981
+ marker = "python_version >= \"3.12\""
982
+ files = [
983
+ {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"},
984
+ {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"},
985
+ ]
986
+
987
+ [[package]]
988
+ name = "shellingham"
989
+ version = "1.5.4"
990
+ requires_python = ">=3.7"
991
+ summary = "Tool to Detect Surrounding Shell"
992
+ groups = ["default"]
993
+ files = [
994
+ {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"},
995
+ {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"},
996
+ ]
997
+
998
+ [[package]]
999
+ name = "six"
1000
+ version = "1.17.0"
1001
+ requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
1002
+ summary = "Python 2 and 3 compatibility utilities"
1003
+ groups = ["default"]
1004
+ files = [
1005
+ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"},
1006
+ {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"},
1007
+ ]
1008
+
1009
+ [[package]]
1010
+ name = "starlette"
1011
+ version = "0.50.0"
1012
+ requires_python = ">=3.10"
1013
+ summary = "The little ASGI library that shines."
1014
+ groups = ["default"]
1015
+ dependencies = [
1016
+ "anyio<5,>=3.6.2",
1017
+ "typing-extensions>=4.10.0; python_version < \"3.13\"",
1018
+ ]
1019
+ files = [
1020
+ {file = "starlette-0.50.0-py3-none-any.whl", hash = "sha256:9e5391843ec9b6e472eed1365a78c8098cfceb7a74bfd4d6b1c0c0095efb3bca"},
1021
+ {file = "starlette-0.50.0.tar.gz", hash = "sha256:a2a17b22203254bcbc2e1f926d2d55f3f9497f769416b3190768befe598fa3ca"},
1022
+ ]
1023
+
1024
+ [[package]]
1025
+ name = "sympy"
1026
+ version = "1.14.0"
1027
+ requires_python = ">=3.9"
1028
+ summary = "Computer algebra system (CAS) in Python"
1029
+ groups = ["default"]
1030
+ dependencies = [
1031
+ "mpmath<1.4,>=1.1.0",
1032
+ ]
1033
+ files = [
1034
+ {file = "sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5"},
1035
+ {file = "sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517"},
1036
+ ]
1037
+
1038
+ [[package]]
1039
+ name = "tokenizers"
1040
+ version = "0.22.1"
1041
+ requires_python = ">=3.9"
1042
+ summary = ""
1043
+ groups = ["default"]
1044
+ dependencies = [
1045
+ "huggingface-hub<2.0,>=0.16.4",
1046
+ ]
1047
+ files = [
1048
+ {file = "tokenizers-0.22.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:59fdb013df17455e5f950b4b834a7b3ee2e0271e6378ccb33aa74d178b513c73"},
1049
+ {file = "tokenizers-0.22.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8d4e484f7b0827021ac5f9f71d4794aaef62b979ab7608593da22b1d2e3c4edc"},
1050
+ {file = "tokenizers-0.22.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d2962dd28bc67c1f205ab180578a78eef89ac60ca7ef7cbe9635a46a56422a"},
1051
+ {file = "tokenizers-0.22.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:38201f15cdb1f8a6843e6563e6e79f4abd053394992b9bbdf5213ea3469b4ae7"},
1052
+ {file = "tokenizers-0.22.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1cbe5454c9a15df1b3443c726063d930c16f047a3cc724b9e6e1a91140e5a21"},
1053
+ {file = "tokenizers-0.22.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7d094ae6312d69cc2a872b54b91b309f4f6fbce871ef28eb27b52a98e4d0214"},
1054
+ {file = "tokenizers-0.22.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afd7594a56656ace95cdd6df4cca2e4059d294c5cfb1679c57824b605556cb2f"},
1055
+ {file = "tokenizers-0.22.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ef6063d7a84994129732b47e7915e8710f27f99f3a3260b8a38fc7ccd083f4"},
1056
+ {file = "tokenizers-0.22.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ba0a64f450b9ef412c98f6bcd2a50c6df6e2443b560024a09fa6a03189726879"},
1057
+ {file = "tokenizers-0.22.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:331d6d149fa9c7d632cde4490fb8bbb12337fa3a0232e77892be656464f4b446"},
1058
+ {file = "tokenizers-0.22.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:607989f2ea68a46cb1dfbaf3e3aabdf3f21d8748312dbeb6263d1b3b66c5010a"},
1059
+ {file = "tokenizers-0.22.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a0f307d490295717726598ef6fa4f24af9d484809223bbc253b201c740a06390"},
1060
+ {file = "tokenizers-0.22.1-cp39-abi3-win32.whl", hash = "sha256:b5120eed1442765cd90b903bb6cfef781fd8fe64e34ccaecbae4c619b7b12a82"},
1061
+ {file = "tokenizers-0.22.1-cp39-abi3-win_amd64.whl", hash = "sha256:65fd6e3fb11ca1e78a6a93602490f134d1fdeb13bcef99389d5102ea318ed138"},
1062
+ {file = "tokenizers-0.22.1.tar.gz", hash = "sha256:61de6522785310a309b3407bac22d99c4db5dba349935e99e4d15ea2226af2d9"},
1063
+ ]
1064
+
1065
+ [[package]]
1066
+ name = "tomlkit"
1067
+ version = "0.13.3"
1068
+ requires_python = ">=3.8"
1069
+ summary = "Style preserving TOML library"
1070
+ groups = ["default"]
1071
+ files = [
1072
+ {file = "tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0"},
1073
+ {file = "tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1"},
1074
+ ]
1075
+
1076
+ [[package]]
1077
+ name = "torch"
1078
+ version = "2.9.1"
1079
+ requires_python = ">=3.10"
1080
+ summary = "Tensors and Dynamic neural networks in Python with strong GPU acceleration"
1081
+ groups = ["default"]
1082
+ dependencies = [
1083
+ "filelock",
1084
+ "fsspec>=0.8.5",
1085
+ "jinja2",
1086
+ "networkx>=2.5.1",
1087
+ "nvidia-cublas-cu12==12.8.4.1; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1088
+ "nvidia-cuda-cupti-cu12==12.8.90; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1089
+ "nvidia-cuda-nvrtc-cu12==12.8.93; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1090
+ "nvidia-cuda-runtime-cu12==12.8.90; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1091
+ "nvidia-cudnn-cu12==9.10.2.21; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1092
+ "nvidia-cufft-cu12==11.3.3.83; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1093
+ "nvidia-cufile-cu12==1.13.1.3; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1094
+ "nvidia-curand-cu12==10.3.9.90; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1095
+ "nvidia-cusolver-cu12==11.7.3.90; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1096
+ "nvidia-cusparse-cu12==12.5.8.93; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1097
+ "nvidia-cusparselt-cu12==0.7.1; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1098
+ "nvidia-nccl-cu12==2.27.5; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1099
+ "nvidia-nvjitlink-cu12==12.8.93; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1100
+ "nvidia-nvshmem-cu12==3.3.20; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1101
+ "nvidia-nvtx-cu12==12.8.90; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1102
+ "setuptools; python_version >= \"3.12\"",
1103
+ "sympy>=1.13.3",
1104
+ "triton==3.5.1; platform_system == \"Linux\" and platform_machine == \"x86_64\"",
1105
+ "typing-extensions>=4.10.0",
1106
+ ]
1107
+ files = [
1108
+ {file = "torch-2.9.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:da5f6f4d7f4940a173e5572791af238cb0b9e21b1aab592bd8b26da4c99f1cd6"},
1109
+ {file = "torch-2.9.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:27331cd902fb4322252657f3902adf1c4f6acad9dcad81d8df3ae14c7c4f07c4"},
1110
+ {file = "torch-2.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:81a285002d7b8cfd3fdf1b98aa8df138d41f1a8334fd9ea37511517cedf43083"},
1111
+ {file = "torch-2.9.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:c0d25d1d8e531b8343bea0ed811d5d528958f1dcbd37e7245bc686273177ad7e"},
1112
+ ]
1113
+
1114
+ [[package]]
1115
+ name = "tqdm"
1116
+ version = "4.67.1"
1117
+ requires_python = ">=3.7"
1118
+ summary = "Fast, Extensible Progress Meter"
1119
+ groups = ["default"]
1120
+ dependencies = [
1121
+ "colorama; platform_system == \"Windows\"",
1122
+ ]
1123
+ files = [
1124
+ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"},
1125
+ {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"},
1126
+ ]
1127
+
1128
+ [[package]]
1129
+ name = "transformers"
1130
+ version = "4.57.3"
1131
+ requires_python = ">=3.9.0"
1132
+ summary = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow"
1133
+ groups = ["default"]
1134
+ dependencies = [
1135
+ "filelock",
1136
+ "huggingface-hub<1.0,>=0.34.0",
1137
+ "numpy>=1.17",
1138
+ "packaging>=20.0",
1139
+ "pyyaml>=5.1",
1140
+ "regex!=2019.12.17",
1141
+ "requests",
1142
+ "safetensors>=0.4.3",
1143
+ "tokenizers<=0.23.0,>=0.22.0",
1144
+ "tqdm>=4.27",
1145
+ ]
1146
+ files = [
1147
+ {file = "transformers-4.57.3-py3-none-any.whl", hash = "sha256:c77d353a4851b1880191603d36acb313411d3577f6e2897814f333841f7003f4"},
1148
+ {file = "transformers-4.57.3.tar.gz", hash = "sha256:df4945029aaddd7c09eec5cad851f30662f8bd1746721b34cc031d70c65afebc"},
1149
+ ]
1150
+
1151
+ [[package]]
1152
+ name = "triton"
1153
+ version = "3.5.1"
1154
+ requires_python = "<3.15,>=3.10"
1155
+ summary = "A language and compiler for custom Deep Learning operations"
1156
+ groups = ["default"]
1157
+ marker = "platform_system == \"Linux\" and platform_machine == \"x86_64\""
1158
+ dependencies = [
1159
+ "importlib-metadata; python_version < \"3.10\"",
1160
+ ]
1161
+ files = [
1162
+ {file = "triton-3.5.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:275a045b6ed670dd1bd005c3e6c2d61846c74c66f4512d6f33cc027b11de8fd4"},
1163
+ {file = "triton-3.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d2c6b915a03888ab931a9fd3e55ba36785e1fe70cbea0b40c6ef93b20fc85232"},
1164
+ ]
1165
+
1166
+ [[package]]
1167
+ name = "typer"
1168
+ version = "0.20.0"
1169
+ requires_python = ">=3.8"
1170
+ summary = "Typer, build great CLIs. Easy to code. Based on Python type hints."
1171
+ groups = ["default"]
1172
+ dependencies = [
1173
+ "click>=8.0.0",
1174
+ "rich>=10.11.0",
1175
+ "shellingham>=1.3.0",
1176
+ "typing-extensions>=3.7.4.3",
1177
+ ]
1178
+ files = [
1179
+ {file = "typer-0.20.0-py3-none-any.whl", hash = "sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a"},
1180
+ {file = "typer-0.20.0.tar.gz", hash = "sha256:1aaf6494031793e4876fb0bacfa6a912b551cf43c1e63c800df8b1a866720c37"},
1181
+ ]
1182
+
1183
+ [[package]]
1184
+ name = "typing-extensions"
1185
+ version = "4.15.0"
1186
+ requires_python = ">=3.9"
1187
+ summary = "Backported and Experimental Type Hints for Python 3.9+"
1188
+ groups = ["default"]
1189
+ files = [
1190
+ {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"},
1191
+ {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"},
1192
+ ]
1193
+
1194
+ [[package]]
1195
+ name = "typing-inspection"
1196
+ version = "0.4.2"
1197
+ requires_python = ">=3.9"
1198
+ summary = "Runtime typing introspection tools"
1199
+ groups = ["default"]
1200
+ dependencies = [
1201
+ "typing-extensions>=4.12.0",
1202
+ ]
1203
+ files = [
1204
+ {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"},
1205
+ {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"},
1206
+ ]
1207
+
1208
+ [[package]]
1209
+ name = "tzdata"
1210
+ version = "2025.2"
1211
+ requires_python = ">=2"
1212
+ summary = "Provider of IANA time zone data"
1213
+ groups = ["default"]
1214
+ files = [
1215
+ {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"},
1216
+ {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"},
1217
+ ]
1218
+
1219
+ [[package]]
1220
+ name = "urllib3"
1221
+ version = "2.6.0"
1222
+ requires_python = ">=3.9"
1223
+ summary = "HTTP library with thread-safe connection pooling, file post, and more."
1224
+ groups = ["default"]
1225
+ files = [
1226
+ {file = "urllib3-2.6.0-py3-none-any.whl", hash = "sha256:c90f7a39f716c572c4e3e58509581ebd83f9b59cced005b7db7ad2d22b0db99f"},
1227
+ {file = "urllib3-2.6.0.tar.gz", hash = "sha256:cb9bcef5a4b345d5da5d145dc3e30834f58e8018828cbc724d30b4cb7d4d49f1"},
1228
+ ]
1229
+
1230
+ [[package]]
1231
+ name = "uvicorn"
1232
+ version = "0.38.0"
1233
+ requires_python = ">=3.9"
1234
+ summary = "The lightning-fast ASGI server."
1235
+ groups = ["default"]
1236
+ dependencies = [
1237
+ "click>=7.0",
1238
+ "h11>=0.8",
1239
+ "typing-extensions>=4.0; python_version < \"3.11\"",
1240
+ ]
1241
+ files = [
1242
+ {file = "uvicorn-0.38.0-py3-none-any.whl", hash = "sha256:48c0afd214ceb59340075b4a052ea1ee91c16fbc2a9b1469cca0e54566977b02"},
1243
+ {file = "uvicorn-0.38.0.tar.gz", hash = "sha256:fd97093bdd120a2609fc0d3afe931d4d4ad688b6e75f0f929fde1bc36fe0e91d"},
1244
+ ]
pyproject.toml ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [project]
2
+ name = "labelm2"
3
+ version = "0.1.0"
4
+ description = "Default template for PDM package"
5
+ authors = [
6
+ {name = "Patrice Ferlet", email = "[email protected]"},
7
+ ]
8
+ dependencies = ["gradio>=6.0.2", "torch>=2.9.1", "transformers>=4.57.3", "pillow>=12.0.0"]
9
+ requires-python = "==3.12.*"
10
+ readme = "README.md"
11
+ license = {text = "MIT"}
12
+
13
+
14
+ [tool.pdm]
15
+ distribution = false