From 1557e7ce3e036fb51eb118296f5cbff3b6dfbfa7 Mon Sep 17 00:00:00 2001 From: "Peter W. J. Staar" <91719829+PeterStaar-IBM@users.noreply.github.com> Date: Mon, 23 Jun 2025 14:47:26 +0200 Subject: [PATCH] feat: Support audio input (#1763) * scaffolding in place Signed-off-by: Peter Staar * doing scaffolding for audio pipeline Signed-off-by: Peter Staar * WIP: got first transcription working Signed-off-by: Peter Staar * all working, time to start cleaning up Signed-off-by: Peter Staar * first working ASR pipeline Signed-off-by: Peter Staar * added openai-whisper as a first transcription model Signed-off-by: Peter Staar * updating with asr_options Signed-off-by: Peter Staar * finalised the first working ASR pipeline with Whisper Signed-off-by: Peter Staar * use whisper from the latest git commit Signed-off-by: Michele Dolfi * Update docling/datamodel/pipeline_options.py Co-authored-by: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Signed-off-by: Peter W. J. Staar <91719829+PeterStaar-IBM@users.noreply.github.com> * Update docling/datamodel/pipeline_options.py Co-authored-by: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Signed-off-by: Peter W. J. Staar <91719829+PeterStaar-IBM@users.noreply.github.com> * updated comment Signed-off-by: Peter Staar * AudioBackend -> DummyBackend Signed-off-by: Christoph Auer * file rename Signed-off-by: Christoph Auer * Rename to NoOpBackend, add test for ASR pipeline Signed-off-by: Christoph Auer * Support every format in NoOpBackend Signed-off-by: Christoph Auer * Add missing audio file and test Signed-off-by: Christoph Auer * Install ffmpeg system dependency for ASR test Signed-off-by: Christoph Auer --------- Signed-off-by: Peter Staar Signed-off-by: Michele Dolfi Signed-off-by: Peter W. J. Staar <91719829+PeterStaar-IBM@users.noreply.github.com> Signed-off-by: Christoph Auer Co-authored-by: Michele Dolfi Co-authored-by: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Co-authored-by: Christoph Auer --- .github/workflows/checks.yml | 4 +- docling/backend/noop_backend.py | 51 +++ docling/cli/main.py | 96 ++++- docling/datamodel/asr_model_specs.py | 92 +++++ docling/datamodel/base_models.py | 3 + docling/datamodel/document.py | 4 +- docling/datamodel/pipeline_options.py | 13 +- .../datamodel/pipeline_options_asr_model.py | 57 +++ docling/document_converter.py | 8 + docling/pipeline/asr_pipeline.py | 253 +++++++++++++ pyproject.toml | 6 + tests/data/audio/sample_10s.mp3 | Bin 0 -> 160683 bytes tests/test_asr_pipeline.py | 59 +++ uv.lock | 357 +++++++++++++++--- 14 files changed, 941 insertions(+), 62 deletions(-) create mode 100644 docling/backend/noop_backend.py create mode 100644 docling/datamodel/asr_model_specs.py create mode 100644 docling/datamodel/pipeline_options_asr_model.py create mode 100644 docling/pipeline/asr_pipeline.py create mode 100644 tests/data/audio/sample_10s.mp3 create mode 100644 tests/test_asr_pipeline.py diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index f18fc88..e2eb19e 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -22,8 +22,8 @@ jobs: python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] steps: - uses: actions/checkout@v4 - - name: Install tesseract - run: sudo apt-get update && sudo apt-get install -y tesseract-ocr tesseract-ocr-eng tesseract-ocr-fra tesseract-ocr-deu tesseract-ocr-spa tesseract-ocr-script-latn libleptonica-dev libtesseract-dev pkg-config + - name: Install tesseract and ffmpeg + run: sudo apt-get update && sudo apt-get install -y ffmpeg tesseract-ocr tesseract-ocr-eng tesseract-ocr-fra tesseract-ocr-deu tesseract-ocr-spa tesseract-ocr-script-latn libleptonica-dev libtesseract-dev pkg-config - name: Set TESSDATA_PREFIX run: | echo "TESSDATA_PREFIX=$(dpkg -L tesseract-ocr-eng | grep tessdata$)" >> "$GITHUB_ENV" diff --git a/docling/backend/noop_backend.py b/docling/backend/noop_backend.py new file mode 100644 index 0000000..4974ba0 --- /dev/null +++ b/docling/backend/noop_backend.py @@ -0,0 +1,51 @@ +import logging +from io import BytesIO +from pathlib import Path +from typing import Set, Union + +from docling.backend.abstract_backend import AbstractDocumentBackend +from docling.datamodel.base_models import InputFormat +from docling.datamodel.document import InputDocument + +_log = logging.getLogger(__name__) + + +class NoOpBackend(AbstractDocumentBackend): + """ + A no-op backend that only validates input existence. + Used e.g. for audio files where actual processing is handled by the ASR pipeline. + """ + + def __init__(self, in_doc: "InputDocument", path_or_stream: Union[BytesIO, Path]): + super().__init__(in_doc, path_or_stream) + + _log.debug(f"NoOpBackend initialized for: {path_or_stream}") + + # Validate input + try: + if isinstance(self.path_or_stream, BytesIO): + # Check if stream has content + self.valid = len(self.path_or_stream.getvalue()) > 0 + _log.debug( + f"BytesIO stream length: {len(self.path_or_stream.getvalue())}" + ) + elif isinstance(self.path_or_stream, Path): + # Check if file exists + self.valid = self.path_or_stream.exists() + _log.debug(f"File exists: {self.valid}") + else: + self.valid = False + except Exception as e: + _log.error(f"NoOpBackend validation failed: {e}") + self.valid = False + + def is_valid(self) -> bool: + return self.valid + + @classmethod + def supports_pagination(cls) -> bool: + return False + + @classmethod + def supported_formats(cls) -> Set[InputFormat]: + return set(InputFormat) diff --git a/docling/cli/main.py b/docling/cli/main.py index 083f53b..ae275ea 100644 --- a/docling/cli/main.py +++ b/docling/cli/main.py @@ -29,6 +29,15 @@ from docling.backend.docling_parse_v4_backend import DoclingParseV4DocumentBacke from docling.backend.pdf_backend import PdfDocumentBackend from docling.backend.pypdfium2_backend import PyPdfiumDocumentBackend from docling.datamodel.accelerator_options import AcceleratorDevice, AcceleratorOptions +from docling.datamodel.asr_model_specs import ( + WHISPER_BASE, + WHISPER_LARGE, + WHISPER_MEDIUM, + WHISPER_SMALL, + WHISPER_TINY, + WHISPER_TURBO, + AsrModelType, +) from docling.datamodel.base_models import ( ConversionStatus, FormatToExtensions, @@ -37,12 +46,14 @@ from docling.datamodel.base_models import ( ) from docling.datamodel.document import ConversionResult from docling.datamodel.pipeline_options import ( + AsrPipelineOptions, EasyOcrOptions, OcrOptions, PaginatedPipelineOptions, PdfBackend, - PdfPipeline, PdfPipelineOptions, + PipelineOptions, + ProcessingPipeline, TableFormerMode, VlmPipelineOptions, ) @@ -54,8 +65,14 @@ from docling.datamodel.vlm_model_specs import ( SMOLDOCLING_TRANSFORMERS, VlmModelType, ) -from docling.document_converter import DocumentConverter, FormatOption, PdfFormatOption +from docling.document_converter import ( + AudioFormatOption, + DocumentConverter, + FormatOption, + PdfFormatOption, +) from docling.models.factories import get_ocr_factory +from docling.pipeline.asr_pipeline import AsrPipeline from docling.pipeline.vlm_pipeline import VlmPipeline warnings.filterwarnings(action="ignore", category=UserWarning, module="pydantic|torch") @@ -296,13 +313,17 @@ def convert( # noqa: C901 ), ] = ImageRefMode.EMBEDDED, pipeline: Annotated[ - PdfPipeline, + ProcessingPipeline, typer.Option(..., help="Choose the pipeline to process PDF or image files."), - ] = PdfPipeline.STANDARD, + ] = ProcessingPipeline.STANDARD, vlm_model: Annotated[ VlmModelType, typer.Option(..., help="Choose the VLM model to use with PDF or image files."), ] = VlmModelType.SMOLDOCLING, + asr_model: Annotated[ + AsrModelType, + typer.Option(..., help="Choose the ASR model to use with audio/video files."), + ] = AsrModelType.WHISPER_TINY, ocr: Annotated[ bool, typer.Option( @@ -450,12 +471,14 @@ def convert( # noqa: C901 ), ] = None, ): + log_format = "%(asctime)s\t%(levelname)s\t%(name)s: %(message)s" + if verbose == 0: - logging.basicConfig(level=logging.WARNING) + logging.basicConfig(level=logging.WARNING, format=log_format) elif verbose == 1: - logging.basicConfig(level=logging.INFO) + logging.basicConfig(level=logging.INFO, format=log_format) else: - logging.basicConfig(level=logging.DEBUG) + logging.basicConfig(level=logging.DEBUG, format=log_format) settings.debug.visualize_cells = debug_visualize_cells settings.debug.visualize_layout = debug_visualize_layout @@ -530,9 +553,12 @@ def convert( # noqa: C901 ocr_options.lang = ocr_lang_list accelerator_options = AcceleratorOptions(num_threads=num_threads, device=device) - pipeline_options: PaginatedPipelineOptions + # pipeline_options: PaginatedPipelineOptions + pipeline_options: PipelineOptions - if pipeline == PdfPipeline.STANDARD: + format_options: Dict[InputFormat, FormatOption] = {} + + if pipeline == ProcessingPipeline.STANDARD: pipeline_options = PdfPipelineOptions( allow_external_plugins=allow_external_plugins, enable_remote_services=enable_remote_services, @@ -574,7 +600,13 @@ def convert( # noqa: C901 pipeline_options=pipeline_options, backend=backend, # pdf_backend ) - elif pipeline == PdfPipeline.VLM: + + format_options = { + InputFormat.PDF: pdf_format_option, + InputFormat.IMAGE: pdf_format_option, + } + + elif pipeline == ProcessingPipeline.VLM: pipeline_options = VlmPipelineOptions( enable_remote_services=enable_remote_services, ) @@ -600,13 +632,48 @@ def convert( # noqa: C901 pipeline_cls=VlmPipeline, pipeline_options=pipeline_options ) + format_options = { + InputFormat.PDF: pdf_format_option, + InputFormat.IMAGE: pdf_format_option, + } + + elif pipeline == ProcessingPipeline.ASR: + pipeline_options = AsrPipelineOptions( + # enable_remote_services=enable_remote_services, + # artifacts_path = artifacts_path + ) + + if asr_model == AsrModelType.WHISPER_TINY: + pipeline_options.asr_options = WHISPER_TINY + elif asr_model == AsrModelType.WHISPER_SMALL: + pipeline_options.asr_options = WHISPER_SMALL + elif asr_model == AsrModelType.WHISPER_MEDIUM: + pipeline_options.asr_options = WHISPER_MEDIUM + elif asr_model == AsrModelType.WHISPER_BASE: + pipeline_options.asr_options = WHISPER_BASE + elif asr_model == AsrModelType.WHISPER_LARGE: + pipeline_options.asr_options = WHISPER_LARGE + elif asr_model == AsrModelType.WHISPER_TURBO: + pipeline_options.asr_options = WHISPER_TURBO + else: + _log.error(f"{asr_model} is not known") + raise ValueError(f"{asr_model} is not known") + + _log.info(f"pipeline_options: {pipeline_options}") + + audio_format_option = AudioFormatOption( + pipeline_cls=AsrPipeline, + pipeline_options=pipeline_options, + ) + + format_options = { + InputFormat.AUDIO: audio_format_option, + } + if artifacts_path is not None: pipeline_options.artifacts_path = artifacts_path + # audio_pipeline_options.artifacts_path = artifacts_path - format_options: Dict[InputFormat, FormatOption] = { - InputFormat.PDF: pdf_format_option, - InputFormat.IMAGE: pdf_format_option, - } doc_converter = DocumentConverter( allowed_formats=from_formats, format_options=format_options, @@ -614,6 +681,7 @@ def convert( # noqa: C901 start_time = time.time() + _log.info(f"paths: {input_doc_paths}") conv_results = doc_converter.convert_all( input_doc_paths, headers=parsed_headers, raises_on_error=abort_on_error ) diff --git a/docling/datamodel/asr_model_specs.py b/docling/datamodel/asr_model_specs.py new file mode 100644 index 0000000..95287ad --- /dev/null +++ b/docling/datamodel/asr_model_specs.py @@ -0,0 +1,92 @@ +import logging +from enum import Enum + +from pydantic import ( + AnyUrl, +) + +from docling.datamodel.accelerator_options import AcceleratorDevice +from docling.datamodel.pipeline_options_asr_model import ( + # AsrResponseFormat, + # ApiAsrOptions, + InferenceAsrFramework, + InlineAsrNativeWhisperOptions, + TransformersModelType, +) + +_log = logging.getLogger(__name__) + +WHISPER_TINY = InlineAsrNativeWhisperOptions( + repo_id="tiny", + inference_framework=InferenceAsrFramework.WHISPER, + verbose=True, + timestamps=True, + word_timestamps=True, + temperatue=0.0, + max_new_tokens=256, + max_time_chunk=30.0, +) + +WHISPER_SMALL = InlineAsrNativeWhisperOptions( + repo_id="small", + inference_framework=InferenceAsrFramework.WHISPER, + verbose=True, + timestamps=True, + word_timestamps=True, + temperatue=0.0, + max_new_tokens=256, + max_time_chunk=30.0, +) + +WHISPER_MEDIUM = InlineAsrNativeWhisperOptions( + repo_id="medium", + inference_framework=InferenceAsrFramework.WHISPER, + verbose=True, + timestamps=True, + word_timestamps=True, + temperatue=0.0, + max_new_tokens=256, + max_time_chunk=30.0, +) + +WHISPER_BASE = InlineAsrNativeWhisperOptions( + repo_id="base", + inference_framework=InferenceAsrFramework.WHISPER, + verbose=True, + timestamps=True, + word_timestamps=True, + temperatue=0.0, + max_new_tokens=256, + max_time_chunk=30.0, +) + +WHISPER_LARGE = InlineAsrNativeWhisperOptions( + repo_id="large", + inference_framework=InferenceAsrFramework.WHISPER, + verbose=True, + timestamps=True, + word_timestamps=True, + temperatue=0.0, + max_new_tokens=256, + max_time_chunk=30.0, +) + +WHISPER_TURBO = InlineAsrNativeWhisperOptions( + repo_id="turbo", + inference_framework=InferenceAsrFramework.WHISPER, + verbose=True, + timestamps=True, + word_timestamps=True, + temperatue=0.0, + max_new_tokens=256, + max_time_chunk=30.0, +) + + +class AsrModelType(str, Enum): + WHISPER_TINY = "whisper_tiny" + WHISPER_SMALL = "whisper_small" + WHISPER_MEDIUM = "whisper_medium" + WHISPER_BASE = "whisper_base" + WHISPER_LARGE = "whisper_large" + WHISPER_TURBO = "whisper_turbo" diff --git a/docling/datamodel/base_models.py b/docling/datamodel/base_models.py index c1fdb03..f76a066 100644 --- a/docling/datamodel/base_models.py +++ b/docling/datamodel/base_models.py @@ -49,6 +49,7 @@ class InputFormat(str, Enum): XML_USPTO = "xml_uspto" XML_JATS = "xml_jats" JSON_DOCLING = "json_docling" + AUDIO = "audio" class OutputFormat(str, Enum): @@ -73,6 +74,7 @@ FormatToExtensions: Dict[InputFormat, List[str]] = { InputFormat.XLSX: ["xlsx", "xlsm"], InputFormat.XML_USPTO: ["xml", "txt"], InputFormat.JSON_DOCLING: ["json"], + InputFormat.AUDIO: ["wav", "mp3"], } FormatToMimeType: Dict[InputFormat, List[str]] = { @@ -104,6 +106,7 @@ FormatToMimeType: Dict[InputFormat, List[str]] = { ], InputFormat.XML_USPTO: ["application/xml", "text/plain"], InputFormat.JSON_DOCLING: ["application/json"], + InputFormat.AUDIO: ["audio/x-wav", "audio/mpeg", "audio/wav", "audio/mp3"], } MimeTypeToFormat: dict[str, list[InputFormat]] = { diff --git a/docling/datamodel/document.py b/docling/datamodel/document.py index 4c71f5c..9f5cf82 100644 --- a/docling/datamodel/document.py +++ b/docling/datamodel/document.py @@ -249,7 +249,7 @@ class _DocumentConversionInput(BaseModel): backend: Type[AbstractDocumentBackend] if format not in format_options.keys(): _log.error( - f"Input document {obj.name} does not match any allowed format." + f"Input document {obj.name} with format {format} does not match any allowed format: ({format_options.keys()})" ) backend = _DummyBackend else: @@ -318,6 +318,8 @@ class _DocumentConversionInput(BaseModel): mime = mime or _DocumentConversionInput._detect_csv(content) mime = mime or "text/plain" formats = MimeTypeToFormat.get(mime, []) + _log.info(f"detected formats: {formats}") + if formats: if len(formats) == 1 and mime not in ("text/plain"): return formats[0] diff --git a/docling/datamodel/pipeline_options.py b/docling/datamodel/pipeline_options.py index 5995f45..35f45a6 100644 --- a/docling/datamodel/pipeline_options.py +++ b/docling/datamodel/pipeline_options.py @@ -11,8 +11,13 @@ from pydantic import ( ) from typing_extensions import deprecated +from docling.datamodel import asr_model_specs + # Import the following for backwards compatibility from docling.datamodel.accelerator_options import AcceleratorDevice, AcceleratorOptions +from docling.datamodel.pipeline_options_asr_model import ( + InlineAsrOptions, +) from docling.datamodel.pipeline_options_vlm_model import ( ApiVlmOptions, InferenceFramework, @@ -260,6 +265,11 @@ class VlmPipelineOptions(PaginatedPipelineOptions): ) +class AsrPipelineOptions(PipelineOptions): + asr_options: Union[InlineAsrOptions] = asr_model_specs.WHISPER_TINY + artifacts_path: Optional[Union[Path, str]] = None + + class PdfPipelineOptions(PaginatedPipelineOptions): """Options for the PDF pipeline.""" @@ -297,6 +307,7 @@ class PdfPipelineOptions(PaginatedPipelineOptions): ) -class PdfPipeline(str, Enum): +class ProcessingPipeline(str, Enum): STANDARD = "standard" VLM = "vlm" + ASR = "asr" diff --git a/docling/datamodel/pipeline_options_asr_model.py b/docling/datamodel/pipeline_options_asr_model.py new file mode 100644 index 0000000..20e2e45 --- /dev/null +++ b/docling/datamodel/pipeline_options_asr_model.py @@ -0,0 +1,57 @@ +from enum import Enum +from typing import Any, Dict, List, Literal, Optional, Union + +from pydantic import AnyUrl, BaseModel +from typing_extensions import deprecated + +from docling.datamodel.accelerator_options import AcceleratorDevice +from docling.datamodel.pipeline_options_vlm_model import ( + # InferenceFramework, + TransformersModelType, +) + + +class BaseAsrOptions(BaseModel): + kind: str + # prompt: str + + +class InferenceAsrFramework(str, Enum): + # MLX = "mlx" # disabled for now + # TRANSFORMERS = "transformers" # disabled for now + WHISPER = "whisper" + + +class InlineAsrOptions(BaseAsrOptions): + kind: Literal["inline_model_options"] = "inline_model_options" + + repo_id: str + + verbose: bool = False + timestamps: bool = True + + temperature: float = 0.0 + max_new_tokens: int = 256 + max_time_chunk: float = 30.0 + + torch_dtype: Optional[str] = None + supported_devices: List[AcceleratorDevice] = [ + AcceleratorDevice.CPU, + AcceleratorDevice.CUDA, + AcceleratorDevice.MPS, + ] + + @property + def repo_cache_folder(self) -> str: + return self.repo_id.replace("/", "--") + + +class InlineAsrNativeWhisperOptions(InlineAsrOptions): + inference_framework: InferenceAsrFramework = InferenceAsrFramework.WHISPER + + language: str = "en" + supported_devices: List[AcceleratorDevice] = [ + AcceleratorDevice.CPU, + AcceleratorDevice.CUDA, + ] + word_timestamps: bool = True diff --git a/docling/document_converter.py b/docling/document_converter.py index e553c08..1a0a9d7 100644 --- a/docling/document_converter.py +++ b/docling/document_converter.py @@ -19,6 +19,7 @@ from docling.backend.md_backend import MarkdownDocumentBackend from docling.backend.msexcel_backend import MsExcelDocumentBackend from docling.backend.mspowerpoint_backend import MsPowerpointDocumentBackend from docling.backend.msword_backend import MsWordDocumentBackend +from docling.backend.noop_backend import NoOpBackend from docling.backend.xml.jats_backend import JatsDocumentBackend from docling.backend.xml.uspto_backend import PatentUsptoDocumentBackend from docling.datamodel.base_models import ( @@ -41,6 +42,7 @@ from docling.datamodel.settings import ( settings, ) from docling.exceptions import ConversionError +from docling.pipeline.asr_pipeline import AsrPipeline from docling.pipeline.base_pipeline import BasePipeline from docling.pipeline.simple_pipeline import SimplePipeline from docling.pipeline.standard_pdf_pipeline import StandardPdfPipeline @@ -118,6 +120,11 @@ class PdfFormatOption(FormatOption): backend: Type[AbstractDocumentBackend] = DoclingParseV4DocumentBackend +class AudioFormatOption(FormatOption): + pipeline_cls: Type = AsrPipeline + backend: Type[AbstractDocumentBackend] = NoOpBackend + + def _get_default_option(format: InputFormat) -> FormatOption: format_to_default_options = { InputFormat.CSV: FormatOption( @@ -156,6 +163,7 @@ def _get_default_option(format: InputFormat) -> FormatOption: InputFormat.JSON_DOCLING: FormatOption( pipeline_cls=SimplePipeline, backend=DoclingJSONBackend ), + InputFormat.AUDIO: FormatOption(pipeline_cls=AsrPipeline, backend=NoOpBackend), } if (options := format_to_default_options.get(format)) is not None: return options diff --git a/docling/pipeline/asr_pipeline.py b/docling/pipeline/asr_pipeline.py new file mode 100644 index 0000000..94fa634 --- /dev/null +++ b/docling/pipeline/asr_pipeline.py @@ -0,0 +1,253 @@ +import logging +import os +import re +from io import BytesIO +from pathlib import Path +from typing import List, Optional, Union, cast + +from docling_core.types.doc import DoclingDocument, DocumentOrigin + +# import whisper # type: ignore +# import librosa +# import numpy as np +# import soundfile as sf # type: ignore +from docling_core.types.doc.labels import DocItemLabel +from pydantic import BaseModel, Field, validator + +from docling.backend.abstract_backend import AbstractDocumentBackend +from docling.backend.noop_backend import NoOpBackend + +# from pydub import AudioSegment # type: ignore +# from transformers import WhisperForConditionalGeneration, WhisperProcessor, pipeline +from docling.datamodel.accelerator_options import ( + AcceleratorOptions, +) +from docling.datamodel.base_models import ( + ConversionStatus, + FormatToMimeType, +) +from docling.datamodel.document import ConversionResult, InputDocument +from docling.datamodel.pipeline_options import ( + AsrPipelineOptions, +) +from docling.datamodel.pipeline_options_asr_model import ( + InlineAsrNativeWhisperOptions, + # AsrResponseFormat, + InlineAsrOptions, +) +from docling.datamodel.pipeline_options_vlm_model import ( + InferenceFramework, +) +from docling.datamodel.settings import settings +from docling.pipeline.base_pipeline import BasePipeline +from docling.utils.accelerator_utils import decide_device +from docling.utils.profiling import ProfilingScope, TimeRecorder + +_log = logging.getLogger(__name__) + + +class _ConversationWord(BaseModel): + text: str + start_time: Optional[float] = Field( + None, description="Start time in seconds from video start" + ) + end_time: Optional[float] = Field( + None, ge=0, description="End time in seconds from video start" + ) + + +class _ConversationItem(BaseModel): + text: str + start_time: Optional[float] = Field( + None, description="Start time in seconds from video start" + ) + end_time: Optional[float] = Field( + None, ge=0, description="End time in seconds from video start" + ) + speaker_id: Optional[int] = Field(None, description="Numeric speaker identifier") + speaker: Optional[str] = Field( + None, description="Speaker name, defaults to speaker-{speaker_id}" + ) + words: Optional[list[_ConversationWord]] = Field( + None, description="Individual words with time-stamps" + ) + + def __lt__(self, other): + if not isinstance(other, _ConversationItem): + return NotImplemented + return self.start_time < other.start_time + + def __eq__(self, other): + if not isinstance(other, _ConversationItem): + return NotImplemented + return self.start_time == other.start_time + + def to_string(self) -> str: + """Format the conversation entry as a string""" + result = "" + if (self.start_time is not None) and (self.end_time is not None): + result += f"[time: {self.start_time}-{self.end_time}] " + + if self.speaker is not None: + result += f"[speaker:{self.speaker}] " + + result += self.text + return result + + +class _NativeWhisperModel: + def __init__( + self, + enabled: bool, + artifacts_path: Optional[Path], + accelerator_options: AcceleratorOptions, + asr_options: InlineAsrNativeWhisperOptions, + ): + """ + Transcriber using native Whisper. + """ + self.enabled = enabled + + _log.info(f"artifacts-path: {artifacts_path}") + _log.info(f"accelerator_options: {accelerator_options}") + + if self.enabled: + try: + import whisper # type: ignore + except ImportError: + raise ImportError( + "whisper is not installed. Please install it via `pip install openai-whisper` or do `uv sync --extra asr`." + ) + self.asr_options = asr_options + self.max_tokens = asr_options.max_new_tokens + self.temperature = asr_options.temperature + + self.device = decide_device( + accelerator_options.device, + supported_devices=asr_options.supported_devices, + ) + _log.info(f"Available device for Whisper: {self.device}") + + self.model_name = asr_options.repo_id + _log.info(f"loading _NativeWhisperModel({self.model_name})") + if artifacts_path is not None: + _log.info(f"loading {self.model_name} from {artifacts_path}") + self.model = whisper.load_model( + name=self.model_name, + device=self.device, + download_root=str(artifacts_path), + ) + else: + self.model = whisper.load_model( + name=self.model_name, device=self.device + ) + + self.verbose = asr_options.verbose + self.timestamps = asr_options.timestamps + self.word_timestamps = asr_options.word_timestamps + + def run(self, conv_res: ConversionResult) -> ConversionResult: + audio_path: Path = Path(conv_res.input.file).resolve() + + try: + conversation = self.transcribe(audio_path) + + # Ensure we have a proper DoclingDocument + origin = DocumentOrigin( + filename=conv_res.input.file.name or "audio.wav", + mimetype="audio/x-wav", + binary_hash=conv_res.input.document_hash, + ) + conv_res.document = DoclingDocument( + name=conv_res.input.file.stem or "audio.wav", origin=origin + ) + + for citem in conversation: + conv_res.document.add_text( + label=DocItemLabel.TEXT, text=citem.to_string() + ) + + conv_res.status = ConversionStatus.SUCCESS + return conv_res + + except Exception as exc: + _log.error(f"Audio tranciption has an error: {exc}") + + conv_res.status = ConversionStatus.FAILURE + return conv_res + + def transcribe(self, fpath: Path) -> list[_ConversationItem]: + result = self.model.transcribe( + str(fpath), verbose=self.verbose, word_timestamps=self.word_timestamps + ) + + convo: list[_ConversationItem] = [] + for _ in result["segments"]: + item = _ConversationItem( + start_time=_["start"], end_time=_["end"], text=_["text"], words=[] + ) + if "words" in _ and self.word_timestamps: + item.words = [] + for __ in _["words"]: + item.words.append( + _ConversationWord( + start_time=__["start"], + end_time=__["end"], + text=__["word"], + ) + ) + convo.append(item) + + return convo + + +class AsrPipeline(BasePipeline): + def __init__(self, pipeline_options: AsrPipelineOptions): + super().__init__(pipeline_options) + self.keep_backend = True + + self.pipeline_options: AsrPipelineOptions = pipeline_options + + artifacts_path: Optional[Path] = None + if pipeline_options.artifacts_path is not None: + artifacts_path = Path(pipeline_options.artifacts_path).expanduser() + elif settings.artifacts_path is not None: + artifacts_path = Path(settings.artifacts_path).expanduser() + + if artifacts_path is not None and not artifacts_path.is_dir(): + raise RuntimeError( + f"The value of {artifacts_path=} is not valid. " + "When defined, it must point to a folder containing all models required by the pipeline." + ) + + if isinstance(self.pipeline_options.asr_options, InlineAsrNativeWhisperOptions): + asr_options: InlineAsrNativeWhisperOptions = ( + self.pipeline_options.asr_options + ) + self._model = _NativeWhisperModel( + enabled=True, # must be always enabled for this pipeline to make sense. + artifacts_path=artifacts_path, + accelerator_options=pipeline_options.accelerator_options, + asr_options=asr_options, + ) + else: + _log.error(f"No model support for {self.pipeline_options.asr_options}") + + def _determine_status(self, conv_res: ConversionResult) -> ConversionStatus: + status = ConversionStatus.SUCCESS + return status + + @classmethod + def get_default_options(cls) -> AsrPipelineOptions: + return AsrPipelineOptions() + + def _build_document(self, conv_res: ConversionResult) -> ConversionResult: + _log.info(f"start _build_document in AsrPipeline: {conv_res.input.file}") + with TimeRecorder(conv_res, "doc_build", scope=ProfilingScope.DOCUMENT): + self._model.run(conv_res=conv_res) + + return conv_res + + @classmethod + def is_backend_supported(cls, backend: AbstractDocumentBackend): + return isinstance(backend, NoOpBackend) diff --git a/pyproject.toml b/pyproject.toml index 2c818b8..7235349 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -99,6 +99,9 @@ rapidocr = [ # 'onnxruntime (>=1.7.0,<2.0.0) ; python_version >= "3.10"', # 'onnxruntime (>=1.7.0,<1.20.0) ; python_version < "3.10"', ] +asr = [ + "openai-whisper>=20240930", +] [dependency-groups] dev = [ @@ -145,6 +148,9 @@ constraints = [ package = true default-groups = "all" +[tool.uv.sources] +openai-whisper = { git = "https://github.com/openai/whisper.git", rev = "dd985ac4b90cafeef8712f2998d62c59c3e62d22" } + [tool.setuptools.packages.find] include = ["docling*"] diff --git a/tests/data/audio/sample_10s.mp3 b/tests/data/audio/sample_10s.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..93a7ec73b020c56d6fa428ed43a251df112d1f72 GIT binary patch literal 160683 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

0~j6)JuVuCJEdfVR#(JA4Ud~! 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 literal 0 HcmV?d00001 diff --git a/tests/test_asr_pipeline.py b/tests/test_asr_pipeline.py new file mode 100644 index 0000000..595cd60 --- /dev/null +++ b/tests/test_asr_pipeline.py @@ -0,0 +1,59 @@ +from pathlib import Path + +import pytest + +from docling.datamodel import asr_model_specs +from docling.datamodel.base_models import ConversionStatus, InputFormat +from docling.datamodel.document import ConversionResult +from docling.datamodel.pipeline_options import AsrPipelineOptions +from docling.document_converter import AudioFormatOption, DocumentConverter +from docling.pipeline.asr_pipeline import AsrPipeline + + +@pytest.fixture +def test_audio_path(): + return Path("./tests/data/audio/sample_10s.mp3") + + +def get_asr_converter(): + """Create a DocumentConverter configured for ASR with whisper_turbo model.""" + pipeline_options = AsrPipelineOptions() + pipeline_options.asr_options = asr_model_specs.WHISPER_TINY + + converter = DocumentConverter( + format_options={ + InputFormat.AUDIO: AudioFormatOption( + pipeline_cls=AsrPipeline, + pipeline_options=pipeline_options, + ) + } + ) + return converter + + +def test_asr_pipeline_conversion(test_audio_path): + """Test ASR pipeline conversion using whisper_turbo model on sample_10s.mp3.""" + # Check if the test audio file exists + assert test_audio_path.exists(), f"Test audio file not found: {test_audio_path}" + + converter = get_asr_converter() + + # Convert the audio file + doc_result: ConversionResult = converter.convert(test_audio_path) + + # Verify conversion was successful + assert doc_result.status == ConversionStatus.SUCCESS, ( + f"Conversion failed with status: {doc_result.status}" + ) + + # Verify we have a document + assert doc_result.document is not None, "No document was created" + + # Verify we have text content (transcribed audio) + texts = doc_result.document.texts + assert len(texts) > 0, "No text content found in transcribed audio" + + # Print transcribed text for verification (optional, for debugging) + print(f"Transcribed text from {test_audio_path.name}:") + for i, text_item in enumerate(texts): + print(f" {i + 1}: {text_item.text}") diff --git a/uv.lock b/uv.lock index 83b43b4..8a5dce4 100644 --- a/uv.lock +++ b/uv.lock @@ -7,11 +7,14 @@ resolution-markers = [ "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.10.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version >= '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", "(python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12' and python_full_version < '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", @@ -536,11 +539,14 @@ resolution-markers = [ "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.10.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version >= '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", "(python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12' and python_full_version < '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", @@ -844,6 +850,9 @@ dependencies = [ ] [package.optional-dependencies] +asr = [ + { name = "openai-whisper" }, +] ocrmac = [ { name = "ocrmac", marker = "sys_platform == 'darwin'" }, ] @@ -918,6 +927,7 @@ requires-dist = [ { name = "mlx-vlm", marker = "python_full_version >= '3.10' and platform_machine == 'arm64' and sys_platform == 'darwin' and extra == 'vlm'", specifier = ">=0.1.22" }, { name = "ocrmac", marker = "sys_platform == 'darwin' and extra == 'ocrmac'", specifier = ">=1.0.0,<2.0.0" }, { name = "onnxruntime", marker = "extra == 'rapidocr'", specifier = ">=1.7.0,<2.0.0" }, + { name = "openai-whisper", marker = "extra == 'asr'", git = "https://github.com/openai/whisper.git?rev=dd985ac4b90cafeef8712f2998d62c59c3e62d22" }, { name = "openpyxl", specifier = ">=3.1.5,<4.0.0" }, { name = "pandas", specifier = ">=2.1.4,<3.0.0" }, { name = "pillow", specifier = ">=10.0.0,<12.0.0" }, @@ -937,7 +947,7 @@ requires-dist = [ { name = "transformers", marker = "extra == 'vlm'", specifier = ">=4.46.0,<5.0.0" }, { name = "typer", specifier = ">=0.12.5,<0.17.0" }, ] -provides-extras = ["tesserocr", "ocrmac", "vlm", "rapidocr"] +provides-extras = ["tesserocr", "ocrmac", "vlm", "rapidocr", "asr"] [package.metadata.requires-dev] constraints = [ @@ -1752,11 +1762,14 @@ resolution-markers = [ "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version >= '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", "(python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12' and python_full_version < '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", @@ -2139,6 +2152,89 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl", hash = "sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc", size = 12097, upload-time = "2024-04-05T13:03:10.514Z" }, ] +[[package]] +name = "llvmlite" +version = "0.43.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version < '3.10' and platform_machine != 'arm64' and sys_platform == 'darwin') or (python_full_version < '3.10' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.10' and sys_platform != 'darwin' and sys_platform != 'linux')", +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/3d/f513755f285db51ab363a53e898b85562e950f79a2e6767a364530c2f645/llvmlite-0.43.0.tar.gz", hash = "sha256:ae2b5b5c3ef67354824fb75517c8db5fbe93bc02cd9671f3c62271626bc041d5", size = 157069, upload-time = "2024-06-13T18:09:32.641Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/ff/6ca7e98998b573b4bd6566f15c35e5c8bea829663a6df0c7aa55ab559da9/llvmlite-0.43.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a289af9a1687c6cf463478f0fa8e8aa3b6fb813317b0d70bf1ed0759eab6f761", size = 31064408, upload-time = "2024-06-13T18:08:13.462Z" }, + { url = "https://files.pythonhosted.org/packages/ca/5c/a27f9257f86f0cda3f764ff21d9f4217b9f6a0d45e7a39ecfa7905f524ce/llvmlite-0.43.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d4fd101f571a31acb1559ae1af30f30b1dc4b3186669f92ad780e17c81e91bc", size = 28793153, upload-time = "2024-06-13T18:08:17.336Z" }, + { url = "https://files.pythonhosted.org/packages/7e/3c/4410f670ad0a911227ea2ecfcba9f672a77cf1924df5280c4562032ec32d/llvmlite-0.43.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d434ec7e2ce3cc8f452d1cd9a28591745de022f931d67be688a737320dfcead", size = 42857276, upload-time = "2024-06-13T18:08:21.071Z" }, + { url = "https://files.pythonhosted.org/packages/c6/21/2ffbab5714e72f2483207b4a1de79b2eecd9debbf666ff4e7067bcc5c134/llvmlite-0.43.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6912a87782acdff6eb8bf01675ed01d60ca1f2551f8176a300a886f09e836a6a", size = 43871781, upload-time = "2024-06-13T18:08:26.32Z" }, + { url = "https://files.pythonhosted.org/packages/f2/26/b5478037c453554a61625ef1125f7e12bb1429ae11c6376f47beba9b0179/llvmlite-0.43.0-cp310-cp310-win_amd64.whl", hash = "sha256:14f0e4bf2fd2d9a75a3534111e8ebeb08eda2f33e9bdd6dfa13282afacdde0ed", size = 28123487, upload-time = "2024-06-13T18:08:30.348Z" }, + { url = "https://files.pythonhosted.org/packages/95/8c/de3276d773ab6ce3ad676df5fab5aac19696b2956319d65d7dd88fb10f19/llvmlite-0.43.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8d0618cb9bfe40ac38a9633f2493d4d4e9fcc2f438d39a4e854f39cc0f5f98", size = 31064409, upload-time = "2024-06-13T18:08:34.006Z" }, + { url = "https://files.pythonhosted.org/packages/ee/e1/38deed89ced4cf378c61e232265cfe933ccde56ae83c901aa68b477d14b1/llvmlite-0.43.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0a9a1a39d4bf3517f2af9d23d479b4175ead205c592ceeb8b89af48a327ea57", size = 28793149, upload-time = "2024-06-13T18:08:37.42Z" }, + { url = "https://files.pythonhosted.org/packages/2f/b2/4429433eb2dc8379e2cb582502dca074c23837f8fd009907f78a24de4c25/llvmlite-0.43.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1da416ab53e4f7f3bc8d4eeba36d801cc1894b9fbfbf2022b29b6bad34a7df2", size = 42857277, upload-time = "2024-06-13T18:08:40.822Z" }, + { url = "https://files.pythonhosted.org/packages/6b/99/5d00a7d671b1ba1751fc9f19d3b36f3300774c6eebe2bcdb5f6191763eb4/llvmlite-0.43.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:977525a1e5f4059316b183fb4fd34fa858c9eade31f165427a3977c95e3ee749", size = 43871781, upload-time = "2024-06-13T18:08:46.41Z" }, + { url = "https://files.pythonhosted.org/packages/20/ab/ed5ed3688c6ba4f0b8d789da19fd8e30a9cf7fc5852effe311bc5aefe73e/llvmlite-0.43.0-cp311-cp311-win_amd64.whl", hash = "sha256:d5bd550001d26450bd90777736c69d68c487d17bf371438f975229b2b8241a91", size = 28107433, upload-time = "2024-06-13T18:08:50.834Z" }, + { url = "https://files.pythonhosted.org/packages/0b/67/9443509e5d2b6d8587bae3ede5598fa8bd586b1c7701696663ea8af15b5b/llvmlite-0.43.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f99b600aa7f65235a5a05d0b9a9f31150c390f31261f2a0ba678e26823ec38f7", size = 31064409, upload-time = "2024-06-13T18:08:54.375Z" }, + { url = "https://files.pythonhosted.org/packages/a2/9c/24139d3712d2d352e300c39c0e00d167472c08b3bd350c3c33d72c88ff8d/llvmlite-0.43.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:35d80d61d0cda2d767f72de99450766250560399edc309da16937b93d3b676e7", size = 28793145, upload-time = "2024-06-13T18:08:57.953Z" }, + { url = "https://files.pythonhosted.org/packages/bf/f1/4c205a48488e574ee9f6505d50e84370a978c90f08dab41a42d8f2c576b6/llvmlite-0.43.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eccce86bba940bae0d8d48ed925f21dbb813519169246e2ab292b5092aba121f", size = 42857276, upload-time = "2024-06-13T18:09:02.067Z" }, + { url = "https://files.pythonhosted.org/packages/00/5f/323c4d56e8401c50185fd0e875fcf06b71bf825a863699be1eb10aa2a9cb/llvmlite-0.43.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df6509e1507ca0760787a199d19439cc887bfd82226f5af746d6977bd9f66844", size = 43871781, upload-time = "2024-06-13T18:09:06.667Z" }, + { url = "https://files.pythonhosted.org/packages/c6/94/dea10e263655ce78d777e78d904903faae39d1fc440762be4a9dc46bed49/llvmlite-0.43.0-cp312-cp312-win_amd64.whl", hash = "sha256:7a2872ee80dcf6b5dbdc838763d26554c2a18aa833d31a2635bff16aafefb9c9", size = 28107442, upload-time = "2024-06-13T18:09:10.709Z" }, + { url = "https://files.pythonhosted.org/packages/2a/73/12925b1bbb3c2beb6d96f892ef5b4d742c34f00ddb9f4a125e9e87b22f52/llvmlite-0.43.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9cd2a7376f7b3367019b664c21f0c61766219faa3b03731113ead75107f3b66c", size = 31064410, upload-time = "2024-06-13T18:09:14.091Z" }, + { url = "https://files.pythonhosted.org/packages/cc/61/58c70aa0808a8cba825a7d98cc65bef4801b99328fba80837bfcb5fc767f/llvmlite-0.43.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18e9953c748b105668487b7c81a3e97b046d8abf95c4ddc0cd3c94f4e4651ae8", size = 28793145, upload-time = "2024-06-13T18:09:17.531Z" }, + { url = "https://files.pythonhosted.org/packages/c8/c6/9324eb5de2ba9d99cbed853d85ba7a318652a48e077797bec27cf40f911d/llvmlite-0.43.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74937acd22dc11b33946b67dca7680e6d103d6e90eeaaaf932603bec6fe7b03a", size = 42857276, upload-time = "2024-06-13T18:09:21.377Z" }, + { url = "https://files.pythonhosted.org/packages/e0/d0/889e9705107db7b1ec0767b03f15d7b95b4c4f9fdf91928ab1c7e9ffacf6/llvmlite-0.43.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9efc739cc6ed760f795806f67889923f7274276f0eb45092a1473e40d9b867", size = 43871777, upload-time = "2024-06-13T18:09:25.76Z" }, + { url = "https://files.pythonhosted.org/packages/df/41/73cc26a2634b538cfe813f618c91e7e9960b8c163f8f0c94a2b0f008b9da/llvmlite-0.43.0-cp39-cp39-win_amd64.whl", hash = "sha256:47e147cdda9037f94b399bf03bfd8a6b6b1f2f90be94a454e3386f006455a9b4", size = 28123489, upload-time = "2024-06-13T18:09:29.78Z" }, +] + +[[package]] +name = "llvmlite" +version = "0.44.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.13' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version == '3.10.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12' and python_full_version < '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.11.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.11.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.10.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version == '3.10.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.10.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.10.*' and sys_platform != 'darwin' and sys_platform != 'linux')", +] +sdist = { url = "https://files.pythonhosted.org/packages/89/6a/95a3d3610d5c75293d5dbbb2a76480d5d4eeba641557b69fe90af6c5b84e/llvmlite-0.44.0.tar.gz", hash = "sha256:07667d66a5d150abed9157ab6c0b9393c9356f229784a4385c02f99e94fc94d4", size = 171880, upload-time = "2025-01-20T11:14:41.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/75/d4863ddfd8ab5f6e70f4504cf8cc37f4e986ec6910f4ef8502bb7d3c1c71/llvmlite-0.44.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:9fbadbfba8422123bab5535b293da1cf72f9f478a65645ecd73e781f962ca614", size = 28132306, upload-time = "2025-01-20T11:12:18.634Z" }, + { url = "https://files.pythonhosted.org/packages/37/d9/6e8943e1515d2f1003e8278819ec03e4e653e2eeb71e4d00de6cfe59424e/llvmlite-0.44.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cccf8eb28f24840f2689fb1a45f9c0f7e582dd24e088dcf96e424834af11f791", size = 26201096, upload-time = "2025-01-20T11:12:24.544Z" }, + { url = "https://files.pythonhosted.org/packages/aa/46/8ffbc114def88cc698906bf5acab54ca9fdf9214fe04aed0e71731fb3688/llvmlite-0.44.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7202b678cdf904823c764ee0fe2dfe38a76981f4c1e51715b4cb5abb6cf1d9e8", size = 42361859, upload-time = "2025-01-20T11:12:31.839Z" }, + { url = "https://files.pythonhosted.org/packages/30/1c/9366b29ab050a726af13ebaae8d0dff00c3c58562261c79c635ad4f5eb71/llvmlite-0.44.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40526fb5e313d7b96bda4cbb2c85cd5374e04d80732dd36a282d72a560bb6408", size = 41184199, upload-time = "2025-01-20T11:12:40.049Z" }, + { url = "https://files.pythonhosted.org/packages/69/07/35e7c594b021ecb1938540f5bce543ddd8713cff97f71d81f021221edc1b/llvmlite-0.44.0-cp310-cp310-win_amd64.whl", hash = "sha256:41e3839150db4330e1b2716c0be3b5c4672525b4c9005e17c7597f835f351ce2", size = 30332381, upload-time = "2025-01-20T11:12:47.054Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e2/86b245397052386595ad726f9742e5223d7aea999b18c518a50e96c3aca4/llvmlite-0.44.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:eed7d5f29136bda63b6d7804c279e2b72e08c952b7c5df61f45db408e0ee52f3", size = 28132305, upload-time = "2025-01-20T11:12:53.936Z" }, + { url = "https://files.pythonhosted.org/packages/ff/ec/506902dc6870249fbe2466d9cf66d531265d0f3a1157213c8f986250c033/llvmlite-0.44.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ace564d9fa44bb91eb6e6d8e7754977783c68e90a471ea7ce913bff30bd62427", size = 26201090, upload-time = "2025-01-20T11:12:59.847Z" }, + { url = "https://files.pythonhosted.org/packages/99/fe/d030f1849ebb1f394bb3f7adad5e729b634fb100515594aca25c354ffc62/llvmlite-0.44.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5d22c3bfc842668168a786af4205ec8e3ad29fb1bc03fd11fd48460d0df64c1", size = 42361858, upload-time = "2025-01-20T11:13:07.623Z" }, + { url = "https://files.pythonhosted.org/packages/d7/7a/ce6174664b9077fc673d172e4c888cb0b128e707e306bc33fff8c2035f0d/llvmlite-0.44.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f01a394e9c9b7b1d4e63c327b096d10f6f0ed149ef53d38a09b3749dcf8c9610", size = 41184200, upload-time = "2025-01-20T11:13:20.058Z" }, + { url = "https://files.pythonhosted.org/packages/5f/c6/258801143975a6d09a373f2641237992496e15567b907a4d401839d671b8/llvmlite-0.44.0-cp311-cp311-win_amd64.whl", hash = "sha256:d8489634d43c20cd0ad71330dde1d5bc7b9966937a263ff1ec1cebb90dc50955", size = 30331193, upload-time = "2025-01-20T11:13:26.976Z" }, + { url = "https://files.pythonhosted.org/packages/15/86/e3c3195b92e6e492458f16d233e58a1a812aa2bfbef9bdd0fbafcec85c60/llvmlite-0.44.0-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:1d671a56acf725bf1b531d5ef76b86660a5ab8ef19bb6a46064a705c6ca80aad", size = 28132297, upload-time = "2025-01-20T11:13:32.57Z" }, + { url = "https://files.pythonhosted.org/packages/d6/53/373b6b8be67b9221d12b24125fd0ec56b1078b660eeae266ec388a6ac9a0/llvmlite-0.44.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f79a728e0435493611c9f405168682bb75ffd1fbe6fc360733b850c80a026db", size = 26201105, upload-time = "2025-01-20T11:13:38.744Z" }, + { url = "https://files.pythonhosted.org/packages/cb/da/8341fd3056419441286c8e26bf436923021005ece0bff5f41906476ae514/llvmlite-0.44.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0143a5ef336da14deaa8ec26c5449ad5b6a2b564df82fcef4be040b9cacfea9", size = 42361901, upload-time = "2025-01-20T11:13:46.711Z" }, + { url = "https://files.pythonhosted.org/packages/53/ad/d79349dc07b8a395a99153d7ce8b01d6fcdc9f8231355a5df55ded649b61/llvmlite-0.44.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d752f89e31b66db6f8da06df8b39f9b91e78c5feea1bf9e8c1fba1d1c24c065d", size = 41184247, upload-time = "2025-01-20T11:13:56.159Z" }, + { url = "https://files.pythonhosted.org/packages/e2/3b/a9a17366af80127bd09decbe2a54d8974b6d8b274b39bf47fbaedeec6307/llvmlite-0.44.0-cp312-cp312-win_amd64.whl", hash = "sha256:eae7e2d4ca8f88f89d315b48c6b741dcb925d6a1042da694aa16ab3dd4cbd3a1", size = 30332380, upload-time = "2025-01-20T11:14:02.442Z" }, + { url = "https://files.pythonhosted.org/packages/89/24/4c0ca705a717514c2092b18476e7a12c74d34d875e05e4d742618ebbf449/llvmlite-0.44.0-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:319bddd44e5f71ae2689859b7203080716448a3cd1128fb144fe5c055219d516", size = 28132306, upload-time = "2025-01-20T11:14:09.035Z" }, + { url = "https://files.pythonhosted.org/packages/01/cf/1dd5a60ba6aee7122ab9243fd614abcf22f36b0437cbbe1ccf1e3391461c/llvmlite-0.44.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c58867118bad04a0bb22a2e0068c693719658105e40009ffe95c7000fcde88e", size = 26201090, upload-time = "2025-01-20T11:14:15.401Z" }, + { url = "https://files.pythonhosted.org/packages/d2/1b/656f5a357de7135a3777bd735cc7c9b8f23b4d37465505bd0eaf4be9befe/llvmlite-0.44.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46224058b13c96af1365290bdfebe9a6264ae62fb79b2b55693deed11657a8bf", size = 42361904, upload-time = "2025-01-20T11:14:22.949Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e1/12c5f20cb9168fb3464a34310411d5ad86e4163c8ff2d14a2b57e5cc6bac/llvmlite-0.44.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa0097052c32bf721a4efc03bd109d335dfa57d9bffb3d4c24cc680711b8b4fc", size = 41184245, upload-time = "2025-01-20T11:14:31.731Z" }, + { url = "https://files.pythonhosted.org/packages/d0/81/e66fc86539293282fd9cb7c9417438e897f369e79ffb62e1ae5e5154d4dd/llvmlite-0.44.0-cp313-cp313-win_amd64.whl", hash = "sha256:2fb7c4f2fb86cbae6dca3db9ab203eeea0e22d73b99bc2341cdf9de93612e930", size = 30331193, upload-time = "2025-01-20T11:14:38.578Z" }, +] + [[package]] name = "lxml" version = "5.4.0" @@ -2968,11 +3064,14 @@ resolution-markers = [ "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version >= '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", "(python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12' and python_full_version < '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", @@ -3047,6 +3146,97 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" }, ] +[[package]] +name = "numba" +version = "0.60.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version < '3.10' and platform_machine != 'arm64' and sys_platform == 'darwin') or (python_full_version < '3.10' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.10' and sys_platform != 'darwin' and sys_platform != 'linux')", +] +dependencies = [ + { name = "llvmlite", version = "0.43.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3c/93/2849300a9184775ba274aba6f82f303343669b0592b7bb0849ea713dabb0/numba-0.60.0.tar.gz", hash = "sha256:5df6158e5584eece5fc83294b949fd30b9f1125df7708862205217e068aabf16", size = 2702171, upload-time = "2024-06-13T18:11:19.869Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/cf/baa13a7e3556d73d9e38021e6d6aa4aeb30d8b94545aa8b70d0f24a1ccc4/numba-0.60.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d761de835cd38fb400d2c26bb103a2726f548dc30368853121d66201672e651", size = 2647627, upload-time = "2024-06-13T18:10:29.857Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ba/4b57fa498564457c3cc9fc9e570a6b08e6086c74220f24baaf04e54b995f/numba-0.60.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:159e618ef213fba758837f9837fb402bbe65326e60ba0633dbe6c7f274d42c1b", size = 2650322, upload-time = "2024-06-13T18:10:32.849Z" }, + { url = "https://files.pythonhosted.org/packages/28/98/7ea97ee75870a54f938a8c70f7e0be4495ba5349c5f9db09d467c4a5d5b7/numba-0.60.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1527dc578b95c7c4ff248792ec33d097ba6bef9eda466c948b68dfc995c25781", size = 3407390, upload-time = "2024-06-13T18:10:34.741Z" }, + { url = "https://files.pythonhosted.org/packages/79/58/cb4ac5b8f7ec64200460aef1fed88258fb872ceef504ab1f989d2ff0f684/numba-0.60.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fe0b28abb8d70f8160798f4de9d486143200f34458d34c4a214114e445d7124e", size = 3699694, upload-time = "2024-06-13T18:10:37.295Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b0/c61a93ca947d12233ff45de506ddbf52af3f752066a0b8be4d27426e16da/numba-0.60.0-cp310-cp310-win_amd64.whl", hash = "sha256:19407ced081d7e2e4b8d8c36aa57b7452e0283871c296e12d798852bc7d7f198", size = 2687030, upload-time = "2024-06-13T18:10:39.47Z" }, + { url = "https://files.pythonhosted.org/packages/98/ad/df18d492a8f00d29a30db307904b9b296e37507034eedb523876f3a2e13e/numba-0.60.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a17b70fc9e380ee29c42717e8cc0bfaa5556c416d94f9aa96ba13acb41bdece8", size = 2647254, upload-time = "2024-06-13T18:10:41.69Z" }, + { url = "https://files.pythonhosted.org/packages/9a/51/a4dc2c01ce7a850b8e56ff6d5381d047a5daea83d12bad08aa071d34b2ee/numba-0.60.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3fb02b344a2a80efa6f677aa5c40cd5dd452e1b35f8d1c2af0dfd9ada9978e4b", size = 2649970, upload-time = "2024-06-13T18:10:44.682Z" }, + { url = "https://files.pythonhosted.org/packages/f9/4c/8889ac94c0b33dca80bed11564b8c6d9ea14d7f094e674c58e5c5b05859b/numba-0.60.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5f4fde652ea604ea3c86508a3fb31556a6157b2c76c8b51b1d45eb40c8598703", size = 3412492, upload-time = "2024-06-13T18:10:47.1Z" }, + { url = "https://files.pythonhosted.org/packages/57/03/2b4245b05b71c0cee667e6a0b51606dfa7f4157c9093d71c6b208385a611/numba-0.60.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4142d7ac0210cc86432b818338a2bc368dc773a2f5cf1e32ff7c5b378bd63ee8", size = 3705018, upload-time = "2024-06-13T18:10:49.539Z" }, + { url = "https://files.pythonhosted.org/packages/79/89/2d924ca60dbf949f18a6fec223a2445f5f428d9a5f97a6b29c2122319015/numba-0.60.0-cp311-cp311-win_amd64.whl", hash = "sha256:cac02c041e9b5bc8cf8f2034ff6f0dbafccd1ae9590dc146b3a02a45e53af4e2", size = 2686920, upload-time = "2024-06-13T18:10:51.937Z" }, + { url = "https://files.pythonhosted.org/packages/eb/5c/b5ec752c475e78a6c3676b67c514220dbde2725896bbb0b6ec6ea54b2738/numba-0.60.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d7da4098db31182fc5ffe4bc42c6f24cd7d1cb8a14b59fd755bfee32e34b8404", size = 2647866, upload-time = "2024-06-13T18:10:54.453Z" }, + { url = "https://files.pythonhosted.org/packages/65/42/39559664b2e7c15689a638c2a38b3b74c6e69a04e2b3019b9f7742479188/numba-0.60.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38d6ea4c1f56417076ecf8fc327c831ae793282e0ff51080c5094cb726507b1c", size = 2650208, upload-time = "2024-06-13T18:10:56.779Z" }, + { url = "https://files.pythonhosted.org/packages/67/88/c4459ccc05674ef02119abf2888ccd3e2fed12a323f52255f4982fc95876/numba-0.60.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:62908d29fb6a3229c242e981ca27e32a6e606cc253fc9e8faeb0e48760de241e", size = 3466946, upload-time = "2024-06-13T18:10:58.961Z" }, + { url = "https://files.pythonhosted.org/packages/8b/41/ac11cf33524def12aa5bd698226ae196a1185831c05ed29dc0c56eaa308b/numba-0.60.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0ebaa91538e996f708f1ab30ef4d3ddc344b64b5227b67a57aa74f401bb68b9d", size = 3761463, upload-time = "2024-06-13T18:11:01.657Z" }, + { url = "https://files.pythonhosted.org/packages/ca/bd/0fe29fcd1b6a8de479a4ed25c6e56470e467e3611c079d55869ceef2b6d1/numba-0.60.0-cp312-cp312-win_amd64.whl", hash = "sha256:f75262e8fe7fa96db1dca93d53a194a38c46da28b112b8a4aca168f0df860347", size = 2707588, upload-time = "2024-06-13T18:11:04.261Z" }, + { url = "https://files.pythonhosted.org/packages/68/1a/87c53f836cdf557083248c3f47212271f220280ff766538795e77c8c6bbf/numba-0.60.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:01ef4cd7d83abe087d644eaa3d95831b777aa21d441a23703d649e06b8e06b74", size = 2647186, upload-time = "2024-06-13T18:11:06.753Z" }, + { url = "https://files.pythonhosted.org/packages/28/14/a5baa1f2edea7b49afa4dc1bb1b126645198cf1075186853b5b497be826e/numba-0.60.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:819a3dfd4630d95fd574036f99e47212a1af41cbcb019bf8afac63ff56834449", size = 2650038, upload-time = "2024-06-13T18:11:10.869Z" }, + { url = "https://files.pythonhosted.org/packages/3b/bd/f1985719ff34e37e07bb18f9d3acd17e5a21da255f550c8eae031e2ddf5f/numba-0.60.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0b983bd6ad82fe868493012487f34eae8bf7dd94654951404114f23c3466d34b", size = 3403010, upload-time = "2024-06-13T18:11:13.057Z" }, + { url = "https://files.pythonhosted.org/packages/54/9b/cd73d3f6617ddc8398a63ef97d8dc9139a9879b9ca8a7ca4b8789056ea46/numba-0.60.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c151748cd269ddeab66334bd754817ffc0cabd9433acb0f551697e5151917d25", size = 3695086, upload-time = "2024-06-13T18:11:15.497Z" }, + { url = "https://files.pythonhosted.org/packages/01/01/8b7b670c77c5ea0e47e283d82332969bf672ab6410d0b2610cac5b7a3ded/numba-0.60.0-cp39-cp39-win_amd64.whl", hash = "sha256:3031547a015710140e8c87226b4cfe927cac199835e5bf7d4fe5cb64e814e3ab", size = 2686978, upload-time = "2024-06-13T18:11:17.765Z" }, +] + +[[package]] +name = "numba" +version = "0.61.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.13' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version == '3.10.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12' and python_full_version < '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.11.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.11.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.10.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version == '3.10.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.10.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.10.*' and sys_platform != 'darwin' and sys_platform != 'linux')", +] +dependencies = [ + { name = "llvmlite", version = "0.44.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/a0/e21f57604304aa03ebb8e098429222722ad99176a4f979d34af1d1ee80da/numba-0.61.2.tar.gz", hash = "sha256:8750ee147940a6637b80ecf7f95062185ad8726c8c28a2295b8ec1160a196f7d", size = 2820615, upload-time = "2025-04-09T02:58:07.659Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/ca/f470be59552ccbf9531d2d383b67ae0b9b524d435fb4a0d229fef135116e/numba-0.61.2-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:cf9f9fc00d6eca0c23fc840817ce9f439b9f03c8f03d6246c0e7f0cb15b7162a", size = 2775663, upload-time = "2025-04-09T02:57:34.143Z" }, + { url = "https://files.pythonhosted.org/packages/f5/13/3bdf52609c80d460a3b4acfb9fdb3817e392875c0d6270cf3fd9546f138b/numba-0.61.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ea0247617edcb5dd61f6106a56255baab031acc4257bddaeddb3a1003b4ca3fd", size = 2778344, upload-time = "2025-04-09T02:57:36.609Z" }, + { url = "https://files.pythonhosted.org/packages/e2/7d/bfb2805bcfbd479f04f835241ecf28519f6e3609912e3a985aed45e21370/numba-0.61.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ae8c7a522c26215d5f62ebec436e3d341f7f590079245a2f1008dfd498cc1642", size = 3824054, upload-time = "2025-04-09T02:57:38.162Z" }, + { url = "https://files.pythonhosted.org/packages/e3/27/797b2004745c92955470c73c82f0e300cf033c791f45bdecb4b33b12bdea/numba-0.61.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd1e74609855aa43661edffca37346e4e8462f6903889917e9f41db40907daa2", size = 3518531, upload-time = "2025-04-09T02:57:39.709Z" }, + { url = "https://files.pythonhosted.org/packages/b1/c6/c2fb11e50482cb310afae87a997707f6c7d8a48967b9696271347441f650/numba-0.61.2-cp310-cp310-win_amd64.whl", hash = "sha256:ae45830b129c6137294093b269ef0a22998ccc27bf7cf096ab8dcf7bca8946f9", size = 2831612, upload-time = "2025-04-09T02:57:41.559Z" }, + { url = "https://files.pythonhosted.org/packages/3f/97/c99d1056aed767503c228f7099dc11c402906b42a4757fec2819329abb98/numba-0.61.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:efd3db391df53aaa5cfbee189b6c910a5b471488749fd6606c3f33fc984c2ae2", size = 2775825, upload-time = "2025-04-09T02:57:43.442Z" }, + { url = "https://files.pythonhosted.org/packages/95/9e/63c549f37136e892f006260c3e2613d09d5120672378191f2dc387ba65a2/numba-0.61.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:49c980e4171948ffebf6b9a2520ea81feed113c1f4890747ba7f59e74be84b1b", size = 2778695, upload-time = "2025-04-09T02:57:44.968Z" }, + { url = "https://files.pythonhosted.org/packages/97/c8/8740616c8436c86c1b9a62e72cb891177d2c34c2d24ddcde4c390371bf4c/numba-0.61.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3945615cd73c2c7eba2a85ccc9c1730c21cd3958bfcf5a44302abae0fb07bb60", size = 3829227, upload-time = "2025-04-09T02:57:46.63Z" }, + { url = "https://files.pythonhosted.org/packages/fc/06/66e99ae06507c31d15ff3ecd1f108f2f59e18b6e08662cd5f8a5853fbd18/numba-0.61.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbfdf4eca202cebade0b7d43896978e146f39398909a42941c9303f82f403a18", size = 3523422, upload-time = "2025-04-09T02:57:48.222Z" }, + { url = "https://files.pythonhosted.org/packages/0f/a4/2b309a6a9f6d4d8cfba583401c7c2f9ff887adb5d54d8e2e130274c0973f/numba-0.61.2-cp311-cp311-win_amd64.whl", hash = "sha256:76bcec9f46259cedf888041b9886e257ae101c6268261b19fda8cfbc52bec9d1", size = 2831505, upload-time = "2025-04-09T02:57:50.108Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a0/c6b7b9c615cfa3b98c4c63f4316e3f6b3bbe2387740277006551784218cd/numba-0.61.2-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:34fba9406078bac7ab052efbf0d13939426c753ad72946baaa5bf9ae0ebb8dd2", size = 2776626, upload-time = "2025-04-09T02:57:51.857Z" }, + { url = "https://files.pythonhosted.org/packages/92/4a/fe4e3c2ecad72d88f5f8cd04e7f7cff49e718398a2fac02d2947480a00ca/numba-0.61.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4ddce10009bc097b080fc96876d14c051cc0c7679e99de3e0af59014dab7dfe8", size = 2779287, upload-time = "2025-04-09T02:57:53.658Z" }, + { url = "https://files.pythonhosted.org/packages/9a/2d/e518df036feab381c23a624dac47f8445ac55686ec7f11083655eb707da3/numba-0.61.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5b1bb509d01f23d70325d3a5a0e237cbc9544dd50e50588bc581ba860c213546", size = 3885928, upload-time = "2025-04-09T02:57:55.206Z" }, + { url = "https://files.pythonhosted.org/packages/10/0f/23cced68ead67b75d77cfcca3df4991d1855c897ee0ff3fe25a56ed82108/numba-0.61.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48a53a3de8f8793526cbe330f2a39fe9a6638efcbf11bd63f3d2f9757ae345cd", size = 3577115, upload-time = "2025-04-09T02:57:56.818Z" }, + { url = "https://files.pythonhosted.org/packages/68/1d/ddb3e704c5a8fb90142bf9dc195c27db02a08a99f037395503bfbc1d14b3/numba-0.61.2-cp312-cp312-win_amd64.whl", hash = "sha256:97cf4f12c728cf77c9c1d7c23707e4d8fb4632b46275f8f3397de33e5877af18", size = 2831929, upload-time = "2025-04-09T02:57:58.45Z" }, + { url = "https://files.pythonhosted.org/packages/0b/f3/0fe4c1b1f2569e8a18ad90c159298d862f96c3964392a20d74fc628aee44/numba-0.61.2-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:3a10a8fc9afac40b1eac55717cece1b8b1ac0b946f5065c89e00bde646b5b154", size = 2771785, upload-time = "2025-04-09T02:57:59.96Z" }, + { url = "https://files.pythonhosted.org/packages/e9/71/91b277d712e46bd5059f8a5866862ed1116091a7cb03bd2704ba8ebe015f/numba-0.61.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7d3bcada3c9afba3bed413fba45845f2fb9cd0d2b27dd58a1be90257e293d140", size = 2773289, upload-time = "2025-04-09T02:58:01.435Z" }, + { url = "https://files.pythonhosted.org/packages/0d/e0/5ea04e7ad2c39288c0f0f9e8d47638ad70f28e275d092733b5817cf243c9/numba-0.61.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bdbca73ad81fa196bd53dc12e3aaf1564ae036e0c125f237c7644fe64a4928ab", size = 3893918, upload-time = "2025-04-09T02:58:02.933Z" }, + { url = "https://files.pythonhosted.org/packages/17/58/064f4dcb7d7e9412f16ecf80ed753f92297e39f399c905389688cf950b81/numba-0.61.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5f154aaea625fb32cfbe3b80c5456d514d416fcdf79733dd69c0df3a11348e9e", size = 3584056, upload-time = "2025-04-09T02:58:04.538Z" }, + { url = "https://files.pythonhosted.org/packages/af/a4/6d3a0f2d3989e62a18749e1e9913d5fa4910bbb3e3311a035baea6caf26d/numba-0.61.2-cp313-cp313-win_amd64.whl", hash = "sha256:59321215e2e0ac5fa928a8020ab00b8e57cda8a97384963ac0dfa4d4e6aa54e7", size = 2831846, upload-time = "2025-04-09T02:58:06.125Z" }, +] + [[package]] name = "numpy" version = "2.0.2" @@ -3114,11 +3304,14 @@ resolution-markers = [ "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.10.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version >= '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", "(python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12' and python_full_version < '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", @@ -3383,11 +3576,14 @@ resolution-markers = [ "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.10.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version >= '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", "(python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12' and python_full_version < '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", @@ -3425,13 +3621,29 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c3/16/873b955beda7bada5b0d798d3a601b2ff210e44ad5169f6d405b93892103/onnxruntime-1.22.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64845709f9e8a2809e8e009bc4c8f73b788cee9c6619b7d9930344eae4c9cd36", size = 16427482, upload-time = "2025-05-09T20:26:20.376Z" }, ] +[[package]] +name = "openai-whisper" +version = "20240930" +source = { git = "https://github.com/openai/whisper.git?rev=dd985ac4b90cafeef8712f2998d62c59c3e62d22#dd985ac4b90cafeef8712f2998d62c59c3e62d22" } +dependencies = [ + { name = "more-itertools" }, + { name = "numba", version = "0.60.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "numba", version = "0.61.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "tiktoken" }, + { name = "torch" }, + { name = "tqdm" }, + { name = "triton", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'linux2'" }, +] + [[package]] name = "opencv-python" version = "4.10.0.84" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.10' and python_full_version < '3.13' and platform_machine != 'arm64') or (python_full_version >= '3.10' and python_full_version < '3.13' and sys_platform != 'darwin') or (python_full_version >= '3.10' and platform_machine == 'arm64' and sys_platform == 'darwin')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/b70a2d9ab205110d715906fc8ec83fbb00404aeb3a37a0654fdb68eb0c8c/opencv-python-4.10.0.84.tar.gz", hash = "sha256:72d234e4582e9658ffea8e9cae5b63d488ad06994ef12d81dc303b17472f3526", size = 95103981, upload-time = "2024-06-17T18:29:56.757Z" } wheels = [ @@ -3654,11 +3866,14 @@ resolution-markers = [ "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.10.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version >= '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", "(python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12' and python_full_version < '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", @@ -4890,17 +5105,17 @@ version = "1.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.10' and python_full_version < '3.13') or (python_full_version >= '3.10' and platform_machine != 'arm64') or (python_full_version >= '3.10' and sys_platform != 'darwin')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' and python_full_version < '3.13'" }, { name = "onnxruntime", version = "1.19.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "onnxruntime", version = "1.22.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.10' and python_full_version < '3.13') or (python_full_version >= '3.10' and platform_machine != 'arm64') or (python_full_version >= '3.10' and sys_platform != 'darwin')" }, - { name = "opencv-python", marker = "python_full_version < '3.13' or platform_machine != 'arm64' or sys_platform != 'darwin'" }, - { name = "pillow", marker = "python_full_version < '3.13' or platform_machine != 'arm64' or sys_platform != 'darwin'" }, - { name = "pyclipper", marker = "python_full_version < '3.13' or platform_machine != 'arm64' or sys_platform != 'darwin'" }, - { name = "pyyaml", marker = "python_full_version < '3.13' or platform_machine != 'arm64' or sys_platform != 'darwin'" }, + { name = "onnxruntime", version = "1.22.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' and python_full_version < '3.13'" }, + { name = "opencv-python", marker = "python_full_version < '3.13'" }, + { name = "pillow", marker = "python_full_version < '3.13'" }, + { name = "pyclipper", marker = "python_full_version < '3.13'" }, + { name = "pyyaml", marker = "python_full_version < '3.13'" }, { name = "shapely", version = "2.0.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "shapely", version = "2.1.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.10' and python_full_version < '3.13') or (python_full_version >= '3.10' and platform_machine != 'arm64') or (python_full_version >= '3.10' and sys_platform != 'darwin')" }, - { name = "six", marker = "python_full_version < '3.13' or platform_machine != 'arm64' or sys_platform != 'darwin'" }, - { name = "tqdm", marker = "python_full_version < '3.13' or platform_machine != 'arm64' or sys_platform != 'darwin'" }, + { name = "shapely", version = "2.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' and python_full_version < '3.13'" }, + { name = "six", marker = "python_full_version < '3.13'" }, + { name = "tqdm", marker = "python_full_version < '3.13'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/ba/12/1e5497183bdbe782dbb91bad1d0d2297dba4d2831b2652657f7517bfc6df/rapidocr_onnxruntime-1.4.4-py3-none-any.whl", hash = "sha256:971d7d5f223a7a808662229df1ef69893809d8457d834e6373d3854bc1782cbf", size = 14915192, upload-time = "2025-01-17T01:48:25.104Z" }, @@ -5313,11 +5528,14 @@ resolution-markers = [ "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.10.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version >= '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", "(python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12' and python_full_version < '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", @@ -5458,11 +5676,14 @@ resolution-markers = [ "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.10.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version >= '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", "(python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12' and python_full_version < '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", @@ -5668,11 +5889,14 @@ resolution-markers = [ "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.10.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version >= '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", "(python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12' and python_full_version < '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", @@ -5915,11 +6139,14 @@ resolution-markers = [ "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'arm64' and sys_platform == 'darwin'", - "python_full_version >= '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", "python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version >= '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "(python_full_version >= '3.12.4' and python_full_version < '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12.4' and python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", "(python_full_version >= '3.12' and python_full_version < '3.12.4' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12' and python_full_version < '3.12.4' and sys_platform != 'darwin' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine != 'arm64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", @@ -5933,6 +6160,48 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4d/77/7f7dfcf2d847c1c1c63a2d4157c480eb4c74e4aa56e844008795ff01f86d/tifffile-2025.6.1-py3-none-any.whl", hash = "sha256:ff7163f1aaea519b769a2ac77c43be69e7d83e5b5d5d6a676497399de50535e5", size = 230624, upload-time = "2025-06-02T01:41:42.179Z" }, ] +[[package]] +name = "tiktoken" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "regex" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/cf/756fedf6981e82897f2d570dd25fa597eb3f4459068ae0572d7e888cfd6f/tiktoken-0.9.0.tar.gz", hash = "sha256:d02a5ca6a938e0490e1ff957bc48c8b078c88cb83977be1625b1fd8aac792c5d", size = 35991, upload-time = "2025-02-14T06:03:01.003Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/f3/50ec5709fad61641e4411eb1b9ac55b99801d71f1993c29853f256c726c9/tiktoken-0.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:586c16358138b96ea804c034b8acf3f5d3f0258bd2bc3b0227af4af5d622e382", size = 1065770, upload-time = "2025-02-14T06:02:01.251Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f8/5a9560a422cf1755b6e0a9a436e14090eeb878d8ec0f80e0cd3d45b78bf4/tiktoken-0.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d9c59ccc528c6c5dd51820b3474402f69d9a9e1d656226848ad68a8d5b2e5108", size = 1009314, upload-time = "2025-02-14T06:02:02.869Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/3ed4cfff8f809cb902900ae686069e029db74567ee10d017cb254df1d598/tiktoken-0.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0968d5beeafbca2a72c595e8385a1a1f8af58feaebb02b227229b69ca5357fd", size = 1143140, upload-time = "2025-02-14T06:02:04.165Z" }, + { url = "https://files.pythonhosted.org/packages/f1/95/cc2c6d79df8f113bdc6c99cdec985a878768120d87d839a34da4bd3ff90a/tiktoken-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92a5fb085a6a3b7350b8fc838baf493317ca0e17bd95e8642f95fc69ecfed1de", size = 1197860, upload-time = "2025-02-14T06:02:06.268Z" }, + { url = "https://files.pythonhosted.org/packages/c7/6c/9c1a4cc51573e8867c9381db1814223c09ebb4716779c7f845d48688b9c8/tiktoken-0.9.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:15a2752dea63d93b0332fb0ddb05dd909371ededa145fe6a3242f46724fa7990", size = 1259661, upload-time = "2025-02-14T06:02:08.889Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4c/22eb8e9856a2b1808d0a002d171e534eac03f96dbe1161978d7389a59498/tiktoken-0.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:26113fec3bd7a352e4b33dbaf1bd8948de2507e30bd95a44e2b1156647bc01b4", size = 894026, upload-time = "2025-02-14T06:02:12.841Z" }, + { url = "https://files.pythonhosted.org/packages/4d/ae/4613a59a2a48e761c5161237fc850eb470b4bb93696db89da51b79a871f1/tiktoken-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f32cc56168eac4851109e9b5d327637f15fd662aa30dd79f964b7c39fbadd26e", size = 1065987, upload-time = "2025-02-14T06:02:14.174Z" }, + { url = "https://files.pythonhosted.org/packages/3f/86/55d9d1f5b5a7e1164d0f1538a85529b5fcba2b105f92db3622e5d7de6522/tiktoken-0.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:45556bc41241e5294063508caf901bf92ba52d8ef9222023f83d2483a3055348", size = 1009155, upload-time = "2025-02-14T06:02:15.384Z" }, + { url = "https://files.pythonhosted.org/packages/03/58/01fb6240df083b7c1916d1dcb024e2b761213c95d576e9f780dfb5625a76/tiktoken-0.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03935988a91d6d3216e2ec7c645afbb3d870b37bcb67ada1943ec48678e7ee33", size = 1142898, upload-time = "2025-02-14T06:02:16.666Z" }, + { url = "https://files.pythonhosted.org/packages/b1/73/41591c525680cd460a6becf56c9b17468d3711b1df242c53d2c7b2183d16/tiktoken-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b3d80aad8d2c6b9238fc1a5524542087c52b860b10cbf952429ffb714bc1136", size = 1197535, upload-time = "2025-02-14T06:02:18.595Z" }, + { url = "https://files.pythonhosted.org/packages/7d/7c/1069f25521c8f01a1a182f362e5c8e0337907fae91b368b7da9c3e39b810/tiktoken-0.9.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b2a21133be05dc116b1d0372af051cd2c6aa1d2188250c9b553f9fa49301b336", size = 1259548, upload-time = "2025-02-14T06:02:20.729Z" }, + { url = "https://files.pythonhosted.org/packages/6f/07/c67ad1724b8e14e2b4c8cca04b15da158733ac60136879131db05dda7c30/tiktoken-0.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:11a20e67fdf58b0e2dea7b8654a288e481bb4fc0289d3ad21291f8d0849915fb", size = 893895, upload-time = "2025-02-14T06:02:22.67Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e5/21ff33ecfa2101c1bb0f9b6df750553bd873b7fb532ce2cb276ff40b197f/tiktoken-0.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e88f121c1c22b726649ce67c089b90ddda8b9662545a8aeb03cfef15967ddd03", size = 1065073, upload-time = "2025-02-14T06:02:24.768Z" }, + { url = "https://files.pythonhosted.org/packages/8e/03/a95e7b4863ee9ceec1c55983e4cc9558bcfd8f4f80e19c4f8a99642f697d/tiktoken-0.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a6600660f2f72369acb13a57fb3e212434ed38b045fd8cc6cdd74947b4b5d210", size = 1008075, upload-time = "2025-02-14T06:02:26.92Z" }, + { url = "https://files.pythonhosted.org/packages/40/10/1305bb02a561595088235a513ec73e50b32e74364fef4de519da69bc8010/tiktoken-0.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95e811743b5dfa74f4b227927ed86cbc57cad4df859cb3b643be797914e41794", size = 1140754, upload-time = "2025-02-14T06:02:28.124Z" }, + { url = "https://files.pythonhosted.org/packages/1b/40/da42522018ca496432ffd02793c3a72a739ac04c3794a4914570c9bb2925/tiktoken-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99376e1370d59bcf6935c933cb9ba64adc29033b7e73f5f7569f3aad86552b22", size = 1196678, upload-time = "2025-02-14T06:02:29.845Z" }, + { url = "https://files.pythonhosted.org/packages/5c/41/1e59dddaae270ba20187ceb8aa52c75b24ffc09f547233991d5fd822838b/tiktoken-0.9.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:badb947c32739fb6ddde173e14885fb3de4d32ab9d8c591cbd013c22b4c31dd2", size = 1259283, upload-time = "2025-02-14T06:02:33.838Z" }, + { url = "https://files.pythonhosted.org/packages/5b/64/b16003419a1d7728d0d8c0d56a4c24325e7b10a21a9dd1fc0f7115c02f0a/tiktoken-0.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:5a62d7a25225bafed786a524c1b9f0910a1128f4232615bf3f8257a73aaa3b16", size = 894897, upload-time = "2025-02-14T06:02:36.265Z" }, + { url = "https://files.pythonhosted.org/packages/7a/11/09d936d37f49f4f494ffe660af44acd2d99eb2429d60a57c71318af214e0/tiktoken-0.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b0e8e05a26eda1249e824156d537015480af7ae222ccb798e5234ae0285dbdb", size = 1064919, upload-time = "2025-02-14T06:02:37.494Z" }, + { url = "https://files.pythonhosted.org/packages/80/0e/f38ba35713edb8d4197ae602e80837d574244ced7fb1b6070b31c29816e0/tiktoken-0.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:27d457f096f87685195eea0165a1807fae87b97b2161fe8c9b1df5bd74ca6f63", size = 1007877, upload-time = "2025-02-14T06:02:39.516Z" }, + { url = "https://files.pythonhosted.org/packages/fe/82/9197f77421e2a01373e27a79dd36efdd99e6b4115746ecc553318ecafbf0/tiktoken-0.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cf8ded49cddf825390e36dd1ad35cd49589e8161fdcb52aa25f0583e90a3e01", size = 1140095, upload-time = "2025-02-14T06:02:41.791Z" }, + { url = "https://files.pythonhosted.org/packages/f2/bb/4513da71cac187383541facd0291c4572b03ec23c561de5811781bbd988f/tiktoken-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc156cb314119a8bb9748257a2eaebd5cc0753b6cb491d26694ed42fc7cb3139", size = 1195649, upload-time = "2025-02-14T06:02:43Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5c/74e4c137530dd8504e97e3a41729b1103a4ac29036cbfd3250b11fd29451/tiktoken-0.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cd69372e8c9dd761f0ab873112aba55a0e3e506332dd9f7522ca466e817b1b7a", size = 1258465, upload-time = "2025-02-14T06:02:45.046Z" }, + { url = "https://files.pythonhosted.org/packages/de/a8/8f499c179ec900783ffe133e9aab10044481679bb9aad78436d239eee716/tiktoken-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5ea0edb6f83dc56d794723286215918c1cde03712cbbafa0348b33448faf5b95", size = 894669, upload-time = "2025-02-14T06:02:47.341Z" }, + { url = "https://files.pythonhosted.org/packages/c4/92/4d681b5c066d417b98f22a0176358d9e606e183c6b61c337d61fb54accb4/tiktoken-0.9.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c6386ca815e7d96ef5b4ac61e0048cd32ca5a92d5781255e13b31381d28667dc", size = 1066217, upload-time = "2025-02-14T06:02:49.259Z" }, + { url = "https://files.pythonhosted.org/packages/12/dd/af27bbe186df481666de48cf0f2f4e0643ba9c78b472e7bf70144c663b22/tiktoken-0.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:75f6d5db5bc2c6274b674ceab1615c1778e6416b14705827d19b40e6355f03e0", size = 1009441, upload-time = "2025-02-14T06:02:51.347Z" }, + { url = "https://files.pythonhosted.org/packages/33/35/2792b7dcb8b150d2767322637513c73a3e80833c19212efea80b31087894/tiktoken-0.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e15b16f61e6f4625a57a36496d28dd182a8a60ec20a534c5343ba3cafa156ac7", size = 1144423, upload-time = "2025-02-14T06:02:52.547Z" }, + { url = "https://files.pythonhosted.org/packages/65/ae/4d1682510172ce3500bbed3b206ebc4efefe280f0bf1179cfb043f88cc16/tiktoken-0.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebcec91babf21297022882344c3f7d9eed855931466c3311b1ad6b64befb3df", size = 1199002, upload-time = "2025-02-14T06:02:55.72Z" }, + { url = "https://files.pythonhosted.org/packages/1c/2e/df2dc31dd161190f315829775a9652ea01d60f307af8f98e35bdd14a6a93/tiktoken-0.9.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e5fd49e7799579240f03913447c0cdfa1129625ebd5ac440787afc4345990427", size = 1260610, upload-time = "2025-02-14T06:02:56.924Z" }, + { url = "https://files.pythonhosted.org/packages/70/22/e8fc1bf9cdecc439b7ddc28a45b976a8c699a38874c070749d855696368a/tiktoken-0.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:26242ca9dc8b58e875ff4ca078b9a94d2f0813e6a535dcd2205df5d49d927cc7", size = 894215, upload-time = "2025-02-14T06:02:59.031Z" }, +] + [[package]] name = "tinycss2" version = "1.4.0"