From 5baba6526271f5129cfdf1bb08c011cdf684c7f7 Mon Sep 17 00:00:00 2001 From: Gal Kleinman Date: Mon, 2 Sep 2024 17:34:27 +0300 Subject: [PATCH 1/8] fix lockfile --- .../.flake8 | 11 + .../.python-version | 1 + .../README.md | 33 + .../instrumentation/groq/__init__.py | 689 +++++++++++ .../instrumentation/groq/config.py | 7 + .../instrumentation/groq/streaming.py | 258 ++++ .../instrumentation/groq/utils.py | 69 ++ .../instrumentation/groq/version.py | 1 + .../poetry.lock | 1054 +++++++++++++++++ .../poetry.toml | 2 + .../project.json | 78 ++ .../pyproject.toml | 54 + .../tests/__init__.py | 1 + .../tests/conftest.py | 74 ++ .../tests/data/logo.jpg | Bin 0 -> 100388 bytes .../tests/test_completion.py | 572 +++++++++ 16 files changed, 2904 insertions(+) create mode 100644 packages/opentelemetry-instrumentation-groq/.flake8 create mode 100644 packages/opentelemetry-instrumentation-groq/.python-version create mode 100644 packages/opentelemetry-instrumentation-groq/README.md create mode 100644 packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py create mode 100644 packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/config.py create mode 100644 packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/streaming.py create mode 100644 packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/utils.py create mode 100644 packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/version.py create mode 100644 packages/opentelemetry-instrumentation-groq/poetry.lock create mode 100644 packages/opentelemetry-instrumentation-groq/poetry.toml create mode 100644 packages/opentelemetry-instrumentation-groq/project.json create mode 100644 packages/opentelemetry-instrumentation-groq/pyproject.toml create mode 100644 packages/opentelemetry-instrumentation-groq/tests/__init__.py create mode 100644 packages/opentelemetry-instrumentation-groq/tests/conftest.py create mode 100644 packages/opentelemetry-instrumentation-groq/tests/data/logo.jpg create mode 100644 packages/opentelemetry-instrumentation-groq/tests/test_completion.py diff --git a/packages/opentelemetry-instrumentation-groq/.flake8 b/packages/opentelemetry-instrumentation-groq/.flake8 new file mode 100644 index 000000000..3da962c38 --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/.flake8 @@ -0,0 +1,11 @@ +[flake8] +exclude = + .git, + __pycache__, + build, + dist, + .tox, + venv, + .venv, + .pytest_cache +max-line-length = 120 diff --git a/packages/opentelemetry-instrumentation-groq/.python-version b/packages/opentelemetry-instrumentation-groq/.python-version new file mode 100644 index 000000000..11aaa0686 --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/.python-version @@ -0,0 +1 @@ +3.9.5 diff --git a/packages/opentelemetry-instrumentation-groq/README.md b/packages/opentelemetry-instrumentation-groq/README.md new file mode 100644 index 000000000..6fb757898 --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/README.md @@ -0,0 +1,33 @@ +# OpenTelemetry Groq Instrumentation + + + + + +This library allows tracing Groq prompts and completions sent with the official [Groq SDK](https://github.com/groq/groq-python). + +## Installation + +```bash +pip install opentelemetry-instrumentation-groq +``` + +## Example usage + +```python +from opentelemetry.instrumentation.groq import GroqInstrumentor + +GroqInstrumentor().instrument() +``` + +## Privacy + +**By default, this instrumentation logs prompts, completions, and embeddings to span attributes**. This gives you a clear visibility into how your LLM application is working, and can make it easy to debug and evaluate the quality of the outputs. + +However, you may want to disable this logging for privacy reasons, as they may contain highly sensitive data from your users. You may also simply want to reduce the size of your traces. + +To disable logging, set the `TRACELOOP_TRACE_CONTENT` environment variable to `false`. + +```bash +TRACELOOP_TRACE_CONTENT=false +``` diff --git a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py new file mode 100644 index 000000000..90482c34b --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py @@ -0,0 +1,689 @@ +"""OpenTelemetry Anthropic instrumentation""" + +import json +import logging +import os +import time +from typing import Callable, Collection + +from anthropic._streaming import AsyncStream, Stream +from opentelemetry import context as context_api +from opentelemetry.instrumentation.groq.config import Config +from opentelemetry.instrumentation.groq.streaming import ( + abuild_from_streaming_response, + build_from_streaming_response, +) +from opentelemetry.instrumentation.groq.utils import ( + dont_throw, + error_metrics_attributes, + set_span_attribute, + shared_metrics_attributes, + should_send_prompts, +) +from opentelemetry.instrumentation.groq.version import __version__ +from opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from opentelemetry.instrumentation.utils import _SUPPRESS_INSTRUMENTATION_KEY, unwrap +from opentelemetry.metrics import Counter, Histogram, Meter, get_meter +from opentelemetry.semconv_ai import ( + SUPPRESS_LANGUAGE_MODEL_INSTRUMENTATION_KEY, + LLMRequestTypeValues, + SpanAttributes, + Meters, +) +from opentelemetry.trace import SpanKind, Tracer, get_tracer +from opentelemetry.trace.status import Status, StatusCode +from wrapt import wrap_function_wrapper + +logger = logging.getLogger(__name__) + +_instruments = ("anthropic >= 0.3.11",) + +WRAPPED_METHODS = [ + { + "package": "anthropic.resources.completions", + "object": "Completions", + "method": "create", + "span_name": "anthropic.completion", + }, + { + "package": "anthropic.resources.messages", + "object": "Messages", + "method": "create", + "span_name": "anthropic.chat", + }, + { + "package": "anthropic.resources.messages", + "object": "Messages", + "method": "stream", + "span_name": "anthropic.chat", + }, +] +WRAPPED_AMETHODS = [ + { + "package": "anthropic.resources.completions", + "object": "AsyncCompletions", + "method": "create", + "span_name": "anthropic.completion", + }, + { + "package": "anthropic.resources.messages", + "object": "AsyncMessages", + "method": "create", + "span_name": "anthropic.chat", + }, + { + "package": "anthropic.resources.messages", + "object": "AsyncMessages", + "method": "stream", + "span_name": "anthropic.chat", + }, +] + + +def is_streaming_response(response): + return isinstance(response, Stream) or isinstance(response, AsyncStream) + + +def _dump_content(content): + if isinstance(content, str): + return content + json_serializable = [] + for item in content: + if item.get("type") == "text": + json_serializable.append({"type": "text", "text": item.get("text")}) + elif item.get("type") == "image": + json_serializable.append( + { + "type": "image", + "source": { + "type": item.get("source").get("type"), + "media_type": item.get("source").get("media_type"), + "data": str(item.get("source").get("data")), + }, + } + ) + return json.dumps(json_serializable) + + +@dont_throw +def _set_input_attributes(span, kwargs): + set_span_attribute(span, SpanAttributes.LLM_REQUEST_MODEL, kwargs.get("model")) + set_span_attribute( + span, SpanAttributes.LLM_REQUEST_MAX_TOKENS, kwargs.get("max_tokens_to_sample") + ) + set_span_attribute( + span, SpanAttributes.LLM_REQUEST_TEMPERATURE, kwargs.get("temperature") + ) + set_span_attribute(span, SpanAttributes.LLM_REQUEST_TOP_P, kwargs.get("top_p")) + set_span_attribute( + span, SpanAttributes.LLM_FREQUENCY_PENALTY, kwargs.get("frequency_penalty") + ) + set_span_attribute( + span, SpanAttributes.LLM_PRESENCE_PENALTY, kwargs.get("presence_penalty") + ) + set_span_attribute(span, SpanAttributes.LLM_IS_STREAMING, kwargs.get("stream")) + + if should_send_prompts(): + if kwargs.get("prompt") is not None: + set_span_attribute( + span, f"{SpanAttributes.LLM_PROMPTS}.0.user", kwargs.get("prompt") + ) + + elif kwargs.get("messages") is not None: + for i, message in enumerate(kwargs.get("messages")): + set_span_attribute( + span, + f"{SpanAttributes.LLM_PROMPTS}.{i}.content", + _dump_content(message.get("content")), + ) + set_span_attribute( + span, f"{SpanAttributes.LLM_PROMPTS}.{i}.role", message.get("role") + ) + + +def _set_span_completions(span, response): + index = 0 + prefix = f"{SpanAttributes.LLM_COMPLETIONS}.{index}" + set_span_attribute(span, f"{prefix}.finish_reason", response.get("stop_reason")) + if response.get("completion"): + set_span_attribute(span, f"{prefix}.content", response.get("completion")) + elif response.get("content"): + for i, content in enumerate(response.get("content")): + set_span_attribute( + span, + f"{SpanAttributes.LLM_COMPLETIONS}.{i}.content", + content.text, + ) + + +@dont_throw +async def _aset_token_usage( + span, + anthropic, + request, + response, + metric_attributes: dict = {}, + token_histogram: Histogram = None, + choice_counter: Counter = None, +): + if not isinstance(response, dict): + response = response.__dict__ + + prompt_tokens = 0 + if hasattr(anthropic, "count_tokens"): + if request.get("prompt"): + prompt_tokens = await anthropic.count_tokens(request.get("prompt")) + elif request.get("messages"): + prompt_tokens = sum( + [ + await anthropic.count_tokens(m.get("content")) + for m in request.get("messages") + ] + ) + + if token_histogram and type(prompt_tokens) is int and prompt_tokens >= 0: + token_histogram.record( + prompt_tokens, + attributes={ + **metric_attributes, + SpanAttributes.LLM_TOKEN_TYPE: "input", + }, + ) + + completion_tokens = 0 + if hasattr(anthropic, "count_tokens"): + if response.get("completion"): + completion_tokens = await anthropic.count_tokens(response.get("completion")) + elif response.get("content"): + completion_tokens = await anthropic.count_tokens( + response.get("content")[0].text + ) + + if token_histogram and type(completion_tokens) is int and completion_tokens >= 0: + token_histogram.record( + completion_tokens, + attributes={ + **metric_attributes, + SpanAttributes.LLM_TOKEN_TYPE: "output", + }, + ) + + total_tokens = prompt_tokens + completion_tokens + + choices = 0 + if type(response.get("content")) is list: + choices = len(response.get("content")) + elif response.get("completion"): + choices = 1 + + if choices > 0 and choice_counter: + choice_counter.add( + choices, + attributes={ + **metric_attributes, + SpanAttributes.LLM_RESPONSE_STOP_REASON: response.get("stop_reason"), + }, + ) + + set_span_attribute(span, SpanAttributes.LLM_USAGE_PROMPT_TOKENS, prompt_tokens) + set_span_attribute( + span, SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, completion_tokens + ) + set_span_attribute(span, SpanAttributes.LLM_USAGE_TOTAL_TOKENS, total_tokens) + + +@dont_throw +def _set_token_usage( + span, + anthropic, + request, + response, + metric_attributes: dict = {}, + token_histogram: Histogram = None, + choice_counter: Counter = None, +): + if not isinstance(response, dict): + response = response.__dict__ + + prompt_tokens = 0 + if hasattr(anthropic, "count_tokens"): + if request.get("prompt"): + prompt_tokens = anthropic.count_tokens(request.get("prompt")) + elif request.get("messages"): + prompt_tokens = sum( + [ + anthropic.count_tokens(m.get("content")) + for m in request.get("messages") + ] + ) + + if token_histogram and type(prompt_tokens) is int and prompt_tokens >= 0: + token_histogram.record( + prompt_tokens, + attributes={ + **metric_attributes, + SpanAttributes.LLM_TOKEN_TYPE: "input", + }, + ) + + completion_tokens = 0 + if hasattr(anthropic, "count_tokens"): + if response.get("completion"): + completion_tokens = anthropic.count_tokens(response.get("completion")) + elif response.get("content"): + completion_tokens = anthropic.count_tokens(response.get("content")[0].text) + + if token_histogram and type(completion_tokens) is int and completion_tokens >= 0: + token_histogram.record( + completion_tokens, + attributes={ + **metric_attributes, + SpanAttributes.LLM_TOKEN_TYPE: "output", + }, + ) + + total_tokens = prompt_tokens + completion_tokens + + choices = 0 + if type(response.get("content")) is list: + choices = len(response.get("content")) + elif response.get("completion"): + choices = 1 + + if choices > 0 and choice_counter: + choice_counter.add( + choices, + attributes={ + **metric_attributes, + SpanAttributes.LLM_RESPONSE_STOP_REASON: response.get("stop_reason"), + }, + ) + + set_span_attribute(span, SpanAttributes.LLM_USAGE_PROMPT_TOKENS, prompt_tokens) + set_span_attribute( + span, SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, completion_tokens + ) + set_span_attribute(span, SpanAttributes.LLM_USAGE_TOTAL_TOKENS, total_tokens) + + +@dont_throw +def _set_response_attributes(span, response): + if not isinstance(response, dict): + response = response.__dict__ + set_span_attribute(span, SpanAttributes.LLM_RESPONSE_MODEL, response.get("model")) + + if response.get("usage"): + prompt_tokens = response.get("usage").input_tokens + completion_tokens = response.get("usage").output_tokens + set_span_attribute(span, SpanAttributes.LLM_USAGE_PROMPT_TOKENS, prompt_tokens) + set_span_attribute( + span, SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, completion_tokens + ) + set_span_attribute( + span, + SpanAttributes.LLM_USAGE_TOTAL_TOKENS, + prompt_tokens + completion_tokens, + ) + + if should_send_prompts(): + _set_span_completions(span, response) + + +def _with_tracer_wrapper(func): + """Helper for providing tracer for wrapper functions.""" + + def _with_tracer(tracer, to_wrap): + def wrapper(wrapped, instance, args, kwargs): + return func(tracer, to_wrap, wrapped, instance, args, kwargs) + + return wrapper + + return _with_tracer + + +def _with_chat_telemetry_wrapper(func): + """Helper for providing tracer for wrapper functions. Includes metric collectors.""" + + def _with_chat_telemetry( + tracer, + token_histogram, + choice_counter, + duration_histogram, + exception_counter, + to_wrap, + ): + def wrapper(wrapped, instance, args, kwargs): + return func( + tracer, + token_histogram, + choice_counter, + duration_histogram, + exception_counter, + to_wrap, + wrapped, + instance, + args, + kwargs, + ) + + return wrapper + + return _with_chat_telemetry + + +def _create_metrics(meter: Meter): + token_histogram = meter.create_histogram( + name=Meters.LLM_TOKEN_USAGE, + unit="token", + description="Measures number of input and output tokens used", + ) + + choice_counter = meter.create_counter( + name=Meters.LLM_GENERATION_CHOICES, + unit="choice", + description="Number of choices returned by chat completions call", + ) + + duration_histogram = meter.create_histogram( + name=Meters.LLM_OPERATION_DURATION, + unit="s", + description="GenAI operation duration", + ) + + exception_counter = meter.create_counter( + name=Meters.LLM_ANTHROPIC_COMPLETION_EXCEPTIONS, + unit="time", + description="Number of exceptions occurred during chat completions", + ) + + return token_histogram, choice_counter, duration_histogram, exception_counter + + +@_with_chat_telemetry_wrapper +def _wrap( + tracer: Tracer, + token_histogram: Histogram, + choice_counter: Counter, + duration_histogram: Histogram, + exception_counter: Counter, + to_wrap, + wrapped, + instance, + args, + kwargs, +): + """Instruments and calls every function defined in TO_WRAP.""" + if context_api.get_value(_SUPPRESS_INSTRUMENTATION_KEY) or context_api.get_value( + SUPPRESS_LANGUAGE_MODEL_INSTRUMENTATION_KEY + ): + return wrapped(*args, **kwargs) + + name = to_wrap.get("span_name") + span = tracer.start_span( + name, + kind=SpanKind.CLIENT, + attributes={ + SpanAttributes.LLM_SYSTEM: "Anthropic", + SpanAttributes.LLM_REQUEST_TYPE: LLMRequestTypeValues.COMPLETION.value, + }, + ) + + if span.is_recording(): + _set_input_attributes(span, kwargs) + + start_time = time.time() + try: + response = wrapped(*args, **kwargs) + except Exception as e: # pylint: disable=broad-except + end_time = time.time() + attributes = error_metrics_attributes(e) + + if duration_histogram: + duration = end_time - start_time + duration_histogram.record(duration, attributes=attributes) + + if exception_counter: + exception_counter.add(1, attributes=attributes) + + raise e + + end_time = time.time() + + if is_streaming_response(response): + return build_from_streaming_response( + span, + response, + instance._client, + start_time, + token_histogram, + choice_counter, + duration_histogram, + exception_counter, + kwargs, + ) + elif response: + try: + metric_attributes = shared_metrics_attributes(response) + + if duration_histogram: + duration = time.time() - start_time + duration_histogram.record( + duration, + attributes=metric_attributes, + ) + + if span.is_recording(): + _set_response_attributes(span, response) + _set_token_usage( + span, + instance._client, + kwargs, + response, + metric_attributes, + token_histogram, + choice_counter, + ) + + except Exception as ex: # pylint: disable=broad-except + logger.warning( + "Failed to set response attributes for anthropic span, error: %s", + str(ex), + ) + if span.is_recording(): + span.set_status(Status(StatusCode.OK)) + span.end() + return response + + +@_with_chat_telemetry_wrapper +async def _awrap( + tracer, + token_histogram: Histogram, + choice_counter: Counter, + duration_histogram: Histogram, + exception_counter: Counter, + to_wrap, + wrapped, + instance, + args, + kwargs, +): + """Instruments and calls every function defined in TO_WRAP.""" + if context_api.get_value(_SUPPRESS_INSTRUMENTATION_KEY) or context_api.get_value( + SUPPRESS_LANGUAGE_MODEL_INSTRUMENTATION_KEY + ): + return await wrapped(*args, **kwargs) + + name = to_wrap.get("span_name") + span = tracer.start_span( + name, + kind=SpanKind.CLIENT, + attributes={ + SpanAttributes.LLM_SYSTEM: "Anthropic", + SpanAttributes.LLM_REQUEST_TYPE: LLMRequestTypeValues.COMPLETION.value, + }, + ) + try: + if span.is_recording(): + _set_input_attributes(span, kwargs) + + except Exception as ex: # pylint: disable=broad-except + logger.warning( + "Failed to set input attributes for anthropic span, error: %s", str(ex) + ) + + start_time = time.time() + try: + response = await wrapped(*args, **kwargs) + except Exception as e: # pylint: disable=broad-except + end_time = time.time() + attributes = error_metrics_attributes(e) + + if duration_histogram: + duration = end_time - start_time + duration_histogram.record(duration, attributes=attributes) + + if exception_counter: + exception_counter.add(1, attributes=attributes) + + raise e + + if is_streaming_response(response): + return abuild_from_streaming_response( + span, + response, + instance._client, + start_time, + token_histogram, + choice_counter, + duration_histogram, + exception_counter, + kwargs, + ) + elif response: + metric_attributes = shared_metrics_attributes(response) + + if duration_histogram: + duration = time.time() - start_time + duration_histogram.record( + duration, + attributes=metric_attributes, + ) + + if span.is_recording(): + _set_response_attributes(span, response) + await _aset_token_usage( + span, + instance._client, + kwargs, + response, + metric_attributes, + token_histogram, + choice_counter, + ) + + if span.is_recording(): + span.set_status(Status(StatusCode.OK)) + span.end() + return response + + +def is_metrics_enabled() -> bool: + return (os.getenv("TRACELOOP_METRICS_ENABLED") or "true").lower() == "true" + + +class AnthropicInstrumentor(BaseInstrumentor): + """An instrumentor for Anthropic's client library.""" + + def __init__( + self, + enrich_token_usage: bool = False, + exception_logger=None, + get_common_metrics_attributes: Callable[[], dict] = lambda: {}, + ): + super().__init__() + Config.exception_logger = exception_logger + Config.enrich_token_usage = enrich_token_usage + Config.get_common_metrics_attributes = get_common_metrics_attributes + + def instrumentation_dependencies(self) -> Collection[str]: + return _instruments + + def _instrument(self, **kwargs): + tracer_provider = kwargs.get("tracer_provider") + tracer = get_tracer(__name__, __version__, tracer_provider) + + # meter and counters are inited here + meter_provider = kwargs.get("meter_provider") + meter = get_meter(__name__, __version__, meter_provider) + + if is_metrics_enabled(): + ( + token_histogram, + choice_counter, + duration_histogram, + exception_counter, + ) = _create_metrics(meter) + else: + ( + token_histogram, + choice_counter, + duration_histogram, + exception_counter, + ) = (None, None, None, None) + + for wrapped_method in WRAPPED_METHODS: + wrap_package = wrapped_method.get("package") + wrap_object = wrapped_method.get("object") + wrap_method = wrapped_method.get("method") + + try: + wrap_function_wrapper( + wrap_package, + f"{wrap_object}.{wrap_method}", + _wrap( + tracer, + token_histogram, + choice_counter, + duration_histogram, + exception_counter, + wrapped_method, + ), + ) + except ModuleNotFoundError: + pass # that's ok, we don't want to fail if some methods do not exist + + for wrapped_method in WRAPPED_AMETHODS: + wrap_package = wrapped_method.get("package") + wrap_object = wrapped_method.get("object") + wrap_method = wrapped_method.get("method") + try: + wrap_function_wrapper( + wrap_package, + f"{wrap_object}.{wrap_method}", + _awrap( + tracer, + token_histogram, + choice_counter, + duration_histogram, + exception_counter, + wrapped_method, + ), + ) + except ModuleNotFoundError: + pass # that's ok, we don't want to fail if some methods do not exist + + def _uninstrument(self, **kwargs): + for wrapped_method in WRAPPED_METHODS: + wrap_package = wrapped_method.get("package") + wrap_object = wrapped_method.get("object") + unwrap( + f"{wrap_package}.{wrap_object}", + wrapped_method.get("method"), + ) + for wrapped_method in WRAPPED_AMETHODS: + wrap_object = wrapped_method.get("object") + unwrap( + f"anthropic.resources.completions.{wrap_object}", + wrapped_method.get("method"), + ) diff --git a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/config.py b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/config.py new file mode 100644 index 000000000..408df99ee --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/config.py @@ -0,0 +1,7 @@ +from typing import Callable + + +class Config: + enrich_token_usage = False + exception_logger = None + get_common_metrics_attributes: Callable[[], dict] = lambda: {} diff --git a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/streaming.py b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/streaming.py new file mode 100644 index 000000000..807a4ec32 --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/streaming.py @@ -0,0 +1,258 @@ +import logging +import time + +from opentelemetry.instrumentation.groq.config import Config +from opentelemetry.instrumentation.groq.utils import ( + dont_throw, + error_metrics_attributes, + set_span_attribute, + shared_metrics_attributes, + should_send_prompts, +) +from opentelemetry.metrics import Counter, Histogram +from opentelemetry.semconv_ai import SpanAttributes +from opentelemetry.trace.status import Status, StatusCode + +logger = logging.getLogger(__name__) + + +@dont_throw +def _process_response_item(item, complete_response): + if item.type == "message_start": + complete_response["model"] = item.message.model + complete_response["usage"] = item.message.usage + elif item.type == "content_block_start": + index = item.index + if len(complete_response.get("events")) <= index: + complete_response["events"].append({"index": index, "text": ""}) + elif item.type == "content_block_delta" and item.delta.type == "text_delta": + index = item.index + complete_response.get("events")[index]["text"] += item.delta.text + elif item.type == "message_delta": + for event in complete_response.get("events", []): + event["finish_reason"] = item.delta.stop_reason + + +def _set_token_usage( + span, + complete_response, + prompt_tokens, + completion_tokens, + metric_attributes: dict = {}, + token_histogram: Histogram = None, + choice_counter: Counter = None, +): + total_tokens = prompt_tokens + completion_tokens + set_span_attribute(span, SpanAttributes.LLM_USAGE_PROMPT_TOKENS, prompt_tokens) + set_span_attribute( + span, SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, completion_tokens + ) + set_span_attribute(span, SpanAttributes.LLM_USAGE_TOTAL_TOKENS, total_tokens) + + set_span_attribute( + span, SpanAttributes.LLM_RESPONSE_MODEL, complete_response.get("model") + ) + + if token_histogram and type(prompt_tokens) is int and prompt_tokens >= 0: + token_histogram.record( + prompt_tokens, + attributes={ + **metric_attributes, + SpanAttributes.LLM_TOKEN_TYPE: "input", + }, + ) + + if token_histogram and type(completion_tokens) is int and completion_tokens >= 0: + token_histogram.record( + completion_tokens, + attributes={ + **metric_attributes, + SpanAttributes.LLM_TOKEN_TYPE: "output", + }, + ) + + if type(complete_response.get("events")) is list and choice_counter: + for event in complete_response.get("events"): + choice_counter.add( + 1, + attributes={ + **metric_attributes, + SpanAttributes.LLM_RESPONSE_FINISH_REASON: event.get( + "finish_reason" + ), + }, + ) + + +def _set_completions(span, events): + if not span.is_recording() or not events: + return + + try: + for event in events: + index = event.get("index") + prefix = f"{SpanAttributes.LLM_COMPLETIONS}.{index}" + set_span_attribute( + span, f"{prefix}.finish_reason", event.get("finish_reason") + ) + set_span_attribute(span, f"{prefix}.content", event.get("text")) + except Exception as e: + logger.warning("Failed to set completion attributes, error: %s", str(e)) + + +@dont_throw +def build_from_streaming_response( + span, + response, + instance, + start_time, + token_histogram: Histogram = None, + choice_counter: Counter = None, + duration_histogram: Histogram = None, + exception_counter: Counter = None, + kwargs: dict = {}, +): + complete_response = {"events": [], "model": "", "usage": {}} + for item in response: + try: + yield item + except Exception as e: + attributes = error_metrics_attributes(e) + if exception_counter: + exception_counter.add(1, attributes=attributes) + raise e + _process_response_item(item, complete_response) + + metric_attributes = shared_metrics_attributes(complete_response) + + if duration_histogram: + duration = time.time() - start_time + duration_histogram.record( + duration, + attributes=metric_attributes, + ) + + # calculate token usage + if Config.enrich_token_usage: + try: + prompt_tokens = -1 + completion_tokens = -1 + + # prompt_usage + if kwargs.get("prompt"): + prompt_tokens = instance.count_tokens(kwargs.get("prompt")) + elif kwargs.get("messages"): + prompt_tokens = sum( + [ + instance.count_tokens(m.get("content")) + for m in kwargs.get("messages") + ] + ) + + # completion_usage + completion_content = "" + if complete_response.get("events"): + model_name = complete_response.get("model") or None + for event in complete_response.get("events"): # type: dict + if event.get("text"): + completion_content += event.get("text") + + if model_name: + completion_tokens = instance.count_tokens(completion_content) + + _set_token_usage( + span, + complete_response, + prompt_tokens, + completion_tokens, + metric_attributes, + token_histogram, + choice_counter, + ) + except Exception as e: + logger.warning("Failed to set token usage, error: %s", str(e)) + + if should_send_prompts(): + _set_completions(span, complete_response.get("events")) + + span.set_status(Status(StatusCode.OK)) + span.end() + + +@dont_throw +async def abuild_from_streaming_response( + span, + response, + instance, + start_time, + token_histogram: Histogram = None, + choice_counter: Counter = None, + duration_histogram: Histogram = None, + exception_counter: Counter = None, + kwargs: dict = {}, +): + complete_response = {"events": [], "model": ""} + async for item in response: + try: + yield item + except Exception as e: + attributes = error_metrics_attributes(e) + if exception_counter: + exception_counter.add(1, attributes=attributes) + raise e + _process_response_item(item, complete_response) + + metric_attributes = shared_metrics_attributes(complete_response) + + if duration_histogram: + duration = time.time() - start_time + duration_histogram.record( + duration, + attributes=metric_attributes, + ) + + # calculate token usage + if Config.enrich_token_usage: + try: + prompt_tokens = -1 + completion_tokens = -1 + + # prompt_usage + if kwargs.get("prompt"): + prompt_tokens = await instance.count_tokens(kwargs.get("prompt")) + elif kwargs.get("messages"): + prompt_tokens = sum( + [ + await instance.count_tokens(m.get("content")) + for m in kwargs.get("messages") + ] + ) + + # completion_usage + completion_content = "" + if complete_response.get("events"): + model_name = complete_response.get("model") or None + for event in complete_response.get("events"): # type: dict + if event.get("text"): + completion_content += event.get("text") + + if model_name: + completion_tokens = await instance.count_tokens(completion_content) + + _set_token_usage( + span, + complete_response, + prompt_tokens, + completion_tokens, + metric_attributes, + token_histogram, + choice_counter, + ) + except Exception as e: + logger.warning("Failed to set token usage, error: %s", str(e)) + + if should_send_prompts(): + _set_completions(span, complete_response.get("events")) + + span.set_status(Status(StatusCode.OK)) + span.end() diff --git a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/utils.py b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/utils.py new file mode 100644 index 000000000..af8390a6f --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/utils.py @@ -0,0 +1,69 @@ +import os +import logging +import traceback +from opentelemetry import context as context_api +from opentelemetry.instrumentation.groq.config import Config +from opentelemetry.semconv_ai import SpanAttributes + +GEN_AI_SYSTEM = "gen_ai.system" +GEN_AI_SYSTEM_ANTHROPIC = "anthropic" + + +def set_span_attribute(span, name, value): + if value is not None: + if value != "": + span.set_attribute(name, value) + return + + +def should_send_prompts(): + return ( + os.getenv("TRACELOOP_TRACE_CONTENT") or "true" + ).lower() == "true" or context_api.get_value("override_enable_content_tracing") + + +def dont_throw(func): + """ + A decorator that wraps the passed in function and logs exceptions instead of throwing them. + + @param func: The function to wrap + @return: The wrapper function + """ + # Obtain a logger specific to the function's module + logger = logging.getLogger(func.__module__) + + def wrapper(*args, **kwargs): + try: + return func(*args, **kwargs) + except Exception as e: + logger.debug( + "OpenLLMetry failed to trace in %s, error: %s", + func.__name__, + traceback.format_exc(), + ) + if Config.exception_logger: + Config.exception_logger(e) + + return wrapper + + +@dont_throw +def shared_metrics_attributes(response): + if not isinstance(response, dict): + response = response.__dict__ + + common_attributes = Config.get_common_metrics_attributes() + + return { + **common_attributes, + GEN_AI_SYSTEM: GEN_AI_SYSTEM_ANTHROPIC, + SpanAttributes.LLM_RESPONSE_MODEL: response.get("model"), + } + + +@dont_throw +def error_metrics_attributes(exception): + return { + GEN_AI_SYSTEM: GEN_AI_SYSTEM_ANTHROPIC, + "error.type": exception.__class__.__name__, + } diff --git a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/version.py b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/version.py new file mode 100644 index 000000000..c69b868b2 --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/version.py @@ -0,0 +1 @@ +__version__ = "0.29.2" diff --git a/packages/opentelemetry-instrumentation-groq/poetry.lock b/packages/opentelemetry-instrumentation-groq/poetry.lock new file mode 100644 index 000000000..b0773335a --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/poetry.lock @@ -0,0 +1,1054 @@ +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[[package]] +name = "anyio" +version = "4.4.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, + {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] + +[[package]] +name = "autopep8" +version = "2.2.0" +description = "A tool that automatically formats Python code to conform to the PEP 8 style guide" +optional = false +python-versions = ">=3.8" +files = [ + {file = "autopep8-2.2.0-py2.py3-none-any.whl", hash = "sha256:05418a981f038969d8bdcd5636bf15948db7555ae944b9f79b5a34b35f1370d4"}, + {file = "autopep8-2.2.0.tar.gz", hash = "sha256:d306a0581163ac29908280ad557773a95a9bede072c0fafed6f141f5311f43c1"}, +] + +[package.dependencies] +pycodestyle = ">=2.11.0" +tomli = {version = "*", markers = "python_version < \"3.11\""} + +[[package]] +name = "certifi" +version = "2024.8.30" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "deprecated" +version = "1.2.14" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, + {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, +] + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] + +[[package]] +name = "distro" +version = "1.9.0" +description = "Distro - an OS platform information API" +optional = false +python-versions = ">=3.6" +files = [ + {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, + {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.2.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "flake8" +version = "7.0.0" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-7.0.0-py2.py3-none-any.whl", hash = "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"}, + {file = "flake8-7.0.0.tar.gz", hash = "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.2.0,<3.3.0" + +[[package]] +name = "groq" +version = "0.10.0" +description = "The official Python library for the groq API" +optional = false +python-versions = ">=3.7" +files = [ + {file = "groq-0.10.0-py3-none-any.whl", hash = "sha256:6939e3c62b005e7aa9cabca6ea2eaf96cea595e2f7d4658df6c0c7c8ccf59410"}, + {file = "groq-0.10.0.tar.gz", hash = "sha256:7653aad4c0b363928970fc55626a83624f5eab6503ee74fb25f255e24e05fcf8"}, +] + +[package.dependencies] +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +typing-extensions = ">=4.7,<5" + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "1.0.5" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.26.0)"] + +[[package]] +name = "httpx" +version = "0.27.2" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, + {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "idna" +version = "3.8" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +files = [ + {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"}, + {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, +] + +[[package]] +name = "importlib-metadata" +version = "8.4.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1"}, + {file = "importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "multidict" +version = "6.0.5" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, + {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, + {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, + {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, + {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, + {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, + {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, + {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, + {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, + {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, + {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, + {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, + {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, + {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, + {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, + {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, +] + +[[package]] +name = "opentelemetry-api" +version = "1.27.0" +description = "OpenTelemetry Python API" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_api-1.27.0-py3-none-any.whl", hash = "sha256:953d5871815e7c30c81b56d910c707588000fff7a3ca1c73e6531911d53065e7"}, + {file = "opentelemetry_api-1.27.0.tar.gz", hash = "sha256:ed673583eaa5f81b5ce5e86ef7cdaf622f88ef65f0b9aab40b843dcae5bef342"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +importlib-metadata = ">=6.0,<=8.4.0" + +[[package]] +name = "opentelemetry-instrumentation" +version = "0.48b0" +description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation-0.48b0-py3-none-any.whl", hash = "sha256:a69750dc4ba6a5c3eb67986a337185a25b739966d80479befe37b546fc870b44"}, + {file = "opentelemetry_instrumentation-0.48b0.tar.gz", hash = "sha256:94929685d906380743a71c3970f76b5f07476eea1834abd5dd9d17abfe23cc35"}, +] + +[package.dependencies] +opentelemetry-api = ">=1.4,<2.0" +setuptools = ">=16.0" +wrapt = ">=1.0.0,<2.0.0" + +[[package]] +name = "opentelemetry-sdk" +version = "1.27.0" +description = "OpenTelemetry Python SDK" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_sdk-1.27.0-py3-none-any.whl", hash = "sha256:365f5e32f920faf0fd9e14fdfd92c086e317eaa5f860edba9cdc17a380d9197d"}, + {file = "opentelemetry_sdk-1.27.0.tar.gz", hash = "sha256:d525017dea0ccce9ba4e0245100ec46ecdc043f2d7b8315d56b19aff0904fa6f"}, +] + +[package.dependencies] +opentelemetry-api = "1.27.0" +opentelemetry-semantic-conventions = "0.48b0" +typing-extensions = ">=3.7.4" + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.48b0" +description = "OpenTelemetry Semantic Conventions" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_semantic_conventions-0.48b0-py3-none-any.whl", hash = "sha256:a0de9f45c413a8669788a38569c7e0a11ce6ce97861a628cca785deecdc32a1f"}, + {file = "opentelemetry_semantic_conventions-0.48b0.tar.gz", hash = "sha256:12d74983783b6878162208be57c9effcb89dc88691c64992d70bb89dc00daa1a"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +opentelemetry-api = "1.27.0" + +[[package]] +name = "opentelemetry-semantic-conventions-ai" +version = "0.4.1" +description = "OpenTelemetry Semantic Conventions Extension for Large Language Models" +optional = false +python-versions = "<4,>=3.9" +files = [ + {file = "opentelemetry_semantic_conventions_ai-0.4.1-py3-none-any.whl", hash = "sha256:b6c6e3976a5ea31058faeaf0450a6a56d4576a9734c94c1a4cb82332ee635fe3"}, + {file = "opentelemetry_semantic_conventions_ai-0.4.1.tar.gz", hash = "sha256:aaf59b2f24d745692170b96d86d7c5560f42443dcf88ced49ae9d4542db1902f"}, +] + +[[package]] +name = "packaging" +version = "24.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, +] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pycodestyle" +version = "2.11.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, + {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, +] + +[[package]] +name = "pydantic" +version = "2.8.2" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"}, + {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.20.1" +typing-extensions = [ + {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, + {version = ">=4.6.1", markers = "python_version < \"3.13\""}, +] + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.20.1" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3"}, + {file = "pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840"}, + {file = "pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250"}, + {file = "pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c"}, + {file = "pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312"}, + {file = "pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b"}, + {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"}, + {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b"}, + {file = "pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a"}, + {file = "pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2"}, + {file = "pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231"}, + {file = "pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24"}, + {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1"}, + {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd"}, + {file = "pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688"}, + {file = "pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d"}, + {file = "pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686"}, + {file = "pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83"}, + {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203"}, + {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0"}, + {file = "pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e"}, + {file = "pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20"}, + {file = "pydantic_core-2.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91"}, + {file = "pydantic_core-2.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd"}, + {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa"}, + {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987"}, + {file = "pydantic_core-2.20.1-cp38-none-win32.whl", hash = "sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a"}, + {file = "pydantic_core-2.20.1-cp38-none-win_amd64.whl", hash = "sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434"}, + {file = "pydantic_core-2.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c"}, + {file = "pydantic_core-2.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1"}, + {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09"}, + {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab"}, + {file = "pydantic_core-2.20.1-cp39-none-win32.whl", hash = "sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2"}, + {file = "pydantic_core-2.20.1-cp39-none-win_amd64.whl", hash = "sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7"}, + {file = "pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pyflakes" +version = "3.2.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, + {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, +] + +[[package]] +name = "pytest" +version = "8.3.2" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, + {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-asyncio" +version = "0.23.8" +description = "Pytest support for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest_asyncio-0.23.8-py3-none-any.whl", hash = "sha256:50265d892689a5faefb84df80819d1ecef566eb3549cf915dfb33569359d1ce2"}, + {file = "pytest_asyncio-0.23.8.tar.gz", hash = "sha256:759b10b33a6dc61cce40a8bd5205e302978bbbcc00e279a8b61d9a6a3c82e4d3"}, +] + +[package.dependencies] +pytest = ">=7.0.0,<9" + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] +testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] + +[[package]] +name = "pytest-recording" +version = "0.13.2" +description = "A pytest plugin that allows you recording of network interactions via VCR.py" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest_recording-0.13.2-py3-none-any.whl", hash = "sha256:3820fe5743d1ac46e807989e11d073cb776a60bdc544cf43ebca454051b22d13"}, + {file = "pytest_recording-0.13.2.tar.gz", hash = "sha256:000c3babbb466681457fd65b723427c1779a0c6c17d9e381c3142a701e124877"}, +] + +[package.dependencies] +pytest = ">=3.5.0" +vcrpy = ">=2.0.1" + +[package.extras] +dev = ["pytest-httpbin", "pytest-mock", "requests", "werkzeug (==3.0.3)"] +tests = ["pytest-httpbin", "pytest-mock", "requests", "werkzeug (==3.0.3)"] + +[[package]] +name = "pytest-sugar" +version = "1.0.0" +description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." +optional = false +python-versions = "*" +files = [ + {file = "pytest-sugar-1.0.0.tar.gz", hash = "sha256:6422e83258f5b0c04ce7c632176c7732cab5fdb909cb39cca5c9139f81276c0a"}, + {file = "pytest_sugar-1.0.0-py3-none-any.whl", hash = "sha256:70ebcd8fc5795dc457ff8b69d266a4e2e8a74ae0c3edc749381c64b5246c8dfd"}, +] + +[package.dependencies] +packaging = ">=21.3" +pytest = ">=6.2.0" +termcolor = ">=2.1.0" + +[package.extras] +dev = ["black", "flake8", "pre-commit"] + +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] + +[[package]] +name = "setuptools" +version = "74.0.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-74.0.0-py3-none-any.whl", hash = "sha256:0274581a0037b638b9fc1c6883cc71c0210865aaa76073f7882376b641b84e8f"}, + {file = "setuptools-74.0.0.tar.gz", hash = "sha256:a85e96b8be2b906f3e3e789adec6a9323abf79758ecfa3065bd740d81158b11e"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] +core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "termcolor" +version = "2.4.0" +description = "ANSI color formatting for output in terminal" +optional = false +python-versions = ">=3.8" +files = [ + {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, + {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[[package]] +name = "urllib3" +version = "1.26.20" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, + {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, +] + +[package.extras] +brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "vcrpy" +version = "6.0.1" +description = "Automatically mock your HTTP interactions to simplify and speed up testing" +optional = false +python-versions = ">=3.8" +files = [ + {file = "vcrpy-6.0.1-py2.py3-none-any.whl", hash = "sha256:621c3fb2d6bd8aa9f87532c688e4575bcbbde0c0afeb5ebdb7e14cac409edfdd"}, + {file = "vcrpy-6.0.1.tar.gz", hash = "sha256:9e023fee7f892baa0bbda2f7da7c8ac51165c1c6e38ff8688683a12a4bde9278"}, +] + +[package.dependencies] +PyYAML = "*" +urllib3 = {version = "<2", markers = "platform_python_implementation == \"PyPy\" or python_version < \"3.10\""} +wrapt = "*" +yarl = "*" + +[package.extras] +tests = ["Werkzeug (==2.0.3)", "aiohttp", "boto3", "httplib2", "httpx", "pytest", "pytest-aiohttp", "pytest-asyncio", "pytest-cov", "pytest-httpbin", "requests (>=2.22.0)", "tornado", "urllib3"] + +[[package]] +name = "wrapt" +version = "1.16.0" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = ">=3.6" +files = [ + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, +] + +[[package]] +name = "yarl" +version = "1.9.7" +description = "Yet another URL library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "yarl-1.9.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:60c04415b31a1611ef5989a6084dd6f6b95652c6a18378b58985667b65b2ecb6"}, + {file = "yarl-1.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1787dcfdbe730207acb454548a6e19f80ae75e6d2d1f531c5a777bc1ab6f7952"}, + {file = "yarl-1.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5ddad20363f9f1bbedc95789c897da62f939e6bc855793c3060ef8b9f9407bf"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdb156a06208fc9645ae7cc0fca45c40dd40d7a8c4db626e542525489ca81a9"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:522fa3d300d898402ae4e0fa7c2c21311248ca43827dc362a667de87fdb4f1be"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7f9cabfb8b980791b97a3ae3eab2e38b2ba5eab1af9b7495bdc44e1ce7c89e3"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fc728857df4087da6544fc68f62d7017fa68d74201d5b878e18ed4822c31fb3"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dba2ebac677184d56374fa3e452b461f5d6a03aa132745e648ae8859361eb6b"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a95167ae34667c5cc7d9206c024f793e8ffbadfb307d5c059de470345de58a21"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9d319ac113ca47352319cbea92d1925a37cb7bd61a8c2f3e3cd2e96eb33cccae"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:2d71a5d818d82586ac46265ae01466e0bda0638760f18b21f1174e0dd58a9d2f"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ff03f1c1ac474c66d474929ae7e4dd195592c1c7cc8c36418528ed81b1ca0a79"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78250f635f221dde97d02c57aade3313310469bc291888dfe32acd1012594441"}, + {file = "yarl-1.9.7-cp310-cp310-win32.whl", hash = "sha256:f3aaf9fa960d55bd7876d55d7ea3cc046f3660df1ff73fc1b8c520a741ed1f21"}, + {file = "yarl-1.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:e8362c941e07fbcde851597672a5e41b21dc292b7d5a1dc439b7a93c9a1af5d9"}, + {file = "yarl-1.9.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:596069ddeaf72b5eb36cd714dcd2b5751d0090d05a8d65113b582ed9e1c801fb"}, + {file = "yarl-1.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cb870907e8b86b2f32541403da9455afc1e535ce483e579bea0e6e79a0cc751c"}, + {file = "yarl-1.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ca5e86be84492fa403c4dcd4dcaf8e1b1c4ffc747b5176f7c3d09878c45719b0"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99cecfb51c84d00132db909e83ae388793ca86e48df7ae57f1be0beab0dcce5"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25508739e9b44d251172145f54c084b71747b09e4d237dc2abb045f46c36a66e"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:60f3b5aec3146b6992640592856414870f5b20eb688c1f1d5f7ac010a7f86561"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1557456afce5db3d655b5f8a31cdcaae1f47e57958760525c44b76e812b4987"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71bb1435a84688ed831220c5305d96161beb65cac4a966374475348aa3de4575"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f87d8645a7a806ec8f66aac5e3b1dcb5014849ff53ffe2a1f0b86ca813f534c7"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:58e3f01673873b8573da3abe138debc63e4e68541b2104a55df4c10c129513a4"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8af0bbd4d84f8abdd9b11be9488e32c76b1501889b73c9e2292a15fb925b378b"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7fc441408ed0d9c6d2d627a02e281c21f5de43eb5209c16636a17fc704f7d0f8"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a9552367dc440870556da47bb289a806f08ad06fbc4054072d193d9e5dd619ba"}, + {file = "yarl-1.9.7-cp311-cp311-win32.whl", hash = "sha256:628619008680a11d07243391271b46f07f13b75deb9fe92ef342305058c70722"}, + {file = "yarl-1.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:bc23d870864971c8455cfba17498ccefa53a5719ea9f5fce5e7e9c1606b5755f"}, + {file = "yarl-1.9.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d8cf3d0b67996edc11957aece3fbce4c224d0451c7c3d6154ec3a35d0e55f6b"}, + {file = "yarl-1.9.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3a7748cd66fef49c877e59503e0cc76179caf1158d1080228e67e1db14554f08"}, + {file = "yarl-1.9.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a6fa3aeca8efabb0fbbb3b15e0956b0cb77f7d9db67c107503c30af07cd9e00"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf37dd0008e5ac5c3880198976063c491b6a15b288d150d12833248cf2003acb"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87aa5308482f248f8c3bd9311cd6c7dfd98ea1a8e57e35fb11e4adcac3066003"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:867b13c1b361f9ba5d2f84dc5408082f5d744c83f66de45edc2b96793a9c5e48"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48ce93947554c2c85fe97fc4866646ec90840bc1162e4db349b37d692a811755"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcd3d94b848cba132f39a5b40d80b0847d001a91a6f35a2204505cdd46afe1b2"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d06d6a8f98dd87646d98f0c468be14b201e47ec6092ad569adf835810ad0dffb"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:91567ff4fce73d2e7ac67ed5983ad26ba2343bc28cb22e1e1184a9677df98d7c"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1d5594512541e63188fea640b7f066c218d2176203d6e6f82abf702ae3dca3b2"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9c2743e43183e4afbb07d5605693299b8756baff0b086c25236c761feb0e3c56"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:daa69a3a2204355af39f4cfe7f3870d87c53d77a597b5100b97e3faa9460428b"}, + {file = "yarl-1.9.7-cp312-cp312-win32.whl", hash = "sha256:36b16884336c15adf79a4bf1d592e0c1ffdb036a760e36a1361565b66785ec6c"}, + {file = "yarl-1.9.7-cp312-cp312-win_amd64.whl", hash = "sha256:2ead2f87a1174963cc406d18ac93d731fbb190633d3995fa052d10cefae69ed8"}, + {file = "yarl-1.9.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:808eddabcb6f7b2cdb6929b3e021ac824a2c07dc7bc83f7618e18438b1b65781"}, + {file = "yarl-1.9.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:395ab0d8ce6d104a988da429bcbfd445e03fb4c911148dfd523f69d13f772e47"}, + {file = "yarl-1.9.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:49827dfccbd59c4499605c13805e947349295466e490860a855b7c7e82ec9c75"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6b8bbdd425d0978311520ea99fb6c0e9e04e64aee84fac05f3157ace9f81b05"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71d33fd1c219b5b28ee98cd76da0c9398a4ed4792fd75c94135237db05ba5ca8"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:62440431741d0b7d410e5cbad800885e3289048140a43390ecab4f0b96dde3bb"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db97210433366dfba55590e48285b89ad0146c52bf248dd0da492dd9f0f72cf"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:653597b615809f2e5f4dba6cd805608b6fd3597128361a22cc612cf7c7a4d1bf"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:df47612129e66f7ce7c9994d4cd4e6852f6e3bf97699375d86991481796eeec8"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5e338b6febbae6c9fe86924bac3ea9c1944e33255c249543cd82a4af6df6047b"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e649d37d04665dddb90994bbf0034331b6c14144cc6f3fbce400dc5f28dc05b7"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0a1b8fd849567be56342e988e72c9d28bd3c77b9296c38b9b42d2fe4813c9d3f"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f9d715b2175dff9a49c6dafdc2ab3f04850ba2f3d4a77f69a5a1786b057a9d45"}, + {file = "yarl-1.9.7-cp313-cp313-win32.whl", hash = "sha256:bc9233638b07c2e4a3a14bef70f53983389bffa9e8cb90a2da3f67ac9c5e1842"}, + {file = "yarl-1.9.7-cp313-cp313-win_amd64.whl", hash = "sha256:62e110772330d7116f91e79cd83fef92545cb2f36414c95881477aa01971f75f"}, + {file = "yarl-1.9.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a564155cc2194ecd9c0d8f8dc57059b822a507de5f08120063675eb9540576aa"}, + {file = "yarl-1.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03e917cc44a01e1be60a83ee1a17550b929490aaa5df2a109adc02137bddf06b"}, + {file = "yarl-1.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:eefda67ba0ba44ab781e34843c266a76f718772b348f7c5d798d8ea55b95517f"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:316c82b499b6df41444db5dea26ee23ece9356e38cea43a8b2af9e6d8a3558e4"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10452727843bc847596b75e30a7fe92d91829f60747301d1bd60363366776b0b"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:050f3e4d886be55728fef268587d061c5ce6f79a82baba71840801b63441c301"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0aabe557446aa615693a82b4d3803c102fd0e7a6a503bf93d744d182a510184"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23404842228e6fa8ace235024519df37f3f8e173620407644d40ddca571ff0f4"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:34736fcc9d6d7080ebbeb0998ecb91e4f14ad8f18648cf0b3099e2420a225d86"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:48f7a158f3ca67509d21cb02a96964e4798b6f133691cc0c86cf36e26e26ec8f"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:6639444d161c693cdabb073baaed1945c717d3982ecedf23a219bc55a242e728"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:1cd450e10cb53d63962757c3f6f7870be49a3e448c46621d6bd46f8088d532de"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:74d3ef5e81f81507cea04bf5ae22f18ef538607a7c754aac2b6e3029956a2842"}, + {file = "yarl-1.9.7-cp38-cp38-win32.whl", hash = "sha256:4052dbd0c900bece330e3071c636f99dff06e4628461a29b38c6e222a427cf98"}, + {file = "yarl-1.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:dd08da4f2d171e19bd02083c921f1bef89f8f5f87000d0ffc49aa257bc5a9802"}, + {file = "yarl-1.9.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ab906a956d2109c6ea11e24c66592b06336e2743509290117f0f7f47d2c1dd3"}, + {file = "yarl-1.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d8ad761493d5aaa7ab2a09736e62b8a220cb0b10ff8ccf6968c861cd8718b915"}, + {file = "yarl-1.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d35f9cdab0ec5e20cf6d2bd46456cf599052cf49a1698ef06b9592238d1cf1b1"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a48d2b9f0ae29a456fb766ae461691378ecc6cf159dd9f938507d925607591c3"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cf85599c9336b89b92c313519bcaa223d92fa5d98feb4935a47cce2e8722b4b8"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e8916b1ff7680b1f2b1608c82dc15c569b9f2cb2da100c747c291f1acf18a14"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29c80890e0a64fb0e5f71350d48da330995073881f8b8e623154aef631febfb0"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9163d21aa40ff8528db2aee2b0b6752efe098055b41ab8e5422b2098457199fe"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:65e3098969baf221bb45e3b2f60735fc2b154fc95902131ebc604bae4c629ea6"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cddebd096effe4be90fd378e4224cd575ac99e1c521598a6900e94959006e02e"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:8525f955a2dcc281573b6aadeb8ab9c37e2d3428b64ca6a2feec2a794a69c1da"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:5d585c7d834c13f24c7e3e0efaf1a4b7678866940802e11bd6c4d1f99c935e6b"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:78805148e780a9ca66f3123e04741e344b66cf06b4fb13223e3a209f39a6da55"}, + {file = "yarl-1.9.7-cp39-cp39-win32.whl", hash = "sha256:3f53df493ec80b76969d6e1ae6e4411a55ab1360e02b80c84bd4b33d61a567ba"}, + {file = "yarl-1.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:c81c28221a85add23a0922a6aeb2cdda7f9723e03e2dfae06fee5c57fe684262"}, + {file = "yarl-1.9.7-py3-none-any.whl", hash = "sha256:49935cc51d272264358962d050d726c3e5603a616f53e52ea88e9df1728aa2ee"}, + {file = "yarl-1.9.7.tar.gz", hash = "sha256:f28e602edeeec01fc96daf7728e8052bc2e12a672e2a138561a1ebaf30fd9df7"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[[package]] +name = "zipp" +version = "3.20.1" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.20.1-py3-none-any.whl", hash = "sha256:9960cd8967c8f85a56f920d5d507274e74f9ff813a0ab8889a5b5be2daf44064"}, + {file = "zipp-3.20.1.tar.gz", hash = "sha256:c22b14cc4763c5a5b04134207736c107db42e9d3ef2d9779d465f5f1bcba572b"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] + +[extras] +instruments = [] + +[metadata] +lock-version = "2.0" +python-versions = ">=3.9,<4" +content-hash = "b0b28d441c12011d91b9a3dd5928ce7c79f71a4a88c58a668dfd0fe8ac4378d6" diff --git a/packages/opentelemetry-instrumentation-groq/poetry.toml b/packages/opentelemetry-instrumentation-groq/poetry.toml new file mode 100644 index 000000000..ab1033bd3 --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/poetry.toml @@ -0,0 +1,2 @@ +[virtualenvs] +in-project = true diff --git a/packages/opentelemetry-instrumentation-groq/project.json b/packages/opentelemetry-instrumentation-groq/project.json new file mode 100644 index 000000000..05b23027a --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/project.json @@ -0,0 +1,78 @@ +{ + "name": "opentelemetry-instrumentation-groq", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "packages/opentelemetry-instrumentation-groq/opentelemetry_instrumentation_groq", + "targets": { + "lock": { + "executor": "@nxlv/python:run-commands", + "options": { + "command": "poetry lock --no-update", + "cwd": "packages/opentelemetry-instrumentation-groq" + } + }, + "add": { + "executor": "@nxlv/python:add", + "options": {} + }, + "update": { + "executor": "@nxlv/python:update", + "options": {} + }, + "remove": { + "executor": "@nxlv/python:remove", + "options": {} + }, + "build": { + "executor": "@nxlv/python:build", + "outputs": ["{projectRoot}/dist"], + "options": { + "outputPath": "packages/opentelemetry-instrumentation-groq/dist", + "publish": false, + "lockedVersions": true, + "bundleLocalDependencies": true + } + }, + "install": { + "executor": "@nxlv/python:install", + "options": { + "silent": false, + "args": "", + "cacheDir": ".cache/pypoetry", + "verbose": false, + "debug": false + } + }, + "lint": { + "executor": "@nxlv/python:flake8", + "outputs": [ + "{workspaceRoot}/reports/packages/opentelemetry-instrumentation-groq/pylint.txt" + ], + "options": { + "outputFile": "reports/packages/opentelemetry-instrumentation-groq/pylint.txt" + } + }, + "test": { + "executor": "@nxlv/python:run-commands", + "outputs": [ + "{workspaceRoot}/reports/packages/opentelemetry-instrumentation-groq/unittests", + "{workspaceRoot}/coverage/packages/opentelemetry-instrumentation-groq" + ], + "options": { + "command": "poetry run pytest tests/", + "cwd": "packages/opentelemetry-instrumentation-groq" + } + }, + "build-release": { + "executor": "@nxlv/python:run-commands", + "options": { + "commands": [ + "chmod +x ../../scripts/build-release.sh", + "../../scripts/build-release.sh" + ], + "cwd": "packages/opentelemetry-instrumentation-groq" + } + } + }, + "tags": ["instrumentation"] +} diff --git a/packages/opentelemetry-instrumentation-groq/pyproject.toml b/packages/opentelemetry-instrumentation-groq/pyproject.toml new file mode 100644 index 000000000..e07910aa0 --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/pyproject.toml @@ -0,0 +1,54 @@ +[tool.coverage.run] +branch = true +source = [ "opentelemetry/instrumentation/groq" ] + +[tool.coverage.report] +exclude_lines = ['if TYPE_CHECKING:'] +show_missing = true + +[tool.poetry] +name = "opentelemetry-instrumentation-groq" +version = "0.29.2" +description = "OpenTelemetry Groq instrumentation" +authors = [ + "Gal Kleinman ", + "Nir Gazit ", +] +repository = "https://github.com/traceloop/openllmetry/tree/main/packages/opentelemetry-instrumentation-groq" +license = "Apache-2.0" +readme = "README.md" + +[[tool.poetry.packages]] +include = "opentelemetry/instrumentation/groq" + +[tool.poetry.dependencies] +python = ">=3.9,<4" +opentelemetry-api = "^1.27.0" +opentelemetry-instrumentation = "^0.48b0" +opentelemetry-semantic-conventions = "^0.48b0" +opentelemetry-semantic-conventions-ai = "0.4.1" + +[tool.poetry.group.dev.dependencies] +autopep8 = "^2.2.0" +flake8 = "7.0.0" +pytest = "^8.2.2" +pytest-sugar = "1.0.0" + +[tool.poetry.group.test.dependencies] +groq = ">=0.10.0" +pytest = "^8.2.2" +pytest-sugar = "1.0.0" +vcrpy = "^6.0.1" +pytest-recording = "^0.13.1" +opentelemetry-sdk = "^1.27.0" +pytest-asyncio = "^0.23.7" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry.extras] +instruments = ["groq"] + +[tool.poetry.plugins."opentelemetry_instrumentor"] +groq = "opentelemetry.instrumentation.groq:GroqInstrumentor" diff --git a/packages/opentelemetry-instrumentation-groq/tests/__init__.py b/packages/opentelemetry-instrumentation-groq/tests/__init__.py new file mode 100644 index 000000000..d8e96c603 --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/tests/__init__.py @@ -0,0 +1 @@ +"""unit tests.""" diff --git a/packages/opentelemetry-instrumentation-groq/tests/conftest.py b/packages/opentelemetry-instrumentation-groq/tests/conftest.py new file mode 100644 index 000000000..324ed33c0 --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/tests/conftest.py @@ -0,0 +1,74 @@ +"""Unit tests configuration module.""" + +import os + +import pytest +from opentelemetry import metrics, trace +from opentelemetry.instrumentation.groq import AnthropicInstrumentor +from opentelemetry.sdk.metrics import Counter, Histogram, MeterProvider +from opentelemetry.sdk.metrics.export import ( + AggregationTemporality, + InMemoryMetricReader, +) +from opentelemetry.sdk.resources import Resource +from opentelemetry.sdk.trace import TracerProvider +from opentelemetry.sdk.trace.export import SimpleSpanProcessor +from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter + +pytest_plugins = [] + + +@pytest.fixture(scope="session") +def exporter(): + exporter = InMemorySpanExporter() + processor = SimpleSpanProcessor(exporter) + + provider = TracerProvider() + provider.add_span_processor(processor) + trace.set_tracer_provider(provider) + + return exporter + + +@pytest.fixture(scope="session") +def reader(): + reader = InMemoryMetricReader( + {Counter: AggregationTemporality.DELTA, Histogram: AggregationTemporality.DELTA} + ) + return reader + + +@pytest.fixture(scope="session") +def meter_provider(reader): + resource = Resource.create() + meter_provider = MeterProvider(metric_readers=[reader], resource=resource) + metrics.set_meter_provider(meter_provider) + + return meter_provider + + +@pytest.fixture(scope="session", autouse=True) +def instrument(exporter, reader, meter_provider): + AnthropicInstrumentor(enrich_token_usage=True).instrument() + + yield + + exporter.shutdown() + reader.shutdown() + meter_provider.shutdown() + + +@pytest.fixture(autouse=True) +def clear_exporter_reader(exporter, reader): + exporter.clear() + reader.get_metrics_data() + + +@pytest.fixture(autouse=True) +def environment(): + os.environ["ANTHROPIC_API_KEY"] = "test_api_key" + + +@pytest.fixture(scope="module") +def vcr_config(): + return {"filter_headers": ["x-api-key"]} diff --git a/packages/opentelemetry-instrumentation-groq/tests/data/logo.jpg b/packages/opentelemetry-instrumentation-groq/tests/data/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6d1d08c537003237227b631d57df598a84454e1 GIT binary patch literal 100388 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 0 + + found_token_metric = False + found_choice_metric = False + found_duration_metric = False + found_exception_metric = False + + for rm in resource_metrics: + for sm in rm.scope_metrics: + for metric in sm.metrics: + if metric.name == Meters.LLM_TOKEN_USAGE: + found_token_metric = True + for data_point in metric.data.data_points: + assert data_point.attributes[SpanAttributes.LLM_TOKEN_TYPE] in [ + "output", + "input", + ] + assert ( + data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] + == "claude-instant-1.2" + ) + assert data_point.sum > 0 + + if metric.name == Meters.LLM_GENERATION_CHOICES: + found_choice_metric = True + for data_point in metric.data.data_points: + assert data_point.value >= 1 + assert ( + data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] + == "claude-instant-1.2" + ) + + if metric.name == Meters.LLM_OPERATION_DURATION: + found_duration_metric = True + assert any( + data_point.count > 0 for data_point in metric.data.data_points + ) + assert any( + data_point.sum > 0 for data_point in metric.data.data_points + ) + assert all( + data_point.attributes.get(SpanAttributes.LLM_RESPONSE_MODEL) + == "claude-instant-1.2" + or data_point.attributes.get("error.type") == "TypeError" + for data_point in metric.data.data_points + ) + + if metric.name == Meters.LLM_ANTHROPIC_COMPLETION_EXCEPTIONS: + found_exception_metric = True + for data_point in metric.data.data_points: + assert data_point.value == 1 + assert data_point.attributes["error.type"] == "TypeError" + + assert all( + data_point.attributes.get("gen_ai.system") == "anthropic" + for data_point in metric.data.data_points + ) + + assert found_token_metric is True + assert found_choice_metric is True + assert found_duration_metric is True + assert found_exception_metric is True + + +@pytest.mark.vcr +def test_anthropic_message_create(exporter, reader): + client = Anthropic() + response = client.messages.create( + max_tokens=1024, + messages=[ + { + "role": "user", + "content": "Tell me a joke about OpenTelemetry", + } + ], + model="claude-3-opus-20240229", + ) + try: + client.messages.create( + unknown_parameter="unknown", + ) + except Exception: + pass + + spans = exporter.get_finished_spans() + assert all(span.name == "anthropic.chat" for span in spans) + + anthropic_span = spans[0] + assert ( + anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] + == "Tell me a joke about OpenTelemetry" + ) + assert (anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" + assert ( + anthropic_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") + == response.content[0].text + ) + assert anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 + assert ( + anthropic_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] + + anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] + == anthropic_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] + ) + + metrics_data = reader.get_metrics_data() + resource_metrics = metrics_data.resource_metrics + assert len(resource_metrics) > 0 + + found_token_metric = False + found_choice_metric = False + found_duration_metric = False + found_exception_metric = False + + for rm in resource_metrics: + for sm in rm.scope_metrics: + for metric in sm.metrics: + if metric.name == Meters.LLM_TOKEN_USAGE: + found_token_metric = True + for data_point in metric.data.data_points: + assert data_point.attributes[SpanAttributes.LLM_TOKEN_TYPE] in [ + "output", + "input", + ] + assert ( + data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] + == "claude-3-opus-20240229" + ) + assert data_point.sum > 0 + + if metric.name == Meters.LLM_GENERATION_CHOICES: + found_choice_metric = True + for data_point in metric.data.data_points: + assert data_point.value >= 1 + assert ( + data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] + == "claude-3-opus-20240229" + ) + + if metric.name == Meters.LLM_OPERATION_DURATION: + found_duration_metric = True + assert any( + data_point.count > 0 for data_point in metric.data.data_points + ) + assert any( + data_point.sum > 0 for data_point in metric.data.data_points + ) + assert all( + data_point.attributes.get(SpanAttributes.LLM_RESPONSE_MODEL) + == "claude-3-opus-20240229" + or data_point.attributes.get("error.type") == "TypeError" + for data_point in metric.data.data_points + ) + + if metric.name == Meters.LLM_ANTHROPIC_COMPLETION_EXCEPTIONS: + found_exception_metric = True + for data_point in metric.data.data_points: + assert data_point.value == 1 + assert data_point.attributes["error.type"] == "TypeError" + + assert all( + data_point.attributes.get("gen_ai.system") == "anthropic" + for data_point in metric.data.data_points + ) + + assert found_token_metric is True + assert found_choice_metric is True + assert found_duration_metric is True + assert found_exception_metric is True + + +@pytest.mark.vcr +def test_anthropic_multi_modal(exporter): + client = Anthropic() + response = client.messages.create( + max_tokens=1024, + messages=[ + { + "role": "user", + "content": [ + { + "type": "text", + "text": "What do you see?", + }, + { + "type": "image", + "source": { + "type": "base64", + "media_type": "image/jpeg", + "data": Path(__file__).parent.joinpath("data/logo.jpg"), + }, + }, + ], + }, + ], + model="claude-3-opus-20240229", + ) + + spans = exporter.get_finished_spans() + assert [span.name for span in spans] == [ + "anthropic.chat", + ] + anthropic_span = spans[0] + assert anthropic_span.attributes[ + f"{SpanAttributes.LLM_PROMPTS}.0.content" + ] == json.dumps( + [ + {"type": "text", "text": "What do you see?"}, + { + "type": "image", + "source": { + "type": "base64", + "media_type": "image/jpeg", + "data": str(Path(__file__).parent.joinpath("data/logo.jpg")), + }, + }, + ] + ) + assert (anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" + assert ( + anthropic_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") + == response.content[0].text + ) + assert anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 1381 + assert ( + anthropic_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] + + anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] + == anthropic_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] + ) + + +@pytest.mark.vcr +def test_anthropic_message_streaming(exporter, reader): + client = Anthropic() + response = client.messages.create( + max_tokens=1024, + messages=[ + { + "role": "user", + "content": "Tell me a joke about OpenTelemetry", + } + ], + model="claude-3-haiku-20240307", + stream=True, + ) + + response_content = "" + for event in response: + if event.type == "content_block_delta" and event.delta.type == "text_delta": + response_content += event.delta.text + + spans = exporter.get_finished_spans() + assert [span.name for span in spans] == [ + "anthropic.chat", + ] + anthropic_span = spans[0] + assert ( + anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] + == "Tell me a joke about OpenTelemetry" + ) + assert (anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" + assert ( + anthropic_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") + == response_content + ) + assert anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 + assert ( + anthropic_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] + + anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] + == anthropic_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] + ) + + metrics_data = reader.get_metrics_data() + resource_metrics = metrics_data.resource_metrics + assert len(resource_metrics) > 0 + + found_token_metric = False + found_choice_metric = False + found_duration_metric = False + # TODO found_exception_metric = False + + for rm in resource_metrics: + for sm in rm.scope_metrics: + for metric in sm.metrics: + if metric.name == Meters.LLM_TOKEN_USAGE: + found_token_metric = True + for data_point in metric.data.data_points: + assert data_point.attributes[SpanAttributes.LLM_TOKEN_TYPE] in [ + "output", + "input", + ] + assert ( + data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] + == "claude-3-haiku-20240307" + ) + assert data_point.sum > 0 + + if metric.name == Meters.LLM_GENERATION_CHOICES: + found_choice_metric = True + for data_point in metric.data.data_points: + assert data_point.value >= 1 + assert ( + data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] + == "claude-3-haiku-20240307" + ) + + if metric.name == Meters.LLM_OPERATION_DURATION: + found_duration_metric = True + assert any( + data_point.count > 0 for data_point in metric.data.data_points + ) + assert any( + data_point.sum > 0 for data_point in metric.data.data_points + ) + assert all( + data_point.attributes.get(SpanAttributes.LLM_RESPONSE_MODEL) + == "claude-3-haiku-20240307" + or data_point.attributes.get("error.type") == "TypeError" + for data_point in metric.data.data_points + ) + + assert all( + data_point.attributes.get("gen_ai.system") == "anthropic" + for data_point in metric.data.data_points + ) + + assert found_token_metric is True + assert found_choice_metric is True + assert found_duration_metric is True + + +@pytest.mark.vcr +@pytest.mark.asyncio +async def test_async_anthropic_message_create(exporter, reader): + client = AsyncAnthropic() + response = await client.messages.create( + max_tokens=1024, + messages=[ + { + "role": "user", + "content": "Tell me a joke about OpenTelemetry", + } + ], + model="claude-3-opus-20240229", + ) + try: + await client.messages.create( + unknown_parameter="unknown", + ) + except Exception: + pass + + spans = exporter.get_finished_spans() + assert [span.name for span in spans] == [ + "anthropic.chat", + ] + anthropic_span = spans[0] + assert ( + anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] + == "Tell me a joke about OpenTelemetry" + ) + assert (anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" + assert ( + anthropic_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") + == response.content[0].text + ) + assert anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 + assert ( + anthropic_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] + + anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] + == anthropic_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] + ) + + metrics_data = reader.get_metrics_data() + resource_metrics = metrics_data.resource_metrics + assert len(resource_metrics) > 0 + + found_token_metric = False + found_choice_metric = False + found_duration_metric = False + found_exception_metric = False + + for rm in resource_metrics: + for sm in rm.scope_metrics: + for metric in sm.metrics: + if metric.name == Meters.LLM_TOKEN_USAGE: + found_token_metric = True + for data_point in metric.data.data_points: + assert data_point.attributes[SpanAttributes.LLM_TOKEN_TYPE] in [ + "output", + "input", + ] + assert ( + data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] + == "claude-3-opus-20240229" + ) + assert data_point.sum > 0 + + if metric.name == Meters.LLM_GENERATION_CHOICES: + found_choice_metric = True + for data_point in metric.data.data_points: + assert data_point.value >= 1 + assert ( + data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] + == "claude-3-opus-20240229" + ) + + if metric.name == Meters.LLM_OPERATION_DURATION: + found_duration_metric = True + assert any( + data_point.count > 0 for data_point in metric.data.data_points + ) + assert any( + data_point.sum > 0 for data_point in metric.data.data_points + ) + assert all( + data_point.attributes.get(SpanAttributes.LLM_RESPONSE_MODEL) + == "claude-3-opus-20240229" + or data_point.attributes.get("error.type") == "TypeError" + for data_point in metric.data.data_points + ) + + if metric.name == Meters.LLM_ANTHROPIC_COMPLETION_EXCEPTIONS: + found_exception_metric = True + for data_point in metric.data.data_points: + assert data_point.value == 1 + assert data_point.attributes["error.type"] == "TypeError" + + assert all( + data_point.attributes.get("gen_ai.system") == "anthropic" + for data_point in metric.data.data_points + ) + + assert found_token_metric is True + assert found_choice_metric is True + assert found_duration_metric is True + assert found_exception_metric is True + + +@pytest.mark.vcr +@pytest.mark.asyncio +async def test_async_anthropic_message_streaming(exporter, reader): + client = AsyncAnthropic() + response = await client.messages.create( + max_tokens=1024, + messages=[ + { + "role": "user", + "content": "Tell me a joke about OpenTelemetry", + } + ], + model="claude-3-haiku-20240307", + stream=True, + ) + response_content = "" + async for event in response: + if event.type == "content_block_delta" and event.delta.type == "text_delta": + response_content += event.delta.text + + spans = exporter.get_finished_spans() + assert [span.name for span in spans] == [ + "anthropic.chat", + ] + anthropic_span = spans[0] + assert ( + anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] + == "Tell me a joke about OpenTelemetry" + ) + assert (anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" + assert ( + anthropic_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") + == response_content + ) + assert anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 + assert ( + anthropic_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] + + anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] + == anthropic_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] + ) + + metrics_data = reader.get_metrics_data() + resource_metrics = metrics_data.resource_metrics + assert len(resource_metrics) > 0 + + found_token_metric = False + found_choice_metric = False + found_duration_metric = False + # TODO found_exception_metric = False + + for rm in resource_metrics: + for sm in rm.scope_metrics: + for metric in sm.metrics: + if metric.name == Meters.LLM_TOKEN_USAGE: + found_token_metric = True + for data_point in metric.data.data_points: + assert data_point.attributes[SpanAttributes.LLM_TOKEN_TYPE] in [ + "output", + "input", + ] + assert ( + data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] + == "claude-3-haiku-20240307" + ) + assert data_point.sum > 0 + + if metric.name == Meters.LLM_GENERATION_CHOICES: + found_choice_metric = True + for data_point in metric.data.data_points: + assert data_point.value >= 1 + assert ( + data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] + == "claude-3-haiku-20240307" + ) + + if metric.name == Meters.LLM_OPERATION_DURATION: + found_duration_metric = True + assert any( + data_point.count > 0 for data_point in metric.data.data_points + ) + assert any( + data_point.sum > 0 for data_point in metric.data.data_points + ) + assert all( + data_point.attributes.get(SpanAttributes.LLM_RESPONSE_MODEL) + == "claude-3-haiku-20240307" + or data_point.attributes.get("error.type") == "TypeError" + for data_point in metric.data.data_points + ) + + assert all( + data_point.attributes.get("gen_ai.system") == "anthropic" + for data_point in metric.data.data_points + ) + + assert found_token_metric is True + assert found_choice_metric is True + assert found_duration_metric is True From f23b53da4e1a258545634a5c3ca2ea345400b67e Mon Sep 17 00:00:00 2001 From: Gal Kleinman Date: Tue, 3 Sep 2024 10:11:50 +0300 Subject: [PATCH 2/8] wip --- README.md | 2 +- .../instrumentation/groq/__init__.py | 2 +- packages/sample-app/poetry.lock | 1001 +++++++++-------- packages/sample-app/pyproject.toml | 1 + 4 files changed, 549 insertions(+), 457 deletions(-) diff --git a/README.md b/README.md index 3848555bc..2848bb333 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,7 @@ OpenLLMetry can instrument everything that [OpenTelemetry already instruments](h - ✅ IBM Watsonx AI - ✅ Together AI - ✅ Aleph Alpha +- ✅ Groq ### Vector DBs @@ -133,7 +134,6 @@ OpenLLMetry can instrument everything that [OpenTelemetry already instruments](h - ✅ Marqo - ✅ LanceDB - ### Frameworks - ✅ LangChain diff --git a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py index 90482c34b..d22802138 100644 --- a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py +++ b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py @@ -36,7 +36,7 @@ logger = logging.getLogger(__name__) -_instruments = ("anthropic >= 0.3.11",) +_instruments = ("groq >= 0.9.0",) WRAPPED_METHODS = [ { diff --git a/packages/sample-app/poetry.lock b/packages/sample-app/poetry.lock index d4ae0a803..10533bc1f 100644 --- a/packages/sample-app/poetry.lock +++ b/packages/sample-app/poetry.lock @@ -352,17 +352,17 @@ files = [ [[package]] name = "boto3" -version = "1.35.5" +version = "1.35.10" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.35.5-py3-none-any.whl", hash = "sha256:2cef3aa476181395c260f4b6e6c5565e5a3022a874fb6b579d8e6b169f94e0b3"}, - {file = "boto3-1.35.5.tar.gz", hash = "sha256:5724ddeda8e18c7614c20a09c20159ed87ff7439755cf5e250a1a3feaf9afb7e"}, + {file = "boto3-1.35.10-py3-none-any.whl", hash = "sha256:add26dd58e076dfd387013da4704716d5cff215cf14f6d4347c4b9b7fc1f0b8e"}, + {file = "boto3-1.35.10.tar.gz", hash = "sha256:189ab1e2b4cd86df56f82438d89b4040eb140c92683f1bda7cb2e62624f20ea5"}, ] [package.dependencies] -botocore = ">=1.35.5,<1.36.0" +botocore = ">=1.35.10,<1.36.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -371,13 +371,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.35.5" +version = "1.35.10" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.35.5-py3-none-any.whl", hash = "sha256:8116b72c7ae845c195146e437e2afd9d17538a37b3f3548dcf67c12c86ba0742"}, - {file = "botocore-1.35.5.tar.gz", hash = "sha256:3a0086c7124cb3b0d9f98563d00ffd14a942c3f9e731d8d1ccf0d3a1ac7ed884"}, + {file = "botocore-1.35.10-py3-none-any.whl", hash = "sha256:0d96d023b9b0cea99a0a428a431d011329d3a958730aee6ed6a6fec5d9bfbc03"}, + {file = "botocore-1.35.10.tar.gz", hash = "sha256:6c8a1377b6636a0d80218115e1cd41bcceba0a2f050b79c206f4cf8d002c54d7"}, ] [package.dependencies] @@ -557,13 +557,13 @@ files = [ [[package]] name = "certifi" -version = "2024.7.4" +version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, - {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] [[package]] @@ -841,13 +841,13 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "cohere" -version = "5.8.1" +version = "5.9.0" description = "" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "cohere-5.8.1-py3-none-any.whl", hash = "sha256:92362c651dfbfef8c5d34e95de394578d7197ed7875c6fcbf101e84b60db7fbd"}, - {file = "cohere-5.8.1.tar.gz", hash = "sha256:4c0c4468f15f9ad7fb7af15cc9f7305cd6df51243d69e203682be87e9efa5071"}, + {file = "cohere-5.9.0-py3-none-any.whl", hash = "sha256:7c70cc9e6ade3355e00aa4a77fcb5662b32261a3237e00975d92b97bb5f3c0c9"}, + {file = "cohere-5.9.0.tar.gz", hash = "sha256:74e5b6e1fed0f617c26dfb8ef1cfccf8334321a51cc886c37374047916d71568"}, ] [package.dependencies] @@ -1138,13 +1138,13 @@ test = ["pytest (>=6)"] [[package]] name = "fastapi" -version = "0.112.1" +version = "0.112.2" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" files = [ - {file = "fastapi-0.112.1-py3-none-any.whl", hash = "sha256:bcbd45817fc2a1cd5da09af66815b84ec0d3d634eb173d1ab468ae3103e183e4"}, - {file = "fastapi-0.112.1.tar.gz", hash = "sha256:b2537146f8c23389a7faa8b03d0bd38d4986e6983874557d95eed2acc46448ef"}, + {file = "fastapi-0.112.2-py3-none-any.whl", hash = "sha256:db84b470bd0e2b1075942231e90e3577e12a903c4dc8696f0d206a7904a7af1c"}, + {file = "fastapi-0.112.2.tar.gz", hash = "sha256:3d4729c038414d5193840706907a41839d839523da6ed0c2811f1168cac1798c"}, ] [package.dependencies] @@ -1153,8 +1153,8 @@ starlette = ">=0.37.2,<0.39.0" typing-extensions = ">=4.8.0" [package.extras] -all = ["email_validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] -standard = ["email_validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"] +all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"] [[package]] name = "fastavro" @@ -1388,13 +1388,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4 [[package]] name = "google-api-core" -version = "2.19.1" +version = "2.19.2" description = "Google API client core library" optional = false python-versions = ">=3.7" files = [ - {file = "google-api-core-2.19.1.tar.gz", hash = "sha256:f4695f1e3650b316a795108a76a1c416e6afb036199d1c1f1f110916df479ffd"}, - {file = "google_api_core-2.19.1-py3-none-any.whl", hash = "sha256:f12a9b8309b5e21d92483bbd47ce2c445861ec7d269ef6784ecc0ea8c1fa6125"}, + {file = "google_api_core-2.19.2-py3-none-any.whl", hash = "sha256:53ec0258f2837dd53bbd3d3df50f5359281b3cc13f800c941dd15a9b5a415af4"}, + {file = "google_api_core-2.19.2.tar.gz", hash = "sha256:ca07de7e8aa1c98a8bfca9321890ad2340ef7f2eb136e558cee68f24b94b0a8f"}, ] [package.dependencies] @@ -1419,13 +1419,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.142.0" +version = "2.143.0" description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" files = [ - {file = "google_api_python_client-2.142.0-py2.py3-none-any.whl", hash = "sha256:266799082bb8301f423ec204dffbffb470b502abbf29efd1f83e644d36eb5a8f"}, - {file = "google_api_python_client-2.142.0.tar.gz", hash = "sha256:a1101ac9e24356557ca22f07ff48b7f61fa5d4b4e7feeef3bda16e5dcb86350e"}, + {file = "google_api_python_client-2.143.0-py2.py3-none-any.whl", hash = "sha256:d5654134522b9b574b82234e96f7e0aeeabcbf33643fbabcd449ef0068e3a476"}, + {file = "google_api_python_client-2.143.0.tar.gz", hash = "sha256:6a75441f9078e6e2fcdf4946a153fda1e2cc81b5e9c8d6e8c0750c85c7f8a566"}, ] [package.dependencies] @@ -1475,13 +1475,13 @@ httplib2 = ">=0.19.0" [[package]] name = "google-cloud-aiplatform" -version = "1.63.0" +version = "1.64.0" description = "Vertex AI API client library" optional = false python-versions = ">=3.8" files = [ - {file = "google-cloud-aiplatform-1.63.0.tar.gz", hash = "sha256:4eb2398bed02a60ad23656b4a442b5d6efa181d11653f8c31f0a5f642c09f913"}, - {file = "google_cloud_aiplatform-1.63.0-py2.py3-none-any.whl", hash = "sha256:857abe09d1f3f49f62000dbd2302bc653c9a4cdce67ccf65bfd5878fcc81760d"}, + {file = "google-cloud-aiplatform-1.64.0.tar.gz", hash = "sha256:475a612829b283eb8f783e773d37115c30db42e2e50065c8653db0c9bd18b0da"}, + {file = "google_cloud_aiplatform-1.64.0-py2.py3-none-any.whl", hash = "sha256:3a79ce2ec047868c348336624a60993464ca977fd258bcf609cc79309a8101c4"}, ] [package.dependencies] @@ -1502,7 +1502,7 @@ autologging = ["mlflow (>=1.27.0,<=2.1.1)"] cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] datasets = ["pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)"] endpoint = ["requests (>=2.28.1)"] -evaluation = ["pandas (>=1.0.0,<2.2.0)", "tqdm (>=4.23.0)"] +evaluation = ["immutabledict", "pandas (>=1.0.0,<2.2.0)", "tqdm (>=4.23.0)"] full = ["cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.109.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "setuptools (<70.0.0)", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)"] langchain = ["langchain (>=0.1.16,<0.3)", "langchain-core (<0.3)", "langchain-google-vertexai (<2)", "openinference-instrumentation-langchain (>=0.1.19,<0.2)", "orjson (<=3.10.6)", "tenacity (<=8.3)"] langchain-testing = ["absl-py", "cloudpickle (>=3.0,<4.0)", "google-cloud-trace (<2)", "langchain (>=0.1.16,<0.3)", "langchain-core (<0.3)", "langchain-google-vertexai (<2)", "openinference-instrumentation-langchain (>=0.1.19,<0.2)", "opentelemetry-exporter-gcp-trace (<2)", "opentelemetry-sdk (<2)", "orjson (<=3.10.6)", "pydantic (>=2.6.3,<3)", "pytest-xdist", "tenacity (<=8.3)"] @@ -1734,13 +1734,13 @@ requests = ["requests (>=2.18.0,<3.0.0dev)"] [[package]] name = "googleapis-common-protos" -version = "1.63.2" +version = "1.65.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" files = [ - {file = "googleapis-common-protos-1.63.2.tar.gz", hash = "sha256:27c5abdffc4911f28101e635de1533fb4cfd2c37fbaa9174587c799fac90aa87"}, - {file = "googleapis_common_protos-1.63.2-py2.py3-none-any.whl", hash = "sha256:27a2499c7e8aff199665b22741997e485eccc8645aa9176c7c988e6fae507945"}, + {file = "googleapis_common_protos-1.65.0-py2.py3-none-any.whl", hash = "sha256:2972e6c496f435b92590fd54045060867f3fe9be2c82ab148fc8885035479a63"}, + {file = "googleapis_common_protos-1.65.0.tar.gz", hash = "sha256:334a29d07cddc3aa01dee4988f9afd9b2916ee2ff49d6b757155dc0d197852c0"}, ] [package.dependencies] @@ -1821,6 +1821,25 @@ files = [ docs = ["Sphinx", "furo"] test = ["objgraph", "psutil"] +[[package]] +name = "groq" +version = "0.10.0" +description = "The official Python library for the groq API" +optional = false +python-versions = ">=3.7" +files = [ + {file = "groq-0.10.0-py3-none-any.whl", hash = "sha256:6939e3c62b005e7aa9cabca6ea2eaf96cea595e2f7d4658df6c0c7c8ccf59410"}, + {file = "groq-0.10.0.tar.gz", hash = "sha256:7653aad4c0b363928970fc55626a83624f5eab6503ee74fb25f255e24e05fcf8"}, +] + +[package.dependencies] +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +typing-extensions = ">=4.7,<5" + [[package]] name = "grpc-google-iam-v1" version = "0.13.1" @@ -1839,61 +1858,61 @@ protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4 [[package]] name = "grpcio" -version = "1.66.0" +version = "1.66.1" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" files = [ - {file = "grpcio-1.66.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:ad7256f224437b2c29c2bef98ddd3130454c5b1ab1f0471fc11794cefd4dbd3d"}, - {file = "grpcio-1.66.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:5f4b3357e59dfba9140a51597287297bc638710d6a163f99ee14efc19967a821"}, - {file = "grpcio-1.66.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:e8d20308eeae15b3e182f47876f05acbdec1eebd9473a9814a44e46ec4a84c04"}, - {file = "grpcio-1.66.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1eb03524d0f55b965d6c86aa44e5db9e5eaa15f9ed3b164621e652e5b927f4b8"}, - {file = "grpcio-1.66.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37514b68a42e9cf24536345d3cf9e580ffd29117c158b4eeea34625200256067"}, - {file = "grpcio-1.66.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:516fdbc8e156db71a004bc431a6303bca24cfde186babe96dde7bd01e8f0cc70"}, - {file = "grpcio-1.66.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d0439a970d65327de21c299ea0e0c2ad0987cdaf18ba5066621dea5f427f922b"}, - {file = "grpcio-1.66.0-cp310-cp310-win32.whl", hash = "sha256:5f93fc84b72bbc7b84a42f3ca9dc055fa00d2303d9803be011ebf7a10a4eb833"}, - {file = "grpcio-1.66.0-cp310-cp310-win_amd64.whl", hash = "sha256:8fc5c710ddd51b5a0dc36ef1b6663430aa620e0ce029b87b150dafd313b978c3"}, - {file = "grpcio-1.66.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:dd614370e939f9fceeeb2915111a0795271b4c11dfb5fc0f58449bee40c726a5"}, - {file = "grpcio-1.66.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:245b08f9b3c645a6a623f3ed4fa43dcfcd6ad701eb9c32511c1bb7380e8c3d23"}, - {file = "grpcio-1.66.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:aaf30c75cbaf30e561ca45f21eb1f729f0fab3f15c592c1074795ed43e3ff96f"}, - {file = "grpcio-1.66.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49234580a073ce7ac490112f6c67c874cbcb27804c4525978cdb21ba7f3f193c"}, - {file = "grpcio-1.66.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de9e20a0acb709dcfa15a622c91f584f12c9739a79c47999f73435d2b3cc8a3b"}, - {file = "grpcio-1.66.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bc008c6afa1e7c8df99bd9154abc4f0470d26b7730ca2521122e99e771baa8c7"}, - {file = "grpcio-1.66.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:50cea8ce2552865b87e3dffbb85eb21e6b98d928621600c0feda2f02449cd837"}, - {file = "grpcio-1.66.0-cp311-cp311-win32.whl", hash = "sha256:508411df1f2b7cfa05d4d7dbf3d576fe4f949cd61c03f3a6f0378c84e3d7b963"}, - {file = "grpcio-1.66.0-cp311-cp311-win_amd64.whl", hash = "sha256:6d586a95c05c82a5354be48bb4537e1accaf2472d8eb7e9086d844cbff934482"}, - {file = "grpcio-1.66.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:5ea27f4ce8c0daccfdd2c7961e6ba404b6599f47c948415c4cca5728739107a3"}, - {file = "grpcio-1.66.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:296a45ea835e12a1cc35ab0c57e455346c272af7b0d178e29c67742167262b4c"}, - {file = "grpcio-1.66.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:e36fa838ac1d6c87198ca149cbfcc92e1af06bb8c8cd852622f8e58f33ea3324"}, - {file = "grpcio-1.66.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:684a4c07883cbd4ac864f0d08d927267404f5f0c76f31c85f9bbe05f2daae2f2"}, - {file = "grpcio-1.66.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3084e590e857ba7585ae91078e4c9b6ef55aaf1dc343ce26400ba59a146eada"}, - {file = "grpcio-1.66.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:526d4f6ca19f31b25606d5c470ecba55c0b22707b524e4de8987919e8920437d"}, - {file = "grpcio-1.66.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:423ae18637cd99ddcf2e5a6851c61828c49e9b9d022d0442d979b4f230109787"}, - {file = "grpcio-1.66.0-cp312-cp312-win32.whl", hash = "sha256:7bc9d823e05d63a87511fb456dcc48dc0fced86c282bf60229675e7ee7aac1a1"}, - {file = "grpcio-1.66.0-cp312-cp312-win_amd64.whl", hash = "sha256:230cdd696751e7eb1395718cd308234749daa217bb8d128f00357dc4df102558"}, - {file = "grpcio-1.66.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:0f3010bf46b2a01c9e40644cb9ed91b4b8435e5c500a275da5f9f62580e31e80"}, - {file = "grpcio-1.66.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ba18cfdc09312eb2eea6fa0ce5d2eec3cf345ea78f6528b2eaed6432105e0bd0"}, - {file = "grpcio-1.66.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:53d4c6706b49e358a2a33345dbe9b6b3bb047cecd7e8c07ba383bd09349bfef8"}, - {file = "grpcio-1.66.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:643d8d9632a688ae69661e924b862e23c83a3575b24e52917ec5bcc59543d212"}, - {file = "grpcio-1.66.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba60ae3b465b3e85080ae3bfbc36fd0305ae495ab16fcf8022fc7d7a23aac846"}, - {file = "grpcio-1.66.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9d5251578767fe44602688c851c2373b5513048ac84c21a0fe946590a8e7933d"}, - {file = "grpcio-1.66.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5e8140b39f10d7be2263afa2838112de29374c5c740eb0afd99146cb5bdbd990"}, - {file = "grpcio-1.66.0-cp38-cp38-win32.whl", hash = "sha256:5b15ef1b296c4e78f15f64fc65bf8081f8774480ffcac45642f69d9d753d9c6b"}, - {file = "grpcio-1.66.0-cp38-cp38-win_amd64.whl", hash = "sha256:c072f90a1f0409f827ae86266984cba65e89c5831a0726b9fc7f4b5fb940b853"}, - {file = "grpcio-1.66.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:a639d3866bfb5a678b5c0b92cd7ab543033ed8988854290fd86145e71731fd4c"}, - {file = "grpcio-1.66.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6ed35bf7da3fb3b1949e32bdf47a8b5ffe0aed11722d948933bd068531cd4682"}, - {file = "grpcio-1.66.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:1c5466222470cb7fbc9cc898af1d48eefd297cb2e2f59af6d4a851c862fa90ac"}, - {file = "grpcio-1.66.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:921b8f7f25d5300d7c6837a1e0639ef145fbdbfb728e0a5db2dbccc9fc0fd891"}, - {file = "grpcio-1.66.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3f6feb0dc8456d025e566709f7dd02885add99bedaac50229013069242a1bfd"}, - {file = "grpcio-1.66.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748452dbd5a047475d5413bdef08b0b9ceb2c0c0e249d4ee905a5fb82c6328dc"}, - {file = "grpcio-1.66.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:832945e64176520520317b50d64ec7d79924429528d5747669b52d0bf2c7bd78"}, - {file = "grpcio-1.66.0-cp39-cp39-win32.whl", hash = "sha256:8096a922eb91bc97c839f675c3efa1257c6ef181ae1b25d3fb97f2cae4c57c01"}, - {file = "grpcio-1.66.0-cp39-cp39-win_amd64.whl", hash = "sha256:375b58892301a5fc6ca7d7ff689c9dc9d00895f5d560604ace9f4f0573013c63"}, - {file = "grpcio-1.66.0.tar.gz", hash = "sha256:c1ea4c528e7db6660718e4165fd1b5ac24b79a70c870a7bc0b7bdb9babab7c1e"}, -] - -[package.extras] -protobuf = ["grpcio-tools (>=1.66.0)"] + {file = "grpcio-1.66.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:4877ba180591acdf127afe21ec1c7ff8a5ecf0fe2600f0d3c50e8c4a1cbc6492"}, + {file = "grpcio-1.66.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:3750c5a00bd644c75f4507f77a804d0189d97a107eb1481945a0cf3af3e7a5ac"}, + {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:a013c5fbb12bfb5f927444b477a26f1080755a931d5d362e6a9a720ca7dbae60"}, + {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1b24c23d51a1e8790b25514157d43f0a4dce1ac12b3f0b8e9f66a5e2c4c132f"}, + {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7ffb8ea674d68de4cac6f57d2498fef477cef582f1fa849e9f844863af50083"}, + {file = "grpcio-1.66.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:307b1d538140f19ccbd3aed7a93d8f71103c5d525f3c96f8616111614b14bf2a"}, + {file = "grpcio-1.66.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1c17ebcec157cfb8dd445890a03e20caf6209a5bd4ac5b040ae9dbc59eef091d"}, + {file = "grpcio-1.66.1-cp310-cp310-win32.whl", hash = "sha256:ef82d361ed5849d34cf09105d00b94b6728d289d6b9235513cb2fcc79f7c432c"}, + {file = "grpcio-1.66.1-cp310-cp310-win_amd64.whl", hash = "sha256:292a846b92cdcd40ecca46e694997dd6b9be6c4c01a94a0dfb3fcb75d20da858"}, + {file = "grpcio-1.66.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:c30aeceeaff11cd5ddbc348f37c58bcb96da8d5aa93fed78ab329de5f37a0d7a"}, + {file = "grpcio-1.66.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8a1e224ce6f740dbb6b24c58f885422deebd7eb724aff0671a847f8951857c26"}, + {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:a66fe4dc35d2330c185cfbb42959f57ad36f257e0cc4557d11d9f0a3f14311df"}, + {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ba04659e4fce609de2658fe4dbf7d6ed21987a94460f5f92df7579fd5d0e22"}, + {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4573608e23f7e091acfbe3e84ac2045680b69751d8d67685ffa193a4429fedb1"}, + {file = "grpcio-1.66.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7e06aa1f764ec8265b19d8f00140b8c4b6ca179a6dc67aa9413867c47e1fb04e"}, + {file = "grpcio-1.66.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3885f037eb11f1cacc41f207b705f38a44b69478086f40608959bf5ad85826dd"}, + {file = "grpcio-1.66.1-cp311-cp311-win32.whl", hash = "sha256:97ae7edd3f3f91480e48ede5d3e7d431ad6005bfdbd65c1b56913799ec79e791"}, + {file = "grpcio-1.66.1-cp311-cp311-win_amd64.whl", hash = "sha256:cfd349de4158d797db2bd82d2020554a121674e98fbe6b15328456b3bf2495bb"}, + {file = "grpcio-1.66.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:a92c4f58c01c77205df6ff999faa008540475c39b835277fb8883b11cada127a"}, + {file = "grpcio-1.66.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fdb14bad0835914f325349ed34a51940bc2ad965142eb3090081593c6e347be9"}, + {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f03a5884c56256e08fd9e262e11b5cfacf1af96e2ce78dc095d2c41ccae2c80d"}, + {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ca2559692d8e7e245d456877a85ee41525f3ed425aa97eb7a70fc9a79df91a0"}, + {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84ca1be089fb4446490dd1135828bd42a7c7f8421e74fa581611f7afdf7ab761"}, + {file = "grpcio-1.66.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:d639c939ad7c440c7b2819a28d559179a4508783f7e5b991166f8d7a34b52815"}, + {file = "grpcio-1.66.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b9feb4e5ec8dc2d15709f4d5fc367794d69277f5d680baf1910fc9915c633524"}, + {file = "grpcio-1.66.1-cp312-cp312-win32.whl", hash = "sha256:7101db1bd4cd9b880294dec41a93fcdce465bdbb602cd8dc5bd2d6362b618759"}, + {file = "grpcio-1.66.1-cp312-cp312-win_amd64.whl", hash = "sha256:b0aa03d240b5539648d996cc60438f128c7f46050989e35b25f5c18286c86734"}, + {file = "grpcio-1.66.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:ecfe735e7a59e5a98208447293ff8580e9db1e890e232b8b292dc8bd15afc0d2"}, + {file = "grpcio-1.66.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:4825a3aa5648010842e1c9d35a082187746aa0cdbf1b7a2a930595a94fb10fce"}, + {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:f517fd7259fe823ef3bd21e508b653d5492e706e9f0ef82c16ce3347a8a5620c"}, + {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1fe60d0772831d96d263b53d83fb9a3d050a94b0e94b6d004a5ad111faa5b5b"}, + {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31a049daa428f928f21090403e5d18ea02670e3d5d172581670be006100db9ef"}, + {file = "grpcio-1.66.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f914386e52cbdeb5d2a7ce3bf1fdfacbe9d818dd81b6099a05b741aaf3848bb"}, + {file = "grpcio-1.66.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bff2096bdba686019fb32d2dde45b95981f0d1490e054400f70fc9a8af34b49d"}, + {file = "grpcio-1.66.1-cp38-cp38-win32.whl", hash = "sha256:aa8ba945c96e73de29d25331b26f3e416e0c0f621e984a3ebdb2d0d0b596a3b3"}, + {file = "grpcio-1.66.1-cp38-cp38-win_amd64.whl", hash = "sha256:161d5c535c2bdf61b95080e7f0f017a1dfcb812bf54093e71e5562b16225b4ce"}, + {file = "grpcio-1.66.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:d0cd7050397b3609ea51727b1811e663ffda8bda39c6a5bb69525ef12414b503"}, + {file = "grpcio-1.66.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0e6c9b42ded5d02b6b1fea3a25f036a2236eeb75d0579bfd43c0018c88bf0a3e"}, + {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:c9f80f9fad93a8cf71c7f161778ba47fd730d13a343a46258065c4deb4b550c0"}, + {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dd67ed9da78e5121efc5c510f0122a972216808d6de70953a740560c572eb44"}, + {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48b0d92d45ce3be2084b92fb5bae2f64c208fea8ceed7fccf6a7b524d3c4942e"}, + {file = "grpcio-1.66.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d813316d1a752be6f5c4360c49f55b06d4fe212d7df03253dfdae90c8a402bb"}, + {file = "grpcio-1.66.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9c9bebc6627873ec27a70fc800f6083a13c70b23a5564788754b9ee52c5aef6c"}, + {file = "grpcio-1.66.1-cp39-cp39-win32.whl", hash = "sha256:30a1c2cf9390c894c90bbc70147f2372130ad189cffef161f0432d0157973f45"}, + {file = "grpcio-1.66.1-cp39-cp39-win_amd64.whl", hash = "sha256:17663598aadbedc3cacd7bbde432f541c8e07d2496564e22b214b22c7523dac8"}, + {file = "grpcio-1.66.1.tar.gz", hash = "sha256:35334f9c9745add3e357e3372756fd32d925bd52c41da97f4dfdafbde0bf0ee2"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.66.1)"] [[package]] name = "grpcio-status" @@ -2076,13 +2095,13 @@ test = ["Cython (>=0.29.24,<0.30.0)"] [[package]] name = "httpx" -version = "0.27.0" +version = "0.27.2" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, - {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, + {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, + {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, ] [package.dependencies] @@ -2101,6 +2120,7 @@ brotli = ["brotli", "brotlicffi"] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "httpx-sse" @@ -2189,6 +2209,21 @@ ibm-cos-sdk-core = "2.13.5" ibm-cos-sdk-s3transfer = "2.13.5" jmespath = ">=0.10.0,<=1.0.1" +[[package]] +name = "ibm-cos-sdk" +version = "2.13.6" +description = "IBM SDK for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ibm-cos-sdk-2.13.6.tar.gz", hash = "sha256:171cf2ae4ab662a4b8ab58dcf4ac994b0577d6c92d78490295fd7704a83978f6"}, +] + +[package.dependencies] +ibm-cos-sdk-core = "2.13.6" +ibm-cos-sdk-s3transfer = "2.13.6" +jmespath = ">=0.10.0,<=1.0.1" + [[package]] name = "ibm-cos-sdk-core" version = "2.13.5" @@ -2205,6 +2240,22 @@ python-dateutil = ">=2.9.0,<3.0.0" requests = ">=2.32.3,<3.0" urllib3 = {version = ">=1.26.18,<2.2", markers = "python_version >= \"3.10\""} +[[package]] +name = "ibm-cos-sdk-core" +version = "2.13.6" +description = "Low-level, data-driven core of IBM SDK for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "ibm-cos-sdk-core-2.13.6.tar.gz", hash = "sha256:dd41fb789eeb65546501afabcd50e78846ab4513b6ad4042e410b6a14ff88413"}, +] + +[package.dependencies] +jmespath = ">=0.10.0,<=1.0.1" +python-dateutil = ">=2.9.0,<3.0.0" +requests = ">=2.32.0,<2.32.3" +urllib3 = ">=1.26.18,<3" + [[package]] name = "ibm-cos-sdk-s3transfer" version = "2.13.5" @@ -2218,15 +2269,28 @@ files = [ [package.dependencies] ibm-cos-sdk-core = "2.13.5" +[[package]] +name = "ibm-cos-sdk-s3transfer" +version = "2.13.6" +description = "IBM S3 Transfer Manager" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ibm-cos-sdk-s3transfer-2.13.6.tar.gz", hash = "sha256:e0acce6f380c47d11e07c6765b684b4ababbf5c66cc0503bc246469a1e2b9790"}, +] + +[package.dependencies] +ibm-cos-sdk-core = "2.13.6" + [[package]] name = "ibm-watsonx-ai" -version = "1.1.6" +version = "1.1.7" description = "IBM watsonx.ai API Client" optional = false python-versions = ">=3.10" files = [ - {file = "ibm_watsonx_ai-1.1.6-py3-none-any.whl", hash = "sha256:02cfdb1998f96d02ace44e1d37df3f08b1b8988d6ee2d97345d004a5ab67de75"}, - {file = "ibm_watsonx_ai-1.1.6.tar.gz", hash = "sha256:f986486d03504d0d98fc2ff4c33ce89f9913972639a3d848d2b2ccb8c442f8b1"}, + {file = "ibm_watsonx_ai-1.1.7-py3-none-any.whl", hash = "sha256:b1174d4304912e2aa1c9c95baaa6862495052c976df6bc8520ba5b66d83f9210"}, + {file = "ibm_watsonx_ai-1.1.7.tar.gz", hash = "sha256:77206f1654e9fdacfd29232d39d97f9436415cfaf0bba5e29e91f373ed5b3e8f"}, ] [package.dependencies] @@ -2261,13 +2325,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "8.0.0" +version = "8.4.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-8.0.0-py3-none-any.whl", hash = "sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f"}, - {file = "importlib_metadata-8.0.0.tar.gz", hash = "sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812"}, + {file = "importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1"}, + {file = "importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"}, ] [package.dependencies] @@ -2516,19 +2580,19 @@ adal = ["adal (>=1.0.2)"] [[package]] name = "langchain" -version = "0.2.14" +version = "0.2.15" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain-0.2.14-py3-none-any.whl", hash = "sha256:eed76194ee7d9c081037a3df7868d4de90e0410b51fc1ca933a8379e464bf40c"}, - {file = "langchain-0.2.14.tar.gz", hash = "sha256:dc2aa5a58882054fb5d043c39ab8332ebd055f88f17839da68e1c7fd0a4fefe2"}, + {file = "langchain-0.2.15-py3-none-any.whl", hash = "sha256:9e6231441870aaa8523be24a5785ccccfdde759a7e27dd082b6ec80f68e49dec"}, + {file = "langchain-0.2.15.tar.gz", hash = "sha256:f613ce7594be34f9bac687134a56f6e8274951907b798dbd037aefc95df78953"}, ] [package.dependencies] aiohttp = ">=3.8.3,<4.0.0" async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} -langchain-core = ">=0.2.32,<0.3.0" +langchain-core = ">=0.2.35,<0.3.0" langchain-text-splitters = ">=0.2.0,<0.3.0" langsmith = ">=0.1.17,<0.2.0" numpy = [ @@ -2543,20 +2607,20 @@ tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" [[package]] name = "langchain-community" -version = "0.2.12" +version = "0.2.15" description = "Community contributed LangChain integrations." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_community-0.2.12-py3-none-any.whl", hash = "sha256:50e74473dd2309bdef561760afbbf0c5ea17ed91fc4dfa0d52279dd16d6d34e0"}, - {file = "langchain_community-0.2.12.tar.gz", hash = "sha256:d671cfc6a4f3b65f49a2e59ab420d0164f109d0a56fc4b4996518205c63b8c7e"}, + {file = "langchain_community-0.2.15-py3-none-any.whl", hash = "sha256:edcf8e9829559822a044a193b66cbea40600b8b9ce9b435fa0ae96f69377be46"}, + {file = "langchain_community-0.2.15.tar.gz", hash = "sha256:5bd5a6d055b07ee228eb6a9f0ca59d8124a1d450e4c82a6a62cec3add3cb73a9"}, ] [package.dependencies] aiohttp = ">=3.8.3,<4.0.0" dataclasses-json = ">=0.5.7,<0.7" -langchain = ">=0.2.13,<0.3.0" -langchain-core = ">=0.2.30,<0.3.0" +langchain = ">=0.2.15,<0.3.0" +langchain-core = ">=0.2.37,<0.3.0" langsmith = ">=0.1.0,<0.2.0" numpy = [ {version = ">=1,<2", markers = "python_version < \"3.12\""}, @@ -2569,13 +2633,13 @@ tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" [[package]] name = "langchain-core" -version = "0.2.34" +version = "0.2.37" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_core-0.2.34-py3-none-any.whl", hash = "sha256:c4fd158273e28cef758b4eccc956b424b76d4bb9117ce6014ae6eb2fb985801d"}, - {file = "langchain_core-0.2.34.tar.gz", hash = "sha256:50048d90b175c0d5a7e28164628b3c7f8c82b0dc2cd766a663d346a18d5c9eb2"}, + {file = "langchain_core-0.2.37-py3-none-any.whl", hash = "sha256:bf0f39ccb653931eeb0a4dd248591ef239895620e04da9ec928446cd9ddb47f0"}, + {file = "langchain_core-0.2.37.tar.gz", hash = "sha256:944de6cfaad72de5641f6765d5310a022fcd9943f10735507ea040cc5fb95011"}, ] [package.dependencies] @@ -2607,17 +2671,17 @@ langchain-core = ">=0.2.2,<0.3" [[package]] name = "langchain-openai" -version = "0.1.22" +version = "0.1.23" description = "An integration package connecting OpenAI and LangChain" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_openai-0.1.22-py3-none-any.whl", hash = "sha256:e184ab867a30f803dc210a388537186b1b670a33d910a7e0fa4e0329d3b6c654"}, - {file = "langchain_openai-0.1.22.tar.gz", hash = "sha256:0cf93133f230a893e3b0cc2a792bbf2580950e879b577f6e8d4ff9963a7de44b"}, + {file = "langchain_openai-0.1.23-py3-none-any.whl", hash = "sha256:8e3d215803e157f26480c6108eb4333629832b1a0e746723060c24f93b8b78f4"}, + {file = "langchain_openai-0.1.23.tar.gz", hash = "sha256:ed7f16671ea0af177ac5f82d5645a746c5097c56f97b31798e5c07b5c84f0eed"}, ] [package.dependencies] -langchain-core = ">=0.2.33,<0.3.0" +langchain-core = ">=0.2.35,<0.3.0" openai = ">=1.40.0,<2.0.0" tiktoken = ">=0.7,<1" @@ -2637,13 +2701,13 @@ langchain-core = ">=0.2.10,<0.3.0" [[package]] name = "langgraph" -version = "0.2.14" +version = "0.2.16" description = "Building stateful, multi-actor applications with LLMs" optional = false python-versions = "<4.0,>=3.9.0" files = [ - {file = "langgraph-0.2.14-py3-none-any.whl", hash = "sha256:c2e37a273d207dc2e2428b68e094466066288b9b803c6a6b70be9e9c9bf20779"}, - {file = "langgraph-0.2.14.tar.gz", hash = "sha256:a430151d7a67011923d8b0d175fa8a59eca4584e2e8d72dd85616ebdd39ddd77"}, + {file = "langgraph-0.2.16-py3-none-any.whl", hash = "sha256:5c8d5d119b98c1c071f37f4d41f98a8a06c1b5c36345b7be8e0f65c7fbfa0297"}, + {file = "langgraph-0.2.16.tar.gz", hash = "sha256:435e2bff165d526236294eac03b5e848653ed4d9ba2373e36432e3ca3e952ebe"}, ] [package.dependencies] @@ -2652,13 +2716,13 @@ langgraph-checkpoint = ">=1.0.2,<2.0.0" [[package]] name = "langgraph-checkpoint" -version = "1.0.6" +version = "1.0.8" description = "Library with base interfaces for LangGraph checkpoint savers." optional = false python-versions = "<4.0.0,>=3.9.0" files = [ - {file = "langgraph_checkpoint-1.0.6-py3-none-any.whl", hash = "sha256:b2435e1e42b11cfc8f3ce06d114c75cd04846e83a0214f75e9b4f512e3d5fa4e"}, - {file = "langgraph_checkpoint-1.0.6.tar.gz", hash = "sha256:6ce541cbfb5d73cbceebac27e1214a3b07270a7f571de659d6e2215e3070c23e"}, + {file = "langgraph_checkpoint-1.0.8-py3-none-any.whl", hash = "sha256:6eb2fa615e9a53d5a4181d0a189ecc76b87cd1d5613e17121d2779755d2e566c"}, + {file = "langgraph_checkpoint-1.0.8.tar.gz", hash = "sha256:a528009d4ccebfd24da550fc8ccdd4de0a3c1077f30e2fcd32bddca4c9237e7f"}, ] [package.dependencies] @@ -2666,13 +2730,13 @@ langchain-core = ">=0.2.22,<0.3" [[package]] name = "langsmith" -version = "0.1.104" +version = "0.1.108" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.1.104-py3-none-any.whl", hash = "sha256:049cd312952a0db9f5edeed3b9a8616e66ef86e5490c835c8bb054569203b0d0"}, - {file = "langsmith-0.1.104.tar.gz", hash = "sha256:7892dfe452d143fba573d7eb28dbff3202d2f2daacab8c7276ffe4a850179d4d"}, + {file = "langsmith-0.1.108-py3-none-any.whl", hash = "sha256:407f318b0989e33f2cd30bc2fbd443e4ddfa7c2a93de7f795fb6b119b015583c"}, + {file = "langsmith-0.1.108.tar.gz", hash = "sha256:42f603e2d5770ba36093951bdb29eaab22451cb12ab8c062340c722cf60d4cec"}, ] [package.dependencies] @@ -2702,13 +2766,13 @@ testing = ["packaging", "pytest"] [[package]] name = "litellm" -version = "1.44.5" +version = "1.44.14" description = "Library to easily interface with LLM API providers" optional = false python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" files = [ - {file = "litellm-1.44.5-py3-none-any.whl", hash = "sha256:9a9c713bf009a3a916e98b3fb442075c8eec73bba59bac5c13005c6aa22a834d"}, - {file = "litellm-1.44.5.tar.gz", hash = "sha256:297dbf7d733c95aa54322874cc49de264f0f209d8bf9622672d21f8786a77920"}, + {file = "litellm-1.44.14-py3-none-any.whl", hash = "sha256:5e9651f744039cdc43f2cadfa75a8bd4903d4d433ff7813ded9a7bffa4df262f"}, + {file = "litellm-1.44.14.tar.gz", hash = "sha256:1517eb41da21d339a300ec312353cce8796df18e9f96fa290175ad0c1ca8a069"}, ] [package.dependencies] @@ -2725,8 +2789,8 @@ tiktoken = ">=0.7.0" tokenizers = "*" [package.extras] -extra-proxy = ["azure-identity (>=1.15.0,<2.0.0)", "azure-keyvault-secrets (>=4.8.0,<5.0.0)", "google-cloud-kms (>=2.21.3,<3.0.0)", "prisma (==0.11.0)", "pynacl (>=1.5.0,<2.0.0)", "resend (>=0.8.0,<0.9.0)"] -proxy = ["PyJWT (>=2.8.0,<3.0.0)", "apscheduler (>=3.10.4,<4.0.0)", "backoff", "cryptography (>=42.0.5,<43.0.0)", "fastapi (>=0.111.0,<0.112.0)", "fastapi-sso (>=0.10.0,<0.11.0)", "gunicorn (>=22.0.0,<23.0.0)", "orjson (>=3.9.7,<4.0.0)", "python-multipart (>=0.0.9,<0.0.10)", "pyyaml (>=6.0.1,<7.0.0)", "rq", "uvicorn (>=0.22.0,<0.23.0)"] +extra-proxy = ["azure-identity (>=1.15.0,<2.0.0)", "azure-keyvault-secrets (>=4.8.0,<5.0.0)", "google-cloud-kms (>=2.21.3,<3.0.0)", "prisma (==0.11.0)", "resend (>=0.8.0,<0.9.0)"] +proxy = ["PyJWT (>=2.8.0,<3.0.0)", "apscheduler (>=3.10.4,<4.0.0)", "backoff", "cryptography (>=42.0.5,<43.0.0)", "fastapi (>=0.111.0,<0.112.0)", "fastapi-sso (>=0.10.0,<0.11.0)", "gunicorn (>=22.0.0,<23.0.0)", "orjson (>=3.9.7,<4.0.0)", "pynacl (>=1.5.0,<2.0.0)", "python-multipart (>=0.0.9,<0.0.10)", "pyyaml (>=6.0.1,<7.0.0)", "rq", "uvicorn (>=0.22.0,<0.23.0)"] [[package]] name = "llama-cloud" @@ -3349,19 +3413,19 @@ files = [ [[package]] name = "minijinja" -version = "2.0.1" +version = "2.2.0" description = "An experimental Python binding of the Rust MiniJinja template engine." optional = false python-versions = ">=3.8" files = [ - {file = "minijinja-2.0.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:063b291cb31f5c33eb77bb4cb457f67f14426ca1418232b8ae9f267155d330cc"}, - {file = "minijinja-2.0.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a4e9d639dd89ce7fef86e82147082ab3c248a36950fa3fbe793685ba322c1b7"}, - {file = "minijinja-2.0.1-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a20373af4ee5430356c196c7fe5f19e3261a4fa16c944542b4de7a2349bac7a6"}, - {file = "minijinja-2.0.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ade637bf4826258811a785ccc4e5d41cd2bdf4ec317b1ed3daa4dbbdd020f37d"}, - {file = "minijinja-2.0.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5ec956d777e0fee8e214af48363334c04f098e986038a9e8cb92a0564f81943"}, - {file = "minijinja-2.0.1-cp38-abi3-win32.whl", hash = "sha256:039f4d1a1a73f90917cff1ed7c617eb56e2b2f91bbbdc551adaa448e1673e5c2"}, - {file = "minijinja-2.0.1-cp38-abi3-win_amd64.whl", hash = "sha256:dca5d7689905dce340e36e47348b505c788daf297253b85a1aff506ea63ad1b8"}, - {file = "minijinja-2.0.1.tar.gz", hash = "sha256:e774beffebfb8a1ad17e638ef70917cf5e94593f79acb8a8fff7d983169f3a4e"}, + {file = "minijinja-2.2.0-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:e4154fcf72e81be01c2733b770e6cb3e584851cb2fa73c58e347b04967d3d7c0"}, + {file = "minijinja-2.2.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b05e0070c08b550fa9a09ff9c051f47424674332dd56cc54b997dd602887907"}, + {file = "minijinja-2.2.0-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:360ea4a93fdf1fe327f3e70eed20ecb29f324ca28fae177de0605dcc29869300"}, + {file = "minijinja-2.2.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9cad5ccb021ef25b6a271158f4d6636474edb08cd1dd49355aac6b68a48aebb"}, + {file = "minijinja-2.2.0-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7a85c67c519b413fc4892854782927e1244a24cbbb3a3cb0ac5e57d9fdb1868c"}, + {file = "minijinja-2.2.0-cp38-abi3-win32.whl", hash = "sha256:e431a2467dd6e1bcb7c511e9fbad012b02c6e5453acdd9fbd4c4af0d34a3d1c5"}, + {file = "minijinja-2.2.0-cp38-abi3-win_amd64.whl", hash = "sha256:d4df7e4a09be4249c8243207fa89e6f4d22b853c2b565a99f48e478a30713822"}, + {file = "minijinja-2.2.0.tar.gz", hash = "sha256:4411052c7a60f8d56468cc6d17d45d72be3d5e89e9578a04f8336cc56601523c"}, ] [[package]] @@ -3851,14 +3915,14 @@ files = [ [[package]] name = "nvidia-nvjitlink-cu12" -version = "12.6.20" +version = "12.6.68" description = "Nvidia JIT LTO Library" optional = false python-versions = ">=3" files = [ - {file = "nvidia_nvjitlink_cu12-12.6.20-py3-none-manylinux2014_aarch64.whl", hash = "sha256:84fb38465a5bc7c70cbc320cfd0963eb302ee25a5e939e9f512bbba55b6072fb"}, - {file = "nvidia_nvjitlink_cu12-12.6.20-py3-none-manylinux2014_x86_64.whl", hash = "sha256:562ab97ea2c23164823b2a89cb328d01d45cb99634b8c65fe7cd60d14562bd79"}, - {file = "nvidia_nvjitlink_cu12-12.6.20-py3-none-win_amd64.whl", hash = "sha256:ed3c43a17f37b0c922a919203d2d36cbef24d41cc3e6b625182f8b58203644f6"}, + {file = "nvidia_nvjitlink_cu12-12.6.68-py3-none-manylinux2014_aarch64.whl", hash = "sha256:b3fd0779845f68b92063ab1393abab1ed0a23412fc520df79a8190d098b5cd6b"}, + {file = "nvidia_nvjitlink_cu12-12.6.68-py3-none-manylinux2014_x86_64.whl", hash = "sha256:125a6c2a44e96386dda634e13d944e60b07a0402d391a070e8fb4104b34ea1ab"}, + {file = "nvidia_nvjitlink_cu12-12.6.68-py3-none-win_amd64.whl", hash = "sha256:a55744c98d70317c5e23db14866a8cc2b733f7324509e941fc96276f9f37801d"}, ] [[package]] @@ -3932,13 +3996,13 @@ sympy = "*" [[package]] name = "openai" -version = "1.42.0" +version = "1.43.0" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.42.0-py3-none-any.whl", hash = "sha256:dc91e0307033a4f94931e5d03cc3b29b9717014ad5e73f9f2051b6cb5eda4d80"}, - {file = "openai-1.42.0.tar.gz", hash = "sha256:c9d31853b4e0bc2dc8bd08003b462a006035655a701471695d0bfdc08529cde3"}, + {file = "openai-1.43.0-py3-none-any.whl", hash = "sha256:1a748c2728edd3a738a72a0212ba866f4fdbe39c9ae03813508b267d45104abe"}, + {file = "openai-1.43.0.tar.gz", hash = "sha256:e607aff9fc3e28eade107e5edd8ca95a910a4b12589336d3cbb6bfe2ac306b3c"}, ] [package.dependencies] @@ -4041,7 +4105,7 @@ wrapt = ">=1.0.0,<2.0.0" [[package]] name = "opentelemetry-instrumentation-alephalpha" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Aleph Alpha instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4063,7 +4127,7 @@ url = "../opentelemetry-instrumentation-alephalpha" [[package]] name = "opentelemetry-instrumentation-anthropic" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Anthropic instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4106,7 +4170,7 @@ instruments = ["asgiref (>=3.0,<4.0)"] [[package]] name = "opentelemetry-instrumentation-bedrock" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Bedrock instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4126,7 +4190,7 @@ url = "../opentelemetry-instrumentation-bedrock" [[package]] name = "opentelemetry-instrumentation-chromadb" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Chroma DB instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4148,7 +4212,7 @@ url = "../opentelemetry-instrumentation-chromadb" [[package]] name = "opentelemetry-instrumentation-cohere" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Cohere instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4191,7 +4255,7 @@ instruments = ["fastapi (>=0.58,<1.0)"] [[package]] name = "opentelemetry-instrumentation-google-generativeai" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Google Generative AI instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4213,7 +4277,7 @@ url = "../opentelemetry-instrumentation-google-generativeai" [[package]] name = "opentelemetry-instrumentation-haystack" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Haystack instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4235,7 +4299,7 @@ url = "../opentelemetry-instrumentation-haystack" [[package]] name = "opentelemetry-instrumentation-lancedb" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Lancedb instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4257,7 +4321,7 @@ url = "../opentelemetry-instrumentation-lancedb" [[package]] name = "opentelemetry-instrumentation-langchain" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Langchain instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4279,7 +4343,7 @@ url = "../opentelemetry-instrumentation-langchain" [[package]] name = "opentelemetry-instrumentation-llamaindex" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry LlamaIndex instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4302,7 +4366,7 @@ url = "../opentelemetry-instrumentation-llamaindex" [[package]] name = "opentelemetry-instrumentation-marqo" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Marqo instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4324,7 +4388,7 @@ url = "../opentelemetry-instrumentation-marqo" [[package]] name = "opentelemetry-instrumentation-milvus" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Milvus instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4346,7 +4410,7 @@ url = "../opentelemetry-instrumentation-milvus" [[package]] name = "opentelemetry-instrumentation-mistralai" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Mistral AI instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4368,7 +4432,7 @@ url = "../opentelemetry-instrumentation-mistralai" [[package]] name = "opentelemetry-instrumentation-ollama" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Ollama instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4390,7 +4454,7 @@ url = "../opentelemetry-instrumentation-ollama" [[package]] name = "opentelemetry-instrumentation-openai" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry OpenAI instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4413,7 +4477,7 @@ url = "../opentelemetry-instrumentation-openai" [[package]] name = "opentelemetry-instrumentation-pinecone" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Pinecone instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4435,7 +4499,7 @@ url = "../opentelemetry-instrumentation-pinecone" [[package]] name = "opentelemetry-instrumentation-qdrant" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Qdrant instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4457,7 +4521,7 @@ url = "../opentelemetry-instrumentation-qdrant" [[package]] name = "opentelemetry-instrumentation-replicate" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Replicate instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4536,7 +4600,7 @@ wrapt = ">=1.0.0,<2.0.0" [[package]] name = "opentelemetry-instrumentation-together" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Together AI instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4558,7 +4622,7 @@ url = "../opentelemetry-instrumentation-together" [[package]] name = "opentelemetry-instrumentation-transformers" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry transformers instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4598,7 +4662,7 @@ instruments = ["urllib3 (>=1.0.0,<3.0.0)"] [[package]] name = "opentelemetry-instrumentation-vertexai" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Vertex AI instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4620,7 +4684,7 @@ url = "../opentelemetry-instrumentation-vertexai" [[package]] name = "opentelemetry-instrumentation-watsonx" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry IBM Watsonx Instrumentation" optional = false python-versions = ">=3.9,<4" @@ -4642,7 +4706,7 @@ url = "../opentelemetry-instrumentation-watsonx" [[package]] name = "opentelemetry-instrumentation-weaviate" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Weaviate instrumentation" optional = false python-versions = ">=3.9,<4" @@ -5036,13 +5100,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "posthog" -version = "3.5.2" +version = "3.6.0" description = "Integrate PostHog into any python application." optional = false python-versions = "*" files = [ - {file = "posthog-3.5.2-py2.py3-none-any.whl", hash = "sha256:605b3d92369971cc99290b1fcc8534cbddac3726ef7972caa993454a5ecfb644"}, - {file = "posthog-3.5.2.tar.gz", hash = "sha256:a383a80c1f47e0243f5ce359e81e06e2e7b37eb39d1d6f8d01c3e64ed29df2ee"}, + {file = "posthog-3.6.0-py2.py3-none-any.whl", hash = "sha256:6f8dacc6d14d80734b1d15bd4ab08b049629c5f0fc420cafcf1ce0667c76c83c"}, + {file = "posthog-3.6.0.tar.gz", hash = "sha256:27dbf537241a69fb5f6a3e9561caa2d555d5891d95fa65c27ffa6b52d1fb63b6"}, ] [package.dependencies] @@ -5350,13 +5414,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyparsing" -version = "3.1.2" +version = "3.1.4" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, - {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, + {file = "pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c"}, + {file = "pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"}, ] [package.extras] @@ -5735,6 +5799,27 @@ typing-extensions = ">=4.5.0" [package.extras] dev = ["pylint", "pyright", "pytest", "pytest-asyncio", "pytest-recording", "respx", "ruff (>=0.1.3)"] +[[package]] +name = "requests" +version = "2.32.2" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +files = [ + {file = "requests-2.32.2-py3-none-any.whl", hash = "sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c"}, + {file = "requests-2.32.2.tar.gz", hash = "sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + [[package]] name = "requests" version = "2.32.3" @@ -5776,13 +5861,13 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] [[package]] name = "rich" -version = "13.7.1" +version = "13.8.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, - {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, + {file = "rich-13.8.0-py3-none-any.whl", hash = "sha256:2e85306a063b9492dffc86278197a60cbece75bcb766022f3436f567cae11bdc"}, + {file = "rich-13.8.0.tar.gz", hash = "sha256:a5ac1f1cd448ade0d59cc3356f7db7a7ccda2c8cbae9c7a90c28ff463d3e91f4"}, ] [package.dependencies] @@ -6189,19 +6274,23 @@ train = ["accelerate (>=0.20.3)", "datasets"] [[package]] name = "setuptools" -version = "73.0.1" +version = "74.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-73.0.1-py3-none-any.whl", hash = "sha256:b208925fcb9f7af924ed2dc04708ea89791e24bde0d3020b27df0e116088b34e"}, - {file = "setuptools-73.0.1.tar.gz", hash = "sha256:d59a3e788ab7e012ab2c4baed1b376da6366883ee20d7a5fc426816e3d7b1193"}, + {file = "setuptools-74.0.0-py3-none-any.whl", hash = "sha256:0274581a0037b638b9fc1c6883cc71c0210865aaa76073f7882376b641b84e8f"}, + {file = "setuptools-74.0.0.tar.gz", hash = "sha256:a85e96b8be2b906f3e3e789adec6a9323abf79758ecfa3065bd740d81158b11e"}, ] [package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.11.*)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (<0.4)", "pytest-ruff (>=0.2.1)", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] [[package]] name = "shapely" @@ -6405,13 +6494,13 @@ sqlcipher = ["sqlcipher3_binary"] [[package]] name = "starlette" -version = "0.38.2" +version = "0.38.4" description = "The little ASGI library that shines." optional = false python-versions = ">=3.8" files = [ - {file = "starlette-0.38.2-py3-none-any.whl", hash = "sha256:4ec6a59df6bbafdab5f567754481657f7ed90dc9d69b0c9ff017907dd54faeff"}, - {file = "starlette-0.38.2.tar.gz", hash = "sha256:c7c0441065252160993a1a37cf2a73bb64d271b17303e0b0c1eb7191cfb12d75"}, + {file = "starlette-0.38.4-py3-none-any.whl", hash = "sha256:526f53a77f0e43b85f583438aee1a940fd84f8fd610353e8b0c1a77ad8a87e76"}, + {file = "starlette-0.38.4.tar.gz", hash = "sha256:53a7439060304a208fea17ed407e998f46da5e5d9b1addfea3040094512a6379"}, ] [package.dependencies] @@ -6773,7 +6862,7 @@ telegram = ["requests"] [[package]] name = "traceloop-sdk" -version = "0.28.2" +version = "0.29.2" description = "Traceloop Software Development Kit (SDK) for Python" optional = false python-versions = ">=3.9,<4" @@ -6921,13 +7010,13 @@ tutorials = ["matplotlib", "pandas", "tabulate"] [[package]] name = "typer" -version = "0.12.4" +version = "0.12.5" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." optional = false python-versions = ">=3.7" files = [ - {file = "typer-0.12.4-py3-none-any.whl", hash = "sha256:819aa03699f438397e876aa12b0d63766864ecba1b579092cc9fe35d886e34b6"}, - {file = "typer-0.12.4.tar.gz", hash = "sha256:c9c1613ed6a166162705b3347b8d10b661ccc5d95692654d0fb628118f2c34e6"}, + {file = "typer-0.12.5-py3-none-any.whl", hash = "sha256:62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b"}, + {file = "typer-0.12.5.tar.gz", hash = "sha256:f592f089bedcc8ec1b974125d64851029c3b1af145f04aca64d69410f0c9b722"}, ] [package.dependencies] @@ -7011,13 +7100,13 @@ files = [ [[package]] name = "urllib3" -version = "1.26.19" +version = "1.26.20" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "urllib3-1.26.19-py2.py3-none-any.whl", hash = "sha256:37a0344459b199fce0e80b0d3569837ec6b6937435c5244e7fd73fa6006830f3"}, - {file = "urllib3-1.26.19.tar.gz", hash = "sha256:3e3d753a8618b86d7de333b4223005f68720bcd6a7d2bcb9fbd2229ec7c1e429"}, + {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, + {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, ] [package.extras] @@ -7097,98 +7186,94 @@ test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)" [[package]] name = "watchfiles" -version = "0.23.0" +version = "0.24.0" description = "Simple, modern and high performance file watching and code reload in python." optional = false python-versions = ">=3.8" files = [ - {file = "watchfiles-0.23.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:bee8ce357a05c20db04f46c22be2d1a2c6a8ed365b325d08af94358e0688eeb4"}, - {file = "watchfiles-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4ccd3011cc7ee2f789af9ebe04745436371d36afe610028921cab9f24bb2987b"}, - {file = "watchfiles-0.23.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb02d41c33be667e6135e6686f1bb76104c88a312a18faa0ef0262b5bf7f1a0f"}, - {file = "watchfiles-0.23.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7cf12ac34c444362f3261fb3ff548f0037ddd4c5bb85f66c4be30d2936beb3c5"}, - {file = "watchfiles-0.23.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0b2c25040a3c0ce0e66c7779cc045fdfbbb8d59e5aabfe033000b42fe44b53e"}, - {file = "watchfiles-0.23.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecf2be4b9eece4f3da8ba5f244b9e51932ebc441c0867bd6af46a3d97eb068d6"}, - {file = "watchfiles-0.23.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40cb8fa00028908211eb9f8d47744dca21a4be6766672e1ff3280bee320436f1"}, - {file = "watchfiles-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f48c917ffd36ff9a5212614c2d0d585fa8b064ca7e66206fb5c095015bc8207"}, - {file = "watchfiles-0.23.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9d183e3888ada88185ab17064079c0db8c17e32023f5c278d7bf8014713b1b5b"}, - {file = "watchfiles-0.23.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9837edf328b2805346f91209b7e660f65fb0e9ca18b7459d075d58db082bf981"}, - {file = "watchfiles-0.23.0-cp310-none-win32.whl", hash = "sha256:296e0b29ab0276ca59d82d2da22cbbdb39a23eed94cca69aed274595fb3dfe42"}, - {file = "watchfiles-0.23.0-cp310-none-win_amd64.whl", hash = "sha256:4ea756e425ab2dfc8ef2a0cb87af8aa7ef7dfc6fc46c6f89bcf382121d4fff75"}, - {file = "watchfiles-0.23.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:e397b64f7aaf26915bf2ad0f1190f75c855d11eb111cc00f12f97430153c2eab"}, - {file = "watchfiles-0.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b4ac73b02ca1824ec0a7351588241fd3953748d3774694aa7ddb5e8e46aef3e3"}, - {file = "watchfiles-0.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130a896d53b48a1cecccfa903f37a1d87dbb74295305f865a3e816452f6e49e4"}, - {file = "watchfiles-0.23.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c5e7803a65eb2d563c73230e9d693c6539e3c975ccfe62526cadde69f3fda0cf"}, - {file = "watchfiles-0.23.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1aa4cc85202956d1a65c88d18c7b687b8319dbe6b1aec8969784ef7a10e7d1a"}, - {file = "watchfiles-0.23.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87f889f6e58849ddb7c5d2cb19e2e074917ed1c6e3ceca50405775166492cca8"}, - {file = "watchfiles-0.23.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37fd826dac84c6441615aa3f04077adcc5cac7194a021c9f0d69af20fb9fa788"}, - {file = "watchfiles-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee7db6e36e7a2c15923072e41ea24d9a0cf39658cb0637ecc9307b09d28827e1"}, - {file = "watchfiles-0.23.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2368c5371c17fdcb5a2ea71c5c9d49f9b128821bfee69503cc38eae00feb3220"}, - {file = "watchfiles-0.23.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:857af85d445b9ba9178db95658c219dbd77b71b8264e66836a6eba4fbf49c320"}, - {file = "watchfiles-0.23.0-cp311-none-win32.whl", hash = "sha256:1d636c8aeb28cdd04a4aa89030c4b48f8b2954d8483e5f989774fa441c0ed57b"}, - {file = "watchfiles-0.23.0-cp311-none-win_amd64.whl", hash = "sha256:46f1d8069a95885ca529645cdbb05aea5837d799965676e1b2b1f95a4206313e"}, - {file = "watchfiles-0.23.0-cp311-none-win_arm64.whl", hash = "sha256:e495ed2a7943503766c5d1ff05ae9212dc2ce1c0e30a80d4f0d84889298fa304"}, - {file = "watchfiles-0.23.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1db691bad0243aed27c8354b12d60e8e266b75216ae99d33e927ff5238d270b5"}, - {file = "watchfiles-0.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:62d2b18cb1edaba311fbbfe83fb5e53a858ba37cacb01e69bc20553bb70911b8"}, - {file = "watchfiles-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e087e8fdf1270d000913c12e6eca44edd02aad3559b3e6b8ef00f0ce76e0636f"}, - {file = "watchfiles-0.23.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd41d5c72417b87c00b1b635738f3c283e737d75c5fa5c3e1c60cd03eac3af77"}, - {file = "watchfiles-0.23.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e5f3ca0ff47940ce0a389457b35d6df601c317c1e1a9615981c474452f98de1"}, - {file = "watchfiles-0.23.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6991e3a78f642368b8b1b669327eb6751439f9f7eaaa625fae67dd6070ecfa0b"}, - {file = "watchfiles-0.23.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f7252f52a09f8fa5435dc82b6af79483118ce6bd51eb74e6269f05ee22a7b9f"}, - {file = "watchfiles-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e01bcb8d767c58865207a6c2f2792ad763a0fe1119fb0a430f444f5b02a5ea0"}, - {file = "watchfiles-0.23.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8e56fbcdd27fce061854ddec99e015dd779cae186eb36b14471fc9ae713b118c"}, - {file = "watchfiles-0.23.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bd3e2d64500a6cad28bcd710ee6269fbeb2e5320525acd0cfab5f269ade68581"}, - {file = "watchfiles-0.23.0-cp312-none-win32.whl", hash = "sha256:eb99c954291b2fad0eff98b490aa641e128fbc4a03b11c8a0086de8b7077fb75"}, - {file = "watchfiles-0.23.0-cp312-none-win_amd64.whl", hash = "sha256:dccc858372a56080332ea89b78cfb18efb945da858fabeb67f5a44fa0bcb4ebb"}, - {file = "watchfiles-0.23.0-cp312-none-win_arm64.whl", hash = "sha256:6c21a5467f35c61eafb4e394303720893066897fca937bade5b4f5877d350ff8"}, - {file = "watchfiles-0.23.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ba31c32f6b4dceeb2be04f717811565159617e28d61a60bb616b6442027fd4b9"}, - {file = "watchfiles-0.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:85042ab91814fca99cec4678fc063fb46df4cbb57b4835a1cc2cb7a51e10250e"}, - {file = "watchfiles-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24655e8c1c9c114005c3868a3d432c8aa595a786b8493500071e6a52f3d09217"}, - {file = "watchfiles-0.23.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b1a950ab299a4a78fd6369a97b8763732bfb154fdb433356ec55a5bce9515c1"}, - {file = "watchfiles-0.23.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8d3c5cd327dd6ce0edfc94374fb5883d254fe78a5e9d9dfc237a1897dc73cd1"}, - {file = "watchfiles-0.23.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ff785af8bacdf0be863ec0c428e3288b817e82f3d0c1d652cd9c6d509020dd0"}, - {file = "watchfiles-0.23.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:02b7ba9d4557149410747353e7325010d48edcfe9d609a85cb450f17fd50dc3d"}, - {file = "watchfiles-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a1b05c0afb2cd2f48c1ed2ae5487b116e34b93b13074ed3c22ad5c743109f0"}, - {file = "watchfiles-0.23.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:109a61763e7318d9f821b878589e71229f97366fa6a5c7720687d367f3ab9eef"}, - {file = "watchfiles-0.23.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:9f8e6bb5ac007d4a4027b25f09827ed78cbbd5b9700fd6c54429278dacce05d1"}, - {file = "watchfiles-0.23.0-cp313-none-win32.whl", hash = "sha256:f46c6f0aec8d02a52d97a583782d9af38c19a29900747eb048af358a9c1d8e5b"}, - {file = "watchfiles-0.23.0-cp313-none-win_amd64.whl", hash = "sha256:f449afbb971df5c6faeb0a27bca0427d7b600dd8f4a068492faec18023f0dcff"}, - {file = "watchfiles-0.23.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:2dddc2487d33e92f8b6222b5fb74ae2cfde5e8e6c44e0248d24ec23befdc5366"}, - {file = "watchfiles-0.23.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e75695cc952e825fa3e0684a7f4a302f9128721f13eedd8dbd3af2ba450932b8"}, - {file = "watchfiles-0.23.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2537ef60596511df79b91613a5bb499b63f46f01a11a81b0a2b0dedf645d0a9c"}, - {file = "watchfiles-0.23.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20b423b58f5fdde704a226b598a2d78165fe29eb5621358fe57ea63f16f165c4"}, - {file = "watchfiles-0.23.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b98732ec893975455708d6fc9a6daab527fc8bbe65be354a3861f8c450a632a4"}, - {file = "watchfiles-0.23.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee1f5fcbf5bc33acc0be9dd31130bcba35d6d2302e4eceafafd7d9018c7755ab"}, - {file = "watchfiles-0.23.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8f195338a5a7b50a058522b39517c50238358d9ad8284fd92943643144c0c03"}, - {file = "watchfiles-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:524fcb8d59b0dbee2c9b32207084b67b2420f6431ed02c18bd191e6c575f5c48"}, - {file = "watchfiles-0.23.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0eff099a4df36afaa0eea7a913aa64dcf2cbd4e7a4f319a73012210af4d23810"}, - {file = "watchfiles-0.23.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a8323daae27ea290ba3350c70c836c0d2b0fb47897fa3b0ca6a5375b952b90d3"}, - {file = "watchfiles-0.23.0-cp38-none-win32.whl", hash = "sha256:aafea64a3ae698695975251f4254df2225e2624185a69534e7fe70581066bc1b"}, - {file = "watchfiles-0.23.0-cp38-none-win_amd64.whl", hash = "sha256:c846884b2e690ba62a51048a097acb6b5cd263d8bd91062cd6137e2880578472"}, - {file = "watchfiles-0.23.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a753993635eccf1ecb185dedcc69d220dab41804272f45e4aef0a67e790c3eb3"}, - {file = "watchfiles-0.23.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6bb91fa4d0b392f0f7e27c40981e46dda9eb0fbc84162c7fb478fe115944f491"}, - {file = "watchfiles-0.23.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1f67312efa3902a8e8496bfa9824d3bec096ff83c4669ea555c6bdd213aa516"}, - {file = "watchfiles-0.23.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7ca6b71dcc50d320c88fb2d88ecd63924934a8abc1673683a242a7ca7d39e781"}, - {file = "watchfiles-0.23.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aec5c29915caf08771d2507da3ac08e8de24a50f746eb1ed295584ba1820330"}, - {file = "watchfiles-0.23.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1733b9bc2c8098c6bdb0ff7a3d7cb211753fecb7bd99bdd6df995621ee1a574b"}, - {file = "watchfiles-0.23.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:02ff5d7bd066c6a7673b17c8879cd8ee903078d184802a7ee851449c43521bdd"}, - {file = "watchfiles-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18e2de19801b0eaa4c5292a223effb7cfb43904cb742c5317a0ac686ed604765"}, - {file = "watchfiles-0.23.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8ada449e22198c31fb013ae7e9add887e8d2bd2335401abd3cbc55f8c5083647"}, - {file = "watchfiles-0.23.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3af1b05361e1cc497bf1be654a664750ae61f5739e4bb094a2be86ec8c6db9b6"}, - {file = "watchfiles-0.23.0-cp39-none-win32.whl", hash = "sha256:486bda18be5d25ab5d932699ceed918f68eb91f45d018b0343e3502e52866e5e"}, - {file = "watchfiles-0.23.0-cp39-none-win_amd64.whl", hash = "sha256:d2d42254b189a346249424fb9bb39182a19289a2409051ee432fb2926bad966a"}, - {file = "watchfiles-0.23.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6a9265cf87a5b70147bfb2fec14770ed5b11a5bb83353f0eee1c25a81af5abfe"}, - {file = "watchfiles-0.23.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9f02a259fcbbb5fcfe7a0805b1097ead5ba7a043e318eef1db59f93067f0b49b"}, - {file = "watchfiles-0.23.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ebaebb53b34690da0936c256c1cdb0914f24fb0e03da76d185806df9328abed"}, - {file = "watchfiles-0.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd257f98cff9c6cb39eee1a83c7c3183970d8a8d23e8cf4f47d9a21329285cee"}, - {file = "watchfiles-0.23.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aba037c1310dd108411d27b3d5815998ef0e83573e47d4219f45753c710f969f"}, - {file = "watchfiles-0.23.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:a96ac14e184aa86dc43b8a22bb53854760a58b2966c2b41580de938e9bf26ed0"}, - {file = "watchfiles-0.23.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11698bb2ea5e991d10f1f4f83a39a02f91e44e4bd05f01b5c1ec04c9342bf63c"}, - {file = "watchfiles-0.23.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efadd40fca3a04063d40c4448c9303ce24dd6151dc162cfae4a2a060232ebdcb"}, - {file = "watchfiles-0.23.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:556347b0abb4224c5ec688fc58214162e92a500323f50182f994f3ad33385dcb"}, - {file = "watchfiles-0.23.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1cf7f486169986c4b9d34087f08ce56a35126600b6fef3028f19ca16d5889071"}, - {file = "watchfiles-0.23.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f18de0f82c62c4197bea5ecf4389288ac755896aac734bd2cc44004c56e4ac47"}, - {file = "watchfiles-0.23.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:532e1f2c491274d1333a814e4c5c2e8b92345d41b12dc806cf07aaff786beb66"}, - {file = "watchfiles-0.23.0.tar.gz", hash = "sha256:9338ade39ff24f8086bb005d16c29f8e9f19e55b18dcb04dfa26fcbc09da497b"}, + {file = "watchfiles-0.24.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:083dc77dbdeef09fa44bb0f4d1df571d2e12d8a8f985dccde71ac3ac9ac067a0"}, + {file = "watchfiles-0.24.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e94e98c7cb94cfa6e071d401ea3342767f28eb5a06a58fafdc0d2a4974f4f35c"}, + {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82ae557a8c037c42a6ef26c494d0631cacca040934b101d001100ed93d43f361"}, + {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:acbfa31e315a8f14fe33e3542cbcafc55703b8f5dcbb7c1eecd30f141df50db3"}, + {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b74fdffce9dfcf2dc296dec8743e5b0332d15df19ae464f0e249aa871fc1c571"}, + {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:449f43f49c8ddca87c6b3980c9284cab6bd1f5c9d9a2b00012adaaccd5e7decd"}, + {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4abf4ad269856618f82dee296ac66b0cd1d71450fc3c98532d93798e73399b7a"}, + {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f895d785eb6164678ff4bb5cc60c5996b3ee6df3edb28dcdeba86a13ea0465e"}, + {file = "watchfiles-0.24.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ae3e208b31be8ce7f4c2c0034f33406dd24fbce3467f77223d10cd86778471c"}, + {file = "watchfiles-0.24.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2efec17819b0046dde35d13fb8ac7a3ad877af41ae4640f4109d9154ed30a188"}, + {file = "watchfiles-0.24.0-cp310-none-win32.whl", hash = "sha256:6bdcfa3cd6fdbdd1a068a52820f46a815401cbc2cb187dd006cb076675e7b735"}, + {file = "watchfiles-0.24.0-cp310-none-win_amd64.whl", hash = "sha256:54ca90a9ae6597ae6dc00e7ed0a040ef723f84ec517d3e7ce13e63e4bc82fa04"}, + {file = "watchfiles-0.24.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:bdcd5538e27f188dd3c804b4a8d5f52a7fc7f87e7fd6b374b8e36a4ca03db428"}, + {file = "watchfiles-0.24.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2dadf8a8014fde6addfd3c379e6ed1a981c8f0a48292d662e27cabfe4239c83c"}, + {file = "watchfiles-0.24.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6509ed3f467b79d95fc62a98229f79b1a60d1b93f101e1c61d10c95a46a84f43"}, + {file = "watchfiles-0.24.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8360f7314a070c30e4c976b183d1d8d1585a4a50c5cb603f431cebcbb4f66327"}, + {file = "watchfiles-0.24.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:316449aefacf40147a9efaf3bd7c9bdd35aaba9ac5d708bd1eb5763c9a02bef5"}, + {file = "watchfiles-0.24.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73bde715f940bea845a95247ea3e5eb17769ba1010efdc938ffcb967c634fa61"}, + {file = "watchfiles-0.24.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3770e260b18e7f4e576edca4c0a639f704088602e0bc921c5c2e721e3acb8d15"}, + {file = "watchfiles-0.24.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa0fd7248cf533c259e59dc593a60973a73e881162b1a2f73360547132742823"}, + {file = "watchfiles-0.24.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d7a2e3b7f5703ffbd500dabdefcbc9eafeff4b9444bbdd5d83d79eedf8428fab"}, + {file = "watchfiles-0.24.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d831ee0a50946d24a53821819b2327d5751b0c938b12c0653ea5be7dea9c82ec"}, + {file = "watchfiles-0.24.0-cp311-none-win32.whl", hash = "sha256:49d617df841a63b4445790a254013aea2120357ccacbed00253f9c2b5dc24e2d"}, + {file = "watchfiles-0.24.0-cp311-none-win_amd64.whl", hash = "sha256:d3dcb774e3568477275cc76554b5a565024b8ba3a0322f77c246bc7111c5bb9c"}, + {file = "watchfiles-0.24.0-cp311-none-win_arm64.whl", hash = "sha256:9301c689051a4857d5b10777da23fafb8e8e921bcf3abe6448a058d27fb67633"}, + {file = "watchfiles-0.24.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7211b463695d1e995ca3feb38b69227e46dbd03947172585ecb0588f19b0d87a"}, + {file = "watchfiles-0.24.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4b8693502d1967b00f2fb82fc1e744df128ba22f530e15b763c8d82baee15370"}, + {file = "watchfiles-0.24.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdab9555053399318b953a1fe1f586e945bc8d635ce9d05e617fd9fe3a4687d6"}, + {file = "watchfiles-0.24.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:34e19e56d68b0dad5cff62273107cf5d9fbaf9d75c46277aa5d803b3ef8a9e9b"}, + {file = "watchfiles-0.24.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:41face41f036fee09eba33a5b53a73e9a43d5cb2c53dad8e61fa6c9f91b5a51e"}, + {file = "watchfiles-0.24.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5148c2f1ea043db13ce9b0c28456e18ecc8f14f41325aa624314095b6aa2e9ea"}, + {file = "watchfiles-0.24.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e4bd963a935aaf40b625c2499f3f4f6bbd0c3776f6d3bc7c853d04824ff1c9f"}, + {file = "watchfiles-0.24.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c79d7719d027b7a42817c5d96461a99b6a49979c143839fc37aa5748c322f234"}, + {file = "watchfiles-0.24.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:32aa53a9a63b7f01ed32e316e354e81e9da0e6267435c7243bf8ae0f10b428ef"}, + {file = "watchfiles-0.24.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ce72dba6a20e39a0c628258b5c308779b8697f7676c254a845715e2a1039b968"}, + {file = "watchfiles-0.24.0-cp312-none-win32.whl", hash = "sha256:d9018153cf57fc302a2a34cb7564870b859ed9a732d16b41a9b5cb2ebed2d444"}, + {file = "watchfiles-0.24.0-cp312-none-win_amd64.whl", hash = "sha256:551ec3ee2a3ac9cbcf48a4ec76e42c2ef938a7e905a35b42a1267fa4b1645896"}, + {file = "watchfiles-0.24.0-cp312-none-win_arm64.whl", hash = "sha256:b52a65e4ea43c6d149c5f8ddb0bef8d4a1e779b77591a458a893eb416624a418"}, + {file = "watchfiles-0.24.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3d2e3ab79a1771c530233cadfd277fcc762656d50836c77abb2e5e72b88e3a48"}, + {file = "watchfiles-0.24.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:327763da824817b38ad125dcd97595f942d720d32d879f6c4ddf843e3da3fe90"}, + {file = "watchfiles-0.24.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd82010f8ab451dabe36054a1622870166a67cf3fce894f68895db6f74bbdc94"}, + {file = "watchfiles-0.24.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d64ba08db72e5dfd5c33be1e1e687d5e4fcce09219e8aee893a4862034081d4e"}, + {file = "watchfiles-0.24.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1cf1f6dd7825053f3d98f6d33f6464ebdd9ee95acd74ba2c34e183086900a827"}, + {file = "watchfiles-0.24.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43e3e37c15a8b6fe00c1bce2473cfa8eb3484bbeecf3aefbf259227e487a03df"}, + {file = "watchfiles-0.24.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88bcd4d0fe1d8ff43675360a72def210ebad3f3f72cabfeac08d825d2639b4ab"}, + {file = "watchfiles-0.24.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:999928c6434372fde16c8f27143d3e97201160b48a614071261701615a2a156f"}, + {file = "watchfiles-0.24.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:30bbd525c3262fd9f4b1865cb8d88e21161366561cd7c9e1194819e0a33ea86b"}, + {file = "watchfiles-0.24.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:edf71b01dec9f766fb285b73930f95f730bb0943500ba0566ae234b5c1618c18"}, + {file = "watchfiles-0.24.0-cp313-none-win32.whl", hash = "sha256:f4c96283fca3ee09fb044f02156d9570d156698bc3734252175a38f0e8975f07"}, + {file = "watchfiles-0.24.0-cp313-none-win_amd64.whl", hash = "sha256:a974231b4fdd1bb7f62064a0565a6b107d27d21d9acb50c484d2cdba515b9366"}, + {file = "watchfiles-0.24.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:ee82c98bed9d97cd2f53bdb035e619309a098ea53ce525833e26b93f673bc318"}, + {file = "watchfiles-0.24.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fd92bbaa2ecdb7864b7600dcdb6f2f1db6e0346ed425fbd01085be04c63f0b05"}, + {file = "watchfiles-0.24.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f83df90191d67af5a831da3a33dd7628b02a95450e168785586ed51e6d28943c"}, + {file = "watchfiles-0.24.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fca9433a45f18b7c779d2bae7beeec4f740d28b788b117a48368d95a3233ed83"}, + {file = "watchfiles-0.24.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b995bfa6bf01a9e09b884077a6d37070464b529d8682d7691c2d3b540d357a0c"}, + {file = "watchfiles-0.24.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed9aba6e01ff6f2e8285e5aa4154e2970068fe0fc0998c4380d0e6278222269b"}, + {file = "watchfiles-0.24.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5171ef898299c657685306d8e1478a45e9303ddcd8ac5fed5bd52ad4ae0b69b"}, + {file = "watchfiles-0.24.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4933a508d2f78099162da473841c652ad0de892719043d3f07cc83b33dfd9d91"}, + {file = "watchfiles-0.24.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:95cf3b95ea665ab03f5a54765fa41abf0529dbaf372c3b83d91ad2cfa695779b"}, + {file = "watchfiles-0.24.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:01def80eb62bd5db99a798d5e1f5f940ca0a05986dcfae21d833af7a46f7ee22"}, + {file = "watchfiles-0.24.0-cp38-none-win32.whl", hash = "sha256:4d28cea3c976499475f5b7a2fec6b3a36208656963c1a856d328aeae056fc5c1"}, + {file = "watchfiles-0.24.0-cp38-none-win_amd64.whl", hash = "sha256:21ab23fdc1208086d99ad3f69c231ba265628014d4aed31d4e8746bd59e88cd1"}, + {file = "watchfiles-0.24.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b665caeeda58625c3946ad7308fbd88a086ee51ccb706307e5b1fa91556ac886"}, + {file = "watchfiles-0.24.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5c51749f3e4e269231510da426ce4a44beb98db2dce9097225c338f815b05d4f"}, + {file = "watchfiles-0.24.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82b2509f08761f29a0fdad35f7e1638b8ab1adfa2666d41b794090361fb8b855"}, + {file = "watchfiles-0.24.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a60e2bf9dc6afe7f743e7c9b149d1fdd6dbf35153c78fe3a14ae1a9aee3d98b"}, + {file = "watchfiles-0.24.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7d9b87c4c55e3ea8881dfcbf6d61ea6775fffed1fedffaa60bd047d3c08c430"}, + {file = "watchfiles-0.24.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:78470906a6be5199524641f538bd2c56bb809cd4bf29a566a75051610bc982c3"}, + {file = "watchfiles-0.24.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:07cdef0c84c03375f4e24642ef8d8178e533596b229d32d2bbd69e5128ede02a"}, + {file = "watchfiles-0.24.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d337193bbf3e45171c8025e291530fb7548a93c45253897cd764a6a71c937ed9"}, + {file = "watchfiles-0.24.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ec39698c45b11d9694a1b635a70946a5bad066b593af863460a8e600f0dff1ca"}, + {file = "watchfiles-0.24.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2e28d91ef48eab0afb939fa446d8ebe77e2f7593f5f463fd2bb2b14132f95b6e"}, + {file = "watchfiles-0.24.0-cp39-none-win32.whl", hash = "sha256:7138eff8baa883aeaa074359daabb8b6c1e73ffe69d5accdc907d62e50b1c0da"}, + {file = "watchfiles-0.24.0-cp39-none-win_amd64.whl", hash = "sha256:b3ef2c69c655db63deb96b3c3e587084612f9b1fa983df5e0c3379d41307467f"}, + {file = "watchfiles-0.24.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:632676574429bee8c26be8af52af20e0c718cc7f5f67f3fb658c71928ccd4f7f"}, + {file = "watchfiles-0.24.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a2a9891723a735d3e2540651184be6fd5b96880c08ffe1a98bae5017e65b544b"}, + {file = "watchfiles-0.24.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7fa2bc0efef3e209a8199fd111b8969fe9db9c711acc46636686331eda7dd4"}, + {file = "watchfiles-0.24.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01550ccf1d0aed6ea375ef259706af76ad009ef5b0203a3a4cce0f6024f9b68a"}, + {file = "watchfiles-0.24.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:96619302d4374de5e2345b2b622dc481257a99431277662c30f606f3e22f42be"}, + {file = "watchfiles-0.24.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:85d5f0c7771dcc7a26c7a27145059b6bb0ce06e4e751ed76cdf123d7039b60b5"}, + {file = "watchfiles-0.24.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951088d12d339690a92cef2ec5d3cfd957692834c72ffd570ea76a6790222777"}, + {file = "watchfiles-0.24.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fb58bcaa343fedc6a9e91f90195b20ccb3135447dc9e4e2570c3a39565853e"}, + {file = "watchfiles-0.24.0.tar.gz", hash = "sha256:afb72325b74fa7a428c009c1b8be4b4d7c2afedafb2982827ef2156646df2fe1"}, ] [package.dependencies] @@ -7212,97 +7297,97 @@ test = ["websockets"] [[package]] name = "websockets" -version = "13.0" +version = "13.0.1" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false python-versions = ">=3.8" files = [ - {file = "websockets-13.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ad4fa707ff9e2ffee019e946257b5300a45137a58f41fbd9a4db8e684ab61528"}, - {file = "websockets-13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6fd757f313c13c34dae9f126d3ba4cf97175859c719e57c6a614b781c86b617e"}, - {file = "websockets-13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cbac2eb7ce0fac755fb983c9247c4a60c4019bcde4c0e4d167aeb17520cc7ef1"}, - {file = "websockets-13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4b83cf7354cbbc058e97b3e545dceb75b8d9cf17fd5a19db419c319ddbaaf7a"}, - {file = "websockets-13.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9202c0010c78fad1041e1c5285232b6508d3633f92825687549540a70e9e5901"}, - {file = "websockets-13.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e6566e79c8c7cbea75ec450f6e1828945fc5c9a4769ceb1c7b6e22470539712"}, - {file = "websockets-13.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e7fcad070dcd9ad37a09d89a4cbc2a5e3e45080b88977c0da87b3090f9f55ead"}, - {file = "websockets-13.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a8f7d65358a25172db00c69bcc7df834155ee24229f560d035758fd6613111a"}, - {file = "websockets-13.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:63b702fb31e3f058f946ccdfa551f4d57a06f7729c369e8815eb18643099db37"}, - {file = "websockets-13.0-cp310-cp310-win32.whl", hash = "sha256:3a20cf14ba7b482c4a1924b5e061729afb89c890ca9ed44ac4127c6c5986e424"}, - {file = "websockets-13.0-cp310-cp310-win_amd64.whl", hash = "sha256:587245f0704d0bb675f919898d7473e8827a6d578e5a122a21756ca44b811ec8"}, - {file = "websockets-13.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:06df8306c241c235075d2ae77367038e701e53bc8c1bb4f6644f4f53aa6dedd0"}, - {file = "websockets-13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85a1f92a02f0b8c1bf02699731a70a8a74402bb3f82bee36e7768b19a8ed9709"}, - {file = "websockets-13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9ed02c604349068d46d87ef4c2012c112c791f2bec08671903a6bb2bd9c06784"}, - {file = "websockets-13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b89849171b590107f6724a7b0790736daead40926ddf47eadf998b4ff51d6414"}, - {file = "websockets-13.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:939a16849d71203628157a5e4a495da63967c744e1e32018e9b9e2689aca64d4"}, - {file = "websockets-13.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad818cdac37c0ad4c58e51cb4964eae4f18b43c4a83cb37170b0d90c31bd80cf"}, - {file = "websockets-13.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cbfe82a07596a044de78bb7a62519e71690c5812c26c5f1d4b877e64e4f46309"}, - {file = "websockets-13.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e07e76c49f39c5b45cbd7362b94f001ae209a3ea4905ae9a09cfd53b3c76373d"}, - {file = "websockets-13.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:372f46a0096cfda23c88f7e42349a33f8375e10912f712e6b496d3a9a557290f"}, - {file = "websockets-13.0-cp311-cp311-win32.whl", hash = "sha256:376a43a4fd96725f13450d3d2e98f4f36c3525c562ab53d9a98dd2950dca9a8a"}, - {file = "websockets-13.0-cp311-cp311-win_amd64.whl", hash = "sha256:2be1382a4daa61e2f3e2be3b3c86932a8db9d1f85297feb6e9df22f391f94452"}, - {file = "websockets-13.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b5407c34776b9b77bd89a5f95eb0a34aaf91889e3f911c63f13035220eb50107"}, - {file = "websockets-13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4782ec789f059f888c1e8fdf94383d0e64b531cffebbf26dd55afd53ab487ca4"}, - {file = "websockets-13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c8feb8e19ef65c9994e652c5b0324abd657bedd0abeb946fb4f5163012c1e730"}, - {file = "websockets-13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f3d2e20c442b58dbac593cb1e02bc02d149a86056cc4126d977ad902472e3b"}, - {file = "websockets-13.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e39d393e0ab5b8bd01717cc26f2922026050188947ff54fe6a49dc489f7750b7"}, - {file = "websockets-13.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f661a4205741bdc88ac9c2b2ec003c72cee97e4acd156eb733662ff004ba429"}, - {file = "websockets-13.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:384129ad0490e06bab2b98c1da9b488acb35bb11e2464c728376c6f55f0d45f3"}, - {file = "websockets-13.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:df5c0eff91f61b8205a6c9f7b255ff390cdb77b61c7b41f79ca10afcbb22b6cb"}, - {file = "websockets-13.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:02cc9bb1a887dac0e08bf657c5d00aa3fac0d03215d35a599130c2034ae6663a"}, - {file = "websockets-13.0-cp312-cp312-win32.whl", hash = "sha256:d9726d2c9bd6aed8cb994d89b3910ca0079406edce3670886ec828a73e7bdd53"}, - {file = "websockets-13.0-cp312-cp312-win_amd64.whl", hash = "sha256:fa0839f35322f7b038d8adcf679e2698c3a483688cc92e3bd15ee4fb06669e9a"}, - {file = "websockets-13.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:da7e501e59857e8e3e9d10586139dc196b80445a591451ca9998aafba1af5278"}, - {file = "websockets-13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a00e1e587c655749afb5b135d8d3edcfe84ec6db864201e40a882e64168610b3"}, - {file = "websockets-13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a7fbf2a8fe7556a8f4e68cb3e736884af7bf93653e79f6219f17ebb75e97d8f0"}, - {file = "websockets-13.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ea9c9c7443a97ea4d84d3e4d42d0e8c4235834edae652993abcd2aff94affd7"}, - {file = "websockets-13.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35c2221b539b360203f3f9ad168e527bf16d903e385068ae842c186efb13d0ea"}, - {file = "websockets-13.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:358d37c5c431dd050ffb06b4b075505aae3f4f795d7fff9794e5ed96ce99b998"}, - {file = "websockets-13.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:038e7a0f1bfafc7bf52915ab3506b7a03d1e06381e9f60440c856e8918138151"}, - {file = "websockets-13.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fd038bc9e2c134847f1e0ce3191797fad110756e690c2fdd9702ed34e7a43abb"}, - {file = "websockets-13.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93b8c2008f372379fb6e5d2b3f7c9ec32f7b80316543fd3a5ace6610c5cde1b0"}, - {file = "websockets-13.0-cp313-cp313-win32.whl", hash = "sha256:851fd0afb3bc0b73f7c5b5858975d42769a5fdde5314f4ef2c106aec63100687"}, - {file = "websockets-13.0-cp313-cp313-win_amd64.whl", hash = "sha256:7d14901fdcf212804970c30ab9ee8f3f0212e620c7ea93079d6534863444fb4e"}, - {file = "websockets-13.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ae7a519a56a714f64c3445cabde9fc2fc927e7eae44f413eae187cddd9e54178"}, - {file = "websockets-13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5575031472ca87302aeb2ce2c2349f4c6ea978c86a9d1289bc5d16058ad4c10a"}, - {file = "websockets-13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9895df6cd0bfe79d09bcd1dbdc03862846f26fbd93797153de954306620c1d00"}, - {file = "websockets-13.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4de299c947a54fca9ce1c5fd4a08eb92ffce91961becb13bd9195f7c6e71b47"}, - {file = "websockets-13.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05c25f7b849702950b6fd0e233989bb73a0d2bc83faa3b7233313ca395205f6d"}, - {file = "websockets-13.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ede95125a30602b1691a4b1da88946bf27dae283cf30f22cd2cb8ca4b2e0d119"}, - {file = "websockets-13.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:addf0a16e4983280efed272d8cb3b2e05f0051755372461e7d966b80a6554e16"}, - {file = "websockets-13.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:06b3186e97bf9a33921fa60734d5ed90f2a9b407cce8d23c7333a0984049ef61"}, - {file = "websockets-13.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:eae368cac85adc4c7dc3b0d5f84ffcca609d658db6447387300478e44db70796"}, - {file = "websockets-13.0-cp38-cp38-win32.whl", hash = "sha256:337837ac788d955728b1ab01876d72b73da59819a3388e1c5e8e05c3999f1afa"}, - {file = "websockets-13.0-cp38-cp38-win_amd64.whl", hash = "sha256:f66e00e42f25ca7e91076366303e11c82572ca87cc5aae51e6e9c094f315ab41"}, - {file = "websockets-13.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:94c1c02721139fe9940b38d28fb15b4b782981d800d5f40f9966264fbf23dcc8"}, - {file = "websockets-13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd4ba86513430513e2aa25a441bb538f6f83734dc368a2c5d18afdd39097aa33"}, - {file = "websockets-13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a1ab8f0e0cadc5be5f3f9fa11a663957fecbf483d434762c8dfb8aa44948944a"}, - {file = "websockets-13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3670def5d3dfd5af6f6e2b3b243ea8f1f72d8da1ef927322f0703f85c90d9603"}, - {file = "websockets-13.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6058b6be92743358885ad6dcdecb378fde4a4c74d4dd16a089d07580c75a0e80"}, - {file = "websockets-13.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:516062a0a8ef5ecbfa4acbaec14b199fc070577834f9fe3d40800a99f92523ca"}, - {file = "websockets-13.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:da7e918d82e7bdfc6f66d31febe1b2e28a1ca3387315f918de26f5e367f61572"}, - {file = "websockets-13.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9cc7f35dcb49a4e32db82a849fcc0714c4d4acc9d2273aded2d61f87d7f660b7"}, - {file = "websockets-13.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f5737c53eb2c8ed8f64b50d3dafd3c1dae739f78aa495a288421ac1b3de82717"}, - {file = "websockets-13.0-cp39-cp39-win32.whl", hash = "sha256:265e1f0d3f788ce8ef99dca591a1aec5263b26083ca0934467ad9a1d1181067c"}, - {file = "websockets-13.0-cp39-cp39-win_amd64.whl", hash = "sha256:4d70c89e3d3b347a7c4d3c33f8d323f0584c9ceb69b82c2ef8a174ca84ea3d4a"}, - {file = "websockets-13.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:602cbd010d8c21c8475f1798b705bb18567eb189c533ab5ef568bc3033fdf417"}, - {file = "websockets-13.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:bf8eb5dca4f484a60f5327b044e842e0d7f7cdbf02ea6dc4a4f811259f1f1f0b"}, - {file = "websockets-13.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89d795c1802d99a643bf689b277e8604c14b5af1bc0a31dade2cd7a678087212"}, - {file = "websockets-13.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:788bc841d250beccff67a20a5a53a15657a60111ef9c0c0a97fbdd614fae0fe2"}, - {file = "websockets-13.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7334752052532c156d28b8eaf3558137e115c7871ea82adff69b6d94a7bee273"}, - {file = "websockets-13.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7a1963302947332c3039e3f66209ec73b1626f8a0191649e0713c391e9f5b0d"}, - {file = "websockets-13.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e1cf4e1eb84b4fd74a47688e8b0940c89a04ad9f6937afa43d468e71128cd68"}, - {file = "websockets-13.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:c026ee729c4ce55708a14b839ba35086dfae265fc12813b62d34ce33f4980c1c"}, - {file = "websockets-13.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5f9d23fbbf96eefde836d9692670bfc89e2d159f456d499c5efcf6a6281c1af"}, - {file = "websockets-13.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ad684cb7efce227d756bae3e8484f2e56aa128398753b54245efdfbd1108f2c"}, - {file = "websockets-13.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1e10b3fbed7be4a59831d3a939900e50fcd34d93716e433d4193a4d0d1d335d"}, - {file = "websockets-13.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d42a818e634f789350cd8fb413a3f5eec1cf0400a53d02062534c41519f5125c"}, - {file = "websockets-13.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e5ba5e9b332267d0f2c33ede390061850f1ac3ee6cd1bdcf4c5ea33ead971966"}, - {file = "websockets-13.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f9af457ed593e35f467140d8b61d425495b127744a9d65d45a366f8678449a23"}, - {file = "websockets-13.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcea3eb58c09c3a31cc83b45c06d5907f02ddaf10920aaa6443975310f699b95"}, - {file = "websockets-13.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c210d1460dc8d326ffdef9703c2f83269b7539a1690ad11ae04162bc1878d33d"}, - {file = "websockets-13.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b32f38bc81170fd56d0482d505b556e52bf9078b36819a8ba52624bd6667e39e"}, - {file = "websockets-13.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:81a11a1ddd5320429db47c04d35119c3e674d215173d87aaeb06ae80f6e9031f"}, - {file = "websockets-13.0-py3-none-any.whl", hash = "sha256:dbbac01e80aee253d44c4f098ab3cc17c822518519e869b284cfbb8cd16cc9de"}, - {file = "websockets-13.0.tar.gz", hash = "sha256:b7bf950234a482b7461afdb2ec99eee3548ec4d53f418c7990bb79c620476602"}, + {file = "websockets-13.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1841c9082a3ba4a05ea824cf6d99570a6a2d8849ef0db16e9c826acb28089e8f"}, + {file = "websockets-13.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c5870b4a11b77e4caa3937142b650fbbc0914a3e07a0cf3131f35c0587489c1c"}, + {file = "websockets-13.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f1d3d1f2eb79fe7b0fb02e599b2bf76a7619c79300fc55f0b5e2d382881d4f7f"}, + {file = "websockets-13.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15c7d62ee071fa94a2fc52c2b472fed4af258d43f9030479d9c4a2de885fd543"}, + {file = "websockets-13.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6724b554b70d6195ba19650fef5759ef11346f946c07dbbe390e039bcaa7cc3d"}, + {file = "websockets-13.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56a952fa2ae57a42ba7951e6b2605e08a24801a4931b5644dfc68939e041bc7f"}, + {file = "websockets-13.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:17118647c0ea14796364299e942c330d72acc4b248e07e639d34b75067b3cdd8"}, + {file = "websockets-13.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:64a11aae1de4c178fa653b07d90f2fb1a2ed31919a5ea2361a38760192e1858b"}, + {file = "websockets-13.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0617fd0b1d14309c7eab6ba5deae8a7179959861846cbc5cb528a7531c249448"}, + {file = "websockets-13.0.1-cp310-cp310-win32.whl", hash = "sha256:11f9976ecbc530248cf162e359a92f37b7b282de88d1d194f2167b5e7ad80ce3"}, + {file = "websockets-13.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:c3c493d0e5141ec055a7d6809a28ac2b88d5b878bb22df8c621ebe79a61123d0"}, + {file = "websockets-13.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:699ba9dd6a926f82a277063603fc8d586b89f4cb128efc353b749b641fcddda7"}, + {file = "websockets-13.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf2fae6d85e5dc384bf846f8243ddaa9197f3a1a70044f59399af001fd1f51d4"}, + {file = "websockets-13.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:52aed6ef21a0f1a2a5e310fb5c42d7555e9c5855476bbd7173c3aa3d8a0302f2"}, + {file = "websockets-13.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8eb2b9a318542153674c6e377eb8cb9ca0fc011c04475110d3477862f15d29f0"}, + {file = "websockets-13.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5df891c86fe68b2c38da55b7aea7095beca105933c697d719f3f45f4220a5e0e"}, + {file = "websockets-13.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac2d146ff30d9dd2fcf917e5d147db037a5c573f0446c564f16f1f94cf87462"}, + {file = "websockets-13.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b8ac5b46fd798bbbf2ac6620e0437c36a202b08e1f827832c4bf050da081b501"}, + {file = "websockets-13.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:46af561eba6f9b0848b2c9d2427086cabadf14e0abdd9fde9d72d447df268418"}, + {file = "websockets-13.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b5a06d7f60bc2fc378a333978470dfc4e1415ee52f5f0fce4f7853eb10c1e9df"}, + {file = "websockets-13.0.1-cp311-cp311-win32.whl", hash = "sha256:556e70e4f69be1082e6ef26dcb70efcd08d1850f5d6c5f4f2bcb4e397e68f01f"}, + {file = "websockets-13.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:67494e95d6565bf395476e9d040037ff69c8b3fa356a886b21d8422ad86ae075"}, + {file = "websockets-13.0.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f9c9e258e3d5efe199ec23903f5da0eeaad58cf6fccb3547b74fd4750e5ac47a"}, + {file = "websockets-13.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6b41a1b3b561f1cba8321fb32987552a024a8f67f0d05f06fcf29f0090a1b956"}, + {file = "websockets-13.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f73e676a46b0fe9426612ce8caeca54c9073191a77c3e9d5c94697aef99296af"}, + {file = "websockets-13.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f613289f4a94142f914aafad6c6c87903de78eae1e140fa769a7385fb232fdf"}, + {file = "websockets-13.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f52504023b1480d458adf496dc1c9e9811df4ba4752f0bc1f89ae92f4f07d0c"}, + {file = "websockets-13.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:139add0f98206cb74109faf3611b7783ceafc928529c62b389917a037d4cfdf4"}, + {file = "websockets-13.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:47236c13be337ef36546004ce8c5580f4b1150d9538b27bf8a5ad8edf23ccfab"}, + {file = "websockets-13.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c44ca9ade59b2e376612df34e837013e2b273e6c92d7ed6636d0556b6f4db93d"}, + {file = "websockets-13.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9bbc525f4be3e51b89b2a700f5746c2a6907d2e2ef4513a8daafc98198b92237"}, + {file = "websockets-13.0.1-cp312-cp312-win32.whl", hash = "sha256:3624fd8664f2577cf8de996db3250662e259bfbc870dd8ebdcf5d7c6ac0b5185"}, + {file = "websockets-13.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0513c727fb8adffa6d9bf4a4463b2bade0186cbd8c3604ae5540fae18a90cb99"}, + {file = "websockets-13.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1ee4cc030a4bdab482a37462dbf3ffb7e09334d01dd37d1063be1136a0d825fa"}, + {file = "websockets-13.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dbb0b697cc0655719522406c059eae233abaa3243821cfdfab1215d02ac10231"}, + {file = "websockets-13.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:acbebec8cb3d4df6e2488fbf34702cbc37fc39ac7abf9449392cefb3305562e9"}, + {file = "websockets-13.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63848cdb6fcc0bf09d4a155464c46c64ffdb5807ede4fb251da2c2692559ce75"}, + {file = "websockets-13.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:872afa52a9f4c414d6955c365b6588bc4401272c629ff8321a55f44e3f62b553"}, + {file = "websockets-13.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e70fec7c54aad4d71eae8e8cab50525e899791fc389ec6f77b95312e4e9920"}, + {file = "websockets-13.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e82db3756ccb66266504f5a3de05ac6b32f287faacff72462612120074103329"}, + {file = "websockets-13.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4e85f46ce287f5c52438bb3703d86162263afccf034a5ef13dbe4318e98d86e7"}, + {file = "websockets-13.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f3fea72e4e6edb983908f0db373ae0732b275628901d909c382aae3b592589f2"}, + {file = "websockets-13.0.1-cp313-cp313-win32.whl", hash = "sha256:254ecf35572fca01a9f789a1d0f543898e222f7b69ecd7d5381d8d8047627bdb"}, + {file = "websockets-13.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:ca48914cdd9f2ccd94deab5bcb5ac98025a5ddce98881e5cce762854a5de330b"}, + {file = "websockets-13.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b74593e9acf18ea5469c3edaa6b27fa7ecf97b30e9dabd5a94c4c940637ab96e"}, + {file = "websockets-13.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:132511bfd42e77d152c919147078460c88a795af16b50e42a0bd14f0ad71ddd2"}, + {file = "websockets-13.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:165bedf13556f985a2aa064309baa01462aa79bf6112fbd068ae38993a0e1f1b"}, + {file = "websockets-13.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e801ca2f448850685417d723ec70298feff3ce4ff687c6f20922c7474b4746ae"}, + {file = "websockets-13.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30d3a1f041360f029765d8704eae606781e673e8918e6b2c792e0775de51352f"}, + {file = "websockets-13.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67648f5e50231b5a7f6d83b32f9c525e319f0ddc841be0de64f24928cd75a603"}, + {file = "websockets-13.0.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4f0426d51c8f0926a4879390f53c7f5a855e42d68df95fff6032c82c888b5f36"}, + {file = "websockets-13.0.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ef48e4137e8799998a343706531e656fdec6797b80efd029117edacb74b0a10a"}, + {file = "websockets-13.0.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:249aab278810bee585cd0d4de2f08cfd67eed4fc75bde623be163798ed4db2eb"}, + {file = "websockets-13.0.1-cp38-cp38-win32.whl", hash = "sha256:06c0a667e466fcb56a0886d924b5f29a7f0886199102f0a0e1c60a02a3751cb4"}, + {file = "websockets-13.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1f3cf6d6ec1142412d4535adabc6bd72a63f5f148c43fe559f06298bc21953c9"}, + {file = "websockets-13.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1fa082ea38d5de51dd409434edc27c0dcbd5fed2b09b9be982deb6f0508d25bc"}, + {file = "websockets-13.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4a365bcb7be554e6e1f9f3ed64016e67e2fa03d7b027a33e436aecf194febb63"}, + {file = "websockets-13.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:10a0dc7242215d794fb1918f69c6bb235f1f627aaf19e77f05336d147fce7c37"}, + {file = "websockets-13.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59197afd478545b1f73367620407b0083303569c5f2d043afe5363676f2697c9"}, + {file = "websockets-13.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d20516990d8ad557b5abeb48127b8b779b0b7e6771a265fa3e91767596d7d97"}, + {file = "websockets-13.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1a2e272d067030048e1fe41aa1ec8cfbbaabce733b3d634304fa2b19e5c897f"}, + {file = "websockets-13.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ad327ac80ba7ee61da85383ca8822ff808ab5ada0e4a030d66703cc025b021c4"}, + {file = "websockets-13.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:518f90e6dd089d34eaade01101fd8a990921c3ba18ebbe9b0165b46ebff947f0"}, + {file = "websockets-13.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:68264802399aed6fe9652e89761031acc734fc4c653137a5911c2bfa995d6d6d"}, + {file = "websockets-13.0.1-cp39-cp39-win32.whl", hash = "sha256:a5dc0c42ded1557cc7c3f0240b24129aefbad88af4f09346164349391dea8e58"}, + {file = "websockets-13.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:b448a0690ef43db5ef31b3a0d9aea79043882b4632cfc3eaab20105edecf6097"}, + {file = "websockets-13.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:faef9ec6354fe4f9a2c0bbb52fb1ff852effc897e2a4501e25eb3a47cb0a4f89"}, + {file = "websockets-13.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:03d3f9ba172e0a53e37fa4e636b86cc60c3ab2cfee4935e66ed1d7acaa4625ad"}, + {file = "websockets-13.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d450f5a7a35662a9b91a64aefa852f0c0308ee256122f5218a42f1d13577d71e"}, + {file = "websockets-13.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f55b36d17ac50aa8a171b771e15fbe1561217510c8768af3d546f56c7576cdc"}, + {file = "websockets-13.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14b9c006cac63772b31abbcd3e3abb6228233eec966bf062e89e7fa7ae0b7333"}, + {file = "websockets-13.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b79915a1179a91f6c5f04ece1e592e2e8a6bd245a0e45d12fd56b2b59e559a32"}, + {file = "websockets-13.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f40de079779acbcdbb6ed4c65af9f018f8b77c5ec4e17a4b737c05c2db554491"}, + {file = "websockets-13.0.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:80e4ba642fc87fa532bac07e5ed7e19d56940b6af6a8c61d4429be48718a380f"}, + {file = "websockets-13.0.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a02b0161c43cc9e0232711eff846569fad6ec836a7acab16b3cf97b2344c060"}, + {file = "websockets-13.0.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6aa74a45d4cdc028561a7d6ab3272c8b3018e23723100b12e58be9dfa5a24491"}, + {file = "websockets-13.0.1-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00fd961943b6c10ee6f0b1130753e50ac5dcd906130dcd77b0003c3ab797d026"}, + {file = "websockets-13.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d93572720d781331fb10d3da9ca1067817d84ad1e7c31466e9f5e59965618096"}, + {file = "websockets-13.0.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:71e6e5a3a3728886caee9ab8752e8113670936a193284be9d6ad2176a137f376"}, + {file = "websockets-13.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c4a6343e3b0714e80da0b0893543bf9a5b5fa71b846ae640e56e9abc6fbc4c83"}, + {file = "websockets-13.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a678532018e435396e37422a95e3ab87f75028ac79570ad11f5bf23cd2a7d8c"}, + {file = "websockets-13.0.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6716c087e4aa0b9260c4e579bb82e068f84faddb9bfba9906cb87726fa2e870"}, + {file = "websockets-13.0.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e33505534f3f673270dd67f81e73550b11de5b538c56fe04435d63c02c3f26b5"}, + {file = "websockets-13.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:acab3539a027a85d568c2573291e864333ec9d912675107d6efceb7e2be5d980"}, + {file = "websockets-13.0.1-py3-none-any.whl", hash = "sha256:b80f0c51681c517604152eb6a572f5a9378f877763231fddb883ba2f968e8817"}, + {file = "websockets-13.0.1.tar.gz", hash = "sha256:4d6ece65099411cfd9a48d13701d7438d9c34f479046b34c50ff60bb8834e43e"}, ] [[package]] @@ -7518,101 +7603,103 @@ files = [ [[package]] name = "yarl" -version = "1.9.4" +version = "1.9.7" description = "Yet another URL library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, - {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, - {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, - {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, - {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, - {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, - {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, - {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, - {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, - {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, - {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, - {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, - {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, - {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, - {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, - {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, + {file = "yarl-1.9.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:60c04415b31a1611ef5989a6084dd6f6b95652c6a18378b58985667b65b2ecb6"}, + {file = "yarl-1.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1787dcfdbe730207acb454548a6e19f80ae75e6d2d1f531c5a777bc1ab6f7952"}, + {file = "yarl-1.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5ddad20363f9f1bbedc95789c897da62f939e6bc855793c3060ef8b9f9407bf"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdb156a06208fc9645ae7cc0fca45c40dd40d7a8c4db626e542525489ca81a9"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:522fa3d300d898402ae4e0fa7c2c21311248ca43827dc362a667de87fdb4f1be"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7f9cabfb8b980791b97a3ae3eab2e38b2ba5eab1af9b7495bdc44e1ce7c89e3"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fc728857df4087da6544fc68f62d7017fa68d74201d5b878e18ed4822c31fb3"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dba2ebac677184d56374fa3e452b461f5d6a03aa132745e648ae8859361eb6b"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a95167ae34667c5cc7d9206c024f793e8ffbadfb307d5c059de470345de58a21"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9d319ac113ca47352319cbea92d1925a37cb7bd61a8c2f3e3cd2e96eb33cccae"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:2d71a5d818d82586ac46265ae01466e0bda0638760f18b21f1174e0dd58a9d2f"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ff03f1c1ac474c66d474929ae7e4dd195592c1c7cc8c36418528ed81b1ca0a79"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78250f635f221dde97d02c57aade3313310469bc291888dfe32acd1012594441"}, + {file = "yarl-1.9.7-cp310-cp310-win32.whl", hash = "sha256:f3aaf9fa960d55bd7876d55d7ea3cc046f3660df1ff73fc1b8c520a741ed1f21"}, + {file = "yarl-1.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:e8362c941e07fbcde851597672a5e41b21dc292b7d5a1dc439b7a93c9a1af5d9"}, + {file = "yarl-1.9.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:596069ddeaf72b5eb36cd714dcd2b5751d0090d05a8d65113b582ed9e1c801fb"}, + {file = "yarl-1.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cb870907e8b86b2f32541403da9455afc1e535ce483e579bea0e6e79a0cc751c"}, + {file = "yarl-1.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ca5e86be84492fa403c4dcd4dcaf8e1b1c4ffc747b5176f7c3d09878c45719b0"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99cecfb51c84d00132db909e83ae388793ca86e48df7ae57f1be0beab0dcce5"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25508739e9b44d251172145f54c084b71747b09e4d237dc2abb045f46c36a66e"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:60f3b5aec3146b6992640592856414870f5b20eb688c1f1d5f7ac010a7f86561"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1557456afce5db3d655b5f8a31cdcaae1f47e57958760525c44b76e812b4987"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71bb1435a84688ed831220c5305d96161beb65cac4a966374475348aa3de4575"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f87d8645a7a806ec8f66aac5e3b1dcb5014849ff53ffe2a1f0b86ca813f534c7"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:58e3f01673873b8573da3abe138debc63e4e68541b2104a55df4c10c129513a4"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8af0bbd4d84f8abdd9b11be9488e32c76b1501889b73c9e2292a15fb925b378b"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7fc441408ed0d9c6d2d627a02e281c21f5de43eb5209c16636a17fc704f7d0f8"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a9552367dc440870556da47bb289a806f08ad06fbc4054072d193d9e5dd619ba"}, + {file = "yarl-1.9.7-cp311-cp311-win32.whl", hash = "sha256:628619008680a11d07243391271b46f07f13b75deb9fe92ef342305058c70722"}, + {file = "yarl-1.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:bc23d870864971c8455cfba17498ccefa53a5719ea9f5fce5e7e9c1606b5755f"}, + {file = "yarl-1.9.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d8cf3d0b67996edc11957aece3fbce4c224d0451c7c3d6154ec3a35d0e55f6b"}, + {file = "yarl-1.9.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3a7748cd66fef49c877e59503e0cc76179caf1158d1080228e67e1db14554f08"}, + {file = "yarl-1.9.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a6fa3aeca8efabb0fbbb3b15e0956b0cb77f7d9db67c107503c30af07cd9e00"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf37dd0008e5ac5c3880198976063c491b6a15b288d150d12833248cf2003acb"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87aa5308482f248f8c3bd9311cd6c7dfd98ea1a8e57e35fb11e4adcac3066003"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:867b13c1b361f9ba5d2f84dc5408082f5d744c83f66de45edc2b96793a9c5e48"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48ce93947554c2c85fe97fc4866646ec90840bc1162e4db349b37d692a811755"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcd3d94b848cba132f39a5b40d80b0847d001a91a6f35a2204505cdd46afe1b2"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d06d6a8f98dd87646d98f0c468be14b201e47ec6092ad569adf835810ad0dffb"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:91567ff4fce73d2e7ac67ed5983ad26ba2343bc28cb22e1e1184a9677df98d7c"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1d5594512541e63188fea640b7f066c218d2176203d6e6f82abf702ae3dca3b2"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9c2743e43183e4afbb07d5605693299b8756baff0b086c25236c761feb0e3c56"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:daa69a3a2204355af39f4cfe7f3870d87c53d77a597b5100b97e3faa9460428b"}, + {file = "yarl-1.9.7-cp312-cp312-win32.whl", hash = "sha256:36b16884336c15adf79a4bf1d592e0c1ffdb036a760e36a1361565b66785ec6c"}, + {file = "yarl-1.9.7-cp312-cp312-win_amd64.whl", hash = "sha256:2ead2f87a1174963cc406d18ac93d731fbb190633d3995fa052d10cefae69ed8"}, + {file = "yarl-1.9.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:808eddabcb6f7b2cdb6929b3e021ac824a2c07dc7bc83f7618e18438b1b65781"}, + {file = "yarl-1.9.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:395ab0d8ce6d104a988da429bcbfd445e03fb4c911148dfd523f69d13f772e47"}, + {file = "yarl-1.9.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:49827dfccbd59c4499605c13805e947349295466e490860a855b7c7e82ec9c75"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6b8bbdd425d0978311520ea99fb6c0e9e04e64aee84fac05f3157ace9f81b05"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71d33fd1c219b5b28ee98cd76da0c9398a4ed4792fd75c94135237db05ba5ca8"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:62440431741d0b7d410e5cbad800885e3289048140a43390ecab4f0b96dde3bb"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db97210433366dfba55590e48285b89ad0146c52bf248dd0da492dd9f0f72cf"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:653597b615809f2e5f4dba6cd805608b6fd3597128361a22cc612cf7c7a4d1bf"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:df47612129e66f7ce7c9994d4cd4e6852f6e3bf97699375d86991481796eeec8"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5e338b6febbae6c9fe86924bac3ea9c1944e33255c249543cd82a4af6df6047b"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e649d37d04665dddb90994bbf0034331b6c14144cc6f3fbce400dc5f28dc05b7"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0a1b8fd849567be56342e988e72c9d28bd3c77b9296c38b9b42d2fe4813c9d3f"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f9d715b2175dff9a49c6dafdc2ab3f04850ba2f3d4a77f69a5a1786b057a9d45"}, + {file = "yarl-1.9.7-cp313-cp313-win32.whl", hash = "sha256:bc9233638b07c2e4a3a14bef70f53983389bffa9e8cb90a2da3f67ac9c5e1842"}, + {file = "yarl-1.9.7-cp313-cp313-win_amd64.whl", hash = "sha256:62e110772330d7116f91e79cd83fef92545cb2f36414c95881477aa01971f75f"}, + {file = "yarl-1.9.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a564155cc2194ecd9c0d8f8dc57059b822a507de5f08120063675eb9540576aa"}, + {file = "yarl-1.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03e917cc44a01e1be60a83ee1a17550b929490aaa5df2a109adc02137bddf06b"}, + {file = "yarl-1.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:eefda67ba0ba44ab781e34843c266a76f718772b348f7c5d798d8ea55b95517f"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:316c82b499b6df41444db5dea26ee23ece9356e38cea43a8b2af9e6d8a3558e4"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10452727843bc847596b75e30a7fe92d91829f60747301d1bd60363366776b0b"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:050f3e4d886be55728fef268587d061c5ce6f79a82baba71840801b63441c301"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0aabe557446aa615693a82b4d3803c102fd0e7a6a503bf93d744d182a510184"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23404842228e6fa8ace235024519df37f3f8e173620407644d40ddca571ff0f4"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:34736fcc9d6d7080ebbeb0998ecb91e4f14ad8f18648cf0b3099e2420a225d86"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:48f7a158f3ca67509d21cb02a96964e4798b6f133691cc0c86cf36e26e26ec8f"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:6639444d161c693cdabb073baaed1945c717d3982ecedf23a219bc55a242e728"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:1cd450e10cb53d63962757c3f6f7870be49a3e448c46621d6bd46f8088d532de"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:74d3ef5e81f81507cea04bf5ae22f18ef538607a7c754aac2b6e3029956a2842"}, + {file = "yarl-1.9.7-cp38-cp38-win32.whl", hash = "sha256:4052dbd0c900bece330e3071c636f99dff06e4628461a29b38c6e222a427cf98"}, + {file = "yarl-1.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:dd08da4f2d171e19bd02083c921f1bef89f8f5f87000d0ffc49aa257bc5a9802"}, + {file = "yarl-1.9.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ab906a956d2109c6ea11e24c66592b06336e2743509290117f0f7f47d2c1dd3"}, + {file = "yarl-1.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d8ad761493d5aaa7ab2a09736e62b8a220cb0b10ff8ccf6968c861cd8718b915"}, + {file = "yarl-1.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d35f9cdab0ec5e20cf6d2bd46456cf599052cf49a1698ef06b9592238d1cf1b1"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a48d2b9f0ae29a456fb766ae461691378ecc6cf159dd9f938507d925607591c3"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cf85599c9336b89b92c313519bcaa223d92fa5d98feb4935a47cce2e8722b4b8"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e8916b1ff7680b1f2b1608c82dc15c569b9f2cb2da100c747c291f1acf18a14"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29c80890e0a64fb0e5f71350d48da330995073881f8b8e623154aef631febfb0"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9163d21aa40ff8528db2aee2b0b6752efe098055b41ab8e5422b2098457199fe"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:65e3098969baf221bb45e3b2f60735fc2b154fc95902131ebc604bae4c629ea6"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cddebd096effe4be90fd378e4224cd575ac99e1c521598a6900e94959006e02e"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:8525f955a2dcc281573b6aadeb8ab9c37e2d3428b64ca6a2feec2a794a69c1da"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:5d585c7d834c13f24c7e3e0efaf1a4b7678866940802e11bd6c4d1f99c935e6b"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:78805148e780a9ca66f3123e04741e344b66cf06b4fb13223e3a209f39a6da55"}, + {file = "yarl-1.9.7-cp39-cp39-win32.whl", hash = "sha256:3f53df493ec80b76969d6e1ae6e4411a55ab1360e02b80c84bd4b33d61a567ba"}, + {file = "yarl-1.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:c81c28221a85add23a0922a6aeb2cdda7f9723e03e2dfae06fee5c57fe684262"}, + {file = "yarl-1.9.7-py3-none-any.whl", hash = "sha256:49935cc51d272264358962d050d726c3e5603a616f53e52ea88e9df1728aa2ee"}, + {file = "yarl-1.9.7.tar.gz", hash = "sha256:f28e602edeeec01fc96daf7728e8052bc2e12a672e2a138561a1ebaf30fd9df7"}, ] [package.dependencies] @@ -7621,20 +7708,24 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.20.0" +version = "3.20.1" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.20.0-py3-none-any.whl", hash = "sha256:58da6168be89f0be59beb194da1250516fdaa062ccebd30127ac65d30045e10d"}, - {file = "zipp-3.20.0.tar.gz", hash = "sha256:0145e43d89664cfe1a2e533adc75adafed82fe2da404b4bbb6b026c0157bdb31"}, + {file = "zipp-3.20.1-py3-none-any.whl", hash = "sha256:9960cd8967c8f85a56f920d5d507274e74f9ff813a0ab8889a5b5be2daf44064"}, + {file = "zipp-3.20.1.tar.gz", hash = "sha256:c22b14cc4763c5a5b04134207736c107db42e9d3ef2d9779d465f5f1bcba572b"}, ] [package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "8213f1629c59946d03a152fd23da2f132f544de32336be319a856000b3496a8e" +content-hash = "7811c39d2e7669cfccdf9e4416d9fa8bbe1a44c2bbe76fbc834b40d17cd83f99" diff --git a/packages/sample-app/pyproject.toml b/packages/sample-app/pyproject.toml index 3b6b21306..04ae15aab 100644 --- a/packages/sample-app/pyproject.toml +++ b/packages/sample-app/pyproject.toml @@ -53,6 +53,7 @@ langchain-openai ="^0.1.8" google-generativeai = "^0.6.0" langchain-ibm = "^0.1.11" langgraph = "^0.2.14" +groq = "^0.10.0" [tool.poetry.dependencies.opentelemetry-instrumentation-openai] path = "../opentelemetry-instrumentation-openai" From 3f155e14c68a46ff82067318f3867e3fa7f5bd96 Mon Sep 17 00:00:00 2001 From: Gal Kleinman Date: Tue, 3 Sep 2024 10:12:47 +0300 Subject: [PATCH 3/8] missing file --- .../sample-app/sample_app/groq_example.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 packages/sample-app/sample_app/groq_example.py diff --git a/packages/sample-app/sample_app/groq_example.py b/packages/sample-app/sample_app/groq_example.py new file mode 100644 index 000000000..b696948c1 --- /dev/null +++ b/packages/sample-app/sample_app/groq_example.py @@ -0,0 +1,35 @@ +import os + +from traceloop.sdk.decorators import task, workflow + +from groq import Groq +from traceloop.sdk import Traceloop + +Traceloop.init(app_name="langchain_example") + +client = Groq( + api_key=os.environ.get("GROQ_API_KEY"), +) + +@task(name="generate_joke") +def generate_joke(): + completion = client.chat.completions.create( + messages=[ + { + "role": "user", + "content": "Tell me a joke about OpenTelemetry", + } + ], + model="llama3-8b-8192", + ) + + return completion.choices[0].message.content + + +@workflow(name="joke_generator") +def joke_generator(): + joke = generate_joke() + print(joke) + + +joke_generator() From 3475403e45dbc8d8aa0de4122c8c7643db12f13c Mon Sep 17 00:00:00 2001 From: Gal Kleinman Date: Tue, 3 Sep 2024 14:16:48 +0300 Subject: [PATCH 4/8] wip --- .cz.toml | 2 + .../instrumentation/groq/__init__.py | 111 +- .../instrumentation/groq/utils.py | 6 +- .../tests/conftest.py | 6 +- .../tests/test_completion.py | 140 +- packages/sample-app/poetry.lock | 43 +- packages/traceloop-sdk/poetry.lock | 1481 +++++++++-------- packages/traceloop-sdk/pyproject.toml | 1 + .../traceloop/sdk/tracing/tracing.py | 20 + 9 files changed, 998 insertions(+), 812 deletions(-) diff --git a/.cz.toml b/.cz.toml index 3f9003637..03633381c 100644 --- a/.cz.toml +++ b/.cz.toml @@ -6,6 +6,8 @@ major_version_zero = true update_changelog_on_bump = true version = "0.29.2" version_files = [ + "packages/opentelemetry-instrumentation-groq/pyproject.toml:^version", + "packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/version.py", "packages/opentelemetry-instrumentation-alephalpha/pyproject.toml:^version", "packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/version.py", "packages/opentelemetry-instrumentation-anthropic/pyproject.toml:^version", diff --git a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py index d22802138..4730e2b14 100644 --- a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py +++ b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py @@ -1,4 +1,4 @@ -"""OpenTelemetry Anthropic instrumentation""" +"""OpenTelemetry Groq instrumentation""" import json import logging @@ -6,7 +6,6 @@ import time from typing import Callable, Collection -from anthropic._streaming import AsyncStream, Stream from opentelemetry import context as context_api from opentelemetry.instrumentation.groq.config import Config from opentelemetry.instrumentation.groq.streaming import ( @@ -40,43 +39,43 @@ WRAPPED_METHODS = [ { - "package": "anthropic.resources.completions", + "package": "groq.resources.chat.completions", "object": "Completions", "method": "create", - "span_name": "anthropic.completion", - }, - { - "package": "anthropic.resources.messages", - "object": "Messages", - "method": "create", - "span_name": "anthropic.chat", - }, - { - "package": "anthropic.resources.messages", - "object": "Messages", - "method": "stream", - "span_name": "anthropic.chat", + "span_name": "groq.chat", }, + # { + # "package": "groq.resources.messages", + # "object": "Messages", + # "method": "create", + # "span_name": "groq.chat", + # }, + # { + # "package": "groq.resources.messages", + # "object": "Messages", + # "method": "stream", + # "span_name": "groq.chat", + # }, ] WRAPPED_AMETHODS = [ - { - "package": "anthropic.resources.completions", - "object": "AsyncCompletions", - "method": "create", - "span_name": "anthropic.completion", - }, - { - "package": "anthropic.resources.messages", - "object": "AsyncMessages", - "method": "create", - "span_name": "anthropic.chat", - }, - { - "package": "anthropic.resources.messages", - "object": "AsyncMessages", - "method": "stream", - "span_name": "anthropic.chat", - }, + # { + # "package": "groq.resources.completions", + # "object": "AsyncCompletions", + # "method": "create", + # "span_name": "groq.completion", + # }, + # { + # "package": "groq.resources.messages", + # "object": "AsyncMessages", + # "method": "create", + # "span_name": "groq.chat", + # }, + # { + # "package": "groq.resources.messages", + # "object": "AsyncMessages", + # "method": "stream", + # "span_name": "groq.chat", + # }, ] @@ -159,7 +158,7 @@ def _set_span_completions(span, response): @dont_throw async def _aset_token_usage( span, - anthropic, + groq, request, response, metric_attributes: dict = {}, @@ -170,13 +169,13 @@ async def _aset_token_usage( response = response.__dict__ prompt_tokens = 0 - if hasattr(anthropic, "count_tokens"): + if hasattr(groq, "count_tokens"): if request.get("prompt"): - prompt_tokens = await anthropic.count_tokens(request.get("prompt")) + prompt_tokens = await groq.count_tokens(request.get("prompt")) elif request.get("messages"): prompt_tokens = sum( [ - await anthropic.count_tokens(m.get("content")) + await groq.count_tokens(m.get("content")) for m in request.get("messages") ] ) @@ -191,11 +190,11 @@ async def _aset_token_usage( ) completion_tokens = 0 - if hasattr(anthropic, "count_tokens"): + if hasattr(groq, "count_tokens"): if response.get("completion"): - completion_tokens = await anthropic.count_tokens(response.get("completion")) + completion_tokens = await groq.count_tokens(response.get("completion")) elif response.get("content"): - completion_tokens = await anthropic.count_tokens( + completion_tokens = await groq.count_tokens( response.get("content")[0].text ) @@ -235,7 +234,7 @@ async def _aset_token_usage( @dont_throw def _set_token_usage( span, - anthropic, + groq, request, response, metric_attributes: dict = {}, @@ -246,13 +245,13 @@ def _set_token_usage( response = response.__dict__ prompt_tokens = 0 - if hasattr(anthropic, "count_tokens"): + if hasattr(groq, "count_tokens"): if request.get("prompt"): - prompt_tokens = anthropic.count_tokens(request.get("prompt")) + prompt_tokens = groq.count_tokens(request.get("prompt")) elif request.get("messages"): prompt_tokens = sum( [ - anthropic.count_tokens(m.get("content")) + groq.count_tokens(m.get("content")) for m in request.get("messages") ] ) @@ -267,11 +266,11 @@ def _set_token_usage( ) completion_tokens = 0 - if hasattr(anthropic, "count_tokens"): + if hasattr(groq, "count_tokens"): if response.get("completion"): - completion_tokens = anthropic.count_tokens(response.get("completion")) + completion_tokens = groq.count_tokens(response.get("completion")) elif response.get("content"): - completion_tokens = anthropic.count_tokens(response.get("content")[0].text) + completion_tokens = groq.count_tokens(response.get("content")[0].text) if token_histogram and type(completion_tokens) is int and completion_tokens >= 0: token_histogram.record( @@ -391,7 +390,7 @@ def _create_metrics(meter: Meter): ) exception_counter = meter.create_counter( - name=Meters.LLM_ANTHROPIC_COMPLETION_EXCEPTIONS, + name=Meters.LLM_GROQ_COMPLETION_EXCEPTIONS, unit="time", description="Number of exceptions occurred during chat completions", ) @@ -423,7 +422,7 @@ def _wrap( name, kind=SpanKind.CLIENT, attributes={ - SpanAttributes.LLM_SYSTEM: "Anthropic", + SpanAttributes.LLM_SYSTEM: "Groq", SpanAttributes.LLM_REQUEST_TYPE: LLMRequestTypeValues.COMPLETION.value, }, ) @@ -486,7 +485,7 @@ def _wrap( except Exception as ex: # pylint: disable=broad-except logger.warning( - "Failed to set response attributes for anthropic span, error: %s", + "Failed to set response attributes for groq span, error: %s", str(ex), ) if span.is_recording(): @@ -519,7 +518,7 @@ async def _awrap( name, kind=SpanKind.CLIENT, attributes={ - SpanAttributes.LLM_SYSTEM: "Anthropic", + SpanAttributes.LLM_SYSTEM: "Groq", SpanAttributes.LLM_REQUEST_TYPE: LLMRequestTypeValues.COMPLETION.value, }, ) @@ -529,7 +528,7 @@ async def _awrap( except Exception as ex: # pylint: disable=broad-except logger.warning( - "Failed to set input attributes for anthropic span, error: %s", str(ex) + "Failed to set input attributes for groq span, error: %s", str(ex) ) start_time = time.time() @@ -592,8 +591,8 @@ def is_metrics_enabled() -> bool: return (os.getenv("TRACELOOP_METRICS_ENABLED") or "true").lower() == "true" -class AnthropicInstrumentor(BaseInstrumentor): - """An instrumentor for Anthropic's client library.""" +class GroqInstrumentor(BaseInstrumentor): + """An instrumentor for Groq's client library.""" def __init__( self, @@ -684,6 +683,6 @@ def _uninstrument(self, **kwargs): for wrapped_method in WRAPPED_AMETHODS: wrap_object = wrapped_method.get("object") unwrap( - f"anthropic.resources.completions.{wrap_object}", + f"groq.resources.completions.{wrap_object}", wrapped_method.get("method"), ) diff --git a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/utils.py b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/utils.py index af8390a6f..01e8886f7 100644 --- a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/utils.py +++ b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/utils.py @@ -6,7 +6,7 @@ from opentelemetry.semconv_ai import SpanAttributes GEN_AI_SYSTEM = "gen_ai.system" -GEN_AI_SYSTEM_ANTHROPIC = "anthropic" +GEN_AI_SYSTEM_GROQ = "groq" def set_span_attribute(span, name, value): @@ -56,7 +56,7 @@ def shared_metrics_attributes(response): return { **common_attributes, - GEN_AI_SYSTEM: GEN_AI_SYSTEM_ANTHROPIC, + GEN_AI_SYSTEM: GEN_AI_SYSTEM_GROQ, SpanAttributes.LLM_RESPONSE_MODEL: response.get("model"), } @@ -64,6 +64,6 @@ def shared_metrics_attributes(response): @dont_throw def error_metrics_attributes(exception): return { - GEN_AI_SYSTEM: GEN_AI_SYSTEM_ANTHROPIC, + GEN_AI_SYSTEM: GEN_AI_SYSTEM_GROQ, "error.type": exception.__class__.__name__, } diff --git a/packages/opentelemetry-instrumentation-groq/tests/conftest.py b/packages/opentelemetry-instrumentation-groq/tests/conftest.py index 324ed33c0..61a716fc2 100644 --- a/packages/opentelemetry-instrumentation-groq/tests/conftest.py +++ b/packages/opentelemetry-instrumentation-groq/tests/conftest.py @@ -4,7 +4,7 @@ import pytest from opentelemetry import metrics, trace -from opentelemetry.instrumentation.groq import AnthropicInstrumentor +from opentelemetry.instrumentation.groq import GroqInstrumentor from opentelemetry.sdk.metrics import Counter, Histogram, MeterProvider from opentelemetry.sdk.metrics.export import ( AggregationTemporality, @@ -49,7 +49,7 @@ def meter_provider(reader): @pytest.fixture(scope="session", autouse=True) def instrument(exporter, reader, meter_provider): - AnthropicInstrumentor(enrich_token_usage=True).instrument() + GroqInstrumentor(enrich_token_usage=True).instrument() yield @@ -66,7 +66,7 @@ def clear_exporter_reader(exporter, reader): @pytest.fixture(autouse=True) def environment(): - os.environ["ANTHROPIC_API_KEY"] = "test_api_key" + os.environ["GROQ_API_KEY"] = "test_api_key" @pytest.fixture(scope="module") diff --git a/packages/opentelemetry-instrumentation-groq/tests/test_completion.py b/packages/opentelemetry-instrumentation-groq/tests/test_completion.py index 6a945e61e..7ff80eae9 100644 --- a/packages/opentelemetry-instrumentation-groq/tests/test_completion.py +++ b/packages/opentelemetry-instrumentation-groq/tests/test_completion.py @@ -2,13 +2,13 @@ from pathlib import Path import pytest -from anthropic import AI_PROMPT, HUMAN_PROMPT, Anthropic, AsyncAnthropic +from groq import Groq, AsyncGroq from opentelemetry.semconv_ai import SpanAttributes, Meters @pytest.mark.vcr -def test_anthropic_completion(exporter, reader): - client = Anthropic() +def test_groq_completion(exporter, reader): + client = Groq() client.completions.create( prompt=f"{HUMAN_PROMPT}\nHello world\n{AI_PROMPT}", model="claude-instant-1.2", @@ -23,14 +23,14 @@ def test_anthropic_completion(exporter, reader): pass spans = exporter.get_finished_spans() - assert all(span.name == "anthropic.completion" for span in spans) + assert all(span.name == "groq.completion" for span in spans) - anthropic_span = spans[0] + groq_span = spans[0] assert ( - anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.user"] + groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.user"] == f"{HUMAN_PROMPT}\nHello world\n{AI_PROMPT}" ) - assert anthropic_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") + assert groq_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") metrics_data = reader.get_metrics_data() resource_metrics = metrics_data.resource_metrics @@ -81,14 +81,14 @@ def test_anthropic_completion(exporter, reader): for data_point in metric.data.data_points ) - if metric.name == Meters.LLM_ANTHROPIC_COMPLETION_EXCEPTIONS: + if metric.name == Meters.LLM_GROQ_COMPLETION_EXCEPTIONS: found_exception_metric = True for data_point in metric.data.data_points: assert data_point.value == 1 assert data_point.attributes["error.type"] == "TypeError" assert all( - data_point.attributes.get("gen_ai.system") == "anthropic" + data_point.attributes.get("gen_ai.system") == "groq" for data_point in metric.data.data_points ) @@ -99,8 +99,8 @@ def test_anthropic_completion(exporter, reader): @pytest.mark.vcr -def test_anthropic_message_create(exporter, reader): - client = Anthropic() +def test_groq_message_create(exporter, reader): + client = Groq() response = client.messages.create( max_tokens=1024, messages=[ @@ -119,23 +119,23 @@ def test_anthropic_message_create(exporter, reader): pass spans = exporter.get_finished_spans() - assert all(span.name == "anthropic.chat" for span in spans) + assert all(span.name == "groq.chat" for span in spans) - anthropic_span = spans[0] + groq_span = spans[0] assert ( - anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] + groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] == "Tell me a joke about OpenTelemetry" ) - assert (anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" + assert (groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" assert ( - anthropic_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") + groq_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") == response.content[0].text ) - assert anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 + assert groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 assert ( - anthropic_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] - + anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] - == anthropic_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] + groq_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] + + groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] + == groq_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] ) metrics_data = reader.get_metrics_data() @@ -187,14 +187,14 @@ def test_anthropic_message_create(exporter, reader): for data_point in metric.data.data_points ) - if metric.name == Meters.LLM_ANTHROPIC_COMPLETION_EXCEPTIONS: + if metric.name == Meters.LLM_GROQ_COMPLETION_EXCEPTIONS: found_exception_metric = True for data_point in metric.data.data_points: assert data_point.value == 1 assert data_point.attributes["error.type"] == "TypeError" assert all( - data_point.attributes.get("gen_ai.system") == "anthropic" + data_point.attributes.get("gen_ai.system") == "groq" for data_point in metric.data.data_points ) @@ -205,8 +205,8 @@ def test_anthropic_message_create(exporter, reader): @pytest.mark.vcr -def test_anthropic_multi_modal(exporter): - client = Anthropic() +def test_groq_multi_modal(exporter): + client = Groq() response = client.messages.create( max_tokens=1024, messages=[ @@ -233,10 +233,10 @@ def test_anthropic_multi_modal(exporter): spans = exporter.get_finished_spans() assert [span.name for span in spans] == [ - "anthropic.chat", + "groq.chat", ] - anthropic_span = spans[0] - assert anthropic_span.attributes[ + groq_span = spans[0] + assert groq_span.attributes[ f"{SpanAttributes.LLM_PROMPTS}.0.content" ] == json.dumps( [ @@ -251,22 +251,22 @@ def test_anthropic_multi_modal(exporter): }, ] ) - assert (anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" + assert (groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" assert ( - anthropic_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") + groq_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") == response.content[0].text ) - assert anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 1381 + assert groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 1381 assert ( - anthropic_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] - + anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] - == anthropic_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] + groq_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] + + groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] + == groq_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] ) @pytest.mark.vcr -def test_anthropic_message_streaming(exporter, reader): - client = Anthropic() +def test_groq_message_streaming(exporter, reader): + client = Groq() response = client.messages.create( max_tokens=1024, messages=[ @@ -286,23 +286,23 @@ def test_anthropic_message_streaming(exporter, reader): spans = exporter.get_finished_spans() assert [span.name for span in spans] == [ - "anthropic.chat", + "groq.chat", ] - anthropic_span = spans[0] + groq_span = spans[0] assert ( - anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] + groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] == "Tell me a joke about OpenTelemetry" ) - assert (anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" + assert (groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" assert ( - anthropic_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") + groq_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") == response_content ) - assert anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 + assert groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 assert ( - anthropic_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] - + anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] - == anthropic_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] + groq_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] + + groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] + == groq_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] ) metrics_data = reader.get_metrics_data() @@ -355,7 +355,7 @@ def test_anthropic_message_streaming(exporter, reader): ) assert all( - data_point.attributes.get("gen_ai.system") == "anthropic" + data_point.attributes.get("gen_ai.system") == "groq" for data_point in metric.data.data_points ) @@ -366,8 +366,8 @@ def test_anthropic_message_streaming(exporter, reader): @pytest.mark.vcr @pytest.mark.asyncio -async def test_async_anthropic_message_create(exporter, reader): - client = AsyncAnthropic() +async def test_async_groq_message_create(exporter, reader): + client = AsyncGroq() response = await client.messages.create( max_tokens=1024, messages=[ @@ -387,23 +387,23 @@ async def test_async_anthropic_message_create(exporter, reader): spans = exporter.get_finished_spans() assert [span.name for span in spans] == [ - "anthropic.chat", + "groq.chat", ] - anthropic_span = spans[0] + groq_span = spans[0] assert ( - anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] + groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] == "Tell me a joke about OpenTelemetry" ) - assert (anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" + assert (groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" assert ( - anthropic_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") + groq_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") == response.content[0].text ) - assert anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 + assert groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 assert ( - anthropic_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] - + anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] - == anthropic_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] + groq_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] + + groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] + == groq_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] ) metrics_data = reader.get_metrics_data() @@ -455,14 +455,14 @@ async def test_async_anthropic_message_create(exporter, reader): for data_point in metric.data.data_points ) - if metric.name == Meters.LLM_ANTHROPIC_COMPLETION_EXCEPTIONS: + if metric.name == Meters.LLM_GROQ_COMPLETION_EXCEPTIONS: found_exception_metric = True for data_point in metric.data.data_points: assert data_point.value == 1 assert data_point.attributes["error.type"] == "TypeError" assert all( - data_point.attributes.get("gen_ai.system") == "anthropic" + data_point.attributes.get("gen_ai.system") == "groq" for data_point in metric.data.data_points ) @@ -474,8 +474,8 @@ async def test_async_anthropic_message_create(exporter, reader): @pytest.mark.vcr @pytest.mark.asyncio -async def test_async_anthropic_message_streaming(exporter, reader): - client = AsyncAnthropic() +async def test_async_groq_message_streaming(exporter, reader): + client = AsyncGroq() response = await client.messages.create( max_tokens=1024, messages=[ @@ -494,23 +494,23 @@ async def test_async_anthropic_message_streaming(exporter, reader): spans = exporter.get_finished_spans() assert [span.name for span in spans] == [ - "anthropic.chat", + "groq.chat", ] - anthropic_span = spans[0] + groq_span = spans[0] assert ( - anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] + groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] == "Tell me a joke about OpenTelemetry" ) - assert (anthropic_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" + assert (groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" assert ( - anthropic_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") + groq_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") == response_content ) - assert anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 + assert groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 assert ( - anthropic_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] - + anthropic_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] - == anthropic_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] + groq_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] + + groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] + == groq_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] ) metrics_data = reader.get_metrics_data() @@ -563,7 +563,7 @@ async def test_async_anthropic_message_streaming(exporter, reader): ) assert all( - data_point.attributes.get("gen_ai.system") == "anthropic" + data_point.attributes.get("gen_ai.system") == "groq" for data_point in metric.data.data_points ) diff --git a/packages/sample-app/poetry.lock b/packages/sample-app/poetry.lock index 10533bc1f..fd5b8439f 100644 --- a/packages/sample-app/poetry.lock +++ b/packages/sample-app/poetry.lock @@ -2284,13 +2284,13 @@ ibm-cos-sdk-core = "2.13.6" [[package]] name = "ibm-watsonx-ai" -version = "1.1.7" +version = "1.1.8" description = "IBM watsonx.ai API Client" optional = false python-versions = ">=3.10" files = [ - {file = "ibm_watsonx_ai-1.1.7-py3-none-any.whl", hash = "sha256:b1174d4304912e2aa1c9c95baaa6862495052c976df6bc8520ba5b66d83f9210"}, - {file = "ibm_watsonx_ai-1.1.7.tar.gz", hash = "sha256:77206f1654e9fdacfd29232d39d97f9436415cfaf0bba5e29e91f373ed5b3e8f"}, + {file = "ibm_watsonx_ai-1.1.8-py3-none-any.whl", hash = "sha256:f3583ec887537e792871d0d2f47556125928c888af149cbd8f69b4e541dcad33"}, + {file = "ibm_watsonx_ai-1.1.8.tar.gz", hash = "sha256:e50a5ecd652fc927fa54d5433e44e0320c5b3faf22699e5b9e013aa19745a5e7"}, ] [package.dependencies] @@ -4275,6 +4275,28 @@ instruments = [] type = "directory" url = "../opentelemetry-instrumentation-google-generativeai" +[[package]] +name = "opentelemetry-instrumentation-groq" +version = "0.29.2" +description = "OpenTelemetry Groq instrumentation" +optional = false +python-versions = ">=3.9,<4" +files = [] +develop = true + +[package.dependencies] +opentelemetry-api = "^1.27.0" +opentelemetry-instrumentation = "^0.48b0" +opentelemetry-semantic-conventions = "^0.48b0" +opentelemetry-semantic-conventions-ai = "0.4.1" + +[package.extras] +instruments = [] + +[package.source] +type = "directory" +url = "../opentelemetry-instrumentation-groq" + [[package]] name = "opentelemetry-instrumentation-haystack" version = "0.29.2" @@ -5100,13 +5122,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "posthog" -version = "3.6.0" +version = "3.6.3" description = "Integrate PostHog into any python application." optional = false python-versions = "*" files = [ - {file = "posthog-3.6.0-py2.py3-none-any.whl", hash = "sha256:6f8dacc6d14d80734b1d15bd4ab08b049629c5f0fc420cafcf1ce0667c76c83c"}, - {file = "posthog-3.6.0.tar.gz", hash = "sha256:27dbf537241a69fb5f6a3e9561caa2d555d5891d95fa65c27ffa6b52d1fb63b6"}, + {file = "posthog-3.6.3-py2.py3-none-any.whl", hash = "sha256:cdd6c5d8919fd6158bbc4103bccc7129c712d8104dc33828be02bada7b6320a4"}, + {file = "posthog-3.6.3.tar.gz", hash = "sha256:6e1104a20638eab2b5d9cde6b6202a2900d67436237b3ac3521614ec17686701"}, ] [package.dependencies] @@ -5119,7 +5141,7 @@ six = ">=1.5" [package.extras] dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] sentry = ["django", "sentry-sdk"] -test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest", "pytest-timeout"] +test = ["coverage", "django", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest", "pytest-timeout"] [[package]] name = "proto-plus" @@ -6274,13 +6296,13 @@ train = ["accelerate (>=0.20.3)", "datasets"] [[package]] name = "setuptools" -version = "74.0.0" +version = "74.1.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-74.0.0-py3-none-any.whl", hash = "sha256:0274581a0037b638b9fc1c6883cc71c0210865aaa76073f7882376b641b84e8f"}, - {file = "setuptools-74.0.0.tar.gz", hash = "sha256:a85e96b8be2b906f3e3e789adec6a9323abf79758ecfa3065bd740d81158b11e"}, + {file = "setuptools-74.1.0-py3-none-any.whl", hash = "sha256:cee604bd76cc092355a4e43ec17aee5369095974f41f088676724dc6bc2c9ef8"}, + {file = "setuptools-74.1.0.tar.gz", hash = "sha256:bea195a800f510ba3a2bc65645c88b7e016fe36709fefc58a880c4ae8a0138d7"}, ] [package.extras] @@ -6882,6 +6904,7 @@ opentelemetry-instrumentation-bedrock = {path = "../opentelemetry-instrumentatio opentelemetry-instrumentation-chromadb = {path = "../opentelemetry-instrumentation-chromadb", develop = true} opentelemetry-instrumentation-cohere = {path = "../opentelemetry-instrumentation-cohere", develop = true} opentelemetry-instrumentation-google-generativeai = {path = "../opentelemetry-instrumentation-google-generativeai", develop = true} +opentelemetry-instrumentation-groq = {path = "../opentelemetry-instrumentation-groq", develop = true} opentelemetry-instrumentation-haystack = {path = "../opentelemetry-instrumentation-haystack", develop = true} opentelemetry-instrumentation-lancedb = {path = "../opentelemetry-instrumentation-lancedb", develop = true} opentelemetry-instrumentation-langchain = {path = "../opentelemetry-instrumentation-langchain", develop = true} diff --git a/packages/traceloop-sdk/poetry.lock b/packages/traceloop-sdk/poetry.lock index 26bacc55b..2895782e4 100644 --- a/packages/traceloop-sdk/poetry.lock +++ b/packages/traceloop-sdk/poetry.lock @@ -1,91 +1,118 @@ # This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] -name = "aiohttp" -version = "3.9.5" -description = "Async http client/server framework (asyncio)" +name = "aiohappyeyeballs" +version = "2.4.0" +description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.8" files = [ - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10"}, - {file = "aiohttp-3.9.5-cp310-cp310-win32.whl", hash = "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb"}, - {file = "aiohttp-3.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75"}, - {file = "aiohttp-3.9.5-cp311-cp311-win32.whl", hash = "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da"}, - {file = "aiohttp-3.9.5-cp312-cp312-win32.whl", hash = "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59"}, - {file = "aiohttp-3.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe"}, - {file = "aiohttp-3.9.5-cp38-cp38-win32.whl", hash = "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da"}, - {file = "aiohttp-3.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-win32.whl", hash = "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09"}, - {file = "aiohttp-3.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1"}, - {file = "aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551"}, + {file = "aiohappyeyeballs-2.4.0-py3-none-any.whl", hash = "sha256:7ce92076e249169a13c2f49320d1967425eaf1f407522d707d59cac7628d62bd"}, + {file = "aiohappyeyeballs-2.4.0.tar.gz", hash = "sha256:55a1714f084e63d49639800f95716da97a1f173d46a16dfcfda0016abb93b6b2"}, ] -[package.dependencies] +[[package]] +name = "aiohttp" +version = "3.10.5" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohttp-3.10.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:18a01eba2574fb9edd5f6e5fb25f66e6ce061da5dab5db75e13fe1558142e0a3"}, + {file = "aiohttp-3.10.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:94fac7c6e77ccb1ca91e9eb4cb0ac0270b9fb9b289738654120ba8cebb1189c6"}, + {file = "aiohttp-3.10.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2f1f1c75c395991ce9c94d3e4aa96e5c59c8356a15b1c9231e783865e2772699"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f7acae3cf1a2a2361ec4c8e787eaaa86a94171d2417aae53c0cca6ca3118ff6"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:94c4381ffba9cc508b37d2e536b418d5ea9cfdc2848b9a7fea6aebad4ec6aac1"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c31ad0c0c507894e3eaa843415841995bf8de4d6b2d24c6e33099f4bc9fc0d4f"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0912b8a8fadeb32ff67a3ed44249448c20148397c1ed905d5dac185b4ca547bb"}, + {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d93400c18596b7dc4794d48a63fb361b01a0d8eb39f28800dc900c8fbdaca91"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d00f3c5e0d764a5c9aa5a62d99728c56d455310bcc288a79cab10157b3af426f"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d742c36ed44f2798c8d3f4bc511f479b9ceef2b93f348671184139e7d708042c"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:814375093edae5f1cb31e3407997cf3eacefb9010f96df10d64829362ae2df69"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8224f98be68a84b19f48e0bdc14224b5a71339aff3a27df69989fa47d01296f3"}, + {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d9a487ef090aea982d748b1b0d74fe7c3950b109df967630a20584f9a99c0683"}, + {file = "aiohttp-3.10.5-cp310-cp310-win32.whl", hash = "sha256:d9ef084e3dc690ad50137cc05831c52b6ca428096e6deb3c43e95827f531d5ef"}, + {file = "aiohttp-3.10.5-cp310-cp310-win_amd64.whl", hash = "sha256:66bf9234e08fe561dccd62083bf67400bdbf1c67ba9efdc3dac03650e97c6088"}, + {file = "aiohttp-3.10.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c6a4e5e40156d72a40241a25cc226051c0a8d816610097a8e8f517aeacd59a2"}, + {file = "aiohttp-3.10.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c634a3207a5445be65536d38c13791904fda0748b9eabf908d3fe86a52941cf"}, + {file = "aiohttp-3.10.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4aff049b5e629ef9b3e9e617fa6e2dfeda1bf87e01bcfecaf3949af9e210105e"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1942244f00baaacaa8155eca94dbd9e8cc7017deb69b75ef67c78e89fdad3c77"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e04a1f2a65ad2f93aa20f9ff9f1b672bf912413e5547f60749fa2ef8a644e061"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f2bfc0032a00405d4af2ba27f3c429e851d04fad1e5ceee4080a1c570476697"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:424ae21498790e12eb759040bbb504e5e280cab64693d14775c54269fd1d2bb7"}, + {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:975218eee0e6d24eb336d0328c768ebc5d617609affaca5dbbd6dd1984f16ed0"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4120d7fefa1e2d8fb6f650b11489710091788de554e2b6f8347c7a20ceb003f5"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b90078989ef3fc45cf9221d3859acd1108af7560c52397ff4ace8ad7052a132e"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ba5a8b74c2a8af7d862399cdedce1533642fa727def0b8c3e3e02fcb52dca1b1"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:02594361128f780eecc2a29939d9dfc870e17b45178a867bf61a11b2a4367277"}, + {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8fb4fc029e135859f533025bc82047334e24b0d489e75513144f25408ecaf058"}, + {file = "aiohttp-3.10.5-cp311-cp311-win32.whl", hash = "sha256:e1ca1ef5ba129718a8fc827b0867f6aa4e893c56eb00003b7367f8a733a9b072"}, + {file = "aiohttp-3.10.5-cp311-cp311-win_amd64.whl", hash = "sha256:349ef8a73a7c5665cca65c88ab24abe75447e28aa3bc4c93ea5093474dfdf0ff"}, + {file = "aiohttp-3.10.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:305be5ff2081fa1d283a76113b8df7a14c10d75602a38d9f012935df20731487"}, + {file = "aiohttp-3.10.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3a1c32a19ee6bbde02f1cb189e13a71b321256cc1d431196a9f824050b160d5a"}, + {file = "aiohttp-3.10.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:61645818edd40cc6f455b851277a21bf420ce347baa0b86eaa41d51ef58ba23d"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c225286f2b13bab5987425558baa5cbdb2bc925b2998038fa028245ef421e75"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ba01ebc6175e1e6b7275c907a3a36be48a2d487549b656aa90c8a910d9f3178"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8eaf44ccbc4e35762683078b72bf293f476561d8b68ec8a64f98cf32811c323e"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c43eb1ab7cbf411b8e387dc169acb31f0ca0d8c09ba63f9eac67829585b44f"}, + {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de7a5299827253023c55ea549444e058c0eb496931fa05d693b95140a947cb73"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4790f0e15f00058f7599dab2b206d3049d7ac464dc2e5eae0e93fa18aee9e7bf"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:44b324a6b8376a23e6ba25d368726ee3bc281e6ab306db80b5819999c737d820"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0d277cfb304118079e7044aad0b76685d30ecb86f83a0711fc5fb257ffe832ca"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:54d9ddea424cd19d3ff6128601a4a4d23d54a421f9b4c0fff740505813739a91"}, + {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4f1c9866ccf48a6df2b06823e6ae80573529f2af3a0992ec4fe75b1a510df8a6"}, + {file = "aiohttp-3.10.5-cp312-cp312-win32.whl", hash = "sha256:dc4826823121783dccc0871e3f405417ac116055bf184ac04c36f98b75aacd12"}, + {file = "aiohttp-3.10.5-cp312-cp312-win_amd64.whl", hash = "sha256:22c0a23a3b3138a6bf76fc553789cb1a703836da86b0f306b6f0dc1617398abc"}, + {file = "aiohttp-3.10.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7f6b639c36734eaa80a6c152a238242bedcee9b953f23bb887e9102976343092"}, + {file = "aiohttp-3.10.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f29930bc2921cef955ba39a3ff87d2c4398a0394ae217f41cb02d5c26c8b1b77"}, + {file = "aiohttp-3.10.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f489a2c9e6455d87eabf907ac0b7d230a9786be43fbe884ad184ddf9e9c1e385"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:123dd5b16b75b2962d0fff566effb7a065e33cd4538c1692fb31c3bda2bfb972"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b98e698dc34966e5976e10bbca6d26d6724e6bdea853c7c10162a3235aba6e16"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3b9162bab7e42f21243effc822652dc5bb5e8ff42a4eb62fe7782bcbcdfacf6"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1923a5c44061bffd5eebeef58cecf68096e35003907d8201a4d0d6f6e387ccaa"}, + {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d55f011da0a843c3d3df2c2cf4e537b8070a419f891c930245f05d329c4b0689"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:afe16a84498441d05e9189a15900640a2d2b5e76cf4efe8cbb088ab4f112ee57"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f8112fb501b1e0567a1251a2fd0747baae60a4ab325a871e975b7bb67e59221f"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1e72589da4c90337837fdfe2026ae1952c0f4a6e793adbbfbdd40efed7c63599"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4d46c7b4173415d8e583045fbc4daa48b40e31b19ce595b8d92cf639396c15d5"}, + {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:33e6bc4bab477c772a541f76cd91e11ccb6d2efa2b8d7d7883591dfb523e5987"}, + {file = "aiohttp-3.10.5-cp313-cp313-win32.whl", hash = "sha256:c58c6837a2c2a7cf3133983e64173aec11f9c2cd8e87ec2fdc16ce727bcf1a04"}, + {file = "aiohttp-3.10.5-cp313-cp313-win_amd64.whl", hash = "sha256:38172a70005252b6893088c0f5e8a47d173df7cc2b2bd88650957eb84fcf5022"}, + {file = "aiohttp-3.10.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f6f18898ace4bcd2d41a122916475344a87f1dfdec626ecde9ee802a711bc569"}, + {file = "aiohttp-3.10.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5ede29d91a40ba22ac1b922ef510aab871652f6c88ef60b9dcdf773c6d32ad7a"}, + {file = "aiohttp-3.10.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:673f988370f5954df96cc31fd99c7312a3af0a97f09e407399f61583f30da9bc"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58718e181c56a3c02d25b09d4115eb02aafe1a732ce5714ab70326d9776457c3"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b38b1570242fbab8d86a84128fb5b5234a2f70c2e32f3070143a6d94bc854cf"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:074d1bff0163e107e97bd48cad9f928fa5a3eb4b9d33366137ffce08a63e37fe"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd31f176429cecbc1ba499d4aba31aaccfea488f418d60376b911269d3b883c5"}, + {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7384d0b87d4635ec38db9263e6a3f1eb609e2e06087f0aa7f63b76833737b471"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8989f46f3d7ef79585e98fa991e6ded55d2f48ae56d2c9fa5e491a6e4effb589"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c83f7a107abb89a227d6c454c613e7606c12a42b9a4ca9c5d7dad25d47c776ae"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cde98f323d6bf161041e7627a5fd763f9fd829bcfcd089804a5fdce7bb6e1b7d"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:676f94c5480d8eefd97c0c7e3953315e4d8c2b71f3b49539beb2aa676c58272f"}, + {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2d21ac12dc943c68135ff858c3a989f2194a709e6e10b4c8977d7fcd67dfd511"}, + {file = "aiohttp-3.10.5-cp38-cp38-win32.whl", hash = "sha256:17e997105bd1a260850272bfb50e2a328e029c941c2708170d9d978d5a30ad9a"}, + {file = "aiohttp-3.10.5-cp38-cp38-win_amd64.whl", hash = "sha256:1c19de68896747a2aa6257ae4cf6ef59d73917a36a35ee9d0a6f48cff0f94db8"}, + {file = "aiohttp-3.10.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7e2fe37ac654032db1f3499fe56e77190282534810e2a8e833141a021faaab0e"}, + {file = "aiohttp-3.10.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5bf3ead3cb66ab990ee2561373b009db5bc0e857549b6c9ba84b20bc462e172"}, + {file = "aiohttp-3.10.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b2c16a919d936ca87a3c5f0e43af12a89a3ce7ccbce59a2d6784caba945b68b"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad146dae5977c4dd435eb31373b3fe9b0b1bf26858c6fc452bf6af394067e10b"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c5c6fa16412b35999320f5c9690c0f554392dc222c04e559217e0f9ae244b92"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:95c4dc6f61d610bc0ee1edc6f29d993f10febfe5b76bb470b486d90bbece6b22"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da452c2c322e9ce0cfef392e469a26d63d42860f829026a63374fde6b5c5876f"}, + {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:898715cf566ec2869d5cb4d5fb4be408964704c46c96b4be267442d265390f32"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:391cc3a9c1527e424c6865e087897e766a917f15dddb360174a70467572ac6ce"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:380f926b51b92d02a34119d072f178d80bbda334d1a7e10fa22d467a66e494db"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce91db90dbf37bb6fa0997f26574107e1b9d5ff939315247b7e615baa8ec313b"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9093a81e18c45227eebe4c16124ebf3e0d893830c6aca7cc310bfca8fe59d857"}, + {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ee40b40aa753d844162dcc80d0fe256b87cba48ca0054f64e68000453caead11"}, + {file = "aiohttp-3.10.5-cp39-cp39-win32.whl", hash = "sha256:03f2645adbe17f274444953bdea69f8327e9d278d961d85657cb0d06864814c1"}, + {file = "aiohttp-3.10.5-cp39-cp39-win_amd64.whl", hash = "sha256:d17920f18e6ee090bdd3d0bfffd769d9f2cb4c8ffde3eb203777a3895c128862"}, + {file = "aiohttp-3.10.5.tar.gz", hash = "sha256:f071854b47d39591ce9a17981c46790acb30518e2f83dfca8db2dfa091178691"}, +] + +[package.dependencies] +aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" @@ -94,7 +121,7 @@ multidict = ">=4.5,<7.0" yarl = ">=1.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "brotlicffi"] +speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aiosignal" @@ -180,22 +207,22 @@ files = [ [[package]] name = "attrs" -version = "23.2.0" +version = "24.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, + {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, + {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, ] [package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "autopep8" @@ -225,13 +252,13 @@ files = [ [[package]] name = "certifi" -version = "2024.7.4" +version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, - {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] [[package]] @@ -545,13 +572,13 @@ tqdm = ["tqdm"] [[package]] name = "googleapis-common-protos" -version = "1.63.2" +version = "1.65.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" files = [ - {file = "googleapis-common-protos-1.63.2.tar.gz", hash = "sha256:27c5abdffc4911f28101e635de1533fb4cfd2c37fbaa9174587c799fac90aa87"}, - {file = "googleapis_common_protos-1.63.2-py2.py3-none-any.whl", hash = "sha256:27a2499c7e8aff199665b22741997e485eccc8645aa9176c7c988e6fae507945"}, + {file = "googleapis_common_protos-1.65.0-py2.py3-none-any.whl", hash = "sha256:2972e6c496f435b92590fd54045060867f3fe9be2c82ab148fc8885035479a63"}, + {file = "googleapis_common_protos-1.65.0.tar.gz", hash = "sha256:334a29d07cddc3aa01dee4988f9afd9b2916ee2ff49d6b757155dc0d197852c0"}, ] [package.dependencies] @@ -633,61 +660,61 @@ test = ["objgraph", "psutil"] [[package]] name = "grpcio" -version = "1.65.1" +version = "1.66.1" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" files = [ - {file = "grpcio-1.65.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:3dc5f928815b8972fb83b78d8db5039559f39e004ec93ebac316403fe031a062"}, - {file = "grpcio-1.65.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:8333ca46053c35484c9f2f7e8d8ec98c1383a8675a449163cea31a2076d93de8"}, - {file = "grpcio-1.65.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:7af64838b6e615fff0ec711960ed9b6ee83086edfa8c32670eafb736f169d719"}, - {file = "grpcio-1.65.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbb64b4166362d9326f7efbf75b1c72106c1aa87f13a8c8b56a1224fac152f5c"}, - {file = "grpcio-1.65.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8422dc13ad93ec8caa2612b5032a2b9cd6421c13ed87f54db4a3a2c93afaf77"}, - {file = "grpcio-1.65.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4effc0562b6c65d4add6a873ca132e46ba5e5a46f07c93502c37a9ae7f043857"}, - {file = "grpcio-1.65.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a6c71575a2fedf259724981fd73a18906513d2f306169c46262a5bae956e6364"}, - {file = "grpcio-1.65.1-cp310-cp310-win32.whl", hash = "sha256:34966cf526ef0ea616e008d40d989463e3db157abb213b2f20c6ce0ae7928875"}, - {file = "grpcio-1.65.1-cp310-cp310-win_amd64.whl", hash = "sha256:ca931de5dd6d9eb94ff19a2c9434b23923bce6f767179fef04dfa991f282eaad"}, - {file = "grpcio-1.65.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:bbb46330cc643ecf10bd9bd4ca8e7419a14b6b9dedd05f671c90fb2c813c6037"}, - {file = "grpcio-1.65.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d827a6fb9215b961eb73459ad7977edb9e748b23e3407d21c845d1d8ef6597e5"}, - {file = "grpcio-1.65.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:6e71aed8835f8d9fbcb84babc93a9da95955d1685021cceb7089f4f1e717d719"}, - {file = "grpcio-1.65.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a1c84560b3b2d34695c9ba53ab0264e2802721c530678a8f0a227951f453462"}, - {file = "grpcio-1.65.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27adee2338d697e71143ed147fe286c05810965d5d30ec14dd09c22479bfe48a"}, - {file = "grpcio-1.65.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f62652ddcadc75d0e7aa629e96bb61658f85a993e748333715b4ab667192e4e8"}, - {file = "grpcio-1.65.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:71a05fd814700dd9cb7d9a507f2f6a1ef85866733ccaf557eedacec32d65e4c2"}, - {file = "grpcio-1.65.1-cp311-cp311-win32.whl", hash = "sha256:b590f1ad056294dfaeac0b7e1b71d3d5ace638d8dd1f1147ce4bd13458783ba8"}, - {file = "grpcio-1.65.1-cp311-cp311-win_amd64.whl", hash = "sha256:12e9bdf3b5fd48e5fbe5b3da382ad8f97c08b47969f3cca81dd9b36b86ed39e2"}, - {file = "grpcio-1.65.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:54cb822e177374b318b233e54b6856c692c24cdbd5a3ba5335f18a47396bac8f"}, - {file = "grpcio-1.65.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:aaf3c54419a28d45bd1681372029f40e5bfb58e5265e3882eaf21e4a5f81a119"}, - {file = "grpcio-1.65.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:557de35bdfbe8bafea0a003dbd0f4da6d89223ac6c4c7549d78e20f92ead95d9"}, - {file = "grpcio-1.65.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8bfd95ef3b097f0cc86ade54eafefa1c8ed623aa01a26fbbdcd1a3650494dd11"}, - {file = "grpcio-1.65.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e6a8f3d6c41e6b642870afe6cafbaf7b61c57317f9ec66d0efdaf19db992b90"}, - {file = "grpcio-1.65.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1faaf7355ceed07ceaef0b9dcefa4c98daf1dd8840ed75c2de128c3f4a4d859d"}, - {file = "grpcio-1.65.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:60f1f38eed830488ad2a1b11579ef0f345ff16fffdad1d24d9fbc97ba31804ff"}, - {file = "grpcio-1.65.1-cp312-cp312-win32.whl", hash = "sha256:e75acfa52daf5ea0712e8aa82f0003bba964de7ae22c26d208cbd7bc08500177"}, - {file = "grpcio-1.65.1-cp312-cp312-win_amd64.whl", hash = "sha256:ff5a84907e51924973aa05ed8759210d8cdae7ffcf9e44fd17646cf4a902df59"}, - {file = "grpcio-1.65.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:1fbd6331f18c3acd7e09d17fd840c096f56eaf0ef830fbd50af45ae9dc8dfd83"}, - {file = "grpcio-1.65.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:de5b6be29116e094c5ef9d9e4252e7eb143e3d5f6bd6d50a78075553ab4930b0"}, - {file = "grpcio-1.65.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:e4a3cdba62b2d6aeae6027ae65f350de6dc082b72e6215eccf82628e79efe9ba"}, - {file = "grpcio-1.65.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941c4869aa229d88706b78187d60d66aca77fe5c32518b79e3c3e03fc26109a2"}, - {file = "grpcio-1.65.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f40cebe5edb518d78b8131e87cb83b3ee688984de38a232024b9b44e74ee53d3"}, - {file = "grpcio-1.65.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2ca684ba331fb249d8a1ce88db5394e70dbcd96e58d8c4b7e0d7b141a453dce9"}, - {file = "grpcio-1.65.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8558f0083ddaf5de64a59c790bffd7568e353914c0c551eae2955f54ee4b857f"}, - {file = "grpcio-1.65.1-cp38-cp38-win32.whl", hash = "sha256:8d8143a3e3966f85dce6c5cc45387ec36552174ba5712c5dc6fcc0898fb324c0"}, - {file = "grpcio-1.65.1-cp38-cp38-win_amd64.whl", hash = "sha256:76e81a86424d6ca1ce7c16b15bdd6a964a42b40544bf796a48da241fdaf61153"}, - {file = "grpcio-1.65.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:cb5175f45c980ff418998723ea1b3869cce3766d2ab4e4916fbd3cedbc9d0ed3"}, - {file = "grpcio-1.65.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b12c1aa7b95abe73b3e04e052c8b362655b41c7798da69f1eaf8d186c7d204df"}, - {file = "grpcio-1.65.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:3019fb50128b21a5e018d89569ffaaaa361680e1346c2f261bb84a91082eb3d3"}, - {file = "grpcio-1.65.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ae15275ed98ea267f64ee9ddedf8ecd5306a5b5bb87972a48bfe24af24153e8"}, - {file = "grpcio-1.65.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f096ffb881f37e8d4f958b63c74bfc400c7cebd7a944b027357cd2fb8d91a57"}, - {file = "grpcio-1.65.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2f56b5a68fdcf17a0a1d524bf177218c3c69b3947cb239ea222c6f1867c3ab68"}, - {file = "grpcio-1.65.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:941596d419b9736ab548aa0feb5bbba922f98872668847bf0720b42d1d227b9e"}, - {file = "grpcio-1.65.1-cp39-cp39-win32.whl", hash = "sha256:5fd7337a823b890215f07d429f4f193d24b80d62a5485cf88ee06648591a0c57"}, - {file = "grpcio-1.65.1-cp39-cp39-win_amd64.whl", hash = "sha256:1bceeec568372cbebf554eae1b436b06c2ff24cfaf04afade729fb9035408c6c"}, - {file = "grpcio-1.65.1.tar.gz", hash = "sha256:3c492301988cd720cd145d84e17318d45af342e29ef93141228f9cd73222368b"}, + {file = "grpcio-1.66.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:4877ba180591acdf127afe21ec1c7ff8a5ecf0fe2600f0d3c50e8c4a1cbc6492"}, + {file = "grpcio-1.66.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:3750c5a00bd644c75f4507f77a804d0189d97a107eb1481945a0cf3af3e7a5ac"}, + {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:a013c5fbb12bfb5f927444b477a26f1080755a931d5d362e6a9a720ca7dbae60"}, + {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1b24c23d51a1e8790b25514157d43f0a4dce1ac12b3f0b8e9f66a5e2c4c132f"}, + {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7ffb8ea674d68de4cac6f57d2498fef477cef582f1fa849e9f844863af50083"}, + {file = "grpcio-1.66.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:307b1d538140f19ccbd3aed7a93d8f71103c5d525f3c96f8616111614b14bf2a"}, + {file = "grpcio-1.66.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1c17ebcec157cfb8dd445890a03e20caf6209a5bd4ac5b040ae9dbc59eef091d"}, + {file = "grpcio-1.66.1-cp310-cp310-win32.whl", hash = "sha256:ef82d361ed5849d34cf09105d00b94b6728d289d6b9235513cb2fcc79f7c432c"}, + {file = "grpcio-1.66.1-cp310-cp310-win_amd64.whl", hash = "sha256:292a846b92cdcd40ecca46e694997dd6b9be6c4c01a94a0dfb3fcb75d20da858"}, + {file = "grpcio-1.66.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:c30aeceeaff11cd5ddbc348f37c58bcb96da8d5aa93fed78ab329de5f37a0d7a"}, + {file = "grpcio-1.66.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8a1e224ce6f740dbb6b24c58f885422deebd7eb724aff0671a847f8951857c26"}, + {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:a66fe4dc35d2330c185cfbb42959f57ad36f257e0cc4557d11d9f0a3f14311df"}, + {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ba04659e4fce609de2658fe4dbf7d6ed21987a94460f5f92df7579fd5d0e22"}, + {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4573608e23f7e091acfbe3e84ac2045680b69751d8d67685ffa193a4429fedb1"}, + {file = "grpcio-1.66.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7e06aa1f764ec8265b19d8f00140b8c4b6ca179a6dc67aa9413867c47e1fb04e"}, + {file = "grpcio-1.66.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3885f037eb11f1cacc41f207b705f38a44b69478086f40608959bf5ad85826dd"}, + {file = "grpcio-1.66.1-cp311-cp311-win32.whl", hash = "sha256:97ae7edd3f3f91480e48ede5d3e7d431ad6005bfdbd65c1b56913799ec79e791"}, + {file = "grpcio-1.66.1-cp311-cp311-win_amd64.whl", hash = "sha256:cfd349de4158d797db2bd82d2020554a121674e98fbe6b15328456b3bf2495bb"}, + {file = "grpcio-1.66.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:a92c4f58c01c77205df6ff999faa008540475c39b835277fb8883b11cada127a"}, + {file = "grpcio-1.66.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fdb14bad0835914f325349ed34a51940bc2ad965142eb3090081593c6e347be9"}, + {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f03a5884c56256e08fd9e262e11b5cfacf1af96e2ce78dc095d2c41ccae2c80d"}, + {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ca2559692d8e7e245d456877a85ee41525f3ed425aa97eb7a70fc9a79df91a0"}, + {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84ca1be089fb4446490dd1135828bd42a7c7f8421e74fa581611f7afdf7ab761"}, + {file = "grpcio-1.66.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:d639c939ad7c440c7b2819a28d559179a4508783f7e5b991166f8d7a34b52815"}, + {file = "grpcio-1.66.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b9feb4e5ec8dc2d15709f4d5fc367794d69277f5d680baf1910fc9915c633524"}, + {file = "grpcio-1.66.1-cp312-cp312-win32.whl", hash = "sha256:7101db1bd4cd9b880294dec41a93fcdce465bdbb602cd8dc5bd2d6362b618759"}, + {file = "grpcio-1.66.1-cp312-cp312-win_amd64.whl", hash = "sha256:b0aa03d240b5539648d996cc60438f128c7f46050989e35b25f5c18286c86734"}, + {file = "grpcio-1.66.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:ecfe735e7a59e5a98208447293ff8580e9db1e890e232b8b292dc8bd15afc0d2"}, + {file = "grpcio-1.66.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:4825a3aa5648010842e1c9d35a082187746aa0cdbf1b7a2a930595a94fb10fce"}, + {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:f517fd7259fe823ef3bd21e508b653d5492e706e9f0ef82c16ce3347a8a5620c"}, + {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1fe60d0772831d96d263b53d83fb9a3d050a94b0e94b6d004a5ad111faa5b5b"}, + {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31a049daa428f928f21090403e5d18ea02670e3d5d172581670be006100db9ef"}, + {file = "grpcio-1.66.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f914386e52cbdeb5d2a7ce3bf1fdfacbe9d818dd81b6099a05b741aaf3848bb"}, + {file = "grpcio-1.66.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bff2096bdba686019fb32d2dde45b95981f0d1490e054400f70fc9a8af34b49d"}, + {file = "grpcio-1.66.1-cp38-cp38-win32.whl", hash = "sha256:aa8ba945c96e73de29d25331b26f3e416e0c0f621e984a3ebdb2d0d0b596a3b3"}, + {file = "grpcio-1.66.1-cp38-cp38-win_amd64.whl", hash = "sha256:161d5c535c2bdf61b95080e7f0f017a1dfcb812bf54093e71e5562b16225b4ce"}, + {file = "grpcio-1.66.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:d0cd7050397b3609ea51727b1811e663ffda8bda39c6a5bb69525ef12414b503"}, + {file = "grpcio-1.66.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0e6c9b42ded5d02b6b1fea3a25f036a2236eeb75d0579bfd43c0018c88bf0a3e"}, + {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:c9f80f9fad93a8cf71c7f161778ba47fd730d13a343a46258065c4deb4b550c0"}, + {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dd67ed9da78e5121efc5c510f0122a972216808d6de70953a740560c572eb44"}, + {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48b0d92d45ce3be2084b92fb5bae2f64c208fea8ceed7fccf6a7b524d3c4942e"}, + {file = "grpcio-1.66.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d813316d1a752be6f5c4360c49f55b06d4fe212d7df03253dfdae90c8a402bb"}, + {file = "grpcio-1.66.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9c9bebc6627873ec27a70fc800f6083a13c70b23a5564788754b9ee52c5aef6c"}, + {file = "grpcio-1.66.1-cp39-cp39-win32.whl", hash = "sha256:30a1c2cf9390c894c90bbc70147f2372130ad189cffef161f0432d0157973f45"}, + {file = "grpcio-1.66.1-cp39-cp39-win_amd64.whl", hash = "sha256:17663598aadbedc3cacd7bbde432f541c8e07d2496564e22b214b22c7523dac8"}, + {file = "grpcio-1.66.1.tar.gz", hash = "sha256:35334f9c9745add3e357e3372756fd32d925bd52c41da97f4dfdafbde0bf0ee2"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.65.1)"] +protobuf = ["grpcio-tools (>=1.66.1)"] [[package]] name = "h11" @@ -723,13 +750,13 @@ trio = ["trio (>=0.22.0,<0.26.0)"] [[package]] name = "httpx" -version = "0.27.0" +version = "0.27.2" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, - {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, + {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, + {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, ] [package.dependencies] @@ -744,16 +771,17 @@ brotli = ["brotli", "brotlicffi"] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "huggingface-hub" -version = "0.24.0" +version = "0.24.6" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.24.0-py3-none-any.whl", hash = "sha256:7ad92edefb93d8145c061f6df8d99df2ff85f8379ba5fac8a95aca0642afa5d7"}, - {file = "huggingface_hub-0.24.0.tar.gz", hash = "sha256:6c7092736b577d89d57b3cdfea026f1b0dc2234ae783fa0d59caf1bf7d52dfa7"}, + {file = "huggingface_hub-0.24.6-py3-none-any.whl", hash = "sha256:a990f3232aa985fe749bc9474060cbad75e8b2f115f6665a9fda5b9c97818970"}, + {file = "huggingface_hub-0.24.6.tar.gz", hash = "sha256:cc2579e761d070713eaa9c323e3debe39d5b464ae3a7261c39a9195b27bb8000"}, ] [package.dependencies] @@ -781,33 +809,33 @@ typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "t [[package]] name = "idna" -version = "3.7" +version = "3.8" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, + {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"}, + {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, ] [[package]] name = "importlib-metadata" -version = "7.1.0" +version = "8.4.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, - {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, + {file = "importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1"}, + {file = "importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] name = "inflection" @@ -848,6 +876,76 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "jiter" +version = "0.5.0" +description = "Fast iterable JSON parser." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jiter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b599f4e89b3def9a94091e6ee52e1d7ad7bc33e238ebb9c4c63f211d74822c3f"}, + {file = "jiter-0.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a063f71c4b06225543dddadbe09d203dc0c95ba352d8b85f1221173480a71d5"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc0d5b8b3dd12e91dd184b87273f864b363dfabc90ef29a1092d269f18c7e28"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c22541f0b672f4d741382a97c65609332a783501551445ab2df137ada01e019e"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63314832e302cc10d8dfbda0333a384bf4bcfce80d65fe99b0f3c0da8945a91a"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a25fbd8a5a58061e433d6fae6d5298777c0814a8bcefa1e5ecfff20c594bd749"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503b2c27d87dfff5ab717a8200fbbcf4714516c9d85558048b1fc14d2de7d8dc"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d1f3d27cce923713933a844872d213d244e09b53ec99b7a7fdf73d543529d6d"}, + {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c95980207b3998f2c3b3098f357994d3fd7661121f30669ca7cb945f09510a87"}, + {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afa66939d834b0ce063f57d9895e8036ffc41c4bd90e4a99631e5f261d9b518e"}, + {file = "jiter-0.5.0-cp310-none-win32.whl", hash = "sha256:f16ca8f10e62f25fd81d5310e852df6649af17824146ca74647a018424ddeccf"}, + {file = "jiter-0.5.0-cp310-none-win_amd64.whl", hash = "sha256:b2950e4798e82dd9176935ef6a55cf6a448b5c71515a556da3f6b811a7844f1e"}, + {file = "jiter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4c8e1ed0ef31ad29cae5ea16b9e41529eb50a7fba70600008e9f8de6376d553"}, + {file = "jiter-0.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6f16e21276074a12d8421692515b3fd6d2ea9c94fd0734c39a12960a20e85f3"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5280e68e7740c8c128d3ae5ab63335ce6d1fb6603d3b809637b11713487af9e6"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:583c57fc30cc1fec360e66323aadd7fc3edeec01289bfafc35d3b9dcb29495e4"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26351cc14507bdf466b5f99aba3df3143a59da75799bf64a53a3ad3155ecded9"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829df14d656b3fb87e50ae8b48253a8851c707da9f30d45aacab2aa2ba2d614"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42a4bdcf7307b86cb863b2fb9bb55029b422d8f86276a50487982d99eed7c6e"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04d461ad0aebf696f8da13c99bc1b3e06f66ecf6cfd56254cc402f6385231c06"}, + {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6375923c5f19888c9226582a124b77b622f8fd0018b843c45eeb19d9701c403"}, + {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cec323a853c24fd0472517113768c92ae0be8f8c384ef4441d3632da8baa646"}, + {file = "jiter-0.5.0-cp311-none-win32.whl", hash = "sha256:aa1db0967130b5cab63dfe4d6ff547c88b2a394c3410db64744d491df7f069bb"}, + {file = "jiter-0.5.0-cp311-none-win_amd64.whl", hash = "sha256:aa9d2b85b2ed7dc7697597dcfaac66e63c1b3028652f751c81c65a9f220899ae"}, + {file = "jiter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9f664e7351604f91dcdd557603c57fc0d551bc65cc0a732fdacbf73ad335049a"}, + {file = "jiter-0.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:044f2f1148b5248ad2c8c3afb43430dccf676c5a5834d2f5089a4e6c5bbd64df"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:702e3520384c88b6e270c55c772d4bd6d7b150608dcc94dea87ceba1b6391248"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:528d742dcde73fad9d63e8242c036ab4a84389a56e04efd854062b660f559544"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf80e5fe6ab582c82f0c3331df27a7e1565e2dcf06265afd5173d809cdbf9ba"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44dfc9ddfb9b51a5626568ef4e55ada462b7328996294fe4d36de02fce42721f"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c451f7922992751a936b96c5f5b9bb9312243d9b754c34b33d0cb72c84669f4e"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:308fce789a2f093dca1ff91ac391f11a9f99c35369117ad5a5c6c4903e1b3e3a"}, + {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7f5ad4a7c6b0d90776fdefa294f662e8a86871e601309643de30bf94bb93a64e"}, + {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea189db75f8eca08807d02ae27929e890c7d47599ce3d0a6a5d41f2419ecf338"}, + {file = "jiter-0.5.0-cp312-none-win32.whl", hash = "sha256:e3bbe3910c724b877846186c25fe3c802e105a2c1fc2b57d6688b9f8772026e4"}, + {file = "jiter-0.5.0-cp312-none-win_amd64.whl", hash = "sha256:a586832f70c3f1481732919215f36d41c59ca080fa27a65cf23d9490e75b2ef5"}, + {file = "jiter-0.5.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f04bc2fc50dc77be9d10f73fcc4e39346402ffe21726ff41028f36e179b587e6"}, + {file = "jiter-0.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6f433a4169ad22fcb550b11179bb2b4fd405de9b982601914ef448390b2954f3"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad4a6398c85d3a20067e6c69890ca01f68659da94d74c800298581724e426c7e"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6baa88334e7af3f4d7a5c66c3a63808e5efbc3698a1c57626541ddd22f8e4fbf"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ece0a115c05efca597c6d938f88c9357c843f8c245dbbb53361a1c01afd7148"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:335942557162ad372cc367ffaf93217117401bf930483b4b3ebdb1223dbddfa7"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649b0ee97a6e6da174bffcb3c8c051a5935d7d4f2f52ea1583b5b3e7822fbf14"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4be354c5de82157886ca7f5925dbda369b77344b4b4adf2723079715f823989"}, + {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5206144578831a6de278a38896864ded4ed96af66e1e63ec5dd7f4a1fce38a3a"}, + {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8120c60f8121ac3d6f072b97ef0e71770cc72b3c23084c72c4189428b1b1d3b6"}, + {file = "jiter-0.5.0-cp38-none-win32.whl", hash = "sha256:6f1223f88b6d76b519cb033a4d3687ca157c272ec5d6015c322fc5b3074d8a5e"}, + {file = "jiter-0.5.0-cp38-none-win_amd64.whl", hash = "sha256:c59614b225d9f434ea8fc0d0bec51ef5fa8c83679afedc0433905994fb36d631"}, + {file = "jiter-0.5.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0af3838cfb7e6afee3f00dc66fa24695199e20ba87df26e942820345b0afc566"}, + {file = "jiter-0.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:550b11d669600dbc342364fd4adbe987f14d0bbedaf06feb1b983383dcc4b961"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:489875bf1a0ffb3cb38a727b01e6673f0f2e395b2aad3c9387f94187cb214bbf"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b250ca2594f5599ca82ba7e68785a669b352156260c5362ea1b4e04a0f3e2389"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ea18e01f785c6667ca15407cd6dabbe029d77474d53595a189bdc813347218e"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:462a52be85b53cd9bffd94e2d788a09984274fe6cebb893d6287e1c296d50653"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92cc68b48d50fa472c79c93965e19bd48f40f207cb557a8346daa020d6ba973b"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c834133e59a8521bc87ebcad773608c6fa6ab5c7a022df24a45030826cf10bc"}, + {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab3a71ff31cf2d45cb216dc37af522d335211f3a972d2fe14ea99073de6cb104"}, + {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cccd3af9c48ac500c95e1bcbc498020c87e1781ff0345dd371462d67b76643eb"}, + {file = "jiter-0.5.0-cp39-none-win32.whl", hash = "sha256:368084d8d5c4fc40ff7c3cc513c4f73e02c85f6009217922d0823a48ee7adf61"}, + {file = "jiter-0.5.0-cp39-none-win_amd64.whl", hash = "sha256:ce03f7b4129eb72f1687fa11300fbf677b02990618428934662406d2a76742a1"}, + {file = "jiter-0.5.0.tar.gz", hash = "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a"}, +] + [[package]] name = "jsonpatch" version = "1.33" @@ -875,24 +973,24 @@ files = [ [[package]] name = "langchain" -version = "0.2.9" +version = "0.2.15" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain-0.2.9-py3-none-any.whl", hash = "sha256:be23fcb29adbd5059944f1fed08fa575f0739d420b1c4127531e0fbf5663fcca"}, - {file = "langchain-0.2.9.tar.gz", hash = "sha256:cc326a7f6347787a19882928c324433b1a79df629bba45604b2d26495ee5d69c"}, + {file = "langchain-0.2.15-py3-none-any.whl", hash = "sha256:9e6231441870aaa8523be24a5785ccccfdde759a7e27dd082b6ec80f68e49dec"}, + {file = "langchain-0.2.15.tar.gz", hash = "sha256:f613ce7594be34f9bac687134a56f6e8274951907b798dbd037aefc95df78953"}, ] [package.dependencies] aiohttp = ">=3.8.3,<4.0.0" async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} -langchain-core = ">=0.2.20,<0.3.0" +langchain-core = ">=0.2.35,<0.3.0" langchain-text-splitters = ">=0.2.0,<0.3.0" langsmith = ">=0.1.17,<0.2.0" numpy = [ - {version = ">=1,<2", markers = "python_version < \"3.12\""}, {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""}, + {version = ">=1,<2", markers = "python_version < \"3.12\""}, ] pydantic = ">=1,<3" PyYAML = ">=5.3" @@ -902,13 +1000,13 @@ tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" [[package]] name = "langchain-core" -version = "0.2.21" +version = "0.2.37" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_core-0.2.21-py3-none-any.whl", hash = "sha256:805b1f53e0e2424b83e3673cba1c9354105c5a5e4a1d0d768b1e70d8ac0d604d"}, - {file = "langchain_core-0.2.21.tar.gz", hash = "sha256:3d1e28179a5d496b900ebef45e1471eaae9fb63fc570f89ded78b026fd08ba84"}, + {file = "langchain_core-0.2.37-py3-none-any.whl", hash = "sha256:bf0f39ccb653931eeb0a4dd248591ef239895620e04da9ec928446cd9ddb47f0"}, + {file = "langchain_core-0.2.37.tar.gz", hash = "sha256:944de6cfaad72de5641f6765d5310a022fcd9943f10735507ea040cc5fb95011"}, ] [package.dependencies] @@ -916,26 +1014,27 @@ jsonpatch = ">=1.33,<2.0" langsmith = ">=0.1.75,<0.2.0" packaging = ">=23.2,<25" pydantic = [ - {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, + {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, ] PyYAML = ">=5.3" tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" +typing-extensions = ">=4.7" [[package]] name = "langchain-openai" -version = "0.1.17" +version = "0.1.23" description = "An integration package connecting OpenAI and LangChain" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_openai-0.1.17-py3-none-any.whl", hash = "sha256:30bef5574ecbbbb91b8025b2dc5a1bd81fd62157d3ad1a35d820141f31c5b443"}, - {file = "langchain_openai-0.1.17.tar.gz", hash = "sha256:c5d70ddecdcb93e146f376bdbadbb6ec69de9ac0f402cd5b83de50b655ba85ee"}, + {file = "langchain_openai-0.1.23-py3-none-any.whl", hash = "sha256:8e3d215803e157f26480c6108eb4333629832b1a0e746723060c24f93b8b78f4"}, + {file = "langchain_openai-0.1.23.tar.gz", hash = "sha256:ed7f16671ea0af177ac5f82d5645a746c5097c56f97b31798e5c07b5c84f0eed"}, ] [package.dependencies] -langchain-core = ">=0.2.20,<0.3.0" -openai = ">=1.32.0,<2.0.0" +langchain-core = ">=0.2.35,<0.3.0" +openai = ">=1.40.0,<2.0.0" tiktoken = ">=0.7,<1" [[package]] @@ -954,20 +1053,21 @@ langchain-core = ">=0.2.10,<0.3.0" [[package]] name = "langsmith" -version = "0.1.92" +version = "0.1.108" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.1.92-py3-none-any.whl", hash = "sha256:8acb27844ff5263bde14b23425f83ee63996f4d5a8e9998cdeef07fd913137ff"}, - {file = "langsmith-0.1.92.tar.gz", hash = "sha256:681a613a4dc8c8e57c8961c347a39ffcb64d6c697e8ddde1fd8458fcfaef6c13"}, + {file = "langsmith-0.1.108-py3-none-any.whl", hash = "sha256:407f318b0989e33f2cd30bc2fbd443e4ddfa7c2a93de7f795fb6b119b015583c"}, + {file = "langsmith-0.1.108.tar.gz", hash = "sha256:42f603e2d5770ba36093951bdb29eaab22451cb12ab8c062340c722cf60d4cec"}, ] [package.dependencies] +httpx = ">=0.23.0,<1" orjson = ">=3.9.14,<4.0.0" pydantic = [ - {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, + {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, ] requests = ">=2,<3" @@ -1208,23 +1308,24 @@ files = [ [[package]] name = "openai" -version = "1.35.15" +version = "1.43.0" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.35.15-py3-none-any.whl", hash = "sha256:1b9a6ada4239b91f38f51c426c6ee2746a2069c92cbf25ed8694e5ec00ff4597"}, - {file = "openai-1.35.15.tar.gz", hash = "sha256:307007e2036d57115612c1ecb50e9bc98fcc93537109a9f9efa1b4eedb2ea968"}, + {file = "openai-1.43.0-py3-none-any.whl", hash = "sha256:1a748c2728edd3a738a72a0212ba866f4fdbe39c9ae03813508b267d45104abe"}, + {file = "openai-1.43.0.tar.gz", hash = "sha256:e607aff9fc3e28eade107e5edd8ca95a910a4b12589336d3cbb6bfe2ac306b3c"}, ] [package.dependencies] anyio = ">=3.5.0,<5" distro = ">=1.7.0,<2" httpx = ">=0.23.0,<1" +jiter = ">=0.4.0,<1" pydantic = ">=1.9.0,<3" sniffio = "*" tqdm = ">4" -typing-extensions = ">=4.7,<5" +typing-extensions = ">=4.11,<5" [package.extras] datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] @@ -1316,7 +1417,7 @@ wrapt = ">=1.0.0,<2.0.0" [[package]] name = "opentelemetry-instrumentation-alephalpha" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Aleph Alpha instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1338,7 +1439,7 @@ url = "../opentelemetry-instrumentation-alephalpha" [[package]] name = "opentelemetry-instrumentation-anthropic" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Anthropic instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1360,7 +1461,7 @@ url = "../opentelemetry-instrumentation-anthropic" [[package]] name = "opentelemetry-instrumentation-bedrock" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Bedrock instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1380,7 +1481,7 @@ url = "../opentelemetry-instrumentation-bedrock" [[package]] name = "opentelemetry-instrumentation-chromadb" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Chroma DB instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1402,7 +1503,7 @@ url = "../opentelemetry-instrumentation-chromadb" [[package]] name = "opentelemetry-instrumentation-cohere" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Cohere instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1424,7 +1525,7 @@ url = "../opentelemetry-instrumentation-cohere" [[package]] name = "opentelemetry-instrumentation-google-generativeai" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Google Generative AI instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1444,9 +1545,31 @@ instruments = [] type = "directory" url = "../opentelemetry-instrumentation-google-generativeai" +[[package]] +name = "opentelemetry-instrumentation-groq" +version = "0.29.2" +description = "OpenTelemetry Groq instrumentation" +optional = false +python-versions = ">=3.9,<4" +files = [] +develop = true + +[package.dependencies] +opentelemetry-api = "^1.27.0" +opentelemetry-instrumentation = "^0.48b0" +opentelemetry-semantic-conventions = "^0.48b0" +opentelemetry-semantic-conventions-ai = "0.4.1" + +[package.extras] +instruments = [] + +[package.source] +type = "directory" +url = "../opentelemetry-instrumentation-groq" + [[package]] name = "opentelemetry-instrumentation-haystack" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Haystack instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1468,7 +1591,7 @@ url = "../opentelemetry-instrumentation-haystack" [[package]] name = "opentelemetry-instrumentation-lancedb" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Lancedb instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1490,7 +1613,7 @@ url = "../opentelemetry-instrumentation-lancedb" [[package]] name = "opentelemetry-instrumentation-langchain" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Langchain instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1512,7 +1635,7 @@ url = "../opentelemetry-instrumentation-langchain" [[package]] name = "opentelemetry-instrumentation-llamaindex" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry LlamaIndex instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1535,7 +1658,7 @@ url = "../opentelemetry-instrumentation-llamaindex" [[package]] name = "opentelemetry-instrumentation-marqo" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Marqo instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1557,7 +1680,7 @@ url = "../opentelemetry-instrumentation-marqo" [[package]] name = "opentelemetry-instrumentation-milvus" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Milvus instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1579,7 +1702,7 @@ url = "../opentelemetry-instrumentation-milvus" [[package]] name = "opentelemetry-instrumentation-mistralai" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Mistral AI instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1601,7 +1724,7 @@ url = "../opentelemetry-instrumentation-mistralai" [[package]] name = "opentelemetry-instrumentation-ollama" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Ollama instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1623,7 +1746,7 @@ url = "../opentelemetry-instrumentation-ollama" [[package]] name = "opentelemetry-instrumentation-openai" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry OpenAI instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1646,7 +1769,7 @@ url = "../opentelemetry-instrumentation-openai" [[package]] name = "opentelemetry-instrumentation-pinecone" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Pinecone instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1668,7 +1791,7 @@ url = "../opentelemetry-instrumentation-pinecone" [[package]] name = "opentelemetry-instrumentation-qdrant" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Qdrant instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1690,7 +1813,7 @@ url = "../opentelemetry-instrumentation-qdrant" [[package]] name = "opentelemetry-instrumentation-replicate" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Replicate instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1769,7 +1892,7 @@ wrapt = ">=1.0.0,<2.0.0" [[package]] name = "opentelemetry-instrumentation-together" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Together AI instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1791,7 +1914,7 @@ url = "../opentelemetry-instrumentation-together" [[package]] name = "opentelemetry-instrumentation-transformers" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry transformers instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1831,7 +1954,7 @@ instruments = ["urllib3 (>=1.0.0,<3.0.0)"] [[package]] name = "opentelemetry-instrumentation-vertexai" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Vertex AI instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1853,7 +1976,7 @@ url = "../opentelemetry-instrumentation-vertexai" [[package]] name = "opentelemetry-instrumentation-watsonx" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry IBM Watsonx Instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1875,7 +1998,7 @@ url = "../opentelemetry-instrumentation-watsonx" [[package]] name = "opentelemetry-instrumentation-weaviate" -version = "0.28.2" +version = "0.29.2" description = "OpenTelemetry Weaviate instrumentation" optional = false python-versions = ">=3.9,<4" @@ -1964,62 +2087,68 @@ files = [ [[package]] name = "orjson" -version = "3.10.6" +version = "3.10.7" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.6-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:fb0ee33124db6eaa517d00890fc1a55c3bfe1cf78ba4a8899d71a06f2d6ff5c7"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c1c4b53b24a4c06547ce43e5fee6ec4e0d8fe2d597f4647fc033fd205707365"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eadc8fd310edb4bdbd333374f2c8fec6794bbbae99b592f448d8214a5e4050c0"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61272a5aec2b2661f4fa2b37c907ce9701e821b2c1285d5c3ab0207ebd358d38"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57985ee7e91d6214c837936dc1608f40f330a6b88bb13f5a57ce5257807da143"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:633a3b31d9d7c9f02d49c4ab4d0a86065c4a6f6adc297d63d272e043472acab5"}, - {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1c680b269d33ec444afe2bdc647c9eb73166fa47a16d9a75ee56a374f4a45f43"}, - {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f759503a97a6ace19e55461395ab0d618b5a117e8d0fbb20e70cfd68a47327f2"}, - {file = "orjson-3.10.6-cp310-none-win32.whl", hash = "sha256:95a0cce17f969fb5391762e5719575217bd10ac5a189d1979442ee54456393f3"}, - {file = "orjson-3.10.6-cp310-none-win_amd64.whl", hash = "sha256:df25d9271270ba2133cc88ee83c318372bdc0f2cd6f32e7a450809a111efc45c"}, - {file = "orjson-3.10.6-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b1ec490e10d2a77c345def52599311849fc063ae0e67cf4f84528073152bb2ba"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d43d3feb8f19d07e9f01e5b9be4f28801cf7c60d0fa0d279951b18fae1932b"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac3045267e98fe749408eee1593a142e02357c5c99be0802185ef2170086a863"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c27bc6a28ae95923350ab382c57113abd38f3928af3c80be6f2ba7eb8d8db0b0"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d27456491ca79532d11e507cadca37fb8c9324a3976294f68fb1eff2dc6ced5a"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05ac3d3916023745aa3b3b388e91b9166be1ca02b7c7e41045da6d12985685f0"}, - {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1335d4ef59ab85cab66fe73fd7a4e881c298ee7f63ede918b7faa1b27cbe5212"}, - {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4bbc6d0af24c1575edc79994c20e1b29e6fb3c6a570371306db0993ecf144dc5"}, - {file = "orjson-3.10.6-cp311-none-win32.whl", hash = "sha256:450e39ab1f7694465060a0550b3f6d328d20297bf2e06aa947b97c21e5241fbd"}, - {file = "orjson-3.10.6-cp311-none-win_amd64.whl", hash = "sha256:227df19441372610b20e05bdb906e1742ec2ad7a66ac8350dcfd29a63014a83b"}, - {file = "orjson-3.10.6-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ea2977b21f8d5d9b758bb3f344a75e55ca78e3ff85595d248eee813ae23ecdfb"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6f3d167d13a16ed263b52dbfedff52c962bfd3d270b46b7518365bcc2121eed"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f710f346e4c44a4e8bdf23daa974faede58f83334289df80bc9cd12fe82573c7"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7275664f84e027dcb1ad5200b8b18373e9c669b2a9ec33d410c40f5ccf4b257e"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0943e4c701196b23c240b3d10ed8ecd674f03089198cf503105b474a4f77f21f"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:446dee5a491b5bc7d8f825d80d9637e7af43f86a331207b9c9610e2f93fee22a"}, - {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:64c81456d2a050d380786413786b057983892db105516639cb5d3ee3c7fd5148"}, - {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:960db0e31c4e52fa0fc3ecbaea5b2d3b58f379e32a95ae6b0ebeaa25b93dfd34"}, - {file = "orjson-3.10.6-cp312-none-win32.whl", hash = "sha256:a6ea7afb5b30b2317e0bee03c8d34c8181bc5a36f2afd4d0952f378972c4efd5"}, - {file = "orjson-3.10.6-cp312-none-win_amd64.whl", hash = "sha256:874ce88264b7e655dde4aeaacdc8fd772a7962faadfb41abe63e2a4861abc3dc"}, - {file = "orjson-3.10.6-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:66680eae4c4e7fc193d91cfc1353ad6d01b4801ae9b5314f17e11ba55e934183"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caff75b425db5ef8e8f23af93c80f072f97b4fb3afd4af44482905c9f588da28"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3722fddb821b6036fd2a3c814f6bd9b57a89dc6337b9924ecd614ebce3271394"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2c116072a8533f2fec435fde4d134610f806bdac20188c7bd2081f3e9e0133f"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6eeb13218c8cf34c61912e9df2de2853f1d009de0e46ea09ccdf3d757896af0a"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:965a916373382674e323c957d560b953d81d7a8603fbeee26f7b8248638bd48b"}, - {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:03c95484d53ed8e479cade8628c9cea00fd9d67f5554764a1110e0d5aa2de96e"}, - {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e060748a04cccf1e0a6f2358dffea9c080b849a4a68c28b1b907f272b5127e9b"}, - {file = "orjson-3.10.6-cp38-none-win32.whl", hash = "sha256:738dbe3ef909c4b019d69afc19caf6b5ed0e2f1c786b5d6215fbb7539246e4c6"}, - {file = "orjson-3.10.6-cp38-none-win_amd64.whl", hash = "sha256:d40f839dddf6a7d77114fe6b8a70218556408c71d4d6e29413bb5f150a692ff7"}, - {file = "orjson-3.10.6-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:697a35a083c4f834807a6232b3e62c8b280f7a44ad0b759fd4dce748951e70db"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd502f96bf5ea9a61cbc0b2b5900d0dd68aa0da197179042bdd2be67e51a1e4b"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f215789fb1667cdc874c1b8af6a84dc939fd802bf293a8334fce185c79cd359b"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2debd8ddce948a8c0938c8c93ade191d2f4ba4649a54302a7da905a81f00b56"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5410111d7b6681d4b0d65e0f58a13be588d01b473822483f77f513c7f93bd3b2"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb1f28a137337fdc18384079fa5726810681055b32b92253fa15ae5656e1dddb"}, - {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bf2fbbce5fe7cd1aa177ea3eab2b8e6a6bc6e8592e4279ed3db2d62e57c0e1b2"}, - {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:79b9b9e33bd4c517445a62b90ca0cc279b0f1f3970655c3df9e608bc3f91741a"}, - {file = "orjson-3.10.6-cp39-none-win32.whl", hash = "sha256:30b0a09a2014e621b1adf66a4f705f0809358350a757508ee80209b2d8dae219"}, - {file = "orjson-3.10.6-cp39-none-win_amd64.whl", hash = "sha256:49e3bc615652617d463069f91b867a4458114c5b104e13b7ae6872e5f79d0844"}, - {file = "orjson-3.10.6.tar.gz", hash = "sha256:e54b63d0a7c6c54a5f5f726bc93a2078111ef060fec4ecbf34c5db800ca3b3a7"}, + {file = "orjson-3.10.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:74f4544f5a6405b90da8ea724d15ac9c36da4d72a738c64685003337401f5c12"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34a566f22c28222b08875b18b0dfbf8a947e69df21a9ed5c51a6bf91cfb944ac"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf6ba8ebc8ef5792e2337fb0419f8009729335bb400ece005606336b7fd7bab7"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac7cf6222b29fbda9e3a472b41e6a5538b48f2c8f99261eecd60aafbdb60690c"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de817e2f5fc75a9e7dd350c4b0f54617b280e26d1631811a43e7e968fa71e3e9"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:348bdd16b32556cf8d7257b17cf2bdb7ab7976af4af41ebe79f9796c218f7e91"}, + {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:479fd0844ddc3ca77e0fd99644c7fe2de8e8be1efcd57705b5c92e5186e8a250"}, + {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fdf5197a21dd660cf19dfd2a3ce79574588f8f5e2dbf21bda9ee2d2b46924d84"}, + {file = "orjson-3.10.7-cp310-none-win32.whl", hash = "sha256:d374d36726746c81a49f3ff8daa2898dccab6596864ebe43d50733275c629175"}, + {file = "orjson-3.10.7-cp310-none-win_amd64.whl", hash = "sha256:cb61938aec8b0ffb6eef484d480188a1777e67b05d58e41b435c74b9d84e0b9c"}, + {file = "orjson-3.10.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7db8539039698ddfb9a524b4dd19508256107568cdad24f3682d5773e60504a2"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:480f455222cb7a1dea35c57a67578848537d2602b46c464472c995297117fa09"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a9c9b168b3a19e37fe2778c0003359f07822c90fdff8f98d9d2a91b3144d8e0"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8de062de550f63185e4c1c54151bdddfc5625e37daf0aa1e75d2a1293e3b7d9a"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b0dd04483499d1de9c8f6203f8975caf17a6000b9c0c54630cef02e44ee624e"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b58d3795dafa334fc8fd46f7c5dc013e6ad06fd5b9a4cc98cb1456e7d3558bd6"}, + {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33cfb96c24034a878d83d1a9415799a73dc77480e6c40417e5dda0710d559ee6"}, + {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e724cebe1fadc2b23c6f7415bad5ee6239e00a69f30ee423f319c6af70e2a5c0"}, + {file = "orjson-3.10.7-cp311-none-win32.whl", hash = "sha256:82763b46053727a7168d29c772ed5c870fdae2f61aa8a25994c7984a19b1021f"}, + {file = "orjson-3.10.7-cp311-none-win_amd64.whl", hash = "sha256:eb8d384a24778abf29afb8e41d68fdd9a156cf6e5390c04cc07bbc24b89e98b5"}, + {file = "orjson-3.10.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44a96f2d4c3af51bfac6bc4ef7b182aa33f2f054fd7f34cc0ee9a320d051d41f"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ac14cd57df0572453543f8f2575e2d01ae9e790c21f57627803f5e79b0d3c3"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bdbb61dcc365dd9be94e8f7df91975edc9364d6a78c8f7adb69c1cdff318ec93"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b48b3db6bb6e0a08fa8c83b47bc169623f801e5cc4f24442ab2b6617da3b5313"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23820a1563a1d386414fef15c249040042b8e5d07b40ab3fe3efbfbbcbcb8864"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0c6a008e91d10a2564edbb6ee5069a9e66df3fbe11c9a005cb411f441fd2c09"}, + {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d352ee8ac1926d6193f602cbe36b1643bbd1bbcb25e3c1a657a4390f3000c9a5"}, + {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2d9f990623f15c0ae7ac608103c33dfe1486d2ed974ac3f40b693bad1a22a7b"}, + {file = "orjson-3.10.7-cp312-none-win32.whl", hash = "sha256:7c4c17f8157bd520cdb7195f75ddbd31671997cbe10aee559c2d613592e7d7eb"}, + {file = "orjson-3.10.7-cp312-none-win_amd64.whl", hash = "sha256:1d9c0e733e02ada3ed6098a10a8ee0052dd55774de3d9110d29868d24b17faa1"}, + {file = "orjson-3.10.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:77d325ed866876c0fa6492598ec01fe30e803272a6e8b10e992288b009cbe149"}, + {file = "orjson-3.10.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ea2c232deedcb605e853ae1db2cc94f7390ac776743b699b50b071b02bea6fe"}, + {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3dcfbede6737fdbef3ce9c37af3fb6142e8e1ebc10336daa05872bfb1d87839c"}, + {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11748c135f281203f4ee695b7f80bb1358a82a63905f9f0b794769483ea854ad"}, + {file = "orjson-3.10.7-cp313-none-win32.whl", hash = "sha256:a7e19150d215c7a13f39eb787d84db274298d3f83d85463e61d277bbd7f401d2"}, + {file = "orjson-3.10.7-cp313-none-win_amd64.whl", hash = "sha256:eef44224729e9525d5261cc8d28d6b11cafc90e6bd0be2157bde69a52ec83024"}, + {file = "orjson-3.10.7-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6ea2b2258eff652c82652d5e0f02bd5e0463a6a52abb78e49ac288827aaa1469"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:430ee4d85841e1483d487e7b81401785a5dfd69db5de01314538f31f8fbf7ee1"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b6146e439af4c2472c56f8540d799a67a81226e11992008cb47e1267a9b3225"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:084e537806b458911137f76097e53ce7bf5806dda33ddf6aaa66a028f8d43a23"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829cf2195838e3f93b70fd3b4292156fc5e097aac3739859ac0dcc722b27ac0"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1193b2416cbad1a769f868b1749535d5da47626ac29445803dae7cc64b3f5c98"}, + {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4e6c3da13e5a57e4b3dca2de059f243ebec705857522f188f0180ae88badd354"}, + {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c31008598424dfbe52ce8c5b47e0752dca918a4fdc4a2a32004efd9fab41d866"}, + {file = "orjson-3.10.7-cp38-none-win32.whl", hash = "sha256:7122a99831f9e7fe977dc45784d3b2edc821c172d545e6420c375e5a935f5a1c"}, + {file = "orjson-3.10.7-cp38-none-win_amd64.whl", hash = "sha256:a763bc0e58504cc803739e7df040685816145a6f3c8a589787084b54ebc9f16e"}, + {file = "orjson-3.10.7-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e76be12658a6fa376fcd331b1ea4e58f5a06fd0220653450f0d415b8fd0fbe20"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed350d6978d28b92939bfeb1a0570c523f6170efc3f0a0ef1f1df287cd4f4960"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144888c76f8520e39bfa121b31fd637e18d4cc2f115727865fdf9fa325b10412"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09b2d92fd95ad2402188cf51573acde57eb269eddabaa60f69ea0d733e789fe9"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b24a579123fa884f3a3caadaed7b75eb5715ee2b17ab5c66ac97d29b18fe57f"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591bcfe7512353bd609875ab38050efe3d55e18934e2f18950c108334b4ff"}, + {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f4db56635b58cd1a200b0a23744ff44206ee6aa428185e2b6c4a65b3197abdcd"}, + {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0fa5886854673222618638c6df7718ea7fe2f3f2384c452c9ccedc70b4a510a5"}, + {file = "orjson-3.10.7-cp39-none-win32.whl", hash = "sha256:8272527d08450ab16eb405f47e0f4ef0e5ff5981c3d82afe0efd25dcbef2bcd2"}, + {file = "orjson-3.10.7-cp39-none-win_amd64.whl", hash = "sha256:974683d4618c0c7dbf4f69c95a979734bf183d0658611760017f6e70a145af58"}, + {file = "orjson-3.10.7.tar.gz", hash = "sha256:75ef0640403f945f3a1f9f6400686560dbfb0fb5b16589ad62cd477043c4eee3"}, ] [[package]] @@ -2050,13 +2179,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "posthog" -version = "3.5.0" +version = "3.6.3" description = "Integrate PostHog into any python application." optional = false python-versions = "*" files = [ - {file = "posthog-3.5.0-py2.py3-none-any.whl", hash = "sha256:3c672be7ba6f95d555ea207d4486c171d06657eb34b3ce25eb043bfe7b6b5b76"}, - {file = "posthog-3.5.0.tar.gz", hash = "sha256:8f7e3b2c6e8714d0c0c542a2109b83a7549f63b7113a133ab2763a89245ef2ef"}, + {file = "posthog-3.6.3-py2.py3-none-any.whl", hash = "sha256:cdd6c5d8919fd6158bbc4103bccc7129c712d8104dc33828be02bada7b6320a4"}, + {file = "posthog-3.6.3.tar.gz", hash = "sha256:6e1104a20638eab2b5d9cde6b6202a2900d67436237b3ac3521614ec17686701"}, ] [package.dependencies] @@ -2069,26 +2198,26 @@ six = ">=1.5" [package.extras] dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] sentry = ["django", "sentry-sdk"] -test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest", "pytest-timeout"] +test = ["coverage", "django", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest", "pytest-timeout"] [[package]] name = "protobuf" -version = "4.25.3" +version = "4.25.4" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "protobuf-4.25.3-cp310-abi3-win32.whl", hash = "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa"}, - {file = "protobuf-4.25.3-cp310-abi3-win_amd64.whl", hash = "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8"}, - {file = "protobuf-4.25.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c"}, - {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019"}, - {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d"}, - {file = "protobuf-4.25.3-cp38-cp38-win32.whl", hash = "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2"}, - {file = "protobuf-4.25.3-cp38-cp38-win_amd64.whl", hash = "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4"}, - {file = "protobuf-4.25.3-cp39-cp39-win32.whl", hash = "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4"}, - {file = "protobuf-4.25.3-cp39-cp39-win_amd64.whl", hash = "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c"}, - {file = "protobuf-4.25.3-py3-none-any.whl", hash = "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9"}, - {file = "protobuf-4.25.3.tar.gz", hash = "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c"}, + {file = "protobuf-4.25.4-cp310-abi3-win32.whl", hash = "sha256:db9fd45183e1a67722cafa5c1da3e85c6492a5383f127c86c4c4aa4845867dc4"}, + {file = "protobuf-4.25.4-cp310-abi3-win_amd64.whl", hash = "sha256:ba3d8504116a921af46499471c63a85260c1a5fc23333154a427a310e015d26d"}, + {file = "protobuf-4.25.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:eecd41bfc0e4b1bd3fa7909ed93dd14dd5567b98c941d6c1ad08fdcab3d6884b"}, + {file = "protobuf-4.25.4-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:4c8a70fdcb995dcf6c8966cfa3a29101916f7225e9afe3ced4395359955d3835"}, + {file = "protobuf-4.25.4-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:3319e073562e2515c6ddc643eb92ce20809f5d8f10fead3332f71c63be6a7040"}, + {file = "protobuf-4.25.4-cp38-cp38-win32.whl", hash = "sha256:7e372cbbda66a63ebca18f8ffaa6948455dfecc4e9c1029312f6c2edcd86c4e1"}, + {file = "protobuf-4.25.4-cp38-cp38-win_amd64.whl", hash = "sha256:051e97ce9fa6067a4546e75cb14f90cf0232dcb3e3d508c448b8d0e4265b61c1"}, + {file = "protobuf-4.25.4-cp39-cp39-win32.whl", hash = "sha256:90bf6fd378494eb698805bbbe7afe6c5d12c8e17fca817a646cd6a1818c696ca"}, + {file = "protobuf-4.25.4-cp39-cp39-win_amd64.whl", hash = "sha256:ac79a48d6b99dfed2729ccccee547b34a1d3d63289c71cef056653a846a2240f"}, + {file = "protobuf-4.25.4-py3-none-any.whl", hash = "sha256:bfbebc1c8e4793cfd58589acfb8a1026be0003e852b9da7db5a4285bde996978"}, + {file = "protobuf-4.25.4.tar.gz", hash = "sha256:0dc4a62cc4052a036ee2204d26fe4d835c62827c855c8a03f29fe6da146b380d"}, ] [[package]] @@ -2117,8 +2246,8 @@ files = [ annotated-types = ">=0.4.0" pydantic-core = "2.20.1" typing-extensions = [ - {version = ">=4.6.1", markers = "python_version < \"3.13\""}, {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, + {version = ">=4.6.1", markers = "python_version < \"3.13\""}, ] [package.extras] @@ -2238,13 +2367,13 @@ files = [ [[package]] name = "pytest" -version = "8.2.2" +version = "8.3.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"}, - {file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"}, + {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, + {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, ] [package.dependencies] @@ -2252,7 +2381,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=1.5,<2.0" +pluggy = ">=1.5,<2" tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] @@ -2330,150 +2459,152 @@ six = ">=1.5" [[package]] name = "pyyaml" -version = "6.0.1" +version = "6.0.2" description = "YAML parser and emitter for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] [[package]] name = "regex" -version = "2024.5.15" +version = "2024.7.24" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" files = [ - {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f"}, - {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6"}, - {file = "regex-2024.5.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0bd000c6e266927cb7a1bc39d55be95c4b4f65c5be53e659537537e019232b1"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eaa7ddaf517aa095fa8da0b5015c44d03da83f5bd49c87961e3c997daed0de7"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba68168daedb2c0bab7fd7e00ced5ba90aebf91024dea3c88ad5063c2a562cca"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e8d717bca3a6e2064fc3a08df5cbe366369f4b052dcd21b7416e6d71620dca1"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1337b7dbef9b2f71121cdbf1e97e40de33ff114801263b275aafd75303bd62b5"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9ebd0a36102fcad2f03696e8af4ae682793a5d30b46c647eaf280d6cfb32796"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9efa1a32ad3a3ea112224897cdaeb6aa00381627f567179c0314f7b65d354c62"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1595f2d10dff3d805e054ebdc41c124753631b6a471b976963c7b28543cf13b0"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b802512f3e1f480f41ab5f2cfc0e2f761f08a1f41092d6718868082fc0d27143"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a0981022dccabca811e8171f913de05720590c915b033b7e601f35ce4ea7019f"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:19068a6a79cf99a19ccefa44610491e9ca02c2be3305c7760d3831d38a467a6f"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b5269484f6126eee5e687785e83c6b60aad7663dafe842b34691157e5083e53"}, - {file = "regex-2024.5.15-cp310-cp310-win32.whl", hash = "sha256:ada150c5adfa8fbcbf321c30c751dc67d2f12f15bd183ffe4ec7cde351d945b3"}, - {file = "regex-2024.5.15-cp310-cp310-win_amd64.whl", hash = "sha256:ac394ff680fc46b97487941f5e6ae49a9f30ea41c6c6804832063f14b2a5a145"}, - {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f5b1dff3ad008dccf18e652283f5e5339d70bf8ba7c98bf848ac33db10f7bc7a"}, - {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c6a2b494a76983df8e3d3feea9b9ffdd558b247e60b92f877f93a1ff43d26656"}, - {file = "regex-2024.5.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a32b96f15c8ab2e7d27655969a23895eb799de3665fa94349f3b2fbfd547236f"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10002e86e6068d9e1c91eae8295ef690f02f913c57db120b58fdd35a6bb1af35"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec54d5afa89c19c6dd8541a133be51ee1017a38b412b1321ccb8d6ddbeb4cf7d"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10e4ce0dca9ae7a66e6089bb29355d4432caed736acae36fef0fdd7879f0b0cb"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e507ff1e74373c4d3038195fdd2af30d297b4f0950eeda6f515ae3d84a1770f"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1f059a4d795e646e1c37665b9d06062c62d0e8cc3c511fe01315973a6542e40"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0721931ad5fe0dda45d07f9820b90b2148ccdd8e45bb9e9b42a146cb4f695649"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:833616ddc75ad595dee848ad984d067f2f31be645d603e4d158bba656bbf516c"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:287eb7f54fc81546346207c533ad3c2c51a8d61075127d7f6d79aaf96cdee890"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:19dfb1c504781a136a80ecd1fff9f16dddf5bb43cec6871778c8a907a085bb3d"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:119af6e56dce35e8dfb5222573b50c89e5508d94d55713c75126b753f834de68"}, - {file = "regex-2024.5.15-cp311-cp311-win32.whl", hash = "sha256:1c1c174d6ec38d6c8a7504087358ce9213d4332f6293a94fbf5249992ba54efa"}, - {file = "regex-2024.5.15-cp311-cp311-win_amd64.whl", hash = "sha256:9e717956dcfd656f5055cc70996ee2cc82ac5149517fc8e1b60261b907740201"}, - {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:632b01153e5248c134007209b5c6348a544ce96c46005d8456de1d552455b014"}, - {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e64198f6b856d48192bf921421fdd8ad8eb35e179086e99e99f711957ffedd6e"}, - {file = "regex-2024.5.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68811ab14087b2f6e0fc0c2bae9ad689ea3584cad6917fc57be6a48bbd012c49"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ec0c2fea1e886a19c3bee0cd19d862b3aa75dcdfb42ebe8ed30708df64687a"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0c0c0003c10f54a591d220997dd27d953cd9ccc1a7294b40a4be5312be8797b"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2431b9e263af1953c55abbd3e2efca67ca80a3de8a0437cb58e2421f8184717a"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a605586358893b483976cffc1723fb0f83e526e8f14c6e6614e75919d9862cf"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391d7f7f1e409d192dba8bcd42d3e4cf9e598f3979cdaed6ab11288da88cb9f2"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9ff11639a8d98969c863d4617595eb5425fd12f7c5ef6621a4b74b71ed8726d5"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4eee78a04e6c67e8391edd4dad3279828dd66ac4b79570ec998e2155d2e59fd5"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8fe45aa3f4aa57faabbc9cb46a93363edd6197cbc43523daea044e9ff2fea83e"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d0a3d8d6acf0c78a1fff0e210d224b821081330b8524e3e2bc5a68ef6ab5803d"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c486b4106066d502495b3025a0a7251bf37ea9540433940a23419461ab9f2a80"}, - {file = "regex-2024.5.15-cp312-cp312-win32.whl", hash = "sha256:c49e15eac7c149f3670b3e27f1f28a2c1ddeccd3a2812cba953e01be2ab9b5fe"}, - {file = "regex-2024.5.15-cp312-cp312-win_amd64.whl", hash = "sha256:673b5a6da4557b975c6c90198588181029c60793835ce02f497ea817ff647cb2"}, - {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87e2a9c29e672fc65523fb47a90d429b70ef72b901b4e4b1bd42387caf0d6835"}, - {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3bea0ba8b73b71b37ac833a7f3fd53825924165da6a924aec78c13032f20850"}, - {file = "regex-2024.5.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bfc4f82cabe54f1e7f206fd3d30fda143f84a63fe7d64a81558d6e5f2e5aaba9"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5bb9425fe881d578aeca0b2b4b3d314ec88738706f66f219c194d67179337cb"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64c65783e96e563103d641760664125e91bd85d8e49566ee560ded4da0d3e704"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf2430df4148b08fb4324b848672514b1385ae3807651f3567871f130a728cc3"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5397de3219a8b08ae9540c48f602996aa6b0b65d5a61683e233af8605c42b0f2"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:455705d34b4154a80ead722f4f185b04c4237e8e8e33f265cd0798d0e44825fa"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2b6f1b3bb6f640c1a92be3bbfbcb18657b125b99ecf141fb3310b5282c7d4ed"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3ad070b823ca5890cab606c940522d05d3d22395d432f4aaaf9d5b1653e47ced"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5b5467acbfc153847d5adb21e21e29847bcb5870e65c94c9206d20eb4e99a384"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e6662686aeb633ad65be2a42b4cb00178b3fbf7b91878f9446075c404ada552f"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:2b4c884767504c0e2401babe8b5b7aea9148680d2e157fa28f01529d1f7fcf67"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3cd7874d57f13bf70078f1ff02b8b0aa48d5b9ed25fc48547516c6aba36f5741"}, - {file = "regex-2024.5.15-cp38-cp38-win32.whl", hash = "sha256:e4682f5ba31f475d58884045c1a97a860a007d44938c4c0895f41d64481edbc9"}, - {file = "regex-2024.5.15-cp38-cp38-win_amd64.whl", hash = "sha256:d99ceffa25ac45d150e30bd9ed14ec6039f2aad0ffa6bb87a5936f5782fc1569"}, - {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13cdaf31bed30a1e1c2453ef6015aa0983e1366fad2667657dbcac7b02f67133"}, - {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cac27dcaa821ca271855a32188aa61d12decb6fe45ffe3e722401fe61e323cd1"}, - {file = "regex-2024.5.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7dbe2467273b875ea2de38ded4eba86cbcbc9a1a6d0aa11dcf7bd2e67859c435"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f18a9a3513a99c4bef0e3efd4c4a5b11228b48aa80743be822b71e132ae4f5"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d347a741ea871c2e278fde6c48f85136c96b8659b632fb57a7d1ce1872547600"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1878b8301ed011704aea4c806a3cadbd76f84dece1ec09cc9e4dc934cfa5d4da"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4babf07ad476aaf7830d77000874d7611704a7fcf68c9c2ad151f5d94ae4bfc4"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35cb514e137cb3488bce23352af3e12fb0dbedd1ee6e60da053c69fb1b29cc6c"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cdd09d47c0b2efee9378679f8510ee6955d329424c659ab3c5e3a6edea696294"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:72d7a99cd6b8f958e85fc6ca5b37c4303294954eac1376535b03c2a43eb72629"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a094801d379ab20c2135529948cb84d417a2169b9bdceda2a36f5f10977ebc16"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c0c18345010870e58238790a6779a1219b4d97bd2e77e1140e8ee5d14df071aa"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:16093f563098448ff6b1fa68170e4acbef94e6b6a4e25e10eae8598bb1694b5d"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e38a7d4e8f633a33b4c7350fbd8bad3b70bf81439ac67ac38916c4a86b465456"}, - {file = "regex-2024.5.15-cp39-cp39-win32.whl", hash = "sha256:71a455a3c584a88f654b64feccc1e25876066c4f5ef26cd6dd711308aa538694"}, - {file = "regex-2024.5.15-cp39-cp39-win_amd64.whl", hash = "sha256:cab12877a9bdafde5500206d1020a584355a97884dfd388af3699e9137bf7388"}, - {file = "regex-2024.5.15.tar.gz", hash = "sha256:d3ee02d9e5f482cc8309134a91eeaacbdd2261ba111b0fef3748eeb4913e6a2c"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b0d3f567fafa0633aee87f08b9276c7062da9616931382993c03808bb68ce"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3426de3b91d1bc73249042742f45c2148803c111d1175b283270177fdf669024"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f273674b445bcb6e4409bf8d1be67bc4b58e8b46fd0d560055d515b8830063cd"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23acc72f0f4e1a9e6e9843d6328177ae3074b4182167e34119ec7233dfeccf53"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65fd3d2e228cae024c411c5ccdffae4c315271eee4a8b839291f84f796b34eca"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c414cbda77dbf13c3bc88b073a1a9f375c7b0cb5e115e15d4b73ec3a2fbc6f59"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7a89eef64b5455835f5ed30254ec19bf41f7541cd94f266ab7cbd463f00c41"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19c65b00d42804e3fbea9708f0937d157e53429a39b7c61253ff15670ff62cb5"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a5486ca56c8869070a966321d5ab416ff0f83f30e0e2da1ab48815c8d165d46"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f51f9556785e5a203713f5efd9c085b4a45aecd2a42573e2b5041881b588d1f"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a4997716674d36a82eab3e86f8fa77080a5d8d96a389a61ea1d0e3a94a582cf7"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c0abb5e4e8ce71a61d9446040c1e86d4e6d23f9097275c5bd49ed978755ff0fe"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:18300a1d78cf1290fa583cd8b7cde26ecb73e9f5916690cf9d42de569c89b1ce"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:416c0e4f56308f34cdb18c3f59849479dde5b19febdcd6e6fa4d04b6c31c9faa"}, + {file = "regex-2024.7.24-cp310-cp310-win32.whl", hash = "sha256:fb168b5924bef397b5ba13aabd8cf5df7d3d93f10218d7b925e360d436863f66"}, + {file = "regex-2024.7.24-cp310-cp310-win_amd64.whl", hash = "sha256:6b9fc7e9cc983e75e2518496ba1afc524227c163e43d706688a6bb9eca41617e"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:382281306e3adaaa7b8b9ebbb3ffb43358a7bbf585fa93821300a418bb975281"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4fdd1384619f406ad9037fe6b6eaa3de2749e2e12084abc80169e8e075377d3b"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3d974d24edb231446f708c455fd08f94c41c1ff4f04bcf06e5f36df5ef50b95a"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2ec4419a3fe6cf8a4795752596dfe0adb4aea40d3683a132bae9c30b81e8d73"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb563dd3aea54c797adf513eeec819c4213d7dbfc311874eb4fd28d10f2ff0f2"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45104baae8b9f67569f0f1dca5e1f1ed77a54ae1cd8b0b07aba89272710db61e"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:994448ee01864501912abf2bad9203bffc34158e80fe8bfb5b031f4f8e16da51"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fac296f99283ac232d8125be932c5cd7644084a30748fda013028c815ba3364"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e37e809b9303ec3a179085415cb5f418ecf65ec98cdfe34f6a078b46ef823ee"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:01b689e887f612610c869421241e075c02f2e3d1ae93a037cb14f88ab6a8934c"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f6442f0f0ff81775eaa5b05af8a0ffa1dda36e9cf6ec1e0d3d245e8564b684ce"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:871e3ab2838fbcb4e0865a6e01233975df3a15e6fce93b6f99d75cacbd9862d1"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c918b7a1e26b4ab40409820ddccc5d49871a82329640f5005f73572d5eaa9b5e"}, + {file = "regex-2024.7.24-cp311-cp311-win32.whl", hash = "sha256:2dfbb8baf8ba2c2b9aa2807f44ed272f0913eeeba002478c4577b8d29cde215c"}, + {file = "regex-2024.7.24-cp311-cp311-win_amd64.whl", hash = "sha256:538d30cd96ed7d1416d3956f94d54e426a8daf7c14527f6e0d6d425fcb4cca52"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fe4ebef608553aff8deb845c7f4f1d0740ff76fa672c011cc0bacb2a00fbde86"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:74007a5b25b7a678459f06559504f1eec2f0f17bca218c9d56f6a0a12bfffdad"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7df9ea48641da022c2a3c9c641650cd09f0cd15e8908bf931ad538f5ca7919c9"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a1141a1dcc32904c47f6846b040275c6e5de0bf73f17d7a409035d55b76f289"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80c811cfcb5c331237d9bad3bea2c391114588cf4131707e84d9493064d267f9"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7214477bf9bd195894cf24005b1e7b496f46833337b5dedb7b2a6e33f66d962c"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d55588cba7553f0b6ec33130bc3e114b355570b45785cebdc9daed8c637dd440"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:558a57cfc32adcf19d3f791f62b5ff564922942e389e3cfdb538a23d65a6b610"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a512eed9dfd4117110b1881ba9a59b31433caed0c4101b361f768e7bcbaf93c5"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:86b17ba823ea76256b1885652e3a141a99a5c4422f4a869189db328321b73799"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5eefee9bfe23f6df09ffb6dfb23809f4d74a78acef004aa904dc7c88b9944b05"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:731fcd76bbdbf225e2eb85b7c38da9633ad3073822f5ab32379381e8c3c12e94"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eaef80eac3b4cfbdd6de53c6e108b4c534c21ae055d1dbea2de6b3b8ff3def38"}, + {file = "regex-2024.7.24-cp312-cp312-win32.whl", hash = "sha256:185e029368d6f89f36e526764cf12bf8d6f0e3a2a7737da625a76f594bdfcbfc"}, + {file = "regex-2024.7.24-cp312-cp312-win_amd64.whl", hash = "sha256:2f1baff13cc2521bea83ab2528e7a80cbe0ebb2c6f0bfad15be7da3aed443908"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:66b4c0731a5c81921e938dcf1a88e978264e26e6ac4ec96a4d21ae0354581ae0"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:88ecc3afd7e776967fa16c80f974cb79399ee8dc6c96423321d6f7d4b881c92b"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64bd50cf16bcc54b274e20235bf8edbb64184a30e1e53873ff8d444e7ac656b2"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb462f0e346fcf41a901a126b50f8781e9a474d3927930f3490f38a6e73b6950"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a82465ebbc9b1c5c50738536fdfa7cab639a261a99b469c9d4c7dcbb2b3f1e57"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:68a8f8c046c6466ac61a36b65bb2395c74451df2ffb8458492ef49900efed293"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac8e84fff5d27420f3c1e879ce9929108e873667ec87e0c8eeb413a5311adfe"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba2537ef2163db9e6ccdbeb6f6424282ae4dea43177402152c67ef869cf3978b"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:43affe33137fcd679bdae93fb25924979517e011f9dea99163f80b82eadc7e53"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c9bb87fdf2ab2370f21e4d5636e5317775e5d51ff32ebff2cf389f71b9b13750"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:945352286a541406f99b2655c973852da7911b3f4264e010218bbc1cc73168f2"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:8bc593dcce679206b60a538c302d03c29b18e3d862609317cb560e18b66d10cf"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3f3b6ca8eae6d6c75a6cff525c8530c60e909a71a15e1b731723233331de4169"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c51edc3541e11fbe83f0c4d9412ef6c79f664a3745fab261457e84465ec9d5a8"}, + {file = "regex-2024.7.24-cp38-cp38-win32.whl", hash = "sha256:d0a07763776188b4db4c9c7fb1b8c494049f84659bb387b71c73bbc07f189e96"}, + {file = "regex-2024.7.24-cp38-cp38-win_amd64.whl", hash = "sha256:8fd5afd101dcf86a270d254364e0e8dddedebe6bd1ab9d5f732f274fa00499a5"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0ffe3f9d430cd37d8fa5632ff6fb36d5b24818c5c986893063b4e5bdb84cdf24"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25419b70ba00a16abc90ee5fce061228206173231f004437730b67ac77323f0d"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33e2614a7ce627f0cdf2ad104797d1f68342d967de3695678c0cb84f530709f8"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d33a0021893ede5969876052796165bab6006559ab845fd7b515a30abdd990dc"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04ce29e2c5fedf296b1a1b0acc1724ba93a36fb14031f3abfb7abda2806c1535"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b16582783f44fbca6fcf46f61347340c787d7530d88b4d590a397a47583f31dd"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:836d3cc225b3e8a943d0b02633fb2f28a66e281290302a79df0e1eaa984ff7c1"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:438d9f0f4bc64e8dea78274caa5af971ceff0f8771e1a2333620969936ba10be"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:973335b1624859cb0e52f96062a28aa18f3a5fc77a96e4a3d6d76e29811a0e6e"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c5e69fd3eb0b409432b537fe3c6f44ac089c458ab6b78dcec14478422879ec5f"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fbf8c2f00904eaf63ff37718eb13acf8e178cb940520e47b2f05027f5bb34ce3"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2757ace61bc4061b69af19e4689fa4416e1a04840f33b441034202b5cd02d4"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:44fc61b99035fd9b3b9453f1713234e5a7c92a04f3577252b45feefe1b327759"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:84c312cdf839e8b579f504afcd7b65f35d60b6285d892b19adea16355e8343c9"}, + {file = "regex-2024.7.24-cp39-cp39-win32.whl", hash = "sha256:ca5b2028c2f7af4e13fb9fc29b28d0ce767c38c7facdf64f6c2cd040413055f1"}, + {file = "regex-2024.7.24-cp39-cp39-win_amd64.whl", hash = "sha256:7c479f5ae937ec9985ecaf42e2e10631551d909f203e31308c12d703922742f9"}, + {file = "regex-2024.7.24.tar.gz", hash = "sha256:9cfd009eed1a46b27c14039ad5bbc5e71b6367c5b2e6d5f5da0ea91600817506"}, ] [[package]] @@ -2499,19 +2630,23 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "71.0.3" +version = "74.1.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-71.0.3-py3-none-any.whl", hash = "sha256:f501b6e6db709818dc76882582d9c516bf3b67b948864c5fa1d1624c09a49207"}, - {file = "setuptools-71.0.3.tar.gz", hash = "sha256:3d8531791a27056f4a38cd3e54084d8b1c4228ff9cf3f2d7dd075ec99f9fd70d"}, + {file = "setuptools-74.1.0-py3-none-any.whl", hash = "sha256:cee604bd76cc092355a4e43ec17aee5369095974f41f088676724dc6bc2c9ef8"}, + {file = "setuptools-74.1.0.tar.gz", hash = "sha256:bea195a800f510ba3a2bc65645c88b7e016fe36709fefc58a880c4ae8a0138d7"}, ] [package.extras] -core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "ordered-set (>=3.1.1)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (<7.4)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.10.0)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (<0.4)", "pytest-ruff (>=0.2.1)", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] +core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] [[package]] name = "six" @@ -2537,60 +2672,60 @@ files = [ [[package]] name = "sqlalchemy" -version = "2.0.31" +version = "2.0.32" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.31-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f2a213c1b699d3f5768a7272de720387ae0122f1becf0901ed6eaa1abd1baf6c"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9fea3d0884e82d1e33226935dac990b967bef21315cbcc894605db3441347443"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3ad7f221d8a69d32d197e5968d798217a4feebe30144986af71ada8c548e9fa"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2bee229715b6366f86a95d497c347c22ddffa2c7c96143b59a2aa5cc9eebbc"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cd5b94d4819c0c89280b7c6109c7b788a576084bf0a480ae17c227b0bc41e109"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:750900a471d39a7eeba57580b11983030517a1f512c2cb287d5ad0fcf3aebd58"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-win32.whl", hash = "sha256:7bd112be780928c7f493c1a192cd8c5fc2a2a7b52b790bc5a84203fb4381c6be"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-win_amd64.whl", hash = "sha256:5a48ac4d359f058474fadc2115f78a5cdac9988d4f99eae44917f36aa1476327"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f68470edd70c3ac3b6cd5c2a22a8daf18415203ca1b036aaeb9b0fb6f54e8298"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e2c38c2a4c5c634fe6c3c58a789712719fa1bf9b9d6ff5ebfce9a9e5b89c1ca"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd15026f77420eb2b324dcb93551ad9c5f22fab2c150c286ef1dc1160f110203"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2196208432deebdfe3b22185d46b08f00ac9d7b01284e168c212919891289396"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:352b2770097f41bff6029b280c0e03b217c2dcaddc40726f8f53ed58d8a85da4"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56d51ae825d20d604583f82c9527d285e9e6d14f9a5516463d9705dab20c3740"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-win32.whl", hash = "sha256:6e2622844551945db81c26a02f27d94145b561f9d4b0c39ce7bfd2fda5776dac"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-win_amd64.whl", hash = "sha256:ccaf1b0c90435b6e430f5dd30a5aede4764942a695552eb3a4ab74ed63c5b8d3"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3b74570d99126992d4b0f91fb87c586a574a5872651185de8297c6f90055ae42"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f77c4f042ad493cb8595e2f503c7a4fe44cd7bd59c7582fd6d78d7e7b8ec52c"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd1591329333daf94467e699e11015d9c944f44c94d2091f4ac493ced0119449"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74afabeeff415e35525bf7a4ecdab015f00e06456166a2eba7590e49f8db940e"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b9c01990d9015df2c6f818aa8f4297d42ee71c9502026bb074e713d496e26b67"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:66f63278db425838b3c2b1c596654b31939427016ba030e951b292e32b99553e"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-win32.whl", hash = "sha256:0b0f658414ee4e4b8cbcd4a9bb0fd743c5eeb81fc858ca517217a8013d282c96"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-win_amd64.whl", hash = "sha256:fa4b1af3e619b5b0b435e333f3967612db06351217c58bfb50cee5f003db2a5a"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f43e93057cf52a227eda401251c72b6fbe4756f35fa6bfebb5d73b86881e59b0"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d337bf94052856d1b330d5fcad44582a30c532a2463776e1651bd3294ee7e58b"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c06fb43a51ccdff3b4006aafee9fcf15f63f23c580675f7734245ceb6b6a9e05"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:b6e22630e89f0e8c12332b2b4c282cb01cf4da0d26795b7eae16702a608e7ca1"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:79a40771363c5e9f3a77f0e28b3302801db08040928146e6808b5b7a40749c88"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-win32.whl", hash = "sha256:501ff052229cb79dd4c49c402f6cb03b5a40ae4771efc8bb2bfac9f6c3d3508f"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-win_amd64.whl", hash = "sha256:597fec37c382a5442ffd471f66ce12d07d91b281fd474289356b1a0041bdf31d"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dc6d69f8829712a4fd799d2ac8d79bdeff651c2301b081fd5d3fe697bd5b4ab9"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:23b9fbb2f5dd9e630db70fbe47d963c7779e9c81830869bd7d137c2dc1ad05fb"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a21c97efcbb9f255d5c12a96ae14da873233597dfd00a3a0c4ce5b3e5e79704"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26a6a9837589c42b16693cf7bf836f5d42218f44d198f9343dd71d3164ceeeac"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc251477eae03c20fae8db9c1c23ea2ebc47331bcd73927cdcaecd02af98d3c3"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2fd17e3bb8058359fa61248c52c7b09a97cf3c820e54207a50af529876451808"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-win32.whl", hash = "sha256:c76c81c52e1e08f12f4b6a07af2b96b9b15ea67ccdd40ae17019f1c373faa227"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-win_amd64.whl", hash = "sha256:4b600e9a212ed59355813becbcf282cfda5c93678e15c25a0ef896b354423238"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b6cf796d9fcc9b37011d3f9936189b3c8074a02a4ed0c0fbbc126772c31a6d4"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:78fe11dbe37d92667c2c6e74379f75746dc947ee505555a0197cfba9a6d4f1a4"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc47dc6185a83c8100b37acda27658fe4dbd33b7d5e7324111f6521008ab4fe"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a41514c1a779e2aa9a19f67aaadeb5cbddf0b2b508843fcd7bafdf4c6864005"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:afb6dde6c11ea4525318e279cd93c8734b795ac8bb5dda0eedd9ebaca7fa23f1"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3f9faef422cfbb8fd53716cd14ba95e2ef655400235c3dfad1b5f467ba179c8c"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-win32.whl", hash = "sha256:fc6b14e8602f59c6ba893980bea96571dd0ed83d8ebb9c4479d9ed5425d562e9"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-win_amd64.whl", hash = "sha256:3cb8a66b167b033ec72c3812ffc8441d4e9f5f78f5e31e54dcd4c90a4ca5bebc"}, - {file = "SQLAlchemy-2.0.31-py3-none-any.whl", hash = "sha256:69f3e3c08867a8e4856e92d7afb618b95cdee18e0bc1647b77599722c9a28911"}, - {file = "SQLAlchemy-2.0.31.tar.gz", hash = "sha256:b607489dd4a54de56984a0c7656247504bd5523d9d0ba799aef59d4add009484"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0c9045ecc2e4db59bfc97b20516dfdf8e41d910ac6fb667ebd3a79ea54084619"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1467940318e4a860afd546ef61fefb98a14d935cd6817ed07a228c7f7c62f389"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5954463675cb15db8d4b521f3566a017c8789222b8316b1e6934c811018ee08b"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:167e7497035c303ae50651b351c28dc22a40bb98fbdb8468cdc971821b1ae533"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b27dfb676ac02529fb6e343b3a482303f16e6bc3a4d868b73935b8792edb52d0"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bf2360a5e0f7bd75fa80431bf8ebcfb920c9f885e7956c7efde89031695cafb8"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-win32.whl", hash = "sha256:306fe44e754a91cd9d600a6b070c1f2fadbb4a1a257b8781ccf33c7067fd3e4d"}, + {file = "SQLAlchemy-2.0.32-cp310-cp310-win_amd64.whl", hash = "sha256:99db65e6f3ab42e06c318f15c98f59a436f1c78179e6a6f40f529c8cc7100b22"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:21b053be28a8a414f2ddd401f1be8361e41032d2ef5884b2f31d31cb723e559f"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b178e875a7a25b5938b53b006598ee7645172fccafe1c291a706e93f48499ff5"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723a40ee2cc7ea653645bd4cf024326dea2076673fc9d3d33f20f6c81db83e1d"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:295ff8689544f7ee7e819529633d058bd458c1fd7f7e3eebd0f9268ebc56c2a0"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:49496b68cd190a147118af585173ee624114dfb2e0297558c460ad7495f9dfe2"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:acd9b73c5c15f0ec5ce18128b1fe9157ddd0044abc373e6ecd5ba376a7e5d961"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-win32.whl", hash = "sha256:9365a3da32dabd3e69e06b972b1ffb0c89668994c7e8e75ce21d3e5e69ddef28"}, + {file = "SQLAlchemy-2.0.32-cp311-cp311-win_amd64.whl", hash = "sha256:8bd63d051f4f313b102a2af1cbc8b80f061bf78f3d5bd0843ff70b5859e27924"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6bab3db192a0c35e3c9d1560eb8332463e29e5507dbd822e29a0a3c48c0a8d92"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:19d98f4f58b13900d8dec4ed09dd09ef292208ee44cc9c2fe01c1f0a2fe440e9"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd33c61513cb1b7371fd40cf221256456d26a56284e7d19d1f0b9f1eb7dd7e8"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6ba0497c1d066dd004e0f02a92426ca2df20fac08728d03f67f6960271feec"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2b6be53e4fde0065524f1a0a7929b10e9280987b320716c1509478b712a7688c"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:916a798f62f410c0b80b63683c8061f5ebe237b0f4ad778739304253353bc1cb"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-win32.whl", hash = "sha256:31983018b74908ebc6c996a16ad3690301a23befb643093fcfe85efd292e384d"}, + {file = "SQLAlchemy-2.0.32-cp312-cp312-win_amd64.whl", hash = "sha256:4363ed245a6231f2e2957cccdda3c776265a75851f4753c60f3004b90e69bfeb"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b8afd5b26570bf41c35c0121801479958b4446751a3971fb9a480c1afd85558e"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c750987fc876813f27b60d619b987b057eb4896b81117f73bb8d9918c14f1cad"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ada0102afff4890f651ed91120c1120065663506b760da4e7823913ebd3258be"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:78c03d0f8a5ab4f3034c0e8482cfcc415a3ec6193491cfa1c643ed707d476f16"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:3bd1cae7519283ff525e64645ebd7a3e0283f3c038f461ecc1c7b040a0c932a1"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-win32.whl", hash = "sha256:01438ebcdc566d58c93af0171c74ec28efe6a29184b773e378a385e6215389da"}, + {file = "SQLAlchemy-2.0.32-cp37-cp37m-win_amd64.whl", hash = "sha256:4979dc80fbbc9d2ef569e71e0896990bc94df2b9fdbd878290bd129b65ab579c"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c742be912f57586ac43af38b3848f7688863a403dfb220193a882ea60e1ec3a"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:62e23d0ac103bcf1c5555b6c88c114089587bc64d048fef5bbdb58dfd26f96da"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:251f0d1108aab8ea7b9aadbd07fb47fb8e3a5838dde34aa95a3349876b5a1f1d"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ef18a84e5116340e38eca3e7f9eeaaef62738891422e7c2a0b80feab165905f"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3eb6a97a1d39976f360b10ff208c73afb6a4de86dd2a6212ddf65c4a6a2347d5"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0c1c9b673d21477cec17ab10bc4decb1322843ba35b481585facd88203754fc5"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-win32.whl", hash = "sha256:c41a2b9ca80ee555decc605bd3c4520cc6fef9abde8fd66b1cf65126a6922d65"}, + {file = "SQLAlchemy-2.0.32-cp38-cp38-win_amd64.whl", hash = "sha256:8a37e4d265033c897892279e8adf505c8b6b4075f2b40d77afb31f7185cd6ecd"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:52fec964fba2ef46476312a03ec8c425956b05c20220a1a03703537824b5e8e1"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:328429aecaba2aee3d71e11f2477c14eec5990fb6d0e884107935f7fb6001632"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85a01b5599e790e76ac3fe3aa2f26e1feba56270023d6afd5550ed63c68552b3"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf04784797dcdf4c0aa952c8d234fa01974c4729db55c45732520ce12dd95b4"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4488120becf9b71b3ac718f4138269a6be99a42fe023ec457896ba4f80749525"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:14e09e083a5796d513918a66f3d6aedbc131e39e80875afe81d98a03312889e6"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-win32.whl", hash = "sha256:0d322cc9c9b2154ba7e82f7bf25ecc7c36fbe2d82e2933b3642fc095a52cfc78"}, + {file = "SQLAlchemy-2.0.32-cp39-cp39-win_amd64.whl", hash = "sha256:7dd8583df2f98dea28b5cd53a1beac963f4f9d087888d75f22fcc93a07cf8d84"}, + {file = "SQLAlchemy-2.0.32-py3-none-any.whl", hash = "sha256:e567a8793a692451f706b363ccf3c45e056b67d90ead58c3bc9471af5d212202"}, + {file = "SQLAlchemy-2.0.32.tar.gz", hash = "sha256:c1b88cc8b02b6a5f0efb0345a03672d4c897dc7d92585176f88c67346f565ea8"}, ] [package.dependencies] @@ -2705,111 +2840,111 @@ blobfile = ["blobfile (>=2)"] [[package]] name = "tokenizers" -version = "0.19.1" +version = "0.20.0" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "tokenizers-0.19.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:952078130b3d101e05ecfc7fc3640282d74ed26bcf691400f872563fca15ac97"}, - {file = "tokenizers-0.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:82c8b8063de6c0468f08e82c4e198763e7b97aabfe573fd4cf7b33930ca4df77"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f03727225feaf340ceeb7e00604825addef622d551cbd46b7b775ac834c1e1c4"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:453e4422efdfc9c6b6bf2eae00d5e323f263fff62b29a8c9cd526c5003f3f642"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:02e81bf089ebf0e7f4df34fa0207519f07e66d8491d963618252f2e0729e0b46"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b07c538ba956843833fee1190cf769c60dc62e1cf934ed50d77d5502194d63b1"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28cab1582e0eec38b1f38c1c1fb2e56bce5dc180acb1724574fc5f47da2a4fe"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b01afb7193d47439f091cd8f070a1ced347ad0f9144952a30a41836902fe09e"}, - {file = "tokenizers-0.19.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7fb297edec6c6841ab2e4e8f357209519188e4a59b557ea4fafcf4691d1b4c98"}, - {file = "tokenizers-0.19.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e8a3dd055e515df7054378dc9d6fa8c8c34e1f32777fb9a01fea81496b3f9d3"}, - {file = "tokenizers-0.19.1-cp310-none-win32.whl", hash = "sha256:7ff898780a155ea053f5d934925f3902be2ed1f4d916461e1a93019cc7250837"}, - {file = "tokenizers-0.19.1-cp310-none-win_amd64.whl", hash = "sha256:bea6f9947e9419c2fda21ae6c32871e3d398cba549b93f4a65a2d369662d9403"}, - {file = "tokenizers-0.19.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5c88d1481f1882c2e53e6bb06491e474e420d9ac7bdff172610c4f9ad3898059"}, - {file = "tokenizers-0.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ddf672ed719b4ed82b51499100f5417d7d9f6fb05a65e232249268f35de5ed14"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dadc509cc8a9fe460bd274c0e16ac4184d0958117cf026e0ea8b32b438171594"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfedf31824ca4915b511b03441784ff640378191918264268e6923da48104acc"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac11016d0a04aa6487b1513a3a36e7bee7eec0e5d30057c9c0408067345c48d2"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76951121890fea8330d3a0df9a954b3f2a37e3ec20e5b0530e9a0044ca2e11fe"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b342d2ce8fc8d00f376af068e3274e2e8649562e3bc6ae4a67784ded6b99428d"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16ff18907f4909dca9b076b9c2d899114dd6abceeb074eca0c93e2353f943aa"}, - {file = "tokenizers-0.19.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:706a37cc5332f85f26efbe2bdc9ef8a9b372b77e4645331a405073e4b3a8c1c6"}, - {file = "tokenizers-0.19.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:16baac68651701364b0289979ecec728546133e8e8fe38f66fe48ad07996b88b"}, - {file = "tokenizers-0.19.1-cp311-none-win32.whl", hash = "sha256:9ed240c56b4403e22b9584ee37d87b8bfa14865134e3e1c3fb4b2c42fafd3256"}, - {file = "tokenizers-0.19.1-cp311-none-win_amd64.whl", hash = "sha256:ad57d59341710b94a7d9dbea13f5c1e7d76fd8d9bcd944a7a6ab0b0da6e0cc66"}, - {file = "tokenizers-0.19.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:621d670e1b1c281a1c9698ed89451395d318802ff88d1fc1accff0867a06f153"}, - {file = "tokenizers-0.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d924204a3dbe50b75630bd16f821ebda6a5f729928df30f582fb5aade90c818a"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4f3fefdc0446b1a1e6d81cd4c07088ac015665d2e812f6dbba4a06267d1a2c95"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9620b78e0b2d52ef07b0d428323fb34e8ea1219c5eac98c2596311f20f1f9266"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04ce49e82d100594715ac1b2ce87d1a36e61891a91de774755f743babcd0dd52"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5c2ff13d157afe413bf7e25789879dd463e5a4abfb529a2d8f8473d8042e28f"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3174c76efd9d08f836bfccaca7cfec3f4d1c0a4cf3acbc7236ad577cc423c840"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c9d5b6c0e7a1e979bec10ff960fae925e947aab95619a6fdb4c1d8ff3708ce3"}, - {file = "tokenizers-0.19.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a179856d1caee06577220ebcfa332af046d576fb73454b8f4d4b0ba8324423ea"}, - {file = "tokenizers-0.19.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:952b80dac1a6492170f8c2429bd11fcaa14377e097d12a1dbe0ef2fb2241e16c"}, - {file = "tokenizers-0.19.1-cp312-none-win32.whl", hash = "sha256:01d62812454c188306755c94755465505836fd616f75067abcae529c35edeb57"}, - {file = "tokenizers-0.19.1-cp312-none-win_amd64.whl", hash = "sha256:b70bfbe3a82d3e3fb2a5e9b22a39f8d1740c96c68b6ace0086b39074f08ab89a"}, - {file = "tokenizers-0.19.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:bb9dfe7dae85bc6119d705a76dc068c062b8b575abe3595e3c6276480e67e3f1"}, - {file = "tokenizers-0.19.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:1f0360cbea28ea99944ac089c00de7b2e3e1c58f479fb8613b6d8d511ce98267"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:71e3ec71f0e78780851fef28c2a9babe20270404c921b756d7c532d280349214"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b82931fa619dbad979c0ee8e54dd5278acc418209cc897e42fac041f5366d626"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e8ff5b90eabdcdaa19af697885f70fe0b714ce16709cf43d4952f1f85299e73a"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e742d76ad84acbdb1a8e4694f915fe59ff6edc381c97d6dfdd054954e3478ad4"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d8c5d59d7b59885eab559d5bc082b2985555a54cda04dda4c65528d90ad252ad"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b2da5c32ed869bebd990c9420df49813709e953674c0722ff471a116d97b22d"}, - {file = "tokenizers-0.19.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:638e43936cc8b2cbb9f9d8dde0fe5e7e30766a3318d2342999ae27f68fdc9bd6"}, - {file = "tokenizers-0.19.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:78e769eb3b2c79687d9cb0f89ef77223e8e279b75c0a968e637ca7043a84463f"}, - {file = "tokenizers-0.19.1-cp37-none-win32.whl", hash = "sha256:72791f9bb1ca78e3ae525d4782e85272c63faaef9940d92142aa3eb79f3407a3"}, - {file = "tokenizers-0.19.1-cp37-none-win_amd64.whl", hash = "sha256:f3bbb7a0c5fcb692950b041ae11067ac54826204318922da754f908d95619fbc"}, - {file = "tokenizers-0.19.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:07f9295349bbbcedae8cefdbcfa7f686aa420be8aca5d4f7d1ae6016c128c0c5"}, - {file = "tokenizers-0.19.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10a707cc6c4b6b183ec5dbfc5c34f3064e18cf62b4a938cb41699e33a99e03c1"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6309271f57b397aa0aff0cbbe632ca9d70430839ca3178bf0f06f825924eca22"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ad23d37d68cf00d54af184586d79b84075ada495e7c5c0f601f051b162112dc"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:427c4f0f3df9109314d4f75b8d1f65d9477033e67ffaec4bca53293d3aca286d"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e83a31c9cf181a0a3ef0abad2b5f6b43399faf5da7e696196ddd110d332519ee"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c27b99889bd58b7e301468c0838c5ed75e60c66df0d4db80c08f43462f82e0d3"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bac0b0eb952412b0b196ca7a40e7dce4ed6f6926489313414010f2e6b9ec2adf"}, - {file = "tokenizers-0.19.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8a6298bde623725ca31c9035a04bf2ef63208d266acd2bed8c2cb7d2b7d53ce6"}, - {file = "tokenizers-0.19.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:08a44864e42fa6d7d76d7be4bec62c9982f6f6248b4aa42f7302aa01e0abfd26"}, - {file = "tokenizers-0.19.1-cp38-none-win32.whl", hash = "sha256:1de5bc8652252d9357a666e609cb1453d4f8e160eb1fb2830ee369dd658e8975"}, - {file = "tokenizers-0.19.1-cp38-none-win_amd64.whl", hash = "sha256:0bcce02bf1ad9882345b34d5bd25ed4949a480cf0e656bbd468f4d8986f7a3f1"}, - {file = "tokenizers-0.19.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0b9394bd204842a2a1fd37fe29935353742be4a3460b6ccbaefa93f58a8df43d"}, - {file = "tokenizers-0.19.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4692ab92f91b87769d950ca14dbb61f8a9ef36a62f94bad6c82cc84a51f76f6a"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6258c2ef6f06259f70a682491c78561d492e885adeaf9f64f5389f78aa49a051"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c85cf76561fbd01e0d9ea2d1cbe711a65400092bc52b5242b16cfd22e51f0c58"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:670b802d4d82bbbb832ddb0d41df7015b3e549714c0e77f9bed3e74d42400fbe"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:85aa3ab4b03d5e99fdd31660872249df5e855334b6c333e0bc13032ff4469c4a"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbf001afbbed111a79ca47d75941e9e5361297a87d186cbfc11ed45e30b5daba"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c89aa46c269e4e70c4d4f9d6bc644fcc39bb409cb2a81227923404dd6f5227"}, - {file = "tokenizers-0.19.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:39c1ec76ea1027438fafe16ecb0fb84795e62e9d643444c1090179e63808c69d"}, - {file = "tokenizers-0.19.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c2a0d47a89b48d7daa241e004e71fb5a50533718897a4cd6235cb846d511a478"}, - {file = "tokenizers-0.19.1-cp39-none-win32.whl", hash = "sha256:61b7fe8886f2e104d4caf9218b157b106207e0f2a4905c9c7ac98890688aabeb"}, - {file = "tokenizers-0.19.1-cp39-none-win_amd64.whl", hash = "sha256:f97660f6c43efd3e0bfd3f2e3e5615bf215680bad6ee3d469df6454b8c6e8256"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3b11853f17b54c2fe47742c56d8a33bf49ce31caf531e87ac0d7d13d327c9334"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d26194ef6c13302f446d39972aaa36a1dda6450bc8949f5eb4c27f51191375bd"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e8d1ed93beda54bbd6131a2cb363a576eac746d5c26ba5b7556bc6f964425594"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca407133536f19bdec44b3da117ef0d12e43f6d4b56ac4c765f37eca501c7bda"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce05fde79d2bc2e46ac08aacbc142bead21614d937aac950be88dc79f9db9022"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:35583cd46d16f07c054efd18b5d46af4a2f070a2dd0a47914e66f3ff5efb2b1e"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:43350270bfc16b06ad3f6f07eab21f089adb835544417afda0f83256a8bf8b75"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b4399b59d1af5645bcee2072a463318114c39b8547437a7c2d6a186a1b5a0e2d"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6852c5b2a853b8b0ddc5993cd4f33bfffdca4fcc5d52f89dd4b8eada99379285"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcd266ae85c3d39df2f7e7d0e07f6c41a55e9a3123bb11f854412952deacd828"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecb2651956eea2aa0a2d099434134b1b68f1c31f9a5084d6d53f08ed43d45ff2"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:b279ab506ec4445166ac476fb4d3cc383accde1ea152998509a94d82547c8e2a"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:89183e55fb86e61d848ff83753f64cded119f5d6e1f553d14ffee3700d0a4a49"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2edbc75744235eea94d595a8b70fe279dd42f3296f76d5a86dde1d46e35f574"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:0e64bfde9a723274e9a71630c3e9494ed7b4c0f76a1faacf7fe294cd26f7ae7c"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b5ca92bfa717759c052e345770792d02d1f43b06f9e790ca0a1db62838816f3"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f8a20266e695ec9d7a946a019c1d5ca4eddb6613d4f466888eee04f16eedb85"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63c38f45d8f2a2ec0f3a20073cccb335b9f99f73b3c69483cd52ebc75369d8a1"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dd26e3afe8a7b61422df3176e06664503d3f5973b94f45d5c45987e1cb711876"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:eddd5783a4a6309ce23432353cdb36220e25cbb779bfa9122320666508b44b88"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:56ae39d4036b753994476a1b935584071093b55c7a72e3b8288e68c313ca26e7"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f9939ca7e58c2758c01b40324a59c034ce0cebad18e0d4563a9b1beab3018243"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c330c0eb815d212893c67a032e9dc1b38a803eccb32f3e8172c19cc69fbb439"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec11802450a2487cdf0e634b750a04cbdc1c4d066b97d94ce7dd2cb51ebb325b"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b718f316b596f36e1dae097a7d5b91fc5b85e90bf08b01ff139bd8953b25af"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ed69af290c2b65169f0ba9034d1dc39a5db9459b32f1dd8b5f3f32a3fcf06eab"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f8a9c828277133af13f3859d1b6bf1c3cb6e9e1637df0e45312e6b7c2e622b1f"}, - {file = "tokenizers-0.19.1.tar.gz", hash = "sha256:ee59e6680ed0fdbe6b724cf38bd70400a0c1dd623b07ac729087270caeac88e3"}, + {file = "tokenizers-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6cff5c5e37c41bc5faa519d6f3df0679e4b37da54ea1f42121719c5e2b4905c0"}, + {file = "tokenizers-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:62a56bf75c27443432456f4ca5ca055befa95e25be8a28141cc495cac8ae4d6d"}, + {file = "tokenizers-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68cc7de6a63f09c4a86909c2597b995aa66e19df852a23aea894929c74369929"}, + {file = "tokenizers-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:053c37ecee482cc958fdee53af3c6534286a86f5d35aac476f7c246830e53ae5"}, + {file = "tokenizers-0.20.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d7074aaabc151a6363fa03db5493fc95b423b2a1874456783989e96d541c7b6"}, + {file = "tokenizers-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a11435780f2acd89e8fefe5e81cecf01776f6edb9b3ac95bcb76baee76b30b90"}, + {file = "tokenizers-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9a81cd2712973b007d84268d45fc3f6f90a79c31dfe7f1925e6732f8d2959987"}, + {file = "tokenizers-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7dfd796ab9d909f76fb93080e1c7c8309f196ecb316eb130718cd5e34231c69"}, + {file = "tokenizers-0.20.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8029ad2aa8cb00605c9374566034c1cc1b15130713e0eb5afcef6cface8255c9"}, + {file = "tokenizers-0.20.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ca4d54260ebe97d59dfa9a30baa20d0c4dd9137d99a8801700055c561145c24e"}, + {file = "tokenizers-0.20.0-cp310-none-win32.whl", hash = "sha256:95ee16b57cec11b86a7940174ec5197d506439b0f415ab3859f254b1dffe9df0"}, + {file = "tokenizers-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:0a61a11e93eeadbf02aea082ffc75241c4198e0608bbbac4f65a9026851dcf37"}, + {file = "tokenizers-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6636b798b3c4d6c9b1af1a918bd07c867808e5a21c64324e95318a237e6366c3"}, + {file = "tokenizers-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ec603e42eaf499ffd58b9258162add948717cf21372458132f14e13a6bc7172"}, + {file = "tokenizers-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cce124264903a8ea6f8f48e1cc7669e5ef638c18bd4ab0a88769d5f92debdf7f"}, + {file = "tokenizers-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07bbeba0231cf8de07aa6b9e33e9779ff103d47042eeeb859a8c432e3292fb98"}, + {file = "tokenizers-0.20.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:06c0ca8397b35d38b83a44a9c6929790c1692957d88541df061cb34d82ebbf08"}, + {file = "tokenizers-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ca6557ac3b83d912dfbb1f70ab56bd4b0594043916688e906ede09f42e192401"}, + {file = "tokenizers-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a5ad94c9e80ac6098328bee2e3264dbced4c6faa34429994d473f795ec58ef4"}, + {file = "tokenizers-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b5c7f906ee6bec30a9dc20268a8b80f3b9584de1c9f051671cb057dc6ce28f6"}, + {file = "tokenizers-0.20.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:31e087e9ee1b8f075b002bfee257e858dc695f955b43903e1bb4aa9f170e37fe"}, + {file = "tokenizers-0.20.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c3124fb6f3346cb3d8d775375d3b429bf4dcfc24f739822702009d20a4297990"}, + {file = "tokenizers-0.20.0-cp311-none-win32.whl", hash = "sha256:a4bb8b40ba9eefa621fdcabf04a74aa6038ae3be0c614c6458bd91a4697a452f"}, + {file = "tokenizers-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:2b709d371f1fe60a28ef0c5c67815952d455ca7f34dbe7197eaaed3cc54b658e"}, + {file = "tokenizers-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:15c81a17d0d66f4987c6ca16f4bea7ec253b8c7ed1bb00fdc5d038b1bb56e714"}, + {file = "tokenizers-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6a531cdf1fb6dc41c984c785a3b299cb0586de0b35683842a3afbb1e5207f910"}, + {file = "tokenizers-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06caabeb4587f8404e0cd9d40f458e9cba3e815c8155a38e579a74ff3e2a4301"}, + {file = "tokenizers-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8768f964f23f5b9f50546c0369c75ab3262de926983888bbe8b98be05392a79c"}, + {file = "tokenizers-0.20.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:626403860152c816f97b649fd279bd622c3d417678c93b4b1a8909b6380b69a8"}, + {file = "tokenizers-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c1b88fa9e5ff062326f4bf82681da5a96fca7104d921a6bd7b1e6fcf224af26"}, + {file = "tokenizers-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7e559436a07dc547f22ce1101f26d8b2fad387e28ec8e7e1e3b11695d681d8"}, + {file = "tokenizers-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48afb75e50449848964e4a67b0da01261dd3aa8df8daecf10db8fd7f5b076eb"}, + {file = "tokenizers-0.20.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:baf5d0e1ff44710a95eefc196dd87666ffc609fd447c5e5b68272a7c3d342a1d"}, + {file = "tokenizers-0.20.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e5e56df0e8ed23ba60ae3848c3f069a0710c4b197218fe4f89e27eba38510768"}, + {file = "tokenizers-0.20.0-cp312-none-win32.whl", hash = "sha256:ec53e5ecc142a82432f9c6c677dbbe5a2bfee92b8abf409a9ecb0d425ee0ce75"}, + {file = "tokenizers-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:f18661ece72e39c0dfaa174d6223248a15b457dbd4b0fc07809b8e6d3ca1a234"}, + {file = "tokenizers-0.20.0-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:f7065b1084d8d1a03dc89d9aad69bcbc8415d4bc123c367063eb32958cd85054"}, + {file = "tokenizers-0.20.0-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:e5d4069e4714e3f7ba0a4d3d44f9d84a432cd4e4aa85c3d7dd1f51440f12e4a1"}, + {file = "tokenizers-0.20.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:799b808529e54b7e1a36350bda2aeb470e8390e484d3e98c10395cee61d4e3c6"}, + {file = "tokenizers-0.20.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f9baa027cc8a281ad5f7725a93c204d7a46986f88edbe8ef7357f40a23fb9c7"}, + {file = "tokenizers-0.20.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:010ec7f3f7a96adc4c2a34a3ada41fa14b4b936b5628b4ff7b33791258646c6b"}, + {file = "tokenizers-0.20.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98d88f06155335b14fd78e32ee28ca5b2eb30fced4614e06eb14ae5f7fba24ed"}, + {file = "tokenizers-0.20.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e13eb000ef540c2280758d1b9cfa5fe424b0424ae4458f440e6340a4f18b2638"}, + {file = "tokenizers-0.20.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fab3cf066ff426f7e6d70435dc28a9ff01b2747be83810e397cba106f39430b0"}, + {file = "tokenizers-0.20.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:39fa3761b30a89368f322e5daf4130dce8495b79ad831f370449cdacfb0c0d37"}, + {file = "tokenizers-0.20.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c8da0fba4d179ddf2607821575998df3c294aa59aa8df5a6646dc64bc7352bce"}, + {file = "tokenizers-0.20.0-cp37-none-win32.whl", hash = "sha256:fada996d6da8cf213f6e3c91c12297ad4f6cdf7a85c2fadcd05ec32fa6846fcd"}, + {file = "tokenizers-0.20.0-cp37-none-win_amd64.whl", hash = "sha256:7d29aad702279e0760c265fcae832e89349078e3418dd329732d4503259fd6bd"}, + {file = "tokenizers-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:099c68207f3ef0227ecb6f80ab98ea74de559f7b124adc7b17778af0250ee90a"}, + {file = "tokenizers-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:68012d8a8cddb2eab3880870d7e2086cb359c7f7a2b03f5795044f5abff4e850"}, + {file = "tokenizers-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9253bdd209c6aee168deca7d0e780581bf303e0058f268f9bb06859379de19b6"}, + {file = "tokenizers-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f868600ddbcb0545905ed075eb7218a0756bf6c09dae7528ea2f8436ebd2c93"}, + {file = "tokenizers-0.20.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a9643d9c8c5f99b6aba43fd10034f77cc6c22c31f496d2f0ee183047d948fa0"}, + {file = "tokenizers-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c375c6a889aeab44734028bc65cc070acf93ccb0f9368be42b67a98e1063d3f6"}, + {file = "tokenizers-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e359f852328e254f070bbd09a19a568421d23388f04aad9f2fb7da7704c7228d"}, + {file = "tokenizers-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d98b01a309d4387f3b1c1dd68a8b8136af50376cf146c1b7e8d8ead217a5be4b"}, + {file = "tokenizers-0.20.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:459f7537119554c2899067dec1ac74a00d02beef6558f4ee2e99513bf6d568af"}, + {file = "tokenizers-0.20.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:392b87ec89452628c045c9f2a88bc2a827f4c79e7d84bc3b72752b74c2581f70"}, + {file = "tokenizers-0.20.0-cp38-none-win32.whl", hash = "sha256:55a393f893d2ed4dd95a1553c2e42d4d4086878266f437b03590d3f81984c4fe"}, + {file = "tokenizers-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:30ffe33c5c2f2aab8e9a3340d0110dd9f7ace7eec7362e20a697802306bd8068"}, + {file = "tokenizers-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:aa2d4a6fed2a7e3f860c7fc9d48764bb30f2649d83915d66150d6340e06742b8"}, + {file = "tokenizers-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b5ef0f814084a897e9071fc4a868595f018c5c92889197bdc4bf19018769b148"}, + {file = "tokenizers-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc1e1b791e8c3bf4c4f265f180dadaff1c957bf27129e16fdd5e5d43c2d3762c"}, + {file = "tokenizers-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b69e55e481459c07885263743a0d3c18d52db19bae8226a19bcca4aaa213fff"}, + {file = "tokenizers-0.20.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4806b4d82e27a2512bc23057b2986bc8b85824914286975b84d8105ff40d03d9"}, + {file = "tokenizers-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9859e9ef13adf5a473ccab39d31bff9c550606ae3c784bf772b40f615742a24f"}, + {file = "tokenizers-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef703efedf4c20488a8eb17637b55973745b27997ff87bad88ed499b397d1144"}, + {file = "tokenizers-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6eec0061bab94b1841ab87d10831fdf1b48ebaed60e6d66d66dbe1d873f92bf5"}, + {file = "tokenizers-0.20.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:980f3d0d7e73f845b69087f29a63c11c7eb924c4ad6b358da60f3db4cf24bdb4"}, + {file = "tokenizers-0.20.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7c157550a2f3851b29d7fdc9dc059fcf81ff0c0fc49a1e5173a89d533ed043fa"}, + {file = "tokenizers-0.20.0-cp39-none-win32.whl", hash = "sha256:8a3d2f4d08608ec4f9895ec25b4b36a97f05812543190a5f2c3cd19e8f041e5a"}, + {file = "tokenizers-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:d90188d12afd0c75e537f9a1d92f9c7375650188ee4f48fdc76f9e38afbd2251"}, + {file = "tokenizers-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d68e15f1815357b059ec266062340c343ea7f98f7f330602df81ffa3474b6122"}, + {file = "tokenizers-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:23f9ecec637b9bc80da5f703808d29ed5329e56b5aa8d791d1088014f48afadc"}, + {file = "tokenizers-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f830b318ee599e3d0665b3e325f85bc75ee2d2ca6285f52e439dc22b64691580"}, + {file = "tokenizers-0.20.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3dc750def789cb1de1b5a37657919545e1d9ffa667658b3fa9cb7862407a1b8"}, + {file = "tokenizers-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e26e6c755ae884c2ea6135cd215bdd0fccafe4ee62405014b8c3cd19954e3ab9"}, + {file = "tokenizers-0.20.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:a1158c7174f427182e08baa2a8ded2940f2b4a3e94969a85cc9cfd16004cbcea"}, + {file = "tokenizers-0.20.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:6324826287a3fc198898d3dcf758fe4a8479e42d6039f4c59e2cedd3cf92f64e"}, + {file = "tokenizers-0.20.0-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7d8653149405bb0c16feaf9cfee327fdb6aaef9dc2998349fec686f35e81c4e2"}, + {file = "tokenizers-0.20.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a2dc1e402a155e97309287ca085c80eb1b7fab8ae91527d3b729181639fa51"}, + {file = "tokenizers-0.20.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07bef67b20aa6e5f7868c42c7c5eae4d24f856274a464ae62e47a0f2cccec3da"}, + {file = "tokenizers-0.20.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da06e397182ff53789c506c7833220c192952c57e1581a53f503d8d953e2d67e"}, + {file = "tokenizers-0.20.0-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:302f7e11a14814028b7fc88c45a41f1bbe9b5b35fd76d6869558d1d1809baa43"}, + {file = "tokenizers-0.20.0-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:055ec46e807b875589dfbe3d9259f9a6ee43394fb553b03b3d1e9541662dbf25"}, + {file = "tokenizers-0.20.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e3144b8acebfa6ae062e8f45f7ed52e4b50fb6c62f93afc8871b525ab9fdcab3"}, + {file = "tokenizers-0.20.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b52aa3fd14b2a07588c00a19f66511cff5cca8f7266ca3edcdd17f3512ad159f"}, + {file = "tokenizers-0.20.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b8cf52779ffc5d4d63a0170fbeb512372bad0dd014ce92bbb9149756c831124"}, + {file = "tokenizers-0.20.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:983a45dd11a876124378dae71d6d9761822199b68a4c73f32873d8cdaf326a5b"}, + {file = "tokenizers-0.20.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df6b819c9a19831ebec581e71a7686a54ab45d90faf3842269a10c11d746de0c"}, + {file = "tokenizers-0.20.0-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e738cfd80795fcafcef89c5731c84b05638a4ab3f412f97d5ed7765466576eb1"}, + {file = "tokenizers-0.20.0-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c8842c7be2fadb9c9edcee233b1b7fe7ade406c99b0973f07439985c1c1d0683"}, + {file = "tokenizers-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e47a82355511c373a4a430c4909dc1e518e00031207b1fec536c49127388886b"}, + {file = "tokenizers-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9afbf359004551179a5db19424180c81276682773cff2c5d002f6eaaffe17230"}, + {file = "tokenizers-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07eaa8799a92e6af6f472c21a75bf71575de2af3c0284120b7a09297c0de2f3"}, + {file = "tokenizers-0.20.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0994b2e5fc53a301071806bc4303e4bc3bdc3f490e92a21338146a36746b0872"}, + {file = "tokenizers-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b6466e0355b603d10e3cc3d282d350b646341b601e50969464a54939f9848d0"}, + {file = "tokenizers-0.20.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:1e86594c2a433cb1ea09cfbe596454448c566e57ee8905bd557e489d93e89986"}, + {file = "tokenizers-0.20.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3e14cdef1efa96ecead6ea64a891828432c3ebba128bdc0596e3059fea104ef3"}, + {file = "tokenizers-0.20.0.tar.gz", hash = "sha256:39d7acc43f564c274085cafcd1dae9d36f332456de1a31970296a6b8da4eac8d"}, ] [package.dependencies] @@ -2833,13 +2968,13 @@ files = [ [[package]] name = "tqdm" -version = "4.66.4" +version = "4.66.5" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, - {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, + {file = "tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd"}, + {file = "tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"}, ] [package.dependencies] @@ -2864,13 +2999,13 @@ files = [ [[package]] name = "urllib3" -version = "1.26.19" +version = "1.26.20" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "urllib3-1.26.19-py2.py3-none-any.whl", hash = "sha256:37a0344459b199fce0e80b0d3569837ec6b6937435c5244e7fd73fa6006830f3"}, - {file = "urllib3-1.26.19.tar.gz", hash = "sha256:3e3d753a8618b86d7de333b4223005f68720bcd6a7d2bcb9fbd2229ec7c1e429"}, + {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, + {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, ] [package.extras] @@ -2996,101 +3131,103 @@ files = [ [[package]] name = "yarl" -version = "1.9.4" +version = "1.9.7" description = "Yet another URL library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, - {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, - {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, - {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, - {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, - {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, - {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, - {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, - {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, - {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, - {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, - {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, - {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, - {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, - {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, - {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, + {file = "yarl-1.9.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:60c04415b31a1611ef5989a6084dd6f6b95652c6a18378b58985667b65b2ecb6"}, + {file = "yarl-1.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1787dcfdbe730207acb454548a6e19f80ae75e6d2d1f531c5a777bc1ab6f7952"}, + {file = "yarl-1.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5ddad20363f9f1bbedc95789c897da62f939e6bc855793c3060ef8b9f9407bf"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdb156a06208fc9645ae7cc0fca45c40dd40d7a8c4db626e542525489ca81a9"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:522fa3d300d898402ae4e0fa7c2c21311248ca43827dc362a667de87fdb4f1be"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7f9cabfb8b980791b97a3ae3eab2e38b2ba5eab1af9b7495bdc44e1ce7c89e3"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fc728857df4087da6544fc68f62d7017fa68d74201d5b878e18ed4822c31fb3"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dba2ebac677184d56374fa3e452b461f5d6a03aa132745e648ae8859361eb6b"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a95167ae34667c5cc7d9206c024f793e8ffbadfb307d5c059de470345de58a21"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9d319ac113ca47352319cbea92d1925a37cb7bd61a8c2f3e3cd2e96eb33cccae"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:2d71a5d818d82586ac46265ae01466e0bda0638760f18b21f1174e0dd58a9d2f"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ff03f1c1ac474c66d474929ae7e4dd195592c1c7cc8c36418528ed81b1ca0a79"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78250f635f221dde97d02c57aade3313310469bc291888dfe32acd1012594441"}, + {file = "yarl-1.9.7-cp310-cp310-win32.whl", hash = "sha256:f3aaf9fa960d55bd7876d55d7ea3cc046f3660df1ff73fc1b8c520a741ed1f21"}, + {file = "yarl-1.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:e8362c941e07fbcde851597672a5e41b21dc292b7d5a1dc439b7a93c9a1af5d9"}, + {file = "yarl-1.9.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:596069ddeaf72b5eb36cd714dcd2b5751d0090d05a8d65113b582ed9e1c801fb"}, + {file = "yarl-1.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cb870907e8b86b2f32541403da9455afc1e535ce483e579bea0e6e79a0cc751c"}, + {file = "yarl-1.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ca5e86be84492fa403c4dcd4dcaf8e1b1c4ffc747b5176f7c3d09878c45719b0"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99cecfb51c84d00132db909e83ae388793ca86e48df7ae57f1be0beab0dcce5"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25508739e9b44d251172145f54c084b71747b09e4d237dc2abb045f46c36a66e"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:60f3b5aec3146b6992640592856414870f5b20eb688c1f1d5f7ac010a7f86561"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1557456afce5db3d655b5f8a31cdcaae1f47e57958760525c44b76e812b4987"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71bb1435a84688ed831220c5305d96161beb65cac4a966374475348aa3de4575"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f87d8645a7a806ec8f66aac5e3b1dcb5014849ff53ffe2a1f0b86ca813f534c7"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:58e3f01673873b8573da3abe138debc63e4e68541b2104a55df4c10c129513a4"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8af0bbd4d84f8abdd9b11be9488e32c76b1501889b73c9e2292a15fb925b378b"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7fc441408ed0d9c6d2d627a02e281c21f5de43eb5209c16636a17fc704f7d0f8"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a9552367dc440870556da47bb289a806f08ad06fbc4054072d193d9e5dd619ba"}, + {file = "yarl-1.9.7-cp311-cp311-win32.whl", hash = "sha256:628619008680a11d07243391271b46f07f13b75deb9fe92ef342305058c70722"}, + {file = "yarl-1.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:bc23d870864971c8455cfba17498ccefa53a5719ea9f5fce5e7e9c1606b5755f"}, + {file = "yarl-1.9.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d8cf3d0b67996edc11957aece3fbce4c224d0451c7c3d6154ec3a35d0e55f6b"}, + {file = "yarl-1.9.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3a7748cd66fef49c877e59503e0cc76179caf1158d1080228e67e1db14554f08"}, + {file = "yarl-1.9.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a6fa3aeca8efabb0fbbb3b15e0956b0cb77f7d9db67c107503c30af07cd9e00"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf37dd0008e5ac5c3880198976063c491b6a15b288d150d12833248cf2003acb"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87aa5308482f248f8c3bd9311cd6c7dfd98ea1a8e57e35fb11e4adcac3066003"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:867b13c1b361f9ba5d2f84dc5408082f5d744c83f66de45edc2b96793a9c5e48"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48ce93947554c2c85fe97fc4866646ec90840bc1162e4db349b37d692a811755"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcd3d94b848cba132f39a5b40d80b0847d001a91a6f35a2204505cdd46afe1b2"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d06d6a8f98dd87646d98f0c468be14b201e47ec6092ad569adf835810ad0dffb"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:91567ff4fce73d2e7ac67ed5983ad26ba2343bc28cb22e1e1184a9677df98d7c"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1d5594512541e63188fea640b7f066c218d2176203d6e6f82abf702ae3dca3b2"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9c2743e43183e4afbb07d5605693299b8756baff0b086c25236c761feb0e3c56"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:daa69a3a2204355af39f4cfe7f3870d87c53d77a597b5100b97e3faa9460428b"}, + {file = "yarl-1.9.7-cp312-cp312-win32.whl", hash = "sha256:36b16884336c15adf79a4bf1d592e0c1ffdb036a760e36a1361565b66785ec6c"}, + {file = "yarl-1.9.7-cp312-cp312-win_amd64.whl", hash = "sha256:2ead2f87a1174963cc406d18ac93d731fbb190633d3995fa052d10cefae69ed8"}, + {file = "yarl-1.9.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:808eddabcb6f7b2cdb6929b3e021ac824a2c07dc7bc83f7618e18438b1b65781"}, + {file = "yarl-1.9.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:395ab0d8ce6d104a988da429bcbfd445e03fb4c911148dfd523f69d13f772e47"}, + {file = "yarl-1.9.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:49827dfccbd59c4499605c13805e947349295466e490860a855b7c7e82ec9c75"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6b8bbdd425d0978311520ea99fb6c0e9e04e64aee84fac05f3157ace9f81b05"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71d33fd1c219b5b28ee98cd76da0c9398a4ed4792fd75c94135237db05ba5ca8"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:62440431741d0b7d410e5cbad800885e3289048140a43390ecab4f0b96dde3bb"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db97210433366dfba55590e48285b89ad0146c52bf248dd0da492dd9f0f72cf"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:653597b615809f2e5f4dba6cd805608b6fd3597128361a22cc612cf7c7a4d1bf"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:df47612129e66f7ce7c9994d4cd4e6852f6e3bf97699375d86991481796eeec8"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5e338b6febbae6c9fe86924bac3ea9c1944e33255c249543cd82a4af6df6047b"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e649d37d04665dddb90994bbf0034331b6c14144cc6f3fbce400dc5f28dc05b7"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0a1b8fd849567be56342e988e72c9d28bd3c77b9296c38b9b42d2fe4813c9d3f"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f9d715b2175dff9a49c6dafdc2ab3f04850ba2f3d4a77f69a5a1786b057a9d45"}, + {file = "yarl-1.9.7-cp313-cp313-win32.whl", hash = "sha256:bc9233638b07c2e4a3a14bef70f53983389bffa9e8cb90a2da3f67ac9c5e1842"}, + {file = "yarl-1.9.7-cp313-cp313-win_amd64.whl", hash = "sha256:62e110772330d7116f91e79cd83fef92545cb2f36414c95881477aa01971f75f"}, + {file = "yarl-1.9.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a564155cc2194ecd9c0d8f8dc57059b822a507de5f08120063675eb9540576aa"}, + {file = "yarl-1.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03e917cc44a01e1be60a83ee1a17550b929490aaa5df2a109adc02137bddf06b"}, + {file = "yarl-1.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:eefda67ba0ba44ab781e34843c266a76f718772b348f7c5d798d8ea55b95517f"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:316c82b499b6df41444db5dea26ee23ece9356e38cea43a8b2af9e6d8a3558e4"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10452727843bc847596b75e30a7fe92d91829f60747301d1bd60363366776b0b"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:050f3e4d886be55728fef268587d061c5ce6f79a82baba71840801b63441c301"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0aabe557446aa615693a82b4d3803c102fd0e7a6a503bf93d744d182a510184"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23404842228e6fa8ace235024519df37f3f8e173620407644d40ddca571ff0f4"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:34736fcc9d6d7080ebbeb0998ecb91e4f14ad8f18648cf0b3099e2420a225d86"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:48f7a158f3ca67509d21cb02a96964e4798b6f133691cc0c86cf36e26e26ec8f"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:6639444d161c693cdabb073baaed1945c717d3982ecedf23a219bc55a242e728"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:1cd450e10cb53d63962757c3f6f7870be49a3e448c46621d6bd46f8088d532de"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:74d3ef5e81f81507cea04bf5ae22f18ef538607a7c754aac2b6e3029956a2842"}, + {file = "yarl-1.9.7-cp38-cp38-win32.whl", hash = "sha256:4052dbd0c900bece330e3071c636f99dff06e4628461a29b38c6e222a427cf98"}, + {file = "yarl-1.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:dd08da4f2d171e19bd02083c921f1bef89f8f5f87000d0ffc49aa257bc5a9802"}, + {file = "yarl-1.9.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ab906a956d2109c6ea11e24c66592b06336e2743509290117f0f7f47d2c1dd3"}, + {file = "yarl-1.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d8ad761493d5aaa7ab2a09736e62b8a220cb0b10ff8ccf6968c861cd8718b915"}, + {file = "yarl-1.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d35f9cdab0ec5e20cf6d2bd46456cf599052cf49a1698ef06b9592238d1cf1b1"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a48d2b9f0ae29a456fb766ae461691378ecc6cf159dd9f938507d925607591c3"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cf85599c9336b89b92c313519bcaa223d92fa5d98feb4935a47cce2e8722b4b8"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e8916b1ff7680b1f2b1608c82dc15c569b9f2cb2da100c747c291f1acf18a14"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29c80890e0a64fb0e5f71350d48da330995073881f8b8e623154aef631febfb0"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9163d21aa40ff8528db2aee2b0b6752efe098055b41ab8e5422b2098457199fe"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:65e3098969baf221bb45e3b2f60735fc2b154fc95902131ebc604bae4c629ea6"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cddebd096effe4be90fd378e4224cd575ac99e1c521598a6900e94959006e02e"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:8525f955a2dcc281573b6aadeb8ab9c37e2d3428b64ca6a2feec2a794a69c1da"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:5d585c7d834c13f24c7e3e0efaf1a4b7678866940802e11bd6c4d1f99c935e6b"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:78805148e780a9ca66f3123e04741e344b66cf06b4fb13223e3a209f39a6da55"}, + {file = "yarl-1.9.7-cp39-cp39-win32.whl", hash = "sha256:3f53df493ec80b76969d6e1ae6e4411a55ab1360e02b80c84bd4b33d61a567ba"}, + {file = "yarl-1.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:c81c28221a85add23a0922a6aeb2cdda7f9723e03e2dfae06fee5c57fe684262"}, + {file = "yarl-1.9.7-py3-none-any.whl", hash = "sha256:49935cc51d272264358962d050d726c3e5603a616f53e52ea88e9df1728aa2ee"}, + {file = "yarl-1.9.7.tar.gz", hash = "sha256:f28e602edeeec01fc96daf7728e8052bc2e12a672e2a138561a1ebaf30fd9df7"}, ] [package.dependencies] @@ -3099,20 +3236,24 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.19.2" +version = "3.20.1" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.19.2-py3-none-any.whl", hash = "sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c"}, - {file = "zipp-3.19.2.tar.gz", hash = "sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19"}, + {file = "zipp-3.20.1-py3-none-any.whl", hash = "sha256:9960cd8967c8f85a56f920d5d507274e74f9ff813a0ab8889a5b5be2daf44064"}, + {file = "zipp-3.20.1.tar.gz", hash = "sha256:c22b14cc4763c5a5b04134207736c107db42e9d3ef2d9779d465f5f1bcba572b"}, ] [package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4" -content-hash = "2e51e111900a629f487ed04c78591f6fb960b65b928df28f9f7445a6ec036436" +content-hash = "24e17abd0f0bb8853af8ba457ab9f0975f8fff0a9df935a97e7b552f124aeb50" diff --git a/packages/traceloop-sdk/pyproject.toml b/packages/traceloop-sdk/pyproject.toml index 5267fe32b..30814cd23 100644 --- a/packages/traceloop-sdk/pyproject.toml +++ b/packages/traceloop-sdk/pyproject.toml @@ -57,6 +57,7 @@ opentelemetry-instrumentation-watsonx = {path="../opentelemetry-instrumentation- opentelemetry-instrumentation-weaviate = {path="../opentelemetry-instrumentation-weaviate", develop=true} opentelemetry-instrumentation-alephalpha = {path="../opentelemetry-instrumentation-alephalpha", develop=true} opentelemetry-instrumentation-marqo = {path="../opentelemetry-instrumentation-marqo", develop=true} +opentelemetry-instrumentation-groq = {path="../opentelemetry-instrumentation-groq", develop=true} colorama = "^0.4.6" tenacity = "^8.2.3" pydantic = ">=1" diff --git a/packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py b/packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py index 94930de86..a55b8cfad 100644 --- a/packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py +++ b/packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py @@ -553,6 +553,7 @@ def init_instrumentations(should_enrich_metrics: bool): init_alephalpha_instrumentor() init_marqo_instrumentor() init_lancedb_instrumentor() + init_groq_instrumentor() def init_openai_instrumentor(should_enrich_metrics: bool): @@ -1033,6 +1034,25 @@ def init_redis_instrumentor(): logging.error(f"Error initializing redis instrumentor: {e}") Telemetry().log_exception(e) return False + + +def init_groq_instrumentor(): + try: + if is_package_installed("groq"): + Telemetry().capture("instrumentation:groq:init") + from opentelemetry.instrumentation.groq import GroqInstrumentor + + instrumentor = GroqInstrumentor( + exception_logger=lambda e: Telemetry().log_exception(e), + ) + if not instrumentor.is_instrumented_by_opentelemetry: + instrumentor.instrument() + return True + except Exception as e: + logging.error(f"Error initializing Groq instrumentor: {e}") + Telemetry().log_exception(e) + return False + def metrics_common_attributes(): From 494590a6113b10d556af92d7f202496ef4d57f9d Mon Sep 17 00:00:00 2001 From: Gal Kleinman Date: Wed, 4 Sep 2024 14:01:49 +0300 Subject: [PATCH 5/8] working chat tracing --- .../instrumentation/groq/__init__.py | 338 +++-------- .../instrumentation/groq/streaming.py | 258 -------- .../instrumentation/groq/utils.py | 23 +- .../poetry.lock | 6 +- .../tests/conftest.py | 74 --- .../tests/test_completion.py | 572 ------------------ packages/sample-app/poetry.lock | 2 +- packages/sample-app/pyproject.toml | 4 + 8 files changed, 103 insertions(+), 1174 deletions(-) delete mode 100644 packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/streaming.py delete mode 100644 packages/opentelemetry-instrumentation-groq/tests/conftest.py delete mode 100644 packages/opentelemetry-instrumentation-groq/tests/test_completion.py diff --git a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py index 4730e2b14..d36defafc 100644 --- a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py +++ b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py @@ -6,15 +6,13 @@ import time from typing import Callable, Collection +from groq._streaming import AsyncStream, Stream from opentelemetry import context as context_api from opentelemetry.instrumentation.groq.config import Config -from opentelemetry.instrumentation.groq.streaming import ( - abuild_from_streaming_response, - build_from_streaming_response, -) from opentelemetry.instrumentation.groq.utils import ( dont_throw, error_metrics_attributes, + model_as_dict, set_span_attribute, shared_metrics_attributes, should_send_prompts, @@ -37,6 +35,8 @@ _instruments = ("groq >= 0.9.0",) +CONTENT_FILTER_KEY = "content_filter_results" + WRAPPED_METHODS = [ { "package": "groq.resources.chat.completions", @@ -44,38 +44,14 @@ "method": "create", "span_name": "groq.chat", }, - # { - # "package": "groq.resources.messages", - # "object": "Messages", - # "method": "create", - # "span_name": "groq.chat", - # }, - # { - # "package": "groq.resources.messages", - # "object": "Messages", - # "method": "stream", - # "span_name": "groq.chat", - # }, ] WRAPPED_AMETHODS = [ - # { - # "package": "groq.resources.completions", - # "object": "AsyncCompletions", - # "method": "create", - # "span_name": "groq.completion", - # }, - # { - # "package": "groq.resources.messages", - # "object": "AsyncMessages", - # "method": "create", - # "span_name": "groq.chat", - # }, - # { - # "package": "groq.resources.messages", - # "object": "AsyncMessages", - # "method": "stream", - # "span_name": "groq.chat", - # }, + { + "package": "groq.resources.chat.completions", + "object": "AsyncCompletions", + "method": "create", + "span_name": "groq.chat", + }, ] @@ -120,7 +96,7 @@ def _set_input_attributes(span, kwargs): set_span_attribute( span, SpanAttributes.LLM_PRESENCE_PENALTY, kwargs.get("presence_penalty") ) - set_span_attribute(span, SpanAttributes.LLM_IS_STREAMING, kwargs.get("stream")) + set_span_attribute(span, SpanAttributes.LLM_IS_STREAMING, kwargs.get("stream") or False) if should_send_prompts(): if kwargs.get("prompt") is not None: @@ -140,192 +116,92 @@ def _set_input_attributes(span, kwargs): ) -def _set_span_completions(span, response): - index = 0 - prefix = f"{SpanAttributes.LLM_COMPLETIONS}.{index}" - set_span_attribute(span, f"{prefix}.finish_reason", response.get("stop_reason")) - if response.get("completion"): - set_span_attribute(span, f"{prefix}.content", response.get("completion")) - elif response.get("content"): - for i, content in enumerate(response.get("content")): - set_span_attribute( - span, - f"{SpanAttributes.LLM_COMPLETIONS}.{i}.content", - content.text, - ) - - -@dont_throw -async def _aset_token_usage( - span, - groq, - request, - response, - metric_attributes: dict = {}, - token_histogram: Histogram = None, - choice_counter: Counter = None, -): - if not isinstance(response, dict): - response = response.__dict__ - - prompt_tokens = 0 - if hasattr(groq, "count_tokens"): - if request.get("prompt"): - prompt_tokens = await groq.count_tokens(request.get("prompt")) - elif request.get("messages"): - prompt_tokens = sum( - [ - await groq.count_tokens(m.get("content")) - for m in request.get("messages") - ] - ) +def _set_completions(span, choices): + if choices is None: + return - if token_histogram and type(prompt_tokens) is int and prompt_tokens >= 0: - token_histogram.record( - prompt_tokens, - attributes={ - **metric_attributes, - SpanAttributes.LLM_TOKEN_TYPE: "input", - }, + for choice in choices: + index = choice.get("index") + prefix = f"{SpanAttributes.LLM_COMPLETIONS}.{index}" + set_span_attribute( + span, f"{prefix}.finish_reason", choice.get("finish_reason") ) - completion_tokens = 0 - if hasattr(groq, "count_tokens"): - if response.get("completion"): - completion_tokens = await groq.count_tokens(response.get("completion")) - elif response.get("content"): - completion_tokens = await groq.count_tokens( - response.get("content")[0].text + if choice.get("content_filter_results"): + set_span_attribute( + span, + f"{prefix}.{CONTENT_FILTER_KEY}", + json.dumps(choice.get("content_filter_results")), ) - if token_histogram and type(completion_tokens) is int and completion_tokens >= 0: - token_histogram.record( - completion_tokens, - attributes={ - **metric_attributes, - SpanAttributes.LLM_TOKEN_TYPE: "output", - }, - ) + if choice.get("finish_reason") == "content_filter": + set_span_attribute(span, f"{prefix}.role", "assistant") + set_span_attribute(span, f"{prefix}.content", "FILTERED") - total_tokens = prompt_tokens + completion_tokens - - choices = 0 - if type(response.get("content")) is list: - choices = len(response.get("content")) - elif response.get("completion"): - choices = 1 - - if choices > 0 and choice_counter: - choice_counter.add( - choices, - attributes={ - **metric_attributes, - SpanAttributes.LLM_RESPONSE_STOP_REASON: response.get("stop_reason"), - }, - ) + return - set_span_attribute(span, SpanAttributes.LLM_USAGE_PROMPT_TOKENS, prompt_tokens) - set_span_attribute( - span, SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, completion_tokens - ) - set_span_attribute(span, SpanAttributes.LLM_USAGE_TOTAL_TOKENS, total_tokens) + message = choice.get("message") + if not message: + return + set_span_attribute(span, f"{prefix}.role", message.get("role")) + set_span_attribute(span, f"{prefix}.content", message.get("content")) -@dont_throw -def _set_token_usage( - span, - groq, - request, - response, - metric_attributes: dict = {}, - token_histogram: Histogram = None, - choice_counter: Counter = None, -): - if not isinstance(response, dict): - response = response.__dict__ - - prompt_tokens = 0 - if hasattr(groq, "count_tokens"): - if request.get("prompt"): - prompt_tokens = groq.count_tokens(request.get("prompt")) - elif request.get("messages"): - prompt_tokens = sum( - [ - groq.count_tokens(m.get("content")) - for m in request.get("messages") - ] + function_call = message.get("function_call") + if function_call: + set_span_attribute( + span, f"{prefix}.tool_calls.0.name", function_call.get("name") + ) + set_span_attribute( + span, + f"{prefix}.tool_calls.0.arguments", + function_call.get("arguments"), ) - if token_histogram and type(prompt_tokens) is int and prompt_tokens >= 0: - token_histogram.record( - prompt_tokens, - attributes={ - **metric_attributes, - SpanAttributes.LLM_TOKEN_TYPE: "input", - }, - ) - - completion_tokens = 0 - if hasattr(groq, "count_tokens"): - if response.get("completion"): - completion_tokens = groq.count_tokens(response.get("completion")) - elif response.get("content"): - completion_tokens = groq.count_tokens(response.get("content")[0].text) - - if token_histogram and type(completion_tokens) is int and completion_tokens >= 0: - token_histogram.record( - completion_tokens, - attributes={ - **metric_attributes, - SpanAttributes.LLM_TOKEN_TYPE: "output", - }, - ) - - total_tokens = prompt_tokens + completion_tokens - - choices = 0 - if type(response.get("content")) is list: - choices = len(response.get("content")) - elif response.get("completion"): - choices = 1 - - if choices > 0 and choice_counter: - choice_counter.add( - choices, - attributes={ - **metric_attributes, - SpanAttributes.LLM_RESPONSE_STOP_REASON: response.get("stop_reason"), - }, - ) - - set_span_attribute(span, SpanAttributes.LLM_USAGE_PROMPT_TOKENS, prompt_tokens) - set_span_attribute( - span, SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, completion_tokens - ) - set_span_attribute(span, SpanAttributes.LLM_USAGE_TOTAL_TOKENS, total_tokens) + tool_calls = message.get("tool_calls") + if tool_calls: + for i, tool_call in enumerate(tool_calls): + function = tool_call.get("function") + set_span_attribute( + span, + f"{prefix}.tool_calls.{i}.id", + tool_call.get("id"), + ) + set_span_attribute( + span, + f"{prefix}.tool_calls.{i}.name", + function.get("name"), + ) + set_span_attribute( + span, + f"{prefix}.tool_calls.{i}.arguments", + function.get("arguments"), + ) @dont_throw def _set_response_attributes(span, response): - if not isinstance(response, dict): - response = response.__dict__ + response = model_as_dict(response) + set_span_attribute(span, SpanAttributes.LLM_RESPONSE_MODEL, response.get("model")) - if response.get("usage"): - prompt_tokens = response.get("usage").input_tokens - completion_tokens = response.get("usage").output_tokens - set_span_attribute(span, SpanAttributes.LLM_USAGE_PROMPT_TOKENS, prompt_tokens) + usage = response.get("usage") + if usage: set_span_attribute( - span, SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, completion_tokens + span, SpanAttributes.LLM_USAGE_TOTAL_TOKENS, usage.get("total_tokens") ) set_span_attribute( span, - SpanAttributes.LLM_USAGE_TOTAL_TOKENS, - prompt_tokens + completion_tokens, + SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, + usage.get("completion_tokens"), + ) + set_span_attribute( + span, SpanAttributes.LLM_USAGE_PROMPT_TOKENS, usage.get("prompt_tokens") ) - if should_send_prompts(): - _set_span_completions(span, response) + choices = response.get("choices") + if should_send_prompts() and choices: + _set_completions(span, choices) def _with_tracer_wrapper(func): @@ -348,7 +224,6 @@ def _with_chat_telemetry( token_histogram, choice_counter, duration_histogram, - exception_counter, to_wrap, ): def wrapper(wrapped, instance, args, kwargs): @@ -357,7 +232,6 @@ def wrapper(wrapped, instance, args, kwargs): token_histogram, choice_counter, duration_histogram, - exception_counter, to_wrap, wrapped, instance, @@ -389,13 +263,7 @@ def _create_metrics(meter: Meter): description="GenAI operation duration", ) - exception_counter = meter.create_counter( - name=Meters.LLM_GROQ_COMPLETION_EXCEPTIONS, - unit="time", - description="Number of exceptions occurred during chat completions", - ) - - return token_histogram, choice_counter, duration_histogram, exception_counter + return token_histogram, choice_counter, duration_histogram @_with_chat_telemetry_wrapper @@ -404,7 +272,6 @@ def _wrap( token_histogram: Histogram, choice_counter: Counter, duration_histogram: Histogram, - exception_counter: Counter, to_wrap, wrapped, instance, @@ -441,25 +308,13 @@ def _wrap( duration = end_time - start_time duration_histogram.record(duration, attributes=attributes) - if exception_counter: - exception_counter.add(1, attributes=attributes) - raise e end_time = time.time() if is_streaming_response(response): - return build_from_streaming_response( - span, - response, - instance._client, - start_time, - token_histogram, - choice_counter, - duration_histogram, - exception_counter, - kwargs, - ) + # TODO: implement streaming + pass elif response: try: metric_attributes = shared_metrics_attributes(response) @@ -473,15 +328,6 @@ def _wrap( if span.is_recording(): _set_response_attributes(span, response) - _set_token_usage( - span, - instance._client, - kwargs, - response, - metric_attributes, - token_histogram, - choice_counter, - ) except Exception as ex: # pylint: disable=broad-except logger.warning( @@ -500,7 +346,6 @@ async def _awrap( token_histogram: Histogram, choice_counter: Counter, duration_histogram: Histogram, - exception_counter: Counter, to_wrap, wrapped, instance, @@ -542,23 +387,11 @@ async def _awrap( duration = end_time - start_time duration_histogram.record(duration, attributes=attributes) - if exception_counter: - exception_counter.add(1, attributes=attributes) - raise e if is_streaming_response(response): - return abuild_from_streaming_response( - span, - response, - instance._client, - start_time, - token_histogram, - choice_counter, - duration_histogram, - exception_counter, - kwargs, - ) + # TODO: implement streaming + pass elif response: metric_attributes = shared_metrics_attributes(response) @@ -571,15 +404,6 @@ async def _awrap( if span.is_recording(): _set_response_attributes(span, response) - await _aset_token_usage( - span, - instance._client, - kwargs, - response, - metric_attributes, - token_histogram, - choice_counter, - ) if span.is_recording(): span.set_status(Status(StatusCode.OK)) @@ -621,14 +445,12 @@ def _instrument(self, **kwargs): token_histogram, choice_counter, duration_histogram, - exception_counter, ) = _create_metrics(meter) else: ( token_histogram, choice_counter, duration_histogram, - exception_counter, ) = (None, None, None, None) for wrapped_method in WRAPPED_METHODS: @@ -645,7 +467,6 @@ def _instrument(self, **kwargs): token_histogram, choice_counter, duration_histogram, - exception_counter, wrapped_method, ), ) @@ -665,7 +486,6 @@ def _instrument(self, **kwargs): token_histogram, choice_counter, duration_histogram, - exception_counter, wrapped_method, ), ) diff --git a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/streaming.py b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/streaming.py deleted file mode 100644 index 807a4ec32..000000000 --- a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/streaming.py +++ /dev/null @@ -1,258 +0,0 @@ -import logging -import time - -from opentelemetry.instrumentation.groq.config import Config -from opentelemetry.instrumentation.groq.utils import ( - dont_throw, - error_metrics_attributes, - set_span_attribute, - shared_metrics_attributes, - should_send_prompts, -) -from opentelemetry.metrics import Counter, Histogram -from opentelemetry.semconv_ai import SpanAttributes -from opentelemetry.trace.status import Status, StatusCode - -logger = logging.getLogger(__name__) - - -@dont_throw -def _process_response_item(item, complete_response): - if item.type == "message_start": - complete_response["model"] = item.message.model - complete_response["usage"] = item.message.usage - elif item.type == "content_block_start": - index = item.index - if len(complete_response.get("events")) <= index: - complete_response["events"].append({"index": index, "text": ""}) - elif item.type == "content_block_delta" and item.delta.type == "text_delta": - index = item.index - complete_response.get("events")[index]["text"] += item.delta.text - elif item.type == "message_delta": - for event in complete_response.get("events", []): - event["finish_reason"] = item.delta.stop_reason - - -def _set_token_usage( - span, - complete_response, - prompt_tokens, - completion_tokens, - metric_attributes: dict = {}, - token_histogram: Histogram = None, - choice_counter: Counter = None, -): - total_tokens = prompt_tokens + completion_tokens - set_span_attribute(span, SpanAttributes.LLM_USAGE_PROMPT_TOKENS, prompt_tokens) - set_span_attribute( - span, SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, completion_tokens - ) - set_span_attribute(span, SpanAttributes.LLM_USAGE_TOTAL_TOKENS, total_tokens) - - set_span_attribute( - span, SpanAttributes.LLM_RESPONSE_MODEL, complete_response.get("model") - ) - - if token_histogram and type(prompt_tokens) is int and prompt_tokens >= 0: - token_histogram.record( - prompt_tokens, - attributes={ - **metric_attributes, - SpanAttributes.LLM_TOKEN_TYPE: "input", - }, - ) - - if token_histogram and type(completion_tokens) is int and completion_tokens >= 0: - token_histogram.record( - completion_tokens, - attributes={ - **metric_attributes, - SpanAttributes.LLM_TOKEN_TYPE: "output", - }, - ) - - if type(complete_response.get("events")) is list and choice_counter: - for event in complete_response.get("events"): - choice_counter.add( - 1, - attributes={ - **metric_attributes, - SpanAttributes.LLM_RESPONSE_FINISH_REASON: event.get( - "finish_reason" - ), - }, - ) - - -def _set_completions(span, events): - if not span.is_recording() or not events: - return - - try: - for event in events: - index = event.get("index") - prefix = f"{SpanAttributes.LLM_COMPLETIONS}.{index}" - set_span_attribute( - span, f"{prefix}.finish_reason", event.get("finish_reason") - ) - set_span_attribute(span, f"{prefix}.content", event.get("text")) - except Exception as e: - logger.warning("Failed to set completion attributes, error: %s", str(e)) - - -@dont_throw -def build_from_streaming_response( - span, - response, - instance, - start_time, - token_histogram: Histogram = None, - choice_counter: Counter = None, - duration_histogram: Histogram = None, - exception_counter: Counter = None, - kwargs: dict = {}, -): - complete_response = {"events": [], "model": "", "usage": {}} - for item in response: - try: - yield item - except Exception as e: - attributes = error_metrics_attributes(e) - if exception_counter: - exception_counter.add(1, attributes=attributes) - raise e - _process_response_item(item, complete_response) - - metric_attributes = shared_metrics_attributes(complete_response) - - if duration_histogram: - duration = time.time() - start_time - duration_histogram.record( - duration, - attributes=metric_attributes, - ) - - # calculate token usage - if Config.enrich_token_usage: - try: - prompt_tokens = -1 - completion_tokens = -1 - - # prompt_usage - if kwargs.get("prompt"): - prompt_tokens = instance.count_tokens(kwargs.get("prompt")) - elif kwargs.get("messages"): - prompt_tokens = sum( - [ - instance.count_tokens(m.get("content")) - for m in kwargs.get("messages") - ] - ) - - # completion_usage - completion_content = "" - if complete_response.get("events"): - model_name = complete_response.get("model") or None - for event in complete_response.get("events"): # type: dict - if event.get("text"): - completion_content += event.get("text") - - if model_name: - completion_tokens = instance.count_tokens(completion_content) - - _set_token_usage( - span, - complete_response, - prompt_tokens, - completion_tokens, - metric_attributes, - token_histogram, - choice_counter, - ) - except Exception as e: - logger.warning("Failed to set token usage, error: %s", str(e)) - - if should_send_prompts(): - _set_completions(span, complete_response.get("events")) - - span.set_status(Status(StatusCode.OK)) - span.end() - - -@dont_throw -async def abuild_from_streaming_response( - span, - response, - instance, - start_time, - token_histogram: Histogram = None, - choice_counter: Counter = None, - duration_histogram: Histogram = None, - exception_counter: Counter = None, - kwargs: dict = {}, -): - complete_response = {"events": [], "model": ""} - async for item in response: - try: - yield item - except Exception as e: - attributes = error_metrics_attributes(e) - if exception_counter: - exception_counter.add(1, attributes=attributes) - raise e - _process_response_item(item, complete_response) - - metric_attributes = shared_metrics_attributes(complete_response) - - if duration_histogram: - duration = time.time() - start_time - duration_histogram.record( - duration, - attributes=metric_attributes, - ) - - # calculate token usage - if Config.enrich_token_usage: - try: - prompt_tokens = -1 - completion_tokens = -1 - - # prompt_usage - if kwargs.get("prompt"): - prompt_tokens = await instance.count_tokens(kwargs.get("prompt")) - elif kwargs.get("messages"): - prompt_tokens = sum( - [ - await instance.count_tokens(m.get("content")) - for m in kwargs.get("messages") - ] - ) - - # completion_usage - completion_content = "" - if complete_response.get("events"): - model_name = complete_response.get("model") or None - for event in complete_response.get("events"): # type: dict - if event.get("text"): - completion_content += event.get("text") - - if model_name: - completion_tokens = await instance.count_tokens(completion_content) - - _set_token_usage( - span, - complete_response, - prompt_tokens, - completion_tokens, - metric_attributes, - token_histogram, - choice_counter, - ) - except Exception as e: - logger.warning("Failed to set token usage, error: %s", str(e)) - - if should_send_prompts(): - _set_completions(span, complete_response.get("events")) - - span.set_status(Status(StatusCode.OK)) - span.end() diff --git a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/utils.py b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/utils.py index 01e8886f7..e283307b9 100644 --- a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/utils.py +++ b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/utils.py @@ -1,3 +1,4 @@ +from importlib.metadata import version import os import logging import traceback @@ -10,10 +11,8 @@ def set_span_attribute(span, name, value): - if value is not None: - if value != "": - span.set_attribute(name, value) - return + if value is not None and value != "": + span.set_attribute(name, value) def should_send_prompts(): @@ -49,15 +48,14 @@ def wrapper(*args, **kwargs): @dont_throw def shared_metrics_attributes(response): - if not isinstance(response, dict): - response = response.__dict__ + response_dict = model_as_dict(response) common_attributes = Config.get_common_metrics_attributes() return { **common_attributes, GEN_AI_SYSTEM: GEN_AI_SYSTEM_GROQ, - SpanAttributes.LLM_RESPONSE_MODEL: response.get("model"), + SpanAttributes.LLM_RESPONSE_MODEL: response_dict.get("model"), } @@ -67,3 +65,14 @@ def error_metrics_attributes(exception): GEN_AI_SYSTEM: GEN_AI_SYSTEM_GROQ, "error.type": exception.__class__.__name__, } + + +def model_as_dict(model): + if version("pydantic") < "2.0.0": + return model.dict() + if hasattr(model, "model_dump"): + return model.model_dump() + elif hasattr(model, "parse"): # Raw API response + return model_as_dict(model.parse()) + else: + return model diff --git a/packages/opentelemetry-instrumentation-groq/poetry.lock b/packages/opentelemetry-instrumentation-groq/poetry.lock index b0773335a..851ede936 100644 --- a/packages/opentelemetry-instrumentation-groq/poetry.lock +++ b/packages/opentelemetry-instrumentation-groq/poetry.lock @@ -741,13 +741,13 @@ files = [ [[package]] name = "setuptools" -version = "74.0.0" +version = "74.1.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-74.0.0-py3-none-any.whl", hash = "sha256:0274581a0037b638b9fc1c6883cc71c0210865aaa76073f7882376b641b84e8f"}, - {file = "setuptools-74.0.0.tar.gz", hash = "sha256:a85e96b8be2b906f3e3e789adec6a9323abf79758ecfa3065bd740d81158b11e"}, + {file = "setuptools-74.1.1-py3-none-any.whl", hash = "sha256:fc91b5f89e392ef5b77fe143b17e32f65d3024744fba66dc3afe07201684d766"}, + {file = "setuptools-74.1.1.tar.gz", hash = "sha256:2353af060c06388be1cecbf5953dcdb1f38362f87a2356c480b6b4d5fcfc8847"}, ] [package.extras] diff --git a/packages/opentelemetry-instrumentation-groq/tests/conftest.py b/packages/opentelemetry-instrumentation-groq/tests/conftest.py deleted file mode 100644 index 61a716fc2..000000000 --- a/packages/opentelemetry-instrumentation-groq/tests/conftest.py +++ /dev/null @@ -1,74 +0,0 @@ -"""Unit tests configuration module.""" - -import os - -import pytest -from opentelemetry import metrics, trace -from opentelemetry.instrumentation.groq import GroqInstrumentor -from opentelemetry.sdk.metrics import Counter, Histogram, MeterProvider -from opentelemetry.sdk.metrics.export import ( - AggregationTemporality, - InMemoryMetricReader, -) -from opentelemetry.sdk.resources import Resource -from opentelemetry.sdk.trace import TracerProvider -from opentelemetry.sdk.trace.export import SimpleSpanProcessor -from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter - -pytest_plugins = [] - - -@pytest.fixture(scope="session") -def exporter(): - exporter = InMemorySpanExporter() - processor = SimpleSpanProcessor(exporter) - - provider = TracerProvider() - provider.add_span_processor(processor) - trace.set_tracer_provider(provider) - - return exporter - - -@pytest.fixture(scope="session") -def reader(): - reader = InMemoryMetricReader( - {Counter: AggregationTemporality.DELTA, Histogram: AggregationTemporality.DELTA} - ) - return reader - - -@pytest.fixture(scope="session") -def meter_provider(reader): - resource = Resource.create() - meter_provider = MeterProvider(metric_readers=[reader], resource=resource) - metrics.set_meter_provider(meter_provider) - - return meter_provider - - -@pytest.fixture(scope="session", autouse=True) -def instrument(exporter, reader, meter_provider): - GroqInstrumentor(enrich_token_usage=True).instrument() - - yield - - exporter.shutdown() - reader.shutdown() - meter_provider.shutdown() - - -@pytest.fixture(autouse=True) -def clear_exporter_reader(exporter, reader): - exporter.clear() - reader.get_metrics_data() - - -@pytest.fixture(autouse=True) -def environment(): - os.environ["GROQ_API_KEY"] = "test_api_key" - - -@pytest.fixture(scope="module") -def vcr_config(): - return {"filter_headers": ["x-api-key"]} diff --git a/packages/opentelemetry-instrumentation-groq/tests/test_completion.py b/packages/opentelemetry-instrumentation-groq/tests/test_completion.py deleted file mode 100644 index 7ff80eae9..000000000 --- a/packages/opentelemetry-instrumentation-groq/tests/test_completion.py +++ /dev/null @@ -1,572 +0,0 @@ -import json -from pathlib import Path - -import pytest -from groq import Groq, AsyncGroq -from opentelemetry.semconv_ai import SpanAttributes, Meters - - -@pytest.mark.vcr -def test_groq_completion(exporter, reader): - client = Groq() - client.completions.create( - prompt=f"{HUMAN_PROMPT}\nHello world\n{AI_PROMPT}", - model="claude-instant-1.2", - max_tokens_to_sample=2048, - top_p=0.1, - ) - try: - client.completions.create( - unknown_parameter="unknown", - ) - except Exception: - pass - - spans = exporter.get_finished_spans() - assert all(span.name == "groq.completion" for span in spans) - - groq_span = spans[0] - assert ( - groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.user"] - == f"{HUMAN_PROMPT}\nHello world\n{AI_PROMPT}" - ) - assert groq_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") - - metrics_data = reader.get_metrics_data() - resource_metrics = metrics_data.resource_metrics - assert len(resource_metrics) > 0 - - found_token_metric = False - found_choice_metric = False - found_duration_metric = False - found_exception_metric = False - - for rm in resource_metrics: - for sm in rm.scope_metrics: - for metric in sm.metrics: - if metric.name == Meters.LLM_TOKEN_USAGE: - found_token_metric = True - for data_point in metric.data.data_points: - assert data_point.attributes[SpanAttributes.LLM_TOKEN_TYPE] in [ - "output", - "input", - ] - assert ( - data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] - == "claude-instant-1.2" - ) - assert data_point.sum > 0 - - if metric.name == Meters.LLM_GENERATION_CHOICES: - found_choice_metric = True - for data_point in metric.data.data_points: - assert data_point.value >= 1 - assert ( - data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] - == "claude-instant-1.2" - ) - - if metric.name == Meters.LLM_OPERATION_DURATION: - found_duration_metric = True - assert any( - data_point.count > 0 for data_point in metric.data.data_points - ) - assert any( - data_point.sum > 0 for data_point in metric.data.data_points - ) - assert all( - data_point.attributes.get(SpanAttributes.LLM_RESPONSE_MODEL) - == "claude-instant-1.2" - or data_point.attributes.get("error.type") == "TypeError" - for data_point in metric.data.data_points - ) - - if metric.name == Meters.LLM_GROQ_COMPLETION_EXCEPTIONS: - found_exception_metric = True - for data_point in metric.data.data_points: - assert data_point.value == 1 - assert data_point.attributes["error.type"] == "TypeError" - - assert all( - data_point.attributes.get("gen_ai.system") == "groq" - for data_point in metric.data.data_points - ) - - assert found_token_metric is True - assert found_choice_metric is True - assert found_duration_metric is True - assert found_exception_metric is True - - -@pytest.mark.vcr -def test_groq_message_create(exporter, reader): - client = Groq() - response = client.messages.create( - max_tokens=1024, - messages=[ - { - "role": "user", - "content": "Tell me a joke about OpenTelemetry", - } - ], - model="claude-3-opus-20240229", - ) - try: - client.messages.create( - unknown_parameter="unknown", - ) - except Exception: - pass - - spans = exporter.get_finished_spans() - assert all(span.name == "groq.chat" for span in spans) - - groq_span = spans[0] - assert ( - groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] - == "Tell me a joke about OpenTelemetry" - ) - assert (groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" - assert ( - groq_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") - == response.content[0].text - ) - assert groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 - assert ( - groq_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] - + groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] - == groq_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] - ) - - metrics_data = reader.get_metrics_data() - resource_metrics = metrics_data.resource_metrics - assert len(resource_metrics) > 0 - - found_token_metric = False - found_choice_metric = False - found_duration_metric = False - found_exception_metric = False - - for rm in resource_metrics: - for sm in rm.scope_metrics: - for metric in sm.metrics: - if metric.name == Meters.LLM_TOKEN_USAGE: - found_token_metric = True - for data_point in metric.data.data_points: - assert data_point.attributes[SpanAttributes.LLM_TOKEN_TYPE] in [ - "output", - "input", - ] - assert ( - data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] - == "claude-3-opus-20240229" - ) - assert data_point.sum > 0 - - if metric.name == Meters.LLM_GENERATION_CHOICES: - found_choice_metric = True - for data_point in metric.data.data_points: - assert data_point.value >= 1 - assert ( - data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] - == "claude-3-opus-20240229" - ) - - if metric.name == Meters.LLM_OPERATION_DURATION: - found_duration_metric = True - assert any( - data_point.count > 0 for data_point in metric.data.data_points - ) - assert any( - data_point.sum > 0 for data_point in metric.data.data_points - ) - assert all( - data_point.attributes.get(SpanAttributes.LLM_RESPONSE_MODEL) - == "claude-3-opus-20240229" - or data_point.attributes.get("error.type") == "TypeError" - for data_point in metric.data.data_points - ) - - if metric.name == Meters.LLM_GROQ_COMPLETION_EXCEPTIONS: - found_exception_metric = True - for data_point in metric.data.data_points: - assert data_point.value == 1 - assert data_point.attributes["error.type"] == "TypeError" - - assert all( - data_point.attributes.get("gen_ai.system") == "groq" - for data_point in metric.data.data_points - ) - - assert found_token_metric is True - assert found_choice_metric is True - assert found_duration_metric is True - assert found_exception_metric is True - - -@pytest.mark.vcr -def test_groq_multi_modal(exporter): - client = Groq() - response = client.messages.create( - max_tokens=1024, - messages=[ - { - "role": "user", - "content": [ - { - "type": "text", - "text": "What do you see?", - }, - { - "type": "image", - "source": { - "type": "base64", - "media_type": "image/jpeg", - "data": Path(__file__).parent.joinpath("data/logo.jpg"), - }, - }, - ], - }, - ], - model="claude-3-opus-20240229", - ) - - spans = exporter.get_finished_spans() - assert [span.name for span in spans] == [ - "groq.chat", - ] - groq_span = spans[0] - assert groq_span.attributes[ - f"{SpanAttributes.LLM_PROMPTS}.0.content" - ] == json.dumps( - [ - {"type": "text", "text": "What do you see?"}, - { - "type": "image", - "source": { - "type": "base64", - "media_type": "image/jpeg", - "data": str(Path(__file__).parent.joinpath("data/logo.jpg")), - }, - }, - ] - ) - assert (groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" - assert ( - groq_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") - == response.content[0].text - ) - assert groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 1381 - assert ( - groq_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] - + groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] - == groq_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] - ) - - -@pytest.mark.vcr -def test_groq_message_streaming(exporter, reader): - client = Groq() - response = client.messages.create( - max_tokens=1024, - messages=[ - { - "role": "user", - "content": "Tell me a joke about OpenTelemetry", - } - ], - model="claude-3-haiku-20240307", - stream=True, - ) - - response_content = "" - for event in response: - if event.type == "content_block_delta" and event.delta.type == "text_delta": - response_content += event.delta.text - - spans = exporter.get_finished_spans() - assert [span.name for span in spans] == [ - "groq.chat", - ] - groq_span = spans[0] - assert ( - groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] - == "Tell me a joke about OpenTelemetry" - ) - assert (groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" - assert ( - groq_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") - == response_content - ) - assert groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 - assert ( - groq_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] - + groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] - == groq_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] - ) - - metrics_data = reader.get_metrics_data() - resource_metrics = metrics_data.resource_metrics - assert len(resource_metrics) > 0 - - found_token_metric = False - found_choice_metric = False - found_duration_metric = False - # TODO found_exception_metric = False - - for rm in resource_metrics: - for sm in rm.scope_metrics: - for metric in sm.metrics: - if metric.name == Meters.LLM_TOKEN_USAGE: - found_token_metric = True - for data_point in metric.data.data_points: - assert data_point.attributes[SpanAttributes.LLM_TOKEN_TYPE] in [ - "output", - "input", - ] - assert ( - data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] - == "claude-3-haiku-20240307" - ) - assert data_point.sum > 0 - - if metric.name == Meters.LLM_GENERATION_CHOICES: - found_choice_metric = True - for data_point in metric.data.data_points: - assert data_point.value >= 1 - assert ( - data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] - == "claude-3-haiku-20240307" - ) - - if metric.name == Meters.LLM_OPERATION_DURATION: - found_duration_metric = True - assert any( - data_point.count > 0 for data_point in metric.data.data_points - ) - assert any( - data_point.sum > 0 for data_point in metric.data.data_points - ) - assert all( - data_point.attributes.get(SpanAttributes.LLM_RESPONSE_MODEL) - == "claude-3-haiku-20240307" - or data_point.attributes.get("error.type") == "TypeError" - for data_point in metric.data.data_points - ) - - assert all( - data_point.attributes.get("gen_ai.system") == "groq" - for data_point in metric.data.data_points - ) - - assert found_token_metric is True - assert found_choice_metric is True - assert found_duration_metric is True - - -@pytest.mark.vcr -@pytest.mark.asyncio -async def test_async_groq_message_create(exporter, reader): - client = AsyncGroq() - response = await client.messages.create( - max_tokens=1024, - messages=[ - { - "role": "user", - "content": "Tell me a joke about OpenTelemetry", - } - ], - model="claude-3-opus-20240229", - ) - try: - await client.messages.create( - unknown_parameter="unknown", - ) - except Exception: - pass - - spans = exporter.get_finished_spans() - assert [span.name for span in spans] == [ - "groq.chat", - ] - groq_span = spans[0] - assert ( - groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] - == "Tell me a joke about OpenTelemetry" - ) - assert (groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" - assert ( - groq_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") - == response.content[0].text - ) - assert groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 - assert ( - groq_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] - + groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] - == groq_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] - ) - - metrics_data = reader.get_metrics_data() - resource_metrics = metrics_data.resource_metrics - assert len(resource_metrics) > 0 - - found_token_metric = False - found_choice_metric = False - found_duration_metric = False - found_exception_metric = False - - for rm in resource_metrics: - for sm in rm.scope_metrics: - for metric in sm.metrics: - if metric.name == Meters.LLM_TOKEN_USAGE: - found_token_metric = True - for data_point in metric.data.data_points: - assert data_point.attributes[SpanAttributes.LLM_TOKEN_TYPE] in [ - "output", - "input", - ] - assert ( - data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] - == "claude-3-opus-20240229" - ) - assert data_point.sum > 0 - - if metric.name == Meters.LLM_GENERATION_CHOICES: - found_choice_metric = True - for data_point in metric.data.data_points: - assert data_point.value >= 1 - assert ( - data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] - == "claude-3-opus-20240229" - ) - - if metric.name == Meters.LLM_OPERATION_DURATION: - found_duration_metric = True - assert any( - data_point.count > 0 for data_point in metric.data.data_points - ) - assert any( - data_point.sum > 0 for data_point in metric.data.data_points - ) - assert all( - data_point.attributes.get(SpanAttributes.LLM_RESPONSE_MODEL) - == "claude-3-opus-20240229" - or data_point.attributes.get("error.type") == "TypeError" - for data_point in metric.data.data_points - ) - - if metric.name == Meters.LLM_GROQ_COMPLETION_EXCEPTIONS: - found_exception_metric = True - for data_point in metric.data.data_points: - assert data_point.value == 1 - assert data_point.attributes["error.type"] == "TypeError" - - assert all( - data_point.attributes.get("gen_ai.system") == "groq" - for data_point in metric.data.data_points - ) - - assert found_token_metric is True - assert found_choice_metric is True - assert found_duration_metric is True - assert found_exception_metric is True - - -@pytest.mark.vcr -@pytest.mark.asyncio -async def test_async_groq_message_streaming(exporter, reader): - client = AsyncGroq() - response = await client.messages.create( - max_tokens=1024, - messages=[ - { - "role": "user", - "content": "Tell me a joke about OpenTelemetry", - } - ], - model="claude-3-haiku-20240307", - stream=True, - ) - response_content = "" - async for event in response: - if event.type == "content_block_delta" and event.delta.type == "text_delta": - response_content += event.delta.text - - spans = exporter.get_finished_spans() - assert [span.name for span in spans] == [ - "groq.chat", - ] - groq_span = spans[0] - assert ( - groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] - == "Tell me a joke about OpenTelemetry" - ) - assert (groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.role"]) == "user" - assert ( - groq_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") - == response_content - ) - assert groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] == 8 - assert ( - groq_span.attributes[SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] - + groq_span.attributes[SpanAttributes.LLM_USAGE_PROMPT_TOKENS] - == groq_span.attributes[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] - ) - - metrics_data = reader.get_metrics_data() - resource_metrics = metrics_data.resource_metrics - assert len(resource_metrics) > 0 - - found_token_metric = False - found_choice_metric = False - found_duration_metric = False - # TODO found_exception_metric = False - - for rm in resource_metrics: - for sm in rm.scope_metrics: - for metric in sm.metrics: - if metric.name == Meters.LLM_TOKEN_USAGE: - found_token_metric = True - for data_point in metric.data.data_points: - assert data_point.attributes[SpanAttributes.LLM_TOKEN_TYPE] in [ - "output", - "input", - ] - assert ( - data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] - == "claude-3-haiku-20240307" - ) - assert data_point.sum > 0 - - if metric.name == Meters.LLM_GENERATION_CHOICES: - found_choice_metric = True - for data_point in metric.data.data_points: - assert data_point.value >= 1 - assert ( - data_point.attributes[SpanAttributes.LLM_RESPONSE_MODEL] - == "claude-3-haiku-20240307" - ) - - if metric.name == Meters.LLM_OPERATION_DURATION: - found_duration_metric = True - assert any( - data_point.count > 0 for data_point in metric.data.data_points - ) - assert any( - data_point.sum > 0 for data_point in metric.data.data_points - ) - assert all( - data_point.attributes.get(SpanAttributes.LLM_RESPONSE_MODEL) - == "claude-3-haiku-20240307" - or data_point.attributes.get("error.type") == "TypeError" - for data_point in metric.data.data_points - ) - - assert all( - data_point.attributes.get("gen_ai.system") == "groq" - for data_point in metric.data.data_points - ) - - assert found_token_metric is True - assert found_choice_metric is True - assert found_duration_metric is True diff --git a/packages/sample-app/poetry.lock b/packages/sample-app/poetry.lock index fd5b8439f..799d19340 100644 --- a/packages/sample-app/poetry.lock +++ b/packages/sample-app/poetry.lock @@ -7751,4 +7751,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "7811c39d2e7669cfccdf9e4416d9fa8bbe1a44c2bbe76fbc834b40d17cd83f99" +content-hash = "9f3e863dc49b7988da668356c35ee48b85afd529531114c88509205f5bd048d3" diff --git a/packages/sample-app/pyproject.toml b/packages/sample-app/pyproject.toml index 04ae15aab..5afc8a821 100644 --- a/packages/sample-app/pyproject.toml +++ b/packages/sample-app/pyproject.toml @@ -79,6 +79,10 @@ develop = true path = "../opentelemetry-instrumentation-google-generativeai" develop = true +[tool.poetry.dependencies.opentelemetry-instrumentation-groq] +path = "../opentelemetry-instrumentation-groq" +develop = true + [tool.poetry.dependencies.traceloop-sdk] path = "../traceloop-sdk" develop = true From 4c3492792397d463d776182c3f0e458cff8c3759 Mon Sep 17 00:00:00 2001 From: Gal Kleinman Date: Wed, 4 Sep 2024 14:08:33 +0300 Subject: [PATCH 6/8] missing test files --- .../test_chat_tracing/test_async_chat.yaml | 558 ++++++++++++++++++ .../test_chat_tracing/test_chat.yaml | 555 +++++++++++++++++ .../tests/traces/conftest.py | 87 +++ .../tests/traces/test_chat_tracing.py | 52 ++ 4 files changed, 1252 insertions(+) create mode 100644 packages/opentelemetry-instrumentation-groq/tests/traces/cassettes/test_chat_tracing/test_async_chat.yaml create mode 100644 packages/opentelemetry-instrumentation-groq/tests/traces/cassettes/test_chat_tracing/test_chat.yaml create mode 100644 packages/opentelemetry-instrumentation-groq/tests/traces/conftest.py create mode 100644 packages/opentelemetry-instrumentation-groq/tests/traces/test_chat_tracing.py diff --git a/packages/opentelemetry-instrumentation-groq/tests/traces/cassettes/test_chat_tracing/test_async_chat.yaml b/packages/opentelemetry-instrumentation-groq/tests/traces/cassettes/test_chat_tracing/test_async_chat.yaml new file mode 100644 index 000000000..a57234a7c --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/tests/traces/cassettes/test_chat_tracing/test_async_chat.yaml @@ -0,0 +1,558 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": "Tell me a joke about opentelemetry"}], + "model": "llama3-8b-8192"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '108' + content-type: + - application/json + host: + - api.groq.com + user-agent: + - AsyncGroq/Python 0.10.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.10.0 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.11.8 + method: POST + uri: https://api.groq.com/openai/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA1SSy46bQBBF9/mKmtpMIsEIjDGPTZSsklUWiZRFiFADBbQHunB3oQyx/O9RW2NH + 08tb56oefc+oOyyxHZW08zKF1EYq21MRdn3Wh3sq4lCpqAipOMT5Po37tC0wQG6O1Mqr8anleZlI + NBsMsLWkhDos42yX7vdpkqcBztzRhCVOk5pVEuZNmMfFztMj65Yclr/OqE1HL1hGAc7knBoIyzNa + nghLVM5pJ8qI97ARMr77JzjyM4FqeBX4tpD5QRPNJHZ7gC9k6dEBGyorU5mf4wad7kBGekuCGsgI + DAzCvmrVsn30js/UqtURaIE/yoETuw7DpM3gwQrFqpYqBC0OaGa/vQNlOqjQLcq8Vnoib3HAPfR2 + dWKVJx98g/ff2dotAC2PDhQ0WjyloELwk+nWVRiqCZbVBNCsAl9h5OU6UIUtr0aoqxCUNw/M3fUY + Dx/wEuDEw2K5cViadZoC7LXRbqwtKccGS3TCC15+B7je7nxaaaVa9ExYRk9RkaaHJEmTABfL8yK1 + 8DMZh2Wc/5ducLTL0/0hzfzX3JJwN2TRW/lmSvPk+gIUFjXd+Ty/Kzf0EMd5VhSXAN3mhOa612Yg + u1h9TUG/1HFWNFFf7K7hfKkHyye/1DXblk51FB8PW741Y9//jW2yy+yx3bJtsAovl3f/AAAA//8D + ACe+x+IFAwAA + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8bdd431b4bf109bd-HFA + Cache-Control: + - private, max-age=0, no-store, no-cache, must-revalidate + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 04 Sep 2024 10:23:06 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=3VOLzrB2b7tQa6OLgKEysEv378qZxGpU.Gy0A0twAvU-1725445386-1.0.1.1-JvEG6WuEFulYhMinuqrUeQjMJmtM9z7bWIpoP.R0e2Z_qXTYxHm.zt0qI1uv4lcwWgtlTBMdG6D4IiRkxJ4Pgw; + path=/; expires=Wed, 04-Sep-24 10:53:06 GMT; domain=.groq.com; HttpOnly; Secure; + SameSite=None + Transfer-Encoding: + - chunked + alt-svc: + - h3=":443"; ma=86400 + vary: + - Origin + via: + - 1.1 google + x-ratelimit-limit-requests: + - '14400' + x-ratelimit-limit-tokens: + - '30000' + x-ratelimit-remaining-requests: + - '14397' + x-ratelimit-remaining-tokens: + - '29987' + x-ratelimit-reset-requests: + - 17.399999999s + x-ratelimit-reset-tokens: + - 26ms + x-request-id: + - req_01j6y8ybhffz1r327rjcy7ygra + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "user", "content": "Tell me a joke about opentelemetry"}], + "model": "llama3-8b-8192"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '108' + content-type: + - application/json + host: + - api.groq.com + user-agent: + - AsyncGroq/Python 0.10.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.10.0 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.11.8 + method: POST + uri: https://api.groq.com/openai/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA1STQW/bMAyF7/sVLC/dALuwkjh2fBm6Wy/bgA7YYR4C2aYtNbLkSnRbo8h/H5Q2 + 7Sro9PCePhKknlF3WGGrJLfjZNJedK0s2iLdbvIs3ayaddpkpUhpJzZZTkJkosEEXXNHLb8Gr1o3 + ToZYO4sJtp4kU4eVKFb5ZhNvgqPryGCFxshRrtOySUuxW0W3crqlgNWfZ9S2oyessgRHCkEOhNUz + emcIK5Qh6MDScsw4y2Qj/Rru3IFANm5m+DGR/UWGRmK/JKDI02UAZ6mqbW1/qwU63QEr+ugEbQP7 + eSTLMDhgFy1eTsvXGPtGrZwDgWZ4lAF6IqPtABKMZjYENf6XT6mrEWbbkT9xJk8hzJ7A9aDkQwyy + g5HkSaQH8gsrbYcEmpnPiPjYMJhXc41hkjZSOEBkSAOKpGEFOoSZwkWs8vOt87HnGzhY9wiaLwNI + aDRHsoQab39ef091UDXCNNsX3g0oN506a7ybB8UnJ3vZUo0vwTBqQ7GMxc0eetnSxRc8JmjcMHnX + BKzsbEyCvbY6qL0nGZzFCgO7CY9/E5zPY7yfaaY965Gwyq4yIYrdOi+KBCfvxon37A5kA1aifJfO + 5kwUu1KstnHy50V7C5TlR/kcKtYvJ0F2LM07INu+SW/eXKzFJt8dEwxLYBr3vbYD+cnr05r1017u + irandS4JE3zaD97dx7ZOn8fT/T4Td9tll+VU9svgH3u1ztkehHps8Hj89A8AAP//AwAEF2/gZgMA + AA== + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8bdd448efebf09c9-HFA + Cache-Control: + - private, max-age=0, no-store, no-cache, must-revalidate + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 04 Sep 2024 10:24:05 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=E95GTw1BxQ9rOb_ZE3j78bHueJdGjidU1U4hAPYy2UI-1725445445-1.0.1.1-IBJwigTtrhW.jRypxOCPFeaReNbHoDrjdqg8CvsyTSfksHQwgdnnwidk3l9TIBNhNXTbklcCZFlPMqwMyDqnoQ; + path=/; expires=Wed, 04-Sep-24 10:54:05 GMT; domain=.groq.com; HttpOnly; Secure; + SameSite=None + Transfer-Encoding: + - chunked + alt-svc: + - h3=":443"; ma=86400 + vary: + - Origin + via: + - 1.1 google + x-ratelimit-limit-requests: + - '14400' + x-ratelimit-limit-tokens: + - '30000' + x-ratelimit-remaining-requests: + - '14397' + x-ratelimit-remaining-tokens: + - '29987' + x-ratelimit-reset-requests: + - 17.563999999s + x-ratelimit-reset-tokens: + - 26ms + x-request-id: + - req_01j6y905e8fygrwfh35tnk1hwb + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "user", "content": "Tell me a joke about opentelemetry"}], + "model": "llama3-8b-8192"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '108' + content-type: + - application/json + host: + - api.groq.com + user-agent: + - AsyncGroq/Python 0.10.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.10.0 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.11.8 + method: POST + uri: https://api.groq.com/openai/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA1SSQY+bMBCF/4o7pz3AymBwgMtK/QO9VOqhVMixB/CusYk9KImi/PeK1SZV5/j0 + vhk9P9/AGuhAz4r0srocRXWUVVXmxhxMXpVa5OqATa7GUgjJq6ZtDGQQju+o6Qt81WFZHZINHjLQ + ERWhga44lHVVyUaIDJZg0EEHzqlFibw55k3Rlrt7DlZjgu73Daw3eIGOZ7BgSmpC6G4Qg0PoQKVk + EylPOxM8od+v/5qvzFjDaEb2Y0X/Ex0uSPHKdHAONYXIpsAo7I6o1utb73v/HbXaEjJL7KwSGxGd + 9RPrwdhE0R43QtMDU96ws/KEZl9wDvGD0RzDNs3MUmI9rDGsalJ77h6YTWnD9I29TEjM0hvcM3Bh + WmM4Juj85lwGo/U2zUNElYKHDhKFFe5/MtgecU8bbjiQXRA6/soLKbisec2/psz2q8tKA4UP9Am6 + ovknPSheNIUUVbk/1aOZJyDq/+UHVLaFlFIeMqBAyj39tXgqD6vgbSM4b+8ZpGsiXIbR+gnjGu1n + LeM6qJHXdX3Qai/5MkwxnPZ4n58t4mngxbu8KjVd6r9KNS6zLC4oTykpzk4zt0gpVKqt5QIAAAD/ + /wMAKygkFZYCAAA= + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8bdd6670cf4d09cd-HFA + Cache-Control: + - private, max-age=0, no-store, no-cache, must-revalidate + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 04 Sep 2024 10:47:13 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=B99c6Ol1Gk9VFoAt4P766.QQFeA9CJguBre1.YFa2ak-1725446833-1.0.1.1-m9Y_qd.X1r32.IZSozUynumGVGums9_mPu79Iejmmhf_cpXjOQS0m3iLnCnBuTduKYEza6w8A1.yVCCkLcg1Hw; + path=/; expires=Wed, 04-Sep-24 11:17:13 GMT; domain=.groq.com; HttpOnly; Secure; + SameSite=None + Transfer-Encoding: + - chunked + alt-svc: + - h3=":443"; ma=86400 + vary: + - Origin + via: + - 1.1 google + x-ratelimit-limit-requests: + - '14400' + x-ratelimit-limit-tokens: + - '30000' + x-ratelimit-remaining-requests: + - '14397' + x-ratelimit-remaining-tokens: + - '29987' + x-ratelimit-reset-requests: + - 17.379s + x-ratelimit-reset-tokens: + - 26ms + x-request-id: + - req_01j6yaagx5e3v9spwdtskf78dq + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "user", "content": "Tell me a joke about opentelemetry"}], + "model": "llama3-8b-8192"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '108' + content-type: + - application/json + host: + - api.groq.com + user-agent: + - AsyncGroq/Python 0.10.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.10.0 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.11.8 + method: POST + uri: https://api.groq.com/openai/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA1SSu47bMBBFf4U7TRppofeDTYCtttsyRRwItDSS6KVImjPaWDD874GM2EimvDgH + g3lcQQ8goZ8V94s3MWLWtnnVxlgcs7hIsyZWbT/GRVqkeVvgoMYCInDHE/b8V3zt3eINsnYWIugD + KsYBZFpnZVFUTV1FsLgBDUgwRi0qj5tj3KRtttOz0z0SyJ9X0HbAC8gkggWJ1IQgrxCcQZCgiDSx + srw7zjLavfs7BvxGwlmUB3uwP+ZNDHoQPKP48GgZDS7IYRPa7nKPYnKC3Q4E5bfvu/SGvVoJhWbx + W5EgDus0GW2nHTwAeWUPIDST0EQr0ssuvTuPgmfFYlEDis2tYtLTZPAFbhEYN/ngjgTSrsZEMGqr + ae4CKnIWJBA7D7dfEayPKc8rrtixXhBk8pqkadnkdd1E4INbPHfsPtESyPSf6AEnaVsVZbnv5XGG + J58X/8cPJ2vye0XAjpV58mX2TB5onmRt3TT5LQLaiHHpRm0nDD7o+w1G3zV1rsoqaescIrh0U3Dn + faj7ZwU8d0l6qjZ1/AopliMtquxP1VcSwgXh9ke1XAAAAAD//wMA6AlWRIMCAAA= + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8bdd6783f89309b9-HFA + Cache-Control: + - private, max-age=0, no-store, no-cache, must-revalidate + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 04 Sep 2024 10:47:57 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=6jdrGR.lvW3n5tNce_9kkGSuSzUuk35NphrlyjwZ.ek-1725446877-1.0.1.1-p0TCG1CvFpkQez0l_8hL9ym7Bis6iorVvZdFq7B3hU3sl52cwZftRs3QXKSHh5pnvWlsGFeTIRT61u0_UZWV4w; + path=/; expires=Wed, 04-Sep-24 11:17:57 GMT; domain=.groq.com; HttpOnly; Secure; + SameSite=None + Transfer-Encoding: + - chunked + alt-svc: + - h3=":443"; ma=86400 + vary: + - Origin + via: + - 1.1 google + x-ratelimit-limit-requests: + - '14400' + x-ratelimit-limit-tokens: + - '30000' + x-ratelimit-remaining-requests: + - '14397' + x-ratelimit-remaining-tokens: + - '29987' + x-ratelimit-reset-requests: + - 17.575s + x-ratelimit-reset-tokens: + - 26ms + x-request-id: + - req_01j6yabvr1e5fsma5cj6v0rrxe + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "user", "content": "Tell me a joke about opentelemetry"}], + "model": "llama3-8b-8192"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '108' + content-type: + - application/json + host: + - api.groq.com + user-agent: + - AsyncGroq/Python 0.10.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.10.0 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.11.8 + method: POST + uri: https://api.groq.com/openai/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA1ySy27bMBBF9/0KZjZpASnQ+7Up0FV3XbRAF3UhUNJIYkyRNDmCoxgG+g/9w35J + QSd2H7OcORdzLzknEAM00M+c+sXIsMrzNB+zKuRFEYdZ0WVhx4s87JO0iMeRj9jnEIDuHrGnV+FD + rxcjkYRWEEBvkRMO0MRlkmdZWRRJAIseUEIDUvKFp2HVhVVcJ56etejRQfPtBEIN+ARNFMCCzvEJ + oTmB1RKhAe6ccMQVeY1WhMpv/4gW7x3TCpud2qmv88YGMTCakX0yqL6gxAXJboxPqIhNmpH2U8vN + 9t4rPmDPV4dMEDtyxxzZdZqkUJMHd+AMVztgghzDRfuAjnE1XNgR8QJKsccL4TeJ3rEjWmRGqMlP + O6QjomKDGEe03sTAiXfcobvzBt5+1tZuARN07xhnnSCmR8bZDkakft4B+/Xj539hzOptWPybd2Q9 + f/cOzgFIPRmrOweNWqUMYBRKuLm1yJ1W0IAjbeD8PYD1+sqHFVdsSSwITfSQxmUSxVEa1S9VBmCs + Xgy1pPeoHDRx9af1KoqivM7KvPT/cz2HG19k/7avmjx9qQBIE5c3vkpunRtaJ1VUR+k5ALc5wqUd + hZrQGisutzCatipTnhdRXaYQwFM7WX3w4S4XbvHQRvFjsXUpHWd8TmpKlv54zPfbkDzD+fzmNwAA + AP//AwAfDIZ/CwMAAA== + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8bdd7ab1cde709cd-HFA + Cache-Control: + - private, max-age=0, no-store, no-cache, must-revalidate + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 04 Sep 2024 11:01:03 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=OHMFrRf6PNmUKeLYTzb.OgFzP1Z8EnIG22G2l8GNq4s-1725447663-1.0.1.1-6xNF.bNavw7nis0mklGsP9z10UWUjEerqXasZht3RMg3wkfy4a0z0mJgSl9cecAQaKq49lh12SGge34IZwsgCQ; + path=/; expires=Wed, 04-Sep-24 11:31:03 GMT; domain=.groq.com; HttpOnly; Secure; + SameSite=None + Transfer-Encoding: + - chunked + alt-svc: + - h3=":443"; ma=86400 + vary: + - Origin + via: + - 1.1 google + x-ratelimit-limit-requests: + - '14400' + x-ratelimit-limit-tokens: + - '30000' + x-ratelimit-remaining-requests: + - '14398' + x-ratelimit-remaining-tokens: + - '29987' + x-ratelimit-reset-requests: + - 11.486s + x-ratelimit-reset-tokens: + - 26ms + x-request-id: + - req_01j6yb3twhez29t2mcww5kyd2z + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "user", "content": "Tell me a joke about opentelemetry"}], + "model": "llama3-8b-8192"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '108' + content-type: + - application/json + host: + - api.groq.com + user-agent: + - AsyncGroq/Python 0.10.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.10.0 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.11.8 + method: POST + uri: https://api.groq.com/openai/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA1SSvW7cMBCE+zzFehsngGToXzo1AVIlVYoESBEFAiWtdLQprkyuYB+Me/eAh9wZ + aWe/4SzJeUM9YYvjUcm4biYuKaNE5WVcj00ZF0WRxSodhzhpyiIdDll6qAeMkIdHGuWf8WHkdTMk + mi1GODpSQhO2aZ2VRVFXTR7hyhMZbNEYtao8boa4SQ9ZoI+sR/LY/n5DbSd6xTaJcCXv1ULYvqFj + Q9ii8l57UVaCh62QDelfydG9B7bUdrazv44nmPQEciT4vpH9SYZWEncCtZAVWBiEw9Sp7fQ5OL7Q + qHZPoAVelAcvbl8Wo+0SwA7FqZE6BC0e+MWC9n4nD8pOF3wmurAKjBYxBB0a9hIM9rJEh+A3ZTsE + nm+HjDzRXQj/+IOdO4EOo3sPCgYtAVTQ4cpWC7tY26VDIOfYRTDsAt/gyNtl4Q61DQuvZCWmqUNQ + 4FdtCNjCiXcHsxrp7hOeIzS8bI4Hj63djYlw1lb7Y+9IebbYohfe8Pwnwv367s877dSLXgnb5CFJ + q6auiyKLcHO8btILP5H12KbNu3SFk/SQp0Wah6+6NuNmqIv/5aupSusqz0KCsChz4w/vyg3Nq0NR + leU5Qn/yQms/a7uQ25y+1GLeejUnZVnWowole+0Xx8/hVpeyO3ruk/SxOg3FXMq8iLdenqrFDlat + L3g+f/gLAAD//wMASmka5xYDAAA= + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8bdd7b2f0d6209cb-HFA + Cache-Control: + - private, max-age=0, no-store, no-cache, must-revalidate + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 04 Sep 2024 11:01:23 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=cwDFv14SLT5xX0jmQUqWVTT.RsD6fKV5aqmrvHWV3E4-1725447683-1.0.1.1-9eh7iQ3ggYrqFICvPbG0u6TO9qdFaiiOXIGVGQR3I37e6aElp1SNAH99j8CBnBbU0OUUDs.PgEP5Ck0RYHe4EQ; + path=/; expires=Wed, 04-Sep-24 11:31:23 GMT; domain=.groq.com; HttpOnly; Secure; + SameSite=None + Transfer-Encoding: + - chunked + alt-svc: + - h3=":443"; ma=86400 + vary: + - Origin + via: + - 1.1 google + x-ratelimit-limit-requests: + - '14400' + x-ratelimit-limit-tokens: + - '30000' + x-ratelimit-remaining-requests: + - '14398' + x-ratelimit-remaining-tokens: + - '29987' + x-ratelimit-reset-requests: + - 10.682s + x-ratelimit-reset-tokens: + - 26ms + x-request-id: + - req_01j6yb4f5tfgtsnstk6gnbnamw + status: + code: 200 + message: OK +version: 1 diff --git a/packages/opentelemetry-instrumentation-groq/tests/traces/cassettes/test_chat_tracing/test_chat.yaml b/packages/opentelemetry-instrumentation-groq/tests/traces/cassettes/test_chat_tracing/test_chat.yaml new file mode 100644 index 000000000..2b0607216 --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/tests/traces/cassettes/test_chat_tracing/test_chat.yaml @@ -0,0 +1,555 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": "Tell me a joke about opentelemetry"}], + "model": "llama3-8b-8192"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '108' + content-type: + - application/json + host: + - api.groq.com + user-agent: + - Groq/Python 0.10.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.10.0 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.11.8 + method: POST + uri: https://api.groq.com/openai/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA1SSu47bMBBFf4U7TRppIVkvmk2AVEmVJkCKOBAoaiTRS3FkcoSsYPjfAxmxg2V5 + eS7mcecKtgcFZtJs5sWldVnVx3wY0qLUQ1r22ZDq3OTpgFLKQdayMgYSoO6Mhv8ZXw3Ni0O25CEB + E1Az9qDy5lCVZVXIKoGZenSgwDk96yKVXSrz42GnJ7IGI6hfV7C+x3dQWQIzxqhHBHWFQA5BgY7R + Rtaedw95Rr9X/4oBP0WhxZneUOiOVhbfF/Q/0OGMHDZ18if/c9pEb/uPP2IkwSR4QtGTYQqfd/QL + Gr1GFJbFHx3FgOisH4UWzjI7FCdwFFlYfzdy0AbjCV526zcx0YKCJ82iC9aPe193Yq+z0RoEbvgC + twQcjUugLoLyq3MJDNbbOLUBdSQPCiLTArffCayPLVxWXLFlOyOo7DXL67qpy/KYwBJoXrhlekMf + QeXyv/SAs7yRzSHf9/aI6cmXxUf54SkqWewvASbW7snX+VN5ok19yKqyuCUQt8g4t4P1I4Yl2HtG + w9LqIauqqjF6T/y9HQNd9qHulxfw0mb5ud7kprcFu0uo679KyrMsMjcqNjPOUKqt5QIAAAD//wMA + RfKJzqMCAAA= + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8bdd43153af209bf-HFA + Cache-Control: + - private, max-age=0, no-store, no-cache, must-revalidate + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 04 Sep 2024 10:23:05 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=LB2wU.4QF2Qax2J7zJtkB3dZRKtlNn2F..r.4nXTkac-1725445385-1.0.1.1-5ZAL7jPyUUlJ56YOs.PLQkS2TjlLpVyGMQt84_02yYCF3eqs2lovbZ6GtdF82PZtq5Q4PqgHfMjUsHE.Frf3yA; + path=/; expires=Wed, 04-Sep-24 10:53:05 GMT; domain=.groq.com; HttpOnly; Secure; + SameSite=None + Transfer-Encoding: + - chunked + alt-svc: + - h3=":443"; ma=86400 + vary: + - Origin + via: + - 1.1 google + x-ratelimit-limit-requests: + - '14400' + x-ratelimit-limit-tokens: + - '30000' + x-ratelimit-remaining-requests: + - '14398' + x-ratelimit-remaining-tokens: + - '29987' + x-ratelimit-reset-requests: + - 10.332999999s + x-ratelimit-reset-tokens: + - 26ms + x-request-id: + - req_01j6y8yaypebqr66bn9r72s63h + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "user", "content": "Tell me a joke about opentelemetry"}], + "model": "llama3-8b-8192"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '108' + content-type: + - application/json + host: + - api.groq.com + user-agent: + - Groq/Python 0.10.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.10.0 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.11.8 + method: POST + uri: https://api.groq.com/openai/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA1STTW+bQBCG7/0Vk7n0AhFgwIZL1Z5aKVIPPfRQKmuAAW+y7G52h9go8n+vcGpH + 2duM3mc+NO++ouqxxu5A0k1Ox1VS5ElGRUxF2sV5USVxVWYcU77Ni6Qth6LvMELbPnIn/8H7zk5O + syhrMMLOMwn3WKfbrMjzIs/zCCfbs8YataaJNvGujXdpla3qg1UdB6z/vKIyPZ+wTiKcOAQaGetX + 9FYz1kghqCBkZGWsETZr96/QenphCHbWcCQjAcTCgckDGbCOjbDmicUv8Gif+K4xjfnOnj8HsIbr + Nfx9WKBXPciB4ecH4pcjA6NdS8qBPbnlywp8447mwKAEjhRgYNbKjNCgeOqUGRuM9QJkTsrO4Q5+ + vMmO1nvF/YWys+7B8At7aBmo1bz2aNB562gk4QZBSYAX0jMDmXU4kneU9JGWsLJB5u4JlAGCBlsa + Rxq5wZh7CELC95d9reO3AhP1DIud4eHnwx2eI9R2dN62AWszax3hoIwKh71nCtZgjUGsw/PfCOfr + OZ5nnnkvamKsk/skLcs021TROvrkZC/2iU3AOt29p67aZJPlWZUW6wGvfrkB2/Jj+gqVm7cXoVgh + fdNX+S1zk5bFtszy3TnCsAThaT8oM7J3Xl3MMrh9SeV2mxJXq4dP+9Hb53Wpyxfw/LxP0sdyqZIi + mYZlDKf82C9uGtw2O+H5/OkfAAAA//8DAJ/oAXwsAwAA + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8bdd4487acfd09c9-HFA + Cache-Control: + - private, max-age=0, no-store, no-cache, must-revalidate + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 04 Sep 2024 10:24:04 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=hQYNAKKBzEm8s69m03dxlIiV3sckuAKgLPW.QjWIRGM-1725445444-1.0.1.1-6zhK54gkwepht06KCCBGx0UAWicf3Z8LpmkyQ.McgdLIYLjLTsvU94rbAR9dhLpGoBabCrRM0D5wMkxOYLmaTw; + path=/; expires=Wed, 04-Sep-24 10:54:04 GMT; domain=.groq.com; HttpOnly; Secure; + SameSite=None + Transfer-Encoding: + - chunked + alt-svc: + - h3=":443"; ma=86400 + vary: + - Origin + via: + - 1.1 google + x-ratelimit-limit-requests: + - '14400' + x-ratelimit-limit-tokens: + - '30000' + x-ratelimit-remaining-requests: + - '14398' + x-ratelimit-remaining-tokens: + - '29987' + x-ratelimit-reset-requests: + - 10.593999999s + x-ratelimit-reset-tokens: + - 26ms + x-request-id: + - req_01j6y9050mfygsx4wdypmfp72x + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "user", "content": "Tell me a joke about opentelemetry"}], + "model": "llama3-8b-8192"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '108' + content-type: + - application/json + host: + - api.groq.com + user-agent: + - Groq/Python 0.10.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.10.0 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.11.8 + method: POST + uri: https://api.groq.com/openai/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA1RSy46cMBC85ys6fUkiwYrHMDBcIuWWUw4bKYcQocY04A3YHrvZXbSaf48YZSaK + j+Wqcpe73lD3WKOaSNTi5jjPs6Tk7BQfKzXEh+JQxZ3qkrjKU86zslKqLzFC2z2xkr/CB2UXN7No + azBC5ZmEe6zTMisOh2OVZxEutucZa5xnWiiPqy6u0lO2syerFQesf76hNj2/Yp1EuHAINDLWb+jt + zFgjhaCDkJFdY42w2V//MW3Q6x5kYvjm2HznmRcWv8GjIwOjBbH7pSe3fW5MY76wojUwaIEXChDE + r+M4azPuxAZfPDnQEmBi6oG8XU3f4NXedoH9M/cwk7BRG5Dprx4TPe96gol8D6IXhmYf0bCSq/HE + 0FsJDULH8sJswPN55SDh/T7Sx0fr/RaBlg8BCDotYAcgaDA4Mg3GQkG0AreaCLpV4CtM1l0jdF6b + cReFRc+8R9js6mEgxe8/4SXC2Y7O2y5gbdZ5jnDQRoep9UzBGqwxiHV4+RXhevvu88ort3sKrJOH + JM3KIj9UWYTO28VJK/Y3m4B1Wv2DbuQkPWX7wvcN3QpxFxzL/+GbqCiqfD8RihWa7/yquCN3alkW + ZZWklwjDFoSXdtBmZO+8vrZhcO2RjmWZEp8URvjajt6e91TXjns+t0n6dNyIxpMfSqq2UCaSFENV + LBteLu/+AAAA//8DAMaqmtcNAwAA + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8bdd666ce95609cb-HFA + Cache-Control: + - private, max-age=0, no-store, no-cache, must-revalidate + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 04 Sep 2024 10:47:12 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=XTMhFlamhEzWNARy.lbw5ySeBBvsmrRjtyEWAjjJP.0-1725446832-1.0.1.1-99KexJW7rCYNON5Ejz9dGYxXmRPcO_wvdtw.bySSyqbXHlr6CYGnI4rFoSxT20VSlFIbcfy03Tr6ntpp7cjiLw; + path=/; expires=Wed, 04-Sep-24 11:17:12 GMT; domain=.groq.com; HttpOnly; Secure; + SameSite=None + Transfer-Encoding: + - chunked + alt-svc: + - h3=":443"; ma=86400 + vary: + - Origin + via: + - 1.1 google + x-ratelimit-limit-requests: + - '14400' + x-ratelimit-limit-tokens: + - '30000' + x-ratelimit-remaining-requests: + - '14398' + x-ratelimit-remaining-tokens: + - '29987' + x-ratelimit-reset-requests: + - 10.781s + x-ratelimit-reset-tokens: + - 26ms + x-request-id: + - req_01j6yaag9rf7a8ys70t05f85my + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "user", "content": "Tell me a joke about opentelemetry"}], + "model": "llama3-8b-8192"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '108' + content-type: + - application/json + host: + - api.groq.com + user-agent: + - Groq/Python 0.10.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.10.0 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.11.8 + method: POST + uri: https://api.groq.com/openai/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA1SRza7UMAxGXyV4w6a96n/TbJBYsWODxIJBVZq4nVzSpMSuYDS6745aMYPw8tM5 + nyX7Ds6CAnPVbNbN57WcWt1OfV5XRZU31WRz2bQ6l/2EZWdqWzYdZBCnVzT8V3wxcd08sosBMjAJ + NaMFVfZV2zSd7LsM1mjRgwLv9arrXE65LIfqoK/RGSRQ3+7ggsXfoIoMViTSC4K6Q4oeQYEmcsQ6 + 8OHEwBiO7Z8w4XsSMaC6hEv4er0J66zgK4rPG4Yv6HFFTjdhovdoOCaxRMHxIJLebh8O6yMavRMK + x+KXJjEjehcWoYV3zB7FBUbadLhAHtCKuLOYU1yF9v5cZB1xctPOaAUnbU432LOLOO3LctZxFBcg + Eze8wFnimIQj2pHewVsGPi5bihOBCrv3GcwuOLqOCTXFAAqI4wZv3zPYH5f5ueOOI7sVQRUvRVk2 + rZTFkMGW4rrxyPEHBgJVyn/RAy4qWbe9bI5jPn73FJr6//gh1a2sj8mAI2v/5LvymTxR2XVDWfZv + GdCNGNdxdmHBtCV3Pm7exrIfpmIeKjP8kZKOUkV8elF+IchX4ORYlFoYb2CYZVaZmFSWWJSabVFW + XmlgUlaWmmVQVp6nVFvLBQAAAP//AwArJB6PuAIAAA== + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8bdd67816d5309c3-HFA + Cache-Control: + - private, max-age=0, no-store, no-cache, must-revalidate + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 04 Sep 2024 10:47:56 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=GDyP8J2C_S.4V_CHLuslifmDkMCMz8PSksUdnwBGO0g-1725446876-1.0.1.1-APCJteS5eT_zOAV5Hq6_G3IV1eoJs465UqfWvQIIZW3PJlEdKQaWe5ooEyywWlFVyAo7hJU2WuKhyUjzQA02PA; + path=/; expires=Wed, 04-Sep-24 11:17:56 GMT; domain=.groq.com; HttpOnly; Secure; + SameSite=None + Transfer-Encoding: + - chunked + alt-svc: + - h3=":443"; ma=86400 + vary: + - Origin + via: + - 1.1 google + x-ratelimit-limit-requests: + - '14400' + x-ratelimit-limit-tokens: + - '30000' + x-ratelimit-remaining-requests: + - '14398' + x-ratelimit-remaining-tokens: + - '29869' + x-ratelimit-reset-requests: + - 11.354999999s + x-ratelimit-reset-tokens: + - 261ms + x-request-id: + - req_01j6yabvarek8vwy04vvej0vwn + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "user", "content": "Tell me a joke about opentelemetry"}], + "model": "llama3-8b-8192"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '108' + content-type: + - application/json + host: + - api.groq.com + user-agent: + - Groq/Python 0.10.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.10.0 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.11.8 + method: POST + uri: https://api.groq.com/openai/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA1SSMa/UMBCEe36F2YbGebKdXBK7QaKio0Gi4FDkJJvEh2P7bAcuerr/jvLEHWLL + 2fm0mtG+ghlBwbDoPKzBFkz2KMRUFlq2oqjaEytaZGMxiHqcelnLSo5AwfcXHPJf8GXwa7CYjXdA + YYioM46geCNOVdXUNaew+hEtKLBWr7os2r5ouRSHe/FmwATq+ysYN+INFKOwYkp6RlCvEL1FUKBT + Milrlw/Gu4zuuP4ZI35IxDtUZ3d235adjGYkeUHyJaD7ihZXzHEnKWhHZk+yP5ZRh/3jAXzCQW8J + icnkt05kQrTGzeQMxqUctxVdxvEMRLubwby/hzsF6+cQfZ9Auc1aCpNxJi1dRJ28AwUp+wD3HxS2 + R4Trhht22awIir0wzqXkvJLPoRCiX0Pusv+JLoHi7T/pQTEhGJdNc8R/tP0ERP2//IAEr49pKGSf + tX36q+qpPK1lW7d1Vd0ppD1lXLvJuBljiOat6il0vJE9m6QYJFC4dXP01yPe2wNFvHaMX+q9L/OA + 2LP+sl9T2Zw4Lr9KuN/f/QEAAP//AwDxTnLyagIAAA== + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8bdd7aae89f109cd-HFA + Cache-Control: + - private, max-age=0, no-store, no-cache, must-revalidate + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 04 Sep 2024 11:01:02 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=nn9wNi04z9JzyVg.9IPUCmsneYDS56do0qzAzIMIJME-1725447662-1.0.1.1-Hga9u3H87yHkOmJ3lf3mD_x7NLIHyQ1nqUjirOcs9Ln1BVATiRvPAlKfsnWJOVLre34i9w6.BKGonKMy_6IPEg; + path=/; expires=Wed, 04-Sep-24 11:31:02 GMT; domain=.groq.com; HttpOnly; Secure; + SameSite=None + Transfer-Encoding: + - chunked + alt-svc: + - h3=":443"; ma=86400 + vary: + - Origin + via: + - 1.1 google + x-ratelimit-limit-requests: + - '14400' + x-ratelimit-limit-tokens: + - '30000' + x-ratelimit-remaining-requests: + - '14399' + x-ratelimit-remaining-tokens: + - '29987' + x-ratelimit-reset-requests: + - 6s + x-ratelimit-reset-tokens: + - 26ms + x-request-id: + - req_01j6yb3tceeb0bjyqs3751ehv3 + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "user", "content": "Tell me a joke about opentelemetry"}], + "model": "llama3-8b-8192"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '108' + content-type: + - application/json + host: + - api.groq.com + user-agent: + - Groq/Python 0.10.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.10.0 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.11.8 + method: POST + uri: https://api.groq.com/openai/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA1SRy47bMAxFf0Xl2h7YiV/RpsD8QDcDdFEXgWLRtmb0GpFGEwT598IZJ2i5JO/R + 5RWvYDRIGGbFg4s27wpV1WWt82Hf7PNq1Do/1bshb3VTNkPZqBE7yCCc3nHgDXwZgosW2QQPGQwJ + FaMGWba7uqrapiszcEGjBQnWKqf2eXfKu/KwW9VzMAMSyF9XMF7jGWSRgUMiNSHIK6RgESQoIkOs + PK9M8Ix+df85X4Q2WvCM4kdE/4YWHXK6CIrKiykIDuswqXj53vvev+KgFkJhWPxRJEZEa/wketCG + OJnTwqh7EMqfDfJFKK/vOuK0TNNdykH0IGIKUU2KsQdhmAS6sManb+J1YWH8fSP0Olud3hdi4RE1 + 6i/c+PVBh543fNuD7oY94DmGtM54RrdF2GIYYrhlYMMUUzgRSL9Ym8FovKH5mFBR8CCBOES4/c5g + efzj54ILHtk4BFm8FOWhrOqmKw5bdRnEFFzkI4cP9ASy/Kf1oIqybZp9W603eJz8CdS7/9sPqNp/ + VQYcWNmnvi2enae0Lg6HtmhvGdCFGN1xNH7CFJO533v8q4L4xDQDU1NT8+REUOqpiE8vyi8EeQ+c + iotSC+MNDLPMKpNMUsqz0yrSLIoMDMqSctOMkgoNs5Vqa7kAAAAA//8DAIa+r9bvAgAA + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8bdd7b2a4e4a09bf-HFA + Cache-Control: + - private, max-age=0, no-store, no-cache, must-revalidate + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 04 Sep 2024 11:01:22 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=kh2iaDCBqJFglplI95U4sRvTEU66COsQTYQocku7NZQ-1725447682-1.0.1.1-vTOzesStou.VAjy1wNDDy9695tfM1GTzVOFW5BQeJ6GlPwufHOJH2mI1cST8Z2k883QTZ5A42Duzadrluyp_xw; + path=/; expires=Wed, 04-Sep-24 11:31:22 GMT; domain=.groq.com; HttpOnly; Secure; + SameSite=None + Transfer-Encoding: + - chunked + alt-svc: + - h3=":443"; ma=86400 + vary: + - Origin + via: + - 1.1 google + x-ratelimit-limit-requests: + - '14400' + x-ratelimit-limit-tokens: + - '30000' + x-ratelimit-remaining-requests: + - '14399' + x-ratelimit-remaining-tokens: + - '29987' + x-ratelimit-reset-requests: + - 6s + x-ratelimit-reset-tokens: + - 26ms + x-request-id: + - req_01j6yb4dwkfxf8r00vbmf2bq1k + status: + code: 200 + message: OK +version: 1 diff --git a/packages/opentelemetry-instrumentation-groq/tests/traces/conftest.py b/packages/opentelemetry-instrumentation-groq/tests/traces/conftest.py new file mode 100644 index 000000000..8279e11bb --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/tests/traces/conftest.py @@ -0,0 +1,87 @@ +"""Unit tests configuration module.""" + +import os + +import pytest +from opentelemetry import metrics, trace +from opentelemetry.instrumentation.groq import GroqInstrumentor +from opentelemetry.sdk.metrics import Counter, Histogram, MeterProvider +from opentelemetry.sdk.metrics.export import ( + AggregationTemporality, + InMemoryMetricReader, +) +from opentelemetry.sdk.resources import Resource +from opentelemetry.sdk.trace import TracerProvider +from opentelemetry.sdk.trace.export import SimpleSpanProcessor +from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter +from groq import Groq, AsyncGroq + + +@pytest.fixture(scope="session") +def exporter(): + exporter = InMemorySpanExporter() + processor = SimpleSpanProcessor(exporter) + + provider = TracerProvider() + provider.add_span_processor(processor) + trace.set_tracer_provider(provider) + + return exporter + + +@pytest.fixture(scope="session") +def reader(): + reader = InMemoryMetricReader( + {Counter: AggregationTemporality.DELTA, Histogram: AggregationTemporality.DELTA} + ) + return reader + + +@pytest.fixture(scope="session") +def meter_provider(reader): + resource = Resource.create() + meter_provider = MeterProvider(metric_readers=[reader], resource=resource) + metrics.set_meter_provider(meter_provider) + + return meter_provider + + +@pytest.fixture(scope="session", autouse=True) +def instrument(exporter, reader, meter_provider): + GroqInstrumentor(enrich_token_usage=True).instrument() + + yield + + exporter.shutdown() + reader.shutdown() + meter_provider.shutdown() + + +@pytest.fixture(autouse=True) +def clear_exporter_reader(exporter, reader): + exporter.clear() + reader.get_metrics_data() + + +@pytest.fixture(autouse=True) +def environment(): + os.environ["GROQ_API_KEY"] = "api-key" + + +@pytest.fixture +def groq_client(): + return Groq( + api_key=os.environ.get("GROQ_API_KEY"), + ) + + +@pytest.fixture +def async_groq_client(): + return AsyncGroq( + api_key=os.environ.get("GROQ_API_KEY"), + ) + + +@pytest.fixture(scope="module") +def vcr_config(): + return {"filter_headers": ["authorization", "api-key"]} diff --git a/packages/opentelemetry-instrumentation-groq/tests/traces/test_chat_tracing.py b/packages/opentelemetry-instrumentation-groq/tests/traces/test_chat_tracing.py new file mode 100644 index 000000000..f748dbb72 --- /dev/null +++ b/packages/opentelemetry-instrumentation-groq/tests/traces/test_chat_tracing.py @@ -0,0 +1,52 @@ +import pytest +from opentelemetry.semconv_ai import SpanAttributes + + +@pytest.mark.vcr +def test_chat(exporter, groq_client): + groq_client.chat.completions.create( + model="llama3-8b-8192", + messages=[{"role": "user", "content": "Tell me a joke about opentelemetry"}], + ) + + spans = exporter.get_finished_spans() + + assert [span.name for span in spans] == [ + "groq.chat", + ] + groq_span = spans[0] + assert ( + groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] + == "Tell me a joke about opentelemetry" + ) + assert groq_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") + assert groq_span.attributes.get(SpanAttributes.LLM_IS_STREAMING) is False + assert groq_span.attributes.get(SpanAttributes.LLM_USAGE_PROMPT_TOKENS) > 0 + assert groq_span.attributes.get(SpanAttributes.LLM_USAGE_COMPLETION_TOKENS) > 0 + assert groq_span.attributes.get(SpanAttributes.LLM_USAGE_TOTAL_TOKENS) > 0 + + +@pytest.mark.vcr +@pytest.mark.asyncio +async def test_async_chat(exporter, async_groq_client): + await async_groq_client.chat.completions.create( + model="llama3-8b-8192", + messages=[{"role": "user", "content": "Tell me a joke about opentelemetry"}], + ) + + spans = exporter.get_finished_spans() + + assert [span.name for span in spans] == [ + "groq.chat", + ] + groq_span = spans[0] + assert ( + groq_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"] + == "Tell me a joke about opentelemetry" + ) + assert groq_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content") + assert groq_span.attributes.get(SpanAttributes.LLM_IS_STREAMING) is False + assert groq_span.attributes.get(SpanAttributes.LLM_USAGE_PROMPT_TOKENS) > 0 + assert groq_span.attributes.get(SpanAttributes.LLM_USAGE_COMPLETION_TOKENS) > 0 + assert groq_span.attributes.get(SpanAttributes.LLM_USAGE_TOTAL_TOKENS) > 0 + From 3d2ed41fe33eba54066571deda02e488ae2a20eb Mon Sep 17 00:00:00 2001 From: Gal Kleinman Date: Wed, 4 Sep 2024 14:19:14 +0300 Subject: [PATCH 7/8] lint --- .../opentelemetry/instrumentation/groq/__init__.py | 2 +- .../tests/traces/test_chat_tracing.py | 1 - packages/sample-app/sample_app/groq_example.py | 1 + packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py | 3 +-- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py index d36defafc..14a0cfd5b 100644 --- a/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py +++ b/packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py @@ -182,7 +182,7 @@ def _set_completions(span, choices): @dont_throw def _set_response_attributes(span, response): response = model_as_dict(response) - + set_span_attribute(span, SpanAttributes.LLM_RESPONSE_MODEL, response.get("model")) usage = response.get("usage") diff --git a/packages/opentelemetry-instrumentation-groq/tests/traces/test_chat_tracing.py b/packages/opentelemetry-instrumentation-groq/tests/traces/test_chat_tracing.py index f748dbb72..90a041dc7 100644 --- a/packages/opentelemetry-instrumentation-groq/tests/traces/test_chat_tracing.py +++ b/packages/opentelemetry-instrumentation-groq/tests/traces/test_chat_tracing.py @@ -49,4 +49,3 @@ async def test_async_chat(exporter, async_groq_client): assert groq_span.attributes.get(SpanAttributes.LLM_USAGE_PROMPT_TOKENS) > 0 assert groq_span.attributes.get(SpanAttributes.LLM_USAGE_COMPLETION_TOKENS) > 0 assert groq_span.attributes.get(SpanAttributes.LLM_USAGE_TOTAL_TOKENS) > 0 - diff --git a/packages/sample-app/sample_app/groq_example.py b/packages/sample-app/sample_app/groq_example.py index b696948c1..5cf0cf4dc 100644 --- a/packages/sample-app/sample_app/groq_example.py +++ b/packages/sample-app/sample_app/groq_example.py @@ -11,6 +11,7 @@ api_key=os.environ.get("GROQ_API_KEY"), ) + @task(name="generate_joke") def generate_joke(): completion = client.chat.completions.create( diff --git a/packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py b/packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py index a55b8cfad..e0bc210f7 100644 --- a/packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py +++ b/packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py @@ -1034,7 +1034,7 @@ def init_redis_instrumentor(): logging.error(f"Error initializing redis instrumentor: {e}") Telemetry().log_exception(e) return False - + def init_groq_instrumentor(): try: @@ -1054,7 +1054,6 @@ def init_groq_instrumentor(): return False - def metrics_common_attributes(): common_attributes = {} workflow_name = get_value("workflow_name") From 11f0b9e05357353943db992bb2b860ef177e8179 Mon Sep 17 00:00:00 2001 From: Gal Kleinman <33281963+galkleinman@users.noreply.github.com> Date: Wed, 4 Sep 2024 15:13:36 +0300 Subject: [PATCH 8/8] Update packages/sample-app/sample_app/groq_example.py Co-authored-by: Doron Kopit <83537683+doronkopit5@users.noreply.github.com> --- packages/sample-app/sample_app/groq_example.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sample-app/sample_app/groq_example.py b/packages/sample-app/sample_app/groq_example.py index 5cf0cf4dc..2f1133367 100644 --- a/packages/sample-app/sample_app/groq_example.py +++ b/packages/sample-app/sample_app/groq_example.py @@ -5,7 +5,7 @@ from groq import Groq from traceloop.sdk import Traceloop -Traceloop.init(app_name="langchain_example") +Traceloop.init(app_name="groq_example") client = Groq( api_key=os.environ.get("GROQ_API_KEY"),