From fd56555bc808b30a58250e9da5b0388ad9cdaf36 Mon Sep 17 00:00:00 2001 From: mdciri Date: Fri, 15 Nov 2024 11:22:55 +0100 Subject: [PATCH 01/66] Update scripts to accept langfuse --- apps/chatbot/config/prompts.yaml | 17 +- apps/chatbot/docker/app.local.Dockerfile | 10 +- apps/chatbot/docker/compose.yaml | 57 +++- .../docker/docker-compose-build-local.sh | 2 + apps/chatbot/docker/docker-compose-up-api.sh | 2 +- .../chatbot/docker/docker-run-create-index.sh | 2 +- apps/chatbot/poetry.lock | 38 ++- apps/chatbot/pyproject.toml | 1 + apps/chatbot/src/modules/chatbot.py | 171 +++++++++--- .../src/modules/create_vector_index.py | 2 - apps/chatbot/src/modules/engine.py | 4 +- apps/chatbot/src/modules/evaluation.py | 6 +- apps/chatbot/src/modules/handlers.py | 258 ++++++++++++++++++ apps/chatbot/src/modules/models.py | 31 +-- apps/chatbot/src/modules/presidio.py | 14 +- apps/chatbot/src/modules/test_chatbot.py | 27 +- apps/chatbot/src/modules/utils.py | 14 +- apps/chatbot/src/modules/vector_database.py | 51 ++-- 18 files changed, 587 insertions(+), 120 deletions(-) create mode 100755 apps/chatbot/docker/docker-compose-build-local.sh create mode 100644 apps/chatbot/src/modules/handlers.py diff --git a/apps/chatbot/config/prompts.yaml b/apps/chatbot/config/prompts.yaml index c57a379243..185e4ff0cd 100644 --- a/apps/chatbot/config/prompts.yaml +++ b/apps/chatbot/config/prompts.yaml @@ -60,9 +60,16 @@ refine_prompt_str: | Answer with either the original answer or with a refined answer to better answer the user query according to the `Chatbot Policy` listed above. Answer: +condense_prompt_str: | + Given a conversation (between Human and Assistant) and a follow up message from Human, rewrite the message to be a standalone question that captures all relevant context from the conversation. + + The standalone question must be in Italian. + + + {chat_history} + + + {question} + + -# Reply to the user following these two steps: -# Step 1: -# Pay great attention in detail on the query's language and determine if it is formulated in Italian, English, Spanish, French, German, Greek, Croatian, or Slovenian ('yes' or 'no'). -# Step 2: -# If Step 1 returns 'yes': reply according to the `Chatbot Policy` listed above. If `no`, reply you cannot speak that language and ask for a new query written in an accepted language. diff --git a/apps/chatbot/docker/app.local.Dockerfile b/apps/chatbot/docker/app.local.Dockerfile index 532ebf0b73..154ee9dfc9 100644 --- a/apps/chatbot/docker/app.local.Dockerfile +++ b/apps/chatbot/docker/app.local.Dockerfile @@ -3,7 +3,15 @@ ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ apt-get install -y \ - curl + curl \ + wget \ + zip + +RUN wget https://github.com/rphrp1985/selenium_support/raw/main/chrome_114_amd64.deb && \ + apt-get install -y ./chrome_114_amd64.deb && \ + wget https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip && \ + unzip chromedriver_linux64.zip && \ + mv chromedriver /usr/bin/chromedriver ENV PYTHONPATH=/app diff --git a/apps/chatbot/docker/compose.yaml b/apps/chatbot/docker/compose.yaml index 349c715027..6737ce5261 100644 --- a/apps/chatbot/docker/compose.yaml +++ b/apps/chatbot/docker/compose.yaml @@ -14,9 +14,31 @@ services: condition: service_started dynamodb: condition: service_started + langfuse: + condition: service_started + networks: - ntw - + + postgres: + image: postgres + restart: always + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 3s + timeout: 3s + retries: 10 + environment: + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=postgres + - POSTGRES_DB=postgres + ports: + - "5432:5432" + volumes: + - database_data:/var/lib/postgresql/data + networks: + - ntw + dynamodb: image: amazon/dynamodb-local:2.5.2 environment: @@ -27,7 +49,7 @@ services: - "8000:8000" networks: - ntw - + redis: image: redis/redis-stack:7.2.0-v13 ports: @@ -53,5 +75,36 @@ services: networks: - ntw + langfuse: + image: langfuse/langfuse:2 + depends_on: + postgres: + condition: service_healthy + ports: + - "3000:3000" + environment: + - DATABASE_URL=${DATABASE_URL:-} + - NEXTAUTH_SECRET=${NEXTAUTH_SECRET:-} + - SALT=${SALT:-} + - ENCRYPTION_KEY=${ENCRYPTION_KEY:-} + - NEXTAUTH_URL=${NEXTAUTH_URL:-} + - TELEMETRY_ENABLED=${TELEMETRY_ENABLED:-true} + - LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES=${LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES:-false} + - LANGFUSE_INIT_ORG_ID=${LANGFUSE_INIT_ORG_ID:-} + - LANGFUSE_INIT_ORG_NAME=${LANGFUSE_INIT_ORG_NAME:-} + - LANGFUSE_INIT_PROJECT_ID=${LANGFUSE_INIT_PROJECT_ID:-} + - LANGFUSE_INIT_PROJECT_NAME=${LANGFUSE_INIT_PROJECT_NAME:-} + - LANGFUSE_INIT_PROJECT_PUBLIC_KEY=${LANGFUSE_PUBLIC_KEY:-} + - LANGFUSE_INIT_PROJECT_SECRET_KEY=${LANGFUSE_SECRET_KEY:-} + - LANGFUSE_INIT_USER_EMAIL=${LANGFUSE_INIT_USER_EMAIL:-} + - LANGFUSE_INIT_USER_NAME=${LANGFUSE_INIT_USER_NAME:-} + - LANGFUSE_INIT_USER_PASSWORD=${LANGFUSE_INIT_USER_PASSWORD:-} + networks: + - ntw + +volumes: + database_data: + driver: local + networks: ntw: diff --git a/apps/chatbot/docker/docker-compose-build-local.sh b/apps/chatbot/docker/docker-compose-build-local.sh new file mode 100755 index 0000000000..bab889c9b2 --- /dev/null +++ b/apps/chatbot/docker/docker-compose-build-local.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker compose --env-file .env -f docker/compose.yaml -p chatbot build diff --git a/apps/chatbot/docker/docker-compose-up-api.sh b/apps/chatbot/docker/docker-compose-up-api.sh index 05cfd55912..ffb89369ea 100755 --- a/apps/chatbot/docker/docker-compose-up-api.sh +++ b/apps/chatbot/docker/docker-compose-up-api.sh @@ -1,2 +1,2 @@ #!/bin/bash -docker compose -f docker/compose.yaml -p chatbot up api +docker compose --env-file .env -f docker/compose.yaml -p chatbot up api diff --git a/apps/chatbot/docker/docker-run-create-index.sh b/apps/chatbot/docker/docker-run-create-index.sh index 0752c47297..3e03f4f306 100755 --- a/apps/chatbot/docker/docker-run-create-index.sh +++ b/apps/chatbot/docker/docker-run-create-index.sh @@ -1,2 +1,2 @@ #!/bin/bash -docker compose -f docker/compose.yaml -p chatbot up create_index +docker compose --env-file .env -f docker/compose.yaml -p chatbot run create_index diff --git a/apps/chatbot/poetry.lock b/apps/chatbot/poetry.lock index 32fbb2b447..b591250036 100644 --- a/apps/chatbot/poetry.lock +++ b/apps/chatbot/poetry.lock @@ -440,6 +440,17 @@ files = [ [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] +[[package]] +name = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, +] + [[package]] name = "beautifulsoup4" version = "4.12.3" @@ -2924,6 +2935,31 @@ files = [ [package.dependencies] six = "*" +[[package]] +name = "langfuse" +version = "2.53.9" +description = "A client library for accessing langfuse" +optional = false +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "langfuse-2.53.9-py3-none-any.whl", hash = "sha256:04363bc323f7513621c88a997003f7b906ae8f5d096bd54221cfcb6bf7a6f16a"}, + {file = "langfuse-2.53.9.tar.gz", hash = "sha256:6bfecf86e28c684034ae52a0b19535c94cc86923085267b548d63e5c1ce2b82c"}, +] + +[package.dependencies] +anyio = ">=4.4.0,<5.0.0" +backoff = ">=1.10.0" +httpx = ">=0.15.4,<1.0" +idna = ">=3.7,<4.0" +packaging = ">=23.2,<25.0" +pydantic = ">=1.10.7,<3.0" +wrapt = ">=1.14,<2.0" + +[package.extras] +langchain = ["langchain (>=0.0.309)"] +llama-index = ["llama-index (>=0.10.12,<2.0.0)"] +openai = ["openai (>=0.27.8)"] + [[package]] name = "language-data" version = "1.2.0" @@ -7647,4 +7683,4 @@ propcache = ">=0.2.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "5239adf8b9e2e41191596282c6ca6d2646403e5562fd7c8d711ef8891919acfb" +content-hash = "2167e611e3b38ce2712e7cae4a51da903fef36c11058029d750e045ca0da77b4" diff --git a/apps/chatbot/pyproject.toml b/apps/chatbot/pyproject.toml index 52d87a00cb..31f67e5fba 100644 --- a/apps/chatbot/pyproject.toml +++ b/apps/chatbot/pyproject.toml @@ -36,6 +36,7 @@ llama-index-embeddings-gemini = "^0.2.0" llama-index-llms-bedrock-converse = "^0.3.0" llama-index-postprocessor-presidio = "^0.2.0" pytest = "^8.3.3" +langfuse = "^2.53.9" [tool.poetry.group.dev.dependencies] gradio = "^4.36.1" diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index 1af707b5b5..5dbe52528f 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -1,6 +1,6 @@ import os import re -import logging +from logging import getLogger import nest_asyncio from typing import Union, Tuple, Optional, List @@ -10,15 +10,20 @@ from llama_index.core.chat_engine.types import AgentChatResponse, StreamingAgentChatResponse from llama_index.core.async_utils import asyncio_run +from langfuse import Langfuse +from langfuse.llama_index import LlamaIndexInstrumentor + from src.modules.models import get_llm, get_embed_model from src.modules.vector_database import load_automerging_index_redis, REDIS_KVSTORE, INDEX_ID from src.modules.engine import get_automerging_engine +from src.modules.handlers import EventHandler from src.modules.presidio import PresidioPII from dotenv import load_dotenv load_dotenv() -nest_asyncio.apply() +# nest_asyncio.apply() +logger = getLogger(__name__) USE_PRESIDIO = True if (os.getenv("CHB_USE_PRESIDIO", "True")).lower() == "true" else False @@ -37,8 +42,15 @@ "che puoi trovare sul sito: https://dev.developer.pagopa.it!" ) )] - -logging.getLogger().setLevel(os.getenv("LOG_LEVEL", "INFO")) +LANGFUSE_PUBLIC_KEY = os.getenv("LANGFUSE_PUBLIC_KEY") +LANGFUSE_SECRET_KEY = os.getenv("LANGFUSE_SECRET_KEY") +LANGFUSE_HOST = os.getenv("DATABASE_URL") +LANGFUSE_TAG = os.getenv("LANGFUSE_TAG") +LANGFUSE = Langfuse( + public_key = LANGFUSE_PUBLIC_KEY, + secret_key = LANGFUSE_SECRET_KEY, + host = LANGFUSE_HOST +) class Chatbot(): @@ -62,14 +74,21 @@ def __init__( chunk_sizes=params["vector_index"]["chunk_sizes"], chunk_overlap=params["vector_index"]["chunk_overlap"] ) - self.qa_prompt_tmpl, self.ref_prompt_tmpl = self._get_prompt_templates() + self.qa_prompt_tmpl, self.ref_prompt_tmpl, self.condense_prompt_tmpl = self._get_prompt_templates() self.engine = get_automerging_engine( self.index, - llm=self.model, - text_qa_template=self.qa_prompt_tmpl, - refine_template=self.ref_prompt_tmpl, + llm = self.model, + text_qa_template = self.qa_prompt_tmpl, + refine_template = self.ref_prompt_tmpl, + condense_template = self.condense_prompt_tmpl, verbose=self.params["engine"]["verbose"] ) + self.instrumentor = LlamaIndexInstrumentor( + public_key = LANGFUSE_PUBLIC_KEY, + secret_key = LANGFUSE_SECRET_KEY, + host = LANGFUSE_HOST, + ) + self.instrumentor._event_handler = EventHandler(langfuse_client=LANGFUSE) def _get_prompt_templates(self) -> Tuple[PromptTemplate, PromptTemplate]: @@ -83,16 +102,25 @@ def _get_prompt_templates(self) -> Tuple[PromptTemplate, PromptTemplate]: } ) - ref_prompt_tmpl = PromptTemplate( - self.prompts["refine_prompt_str"], - prompt_type="refine", - template_var_mappings = { - "existing_answer": "existing_answer", - "query_str": "query_str" + ref_prompt_tmpl = None + # PromptTemplate( + # self.prompts["refine_prompt_str"], + # prompt_type="refine", + # template_var_mappings = { + # "existing_answer": "existing_answer", + # "query_str": "query_str" + # } + # ) + + condense_prompt_tmpl = PromptTemplate( + self.prompts["condense_prompt_str"], + template_var_mappings={ + "chat_history": "chat_history", + "question": "question" } ) - return qa_prompt_tmpl, ref_prompt_tmpl + return qa_prompt_tmpl, ref_prompt_tmpl, condense_prompt_tmpl def _get_response_str(self, engine_response: RESPONSE_TYPE) -> str: @@ -128,7 +156,7 @@ def _unmask_reference(self, response_str: str, nodes) -> str: # Find all matches in the text hashed_urls = re.findall(pattern, response_str) - logging.info(f"[chatbot.py - _unmask_reference] Generated answer has {len(hashed_urls)} references taken from {len(nodes)} nodes. First node has score: {nodes[0].score:.4f}.") + logger.info(f"Generated answer has {len(hashed_urls)} references taken from {len(nodes)} nodes. First node has score: {nodes[0].score:.4f}.") for hashed_url in hashed_urls: url = REDIS_KVSTORE.get( collection=f"hash_table_{INDEX_ID}", @@ -156,7 +184,7 @@ def mask_pii(self, message: str) -> str: masked_message = masked_message + "Rif:" + split_message[1] return masked_message except Exception as e: - logging.warning(f"[chatbot.py - mask_pii] exception in mask_pii: {e}") + logger.warning(f"Exception: {e}") else: return message @@ -180,39 +208,106 @@ def _messages_to_chathistory(self, messages: Optional[List[dict]] = None) -> Lis chat_history = START_CHAT_MESSAGE + chat_history return chat_history + + def update_trace_with_feedback(self, trace_id, user_feedback) -> None: - def generate(self, query_str: str) -> str: + with self.instrumentor.observe(trace_id=trace_id) as trace: - try: - engine_response = self.engine.query(query_str) - response_str = self._get_response_str(engine_response) + trace.update( + metadata={ + "user_feedback": user_feedback + } + ) + + def get_trace(self, trace_id: str): + + trace = {} + try: + trace_langfuse = LANGFUSE.get_trace(trace_id) + for item in trace_langfuse: + key, value = item + trace[key] = value except Exception as e: - response_str = "Scusa, non sono riuscito ad elaborare questa domanda.\nChiedimi un'altra domanda." - logging.info(f"[chatbot.py - generate] Exception: {e}") + logger.error(e) - return response_str + return trace - def chat_generate(self, query_str: str, messages: Optional[List[dict]] = None) -> str: + def generate( + self, + query_str: str, + trace_id: str, + session_id: str = "session-abc", + user_id: str = "user-123" + ) -> str: + with self.instrumentor.observe( + trace_id = trace_id, + session_id = session_id, + user_id = user_id, + tags=[LANGFUSE_TAG], + metadata={"user_feedback": None} + ) as trace: + + try: + engine_response = self.engine.query(query_str) + response_str = self._get_response_str(engine_response) + + except Exception as e: + response_str = "Scusa, non posso elaborare la tua richiesta.\nProva a chiedimi una nuova domanda." + logger.error(f"Exception: {e}") + trace.update( + input=self.mask_pii(query_str), + output=self.mask_pii(response_str), + ) + + self.instrumentor.flush() + + return response_str + + + def chat_generate( + self, + query_str: str, + trace_id: str | None = None, + session_id: str = "session-abc", + user_id: str = "user-123", + messages: Optional[List[dict]] = None, + ) -> str: + chat_history = self._messages_to_chathistory(messages) - try: - if USE_ASYNC and not USE_STREAMING: - engine_response = asyncio_run(self.engine.achat(query_str, chat_history)) - elif not USE_ASYNC and USE_STREAMING: - engine_response = self.engine.stream_chat(query_str, chat_history) - elif USE_ASYNC and USE_STREAMING: - engine_response = asyncio_run(self.engine.astream_chat(query_str, chat_history)) - else: - engine_response = self.engine.chat(query_str, chat_history) - response_str = self._get_response_str(engine_response) + with self.instrumentor.observe( + trace_id = trace_id, + session_id = session_id, + user_id = user_id, + tags = [LANGFUSE_TAG], + metadata={"user_feedback": None} + ) as trace: - except Exception as e: - response_str = "Scusa, non sono riuscito ad elaborare questa domanda.\nChiedimi un'altra domanda." - logging.info(f"[chatbot.py - generate] Exception: {e}") + try: + if USE_ASYNC and not USE_STREAMING: + engine_response = asyncio_run(self.engine.achat(query_str, chat_history)) + elif not USE_ASYNC and USE_STREAMING: + engine_response = self.engine.stream_chat(query_str, chat_history) + elif USE_ASYNC and USE_STREAMING: + engine_response = asyncio_run(self.engine.astream_chat(query_str, chat_history)) + else: + engine_response = self.engine.chat(query_str, chat_history) + response_str = self._get_response_str(engine_response) + + except Exception as e: + response_str = "Scusa, non posso elaborare la tua richiesta.\nProva a chiedimi una nuova domanda." + logger.error(f"Exception: {e}") + + trace.update( + input=self.mask_pii(query_str), + output=self.mask_pii(response_str), + ) + + self.instrumentor.flush() return response_str diff --git a/apps/chatbot/src/modules/create_vector_index.py b/apps/chatbot/src/modules/create_vector_index.py index 95f4a54954..c78c50a0c3 100644 --- a/apps/chatbot/src/modules/create_vector_index.py +++ b/apps/chatbot/src/modules/create_vector_index.py @@ -1,7 +1,6 @@ import os import yaml import argparse -import logging from src.modules.models import get_llm, get_embed_model from src.modules.vector_database import build_automerging_index_redis @@ -9,7 +8,6 @@ from dotenv import load_dotenv load_dotenv() -logging.basicConfig(level=os.getenv("LOG_LEVEL", "INFO")) DOCUMENTATION_DIR = os.getenv("CHB_DOCUMENTATION_DIR") AWS_S3_BUCKET = os.getenv("CHB_AWS_S3_BUCKET", os.getenv("AWS_S3_BUCKET")) diff --git a/apps/chatbot/src/modules/engine.py b/apps/chatbot/src/modules/engine.py index a49acab56c..6fb199cd82 100644 --- a/apps/chatbot/src/modules/engine.py +++ b/apps/chatbot/src/modules/engine.py @@ -23,6 +23,7 @@ def get_automerging_engine( response_mode: str = "compact", text_qa_template: PromptTemplate | None = None, refine_template: PromptTemplate | None = None, + condense_template: PromptTemplate | None = None, verbose: bool = True, use_chat_engine: bool | None = None ) -> (RetrieverQueryEngine | CondenseQuestionChatEngine): @@ -57,7 +58,8 @@ def get_automerging_engine( if use_chat_engine: automerging_engine = CondenseQuestionChatEngine.from_defaults( - query_engine = automerging_engine + query_engine = automerging_engine, + condense_question_prompt = condense_template ) return automerging_engine \ No newline at end of file diff --git a/apps/chatbot/src/modules/evaluation.py b/apps/chatbot/src/modules/evaluation.py index 68aa118f14..0a9d9e6a8d 100644 --- a/apps/chatbot/src/modules/evaluation.py +++ b/apps/chatbot/src/modules/evaluation.py @@ -3,7 +3,7 @@ import json import yaml import datetime -import logging +from logging import getLogger import asyncio import nest_asyncio from typing import Any @@ -26,7 +26,7 @@ nest_asyncio.apply() -logging.basicConfig(level=os.getenv("LOG_LEVEL", "INFO")) +logger = getLogger(__name__) def parser_function(output_str: str): @@ -224,4 +224,4 @@ def table_results(responses, eval_results): ) with open(os.path.join(results_dir, "avg_scores.json"), "w") as f: json.dump(avg_scores, f, indent=4) - logging.info(f"Results stored in {results_dir}") \ No newline at end of file + logger.info(f"Results stored in {results_dir}") \ No newline at end of file diff --git a/apps/chatbot/src/modules/handlers.py b/apps/chatbot/src/modules/handlers.py new file mode 100644 index 0000000000..3728144e3f --- /dev/null +++ b/apps/chatbot/src/modules/handlers.py @@ -0,0 +1,258 @@ +import os +from typing import Optional, Any, Union, Mapping + +from langfuse.client import ( + Langfuse, + StatefulGenerationClient, + StateType, +) +from langfuse.utils import _get_timestamp +from langfuse.model import ModelUsage +from langfuse.llama_index._context import InstrumentorContext +from uuid import uuid4 as create_uuid + +try: + from llama_index.core.base.llms.types import ( + ChatResponse, + CompletionResponse, + ) + from llama_index.core.instrumentation.events import BaseEvent + from llama_index.core.instrumentation.events.embedding import ( + EmbeddingStartEvent, + EmbeddingEndEvent, + ) + from llama_index.core.instrumentation.event_handlers import BaseEventHandler + from llama_index.core.instrumentation.events.llm import ( + LLMCompletionEndEvent, + LLMCompletionStartEvent, + LLMChatEndEvent, + LLMChatStartEvent, + ) + from llama_index.core.utilities.token_counting import TokenCounter + +except ImportError: + raise ModuleNotFoundError( + "Please install llama-index to use the Langfuse llama-index integration: 'pip install llama-index'" + ) + +from logging import getLogger +from dotenv import load_dotenv + + +load_dotenv() +logger = getLogger(__name__) + + +MODEL_ID = os.getenv("CHB_MODEL_ID") +EMBED_MODEL_ID = os.getenv("CHB_EMBED_MODEL_ID") +LLMS_COST = { + "mistral.mistral-large-2402-v1:0": {"input_cost": 0.0052 * 1.e-3, "output_cost": 0.0156 * 1.e-3}, + "models/gemini-1.5-flash": {"input_cost": 0.075 * 1.e-6, "output_cost": 0.30 * 1.e-6} +} +EMBEDDERS_COST = { + "cohere.embed-multilingual-v3" : 0.0001 * 1.e-3 +} + + +class EventHandler(BaseEventHandler, extra="allow"): + def __init__(self, *, langfuse_client: Langfuse): + super().__init__() + + self._langfuse = langfuse_client + self._token_counter = TokenCounter() + self._context = InstrumentorContext() + + @classmethod + def class_name(cls) -> str: + """Class name.""" + return "EventHandler" + + def handle(self, event: BaseEvent) -> None: + logger.debug(f"Event {type(event).__name__} received: {event}") + + if isinstance( + event, (LLMCompletionStartEvent, LLMChatStartEvent, EmbeddingStartEvent) + ): + self.update_generation_from_start_event(event) + elif isinstance( + event, (LLMCompletionEndEvent, LLMChatEndEvent, EmbeddingEndEvent) + ): + self.update_generation_from_end_event(event) + + def update_generation_from_start_event( + self, + event: Union[LLMCompletionStartEvent, LLMChatStartEvent, EmbeddingStartEvent], + ) -> None: + if event.span_id is None: + logger.warning("Span ID is not set") + return + + model_data = event.model_dict + model = model_data.pop("model", None) or model_data.pop("model_name", None) + traced_model_data = { + k: str(v) + for k, v in model_data.items() + if v is not None + and k + in [ + "max_tokens", + "max_retries", + "temperature", + "timeout", + "strict", + "top_logprobs", + "logprobs", + "embed_batch_size", + ] + } + + self._get_generation_client(event.span_id).update( + model=model, model_parameters=traced_model_data + ) + + def update_generation_from_end_event( + self, event: Union[LLMCompletionEndEvent, LLMChatEndEvent, EmbeddingEndEvent] + ) -> None: + if event.span_id is None: + logger.warning("Span ID is not set") + return + + usage = None + + if isinstance(event, (LLMCompletionEndEvent, LLMChatEndEvent)): + if event.response: + usage = self._parse_token_usage(event.response) if event.response else None + + if isinstance(event, EmbeddingEndEvent): + token_count = sum( + self._token_counter.get_string_tokens(chunk) for chunk in event.chunks + ) + + usage = { + "input": 0, + "output": 0, + "total": token_count or None, + } + + self._get_generation_client(event.span_id).update( + usage=usage, end_time=_get_timestamp() + ) + + logger.info(f"[{MODEL_ID}] Input Tokens: {usage["input"]}") + logger.info(f"[{MODEL_ID}] Output Tokens: {usage["output"]}") + # logger.info(f"[{MODEL_ID}] Latency (ms): {}") + + def _parse_token_usage( + self, response: Union[ChatResponse, CompletionResponse] + ) -> Optional[ModelUsage]: + if ( + (raw := getattr(response, "raw", None)) + and hasattr(raw, "get") + ) and ( + (usage := raw.get("usage")) + or (usage := raw.get("usage_metadata")) + ): + return _parse_usage_from_mapping(usage) + + if additional_kwargs := getattr(response, "additional_kwargs", None): + return _parse_usage_from_mapping(additional_kwargs) + + def _get_generation_client(self, id: str) -> StatefulGenerationClient: + trace_id = self._context.trace_id + if trace_id is None: + logger.warning( + "Trace ID is not set. Creating generation client with new trace id." + ) + trace_id = str(create_uuid()) + + return StatefulGenerationClient( + client=self._langfuse.client, + id=id, + trace_id=trace_id, + task_manager=self._langfuse.task_manager, + state_type=StateType.OBSERVATION, + ) + + +def _parse_usage_from_mapping( + usage: Union[object, Mapping[str, Any]], +) -> ModelUsage: + if isinstance(usage, Mapping): + return _get_token_counts_from_mapping(usage) + + return _parse_usage_from_object(usage) + + +def _parse_usage_from_object(usage: object) -> ModelUsage: + model_usage: ModelUsage = { + "unit": None, + "input": None, + "output": None, + "total": None, + "input_cost": None, + "output_cost": None, + "total_cost": None, + } + + if ( + (prompt_tokens := getattr(usage, "prompt_tokens", None)) is not None # openai + or (prompt_tokens := getattr(usage, "inputTokens", None)) is not None # bedrock + or (prompt_tokens := getattr(usage, "prompt_token_count", None)) is not None # gemini + ): + model_usage["input"] = prompt_tokens + model_usage["input_cost"] = prompt_tokens * LLMS_COST[MODEL_ID]["input_cost"] if MODEL_ID in LLMS_COST.keys() else 0 + + if ( + (completion_tokens := getattr(usage, "completion_tokens", None)) is not None # openai + or (completion_tokens := getattr(usage, "outputTokens", None)) is not None # bedrock + or (completion_tokens := getattr(usage, "candidates_token_count", None)) is not None # gemini + ): + model_usage["output"] = completion_tokens + model_usage["output_cost"] = completion_tokens * LLMS_COST[MODEL_ID]["input_cost"] if MODEL_ID in LLMS_COST.keys() else 0 + if ( + (total_tokens := getattr(usage, "total_tokens", None)) is not None # openai + or (total_tokens := getattr(usage, "totalTokens", None)) is not None # bedrock + or (total_tokens := getattr(usage, "total_token_count", None)) is not None # gemini + ): + model_usage["total"] = total_tokens + model_usage["total_cost"] = model_usage["input_cost"] + model_usage["output_cost"] + + return model_usage + + +def _get_token_counts_from_mapping( + usage_mapping: Mapping[str, Any], +) -> ModelUsage: + model_usage: ModelUsage = { + "unit": "TOKENS", + "input": None, + "output": None, + "total": None, + "input_cost": None, + "output_cost": None, + "total_cost": None, + } + if ( + (prompt_tokens := usage_mapping.get("prompt_tokens")) is not None # openai + or (prompt_tokens := usage_mapping.get("inputTokens")) is not None # bedrock + or (prompt_tokens := usage_mapping.get("prompt_token_count")) is not None # gemini + ): + model_usage["input"] = prompt_tokens + model_usage["input_cost"] = prompt_tokens * LLMS_COST[MODEL_ID]["input_cost"] if MODEL_ID in LLMS_COST.keys() else 0 + + if ( + (completion_tokens := usage_mapping.get("completion_tokens")) is not None # openai + or (completion_tokens := usage_mapping.get("outputTokens")) is not None # bedrock + or (completion_tokens := usage_mapping.get("candidates_token_count")) is not None # gemini + ): + model_usage["output"] = completion_tokens + model_usage["output_cost"] = completion_tokens * LLMS_COST[MODEL_ID]["input_cost"] if MODEL_ID in LLMS_COST.keys() else 0 + if ( + (total_tokens := usage_mapping.get("total_tokens")) is not None # openai + or (total_tokens := usage_mapping.get("totalTokens")) is not None # bedrock + or (total_tokens := usage_mapping.get("total_token_count")) is not None # gemini + ): + model_usage["total"] = total_tokens + model_usage["total_cost"] = model_usage["input_cost"] + model_usage["output_cost"] + + return model_usage diff --git a/apps/chatbot/src/modules/models.py b/apps/chatbot/src/modules/models.py index 986a92842e..d9734cd7de 100644 --- a/apps/chatbot/src/modules/models.py +++ b/apps/chatbot/src/modules/models.py @@ -1,9 +1,5 @@ import os -import logging - -from llama_index.core.instrumentation import get_dispatcher -from llama_index.core.instrumentation.event_handlers import BaseEventHandler -from llama_index.core.instrumentation.events.llm import LLMCompletionEndEvent, LLMChatEndEvent +from logging import getLogger from llama_index.llms.bedrock_converse import BedrockConverse from llama_index.embeddings.bedrock import BedrockEmbedding @@ -17,11 +13,11 @@ from src.modules.utils import get_ssm_parameter load_dotenv() +logger = getLogger(__name__) PROVIDER = os.getenv("CHB_PROVIDER", "google") assert PROVIDER in ["aws", "google"] - GOOGLE_API_KEY = get_ssm_parameter(name=os.getenv("CHB_GOOGLE_API_KEY")) AWS_ACCESS_KEY_ID = os.getenv("CHB_AWS_ACCESS_KEY_ID") AWS_SECRET_ACCESS_KEY = os.getenv("CHB_AWS_SECRET_ACCESS_KEY") @@ -38,24 +34,6 @@ def get_llm(): if PROVIDER == "aws": - - class ModelEventHandler(BaseEventHandler): - @classmethod - def class_name(cls) -> str: - """Class name.""" - return "ModelEventHandler" - - def handle(self, event) -> None: - """Logic for handling event.""" - if isinstance(event, (LLMCompletionEndEvent, LLMChatEndEvent)): - logging.info(f"[{MODEL_ID}] Bedrock request id: {event.response.raw["ResponseMetadata"]["RequestId"]}") - logging.info(f"[{MODEL_ID}] Stop Reason: {event.response.raw["stopReason"]}") - logging.info(f"[{MODEL_ID}] Input Tokens: {event.response.raw["usage"]["inputTokens"]}") - logging.info(f"[{MODEL_ID}] Output Tokens: {event.response.raw["usage"]["outputTokens"]}") - logging.info(f"[{MODEL_ID}] Latency (ms): {event.response.raw["metrics"]["latencyMs"]}") - - root_dispatcher = get_dispatcher() - root_dispatcher.add_event_handler(ModelEventHandler()) llm = BedrockConverse( model=MODEL_ID, @@ -67,6 +45,7 @@ def handle(self, event) -> None: ) else: + llm = Gemini( model=MODEL_ID, temperature=float(MODEL_TEMPERATURE), @@ -80,7 +59,7 @@ def handle(self, event) -> None: api_key=GOOGLE_API_KEY, ) - logging.info(f"[models.py - get_llm] {MODEL_ID} LLM loaded successfully!") + logger.info(f"{MODEL_ID} LLM loaded successfully!") return llm @@ -99,6 +78,6 @@ def get_embed_model(): api_key=GOOGLE_API_KEY, model_name=EMBED_MODEL_ID, ) - logging.info(f"[models.py - get_embed_model] {EMBED_MODEL_ID} embegging model loaded successfully!") + logger.info(f"{EMBED_MODEL_ID} embegging model loaded successfully!") return embed_model diff --git a/apps/chatbot/src/modules/presidio.py b/apps/chatbot/src/modules/presidio.py index ef0122d88f..fbb47fb488 100644 --- a/apps/chatbot/src/modules/presidio.py +++ b/apps/chatbot/src/modules/presidio.py @@ -1,6 +1,5 @@ -import logging -from pathlib import Path -from typing import Any, Dict, List, Union +from logging import getLogger +from typing import Any, Dict, List from langdetect import detect_langs from presidio_anonymizer.operators import Operator, OperatorType @@ -11,6 +10,9 @@ from presidio_anonymizer.entities import OperatorConfig +logger = getLogger(__name__) + + # see supported entities by Presidio with their description at: https://microsoft.github.io/presidio/supported_entities/ GLOBAL_ENTITIES = [ "CREDIT_CARD", @@ -130,17 +132,17 @@ def detect_language(self, text: str) -> str: lang_list.append(detected_lang.lang) if not lang_list: - logging.warning("[presidio.py - detect_language] No detected language.") + logger.warning("No detected language.") lang = "it" elif "it" in lang_list: lang = "it" else: lang = lang_list[0] except: - logging.warning("[presidio.py - detect_language] No detected language.") + logger.warning("No detected language.") lang = "it" - logging.info(f"[presidio.py - detect_language] Set presidio to detect PII in {lang} language.") + logger.info(f"Set presidio to detect PII in {lang} language.") return lang diff --git a/apps/chatbot/src/modules/test_chatbot.py b/apps/chatbot/src/modules/test_chatbot.py index 067d8e626f..1cf56fa124 100644 --- a/apps/chatbot/src/modules/test_chatbot.py +++ b/apps/chatbot/src/modules/test_chatbot.py @@ -1,11 +1,12 @@ import os import yaml -import logging +from logging import getLogger from pathlib import Path from src.modules.chatbot import Chatbot -logging.getLogger().setLevel(os.getenv("LOG_LEVEL", "INFO")) + +logger = getLogger(__name__) CWF = Path(__file__) @@ -47,3 +48,25 @@ def test_messages_to_chathistory(): def test_pii_mask(): masked_str = CHATBOT.mask_pii("Il mio nome e' Mario Rossi") assert masked_str == "Il mio nome e' " + + +def test_generation(): + + try: + res = CHATBOT.generate("GPD gestisce i pagamenti spontanei?") + except Exception as e: + print(e) + res = f"Something went wrong!" + + assert res != f"Something went wrong!" + + +def test_chat_generation(): + + try: + res = CHATBOT.chat_generate("GPD gestisce i pagamenti spontanei?") + except Exception as e: + logger.error(e) + res = f"Something went wrong!" + + assert res != f"Something went wrong!" diff --git a/apps/chatbot/src/modules/utils.py b/apps/chatbot/src/modules/utils.py index a4d7002798..88e335e3ab 100644 --- a/apps/chatbot/src/modules/utils.py +++ b/apps/chatbot/src/modules/utils.py @@ -1,10 +1,10 @@ import os import boto3 -import logging +from logging import getLogger from dotenv import load_dotenv load_dotenv() - +logger = getLogger(__name__) AWS_ACCESS_KEY_ID = os.getenv("CHB_AWS_ACCESS_KEY_ID") AWS_SECRET_ACCESS_KEY = os.getenv("CHB_AWS_SECRET_ACCESS_KEY") @@ -26,7 +26,7 @@ def get_ssm_parameter(name: str, default: str | None = None) -> str | None: :return: The value of the requested parameter. """ - logging.debug(f"[utils.py - get_ssm_parameter] Getting parameter {name} from SSM") + logger.debug(f"Getting parameter {name} from SSM") try: # Get the requested parameter response = SSM_CLIENT.get_parameter( @@ -34,16 +34,16 @@ def get_ssm_parameter(name: str, default: str | None = None) -> str | None: WithDecryption=True ) except SSM_CLIENT.exceptions.ParameterNotFound: - logging.warning(f"Parameter {name} not found in SSM, returning default") + logger.warning(f"Parameter {name} not found in SSM, returning default") return default - logging.debug(f"[utils.py - get_ssm_parameter] Parameter {name} retrieved from SSM") + logger.debug(f"Parameter {name} retrieved from SSM") return response["Parameter"]["Value"] def put_ssm_parameter(name: str, value: str) -> None: - logging.debug(f"[utils.py - put_ssm_parameter] Putting parameter {name} to SSM") + logger.debug(f"Putting parameter {name} to SSM") try: # Get the requested parameter SSM_CLIENT.put_parameter( @@ -52,5 +52,5 @@ def put_ssm_parameter(name: str, value: str) -> None: Overwrite=True ) except Exception as e: - logging.error(e) + logger.error(e) \ No newline at end of file diff --git a/apps/chatbot/src/modules/vector_database.py b/apps/chatbot/src/modules/vector_database.py index 7308333953..269b2eac30 100644 --- a/apps/chatbot/src/modules/vector_database.py +++ b/apps/chatbot/src/modules/vector_database.py @@ -3,16 +3,13 @@ import time import json import tqdm -import logging import hashlib import html2text import pytz +from logging import getLogger from datetime import datetime from bs4 import BeautifulSoup from selenium import webdriver -# from selenium.webdriver.chrome.options import Options -# from selenium.webdriver.chrome.service import Service -# from chromedriver_py import binary_path from typing import List, Tuple from llama_index.core import ( @@ -38,7 +35,10 @@ from dotenv import load_dotenv + load_dotenv() +logger = getLogger(__name__) + PROVIDER = os.getenv("CHB_PROVIDER") assert PROVIDER in ["google", "aws"] @@ -147,22 +147,26 @@ def create_documentation( hash_table = {} empty_pages = [] - # full_text = "" + driver_exe_path = "/usr/bin/chromedriver" + if os.path.exists(driver_exe_path): + driver_service = webdriver.ChromeService(executable_path=driver_exe_path) + else: + driver_service = None + driver_options = webdriver.ChromeOptions() + driver_options.add_argument('--headless') + driver_options.add_argument('--disable-gpu') + driver_options.add_argument('--no-sandbox') + driver_options.add_argument('--disable-dev-shm-usage') for file in tqdm.tqdm(html_files, total=len(html_files), desc="Extracting HTML"): - # FIX: resolve webdriver.Chrome "self.assert_process_still_running" error in docker if file in dynamic_htmls or "/webinars/" in file or "/api/" in file: - # if 6 == 9: url = file.replace(documentation_dir, f"{website_url}/").replace(".html", "") - # svc = webdriver.ChromeService(executable_path=binary_path) - # service = Service(executable_path=binary_path) - # options = webdriver.ChromeOptions() - # options.add_argument('--headless=new') - # options.add_argument('--no-sandbox') - # options.add_argument('user-agent=fake-useragent') - driver = webdriver.Chrome() #(service=service, options=options) + driver = webdriver.Chrome( + options=driver_options, + service=driver_service + ) driver.get(url) time.sleep(5) @@ -172,7 +176,6 @@ def create_documentation( title, text = html2markdown(open(file)) if text is None or text == "" or text == "None" or text=="404\n\n#### Pagina non trovata\n\nLa pagina che stai cercando non esiste": - # print(file) empty_pages.append(file) else: @@ -199,8 +202,8 @@ def create_documentation( } )) - logging.info(f"[vector_database.py - create_documentation] Number of documents with content: {len(documents)}") - logging.info(f"[vector_database.py - create_documentation] Number of empty pages in the documentation: {len(empty_pages)}. These are left out.") + logger.info(f"Number of documents with content: {len(documents)}") + logger.info(f"Number of empty pages in the documentation: {len(empty_pages)}. These are left out.") with open("empty_htmls.json", "w") as f: json.dump(empty_pages, f, indent=4) @@ -215,7 +218,7 @@ def build_automerging_index_redis( chunk_overlap: int ) -> VectorStoreIndex: - logging.info("[vector_database.py - build_automerging_index_redis] Storing vector index and hash table on Redis..") + logger.info("Storing vector index and hash table on Redis..") Settings.llm = llm Settings.embed_model = embed_model @@ -231,9 +234,9 @@ def build_automerging_index_redis( key=key, val=value ) - logging.info(f"[vector_database.py - build_automerging_index_redis] hash_table_{INDEX_ID} is now on Redis.") + logger.info(f"hash_table_{NEW_INDEX_ID} is now on Redis.") - logging.info(f"[vector_database.py - build_automerging_index_redis] Creating index {NEW_INDEX_ID} ...") + logger.info(f"Creating index {NEW_INDEX_ID} ...") nodes = Settings.node_parser.get_nodes_from_documents(documents) leaf_nodes = get_leaf_nodes(nodes) @@ -268,7 +271,7 @@ def build_automerging_index_redis( ) automerging_index.set_index_id(NEW_INDEX_ID) put_ssm_parameter(os.getenv("CHB_LLAMAINDEX_INDEX_ID"), NEW_INDEX_ID) - logging.info("[vector_database.py - build_automerging_index_redis] Created vector index successfully and stored on Redis.") + logger.info("Created vector index successfully and stored on Redis.") delete_old_index() @@ -297,7 +300,7 @@ def load_automerging_index_redis( schema=REDIS_SCHEMA ) - logging.info("[vector_database.py - load_automerging_index_redis] Loading vector index from Redis...") + logger.info("Loading vector index from Redis...") storage_context = StorageContext.from_defaults( vector_store=redis_vector_store, docstore=REDIS_DOCSTORE, @@ -311,7 +314,7 @@ def load_automerging_index_redis( return automerging_index else: - logging.error("[vector_database.py - load_automerging_index_redis] No index_id provided.") + logger.error("No index_id provided.") def delete_old_index(): @@ -321,4 +324,4 @@ def delete_old_index(): if f"{INDEX_ID}/vector" in str(key) or f"hash_table_{INDEX_ID}" == str(key): REDIS_CLIENT.delete(key) - logging.info(f"[vector_database.py - delete_old_index] Deleted index with ID: {INDEX_ID} and its hash table from Redis.") + logger.info(f"Deleted index with ID: {INDEX_ID} and its hash table from Redis.") From aa188ad69cdd154947df53197da3c5d590087b27 Mon Sep 17 00:00:00 2001 From: mdciri Date: Fri, 15 Nov 2024 11:23:38 +0100 Subject: [PATCH 02/66] Update app api.md --- apps/chatbot/src/app/api.md | 137 +++++++++++++++++++----------------- 1 file changed, 72 insertions(+), 65 deletions(-) diff --git a/apps/chatbot/src/app/api.md b/apps/chatbot/src/app/api.md index c0a5543728..56f560f337 100644 --- a/apps/chatbot/src/app/api.md +++ b/apps/chatbot/src/app/api.md @@ -1,87 +1,94 @@ -POST /queries -{ - "sessionId": string, - "question": string, - "queriedAt": string -} +### POST /queries + + { + "sessionId": string, + "question": string, + "queriedAt": string + } response: -{ - "id": string, - "sessionId": string, - "question": string, - "answer": string, - "createdAt": string, - "queriedAt": string -} ---------------------------------------------- + { + "id": string, + "sessionId": string, + "question": string, + "answer": string, + "createdAt": string, + "queriedAt": string + } + +--- -GET /healthz +### GET /healthz response: -{ - "message": "OK" -} ---------------------------------------------- + { + "message": "OK" + } + +--- -GET /queries/{id} +### GET /queries/{id} response: -{ - "id": string, - "sessionId": string, - "question": string, - "answer": string, - "createdAt": string, - "queriedAt": string -} ---------------------------------------------- + { + "id": string, + "sessionId": string, + "question": string, + "answer": string, + "createdAt": string, + "queriedAt": string + } -GET /sessions +--- + +### GET /sessions response: -[ - { - "id": string, - "title": string, - "createdAt": string - } -] ---------------------------------------------- + [ + { + "id": string, + "title": string, + "createdAt": string + } + ] + +--- -POST /sessions +### POST /sessions response: -{ - "id": string, - "title": string, - "createdAt": string -} ---------------------------------------------- + { + "id": string, + "title": string, + "createdAt": string + } -GET /queries?sessionId={sessionId} +--- + +### GET /queries?sessionId={sessionId} response: -[ - { - "id": string, - "sessionId": string, - "question": string, - "answer": string, - "createdAt": string, - "queriedAt": string - } -] - ---------------------------------------------- - -PATCH /queries/{id} - -{ - "badAnswer": boolean -} + + [ + { + "id": string, + "sessionId": string, + "question": string, + "answer": string, + "createdAt": string, + "queriedAt": string + } + ] + +--- + +### PATCH /queries/{id} + + { + "badAnswer": boolean + } From f8a172300052f0d3b9671c2b323787e84a5b3f82 Mon Sep 17 00:00:00 2001 From: mdciri Date: Mon, 18 Nov 2024 09:35:04 +0100 Subject: [PATCH 03/66] Update modules --- apps/chatbot/src/modules/chatbot.py | 47 +++++++++++++------ .../src/modules/create_vector_index.py | 5 +- apps/chatbot/src/modules/handlers.py | 13 ++--- apps/chatbot/src/modules/test_chatbot.py | 17 ++++++- 4 files changed, 59 insertions(+), 23 deletions(-) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index 5dbe52528f..33e4e91814 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -44,15 +44,14 @@ )] LANGFUSE_PUBLIC_KEY = os.getenv("LANGFUSE_PUBLIC_KEY") LANGFUSE_SECRET_KEY = os.getenv("LANGFUSE_SECRET_KEY") -LANGFUSE_HOST = os.getenv("DATABASE_URL") -LANGFUSE_TAG = os.getenv("LANGFUSE_TAG") +LANGFUSE_HOST = os.getenv("LANGFUSE_HOST") +LANGFUSE_TAG = os.getenv("LANGFUSE_TAG", "development") LANGFUSE = Langfuse( public_key = LANGFUSE_PUBLIC_KEY, secret_key = LANGFUSE_SECRET_KEY, host = LANGFUSE_HOST ) - class Chatbot(): def __init__( self, @@ -197,11 +196,11 @@ def _messages_to_chathistory(self, messages: Optional[List[dict]] = None) -> Lis chat_history += [ ChatMessage( role = MessageRole.USER, - content = message["query"] + content = message["question"] ), ChatMessage( role = MessageRole.ASSISTANT, - content = message["response"] + content = message["answer"] ) ] @@ -238,17 +237,27 @@ def get_trace(self, trace_id: str): def generate( self, query_str: str, - trace_id: str, - session_id: str = "session-abc", - user_id: str = "user-123" + trace_id: str | None = None, + session_id: str | None = None, + user_id: str | None = None, + tags: Union[str, List[str]] | None = None ) -> str: + if tags is None: + tags = [LANGFUSE_TAG] + elif isinstance(tags, str): + tags = [tags] + elif isinstance(tags, List[str]): + pass + else: + raise ValueError(f"Error! The given tags: {tags} is not acceptable. It has to be a sting, a list of string, or None") + with self.instrumentor.observe( trace_id = trace_id, session_id = session_id, user_id = user_id, - tags=[LANGFUSE_TAG], - metadata={"user_feedback": None} + tags = tags, + metadata = {"user_feedback": None} ) as trace: try: @@ -273,19 +282,29 @@ def chat_generate( self, query_str: str, trace_id: str | None = None, - session_id: str = "session-abc", - user_id: str = "user-123", + session_id: str | None = None, + user_id: str | None = None, messages: Optional[List[dict]] = None, + tags: Union[str, List[str]] | None = None ) -> str: + chat_history = self._messages_to_chathistory(messages) + if tags is None: + tags = [LANGFUSE_TAG] + elif isinstance(tags, str): + tags = [tags] + elif isinstance(tags, List[str]): + pass + else: + raise ValueError(f"Error! tags: {tags} is not acceptable. It has to be a sting, a list of string, or None") with self.instrumentor.observe( trace_id = trace_id, session_id = session_id, user_id = user_id, - tags = [LANGFUSE_TAG], - metadata={"user_feedback": None} + tags = tags, + metadata = {"user_feedback": None} ) as trace: try: diff --git a/apps/chatbot/src/modules/create_vector_index.py b/apps/chatbot/src/modules/create_vector_index.py index c78c50a0c3..0968adcb55 100644 --- a/apps/chatbot/src/modules/create_vector_index.py +++ b/apps/chatbot/src/modules/create_vector_index.py @@ -1,13 +1,17 @@ import os import yaml import argparse +import logging from src.modules.models import get_llm, get_embed_model from src.modules.vector_database import build_automerging_index_redis from dotenv import load_dotenv + load_dotenv() +logging.basicConfig(level=logging.INFO) + DOCUMENTATION_DIR = os.getenv("CHB_DOCUMENTATION_DIR") AWS_S3_BUCKET = os.getenv("CHB_AWS_S3_BUCKET", os.getenv("AWS_S3_BUCKET")) @@ -32,4 +36,3 @@ chunk_sizes=params["vector_index"]["chunk_sizes"], chunk_overlap=params["vector_index"]["chunk_overlap"] ) - diff --git a/apps/chatbot/src/modules/handlers.py b/apps/chatbot/src/modules/handlers.py index 3728144e3f..5a3910c50f 100644 --- a/apps/chatbot/src/modules/handlers.py +++ b/apps/chatbot/src/modules/handlers.py @@ -50,7 +50,8 @@ "models/gemini-1.5-flash": {"input_cost": 0.075 * 1.e-6, "output_cost": 0.30 * 1.e-6} } EMBEDDERS_COST = { - "cohere.embed-multilingual-v3" : 0.0001 * 1.e-3 + "cohere.embed-multilingual-v3": 0.0001 * 1.e-3, + "models/models/text-embedding-004": 0 } @@ -122,25 +123,25 @@ def update_generation_from_end_event( if isinstance(event, (LLMCompletionEndEvent, LLMChatEndEvent)): if event.response: usage = self._parse_token_usage(event.response) if event.response else None + logger.info(f"[{MODEL_ID}] Input Tokens: {usage["input"]}") + logger.info(f"[{MODEL_ID}] Output Tokens: {usage["output"]}") if isinstance(event, EmbeddingEndEvent): token_count = sum( self._token_counter.get_string_tokens(chunk) for chunk in event.chunks ) - usage = { "input": 0, "output": 0, - "total": token_count or None, + "total": token_count or 0, + "total_cost": token_count * EMBEDDERS_COST[EMBED_MODEL_ID] if MODEL_ID in LLMS_COST.keys() else 0 } + logger.info(f"[{EMBED_MODEL_ID}] Embedding Tokens: {usage["total"]}") self._get_generation_client(event.span_id).update( usage=usage, end_time=_get_timestamp() ) - logger.info(f"[{MODEL_ID}] Input Tokens: {usage["input"]}") - logger.info(f"[{MODEL_ID}] Output Tokens: {usage["output"]}") - # logger.info(f"[{MODEL_ID}] Latency (ms): {}") def _parse_token_usage( self, response: Union[ChatResponse, CompletionResponse] diff --git a/apps/chatbot/src/modules/test_chatbot.py b/apps/chatbot/src/modules/test_chatbot.py index 1cf56fa124..fbc6af1d6c 100644 --- a/apps/chatbot/src/modules/test_chatbot.py +++ b/apps/chatbot/src/modules/test_chatbot.py @@ -53,7 +53,10 @@ def test_pii_mask(): def test_generation(): try: - res = CHATBOT.generate("GPD gestisce i pagamenti spontanei?") + res = CHATBOT.generate( + query_str = "GPD gestisce i pagamenti spontanei?", + tags = "test" + ) except Exception as e: print(e) res = f"Something went wrong!" @@ -63,8 +66,18 @@ def test_generation(): def test_chat_generation(): + query_str = "GPD gestisce i pagamenti spontanei?" + try: - res = CHATBOT.chat_generate("GPD gestisce i pagamenti spontanei?") + res = CHATBOT.chat_generate( + query_str = query_str, + tags = "test" + ) + res = CHATBOT.chat_generate( + query_str = "sai dirmi di piĆ¹?", + messages=[{"question": query_str, "answer": res}], + tags = "test" + ) except Exception as e: logger.error(e) res = f"Something went wrong!" From e740628d9f7806255ea77f821aade2db5fdfcb7d Mon Sep 17 00:00:00 2001 From: mdciri Date: Mon, 18 Nov 2024 09:36:13 +0100 Subject: [PATCH 04/66] Update docker compose yaml file with langfuse --- apps/chatbot/docker/compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/chatbot/docker/compose.yaml b/apps/chatbot/docker/compose.yaml index 6737ce5261..3c0dc80e30 100644 --- a/apps/chatbot/docker/compose.yaml +++ b/apps/chatbot/docker/compose.yaml @@ -87,7 +87,7 @@ services: - NEXTAUTH_SECRET=${NEXTAUTH_SECRET:-} - SALT=${SALT:-} - ENCRYPTION_KEY=${ENCRYPTION_KEY:-} - - NEXTAUTH_URL=${NEXTAUTH_URL:-} + - NEXTAUTH_URL=${LANGFUSE_HOST:-} - TELEMETRY_ENABLED=${TELEMETRY_ENABLED:-true} - LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES=${LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES:-false} - LANGFUSE_INIT_ORG_ID=${LANGFUSE_INIT_ORG_ID:-} From 8ff94857a876006e2c4e2dd077df86fb6cafd54a Mon Sep 17 00:00:00 2001 From: mdciri Date: Mon, 18 Nov 2024 09:40:06 +0100 Subject: [PATCH 05/66] Update modules --- apps/chatbot/src/modules/test_chatbot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/chatbot/src/modules/test_chatbot.py b/apps/chatbot/src/modules/test_chatbot.py index fbc6af1d6c..a53c75d088 100644 --- a/apps/chatbot/src/modules/test_chatbot.py +++ b/apps/chatbot/src/modules/test_chatbot.py @@ -36,9 +36,9 @@ def test_messages_to_chathistory(): ###########################3 messages = [ - {"query": "aaaa", "response": "bbbb"}, - {"query": "cccc", "response": "dddd"}, - {"query": "eeee", "response": "ffff"}, + {"question": "aaaa", "answer": "bbbb"}, + {"question": "cccc", "answer": "dddd"}, + {"question": "eeee", "answer": "ffff"}, ] chat_history = CHATBOT._messages_to_chathistory(messages) From f66ecdc07f5e8276488b059867f28939c771ca93 Mon Sep 17 00:00:00 2001 From: mdciri Date: Mon, 18 Nov 2024 10:49:02 +0100 Subject: [PATCH 06/66] Update modules --- apps/chatbot/src/modules/chatbot.py | 2 -- apps/chatbot/src/modules/test_chatbot.py | 4 +--- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index 33e4e91814..13d16bb44b 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -1,7 +1,6 @@ import os import re from logging import getLogger -import nest_asyncio from typing import Union, Tuple, Optional, List from llama_index.core import PromptTemplate @@ -22,7 +21,6 @@ from dotenv import load_dotenv load_dotenv() -# nest_asyncio.apply() logger = getLogger(__name__) diff --git a/apps/chatbot/src/modules/test_chatbot.py b/apps/chatbot/src/modules/test_chatbot.py index a53c75d088..a544b15345 100644 --- a/apps/chatbot/src/modules/test_chatbot.py +++ b/apps/chatbot/src/modules/test_chatbot.py @@ -33,8 +33,6 @@ def test_messages_to_chathistory(): chat_history = CHATBOT._messages_to_chathistory() assert len(chat_history) == 1 - ###########################3 - messages = [ {"question": "aaaa", "answer": "bbbb"}, {"question": "cccc", "answer": "dddd"}, @@ -58,7 +56,7 @@ def test_generation(): tags = "test" ) except Exception as e: - print(e) + logger(e) res = f"Something went wrong!" assert res != f"Something went wrong!" From 591065eb4e52e1aaafb81027daebec671bd56670 Mon Sep 17 00:00:00 2001 From: mdciri Date: Mon, 18 Nov 2024 10:49:28 +0100 Subject: [PATCH 07/66] Update modules --- apps/chatbot/src/modules/chatbot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index 13d16bb44b..c91ddbe01d 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -20,6 +20,7 @@ from dotenv import load_dotenv + load_dotenv() logger = getLogger(__name__) From b801e4924313786e39a86750ef8141d4b5e2a359 Mon Sep 17 00:00:00 2001 From: mdciri Date: Mon, 18 Nov 2024 15:55:46 +0100 Subject: [PATCH 08/66] Update chatbot that masks string to send to langfuse server --- apps/chatbot/src/modules/chatbot.py | 117 +++++++++++++++++++--------- 1 file changed, 80 insertions(+), 37 deletions(-) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index c91ddbe01d..237faedaa1 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -1,7 +1,8 @@ import os import re +import uuid from logging import getLogger -from typing import Union, Tuple, Optional, List +from typing import Union, Tuple, Optional, List, Any from llama_index.core import PromptTemplate from llama_index.core.llms import ChatMessage, MessageRole @@ -85,6 +86,7 @@ def __init__( public_key = LANGFUSE_PUBLIC_KEY, secret_key = LANGFUSE_SECRET_KEY, host = LANGFUSE_HOST, + mask=self._mask_trace ) self.instrumentor._event_handler = EventHandler(langfuse_client=LANGFUSE) @@ -100,15 +102,14 @@ def _get_prompt_templates(self) -> Tuple[PromptTemplate, PromptTemplate]: } ) - ref_prompt_tmpl = None - # PromptTemplate( - # self.prompts["refine_prompt_str"], - # prompt_type="refine", - # template_var_mappings = { - # "existing_answer": "existing_answer", - # "query_str": "query_str" - # } - # ) + ref_prompt_tmpl = PromptTemplate( + self.prompts["refine_prompt_str"], + prompt_type="refine", + template_var_mappings = { + "existing_answer": "existing_answer", + "query_str": "query_str" + } + ) condense_prompt_tmpl = PromptTemplate( self.prompts["condense_prompt_str"], @@ -206,31 +207,71 @@ def _messages_to_chathistory(self, messages: Optional[List[dict]] = None) -> Lis chat_history = START_CHAT_MESSAGE + chat_history return chat_history - - def update_trace_with_feedback(self, trace_id, user_feedback) -> None: + + def get_trace(self, trace_id: str, as_dict: bool = False): - with self.instrumentor.observe(trace_id=trace_id) as trace: + try: + trace = LANGFUSE.get_trace(trace_id) + except Exception as e: + logger.error(e) - trace.update( - metadata={ - "user_feedback": user_feedback - } - ) + if as_dict: + return trace.dict() + else: + return trace - def get_trace(self, trace_id: str): + def get_user_traces(self, user_id: str, as_dict: bool = True): - trace = {} try: - trace_langfuse = LANGFUSE.get_trace(trace_id) - for item in trace_langfuse: - key, value = item - trace[key] = value + traces = LANGFUSE.get_traces(user_id=user_id) except Exception as e: logger.error(e) - return trace + if as_dict: + return traces.dict() + else: + return traces + + + def update_trace_with_feedback(self, trace_id: str, user_feedback: str) -> None: + with self.instrumentor.observe(trace_id=trace_id) as trace: + trace.update( + metadata={"user_feedback": user_feedback} + ) + + + def _mask_trace(self, data: Any) -> None: + + if isinstance(data, dict): + for key, value in data.items(): + + if isinstance(value, str): + data[key] = self.mask_pii(value) + + if isinstance(value, list): + for message in value: + if isinstance(message, ChatMessage): + message.content = self.mask_pii(message.content) + if isinstance(message, str): + message = self.mask_pii(message) + + if isinstance(value, dict): + for k, v in value.items(): + if isinstance(v, list): + for message in v: + if isinstance(message, ChatMessage): + message.content = self.mask_pii(message.content) + if isinstance(message, str): + message = self.mask_pii(message) + if isinstance(v, str): + value[k] = self.mask_pii(v) + + if isinstance(data, str): + data = self.mask_pii(data) + + return data def generate( @@ -250,6 +291,12 @@ def generate( pass else: raise ValueError(f"Error! The given tags: {tags} is not acceptable. It has to be a sting, a list of string, or None") + + if not trace_id: + logger.debug(f"[Langfuse] Trace id not provided. Generating a new one") + trace_id = str(uuid.uuid4()) + + logger.info(f"[Langfuse] Trace id: {trace_id}") with self.instrumentor.observe( trace_id = trace_id, @@ -257,7 +304,7 @@ def generate( user_id = user_id, tags = tags, metadata = {"user_feedback": None} - ) as trace: + ): try: engine_response = self.engine.query(query_str) @@ -266,11 +313,6 @@ def generate( except Exception as e: response_str = "Scusa, non posso elaborare la tua richiesta.\nProva a chiedimi una nuova domanda." logger.error(f"Exception: {e}") - - trace.update( - input=self.mask_pii(query_str), - output=self.mask_pii(response_str), - ) self.instrumentor.flush() @@ -297,6 +339,12 @@ def chat_generate( pass else: raise ValueError(f"Error! tags: {tags} is not acceptable. It has to be a sting, a list of string, or None") + + if not trace_id: + logger.debug(f"[Langfuse] Trace id not provided. Generating a new one") + trace_id = str(uuid.uuid4()) + + logger.info(f"[Langfuse] Trace id: {trace_id}") with self.instrumentor.observe( trace_id = trace_id, @@ -304,7 +352,7 @@ def chat_generate( user_id = user_id, tags = tags, metadata = {"user_feedback": None} - ) as trace: + ): try: if USE_ASYNC and not USE_STREAMING: @@ -321,11 +369,6 @@ def chat_generate( response_str = "Scusa, non posso elaborare la tua richiesta.\nProva a chiedimi una nuova domanda." logger.error(f"Exception: {e}") - trace.update( - input=self.mask_pii(query_str), - output=self.mask_pii(response_str), - ) - self.instrumentor.flush() return response_str From 22fe47b63481a8c4a0f783e378d64f7488b5a5ee Mon Sep 17 00:00:00 2001 From: mdciri Date: Tue, 19 Nov 2024 12:41:13 +0100 Subject: [PATCH 09/66] Update src.modules --- apps/chatbot/src/modules/chatbot.py | 45 +++++++++++++++++------- apps/chatbot/src/modules/presidio.py | 2 +- apps/chatbot/src/modules/test_chatbot.py | 14 ++++++-- 3 files changed, 46 insertions(+), 15 deletions(-) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index 237faedaa1..0d8c117d66 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -1,8 +1,9 @@ import os import re import uuid +from datetime import datetime from logging import getLogger -from typing import Union, Tuple, Optional, List, Any +from typing import Union, Tuple, Sequence, Optional, List, Any from llama_index.core import PromptTemplate from llama_index.core.llms import ChatMessage, MessageRole @@ -12,6 +13,8 @@ from langfuse import Langfuse from langfuse.llama_index import LlamaIndexInstrumentor +from langfuse.api.resources.trace.types.traces import Traces +from langfuse.model import TraceWithFullDetails from src.modules.models import get_llm, get_embed_model from src.modules.vector_database import load_automerging_index_redis, REDIS_KVSTORE, INDEX_ID @@ -33,7 +36,7 @@ RESPONSE_TYPE = Union[ Response, StreamingResponse, AsyncStreamingResponse, PydanticResponse, AgentChatResponse, StreamingAgentChatResponse -] +] START_CHAT_MESSAGE = [ChatMessage( role = MessageRole.ASSISTANT, content = ( @@ -80,7 +83,8 @@ def __init__( text_qa_template = self.qa_prompt_tmpl, refine_template = self.ref_prompt_tmpl, condense_template = self.condense_prompt_tmpl, - verbose=self.params["engine"]["verbose"] + verbose=self.params["engine"]["verbose"], + use_chat_engine=USE_CHAT_ENGINE, ) self.instrumentor = LlamaIndexInstrumentor( public_key = LANGFUSE_PUBLIC_KEY, @@ -209,7 +213,7 @@ def _messages_to_chathistory(self, messages: Optional[List[dict]] = None) -> Lis return chat_history - def get_trace(self, trace_id: str, as_dict: bool = False): + def get_trace(self, trace_id: str, as_dict: bool = False) -> TraceWithFullDetails | dict: try: trace = LANGFUSE.get_trace(trace_id) @@ -222,23 +226,37 @@ def get_trace(self, trace_id: str, as_dict: bool = False): return trace - def get_user_traces(self, user_id: str, as_dict: bool = True): + def get_traces( + self, + user_id: str | None = None, + session_id: str | None = None, + from_timestamp: datetime | None = None, + to_timestamp: datetime | None = None, + order_by: str | None = None, + tags: str | Sequence[str] | None = None, + ) -> Traces: try: - traces = LANGFUSE.get_traces(user_id=user_id) + traces = LANGFUSE.get_traces( + user_id=user_id, + session_id = session_id, + from_timestamp = from_timestamp, + to_timestamp = to_timestamp, + order_by = order_by, + tags = tags + ) except Exception as e: logger.error(e) - if as_dict: - return traces.dict() - else: - return traces + return traces def update_trace_with_feedback(self, trace_id: str, user_feedback: str) -> None: with self.instrumentor.observe(trace_id=trace_id) as trace: + trace_info = self.get_trace(trace_id, as_dict=False) trace.update( - metadata={"user_feedback": user_feedback} + metadata={"user_feedback": user_feedback}, + tags = trace_info.tags + [user_feedback] ) @@ -307,7 +325,10 @@ def generate( ): try: - engine_response = self.engine.query(query_str) + if USE_CHAT_ENGINE: + engine_response = self.engine._query_engine.query(query_str) + else: + engine_response = self.engine.query(query_str) response_str = self._get_response_str(engine_response) except Exception as e: diff --git a/apps/chatbot/src/modules/presidio.py b/apps/chatbot/src/modules/presidio.py index fbb47fb488..a73471e26d 100644 --- a/apps/chatbot/src/modules/presidio.py +++ b/apps/chatbot/src/modules/presidio.py @@ -142,7 +142,7 @@ def detect_language(self, text: str) -> str: logger.warning("No detected language.") lang = "it" - logger.info(f"Set presidio to detect PII in {lang} language.") + logger.debug(f"Set presidio to detect PII in {lang} language.") return lang diff --git a/apps/chatbot/src/modules/test_chatbot.py b/apps/chatbot/src/modules/test_chatbot.py index a544b15345..57713a3d7b 100644 --- a/apps/chatbot/src/modules/test_chatbot.py +++ b/apps/chatbot/src/modules/test_chatbot.py @@ -3,7 +3,7 @@ from logging import getLogger from pathlib import Path -from src.modules.chatbot import Chatbot +from src.modules.chatbot import Chatbot, LANGFUSE logger = getLogger(__name__) @@ -48,11 +48,17 @@ def test_pii_mask(): assert masked_str == "Il mio nome e' " +def test_connection_langfuse(): + assert LANGFUSE.auth_check() == True + + def test_generation(): try: res = CHATBOT.generate( query_str = "GPD gestisce i pagamenti spontanei?", + user_id = "user-test", + session_id = "session-test", tags = "test" ) except Exception as e: @@ -69,11 +75,15 @@ def test_chat_generation(): try: res = CHATBOT.chat_generate( query_str = query_str, + user_id = "user-test", + session_id = "session-test", tags = "test" ) res = CHATBOT.chat_generate( query_str = "sai dirmi di piĆ¹?", - messages=[{"question": query_str, "answer": res}], + messages = [{"question": query_str, "answer": res}], + user_id = "user-test", + session_id = "session-test", tags = "test" ) except Exception as e: From bfd9a0a8963352c3d4bab82cd642634e3fcd7dc6 Mon Sep 17 00:00:00 2001 From: mdciri Date: Tue, 19 Nov 2024 12:42:04 +0100 Subject: [PATCH 10/66] Update params --- apps/chatbot/config/params.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/chatbot/config/params.yaml b/apps/chatbot/config/params.yaml index 0dddd7daf8..84d0ef295d 100644 --- a/apps/chatbot/config/params.yaml +++ b/apps/chatbot/config/params.yaml @@ -55,6 +55,8 @@ config_presidio: allow_list: - Discovery - discovery + - rispondo + - Rispondo - Rif - SEND - send @@ -64,8 +66,12 @@ config_presidio: - Gpd - STATO - stato - - PagoPA + - PagoPA - pagoPA + - Devportal + - devPortal + - DevPortal + - devportal - pagopa - Pagopa - Firma con IO From 2978369060559c6711f972c5ff707d8c2ac01b77 Mon Sep 17 00:00:00 2001 From: mdciri Date: Wed, 20 Nov 2024 09:46:45 +0100 Subject: [PATCH 11/66] Update env example --- apps/chatbot/.env.example | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/apps/chatbot/.env.example b/apps/chatbot/.env.example index 7006ba44f8..be55ca80ae 100644 --- a/apps/chatbot/.env.example +++ b/apps/chatbot/.env.example @@ -2,6 +2,7 @@ environment=local CORS_DOMAINS=["*"] PYTHONPATH=app-path LOG_LEVEL=DEBUG + CHB_AWS_ACCESS_KEY_ID=... CHB_AWS_SECRET_ACCESS_KEY=... CHB_AWS_DEFAULT_REGION=eu-south-1 @@ -24,8 +25,23 @@ CHB_ENGINE_SIMILARITY_TOPK=... CHB_ENGINE_SIMILARITY_CUTOFF=... CHB_ENGINE_USE_ASYNC=True CHB_ENGINE_USE_STREAMING=... -CHB_ENGINE_USE_CHAT_ENGINE=... CHB_QUERY_TABLE_PREFIX=chatbot-local CHB_DYNAMODB_URL=http://locahost:8080 CHB_USE_PRESIDIO=True CHB_SESSION_MAX_DURATION_DAYS=1 + +DATABASE_URL=postgresql://postgres:postgres@postgres:5432/postgres +LANGFUSE_HOST=http://langfuse:3000 +NEXTAUTH_SECRET=mysecret +SALT=mysalt +ENCRYPTION_KEY=0000000000000000000000000000000000000000000000000000000000000000 +LANGFUSE_ORG_ID=... +LANGFUSE_ORG_NAME=... +LANGFUSE_PROJECT_ID=... +LANGFUSE_PROJECT_NAME=... +LANGFUSE_PUBLIC_KEY=... +LANGFUSE_SECRET_KEY=... +LANGFUSE_USER_EMAIL=user@example.com +LANGFUSE_USER_NAME=User +LANGFUSE_USER_PASSWORD=abcd1234 +LANGFUSE_TAG=development From 781e115827d9de0338795648fac7bb242527c1da Mon Sep 17 00:00:00 2001 From: mdciri Date: Wed, 20 Nov 2024 09:47:03 +0100 Subject: [PATCH 12/66] Update src.modules --- apps/chatbot/src/modules/chatbot.py | 58 +++++++++++--------------- apps/chatbot/src/modules/engine.py | 18 ++++---- apps/chatbot/src/modules/evaluation.py | 2 - 3 files changed, 32 insertions(+), 46 deletions(-) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index 0d8c117d66..d9164fd9c4 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -8,7 +8,7 @@ from llama_index.core import PromptTemplate from llama_index.core.llms import ChatMessage, MessageRole from llama_index.core.base.response.schema import Response, StreamingResponse, AsyncStreamingResponse, PydanticResponse -from llama_index.core.chat_engine.types import AgentChatResponse, StreamingAgentChatResponse +from llama_index.core.chat_engine.types import BaseChatEngine, AgentChatResponse, StreamingAgentChatResponse from llama_index.core.async_utils import asyncio_run from langfuse import Langfuse @@ -32,19 +32,15 @@ USE_PRESIDIO = True if (os.getenv("CHB_USE_PRESIDIO", "True")).lower() == "true" else False USE_ASYNC = True if (os.getenv('CHB_ENGINE_USE_ASYNC', "True")).lower() == "true" else False USE_STREAMING = True if (os.getenv('CHB_ENGINE_USE_STREAMING', "False")).lower() == "true" else False -USE_CHAT_ENGINE = True if (os.getenv('CHB_ENGINE_USE_CHAT_ENGINE', "True")).lower() == "true" else False RESPONSE_TYPE = Union[ Response, StreamingResponse, AsyncStreamingResponse, PydanticResponse, AgentChatResponse, StreamingAgentChatResponse ] -START_CHAT_MESSAGE = [ChatMessage( - role = MessageRole.ASSISTANT, - content = ( - "Ciao! Io sono Discovery, l'assistente virtuale di PagoPA.\n" - "Rispondo solo e soltanto a domande riguardanti la documentazione di PagoPA DevPortal, " - "che puoi trovare sul sito: https://dev.developer.pagopa.it!" - ) -)] +PREFIX_MESSAGE = ( + "You are the virtual PagoPA S.p.A. assistant. Your name is Discovery.\n" + "Your role is to provide accurate, professional, and helpful responses to users' queries regarding " + "the PagoPA DevPortal documentation available at: https://dev.developer.pagopa.it" +) LANGFUSE_PUBLIC_KEY = os.getenv("LANGFUSE_PUBLIC_KEY") LANGFUSE_SECRET_KEY = os.getenv("LANGFUSE_SECRET_KEY") LANGFUSE_HOST = os.getenv("LANGFUSE_HOST") @@ -55,6 +51,7 @@ host = LANGFUSE_HOST ) + class Chatbot(): def __init__( self, @@ -83,9 +80,12 @@ def __init__( text_qa_template = self.qa_prompt_tmpl, refine_template = self.ref_prompt_tmpl, condense_template = self.condense_prompt_tmpl, - verbose=self.params["engine"]["verbose"], - use_chat_engine=USE_CHAT_ENGINE, + verbose=self.params["engine"]["verbose"] ) + self.prefix_message = ChatMessage( + role = self.model.metadata.system_role, + content = PREFIX_MESSAGE + ) if isinstance(self.engine, BaseChatEngine) else None self.instrumentor = LlamaIndexInstrumentor( public_key = LANGFUSE_PUBLIC_KEY, secret_key = LANGFUSE_SECRET_KEY, @@ -111,7 +111,7 @@ def _get_prompt_templates(self) -> Tuple[PromptTemplate, PromptTemplate]: prompt_type="refine", template_var_mappings = { "existing_answer": "existing_answer", - "query_str": "query_str" + "context_msg": "context_msg" } ) @@ -128,18 +128,15 @@ def _get_prompt_templates(self) -> Tuple[PromptTemplate, PromptTemplate]: def _get_response_str(self, engine_response: RESPONSE_TYPE) -> str: - if USE_CHAT_ENGINE: - if isinstance(engine_response, StreamingAgentChatResponse): - response_str = "" - for token in engine_response.response_gen: - response_str += token - else: - response_str = engine_response.response + if isinstance(engine_response, StreamingAgentChatResponse): + response_str = "" + for token in engine_response.response_gen: + response_str += token + if isinstance(engine_response, AgentChatResponse): + response_str = engine_response.response else: - if isinstance(engine_response, StreamingResponse): - engine_response = engine_response.get_response() - - response_str = engine_response.response.strip() + engine_response = engine_response.get_response() + response_str = engine_response.response response_str = response_str.strip() nodes = engine_response.source_nodes @@ -194,7 +191,7 @@ def mask_pii(self, message: str) -> str: def _messages_to_chathistory(self, messages: Optional[List[dict]] = None) -> List[ChatMessage]: - chat_history = [] + chat_history = [self.prefix_message] if messages: for message in messages: chat_history += [ @@ -207,8 +204,6 @@ def _messages_to_chathistory(self, messages: Optional[List[dict]] = None) -> Lis content = message["answer"] ) ] - - chat_history = START_CHAT_MESSAGE + chat_history return chat_history @@ -225,7 +220,7 @@ def get_trace(self, trace_id: str, as_dict: bool = False) -> TraceWithFullDetail else: return trace - + def get_traces( self, user_id: str | None = None, @@ -309,7 +304,7 @@ def generate( pass else: raise ValueError(f"Error! The given tags: {tags} is not acceptable. It has to be a sting, a list of string, or None") - + if not trace_id: logger.debug(f"[Langfuse] Trace id not provided. Generating a new one") trace_id = str(uuid.uuid4()) @@ -325,10 +320,7 @@ def generate( ): try: - if USE_CHAT_ENGINE: - engine_response = self.engine._query_engine.query(query_str) - else: - engine_response = self.engine.query(query_str) + engine_response = self.engine._query_engine.query(query_str) response_str = self._get_response_str(engine_response) except Exception as e: diff --git a/apps/chatbot/src/modules/engine.py b/apps/chatbot/src/modules/engine.py index 6fb199cd82..8d3d40cdf2 100644 --- a/apps/chatbot/src/modules/engine.py +++ b/apps/chatbot/src/modules/engine.py @@ -8,13 +8,14 @@ from dotenv import load_dotenv + load_dotenv() + SIMILARITY_TOPK = os.getenv('CHB_ENGINE_SIMILARITY_TOPK', "5") SIMILARITY_CUTOFF = os.getenv('CHB_ENGINE_SIMILARITY_CUTOFF', "0.55") USE_ASYNC = True if (os.getenv('CHB_ENGINE_USE_ASYNC', "True")).lower() == "true" else False USE_STREAMING = True if (os.getenv('CHB_ENGINE_USE_STREAMING', "False")).lower() == "true" else False -USE_CHAT_ENGINE = True if (os.getenv('CHB_ENGINE_USE_CHAT_ENGINE', "True")).lower() == "true" else False def get_automerging_engine( @@ -25,12 +26,8 @@ def get_automerging_engine( refine_template: PromptTemplate | None = None, condense_template: PromptTemplate | None = None, verbose: bool = True, - use_chat_engine: bool | None = None ) -> (RetrieverQueryEngine | CondenseQuestionChatEngine): - if use_chat_engine is None: - use_chat_engine = USE_CHAT_ENGINE - base_retriever = index.as_retriever( similarity_top_k=int(SIMILARITY_TOPK) ) @@ -55,11 +52,10 @@ def get_automerging_engine( use_async=USE_ASYNC, streaming=USE_STREAMING ) - - if use_chat_engine: - automerging_engine = CondenseQuestionChatEngine.from_defaults( - query_engine = automerging_engine, - condense_question_prompt = condense_template - ) + + automerging_engine = CondenseQuestionChatEngine.from_defaults( + query_engine = automerging_engine, + condense_question_prompt = condense_template + ) return automerging_engine \ No newline at end of file diff --git a/apps/chatbot/src/modules/evaluation.py b/apps/chatbot/src/modules/evaluation.py index 0a9d9e6a8d..4b520f7bf2 100644 --- a/apps/chatbot/src/modules/evaluation.py +++ b/apps/chatbot/src/modules/evaluation.py @@ -5,7 +5,6 @@ import datetime from logging import getLogger import asyncio -import nest_asyncio from typing import Any import pandas as pd @@ -25,7 +24,6 @@ from src.modules.models import get_llm -nest_asyncio.apply() logger = getLogger(__name__) From 02fd9aec3019cdffb4fe37f2a8e27855efcf0a39 Mon Sep 17 00:00:00 2001 From: mdciri Date: Wed, 20 Nov 2024 09:47:26 +0100 Subject: [PATCH 13/66] Update config.prompts --- apps/chatbot/config/prompts.yaml | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/apps/chatbot/config/prompts.yaml b/apps/chatbot/config/prompts.yaml index 185e4ff0cd..4f51b2043d 100644 --- a/apps/chatbot/config/prompts.yaml +++ b/apps/chatbot/config/prompts.yaml @@ -41,23 +41,15 @@ qa_prompt_str: | refine_prompt_str: | - We have the opportunity to refine the original answer (only if needed). - Given the chat history between the user and the assistant here below: + Given the original answer: {existing_answer}, we have the opportunity to refine it (only if needed) with some more context here below: -------------------- {context_msg} -------------------- - Chatbot Policy: - - the refined answer must be generated using only the context information and not prior knowledge. - - the refined answer must synthesize than the existing answer if the latter longer than 3 sentenses. - - the refined answer must be clear, non-redundant, and have not repeated sentences. - - the refined answer must be respectful and accurate. - - the refined answer must not include any offensive or discriminatory content. - - the refined answer must be in Italian. - -------------------- Task: - Given the User query: {query_str} - Given the original answer: {existing_answer} - Answer with either the original answer or with a refined answer to better answer the user query according to the `Chatbot Policy` listed above. + Given the new context, refine the original answer to better answer the query. + If the context isn't useful, return the original answer. + The answer must be in Italian. + Answer: condense_prompt_str: | From d23b9c32a7cda7c57061fa846271aabe9c63623e Mon Sep 17 00:00:00 2001 From: mdciri Date: Wed, 20 Nov 2024 09:50:30 +0100 Subject: [PATCH 14/66] Update poetry --- apps/chatbot/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/chatbot/pyproject.toml b/apps/chatbot/pyproject.toml index 31f67e5fba..8cd9acb07c 100644 --- a/apps/chatbot/pyproject.toml +++ b/apps/chatbot/pyproject.toml @@ -35,12 +35,12 @@ google-generativeai = "^0.5.2" llama-index-embeddings-gemini = "^0.2.0" llama-index-llms-bedrock-converse = "^0.3.0" llama-index-postprocessor-presidio = "^0.2.0" -pytest = "^8.3.3" langfuse = "^2.53.9" [tool.poetry.group.dev.dependencies] gradio = "^4.36.1" jupyter = "^1.0.0" +pytest = "^8.3.3" [build-system] requires = ["poetry-core"] From 2168931cb683d2b21cb370fd30f04e6aac8c6923 Mon Sep 17 00:00:00 2001 From: mdciri Date: Thu, 21 Nov 2024 10:24:20 +0100 Subject: [PATCH 15/66] Update local Dockerfile --- apps/chatbot/docker/app.local.Dockerfile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/chatbot/docker/app.local.Dockerfile b/apps/chatbot/docker/app.local.Dockerfile index 154ee9dfc9..0291de6ce1 100644 --- a/apps/chatbot/docker/app.local.Dockerfile +++ b/apps/chatbot/docker/app.local.Dockerfile @@ -19,11 +19,12 @@ RUN pip install --upgrade pip \ && pip install poetry WORKDIR /app -COPY pyproject.toml . -COPY poetry.lock . +COPY ./pyproject.toml . +COPY ./poetry.lock . +COPY ./src ./src +COPY ./config ./config + RUN poetry config virtualenvs.create false RUN poetry install -COPY . . - CMD ["fastapi", "dev", "src/app/main.py", "--port", "8080", "--host", "0.0.0.0"] From cddd0347f9f2c0504a8c887917ec771771cdfbf9 Mon Sep 17 00:00:00 2001 From: mdciri Date: Thu, 21 Nov 2024 10:24:42 +0100 Subject: [PATCH 16/66] Update app/main.py --- apps/chatbot/src/app/main.py | 408 +++++++++++++++++------------------ 1 file changed, 204 insertions(+), 204 deletions(-) diff --git a/apps/chatbot/src/app/main.py b/apps/chatbot/src/app/main.py index be73a73267..a46cfdee3f 100644 --- a/apps/chatbot/src/app/main.py +++ b/apps/chatbot/src/app/main.py @@ -35,24 +35,24 @@ class QueryFeedback(BaseModel): region_name=AWS_DEFAULT_REGION ) -if (os.getenv('environment', 'dev') == 'local'): - dynamodb = boto3_session.resource( - 'dynamodb', - endpoint_url=os.getenv('CHB_DYNAMODB_URL', 'http://localhost:8000'), - region_name=AWS_DEFAULT_REGION - ) -else: - dynamodb = boto3_session.resource( - 'dynamodb', - region_name=AWS_DEFAULT_REGION - ) - -table_queries = dynamodb.Table( - f"{os.getenv('CHB_QUERY_TABLE_PREFIX', 'chatbot')}-queries" -) -table_sessions = dynamodb.Table( - f"{os.getenv('CHB_QUERY_TABLE_PREFIX', 'chatbot')}-sessions" -) +# if (os.getenv('environment', 'dev') == 'local'): +# dynamodb = boto3_session.resource( +# 'dynamodb', +# endpoint_url=os.getenv('CHB_DYNAMODB_URL', 'http://localhost:8000'), +# region_name=AWS_DEFAULT_REGION +# ) +# else: +# dynamodb = boto3_session.resource( +# 'dynamodb', +# region_name=AWS_DEFAULT_REGION +# ) + +# table_queries = dynamodb.Table( +# f"{os.getenv('CHB_QUERY_TABLE_PREFIX', 'chatbot')}-queries" +# ) +# table_sessions = dynamodb.Table( +# f"{os.getenv('CHB_QUERY_TABLE_PREFIX', 'chatbot')}-sessions" +# ) app = FastAPI() app.add_middleware( @@ -73,9 +73,9 @@ async def query_creation ( authorization: Annotated[str | None, Header()] = None ): now = datetime.datetime.now(datetime.UTC) - userId = current_user_id(authorization) - session = find_or_create_session(userId, now=now) - answer = chatbot.generate(query.question) + # userId = current_user_id(authorization) + # session = find_or_create_session(userId, now=now) + answer = chatbot.chat_generate(query.question) if query.queriedAt is None: queriedAt = now.isoformat() @@ -84,7 +84,7 @@ async def query_creation ( bodyToReturn = { "id": f'{uuid.uuid4()}', - "sessionId": session['id'], + # "sessionId": session['id'], "question": query.question, "answer": answer, "createdAt": now.isoformat(), @@ -95,199 +95,199 @@ async def query_creation ( bodyToSave = bodyToReturn.copy() bodyToSave["question"] = chatbot.mask_pii(query.question) bodyToSave["answer"] = chatbot.mask_pii(answer) - try: - table_queries.put_item(Item = bodyToSave) - except (BotoCoreError, ClientError) as e: - raise HTTPException(status_code=422, detail=f"[POST /queries] error: {e}") + # try: + # table_queries.put_item(Item = bodyToSave) + # except (BotoCoreError, ClientError) as e: + # raise HTTPException(status_code=422, detail=f"[POST /queries] error: {e}") return bodyToReturn -def current_user_id(authorization: str): - if authorization is None: - # TODO remove fake user and return None - # return None - return '-' - else: - token = authorization.split(' ')[1] - decoded = jwt.decode( - token, - algorithms=["RS256"], - options={"verify_signature": False} - ) - return decoded['cognito:username'] - - -def find_or_create_session(userId: str, now: datetime.datetime): - # TODO: return if userId is None - if userId is None: - userId = '-' +# def current_user_id(authorization: str): +# if authorization is None: +# # TODO remove fake user and return None +# # return None +# return '-' +# else: +# token = authorization.split(' ')[1] +# decoded = jwt.decode( +# token, +# algorithms=["RS256"], +# options={"verify_signature": False} +# ) +# return decoded['cognito:username'] + + +# def find_or_create_session(userId: str, now: datetime.datetime): +# # TODO: return if userId is None +# if userId is None: +# userId = '-' - SESSION_MAX_DURATION_DAYS = float(os.getenv('CHB_SESSION_MAX_DURATION_DAYS', '1')) - datetimeLimit = now - datetime.timedelta(SESSION_MAX_DURATION_DAYS - 1) - startOfDay = datetime.datetime.combine(datetimeLimit, datetime.time.min) - # trovare una sessione con createdAt > datetimeLimit - try: - dbResponse = table_sessions.query( - KeyConditionExpression=Key("userId").eq(userId) & - Key('createdAt').gt(startOfDay.isoformat()), - IndexName='SessionsByCreatedAtIndex', - ScanIndexForward=False, - Limit=1 - ) - except (BotoCoreError, ClientError) as e: - raise HTTPException(status_code=422, detail=f"[find_or_create_session] userId: {userId}, error: {e}") +# SESSION_MAX_DURATION_DAYS = float(os.getenv('CHB_SESSION_MAX_DURATION_DAYS', '1')) +# datetimeLimit = now - datetime.timedelta(SESSION_MAX_DURATION_DAYS - 1) +# startOfDay = datetime.datetime.combine(datetimeLimit, datetime.time.min) +# # trovare una sessione con createdAt > datetimeLimit +# try: +# dbResponse = table_sessions.query( +# KeyConditionExpression=Key("userId").eq(userId) & +# Key('createdAt').gt(startOfDay.isoformat()), +# IndexName='SessionsByCreatedAtIndex', +# ScanIndexForward=False, +# Limit=1 +# ) +# except (BotoCoreError, ClientError) as e: +# raise HTTPException(status_code=422, detail=f"[find_or_create_session] userId: {userId}, error: {e}") - items = dbResponse.get('Items', []) - if len(items) == 0: - body = { - "id": f'{uuid.uuid4()}', - "title": now.strftime("%Y-%m-%d"), - "userId": userId, - "createdAt": now.isoformat() - } - try: - table_sessions.put_item(Item = body) - except (BotoCoreError, ClientError) as e: - raise HTTPException(status_code=422, detail=f"[find_or_create_session] body: {body}, error: {e}") - - else: - body = items[0] - - return body - - -@app.get("/queries") -async def queries_fetching( - sessionId: str | None = None, - page: int | None = 1, - pageSize: int | None = 10, - authorization: Annotated[str | None, Header()] = None -): - userId = current_user_id(authorization) - if sessionId is None: - sessionId = last_session_id(userId) - - if sessionId is None: - result = [] - else: - try: - dbResponse = table_queries.query( - KeyConditionExpression=Key('sessionId').eq(sessionId), - IndexName='QueriesByCreatedAtIndex', - ScanIndexForward=True - ) - except (BotoCoreError, ClientError) as e: - raise HTTPException(status_code=422, detail=f"[queries_fetching] sessionId: {sessionId}, error: {e}") - result = dbResponse.get('Items', []) +# items = dbResponse.get('Items', []) +# if len(items) == 0: +# body = { +# "id": f'{uuid.uuid4()}', +# "title": now.strftime("%Y-%m-%d"), +# "userId": userId, +# "createdAt": now.isoformat() +# } +# try: +# table_sessions.put_item(Item = body) +# except (BotoCoreError, ClientError) as e: +# raise HTTPException(status_code=422, detail=f"[find_or_create_session] body: {body}, error: {e}") + +# else: +# body = items[0] + +# return body + + +# @app.get("/queries") +# async def queries_fetching( +# sessionId: str | None = None, +# page: int | None = 1, +# pageSize: int | None = 10, +# authorization: Annotated[str | None, Header()] = None +# ): +# userId = current_user_id(authorization) +# if sessionId is None: +# sessionId = last_session_id(userId) + +# if sessionId is None: +# result = [] +# else: +# try: +# dbResponse = table_queries.query( +# KeyConditionExpression=Key('sessionId').eq(sessionId), +# IndexName='QueriesByCreatedAtIndex', +# ScanIndexForward=True +# ) +# except (BotoCoreError, ClientError) as e: +# raise HTTPException(status_code=422, detail=f"[queries_fetching] sessionId: {sessionId}, error: {e}") +# result = dbResponse.get('Items', []) - return result +# return result # retrieve sessions of current user -@app.get("/sessions") -async def sessions_fetching( - page: int = 1, - pageSize: int = 10, - authorization: Annotated[str | None, Header()] = None -): - userId = current_user_id(authorization) - - try: - dbResponse = table_sessions.query( - KeyConditionExpression=Key("userId").eq(userId), - IndexName='SessionsByCreatedAtIndex', - ScanIndexForward=False - ) - except (BotoCoreError, ClientError) as e: - raise HTTPException(status_code=422, detail=f"[sessions_fetching] userId: {userId}, error: {e}") +# @app.get("/sessions") +# async def sessions_fetching( +# page: int = 1, +# pageSize: int = 10, +# authorization: Annotated[str | None, Header()] = None +# ): +# userId = current_user_id(authorization) + +# try: +# dbResponse = table_sessions.query( +# KeyConditionExpression=Key("userId").eq(userId), +# IndexName='SessionsByCreatedAtIndex', +# ScanIndexForward=False +# ) +# except (BotoCoreError, ClientError) as e: +# raise HTTPException(status_code=422, detail=f"[sessions_fetching] userId: {userId}, error: {e}") - # TODO: pagination - items = dbResponse.get('Items', []) - result = { - "items": items, - "page": 1, - "pages": 1, - "size": len(items), - "total": len(items), - } - return result - -@app.delete("/sessions/{id}") -async def session_delete( - id: str, - authorization: Annotated[str | None, Header()] = None -): - userId = current_user_id(authorization) - body = { - "id": id, - } - try: - dbResponse_queries = table_queries.query( - KeyConditionExpression=Key("sessionId").eq(id) - ) - # TODO: use batch writer -# with table_sessions.batch_writer() as batch: - for query in dbResponse_queries['Items']: - table_queries.delete_item( - Key={ - "id": query["id"], - "sessionId": id - } - ) - - table_sessions.delete_item( - Key={ - "id": id, - "userId": userId, - } - ) - - except (BotoCoreError, ClientError) as e: - raise HTTPException(status_code=422, detail=f"[sessions_delete] userId: {userId}, error: {e}") +# # TODO: pagination +# items = dbResponse.get('Items', []) +# result = { +# "items": items, +# "page": 1, +# "pages": 1, +# "size": len(items), +# "total": len(items), +# } +# return result + +# @app.delete("/sessions/{id}") +# async def session_delete( +# id: str, +# authorization: Annotated[str | None, Header()] = None +# ): +# userId = current_user_id(authorization) +# body = { +# "id": id, +# } +# try: +# dbResponse_queries = table_queries.query( +# KeyConditionExpression=Key("sessionId").eq(id) +# ) +# # TODO: use batch writer +# # with table_sessions.batch_writer() as batch: +# for query in dbResponse_queries['Items']: +# table_queries.delete_item( +# Key={ +# "id": query["id"], +# "sessionId": id +# } +# ) + +# table_sessions.delete_item( +# Key={ +# "id": id, +# "userId": userId, +# } +# ) + +# except (BotoCoreError, ClientError) as e: +# raise HTTPException(status_code=422, detail=f"[sessions_delete] userId: {userId}, error: {e}") - return body - - -def last_session_id(userId: str): - dbResponse = table_sessions.query( - IndexName='SessionsByCreatedAtIndex', - KeyConditionExpression=Key('userId').eq(userId), - ScanIndexForward=False, - Limit=1 - ) - items = dbResponse.get('Items', []) - return items[0].get('id', None) if items else None - -@app.patch("/sessions/{sessionId}/queries/{id}") -async def query_feedback ( - id: str, - sessionId: str, - query: QueryFeedback, - authorization: Annotated[str | None, Header()] = None -): - - try: - dbResponse = table_queries.update_item( - Key={ - 'sessionId': sessionId, - 'id': id - }, - UpdateExpression='SET #badAnswer = :badAnswer', - ExpressionAttributeNames={ - '#badAnswer': 'badAnswer' - }, - ExpressionAttributeValues={ - ':badAnswer': query.badAnswer - }, - ReturnValues='ALL_NEW' - ) - except (BotoCoreError, ClientError) as e: - raise HTTPException(status_code=422, detail=f"[query_feedback] id: {id}, sessionId: {sessionId}, error: {e}") - - if 'Attributes' in dbResponse: - return dbResponse.get('Attributes') - else: - raise HTTPException(status_code=404, detail="Record not found") +# return body + + +# def last_session_id(userId: str): +# dbResponse = table_sessions.query( +# IndexName='SessionsByCreatedAtIndex', +# KeyConditionExpression=Key('userId').eq(userId), +# ScanIndexForward=False, +# Limit=1 +# ) +# items = dbResponse.get('Items', []) +# return items[0].get('id', None) if items else None + +# @app.patch("/sessions/{sessionId}/queries/{id}") +# async def query_feedback ( +# id: str, +# sessionId: str, +# query: QueryFeedback, +# authorization: Annotated[str | None, Header()] = None +# ): + +# try: +# dbResponse = table_queries.update_item( +# Key={ +# 'sessionId': sessionId, +# 'id': id +# }, +# UpdateExpression='SET #badAnswer = :badAnswer', +# ExpressionAttributeNames={ +# '#badAnswer': 'badAnswer' +# }, +# ExpressionAttributeValues={ +# ':badAnswer': query.badAnswer +# }, +# ReturnValues='ALL_NEW' +# ) +# except (BotoCoreError, ClientError) as e: +# raise HTTPException(status_code=422, detail=f"[query_feedback] id: {id}, sessionId: {sessionId}, error: {e}") + +# if 'Attributes' in dbResponse: +# return dbResponse.get('Attributes') +# else: +# raise HTTPException(status_code=404, detail="Record not found") handler = mangum.Mangum(app, lifespan="off") From d21814ec362bac777fe690d9d7baa024005caf93 Mon Sep 17 00:00:00 2001 From: mdciri Date: Thu, 21 Nov 2024 12:24:59 +0100 Subject: [PATCH 17/66] Remove generate method from chatbot and tests --- apps/chatbot/src/modules/chatbot.py | 46 ------------------------ apps/chatbot/src/modules/test_chatbot.py | 30 +++++----------- 2 files changed, 8 insertions(+), 68 deletions(-) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index d9164fd9c4..4fbe504f14 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -250,7 +250,6 @@ def update_trace_with_feedback(self, trace_id: str, user_feedback: str) -> None: with self.instrumentor.observe(trace_id=trace_id) as trace: trace_info = self.get_trace(trace_id, as_dict=False) trace.update( - metadata={"user_feedback": user_feedback}, tags = trace_info.tags + [user_feedback] ) @@ -287,51 +286,6 @@ def _mask_trace(self, data: Any) -> None: return data - def generate( - self, - query_str: str, - trace_id: str | None = None, - session_id: str | None = None, - user_id: str | None = None, - tags: Union[str, List[str]] | None = None - ) -> str: - - if tags is None: - tags = [LANGFUSE_TAG] - elif isinstance(tags, str): - tags = [tags] - elif isinstance(tags, List[str]): - pass - else: - raise ValueError(f"Error! The given tags: {tags} is not acceptable. It has to be a sting, a list of string, or None") - - if not trace_id: - logger.debug(f"[Langfuse] Trace id not provided. Generating a new one") - trace_id = str(uuid.uuid4()) - - logger.info(f"[Langfuse] Trace id: {trace_id}") - - with self.instrumentor.observe( - trace_id = trace_id, - session_id = session_id, - user_id = user_id, - tags = tags, - metadata = {"user_feedback": None} - ): - - try: - engine_response = self.engine._query_engine.query(query_str) - response_str = self._get_response_str(engine_response) - - except Exception as e: - response_str = "Scusa, non posso elaborare la tua richiesta.\nProva a chiedimi una nuova domanda." - logger.error(f"Exception: {e}") - - self.instrumentor.flush() - - return response_str - - def chat_generate( self, query_str: str, diff --git a/apps/chatbot/src/modules/test_chatbot.py b/apps/chatbot/src/modules/test_chatbot.py index 57713a3d7b..3a3c3aa7a2 100644 --- a/apps/chatbot/src/modules/test_chatbot.py +++ b/apps/chatbot/src/modules/test_chatbot.py @@ -18,14 +18,16 @@ def test_prompt_templates(): - qa_prompt_tmpl, ref_prompt_tmpl = CHATBOT._get_prompt_templates() + qa_prompt_tmpl, ref_prompt_tmpl, condense_prompt_tmpl = CHATBOT._get_prompt_templates() p1 = PROMPTS["qa_prompt_str"].format(context_str="aaaaa", query_str="bbbbb") p2 = qa_prompt_tmpl.format(context_str="aaaaa", query_str="bbbbb") - p3 = PROMPTS["refine_prompt_str"].format(existing_answer="aaaaa", query_str="bbbbb", context_msg="ccccc") - p4 = ref_prompt_tmpl.format(existing_answer="aaaaa", query_str="bbbbb", context_msg="ccccc") + p3 = PROMPTS["refine_prompt_str"].format(existing_answer="aaaaa", context_msg="bbbbb") + p4 = ref_prompt_tmpl.format(existing_answer="aaaaa", context_msg="bbbbb") + p5 = PROMPTS["condense_prompt_str"].format(chat_history="aaaaa", question="bbbbb") + p6 = condense_prompt_tmpl.format(chat_history="aaaaa", question="bbbbb") - assert p1 == p2 and p3 == p4 + assert p1 == p2 and p3 == p4 and p5 == p6 def test_messages_to_chathistory(): @@ -44,30 +46,14 @@ def test_messages_to_chathistory(): def test_pii_mask(): - masked_str = CHATBOT.mask_pii("Il mio nome e' Mario Rossi") - assert masked_str == "Il mio nome e' " + masked_str = CHATBOT.mask_pii("Il mio nome ĆØ Mario Rossi") + assert masked_str == "Il mio nome ĆØ " def test_connection_langfuse(): assert LANGFUSE.auth_check() == True -def test_generation(): - - try: - res = CHATBOT.generate( - query_str = "GPD gestisce i pagamenti spontanei?", - user_id = "user-test", - session_id = "session-test", - tags = "test" - ) - except Exception as e: - logger(e) - res = f"Something went wrong!" - - assert res != f"Something went wrong!" - - def test_chat_generation(): query_str = "GPD gestisce i pagamenti spontanei?" From e9c82ec4a7c17dbd4f36eb4825dae94dc7bdda77 Mon Sep 17 00:00:00 2001 From: mdciri Date: Thu, 21 Nov 2024 12:26:27 +0100 Subject: [PATCH 18/66] Add langfuse connection test --- apps/chatbot/src/modules/test_chatbot.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/chatbot/src/modules/test_chatbot.py b/apps/chatbot/src/modules/test_chatbot.py index 3a3c3aa7a2..62eaf7150e 100644 --- a/apps/chatbot/src/modules/test_chatbot.py +++ b/apps/chatbot/src/modules/test_chatbot.py @@ -77,3 +77,7 @@ def test_chat_generation(): res = f"Something went wrong!" assert res != f"Something went wrong!" + + +def test_langfuse_connection(): + assert LANGFUSE.auth_check() == True \ No newline at end of file From 694519eda720949527dce10be34083a4a3d28df9 Mon Sep 17 00:00:00 2001 From: mdciri Date: Thu, 21 Nov 2024 12:26:46 +0100 Subject: [PATCH 19/66] Add langfuse connection test --- apps/chatbot/src/modules/test_chatbot.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/apps/chatbot/src/modules/test_chatbot.py b/apps/chatbot/src/modules/test_chatbot.py index 62eaf7150e..3a3c3aa7a2 100644 --- a/apps/chatbot/src/modules/test_chatbot.py +++ b/apps/chatbot/src/modules/test_chatbot.py @@ -77,7 +77,3 @@ def test_chat_generation(): res = f"Something went wrong!" assert res != f"Something went wrong!" - - -def test_langfuse_connection(): - assert LANGFUSE.auth_check() == True \ No newline at end of file From a315fa8783552ba9ce9b4c27d9e3c88712584853 Mon Sep 17 00:00:00 2001 From: mdciri Date: Fri, 22 Nov 2024 16:13:23 +0100 Subject: [PATCH 20/66] Reinstate app/main.py --- apps/chatbot/src/app/main.py | 406 +++++++++++++++++------------------ 1 file changed, 203 insertions(+), 203 deletions(-) diff --git a/apps/chatbot/src/app/main.py b/apps/chatbot/src/app/main.py index a46cfdee3f..0654a442e2 100644 --- a/apps/chatbot/src/app/main.py +++ b/apps/chatbot/src/app/main.py @@ -35,24 +35,24 @@ class QueryFeedback(BaseModel): region_name=AWS_DEFAULT_REGION ) -# if (os.getenv('environment', 'dev') == 'local'): -# dynamodb = boto3_session.resource( -# 'dynamodb', -# endpoint_url=os.getenv('CHB_DYNAMODB_URL', 'http://localhost:8000'), -# region_name=AWS_DEFAULT_REGION -# ) -# else: -# dynamodb = boto3_session.resource( -# 'dynamodb', -# region_name=AWS_DEFAULT_REGION -# ) - -# table_queries = dynamodb.Table( -# f"{os.getenv('CHB_QUERY_TABLE_PREFIX', 'chatbot')}-queries" -# ) -# table_sessions = dynamodb.Table( -# f"{os.getenv('CHB_QUERY_TABLE_PREFIX', 'chatbot')}-sessions" -# ) +if (os.getenv('environment', 'dev') == 'local'): + dynamodb = boto3_session.resource( + 'dynamodb', + endpoint_url=os.getenv('CHB_DYNAMODB_URL', 'http://localhost:8000'), + region_name=AWS_DEFAULT_REGION + ) +else: + dynamodb = boto3_session.resource( + 'dynamodb', + region_name=AWS_DEFAULT_REGION + ) + +table_queries = dynamodb.Table( + f"{os.getenv('CHB_QUERY_TABLE_PREFIX', 'chatbot')}-queries" +) +table_sessions = dynamodb.Table( + f"{os.getenv('CHB_QUERY_TABLE_PREFIX', 'chatbot')}-sessions" +) app = FastAPI() app.add_middleware( @@ -73,8 +73,8 @@ async def query_creation ( authorization: Annotated[str | None, Header()] = None ): now = datetime.datetime.now(datetime.UTC) - # userId = current_user_id(authorization) - # session = find_or_create_session(userId, now=now) + userId = current_user_id(authorization) + session = find_or_create_session(userId, now=now) answer = chatbot.chat_generate(query.question) if query.queriedAt is None: @@ -84,7 +84,7 @@ async def query_creation ( bodyToReturn = { "id": f'{uuid.uuid4()}', - # "sessionId": session['id'], + "sessionId": session['id'], "question": query.question, "answer": answer, "createdAt": now.isoformat(), @@ -95,199 +95,199 @@ async def query_creation ( bodyToSave = bodyToReturn.copy() bodyToSave["question"] = chatbot.mask_pii(query.question) bodyToSave["answer"] = chatbot.mask_pii(answer) - # try: - # table_queries.put_item(Item = bodyToSave) - # except (BotoCoreError, ClientError) as e: - # raise HTTPException(status_code=422, detail=f"[POST /queries] error: {e}") + try: + table_queries.put_item(Item = bodyToSave) + except (BotoCoreError, ClientError) as e: + raise HTTPException(status_code=422, detail=f"[POST /queries] error: {e}") return bodyToReturn -# def current_user_id(authorization: str): -# if authorization is None: -# # TODO remove fake user and return None -# # return None -# return '-' -# else: -# token = authorization.split(' ')[1] -# decoded = jwt.decode( -# token, -# algorithms=["RS256"], -# options={"verify_signature": False} -# ) -# return decoded['cognito:username'] - - -# def find_or_create_session(userId: str, now: datetime.datetime): -# # TODO: return if userId is None -# if userId is None: -# userId = '-' +def current_user_id(authorization: str): + if authorization is None: + # TODO remove fake user and return None + # return None + return '-' + else: + token = authorization.split(' ')[1] + decoded = jwt.decode( + token, + algorithms=["RS256"], + options={"verify_signature": False} + ) + return decoded['cognito:username'] + + +def find_or_create_session(userId: str, now: datetime.datetime): + # TODO: return if userId is None + if userId is None: + userId = '-' -# SESSION_MAX_DURATION_DAYS = float(os.getenv('CHB_SESSION_MAX_DURATION_DAYS', '1')) -# datetimeLimit = now - datetime.timedelta(SESSION_MAX_DURATION_DAYS - 1) -# startOfDay = datetime.datetime.combine(datetimeLimit, datetime.time.min) -# # trovare una sessione con createdAt > datetimeLimit -# try: -# dbResponse = table_sessions.query( -# KeyConditionExpression=Key("userId").eq(userId) & -# Key('createdAt').gt(startOfDay.isoformat()), -# IndexName='SessionsByCreatedAtIndex', -# ScanIndexForward=False, -# Limit=1 -# ) -# except (BotoCoreError, ClientError) as e: -# raise HTTPException(status_code=422, detail=f"[find_or_create_session] userId: {userId}, error: {e}") + SESSION_MAX_DURATION_DAYS = float(os.getenv('CHB_SESSION_MAX_DURATION_DAYS', '1')) + datetimeLimit = now - datetime.timedelta(SESSION_MAX_DURATION_DAYS - 1) + startOfDay = datetime.datetime.combine(datetimeLimit, datetime.time.min) + # trovare una sessione con createdAt > datetimeLimit + try: + dbResponse = table_sessions.query( + KeyConditionExpression=Key("userId").eq(userId) & + Key('createdAt').gt(startOfDay.isoformat()), + IndexName='SessionsByCreatedAtIndex', + ScanIndexForward=False, + Limit=1 + ) + except (BotoCoreError, ClientError) as e: + raise HTTPException(status_code=422, detail=f"[find_or_create_session] userId: {userId}, error: {e}") -# items = dbResponse.get('Items', []) -# if len(items) == 0: -# body = { -# "id": f'{uuid.uuid4()}', -# "title": now.strftime("%Y-%m-%d"), -# "userId": userId, -# "createdAt": now.isoformat() -# } -# try: -# table_sessions.put_item(Item = body) -# except (BotoCoreError, ClientError) as e: -# raise HTTPException(status_code=422, detail=f"[find_or_create_session] body: {body}, error: {e}") - -# else: -# body = items[0] - -# return body - - -# @app.get("/queries") -# async def queries_fetching( -# sessionId: str | None = None, -# page: int | None = 1, -# pageSize: int | None = 10, -# authorization: Annotated[str | None, Header()] = None -# ): -# userId = current_user_id(authorization) -# if sessionId is None: -# sessionId = last_session_id(userId) - -# if sessionId is None: -# result = [] -# else: -# try: -# dbResponse = table_queries.query( -# KeyConditionExpression=Key('sessionId').eq(sessionId), -# IndexName='QueriesByCreatedAtIndex', -# ScanIndexForward=True -# ) -# except (BotoCoreError, ClientError) as e: -# raise HTTPException(status_code=422, detail=f"[queries_fetching] sessionId: {sessionId}, error: {e}") -# result = dbResponse.get('Items', []) + items = dbResponse.get('Items', []) + if len(items) == 0: + body = { + "id": f'{uuid.uuid4()}', + "title": now.strftime("%Y-%m-%d"), + "userId": userId, + "createdAt": now.isoformat() + } + try: + table_sessions.put_item(Item = body) + except (BotoCoreError, ClientError) as e: + raise HTTPException(status_code=422, detail=f"[find_or_create_session] body: {body}, error: {e}") + + else: + body = items[0] + + return body + + +@app.get("/queries") +async def queries_fetching( + sessionId: str | None = None, + page: int | None = 1, + pageSize: int | None = 10, + authorization: Annotated[str | None, Header()] = None +): + userId = current_user_id(authorization) + if sessionId is None: + sessionId = last_session_id(userId) + + if sessionId is None: + result = [] + else: + try: + dbResponse = table_queries.query( + KeyConditionExpression=Key('sessionId').eq(sessionId), + IndexName='QueriesByCreatedAtIndex', + ScanIndexForward=True + ) + except (BotoCoreError, ClientError) as e: + raise HTTPException(status_code=422, detail=f"[queries_fetching] sessionId: {sessionId}, error: {e}") + result = dbResponse.get('Items', []) -# return result + return result # retrieve sessions of current user -# @app.get("/sessions") -# async def sessions_fetching( -# page: int = 1, -# pageSize: int = 10, -# authorization: Annotated[str | None, Header()] = None -# ): -# userId = current_user_id(authorization) - -# try: -# dbResponse = table_sessions.query( -# KeyConditionExpression=Key("userId").eq(userId), -# IndexName='SessionsByCreatedAtIndex', -# ScanIndexForward=False -# ) -# except (BotoCoreError, ClientError) as e: -# raise HTTPException(status_code=422, detail=f"[sessions_fetching] userId: {userId}, error: {e}") +@app.get("/sessions") +async def sessions_fetching( + page: int = 1, + pageSize: int = 10, + authorization: Annotated[str | None, Header()] = None +): + userId = current_user_id(authorization) + + try: + dbResponse = table_sessions.query( + KeyConditionExpression=Key("userId").eq(userId), + IndexName='SessionsByCreatedAtIndex', + ScanIndexForward=False + ) + except (BotoCoreError, ClientError) as e: + raise HTTPException(status_code=422, detail=f"[sessions_fetching] userId: {userId}, error: {e}") -# # TODO: pagination -# items = dbResponse.get('Items', []) -# result = { -# "items": items, -# "page": 1, -# "pages": 1, -# "size": len(items), -# "total": len(items), -# } -# return result - -# @app.delete("/sessions/{id}") -# async def session_delete( -# id: str, -# authorization: Annotated[str | None, Header()] = None -# ): -# userId = current_user_id(authorization) -# body = { -# "id": id, -# } -# try: -# dbResponse_queries = table_queries.query( -# KeyConditionExpression=Key("sessionId").eq(id) -# ) -# # TODO: use batch writer -# # with table_sessions.batch_writer() as batch: -# for query in dbResponse_queries['Items']: -# table_queries.delete_item( -# Key={ -# "id": query["id"], -# "sessionId": id -# } -# ) - -# table_sessions.delete_item( -# Key={ -# "id": id, -# "userId": userId, -# } -# ) - -# except (BotoCoreError, ClientError) as e: -# raise HTTPException(status_code=422, detail=f"[sessions_delete] userId: {userId}, error: {e}") + # TODO: pagination + items = dbResponse.get('Items', []) + result = { + "items": items, + "page": 1, + "pages": 1, + "size": len(items), + "total": len(items), + } + return result + +@app.delete("/sessions/{id}") +async def session_delete( + id: str, + authorization: Annotated[str | None, Header()] = None +): + userId = current_user_id(authorization) + body = { + "id": id, + } + try: + dbResponse_queries = table_queries.query( + KeyConditionExpression=Key("sessionId").eq(id) + ) + # TODO: use batch writer +# with table_sessions.batch_writer() as batch: + for query in dbResponse_queries['Items']: + table_queries.delete_item( + Key={ + "id": query["id"], + "sessionId": id + } + ) + + table_sessions.delete_item( + Key={ + "id": id, + "userId": userId, + } + ) + + except (BotoCoreError, ClientError) as e: + raise HTTPException(status_code=422, detail=f"[sessions_delete] userId: {userId}, error: {e}") -# return body - - -# def last_session_id(userId: str): -# dbResponse = table_sessions.query( -# IndexName='SessionsByCreatedAtIndex', -# KeyConditionExpression=Key('userId').eq(userId), -# ScanIndexForward=False, -# Limit=1 -# ) -# items = dbResponse.get('Items', []) -# return items[0].get('id', None) if items else None - -# @app.patch("/sessions/{sessionId}/queries/{id}") -# async def query_feedback ( -# id: str, -# sessionId: str, -# query: QueryFeedback, -# authorization: Annotated[str | None, Header()] = None -# ): - -# try: -# dbResponse = table_queries.update_item( -# Key={ -# 'sessionId': sessionId, -# 'id': id -# }, -# UpdateExpression='SET #badAnswer = :badAnswer', -# ExpressionAttributeNames={ -# '#badAnswer': 'badAnswer' -# }, -# ExpressionAttributeValues={ -# ':badAnswer': query.badAnswer -# }, -# ReturnValues='ALL_NEW' -# ) -# except (BotoCoreError, ClientError) as e: -# raise HTTPException(status_code=422, detail=f"[query_feedback] id: {id}, sessionId: {sessionId}, error: {e}") - -# if 'Attributes' in dbResponse: -# return dbResponse.get('Attributes') -# else: -# raise HTTPException(status_code=404, detail="Record not found") + return body + + +def last_session_id(userId: str): + dbResponse = table_sessions.query( + IndexName='SessionsByCreatedAtIndex', + KeyConditionExpression=Key('userId').eq(userId), + ScanIndexForward=False, + Limit=1 + ) + items = dbResponse.get('Items', []) + return items[0].get('id', None) if items else None + +@app.patch("/sessions/{sessionId}/queries/{id}") +async def query_feedback ( + id: str, + sessionId: str, + query: QueryFeedback, + authorization: Annotated[str | None, Header()] = None +): + + try: + dbResponse = table_queries.update_item( + Key={ + 'sessionId': sessionId, + 'id': id + }, + UpdateExpression='SET #badAnswer = :badAnswer', + ExpressionAttributeNames={ + '#badAnswer': 'badAnswer' + }, + ExpressionAttributeValues={ + ':badAnswer': query.badAnswer + }, + ReturnValues='ALL_NEW' + ) + except (BotoCoreError, ClientError) as e: + raise HTTPException(status_code=422, detail=f"[query_feedback] id: {id}, sessionId: {sessionId}, error: {e}") + + if 'Attributes' in dbResponse: + return dbResponse.get('Attributes') + else: + raise HTTPException(status_code=404, detail="Record not found") handler = mangum.Mangum(app, lifespan="off") From d72d1131d8e7a2017cfb66b41cff6460dc5197f9 Mon Sep 17 00:00:00 2001 From: mdciri Date: Tue, 26 Nov 2024 11:46:16 +0100 Subject: [PATCH 21/66] Merged branch with main --- .changeset/dry-papayas-switch.md | 5 + .changeset/flat-walls-cough.md | 5 + .changeset/great-rockets-know.md | 5 - .changeset/hungry-eels-stare.md | 5 + .changeset/many-pens-grab.md | 5 + .changeset/plenty-comics-itch.md | 6 - .changeset/sixty-plants-matter.md | 5 - .changeset/ten-trains-grin.md | 5 + .changeset/tiny-poets-jog.md | 5 - .../actions/build-nextjs-website/action.yaml | 1 + .github/actions/deploy/action.yaml | 1 + .github/workflows/code_review.yaml | 1 + .github/workflows/deploy_website.yaml | 2 + .github/workflows/deploy_website_content.yaml | 1 + .gitignore | 1 + .husky/pre-push | 4 +- apps/chatbot/.dockerignore | 3 +- apps/chatbot/README.md | 6 + apps/chatbot/config/params.yaml | 5 +- apps/chatbot/docker/app.local.Dockerfile | 2 +- apps/chatbot/docker/compose.test.yaml | 42 + apps/chatbot/docker/compose.yaml | 2 + .../{docker-build.sh => docker-build-prod.sh} | 0 .../docker/docker-compose-run-create_index.sh | 2 +- .../docker/docker-compose-run-tests.sh | 2 + .../chatbot/docker/docker-run-create-index.sh | 3 +- apps/chatbot/docker/docker-run-local-bash.sh | 2 - apps/chatbot/docker/docker-run-local.sh | 2 - apps/chatbot/docker/docker-run.sh | 7 - apps/chatbot/docker/files/.aws/credentials | 4 +- .../files/dynamodb_schemas/queries.json | 51 + .../files/dynamodb_schemas/sessions.json | 51 + apps/chatbot/package.json | 11 +- apps/chatbot/poetry.lock | 1937 ++++++++--------- apps/chatbot/pyproject.toml | 1 + apps/chatbot/scripts/create_redis_index.sh | 3 + apps/chatbot/scripts/dynamodb-init.sh | 20 + apps/chatbot/scripts/run.local.sh | 10 + apps/chatbot/scripts/run.test.sh | 10 + apps/chatbot/src/app/main.py | 16 +- apps/chatbot/src/app/test_main.py | 45 + .../src/modules/create_vector_index.py | 2 - apps/chatbot/src/modules/test_chatbot.py | 4 +- apps/chatbot/src/modules/vector_database.py | 13 +- apps/cloudfront-functions/CHANGELOG.md | 6 + apps/cloudfront-functions/package.json | 2 +- .../src/viewer-request-handler.ts | 2 +- apps/nextjs-website/.env.default | 1 + apps/nextjs-website/CHANGELOG.md | 11 + apps/nextjs-website/package.json | 2 +- apps/nextjs-website/src/config.ts | 2 + .../src/helpers/chatbot.helper.tsx | 2 + .../lib/chatbot/__tests__/chatbotApi.test.ts | 12 + .../nextjs-website/src/lib/chatbot/queries.ts | 21 +- .../strapi/__tests__/urlReplaceMap.test.ts | 4 +- apps/strapi-cms/CHANGELOG.md | 6 + apps/strapi-cms/package.json | 2 +- package-lock.json | 50 +- packages/active-campaign-client/.env.example | 3 + .../active-campaign-client/.eslintrc.json | 3 +- packages/active-campaign-client/CHANGELOG.md | 7 + packages/active-campaign-client/README.md | 6 + .../active-campaign-client/jest.config.ts | 5 + packages/active-campaign-client/package.json | 5 +- .../src/__tests__/empty-test.test.ts | 5 + .../src/__tests__/handlers/addContact.test.ts | 39 + .../src/__tests__/handlers/createList.test.ts | 37 + .../__tests__/handlers/deleteContact.test.ts | 34 + .../src/__tests__/handlers/deleteList.test.ts | 31 + .../__tests__/handlers/updateContact.test.ts | 39 + .../active-campaign-client/src/empty-file.ts | 0 .../src/handlers/addContact.ts | 52 + .../src/handlers/createList.ts | 37 + .../src/handlers/deleteContact.ts | 34 + .../src/handlers/deleteList.ts | 42 + .../src/handlers/updateContact.ts | 64 + packages/active-campaign-client/src/index.ts | 12 + .../src/types/contactPayload.ts | 12 + .../src/types/listPayload.ts | 10 + .../src/types/listStatusPayload.ts | 7 + .../src/types/webinarPayload.ts | 5 + .../src/utils/activeCampaignClient.ts | 121 + packages/gitbook-docs/CHANGELOG.md | 6 + packages/gitbook-docs/jest.config.ts | 2 +- packages/gitbook-docs/package.json | 3 +- .../src/__tests__/parseContent.test.ts | 18 +- .../gitbook-docs/src/convertEmojiToUnicode.ts | 13 + .../src/markdoc/schema/heading.ts | 11 +- .../src/markdoc/schema/sanitizedText.ts | 9 + packages/gitbook-docs/src/parseContent.ts | 6 +- packages/gitbook-docs/src/parseInPageMenu.ts | 2 +- 91 files changed, 2043 insertions(+), 1073 deletions(-) create mode 100644 .changeset/dry-papayas-switch.md create mode 100644 .changeset/flat-walls-cough.md delete mode 100644 .changeset/great-rockets-know.md create mode 100644 .changeset/hungry-eels-stare.md create mode 100644 .changeset/many-pens-grab.md delete mode 100644 .changeset/plenty-comics-itch.md delete mode 100644 .changeset/sixty-plants-matter.md create mode 100644 .changeset/ten-trains-grin.md delete mode 100644 .changeset/tiny-poets-jog.md create mode 100644 apps/chatbot/docker/compose.test.yaml rename apps/chatbot/docker/{docker-build.sh => docker-build-prod.sh} (100%) create mode 100755 apps/chatbot/docker/docker-compose-run-tests.sh delete mode 100755 apps/chatbot/docker/docker-run-local-bash.sh delete mode 100755 apps/chatbot/docker/docker-run-local.sh delete mode 100755 apps/chatbot/docker/docker-run.sh create mode 100644 apps/chatbot/docker/files/dynamodb_schemas/queries.json create mode 100644 apps/chatbot/docker/files/dynamodb_schemas/sessions.json create mode 100755 apps/chatbot/scripts/create_redis_index.sh create mode 100755 apps/chatbot/scripts/dynamodb-init.sh create mode 100755 apps/chatbot/scripts/run.local.sh create mode 100755 apps/chatbot/scripts/run.test.sh create mode 100644 apps/chatbot/src/app/test_main.py create mode 100644 packages/active-campaign-client/.env.example create mode 100644 packages/active-campaign-client/CHANGELOG.md create mode 100644 packages/active-campaign-client/src/__tests__/empty-test.test.ts create mode 100644 packages/active-campaign-client/src/__tests__/handlers/addContact.test.ts create mode 100644 packages/active-campaign-client/src/__tests__/handlers/createList.test.ts create mode 100644 packages/active-campaign-client/src/__tests__/handlers/deleteContact.test.ts create mode 100644 packages/active-campaign-client/src/__tests__/handlers/deleteList.test.ts create mode 100644 packages/active-campaign-client/src/__tests__/handlers/updateContact.test.ts delete mode 100644 packages/active-campaign-client/src/empty-file.ts create mode 100644 packages/active-campaign-client/src/handlers/addContact.ts create mode 100644 packages/active-campaign-client/src/handlers/createList.ts create mode 100644 packages/active-campaign-client/src/handlers/deleteContact.ts create mode 100644 packages/active-campaign-client/src/handlers/deleteList.ts create mode 100644 packages/active-campaign-client/src/handlers/updateContact.ts create mode 100644 packages/active-campaign-client/src/index.ts create mode 100644 packages/active-campaign-client/src/types/contactPayload.ts create mode 100644 packages/active-campaign-client/src/types/listPayload.ts create mode 100644 packages/active-campaign-client/src/types/listStatusPayload.ts create mode 100644 packages/active-campaign-client/src/types/webinarPayload.ts create mode 100644 packages/active-campaign-client/src/utils/activeCampaignClient.ts create mode 100644 packages/gitbook-docs/src/convertEmojiToUnicode.ts diff --git a/.changeset/dry-papayas-switch.md b/.changeset/dry-papayas-switch.md new file mode 100644 index 0000000000..e52832ac15 --- /dev/null +++ b/.changeset/dry-papayas-switch.md @@ -0,0 +1,5 @@ +--- +"active-campaign-client": minor +--- + +Add handler for updating and deleting contact diff --git a/.changeset/flat-walls-cough.md b/.changeset/flat-walls-cough.md new file mode 100644 index 0000000000..e35e9653fe --- /dev/null +++ b/.changeset/flat-walls-cough.md @@ -0,0 +1,5 @@ +--- +"active-campaign-client": minor +--- + +Add package setup and the lambda function to add user to Active Campaign diff --git a/.changeset/great-rockets-know.md b/.changeset/great-rockets-know.md deleted file mode 100644 index 605807d853..0000000000 --- a/.changeset/great-rockets-know.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"active-campaign-client": patch ---- - -Create package and add function signatures diff --git a/.changeset/hungry-eels-stare.md b/.changeset/hungry-eels-stare.md new file mode 100644 index 0000000000..885647f4fb --- /dev/null +++ b/.changeset/hungry-eels-stare.md @@ -0,0 +1,5 @@ +--- +"nextjs-website": minor +--- + +Add history to send query endpoint diff --git a/.changeset/many-pens-grab.md b/.changeset/many-pens-grab.md new file mode 100644 index 0000000000..cbc0f7d35a --- /dev/null +++ b/.changeset/many-pens-grab.md @@ -0,0 +1,5 @@ +--- +"active-campaign-client": minor +--- + +Add handlers for create list and delete list on Active Campaign diff --git a/.changeset/plenty-comics-itch.md b/.changeset/plenty-comics-itch.md deleted file mode 100644 index bbf7480f9e..0000000000 --- a/.changeset/plenty-comics-itch.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"nextjs-website": patch -"strapi-cms": patch ---- - -Update .env.default files for strapi and nextjs, update README.md diff --git a/.changeset/sixty-plants-matter.md b/.changeset/sixty-plants-matter.md deleted file mode 100644 index 2a9ade8f6b..0000000000 --- a/.changeset/sixty-plants-matter.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"nextjs-website": patch ---- - -Fix feedback in chatbot hook diff --git a/.changeset/ten-trains-grin.md b/.changeset/ten-trains-grin.md new file mode 100644 index 0000000000..1951726bf8 --- /dev/null +++ b/.changeset/ten-trains-grin.md @@ -0,0 +1,5 @@ +--- +"active-campaign-client": patch +--- + +Removed axios, removed .env except than for the test, create new main handler to execute function in aws lambda diff --git a/.changeset/tiny-poets-jog.md b/.changeset/tiny-poets-jog.md deleted file mode 100644 index 1fd70ef854..0000000000 --- a/.changeset/tiny-poets-jog.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"nextjs-website": minor ---- - -Chat uses local storage to save chat session information diff --git a/.github/actions/build-nextjs-website/action.yaml b/.github/actions/build-nextjs-website/action.yaml index 3f72e40e76..c6e57c036b 100644 --- a/.github/actions/build-nextjs-website/action.yaml +++ b/.github/actions/build-nextjs-website/action.yaml @@ -78,6 +78,7 @@ runs: NEXT_PUBLIC_COGNITO_USER_POOL_ID: ${{ inputs.cognito_user_pool_id }} NEXT_PUBLIC_COGNITO_IDENTITY_POOL_ID: ${{ inputs.cognito_identity_pool_id }} NEXT_PUBLIC_CHATBOT_HOST: ${{ inputs.chatbot_host }} + NEXT_PUBLIC_CHAT_MAX_HISTORY_MESSAGES: ${{ inputs.chat_max_history_messages }} NEXT_PUBLIC_WEBSITE_NAME: ${{ inputs.website_name }} NEXT_PUBLIC_ORGANIZATION_NAME: ${{ inputs.organization_name }} NEXT_PUBLIC_ORGANIZATION_LOGO: ${{ inputs.organization_logo }} diff --git a/.github/actions/deploy/action.yaml b/.github/actions/deploy/action.yaml index a8faf78170..4c61586086 100644 --- a/.github/actions/deploy/action.yaml +++ b/.github/actions/deploy/action.yaml @@ -98,6 +98,7 @@ runs: NEXT_PUBLIC_COGNITO_USER_POOL_ID: ${{ inputs.cognito_user_pool_id }} NEXT_PUBLIC_COGNITO_IDENTITY_POOL_ID: ${{ inputs.cognito_identity_pool_id }} NEXT_PUBLIC_CHATBOT_HOST: ${{ inputs.chatbot_host }} + NEXT_PUBLIC_CHAT_MAX_HISTORY_MESSAGES: ${{ inputs.chat_max_history_messages }} NEXT_PUBLIC_WEBSITE_NAME: ${{ inputs.website_name }} NEXT_PUBLIC_ORGANIZATION_NAME: ${{ inputs.organization_name }} NEXT_PUBLIC_ORGANIZATION_LOGO: ${{ inputs.organization_logo }} diff --git a/.github/workflows/code_review.yaml b/.github/workflows/code_review.yaml index 09b99eb575..206d36e5c6 100644 --- a/.github/workflows/code_review.yaml +++ b/.github/workflows/code_review.yaml @@ -115,6 +115,7 @@ jobs: cognito_identity_pool_id: ${{ secrets.NEXT_PUBLIC_COGNITO_IDENTITY_POOL_ID }} cognito_app_client_id: ${{ secrets.NEXT_PUBLIC_COGNITO_USER_POOL_WEB_CLIENT_ID }} chatbot_host: ${{ vars.NEXT_PUBLIC_CHATBOT_HOST }} + chat_max_history_messages: ${{ vars.NEXT_PUBLIC_CHAT_MAX_HISTORY_MESSAGES }} website_name: ${{ vars.NEXT_PUBLIC_WEBSITE_NAME }} organization_name: ${{ vars.NEXT_PUBLIC_ORGANIZATION_NAME }} organization_logo: ${{ vars.NEXT_PUBLIC_ORGANIZATION_LOGO }} diff --git a/.github/workflows/deploy_website.yaml b/.github/workflows/deploy_website.yaml index 09b4c4ac85..157dc4f1e5 100644 --- a/.github/workflows/deploy_website.yaml +++ b/.github/workflows/deploy_website.yaml @@ -66,6 +66,7 @@ jobs: cognito_identity_pool_id: ${{ secrets.NEXT_PUBLIC_COGNITO_IDENTITY_POOL_ID }} cognito_app_client_id: ${{ secrets.NEXT_PUBLIC_COGNITO_USER_POOL_WEB_CLIENT_ID }} chatbot_host: ${{ vars.NEXT_PUBLIC_CHATBOT_HOST }} + chat_max_history_messages: ${{ vars.NEXT_PUBLIC_CHAT_MAX_HISTORY_MESSAGES }} website_name: ${{ vars.NEXT_PUBLIC_WEBSITE_NAME }} organization_name: ${{ vars.NEXT_PUBLIC_ORGANIZATION_NAME }} organization_logo: ${{ vars.NEXT_PUBLIC_ORGANIZATION_LOGO }} @@ -106,6 +107,7 @@ jobs: cognito_identity_pool_id: ${{ secrets.NEXT_PUBLIC_COGNITO_IDENTITY_POOL_ID }} cognito_app_client_id: ${{ secrets.NEXT_PUBLIC_COGNITO_USER_POOL_WEB_CLIENT_ID }} chatbot_host: ${{ vars.NEXT_PUBLIC_CHATBOT_HOST }} + chat_max_history_messages: ${{ vars.NEXT_PUBLIC_CHAT_MAX_HISTORY_MESSAGES }} website_name: ${{ vars.NEXT_PUBLIC_WEBSITE_NAME }} organization_name: ${{ vars.NEXT_PUBLIC_ORGANIZATION_NAME }} organization_logo: ${{ vars.NEXT_PUBLIC_ORGANIZATION_LOGO }} diff --git a/.github/workflows/deploy_website_content.yaml b/.github/workflows/deploy_website_content.yaml index d98fa40415..a41ded23bd 100644 --- a/.github/workflows/deploy_website_content.yaml +++ b/.github/workflows/deploy_website_content.yaml @@ -56,6 +56,7 @@ jobs: cognito_identity_pool_id: ${{ secrets.NEXT_PUBLIC_COGNITO_IDENTITY_POOL_ID }} cognito_app_client_id: ${{ secrets.NEXT_PUBLIC_COGNITO_USER_POOL_WEB_CLIENT_ID }} chatbot_host: ${{ vars.NEXT_PUBLIC_CHATBOT_HOST }} + chat_max_history_messages: ${{ vars.NEXT_PUBLIC_CHAT_MAX_HISTORY_MESSAGES }} website_name: ${{ vars.NEXT_PUBLIC_WEBSITE_NAME }} organization_name: ${{ vars.NEXT_PUBLIC_ORGANIZATION_NAME }} organization_logo: ${{ vars.NEXT_PUBLIC_ORGANIZATION_LOGO }} diff --git a/.gitignore b/.gitignore index f1e1ccc08d..5a11476e5f 100644 --- a/.gitignore +++ b/.gitignore @@ -200,6 +200,7 @@ yarn-error.log* # local env files .env*.local +.env*.test # vercel .vercel diff --git a/.husky/pre-push b/.husky/pre-push index 541229e81e..5a873e0d96 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,4 +1,4 @@ #!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" +# . "$(dirname -- "$0")/_/husky.sh" -npm run compile && npm run lint +# npm run compile && npm run lint diff --git a/apps/chatbot/.dockerignore b/apps/chatbot/.dockerignore index a26e8bf1fe..c694205073 100644 --- a/apps/chatbot/.dockerignore +++ b/apps/chatbot/.dockerignore @@ -1,3 +1,4 @@ -.env +.env* build-devp .pytest_cache +load-test diff --git a/apps/chatbot/README.md b/apps/chatbot/README.md index 0014889baa..27e5b40194 100644 --- a/apps/chatbot/README.md +++ b/apps/chatbot/README.md @@ -50,6 +50,12 @@ This script reads the documentation, split it into chucks with gerarchical organ Check out the params in order to store your vector index accordingly. +## test + +``` +pytest +``` + ## Web App python src/webapp/app.py diff --git a/apps/chatbot/config/params.yaml b/apps/chatbot/config/params.yaml index 84d0ef295d..58f14b2f1d 100644 --- a/apps/chatbot/config/params.yaml +++ b/apps/chatbot/config/params.yaml @@ -1,6 +1,3 @@ -documentation: - path: build-devp/out - vector_index: path: index chunk_sizes: [2816, 704, 176] @@ -89,4 +86,4 @@ config_presidio: - id-pay - ID-Pay - id-Pay - - ID-pay \ No newline at end of file + - ID-pay diff --git a/apps/chatbot/docker/app.local.Dockerfile b/apps/chatbot/docker/app.local.Dockerfile index 0291de6ce1..c64badc5b7 100644 --- a/apps/chatbot/docker/app.local.Dockerfile +++ b/apps/chatbot/docker/app.local.Dockerfile @@ -16,7 +16,7 @@ RUN wget https://github.com/rphrp1985/selenium_support/raw/main/chrome_114_amd64 ENV PYTHONPATH=/app RUN pip install --upgrade pip \ - && pip install poetry + && pip install poetry awscli WORKDIR /app COPY ./pyproject.toml . diff --git a/apps/chatbot/docker/compose.test.yaml b/apps/chatbot/docker/compose.test.yaml new file mode 100644 index 0000000000..b696d9e324 --- /dev/null +++ b/apps/chatbot/docker/compose.test.yaml @@ -0,0 +1,42 @@ +services: + api-test: + build: + context: .. + dockerfile: docker/app.local.Dockerfile + command: "./scripts/run.test.sh" + env_file: "../.env.test" + ports: + - "8080:8080" + volumes: + - ..:/app + - ./files/.aws:/root/.aws + - ./files/nextjs-website/out:/app/build-devp/out + depends_on: + redis: + condition: service_started + dynamodb: + condition: service_started + networks: + - ntw + + dynamodb: + image: amazon/dynamodb-local:2.5.2 + environment: + - AWS_ACCESS_KEY_ID=dummy + - AWS_SECRET_ACCESS_KEY=dummy + - AWS_DEFAULT_REGION=local + healthcheck: + test: ["CMD-SHELL", '[ "$(curl -s -o /dev/null -I -w ''%{http_code}'' http://localhost:8000)" == "400" ]'] + interval: 10s + timeout: 10s + retries: 10 + networks: + - ntw + + redis: + image: redis/redis-stack:7.2.0-v13 + networks: + - ntw + +networks: + ntw: diff --git a/apps/chatbot/docker/compose.yaml b/apps/chatbot/docker/compose.yaml index 3c0dc80e30..fd1ab2cef5 100644 --- a/apps/chatbot/docker/compose.yaml +++ b/apps/chatbot/docker/compose.yaml @@ -3,6 +3,8 @@ services: build: context: .. dockerfile: docker/app.local.Dockerfile + env_file: ../.env.local + command: "./scripts/run.local.sh" ports: - "8080:8080" volumes: diff --git a/apps/chatbot/docker/docker-build.sh b/apps/chatbot/docker/docker-build-prod.sh similarity index 100% rename from apps/chatbot/docker/docker-build.sh rename to apps/chatbot/docker/docker-build-prod.sh diff --git a/apps/chatbot/docker/docker-compose-run-create_index.sh b/apps/chatbot/docker/docker-compose-run-create_index.sh index 841345d5bc..3e03f4f306 100755 --- a/apps/chatbot/docker/docker-compose-run-create_index.sh +++ b/apps/chatbot/docker/docker-compose-run-create_index.sh @@ -1,2 +1,2 @@ #!/bin/bash -docker compose -f docker/compose.yaml -p chatbot run create_index +docker compose --env-file .env -f docker/compose.yaml -p chatbot run create_index diff --git a/apps/chatbot/docker/docker-compose-run-tests.sh b/apps/chatbot/docker/docker-compose-run-tests.sh new file mode 100755 index 0000000000..969126bbe8 --- /dev/null +++ b/apps/chatbot/docker/docker-compose-run-tests.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker compose -f docker/compose.test.yaml -p chatbot-test run api-test diff --git a/apps/chatbot/docker/docker-run-create-index.sh b/apps/chatbot/docker/docker-run-create-index.sh index 3e03f4f306..fd11889bd4 100755 --- a/apps/chatbot/docker/docker-run-create-index.sh +++ b/apps/chatbot/docker/docker-run-create-index.sh @@ -1,2 +1,3 @@ #!/bin/bash -docker compose --env-file .env -f docker/compose.yaml -p chatbot run create_index +docker compose -f docker/compose.yaml -p chatbot run api \ + python src/modules/create_vector_index.py --params config/params.yaml diff --git a/apps/chatbot/docker/docker-run-local-bash.sh b/apps/chatbot/docker/docker-run-local-bash.sh deleted file mode 100755 index 9c5b63499d..0000000000 --- a/apps/chatbot/docker/docker-run-local-bash.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -docker run -it --env-file ./.env fastapi-local bash diff --git a/apps/chatbot/docker/docker-run-local.sh b/apps/chatbot/docker/docker-run-local.sh deleted file mode 100755 index 5f93ba1c02..0000000000 --- a/apps/chatbot/docker/docker-run-local.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -docker run --name fastapi-local --rm -p 8080:8080 --env-file=.env fastapi-local diff --git a/apps/chatbot/docker/docker-run.sh b/apps/chatbot/docker/docker-run.sh deleted file mode 100755 index 6240fe4f3a..0000000000 --- a/apps/chatbot/docker/docker-run.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -docker run \ - --name fastapi \ - --rm -p 8080:8080 \ - --platform linux/amd64 \ - --env-file=.env \ - fastapi diff --git a/apps/chatbot/docker/files/.aws/credentials b/apps/chatbot/docker/files/.aws/credentials index 59df686462..333f2a7e48 100644 --- a/apps/chatbot/docker/files/.aws/credentials +++ b/apps/chatbot/docker/files/.aws/credentials @@ -1,3 +1,3 @@ [default] -aws_access_key_id = 123 -aws_secret_access_key = xyz +aws_access_key_id = dummy +aws_secret_access_key = dummy diff --git a/apps/chatbot/docker/files/dynamodb_schemas/queries.json b/apps/chatbot/docker/files/dynamodb_schemas/queries.json new file mode 100644 index 0000000000..77d652c1f6 --- /dev/null +++ b/apps/chatbot/docker/files/dynamodb_schemas/queries.json @@ -0,0 +1,51 @@ +{ + "TableName": "chatbot-local-queries", + "KeySchema": [ + { + "AttributeName": "sessionId", + "KeyType": "HASH" + }, + { + "AttributeName": "id", + "KeyType": "RANGE" + } + ], + "AttributeDefinitions": [ + { + "AttributeName": "id", + "AttributeType": "S" + }, + { + "AttributeName": "sessionId", + "AttributeType": "S" + }, + { + "AttributeName": "createdAt", + "AttributeType": "S" + } + ], + "LocalSecondaryIndexes": [ + { + "IndexName": "QueriesByCreatedAtIndex", + "KeySchema": [ + { + "AttributeName": "sessionId", + "KeyType": "HASH" + }, + { + "AttributeName": "createdAt", + "KeyType": "RANGE" + } + ], + "Projection": { + "ProjectionType": "ALL" + } + } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + }, + "TableClass": "STANDARD", + "DeletionProtectionEnabled": true +} diff --git a/apps/chatbot/docker/files/dynamodb_schemas/sessions.json b/apps/chatbot/docker/files/dynamodb_schemas/sessions.json new file mode 100644 index 0000000000..71404bbeeb --- /dev/null +++ b/apps/chatbot/docker/files/dynamodb_schemas/sessions.json @@ -0,0 +1,51 @@ +{ + "TableName": "chatbot-local-sessions", + "KeySchema": [ + { + "AttributeName": "userId", + "KeyType": "HASH" + }, + { + "AttributeName": "id", + "KeyType": "RANGE" + } + ], + "AttributeDefinitions": [ + { + "AttributeName": "id", + "AttributeType": "S" + }, + { + "AttributeName": "userId", + "AttributeType": "S" + }, + { + "AttributeName": "createdAt", + "AttributeType": "S" + } + ], + "LocalSecondaryIndexes": [ + { + "IndexName": "SessionsByCreatedAtIndex", + "KeySchema": [ + { + "AttributeName": "userId", + "KeyType": "HASH" + }, + { + "AttributeName": "createdAt", + "KeyType": "RANGE" + } + ], + "Projection": { + "ProjectionType": "ALL" + } + } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + }, + "TableClass": "STANDARD", + "DeletionProtectionEnabled": true +} diff --git a/apps/chatbot/package.json b/apps/chatbot/package.json index 9c0934137c..1c6e630358 100644 --- a/apps/chatbot/package.json +++ b/apps/chatbot/package.json @@ -1,5 +1,8 @@ { - "name": "chatbot", - "version": "4.0.0", - "private": true -} \ No newline at end of file + "name": "chatbot", + "version": "4.0.0", + "private": true, + "scripts": { + "test": "./docker/docker-compose-run-tests.sh" + } +} diff --git a/apps/chatbot/poetry.lock b/apps/chatbot/poetry.lock index b591250036..8ffc9a5751 100644 --- a/apps/chatbot/poetry.lock +++ b/apps/chatbot/poetry.lock @@ -65,102 +65,87 @@ files = [ [[package]] name = "aiohttp" -version = "3.10.10" +version = "3.11.6" description = "Async http client/server framework (asyncio)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "aiohttp-3.10.10-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be7443669ae9c016b71f402e43208e13ddf00912f47f623ee5994e12fc7d4b3f"}, - {file = "aiohttp-3.10.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b06b7843929e41a94ea09eb1ce3927865387e3e23ebe108e0d0d09b08d25be9"}, - {file = "aiohttp-3.10.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:333cf6cf8e65f6a1e06e9eb3e643a0c515bb850d470902274239fea02033e9a8"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:274cfa632350225ce3fdeb318c23b4a10ec25c0e2c880eff951a3842cf358ac1"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9e5e4a85bdb56d224f412d9c98ae4cbd032cc4f3161818f692cd81766eee65a"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b606353da03edcc71130b52388d25f9a30a126e04caef1fd637e31683033abd"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab5a5a0c7a7991d90446a198689c0535be89bbd6b410a1f9a66688f0880ec026"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:578a4b875af3e0daaf1ac6fa983d93e0bbfec3ead753b6d6f33d467100cdc67b"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8105fd8a890df77b76dd3054cddf01a879fc13e8af576805d667e0fa0224c35d"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3bcd391d083f636c06a68715e69467963d1f9600f85ef556ea82e9ef25f043f7"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fbc6264158392bad9df19537e872d476f7c57adf718944cc1e4495cbabf38e2a"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e48d5021a84d341bcaf95c8460b152cfbad770d28e5fe14a768988c461b821bc"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2609e9ab08474702cc67b7702dbb8a80e392c54613ebe80db7e8dbdb79837c68"}, - {file = "aiohttp-3.10.10-cp310-cp310-win32.whl", hash = "sha256:84afcdea18eda514c25bc68b9af2a2b1adea7c08899175a51fe7c4fb6d551257"}, - {file = "aiohttp-3.10.10-cp310-cp310-win_amd64.whl", hash = "sha256:9c72109213eb9d3874f7ac8c0c5fa90e072d678e117d9061c06e30c85b4cf0e6"}, - {file = "aiohttp-3.10.10-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c30a0eafc89d28e7f959281b58198a9fa5e99405f716c0289b7892ca345fe45f"}, - {file = "aiohttp-3.10.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:258c5dd01afc10015866114e210fb7365f0d02d9d059c3c3415382ab633fcbcb"}, - {file = "aiohttp-3.10.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:15ecd889a709b0080f02721255b3f80bb261c2293d3c748151274dfea93ac871"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3935f82f6f4a3820270842e90456ebad3af15810cf65932bd24da4463bc0a4c"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:413251f6fcf552a33c981c4709a6bba37b12710982fec8e558ae944bfb2abd38"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1720b4f14c78a3089562b8875b53e36b51c97c51adc53325a69b79b4b48ebcb"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:679abe5d3858b33c2cf74faec299fda60ea9de62916e8b67e625d65bf069a3b7"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:79019094f87c9fb44f8d769e41dbb664d6e8fcfd62f665ccce36762deaa0e911"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fe2fb38c2ed905a2582948e2de560675e9dfbee94c6d5ccdb1301c6d0a5bf092"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a3f00003de6eba42d6e94fabb4125600d6e484846dbf90ea8e48a800430cc142"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1bbb122c557a16fafc10354b9d99ebf2f2808a660d78202f10ba9d50786384b9"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:30ca7c3b94708a9d7ae76ff281b2f47d8eaf2579cd05971b5dc681db8caac6e1"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:df9270660711670e68803107d55c2b5949c2e0f2e4896da176e1ecfc068b974a"}, - {file = "aiohttp-3.10.10-cp311-cp311-win32.whl", hash = "sha256:aafc8ee9b742ce75044ae9a4d3e60e3d918d15a4c2e08a6c3c3e38fa59b92d94"}, - {file = "aiohttp-3.10.10-cp311-cp311-win_amd64.whl", hash = "sha256:362f641f9071e5f3ee6f8e7d37d5ed0d95aae656adf4ef578313ee585b585959"}, - {file = "aiohttp-3.10.10-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9294bbb581f92770e6ed5c19559e1e99255e4ca604a22c5c6397b2f9dd3ee42c"}, - {file = "aiohttp-3.10.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a8fa23fe62c436ccf23ff930149c047f060c7126eae3ccea005f0483f27b2e28"}, - {file = "aiohttp-3.10.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5c6a5b8c7926ba5d8545c7dd22961a107526562da31a7a32fa2456baf040939f"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:007ec22fbc573e5eb2fb7dec4198ef8f6bf2fe4ce20020798b2eb5d0abda6138"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9627cc1a10c8c409b5822a92d57a77f383b554463d1884008e051c32ab1b3742"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:50edbcad60d8f0e3eccc68da67f37268b5144ecc34d59f27a02f9611c1d4eec7"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a45d85cf20b5e0d0aa5a8dca27cce8eddef3292bc29d72dcad1641f4ed50aa16"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b00807e2605f16e1e198f33a53ce3c4523114059b0c09c337209ae55e3823a8"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f2d4324a98062be0525d16f768a03e0bbb3b9fe301ceee99611dc9a7953124e6"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:438cd072f75bb6612f2aca29f8bd7cdf6e35e8f160bc312e49fbecab77c99e3a"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:baa42524a82f75303f714108fea528ccacf0386af429b69fff141ffef1c534f9"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a7d8d14fe962153fc681f6366bdec33d4356f98a3e3567782aac1b6e0e40109a"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c1277cd707c465cd09572a774559a3cc7c7a28802eb3a2a9472588f062097205"}, - {file = "aiohttp-3.10.10-cp312-cp312-win32.whl", hash = "sha256:59bb3c54aa420521dc4ce3cc2c3fe2ad82adf7b09403fa1f48ae45c0cbde6628"}, - {file = "aiohttp-3.10.10-cp312-cp312-win_amd64.whl", hash = "sha256:0e1b370d8007c4ae31ee6db7f9a2fe801a42b146cec80a86766e7ad5c4a259cf"}, - {file = "aiohttp-3.10.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ad7593bb24b2ab09e65e8a1d385606f0f47c65b5a2ae6c551db67d6653e78c28"}, - {file = "aiohttp-3.10.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1eb89d3d29adaf533588f209768a9c02e44e4baf832b08118749c5fad191781d"}, - {file = "aiohttp-3.10.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3fe407bf93533a6fa82dece0e74dbcaaf5d684e5a51862887f9eaebe6372cd79"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50aed5155f819873d23520919e16703fc8925e509abbb1a1491b0087d1cd969e"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f05e9727ce409358baa615dbeb9b969db94324a79b5a5cea45d39bdb01d82e6"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dffb610a30d643983aeb185ce134f97f290f8935f0abccdd32c77bed9388b42"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa6658732517ddabe22c9036479eabce6036655ba87a0224c612e1ae6af2087e"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:741a46d58677d8c733175d7e5aa618d277cd9d880301a380fd296975a9cdd7bc"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e00e3505cd80440f6c98c6d69269dcc2a119f86ad0a9fd70bccc59504bebd68a"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ffe595f10566f8276b76dc3a11ae4bb7eba1aac8ddd75811736a15b0d5311414"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdfcf6443637c148c4e1a20c48c566aa694fa5e288d34b20fcdc58507882fed3"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d183cf9c797a5291e8301790ed6d053480ed94070637bfaad914dd38b0981f67"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:77abf6665ae54000b98b3c742bc6ea1d1fb31c394bcabf8b5d2c1ac3ebfe7f3b"}, - {file = "aiohttp-3.10.10-cp313-cp313-win32.whl", hash = "sha256:4470c73c12cd9109db8277287d11f9dd98f77fc54155fc71a7738a83ffcc8ea8"}, - {file = "aiohttp-3.10.10-cp313-cp313-win_amd64.whl", hash = "sha256:486f7aabfa292719a2753c016cc3a8f8172965cabb3ea2e7f7436c7f5a22a151"}, - {file = "aiohttp-3.10.10-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1b66ccafef7336a1e1f0e389901f60c1d920102315a56df85e49552308fc0486"}, - {file = "aiohttp-3.10.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:acd48d5b80ee80f9432a165c0ac8cbf9253eaddb6113269a5e18699b33958dbb"}, - {file = "aiohttp-3.10.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3455522392fb15ff549d92fbf4b73b559d5e43dc522588f7eb3e54c3f38beee7"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45c3b868724137f713a38376fef8120c166d1eadd50da1855c112fe97954aed8"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:da1dee8948d2137bb51fbb8a53cce6b1bcc86003c6b42565f008438b806cccd8"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5ce2ce7c997e1971b7184ee37deb6ea9922ef5163c6ee5aa3c274b05f9e12fa"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28529e08fde6f12eba8677f5a8608500ed33c086f974de68cc65ab218713a59d"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7db54c7914cc99d901d93a34704833568d86c20925b2762f9fa779f9cd2e70f"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:03a42ac7895406220124c88911ebee31ba8b2d24c98507f4a8bf826b2937c7f2"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7e338c0523d024fad378b376a79faff37fafb3c001872a618cde1d322400a572"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:038f514fe39e235e9fef6717fbf944057bfa24f9b3db9ee551a7ecf584b5b480"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:64f6c17757251e2b8d885d728b6433d9d970573586a78b78ba8929b0f41d045a"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:93429602396f3383a797a2a70e5f1de5df8e35535d7806c9f91df06f297e109b"}, - {file = "aiohttp-3.10.10-cp38-cp38-win32.whl", hash = "sha256:c823bc3971c44ab93e611ab1a46b1eafeae474c0c844aff4b7474287b75fe49c"}, - {file = "aiohttp-3.10.10-cp38-cp38-win_amd64.whl", hash = "sha256:54ca74df1be3c7ca1cf7f4c971c79c2daf48d9aa65dea1a662ae18926f5bc8ce"}, - {file = "aiohttp-3.10.10-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:01948b1d570f83ee7bbf5a60ea2375a89dfb09fd419170e7f5af029510033d24"}, - {file = "aiohttp-3.10.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9fc1500fd2a952c5c8e3b29aaf7e3cc6e27e9cfc0a8819b3bce48cc1b849e4cc"}, - {file = "aiohttp-3.10.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f614ab0c76397661b90b6851a030004dac502e48260ea10f2441abd2207fbcc7"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00819de9e45d42584bed046314c40ea7e9aea95411b38971082cad449392b08c"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05646ebe6b94cc93407b3bf34b9eb26c20722384d068eb7339de802154d61bc5"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:998f3bd3cfc95e9424a6acd7840cbdd39e45bc09ef87533c006f94ac47296090"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9010c31cd6fa59438da4e58a7f19e4753f7f264300cd152e7f90d4602449762"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ea7ffc6d6d6f8a11e6f40091a1040995cdff02cfc9ba4c2f30a516cb2633554"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ef9c33cc5cbca35808f6c74be11eb7f5f6b14d2311be84a15b594bd3e58b5527"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ce0cdc074d540265bfeb31336e678b4e37316849d13b308607efa527e981f5c2"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:597a079284b7ee65ee102bc3a6ea226a37d2b96d0418cc9047490f231dc09fe8"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:7789050d9e5d0c309c706953e5e8876e38662d57d45f936902e176d19f1c58ab"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e7f8b04d83483577fd9200461b057c9f14ced334dcb053090cea1da9c8321a91"}, - {file = "aiohttp-3.10.10-cp39-cp39-win32.whl", hash = "sha256:c02a30b904282777d872266b87b20ed8cc0d1501855e27f831320f471d54d983"}, - {file = "aiohttp-3.10.10-cp39-cp39-win_amd64.whl", hash = "sha256:edfe3341033a6b53a5c522c802deb2079eee5cbfbb0af032a55064bd65c73a23"}, - {file = "aiohttp-3.10.10.tar.gz", hash = "sha256:0631dd7c9f0822cc61c88586ca76d5b5ada26538097d0f1df510b082bad3411a"}, + {file = "aiohttp-3.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7510b3ca2275691875ddf072a5b6cd129278d11fe09301add7d292fc8d3432de"}, + {file = "aiohttp-3.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bfab0d2c3380c588fc925168533edb21d3448ad76c3eadc360ff963019161724"}, + {file = "aiohttp-3.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf02dba0f342f3a8228f43fae256aafc21c4bc85bffcf537ce4582e2b1565188"}, + {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92daedf7221392e7a7984915ca1b0481a94c71457c2f82548414a41d65555e70"}, + {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2274a7876e03429e3218589a6d3611a194bdce08c3f1e19962e23370b47c0313"}, + {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8a2e1eae2d2f62f3660a1591e16e543b2498358593a73b193006fb89ee37abc6"}, + {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:978ec3fb0a42efcd98aae608f58c6cfcececaf0a50b4e86ee3ea0d0a574ab73b"}, + {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a51f87b27d9219ed4e202ed8d6f1bb96f829e5eeff18db0d52f592af6de6bdbf"}, + {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:04d1a02a669d26e833c8099992c17f557e3b2fdb7960a0c455d7b1cbcb05121d"}, + {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3679d5fcbc7f1ab518ab4993f12f80afb63933f6afb21b9b272793d398303b98"}, + {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a4b24e03d04893b5c8ec9cd5f2f11dc9c8695c4e2416d2ac2ce6c782e4e5ffa5"}, + {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d9abdfd35ecff1c95f270b7606819a0e2de9e06fa86b15d9080de26594cf4c23"}, + {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8b5c3e7928a0ad80887a5eba1c1da1830512ddfe7394d805badda45c03db3109"}, + {file = "aiohttp-3.11.6-cp310-cp310-win32.whl", hash = "sha256:913dd9e9378f3c38aeb5c4fb2b8383d6490bc43f3b427ae79f2870651ae08f22"}, + {file = "aiohttp-3.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:4ac26d482c2000c3a59bf757a77adc972828c9d4177b4bd432a46ba682ca7271"}, + {file = "aiohttp-3.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:26ac4c960ea8debf557357a172b3ef201f2236a462aefa1bc17683a75483e518"}, + {file = "aiohttp-3.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8b1f13ebc99fb98c7c13057b748f05224ccc36d17dee18136c695ef23faaf4ff"}, + {file = "aiohttp-3.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4679f1a47516189fab1774f7e45a6c7cac916224c91f5f94676f18d0b64ab134"}, + {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74491fdb3d140ff561ea2128cb7af9ba0a360067ee91074af899c9614f88a18f"}, + {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f51e1a90412d387e62aa2d243998c5eddb71373b199d811e6ed862a9f34f9758"}, + {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72ab89510511c3bb703d0bb5504787b11e0ed8be928ed2a7cf1cda9280628430"}, + {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6681c9e046d99646e8059266688374a063da85b2e4c0ebfa078cda414905d080"}, + {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a17f8a6d3ab72cbbd137e494d1a23fbd3ea973db39587941f32901bb3c5c350"}, + {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:867affc7612a314b95f74d93aac550ce0909bc6f0b6c658cc856890f4d326542"}, + {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:00d894ebd609d5a423acef885bd61e7f6a972153f99c5b3ea45fc01fe909196c"}, + {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:614c87be9d0d64477d1e4b663bdc5d1534fc0a7ebd23fb08347ab9fd5fe20fd7"}, + {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:533ed46cf772f28f3bffae81c0573d916a64dee590b5dfaa3f3d11491da05b95"}, + {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:589884cfbc09813afb1454816b45677e983442e146183143f988f7f5a040791a"}, + {file = "aiohttp-3.11.6-cp311-cp311-win32.whl", hash = "sha256:1da63633ba921669eec3d7e080459d4ceb663752b3dafb2f31f18edd248d2170"}, + {file = "aiohttp-3.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:d778ddda09622e7d83095cc8051698a0084c155a1474bfee9bac27d8613dbc31"}, + {file = "aiohttp-3.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:943a952df105a5305257984e7a1f5c2d0fd8564ff33647693c4d07eb2315446d"}, + {file = "aiohttp-3.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d24ec28b7658970a1f1d98608d67f88376c7e503d9d45ff2ba1949c09f2b358c"}, + {file = "aiohttp-3.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6720e809a660fdb9bec7c168c582e11cfedce339af0a5ca847a5d5b588dce826"}, + {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4252d30da0ada6e6841b325869c7ef5104b488e8dd57ec439892abbb8d7b3615"}, + {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f65f43ff01b238aa0b5c47962c83830a49577efe31bd37c1400c3d11d8a32835"}, + {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dc5933f6c9b26404444d36babb650664f984b8e5fa0694540e7b7315d11a4ff"}, + {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5bf546ba0c029dfffc718c4b67748687fd4f341b07b7c8f1719d6a3a46164798"}, + {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c351d05bbeae30c088009c0bb3b17dda04fd854f91cc6196c448349cc98f71c3"}, + {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:10499079b063576fad1597898de3f9c0a2ce617c19cc7cd6b62fdcff6b408bf7"}, + {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:442ee82eda47dd59798d6866ce020fb8d02ea31ac9ac82b3d719ed349e6a9d52"}, + {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:86fce9127bc317119b34786d9e9ae8af4508a103158828a535f56d201da6ab19"}, + {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:973d26a5537ce5d050302eb3cd876457451745b1da0624cbb483217970e12567"}, + {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:532b8f038a4e001137d3600cea5d3439d1881df41bdf44d0f9651264d562fdf0"}, + {file = "aiohttp-3.11.6-cp312-cp312-win32.whl", hash = "sha256:4863c59f748dbe147da82b389931f2a676aebc9d3419813ed5ca32d057c9cb32"}, + {file = "aiohttp-3.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:5d7f481f82c18ac1f7986e31ba6eea9be8b2e2c86f1ef035b6866179b6c5dd68"}, + {file = "aiohttp-3.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:40f502350496ba4c6820816d3164f8a0297b9aa4e95d910da31beb189866a9df"}, + {file = "aiohttp-3.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9072669b0bffb40f1f6977d0b5e8a296edc964f9cefca3a18e68649c214d0ce3"}, + {file = "aiohttp-3.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:518160ecf4e6ffd61715bc9173da0925fcce44ae6c7ca3d3f098fe42585370fb"}, + {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f69cc1b45115ac44795b63529aa5caa9674be057f11271f65474127b24fc1ce6"}, + {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6be90a6beced41653bda34afc891617c6d9e8276eef9c183f029f851f0a3c3d"}, + {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00c22fe2486308770d22ef86242101d7b0f1e1093ce178f2358f860e5149a551"}, + {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2607ebb783e3aeefa017ec8f34b506a727e6b6ab2c4b037d65f0bc7151f4430a"}, + {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5f761d6819870c2a8537f75f3e2fc610b163150cefa01f9f623945840f601b2c"}, + {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e44d1bc6c88f5234115011842219ba27698a5f2deee245c963b180080572aaa2"}, + {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7e0cb6a1b1f499cb2aa0bab1c9f2169ad6913c735b7447e058e0c29c9e51c0b5"}, + {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a76b4d4ca34254dca066acff2120811e2a8183997c135fcafa558280f2cc53f3"}, + {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:69051c1e45fb18c0ae4d39a075532ff0b015982e7997f19eb5932eb4a3e05c17"}, + {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aff2ed18274c0bfe0c1d772781c87d5ca97ae50f439729007cec9644ee9b15fe"}, + {file = "aiohttp-3.11.6-cp313-cp313-win32.whl", hash = "sha256:2fbea25f2d44df809a46414a8baafa5f179d9dda7e60717f07bded56300589b3"}, + {file = "aiohttp-3.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:f77bc29a465c0f9f6573d1abe656d385fa673e34efe615bd4acc50899280ee47"}, + {file = "aiohttp-3.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:de6123b298d17bca9e53581f50a275b36e10d98e8137eb743ce69ee766dbdfe9"}, + {file = "aiohttp-3.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a10200f705f4fff00e148b7f41e5d1d929c7cd4ac523c659171a0ea8284cd6fb"}, + {file = "aiohttp-3.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b7776ef6901b54dd557128d96c71e412eec0c39ebc07567e405ac98737995aad"}, + {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e5c2a55583cd91936baf73d223807bb93ace6eb1fe54424782690f2707162ab"}, + {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b032bd6cf7422583bf44f233f4a1489fee53c6d35920123a208adc54e2aba41e"}, + {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04fe2d99acbc5cf606f75d7347bf3a027c24c27bc052d470fb156f4cfcea5739"}, + {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84a79c366375c2250934d1238abe5d5ea7754c823a1c7df0c52bf0a2bfded6a9"}, + {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c33cbbe97dc94a34d1295a7bb68f82727bcbff2b284f73ae7e58ecc05903da97"}, + {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:19e4fb9ac727834b003338dcdd27dcfe0de4fb44082b01b34ed0ab67c3469fc9"}, + {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a97f6b2afbe1d27220c0c14ea978e09fb4868f462ef3d56d810d206bd2e057a2"}, + {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c3f7afeea03a9bc49be6053dfd30809cd442cc12627d6ca08babd1c1f9e04ccf"}, + {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:0d10967600ce5bb69ddcb3e18d84b278efb5199d8b24c3c71a4959c2f08acfd0"}, + {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:60f2f631b9fe7aa321fa0f0ff3f5d8b9f7f9b72afd4eecef61c33cf1cfea5d58"}, + {file = "aiohttp-3.11.6-cp39-cp39-win32.whl", hash = "sha256:4d2b75333deb5c5f61bac5a48bba3dbc142eebbd3947d98788b6ef9cc48628ae"}, + {file = "aiohttp-3.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:8908c235421972a2e02abcef87d16084aabfe825d14cc9a1debd609b3cfffbea"}, + {file = "aiohttp-3.11.6.tar.gz", hash = "sha256:fd9f55c1b51ae1c20a1afe7216a64a88d38afee063baa23c7fce03757023c999"}, ] [package.dependencies] @@ -169,7 +154,8 @@ aiosignal = ">=1.1.2" attrs = ">=17.3.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" -yarl = ">=1.12.0,<2.0" +propcache = ">=0.2.0" +yarl = ">=1.17.0,<2.0" [package.extras] speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] @@ -409,13 +395,13 @@ tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "azure-core" -version = "1.31.0" +version = "1.32.0" description = "Microsoft Azure Core Library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "azure_core-1.31.0-py3-none-any.whl", hash = "sha256:22954de3777e0250029360ef31d80448ef1be13b80a459bff80ba7073379e2cd"}, - {file = "azure_core-1.31.0.tar.gz", hash = "sha256:656a0dd61e1869b1506b7c6a3b31d62f15984b1a573d6326f6aa2f3e4123284b"}, + {file = "azure_core-1.32.0-py3-none-any.whl", hash = "sha256:eac191a0efb23bfa83fddf321b27b122b4ec847befa3091fa736a5c32c50d7b4"}, + {file = "azure_core-1.32.0.tar.gz", hash = "sha256:22b3c35d6b2dae14990f6c1be2912bf23ffe50b220e708a28ab1bb92b1c730e5"}, ] [package.dependencies] @@ -474,21 +460,20 @@ lxml = ["lxml"] [[package]] name = "bleach" -version = "6.1.0" +version = "6.2.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, - {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, + {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, + {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, ] [package.dependencies] -six = ">=1.9.0" webencodings = "*" [package.extras] -css = ["tinycss2 (>=1.1.0,<1.3)"] +css = ["tinycss2 (>=1.1.0,<1.5)"] [[package]] name = "blis" @@ -907,76 +892,65 @@ srsly = ">=2.4.0,<3.0.0" [[package]] name = "contourpy" -version = "1.3.0" +version = "1.3.1" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, - {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"}, - {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"}, - {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"}, - {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"}, - {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"}, - {file = "contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad"}, - {file = "contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d"}, - {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c"}, - {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb"}, - {file = "contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c"}, - {file = "contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67"}, - {file = "contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f"}, - {file = "contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09"}, - {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd"}, - {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35"}, - {file = "contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb"}, - {file = "contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b"}, - {file = "contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3"}, - {file = "contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da"}, - {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14"}, - {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8"}, - {file = "contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294"}, - {file = "contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087"}, - {file = "contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8"}, - {file = "contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6"}, - {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2"}, - {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927"}, - {file = "contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8"}, - {file = "contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2"}, - {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e"}, - {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800"}, - {file = "contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5"}, - {file = "contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb"}, - {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"}, + {file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"}, + {file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2f926efda994cdf3c8d3fdb40b9962f86edbc4457e739277b961eced3d0b4c1"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adce39d67c0edf383647a3a007de0a45fd1b08dedaa5318404f1a73059c2512b"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abbb49fb7dac584e5abc6636b7b2a7227111c4f771005853e7d25176daaf8453"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0cffcbede75c059f535725c1680dfb17b6ba8753f0c74b14e6a9c68c29d7ea3"}, + {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab29962927945d89d9b293eabd0d59aea28d887d4f3be6c22deaefbb938a7277"}, + {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974d8145f8ca354498005b5b981165b74a195abfae9a8129df3e56771961d595"}, + {file = "contourpy-1.3.1-cp310-cp310-win32.whl", hash = "sha256:ac4578ac281983f63b400f7fe6c101bedc10651650eef012be1ccffcbacf3697"}, + {file = "contourpy-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:174e758c66bbc1c8576992cec9599ce8b6672b741b5d336b5c74e35ac382b18e"}, + {file = "contourpy-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b"}, + {file = "contourpy-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c"}, + {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291"}, + {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f"}, + {file = "contourpy-1.3.1-cp311-cp311-win32.whl", hash = "sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375"}, + {file = "contourpy-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9"}, + {file = "contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509"}, + {file = "contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9"}, + {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b"}, + {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d"}, + {file = "contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e"}, + {file = "contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d"}, + {file = "contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2"}, + {file = "contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c"}, + {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3"}, + {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1"}, + {file = "contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82"}, + {file = "contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd"}, + {file = "contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30"}, + {file = "contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda"}, + {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242"}, + {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1"}, + {file = "contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1"}, + {file = "contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b457d6430833cee8e4b8e9b6f07aa1c161e5e0d52e118dc102c8f9bd7dd060d6"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb76c1a154b83991a3cbbf0dfeb26ec2833ad56f95540b442c73950af2013750"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:44a29502ca9c7b5ba389e620d44f2fbe792b1fb5734e8b931ad307071ec58c53"}, + {file = "contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699"}, ] [package.dependencies] @@ -1123,37 +1097,37 @@ typing-inspect = ">=0.4.0,<1" [[package]] name = "debugpy" -version = "1.8.7" +version = "1.8.8" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.7-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:95fe04a573b8b22896c404365e03f4eda0ce0ba135b7667a1e57bd079793b96b"}, - {file = "debugpy-1.8.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:628a11f4b295ffb4141d8242a9bb52b77ad4a63a2ad19217a93be0f77f2c28c9"}, - {file = "debugpy-1.8.7-cp310-cp310-win32.whl", hash = "sha256:85ce9c1d0eebf622f86cc68618ad64bf66c4fc3197d88f74bb695a416837dd55"}, - {file = "debugpy-1.8.7-cp310-cp310-win_amd64.whl", hash = "sha256:29e1571c276d643757ea126d014abda081eb5ea4c851628b33de0c2b6245b037"}, - {file = "debugpy-1.8.7-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:caf528ff9e7308b74a1749c183d6808ffbedbb9fb6af78b033c28974d9b8831f"}, - {file = "debugpy-1.8.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cba1d078cf2e1e0b8402e6bda528bf8fda7ccd158c3dba6c012b7897747c41a0"}, - {file = "debugpy-1.8.7-cp311-cp311-win32.whl", hash = "sha256:171899588bcd412151e593bd40d9907133a7622cd6ecdbdb75f89d1551df13c2"}, - {file = "debugpy-1.8.7-cp311-cp311-win_amd64.whl", hash = "sha256:6e1c4ffb0c79f66e89dfd97944f335880f0d50ad29525dc792785384923e2211"}, - {file = "debugpy-1.8.7-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:4d27d842311353ede0ad572600c62e4bcd74f458ee01ab0dd3a1a4457e7e3706"}, - {file = "debugpy-1.8.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:703c1fd62ae0356e194f3e7b7a92acd931f71fe81c4b3be2c17a7b8a4b546ec2"}, - {file = "debugpy-1.8.7-cp312-cp312-win32.whl", hash = "sha256:2f729228430ef191c1e4df72a75ac94e9bf77413ce5f3f900018712c9da0aaca"}, - {file = "debugpy-1.8.7-cp312-cp312-win_amd64.whl", hash = "sha256:45c30aaefb3e1975e8a0258f5bbd26cd40cde9bfe71e9e5a7ac82e79bad64e39"}, - {file = "debugpy-1.8.7-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:d050a1ec7e925f514f0f6594a1e522580317da31fbda1af71d1530d6ea1f2b40"}, - {file = "debugpy-1.8.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f4349a28e3228a42958f8ddaa6333d6f8282d5edaea456070e48609c5983b7"}, - {file = "debugpy-1.8.7-cp313-cp313-win32.whl", hash = "sha256:11ad72eb9ddb436afb8337891a986302e14944f0f755fd94e90d0d71e9100bba"}, - {file = "debugpy-1.8.7-cp313-cp313-win_amd64.whl", hash = "sha256:2efb84d6789352d7950b03d7f866e6d180284bc02c7e12cb37b489b7083d81aa"}, - {file = "debugpy-1.8.7-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:4b908291a1d051ef3331484de8e959ef3e66f12b5e610c203b5b75d2725613a7"}, - {file = "debugpy-1.8.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da8df5b89a41f1fd31503b179d0a84a5fdb752dddd5b5388dbd1ae23cda31ce9"}, - {file = "debugpy-1.8.7-cp38-cp38-win32.whl", hash = "sha256:b12515e04720e9e5c2216cc7086d0edadf25d7ab7e3564ec8b4521cf111b4f8c"}, - {file = "debugpy-1.8.7-cp38-cp38-win_amd64.whl", hash = "sha256:93176e7672551cb5281577cdb62c63aadc87ec036f0c6a486f0ded337c504596"}, - {file = "debugpy-1.8.7-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:90d93e4f2db442f8222dec5ec55ccfc8005821028982f1968ebf551d32b28907"}, - {file = "debugpy-1.8.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6db2a370e2700557a976eaadb16243ec9c91bd46f1b3bb15376d7aaa7632c81"}, - {file = "debugpy-1.8.7-cp39-cp39-win32.whl", hash = "sha256:a6cf2510740e0c0b4a40330640e4b454f928c7b99b0c9dbf48b11efba08a8cda"}, - {file = "debugpy-1.8.7-cp39-cp39-win_amd64.whl", hash = "sha256:6a9d9d6d31846d8e34f52987ee0f1a904c7baa4912bf4843ab39dadf9b8f3e0d"}, - {file = "debugpy-1.8.7-py2.py3-none-any.whl", hash = "sha256:57b00de1c8d2c84a61b90880f7e5b6deaf4c312ecbde3a0e8912f2a56c4ac9ae"}, - {file = "debugpy-1.8.7.zip", hash = "sha256:18b8f731ed3e2e1df8e9cdaa23fb1fc9c24e570cd0081625308ec51c82efe42e"}, + {file = "debugpy-1.8.8-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:e59b1607c51b71545cb3496876544f7186a7a27c00b436a62f285603cc68d1c6"}, + {file = "debugpy-1.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6531d952b565b7cb2fbd1ef5df3d333cf160b44f37547a4e7cf73666aca5d8d"}, + {file = "debugpy-1.8.8-cp310-cp310-win32.whl", hash = "sha256:b01f4a5e5c5fb1d34f4ccba99a20ed01eabc45a4684f4948b5db17a319dfb23f"}, + {file = "debugpy-1.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:535f4fb1c024ddca5913bb0eb17880c8f24ba28aa2c225059db145ee557035e9"}, + {file = "debugpy-1.8.8-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:c399023146e40ae373753a58d1be0a98bf6397fadc737b97ad612886b53df318"}, + {file = "debugpy-1.8.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09cc7b162586ea2171eea055985da2702b0723f6f907a423c9b2da5996ad67ba"}, + {file = "debugpy-1.8.8-cp311-cp311-win32.whl", hash = "sha256:eea8821d998ebeb02f0625dd0d76839ddde8cbf8152ebbe289dd7acf2cdc6b98"}, + {file = "debugpy-1.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:d4483836da2a533f4b1454dffc9f668096ac0433de855f0c22cdce8c9f7e10c4"}, + {file = "debugpy-1.8.8-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:0cc94186340be87b9ac5a707184ec8f36547fb66636d1029ff4f1cc020e53996"}, + {file = "debugpy-1.8.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64674e95916e53c2e9540a056e5f489e0ad4872645399d778f7c598eacb7b7f9"}, + {file = "debugpy-1.8.8-cp312-cp312-win32.whl", hash = "sha256:5c6e885dbf12015aed73770f29dec7023cb310d0dc2ba8bfbeb5c8e43f80edc9"}, + {file = "debugpy-1.8.8-cp312-cp312-win_amd64.whl", hash = "sha256:19ffbd84e757a6ca0113574d1bf5a2298b3947320a3e9d7d8dc3377f02d9f864"}, + {file = "debugpy-1.8.8-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:705cd123a773d184860ed8dae99becd879dfec361098edbefb5fc0d3683eb804"}, + {file = "debugpy-1.8.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:890fd16803f50aa9cb1a9b9b25b5ec321656dd6b78157c74283de241993d086f"}, + {file = "debugpy-1.8.8-cp313-cp313-win32.whl", hash = "sha256:90244598214bbe704aa47556ec591d2f9869ff9e042e301a2859c57106649add"}, + {file = "debugpy-1.8.8-cp313-cp313-win_amd64.whl", hash = "sha256:4b93e4832fd4a759a0c465c967214ed0c8a6e8914bced63a28ddb0dd8c5f078b"}, + {file = "debugpy-1.8.8-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:143ef07940aeb8e7316de48f5ed9447644da5203726fca378f3a6952a50a9eae"}, + {file = "debugpy-1.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f95651bdcbfd3b27a408869a53fbefcc2bcae13b694daee5f1365b1b83a00113"}, + {file = "debugpy-1.8.8-cp38-cp38-win32.whl", hash = "sha256:26b461123a030e82602a750fb24d7801776aa81cd78404e54ab60e8b5fecdad5"}, + {file = "debugpy-1.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:f3cbf1833e644a3100eadb6120f25be8a532035e8245584c4f7532937edc652a"}, + {file = "debugpy-1.8.8-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:53709d4ec586b525724819dc6af1a7703502f7e06f34ded7157f7b1f963bb854"}, + {file = "debugpy-1.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a9c013077a3a0000e83d97cf9cc9328d2b0bbb31f56b0e99ea3662d29d7a6a2"}, + {file = "debugpy-1.8.8-cp39-cp39-win32.whl", hash = "sha256:ffe94dd5e9a6739a75f0b85316dc185560db3e97afa6b215628d1b6a17561cb2"}, + {file = "debugpy-1.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5c0e5a38c7f9b481bf31277d2f74d2109292179081f11108e668195ef926c0f9"}, + {file = "debugpy-1.8.8-py2.py3-none-any.whl", hash = "sha256:ec684553aba5b4066d4de510859922419febc710df7bba04fe9e7ef3de15d34f"}, + {file = "debugpy-1.8.8.zip", hash = "sha256:e6355385db85cbd666be703a96ab7351bc9e6c61d694893206f8001e22aee091"}, ] [[package]] @@ -1180,20 +1154,20 @@ files = [ [[package]] name = "deprecated" -version = "1.2.14" +version = "1.2.15" 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.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ - {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, - {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, + {file = "Deprecated-1.2.15-py2.py3-none-any.whl", hash = "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320"}, + {file = "deprecated-1.2.15.tar.gz", hash = "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d"}, ] [package.dependencies] wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", "setuptools", "sphinx (<2)", "tox"] [[package]] name = "dirtyjson" @@ -1379,61 +1353,74 @@ docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2. testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] typing = ["typing-extensions (>=4.12.2)"] +[[package]] +name = "filetype" +version = "1.2.0" +description = "Infer file type and MIME type of any file/buffer. No external dependencies." +optional = false +python-versions = "*" +files = [ + {file = "filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25"}, + {file = "filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb"}, +] + [[package]] name = "fonttools" -version = "4.54.1" +version = "4.55.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.54.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ed7ee041ff7b34cc62f07545e55e1468808691dddfd315d51dd82a6b37ddef2"}, - {file = "fonttools-4.54.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41bb0b250c8132b2fcac148e2e9198e62ff06f3cc472065dff839327945c5882"}, - {file = "fonttools-4.54.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7965af9b67dd546e52afcf2e38641b5be956d68c425bef2158e95af11d229f10"}, - {file = "fonttools-4.54.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:278913a168f90d53378c20c23b80f4e599dca62fbffae4cc620c8eed476b723e"}, - {file = "fonttools-4.54.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0e88e3018ac809b9662615072dcd6b84dca4c2d991c6d66e1970a112503bba7e"}, - {file = "fonttools-4.54.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4aa4817f0031206e637d1e685251ac61be64d1adef111060df84fdcbc6ab6c44"}, - {file = "fonttools-4.54.1-cp310-cp310-win32.whl", hash = "sha256:7e3b7d44e18c085fd8c16dcc6f1ad6c61b71ff463636fcb13df7b1b818bd0c02"}, - {file = "fonttools-4.54.1-cp310-cp310-win_amd64.whl", hash = "sha256:dd9cc95b8d6e27d01e1e1f1fae8559ef3c02c76317da650a19047f249acd519d"}, - {file = "fonttools-4.54.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5419771b64248484299fa77689d4f3aeed643ea6630b2ea750eeab219588ba20"}, - {file = "fonttools-4.54.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:301540e89cf4ce89d462eb23a89464fef50915255ece765d10eee8b2bf9d75b2"}, - {file = "fonttools-4.54.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ae5091547e74e7efecc3cbf8e75200bc92daaeb88e5433c5e3e95ea8ce5aa7"}, - {file = "fonttools-4.54.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82834962b3d7c5ca98cb56001c33cf20eb110ecf442725dc5fdf36d16ed1ab07"}, - {file = "fonttools-4.54.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d26732ae002cc3d2ecab04897bb02ae3f11f06dd7575d1df46acd2f7c012a8d8"}, - {file = "fonttools-4.54.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:58974b4987b2a71ee08ade1e7f47f410c367cdfc5a94fabd599c88165f56213a"}, - {file = "fonttools-4.54.1-cp311-cp311-win32.whl", hash = "sha256:ab774fa225238986218a463f3fe151e04d8c25d7de09df7f0f5fce27b1243dbc"}, - {file = "fonttools-4.54.1-cp311-cp311-win_amd64.whl", hash = "sha256:07e005dc454eee1cc60105d6a29593459a06321c21897f769a281ff2d08939f6"}, - {file = "fonttools-4.54.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:54471032f7cb5fca694b5f1a0aaeba4af6e10ae989df408e0216f7fd6cdc405d"}, - {file = "fonttools-4.54.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fa92cb248e573daab8d032919623cc309c005086d743afb014c836636166f08"}, - {file = "fonttools-4.54.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a911591200114969befa7f2cb74ac148bce5a91df5645443371aba6d222e263"}, - {file = "fonttools-4.54.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93d458c8a6a354dc8b48fc78d66d2a8a90b941f7fec30e94c7ad9982b1fa6bab"}, - {file = "fonttools-4.54.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5eb2474a7c5be8a5331146758debb2669bf5635c021aee00fd7c353558fc659d"}, - {file = "fonttools-4.54.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c9c563351ddc230725c4bdf7d9e1e92cbe6ae8553942bd1fb2b2ff0884e8b714"}, - {file = "fonttools-4.54.1-cp312-cp312-win32.whl", hash = "sha256:fdb062893fd6d47b527d39346e0c5578b7957dcea6d6a3b6794569370013d9ac"}, - {file = "fonttools-4.54.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4564cf40cebcb53f3dc825e85910bf54835e8a8b6880d59e5159f0f325e637e"}, - {file = "fonttools-4.54.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6e37561751b017cf5c40fce0d90fd9e8274716de327ec4ffb0df957160be3bff"}, - {file = "fonttools-4.54.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:357cacb988a18aace66e5e55fe1247f2ee706e01debc4b1a20d77400354cddeb"}, - {file = "fonttools-4.54.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e953cc0bddc2beaf3a3c3b5dd9ab7554677da72dfaf46951e193c9653e515a"}, - {file = "fonttools-4.54.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:58d29b9a294573d8319f16f2f79e42428ba9b6480442fa1836e4eb89c4d9d61c"}, - {file = "fonttools-4.54.1-cp313-cp313-win32.whl", hash = "sha256:9ef1b167e22709b46bf8168368b7b5d3efeaaa746c6d39661c1b4405b6352e58"}, - {file = "fonttools-4.54.1-cp313-cp313-win_amd64.whl", hash = "sha256:262705b1663f18c04250bd1242b0515d3bbae177bee7752be67c979b7d47f43d"}, - {file = "fonttools-4.54.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ed2f80ca07025551636c555dec2b755dd005e2ea8fbeb99fc5cdff319b70b23b"}, - {file = "fonttools-4.54.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9dc080e5a1c3b2656caff2ac2633d009b3a9ff7b5e93d0452f40cd76d3da3b3c"}, - {file = "fonttools-4.54.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d152d1be65652fc65e695e5619e0aa0982295a95a9b29b52b85775243c06556"}, - {file = "fonttools-4.54.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8583e563df41fdecef31b793b4dd3af8a9caa03397be648945ad32717a92885b"}, - {file = "fonttools-4.54.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0d1d353ef198c422515a3e974a1e8d5b304cd54a4c2eebcae708e37cd9eeffb1"}, - {file = "fonttools-4.54.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:fda582236fee135d4daeca056c8c88ec5f6f6d88a004a79b84a02547c8f57386"}, - {file = "fonttools-4.54.1-cp38-cp38-win32.whl", hash = "sha256:e7d82b9e56716ed32574ee106cabca80992e6bbdcf25a88d97d21f73a0aae664"}, - {file = "fonttools-4.54.1-cp38-cp38-win_amd64.whl", hash = "sha256:ada215fd079e23e060157aab12eba0d66704316547f334eee9ff26f8c0d7b8ab"}, - {file = "fonttools-4.54.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f5b8a096e649768c2f4233f947cf9737f8dbf8728b90e2771e2497c6e3d21d13"}, - {file = "fonttools-4.54.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e10d2e0a12e18f4e2dd031e1bf7c3d7017be5c8dbe524d07706179f355c5dac"}, - {file = "fonttools-4.54.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31c32d7d4b0958600eac75eaf524b7b7cb68d3a8c196635252b7a2c30d80e986"}, - {file = "fonttools-4.54.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c39287f5c8f4a0c5a55daf9eaf9ccd223ea59eed3f6d467133cc727d7b943a55"}, - {file = "fonttools-4.54.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a7a310c6e0471602fe3bf8efaf193d396ea561486aeaa7adc1f132e02d30c4b9"}, - {file = "fonttools-4.54.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d3b659d1029946f4ff9b6183984578041b520ce0f8fb7078bb37ec7445806b33"}, - {file = "fonttools-4.54.1-cp39-cp39-win32.whl", hash = "sha256:e96bc94c8cda58f577277d4a71f51c8e2129b8b36fd05adece6320dd3d57de8a"}, - {file = "fonttools-4.54.1-cp39-cp39-win_amd64.whl", hash = "sha256:e8a4b261c1ef91e7188a30571be6ad98d1c6d9fa2427244c545e2fa0a2494dd7"}, - {file = "fonttools-4.54.1-py3-none-any.whl", hash = "sha256:37cddd62d83dc4f72f7c3f3c2bcf2697e89a30efb152079896544a93907733bd"}, - {file = "fonttools-4.54.1.tar.gz", hash = "sha256:957f669d4922f92c171ba01bef7f29410668db09f6c02111e22b2bce446f3285"}, + {file = "fonttools-4.55.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:51c029d4c0608a21a3d3d169dfc3fb776fde38f00b35ca11fdab63ba10a16f61"}, + {file = "fonttools-4.55.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bca35b4e411362feab28e576ea10f11268b1aeed883b9f22ed05675b1e06ac69"}, + {file = "fonttools-4.55.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ce4ba6981e10f7e0ccff6348e9775ce25ffadbee70c9fd1a3737e3e9f5fa74f"}, + {file = "fonttools-4.55.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31d00f9852a6051dac23294a4cf2df80ced85d1d173a61ba90a3d8f5abc63c60"}, + {file = "fonttools-4.55.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e198e494ca6e11f254bac37a680473a311a88cd40e58f9cc4dc4911dfb686ec6"}, + {file = "fonttools-4.55.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7208856f61770895e79732e1dcbe49d77bd5783adf73ae35f87fcc267df9db81"}, + {file = "fonttools-4.55.0-cp310-cp310-win32.whl", hash = "sha256:e7e6a352ff9e46e8ef8a3b1fe2c4478f8a553e1b5a479f2e899f9dc5f2055880"}, + {file = "fonttools-4.55.0-cp310-cp310-win_amd64.whl", hash = "sha256:636caaeefe586d7c84b5ee0734c1a5ab2dae619dc21c5cf336f304ddb8f6001b"}, + {file = "fonttools-4.55.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fa34aa175c91477485c44ddfbb51827d470011e558dfd5c7309eb31bef19ec51"}, + {file = "fonttools-4.55.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:37dbb3fdc2ef7302d3199fb12468481cbebaee849e4b04bc55b77c24e3c49189"}, + {file = "fonttools-4.55.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5263d8e7ef3c0ae87fbce7f3ec2f546dc898d44a337e95695af2cd5ea21a967"}, + {file = "fonttools-4.55.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f307f6b5bf9e86891213b293e538d292cd1677e06d9faaa4bf9c086ad5f132f6"}, + {file = "fonttools-4.55.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f0a4b52238e7b54f998d6a56b46a2c56b59c74d4f8a6747fb9d4042190f37cd3"}, + {file = "fonttools-4.55.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3e569711464f777a5d4ef522e781dc33f8095ab5efd7548958b36079a9f2f88c"}, + {file = "fonttools-4.55.0-cp311-cp311-win32.whl", hash = "sha256:2b3ab90ec0f7b76c983950ac601b58949f47aca14c3f21eed858b38d7ec42b05"}, + {file = "fonttools-4.55.0-cp311-cp311-win_amd64.whl", hash = "sha256:aa046f6a63bb2ad521004b2769095d4c9480c02c1efa7d7796b37826508980b6"}, + {file = "fonttools-4.55.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:838d2d8870f84fc785528a692e724f2379d5abd3fc9dad4d32f91cf99b41e4a7"}, + {file = "fonttools-4.55.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f46b863d74bab7bb0d395f3b68d3f52a03444964e67ce5c43ce43a75efce9246"}, + {file = "fonttools-4.55.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33b52a9cfe4e658e21b1f669f7309b4067910321757fec53802ca8f6eae96a5a"}, + {file = "fonttools-4.55.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:732a9a63d6ea4a81b1b25a1f2e5e143761b40c2e1b79bb2b68e4893f45139a40"}, + {file = "fonttools-4.55.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7dd91ac3fcb4c491bb4763b820bcab6c41c784111c24172616f02f4bc227c17d"}, + {file = "fonttools-4.55.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1f0e115281a32ff532118aa851ef497a1b7cda617f4621c1cdf81ace3e36fb0c"}, + {file = "fonttools-4.55.0-cp312-cp312-win32.whl", hash = "sha256:6c99b5205844f48a05cb58d4a8110a44d3038c67ed1d79eb733c4953c628b0f6"}, + {file = "fonttools-4.55.0-cp312-cp312-win_amd64.whl", hash = "sha256:f8c8c76037d05652510ae45be1cd8fb5dd2fd9afec92a25374ac82255993d57c"}, + {file = "fonttools-4.55.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8118dc571921dc9e4b288d9cb423ceaf886d195a2e5329cc427df82bba872cd9"}, + {file = "fonttools-4.55.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01124f2ca6c29fad4132d930da69158d3f49b2350e4a779e1efbe0e82bd63f6c"}, + {file = "fonttools-4.55.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ffd58d2691f11f7c8438796e9f21c374828805d33e83ff4b76e4635633674c"}, + {file = "fonttools-4.55.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5435e5f1eb893c35c2bc2b9cd3c9596b0fcb0a59e7a14121562986dd4c47b8dd"}, + {file = "fonttools-4.55.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d12081729280c39d001edd0f4f06d696014c26e6e9a0a55488fabc37c28945e4"}, + {file = "fonttools-4.55.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a7ad1f1b98ab6cb927ab924a38a8649f1ffd7525c75fe5b594f5dab17af70e18"}, + {file = "fonttools-4.55.0-cp313-cp313-win32.whl", hash = "sha256:abe62987c37630dca69a104266277216de1023cf570c1643bb3a19a9509e7a1b"}, + {file = "fonttools-4.55.0-cp313-cp313-win_amd64.whl", hash = "sha256:2863555ba90b573e4201feaf87a7e71ca3b97c05aa4d63548a4b69ea16c9e998"}, + {file = "fonttools-4.55.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:00f7cf55ad58a57ba421b6a40945b85ac7cc73094fb4949c41171d3619a3a47e"}, + {file = "fonttools-4.55.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f27526042efd6f67bfb0cc2f1610fa20364396f8b1fc5edb9f45bb815fb090b2"}, + {file = "fonttools-4.55.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e67974326af6a8879dc2a4ec63ab2910a1c1a9680ccd63e4a690950fceddbe"}, + {file = "fonttools-4.55.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61dc0a13451143c5e987dec5254d9d428f3c2789a549a7cf4f815b63b310c1cc"}, + {file = "fonttools-4.55.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b2e526b325a903868c62155a6a7e24df53f6ce4c5c3160214d8fe1be2c41b478"}, + {file = "fonttools-4.55.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b7ef9068a1297714e6fefe5932c33b058aa1d45a2b8be32a4c6dee602ae22b5c"}, + {file = "fonttools-4.55.0-cp38-cp38-win32.whl", hash = "sha256:55718e8071be35dff098976bc249fc243b58efa263768c611be17fe55975d40a"}, + {file = "fonttools-4.55.0-cp38-cp38-win_amd64.whl", hash = "sha256:553bd4f8cc327f310c20158e345e8174c8eed49937fb047a8bda51daf2c353c8"}, + {file = "fonttools-4.55.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f901cef813f7c318b77d1c5c14cf7403bae5cb977cede023e22ba4316f0a8f6"}, + {file = "fonttools-4.55.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c9679fc0dd7e8a5351d321d8d29a498255e69387590a86b596a45659a39eb0d"}, + {file = "fonttools-4.55.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd2820a8b632f3307ebb0bf57948511c2208e34a4939cf978333bc0a3f11f838"}, + {file = "fonttools-4.55.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23bbbb49bec613a32ed1b43df0f2b172313cee690c2509f1af8fdedcf0a17438"}, + {file = "fonttools-4.55.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a656652e1f5d55b9728937a7e7d509b73d23109cddd4e89ee4f49bde03b736c6"}, + {file = "fonttools-4.55.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f50a1f455902208486fbca47ce33054208a4e437b38da49d6721ce2fef732fcf"}, + {file = "fonttools-4.55.0-cp39-cp39-win32.whl", hash = "sha256:161d1ac54c73d82a3cded44202d0218ab007fde8cf194a23d3dd83f7177a2f03"}, + {file = "fonttools-4.55.0-cp39-cp39-win_amd64.whl", hash = "sha256:ca7fd6987c68414fece41c96836e945e1f320cda56fc96ffdc16e54a44ec57a2"}, + {file = "fonttools-4.55.0-py3-none-any.whl", hash = "sha256:12db5888cd4dd3fcc9f0ee60c6edd3c7e1fd44b7dd0f31381ea03df68f8a153f"}, + {file = "fonttools-4.55.0.tar.gz", hash = "sha256:7636acc6ab733572d5e7eec922b254ead611f1cdad17be3f0be7418e8bfaca71"}, ] [package.extras] @@ -1620,13 +1607,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.22.0" +version = "2.23.0" description = "Google API client core library" optional = false python-versions = ">=3.7" files = [ - {file = "google_api_core-2.22.0-py3-none-any.whl", hash = "sha256:a6652b6bd51303902494998626653671703c420f6f4c88cfd3f50ed723e9d021"}, - {file = "google_api_core-2.22.0.tar.gz", hash = "sha256:26f8d76b96477db42b55fd02a33aae4a42ec8b86b98b94969b7333a2c828bf35"}, + {file = "google_api_core-2.23.0-py3-none-any.whl", hash = "sha256:c20100d4c4c41070cf365f1d8ddf5365915291b5eb11b83829fbd1c999b5122f"}, + {file = "google_api_core-2.23.0.tar.gz", hash = "sha256:2ceb087315e6af43f256704b871d99326b1f12a9d6ce99beaedec99ba26a0ace"}, ] [package.dependencies] @@ -1649,13 +1636,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.149.0" +version = "2.153.0" description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" files = [ - {file = "google_api_python_client-2.149.0-py2.py3-none-any.whl", hash = "sha256:1a5232e9cfed8c201799d9327e4d44dc7ea7daa3c6e1627fca41aa201539c0da"}, - {file = "google_api_python_client-2.149.0.tar.gz", hash = "sha256:b9d68c6b14ec72580d66001bd33c5816b78e2134b93ccc5cf8f624516b561750"}, + {file = "google_api_python_client-2.153.0-py2.py3-none-any.whl", hash = "sha256:6ff13bbfa92a57972e33ec3808e18309e5981b8ca1300e5da23bf2b4d6947384"}, + {file = "google_api_python_client-2.153.0.tar.gz", hash = "sha256:35cce8647f9c163fc04fb4d811fc91aae51954a2bdd74918decbe0e65d791dd2"}, ] [package.dependencies] @@ -1667,13 +1654,13 @@ uritemplate = ">=3.0.1,<5" [[package]] name = "google-auth" -version = "2.35.0" +version = "2.36.0" description = "Google Authentication Library" optional = false python-versions = ">=3.7" files = [ - {file = "google_auth-2.35.0-py2.py3-none-any.whl", hash = "sha256:25df55f327ef021de8be50bad0dfd4a916ad0de96da86cd05661c9297723ad3f"}, - {file = "google_auth-2.35.0.tar.gz", hash = "sha256:f4c64ed4e01e8e8b646ef34c018f8bf3338df0c8e37d8b3bba40e7f574a3278a"}, + {file = "google_auth-2.36.0-py2.py3-none-any.whl", hash = "sha256:51a15d47028b66fd36e5c64a82d2d57480075bccc7da37cde257fc94177a61fb"}, + {file = "google_auth-2.36.0.tar.gz", hash = "sha256:545e9618f2df0bcbb7dcbc45a546485b1212624716975a1ea5ae8149ce769ab1"}, ] [package.dependencies] @@ -1728,13 +1715,13 @@ dev = ["Pillow", "absl-py", "black", "ipython", "nose2", "pandas", "pytype", "py [[package]] name = "googleapis-common-protos" -version = "1.65.0" +version = "1.66.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" files = [ - {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"}, + {file = "googleapis_common_protos-1.66.0-py2.py3-none-any.whl", hash = "sha256:d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed"}, + {file = "googleapis_common_protos-1.66.0.tar.gz", hash = "sha256:c3e7b33d15fdca5374cc0a7346dd92ffa847425cc4ea941d970f13680052ec8c"}, ] [package.dependencies] @@ -1893,70 +1880,70 @@ test = ["objgraph", "psutil"] [[package]] name = "grpcio" -version = "1.67.1" +version = "1.68.0" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" files = [ - {file = "grpcio-1.67.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:8b0341d66a57f8a3119b77ab32207072be60c9bf79760fa609c5609f2deb1f3f"}, - {file = "grpcio-1.67.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:f5a27dddefe0e2357d3e617b9079b4bfdc91341a91565111a21ed6ebbc51b22d"}, - {file = "grpcio-1.67.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:43112046864317498a33bdc4797ae6a268c36345a910de9b9c17159d8346602f"}, - {file = "grpcio-1.67.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9b929f13677b10f63124c1a410994a401cdd85214ad83ab67cc077fc7e480f0"}, - {file = "grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7d1797a8a3845437d327145959a2c0c47c05947c9eef5ff1a4c80e499dcc6fa"}, - {file = "grpcio-1.67.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0489063974d1452436139501bf6b180f63d4977223ee87488fe36858c5725292"}, - {file = "grpcio-1.67.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9fd042de4a82e3e7aca44008ee2fb5da01b3e5adb316348c21980f7f58adc311"}, - {file = "grpcio-1.67.1-cp310-cp310-win32.whl", hash = "sha256:638354e698fd0c6c76b04540a850bf1db27b4d2515a19fcd5cf645c48d3eb1ed"}, - {file = "grpcio-1.67.1-cp310-cp310-win_amd64.whl", hash = "sha256:608d87d1bdabf9e2868b12338cd38a79969eaf920c89d698ead08f48de9c0f9e"}, - {file = "grpcio-1.67.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:7818c0454027ae3384235a65210bbf5464bd715450e30a3d40385453a85a70cb"}, - {file = "grpcio-1.67.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ea33986b70f83844cd00814cee4451055cd8cab36f00ac64a31f5bb09b31919e"}, - {file = "grpcio-1.67.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:c7a01337407dd89005527623a4a72c5c8e2894d22bead0895306b23c6695698f"}, - {file = "grpcio-1.67.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80b866f73224b0634f4312a4674c1be21b2b4afa73cb20953cbbb73a6b36c3cc"}, - {file = "grpcio-1.67.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fff78ba10d4250bfc07a01bd6254a6d87dc67f9627adece85c0b2ed754fa96"}, - {file = "grpcio-1.67.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8a23cbcc5bb11ea7dc6163078be36c065db68d915c24f5faa4f872c573bb400f"}, - {file = "grpcio-1.67.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1a65b503d008f066e994f34f456e0647e5ceb34cfcec5ad180b1b44020ad4970"}, - {file = "grpcio-1.67.1-cp311-cp311-win32.whl", hash = "sha256:e29ca27bec8e163dca0c98084040edec3bc49afd10f18b412f483cc68c712744"}, - {file = "grpcio-1.67.1-cp311-cp311-win_amd64.whl", hash = "sha256:786a5b18544622bfb1e25cc08402bd44ea83edfb04b93798d85dca4d1a0b5be5"}, - {file = "grpcio-1.67.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:267d1745894200e4c604958da5f856da6293f063327cb049a51fe67348e4f953"}, - {file = "grpcio-1.67.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:85f69fdc1d28ce7cff8de3f9c67db2b0ca9ba4449644488c1e0303c146135ddb"}, - {file = "grpcio-1.67.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f26b0b547eb8d00e195274cdfc63ce64c8fc2d3e2d00b12bf468ece41a0423a0"}, - {file = "grpcio-1.67.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4422581cdc628f77302270ff839a44f4c24fdc57887dc2a45b7e53d8fc2376af"}, - {file = "grpcio-1.67.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d7616d2ded471231c701489190379e0c311ee0a6c756f3c03e6a62b95a7146e"}, - {file = "grpcio-1.67.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8a00efecde9d6fcc3ab00c13f816313c040a28450e5e25739c24f432fc6d3c75"}, - {file = "grpcio-1.67.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:699e964923b70f3101393710793289e42845791ea07565654ada0969522d0a38"}, - {file = "grpcio-1.67.1-cp312-cp312-win32.whl", hash = "sha256:4e7b904484a634a0fff132958dabdb10d63e0927398273917da3ee103e8d1f78"}, - {file = "grpcio-1.67.1-cp312-cp312-win_amd64.whl", hash = "sha256:5721e66a594a6c4204458004852719b38f3d5522082be9061d6510b455c90afc"}, - {file = "grpcio-1.67.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:aa0162e56fd10a5547fac8774c4899fc3e18c1aa4a4759d0ce2cd00d3696ea6b"}, - {file = "grpcio-1.67.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:beee96c8c0b1a75d556fe57b92b58b4347c77a65781ee2ac749d550f2a365dc1"}, - {file = "grpcio-1.67.1-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:a93deda571a1bf94ec1f6fcda2872dad3ae538700d94dc283c672a3b508ba3af"}, - {file = "grpcio-1.67.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e6f255980afef598a9e64a24efce87b625e3e3c80a45162d111a461a9f92955"}, - {file = "grpcio-1.67.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e838cad2176ebd5d4a8bb03955138d6589ce9e2ce5d51c3ada34396dbd2dba8"}, - {file = "grpcio-1.67.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a6703916c43b1d468d0756c8077b12017a9fcb6a1ef13faf49e67d20d7ebda62"}, - {file = "grpcio-1.67.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:917e8d8994eed1d86b907ba2a61b9f0aef27a2155bca6cbb322430fc7135b7bb"}, - {file = "grpcio-1.67.1-cp313-cp313-win32.whl", hash = "sha256:e279330bef1744040db8fc432becc8a727b84f456ab62b744d3fdb83f327e121"}, - {file = "grpcio-1.67.1-cp313-cp313-win_amd64.whl", hash = "sha256:fa0c739ad8b1996bd24823950e3cb5152ae91fca1c09cc791190bf1627ffefba"}, - {file = "grpcio-1.67.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:178f5db771c4f9a9facb2ab37a434c46cb9be1a75e820f187ee3d1e7805c4f65"}, - {file = "grpcio-1.67.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0f3e49c738396e93b7ba9016e153eb09e0778e776df6090c1b8c91877cc1c426"}, - {file = "grpcio-1.67.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:24e8a26dbfc5274d7474c27759b54486b8de23c709d76695237515bc8b5baeab"}, - {file = "grpcio-1.67.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b6c16489326d79ead41689c4b84bc40d522c9a7617219f4ad94bc7f448c5085"}, - {file = "grpcio-1.67.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e6a4dcf5af7bbc36fd9f81c9f372e8ae580870a9e4b6eafe948cd334b81cf3"}, - {file = "grpcio-1.67.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:95b5f2b857856ed78d72da93cd7d09b6db8ef30102e5e7fe0961fe4d9f7d48e8"}, - {file = "grpcio-1.67.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b49359977c6ec9f5d0573ea4e0071ad278ef905aa74e420acc73fd28ce39e9ce"}, - {file = "grpcio-1.67.1-cp38-cp38-win32.whl", hash = "sha256:f5b76ff64aaac53fede0cc93abf57894ab2a7362986ba22243d06218b93efe46"}, - {file = "grpcio-1.67.1-cp38-cp38-win_amd64.whl", hash = "sha256:804c6457c3cd3ec04fe6006c739579b8d35c86ae3298ffca8de57b493524b771"}, - {file = "grpcio-1.67.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:a25bdea92b13ff4d7790962190bf6bf5c4639876e01c0f3dda70fc2769616335"}, - {file = "grpcio-1.67.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cdc491ae35a13535fd9196acb5afe1af37c8237df2e54427be3eecda3653127e"}, - {file = "grpcio-1.67.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:85f862069b86a305497e74d0dc43c02de3d1d184fc2c180993aa8aa86fbd19b8"}, - {file = "grpcio-1.67.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec74ef02010186185de82cc594058a3ccd8d86821842bbac9873fd4a2cf8be8d"}, - {file = "grpcio-1.67.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01f616a964e540638af5130469451cf580ba8c7329f45ca998ab66e0c7dcdb04"}, - {file = "grpcio-1.67.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:299b3d8c4f790c6bcca485f9963b4846dd92cf6f1b65d3697145d005c80f9fe8"}, - {file = "grpcio-1.67.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:60336bff760fbb47d7e86165408126f1dded184448e9a4c892189eb7c9d3f90f"}, - {file = "grpcio-1.67.1-cp39-cp39-win32.whl", hash = "sha256:5ed601c4c6008429e3d247ddb367fe8c7259c355757448d7c1ef7bd4a6739e8e"}, - {file = "grpcio-1.67.1-cp39-cp39-win_amd64.whl", hash = "sha256:5db70d32d6703b89912af16d6d45d78406374a8b8ef0d28140351dd0ec610e98"}, - {file = "grpcio-1.67.1.tar.gz", hash = "sha256:3dc2ed4cabea4dc14d5e708c2b426205956077cc5de419b4d4079315017e9732"}, + {file = "grpcio-1.68.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:619b5d0f29f4f5351440e9343224c3e19912c21aeda44e0c49d0d147a8d01544"}, + {file = "grpcio-1.68.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:a59f5822f9459bed098ffbceb2713abbf7c6fd13f2b9243461da5c338d0cd6c3"}, + {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:c03d89df516128febc5a7e760d675b478ba25802447624edf7aa13b1e7b11e2a"}, + {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44bcbebb24363d587472089b89e2ea0ab2e2b4df0e4856ba4c0b087c82412121"}, + {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79f81b7fbfb136247b70465bd836fa1733043fdee539cd6031cb499e9608a110"}, + {file = "grpcio-1.68.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:88fb2925789cfe6daa20900260ef0a1d0a61283dfb2d2fffe6194396a354c618"}, + {file = "grpcio-1.68.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:99f06232b5c9138593ae6f2e355054318717d32a9c09cdc5a2885540835067a1"}, + {file = "grpcio-1.68.0-cp310-cp310-win32.whl", hash = "sha256:a6213d2f7a22c3c30a479fb5e249b6b7e648e17f364598ff64d08a5136fe488b"}, + {file = "grpcio-1.68.0-cp310-cp310-win_amd64.whl", hash = "sha256:15327ab81131ef9b94cb9f45b5bd98803a179c7c61205c8c0ac9aff9d6c4e82a"}, + {file = "grpcio-1.68.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:3b2b559beb2d433129441783e5f42e3be40a9e1a89ec906efabf26591c5cd415"}, + {file = "grpcio-1.68.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e46541de8425a4d6829ac6c5d9b16c03c292105fe9ebf78cb1c31e8d242f9155"}, + {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:c1245651f3c9ea92a2db4f95d37b7597db6b246d5892bca6ee8c0e90d76fb73c"}, + {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f1931c7aa85be0fa6cea6af388e576f3bf6baee9e5d481c586980c774debcb4"}, + {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b0ff09c81e3aded7a183bc6473639b46b6caa9c1901d6f5e2cba24b95e59e30"}, + {file = "grpcio-1.68.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8c73f9fbbaee1a132487e31585aa83987ddf626426d703ebcb9a528cf231c9b1"}, + {file = "grpcio-1.68.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6b2f98165ea2790ea159393a2246b56f580d24d7da0d0342c18a085299c40a75"}, + {file = "grpcio-1.68.0-cp311-cp311-win32.whl", hash = "sha256:e1e7ed311afb351ff0d0e583a66fcb39675be112d61e7cfd6c8269884a98afbc"}, + {file = "grpcio-1.68.0-cp311-cp311-win_amd64.whl", hash = "sha256:e0d2f68eaa0a755edd9a47d40e50dba6df2bceda66960dee1218da81a2834d27"}, + {file = "grpcio-1.68.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:8af6137cc4ae8e421690d276e7627cfc726d4293f6607acf9ea7260bd8fc3d7d"}, + {file = "grpcio-1.68.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4028b8e9a3bff6f377698587d642e24bd221810c06579a18420a17688e421af7"}, + {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f60fa2adf281fd73ae3a50677572521edca34ba373a45b457b5ebe87c2d01e1d"}, + {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e18589e747c1e70b60fab6767ff99b2d0c359ea1db8a2cb524477f93cdbedf5b"}, + {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0d30f3fee9372796f54d3100b31ee70972eaadcc87314be369360248a3dcffe"}, + {file = "grpcio-1.68.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7e0a3e72c0e9a1acab77bef14a73a416630b7fd2cbd893c0a873edc47c42c8cd"}, + {file = "grpcio-1.68.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a831dcc343440969aaa812004685ed322cdb526cd197112d0db303b0da1e8659"}, + {file = "grpcio-1.68.0-cp312-cp312-win32.whl", hash = "sha256:5a180328e92b9a0050958ced34dddcb86fec5a8b332f5a229e353dafc16cd332"}, + {file = "grpcio-1.68.0-cp312-cp312-win_amd64.whl", hash = "sha256:2bddd04a790b69f7a7385f6a112f46ea0b34c4746f361ebafe9ca0be567c78e9"}, + {file = "grpcio-1.68.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:fc05759ffbd7875e0ff2bd877be1438dfe97c9312bbc558c8284a9afa1d0f40e"}, + {file = "grpcio-1.68.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:15fa1fe25d365a13bc6d52fcac0e3ee1f9baebdde2c9b3b2425f8a4979fccea1"}, + {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:32a9cb4686eb2e89d97022ecb9e1606d132f85c444354c17a7dbde4a455e4a3b"}, + {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dba037ff8d284c8e7ea9a510c8ae0f5b016004f13c3648f72411c464b67ff2fb"}, + {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0efbbd849867e0e569af09e165363ade75cf84f5229b2698d53cf22c7a4f9e21"}, + {file = "grpcio-1.68.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:4e300e6978df0b65cc2d100c54e097c10dfc7018b9bd890bbbf08022d47f766d"}, + {file = "grpcio-1.68.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:6f9c7ad1a23e1047f827385f4713b5b8c6c7d325705be1dd3e31fb00dcb2f665"}, + {file = "grpcio-1.68.0-cp313-cp313-win32.whl", hash = "sha256:3ac7f10850fd0487fcce169c3c55509101c3bde2a3b454869639df2176b60a03"}, + {file = "grpcio-1.68.0-cp313-cp313-win_amd64.whl", hash = "sha256:afbf45a62ba85a720491bfe9b2642f8761ff348006f5ef67e4622621f116b04a"}, + {file = "grpcio-1.68.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:f8f695d9576ce836eab27ba7401c60acaf9ef6cf2f70dfe5462055ba3df02cc3"}, + {file = "grpcio-1.68.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9fe1b141cda52f2ca73e17d2d3c6a9f3f3a0c255c216b50ce616e9dca7e3441d"}, + {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:4df81d78fd1646bf94ced4fb4cd0a7fe2e91608089c522ef17bc7db26e64effd"}, + {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46a2d74d4dd8993151c6cd585594c082abe74112c8e4175ddda4106f2ceb022f"}, + {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a17278d977746472698460c63abf333e1d806bd41f2224f90dbe9460101c9796"}, + {file = "grpcio-1.68.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:15377bce516b1c861c35e18eaa1c280692bf563264836cece693c0f169b48829"}, + {file = "grpcio-1.68.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cc5f0a4f5904b8c25729a0498886b797feb817d1fd3812554ffa39551112c161"}, + {file = "grpcio-1.68.0-cp38-cp38-win32.whl", hash = "sha256:def1a60a111d24376e4b753db39705adbe9483ef4ca4761f825639d884d5da78"}, + {file = "grpcio-1.68.0-cp38-cp38-win_amd64.whl", hash = "sha256:55d3b52fd41ec5772a953612db4e70ae741a6d6ed640c4c89a64f017a1ac02b5"}, + {file = "grpcio-1.68.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:0d230852ba97654453d290e98d6aa61cb48fa5fafb474fb4c4298d8721809354"}, + {file = "grpcio-1.68.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:50992f214264e207e07222703c17d9cfdcc2c46ed5a1ea86843d440148ebbe10"}, + {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:14331e5c27ed3545360464a139ed279aa09db088f6e9502e95ad4bfa852bb116"}, + {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f84890b205692ea813653ece4ac9afa2139eae136e419231b0eec7c39fdbe4c2"}, + {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0cf343c6f4f6aa44863e13ec9ddfe299e0be68f87d68e777328bff785897b05"}, + {file = "grpcio-1.68.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fd2c2d47969daa0e27eadaf15c13b5e92605c5e5953d23c06d0b5239a2f176d3"}, + {file = "grpcio-1.68.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:18668e36e7f4045820f069997834e94e8275910b1f03e078a6020bd464cb2363"}, + {file = "grpcio-1.68.0-cp39-cp39-win32.whl", hash = "sha256:2af76ab7c427aaa26aa9187c3e3c42f38d3771f91a20f99657d992afada2294a"}, + {file = "grpcio-1.68.0-cp39-cp39-win_amd64.whl", hash = "sha256:e694b5928b7b33ca2d3b4d5f9bf8b5888906f181daff6b406f4938f3a997a490"}, + {file = "grpcio-1.68.0.tar.gz", hash = "sha256:7e7483d39b4a4fddb9906671e9ea21aaad4f031cdfc349fec76bdfa1e404543a"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.67.1)"] +protobuf = ["grpcio-tools (>=1.68.0)"] [[package]] name = "grpcio-status" @@ -1997,13 +1984,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.6" +version = "1.0.7" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.6-py3-none-any.whl", hash = "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f"}, - {file = "httpcore-1.0.6.tar.gz", hash = "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f"}, + {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, + {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, ] [package.dependencies] @@ -2308,22 +2295,22 @@ arrow = ">=0.15.0" [[package]] name = "jedi" -version = "0.19.1" +version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, - {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, + {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, + {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, ] [package.dependencies] -parso = ">=0.8.3,<0.9.0" +parso = ">=0.8.4,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] [[package]] name = "jieba3k" @@ -2354,84 +2341,84 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jiter" -version = "0.6.1" +version = "0.7.1" description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" files = [ - {file = "jiter-0.6.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d08510593cb57296851080018006dfc394070178d238b767b1879dc1013b106c"}, - {file = "jiter-0.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adef59d5e2394ebbad13b7ed5e0306cceb1df92e2de688824232a91588e77aa7"}, - {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3e02f7a27f2bcc15b7d455c9df05df8ffffcc596a2a541eeda9a3110326e7a3"}, - {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed69a7971d67b08f152c17c638f0e8c2aa207e9dd3a5fcd3cba294d39b5a8d2d"}, - {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2019d966e98f7c6df24b3b8363998575f47d26471bfb14aade37630fae836a1"}, - {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36c0b51a285b68311e207a76c385650322734c8717d16c2eb8af75c9d69506e7"}, - {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:220e0963b4fb507c525c8f58cde3da6b1be0bfddb7ffd6798fb8f2531226cdb1"}, - {file = "jiter-0.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa25c7a9bf7875a141182b9c95aed487add635da01942ef7ca726e42a0c09058"}, - {file = "jiter-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e90552109ca8ccd07f47ca99c8a1509ced93920d271bb81780a973279974c5ab"}, - {file = "jiter-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:67723a011964971864e0b484b0ecfee6a14de1533cff7ffd71189e92103b38a8"}, - {file = "jiter-0.6.1-cp310-none-win32.whl", hash = "sha256:33af2b7d2bf310fdfec2da0177eab2fedab8679d1538d5b86a633ebfbbac4edd"}, - {file = "jiter-0.6.1-cp310-none-win_amd64.whl", hash = "sha256:7cea41c4c673353799906d940eee8f2d8fd1d9561d734aa921ae0f75cb9732f4"}, - {file = "jiter-0.6.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b03c24e7da7e75b170c7b2b172d9c5e463aa4b5c95696a368d52c295b3f6847f"}, - {file = "jiter-0.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:47fee1be677b25d0ef79d687e238dc6ac91a8e553e1a68d0839f38c69e0ee491"}, - {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0d2f6e01a8a0fb0eab6d0e469058dab2be46ff3139ed2d1543475b5a1d8e7"}, - {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b809e39e342c346df454b29bfcc7bca3d957f5d7b60e33dae42b0e5ec13e027"}, - {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e9ac7c2f092f231f5620bef23ce2e530bd218fc046098747cc390b21b8738a7a"}, - {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e51a2d80d5fe0ffb10ed2c82b6004458be4a3f2b9c7d09ed85baa2fbf033f54b"}, - {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3343d4706a2b7140e8bd49b6c8b0a82abf9194b3f0f5925a78fc69359f8fc33c"}, - {file = "jiter-0.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82521000d18c71e41c96960cb36e915a357bc83d63a8bed63154b89d95d05ad1"}, - {file = "jiter-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3c843e7c1633470708a3987e8ce617ee2979ee18542d6eb25ae92861af3f1d62"}, - {file = "jiter-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a2e861658c3fe849efc39b06ebb98d042e4a4c51a8d7d1c3ddc3b1ea091d0784"}, - {file = "jiter-0.6.1-cp311-none-win32.whl", hash = "sha256:7d72fc86474862c9c6d1f87b921b70c362f2b7e8b2e3c798bb7d58e419a6bc0f"}, - {file = "jiter-0.6.1-cp311-none-win_amd64.whl", hash = "sha256:3e36a320634f33a07794bb15b8da995dccb94f944d298c8cfe2bd99b1b8a574a"}, - {file = "jiter-0.6.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1fad93654d5a7dcce0809aff66e883c98e2618b86656aeb2129db2cd6f26f867"}, - {file = "jiter-0.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4e6e340e8cd92edab7f6a3a904dbbc8137e7f4b347c49a27da9814015cc0420c"}, - {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:691352e5653af84ed71763c3c427cff05e4d658c508172e01e9c956dfe004aba"}, - {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:defee3949313c1f5b55e18be45089970cdb936eb2a0063f5020c4185db1b63c9"}, - {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26d2bdd5da097e624081c6b5d416d3ee73e5b13f1703bcdadbb1881f0caa1933"}, - {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18aa9d1626b61c0734b973ed7088f8a3d690d0b7f5384a5270cd04f4d9f26c86"}, - {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a3567c8228afa5ddcce950631c6b17397ed178003dc9ee7e567c4c4dcae9fa0"}, - {file = "jiter-0.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e5c0507131c922defe3f04c527d6838932fcdfd69facebafd7d3574fa3395314"}, - {file = "jiter-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:540fcb224d7dc1bcf82f90f2ffb652df96f2851c031adca3c8741cb91877143b"}, - {file = "jiter-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e7b75436d4fa2032b2530ad989e4cb0ca74c655975e3ff49f91a1a3d7f4e1df2"}, - {file = "jiter-0.6.1-cp312-none-win32.whl", hash = "sha256:883d2ced7c21bf06874fdeecab15014c1c6d82216765ca6deef08e335fa719e0"}, - {file = "jiter-0.6.1-cp312-none-win_amd64.whl", hash = "sha256:91e63273563401aadc6c52cca64a7921c50b29372441adc104127b910e98a5b6"}, - {file = "jiter-0.6.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:852508a54fe3228432e56019da8b69208ea622a3069458252f725d634e955b31"}, - {file = "jiter-0.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f491cc69ff44e5a1e8bc6bf2b94c1f98d179e1aaf4a554493c171a5b2316b701"}, - {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc56c8f0b2a28ad4d8047f3ae62d25d0e9ae01b99940ec0283263a04724de1f3"}, - {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51b58f7a0d9e084a43b28b23da2b09fc5e8df6aa2b6a27de43f991293cab85fd"}, - {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f79ce15099154c90ef900d69c6b4c686b64dfe23b0114e0971f2fecd306ec6c"}, - {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:03a025b52009f47e53ea619175d17e4ded7c035c6fbd44935cb3ada11e1fd592"}, - {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c74a8d93718137c021d9295248a87c2f9fdc0dcafead12d2930bc459ad40f885"}, - {file = "jiter-0.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40b03b75f903975f68199fc4ec73d546150919cb7e534f3b51e727c4d6ccca5a"}, - {file = "jiter-0.6.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:825651a3f04cf92a661d22cad61fc913400e33aa89b3e3ad9a6aa9dc8a1f5a71"}, - {file = "jiter-0.6.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:928bf25eb69ddb292ab8177fe69d3fbf76c7feab5fce1c09265a7dccf25d3991"}, - {file = "jiter-0.6.1-cp313-none-win32.whl", hash = "sha256:352cd24121e80d3d053fab1cc9806258cad27c53cad99b7a3cac57cf934b12e4"}, - {file = "jiter-0.6.1-cp313-none-win_amd64.whl", hash = "sha256:be7503dd6f4bf02c2a9bacb5cc9335bc59132e7eee9d3e931b13d76fd80d7fda"}, - {file = "jiter-0.6.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:31d8e00e1fb4c277df8ab6f31a671f509ebc791a80e5c61fdc6bc8696aaa297c"}, - {file = "jiter-0.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:77c296d65003cd7ee5d7b0965f6acbe6cffaf9d1fa420ea751f60ef24e85fed5"}, - {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeeb0c0325ef96c12a48ea7e23e2e86fe4838e6e0a995f464cf4c79fa791ceeb"}, - {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a31c6fcbe7d6c25d6f1cc6bb1cba576251d32795d09c09961174fe461a1fb5bd"}, - {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59e2b37f3b9401fc9e619f4d4badcab2e8643a721838bcf695c2318a0475ae42"}, - {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bae5ae4853cb9644144e9d0755854ce5108d470d31541d83f70ca7ecdc2d1637"}, - {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9df588e9c830b72d8db1dd7d0175af6706b0904f682ea9b1ca8b46028e54d6e9"}, - {file = "jiter-0.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15f8395e835cf561c85c1adee72d899abf2733d9df72e9798e6d667c9b5c1f30"}, - {file = "jiter-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a99d4e0b5fc3b05ea732d67eb2092fe894e95a90e6e413f2ea91387e228a307"}, - {file = "jiter-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a311df1fa6be0ccd64c12abcd85458383d96e542531bafbfc0a16ff6feda588f"}, - {file = "jiter-0.6.1-cp38-none-win32.whl", hash = "sha256:81116a6c272a11347b199f0e16b6bd63f4c9d9b52bc108991397dd80d3c78aba"}, - {file = "jiter-0.6.1-cp38-none-win_amd64.whl", hash = "sha256:13f9084e3e871a7c0b6e710db54444088b1dd9fbefa54d449b630d5e73bb95d0"}, - {file = "jiter-0.6.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f1c53615fcfec3b11527c08d19cff6bc870da567ce4e57676c059a3102d3a082"}, - {file = "jiter-0.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f791b6a4da23238c17a81f44f5b55d08a420c5692c1fda84e301a4b036744eb1"}, - {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c97e90fec2da1d5f68ef121444c2c4fa72eabf3240829ad95cf6bbeca42a301"}, - {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3cbc1a66b4e41511209e97a2866898733c0110b7245791ac604117b7fb3fedb7"}, - {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4e85f9e12cd8418ab10e1fcf0e335ae5bb3da26c4d13a0fd9e6a17a674783b6"}, - {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08be33db6dcc374c9cc19d3633af5e47961a7b10d4c61710bd39e48d52a35824"}, - {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:677be9550004f5e010d673d3b2a2b815a8ea07a71484a57d3f85dde7f14cf132"}, - {file = "jiter-0.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e8bd065be46c2eecc328e419d6557bbc37844c88bb07b7a8d2d6c91c7c4dedc9"}, - {file = "jiter-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bd95375ce3609ec079a97c5d165afdd25693302c071ca60c7ae1cf826eb32022"}, - {file = "jiter-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db459ed22d0208940d87f614e1f0ea5a946d29a3cfef71f7e1aab59b6c6b2afb"}, - {file = "jiter-0.6.1-cp39-none-win32.whl", hash = "sha256:d71c962f0971347bd552940ab96aa42ceefcd51b88c4ced8a27398182efa8d80"}, - {file = "jiter-0.6.1-cp39-none-win_amd64.whl", hash = "sha256:d465db62d2d10b489b7e7a33027c4ae3a64374425d757e963f86df5b5f2e7fc5"}, - {file = "jiter-0.6.1.tar.gz", hash = "sha256:e19cd21221fc139fb032e4112986656cb2739e9fe6d84c13956ab30ccc7d4449"}, + {file = "jiter-0.7.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:262e96d06696b673fad6f257e6a0abb6e873dc22818ca0e0600f4a1189eb334f"}, + {file = "jiter-0.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be6de02939aac5be97eb437f45cfd279b1dc9de358b13ea6e040e63a3221c40d"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935f10b802bc1ce2b2f61843e498c7720aa7f4e4bb7797aa8121eab017293c3d"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9cd3cccccabf5064e4bb3099c87bf67db94f805c1e62d1aefd2b7476e90e0ee2"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4aa919ebfc5f7b027cc368fe3964c0015e1963b92e1db382419dadb098a05192"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ae2d01e82c94491ce4d6f461a837f63b6c4e6dd5bb082553a70c509034ff3d4"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f9568cd66dbbdab67ae1b4c99f3f7da1228c5682d65913e3f5f95586b3cb9a9"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9ecbf4e20ec2c26512736284dc1a3f8ed79b6ca7188e3b99032757ad48db97dc"}, + {file = "jiter-0.7.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b1a0508fddc70ce00b872e463b387d49308ef02b0787992ca471c8d4ba1c0fa1"}, + {file = "jiter-0.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f84c9996664c460f24213ff1e5881530abd8fafd82058d39af3682d5fd2d6316"}, + {file = "jiter-0.7.1-cp310-none-win32.whl", hash = "sha256:c915e1a1960976ba4dfe06551ea87063b2d5b4d30759012210099e712a414d9f"}, + {file = "jiter-0.7.1-cp310-none-win_amd64.whl", hash = "sha256:75bf3b7fdc5c0faa6ffffcf8028a1f974d126bac86d96490d1b51b3210aa0f3f"}, + {file = "jiter-0.7.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ad04a23a91f3d10d69d6c87a5f4471b61c2c5cd6e112e85136594a02043f462c"}, + {file = "jiter-0.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e47a554de88dff701226bb5722b7f1b6bccd0b98f1748459b7e56acac2707a5"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e44fff69c814a2e96a20b4ecee3e2365e9b15cf5fe4e00869d18396daa91dab"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df0a1d05081541b45743c965436f8b5a1048d6fd726e4a030113a2699a6046ea"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f22cf8f236a645cb6d8ffe2a64edb5d2b66fb148bf7c75eea0cb36d17014a7bc"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da8589f50b728ea4bf22e0632eefa125c8aa9c38ed202a5ee6ca371f05eeb3ff"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f20de711224f2ca2dbb166a8d512f6ff48c9c38cc06b51f796520eb4722cc2ce"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8a9803396032117b85ec8cbf008a54590644a062fedd0425cbdb95e4b2b60479"}, + {file = "jiter-0.7.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3d8bae77c82741032e9d89a4026479061aba6e646de3bf5f2fc1ae2bbd9d06e0"}, + {file = "jiter-0.7.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3dc9939e576bbc68c813fc82f6620353ed68c194c7bcf3d58dc822591ec12490"}, + {file = "jiter-0.7.1-cp311-none-win32.whl", hash = "sha256:f7605d24cd6fab156ec89e7924578e21604feee9c4f1e9da34d8b67f63e54892"}, + {file = "jiter-0.7.1-cp311-none-win_amd64.whl", hash = "sha256:f3ea649e7751a1a29ea5ecc03c4ada0a833846c59c6da75d747899f9b48b7282"}, + {file = "jiter-0.7.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ad36a1155cbd92e7a084a568f7dc6023497df781adf2390c345dd77a120905ca"}, + {file = "jiter-0.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7ba52e6aaed2dc5c81a3d9b5e4ab95b039c4592c66ac973879ba57c3506492bb"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b7de0b6f6728b678540c7927587e23f715284596724be203af952418acb8a2d"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9463b62bd53c2fb85529c700c6a3beb2ee54fde8bef714b150601616dcb184a6"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:627164ec01d28af56e1f549da84caf0fe06da3880ebc7b7ee1ca15df106ae172"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25d0e5bf64e368b0aa9e0a559c3ab2f9b67e35fe7269e8a0d81f48bbd10e8963"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c244261306f08f8008b3087059601997016549cb8bb23cf4317a4827f07b7d74"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7ded4e4b75b68b843b7cea5cd7c55f738c20e1394c68c2cb10adb655526c5f1b"}, + {file = "jiter-0.7.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:80dae4f1889b9d09e5f4de6b58c490d9c8ce7730e35e0b8643ab62b1538f095c"}, + {file = "jiter-0.7.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5970cf8ec943b51bce7f4b98d2e1ed3ada170c2a789e2db3cb484486591a176a"}, + {file = "jiter-0.7.1-cp312-none-win32.whl", hash = "sha256:701d90220d6ecb3125d46853c8ca8a5bc158de8c49af60fd706475a49fee157e"}, + {file = "jiter-0.7.1-cp312-none-win_amd64.whl", hash = "sha256:7824c3ecf9ecf3321c37f4e4d4411aad49c666ee5bc2a937071bdd80917e4533"}, + {file = "jiter-0.7.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:097676a37778ba3c80cb53f34abd6943ceb0848263c21bf423ae98b090f6c6ba"}, + {file = "jiter-0.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3298af506d4271257c0a8f48668b0f47048d69351675dd8500f22420d4eec378"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12fd88cfe6067e2199964839c19bd2b422ca3fd792949b8f44bb8a4e7d21946a"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dacca921efcd21939123c8ea8883a54b9fa7f6545c8019ffcf4f762985b6d0c8"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de3674a5fe1f6713a746d25ad9c32cd32fadc824e64b9d6159b3b34fd9134143"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65df9dbae6d67e0788a05b4bad5706ad40f6f911e0137eb416b9eead6ba6f044"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ba9a358d59a0a55cccaa4957e6ae10b1a25ffdabda863c0343c51817610501d"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:576eb0f0c6207e9ede2b11ec01d9c2182973986514f9c60bc3b3b5d5798c8f50"}, + {file = "jiter-0.7.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:e550e29cdf3577d2c970a18f3959e6b8646fd60ef1b0507e5947dc73703b5627"}, + {file = "jiter-0.7.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:81d968dbf3ce0db2e0e4dec6b0a0d5d94f846ee84caf779b07cab49f5325ae43"}, + {file = "jiter-0.7.1-cp313-none-win32.whl", hash = "sha256:f892e547e6e79a1506eb571a676cf2f480a4533675f834e9ae98de84f9b941ac"}, + {file = "jiter-0.7.1-cp313-none-win_amd64.whl", hash = "sha256:0302f0940b1455b2a7fb0409b8d5b31183db70d2b07fd177906d83bf941385d1"}, + {file = "jiter-0.7.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c65a3ce72b679958b79d556473f192a4dfc5895e8cc1030c9f4e434690906076"}, + {file = "jiter-0.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e80052d3db39f9bb8eb86d207a1be3d9ecee5e05fdec31380817f9609ad38e60"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70a497859c4f3f7acd71c8bd89a6f9cf753ebacacf5e3e799138b8e1843084e3"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c1288bc22b9e36854a0536ba83666c3b1fb066b811019d7b682c9cf0269cdf9f"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b096ca72dd38ef35675e1d3b01785874315182243ef7aea9752cb62266ad516f"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8dbbd52c50b605af13dbee1a08373c520e6fcc6b5d32f17738875847fea4e2cd"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af29c5c6eb2517e71ffa15c7ae9509fa5e833ec2a99319ac88cc271eca865519"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f114a4df1e40c03c0efbf974b376ed57756a1141eb27d04baee0680c5af3d424"}, + {file = "jiter-0.7.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:191fbaee7cf46a9dd9b817547bf556facde50f83199d07fc48ebeff4082f9df4"}, + {file = "jiter-0.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0e2b445e5ee627fb4ee6bbceeb486251e60a0c881a8e12398dfdff47c56f0723"}, + {file = "jiter-0.7.1-cp38-none-win32.whl", hash = "sha256:47ac4c3cf8135c83e64755b7276339b26cd3c7ddadf9e67306ace4832b283edf"}, + {file = "jiter-0.7.1-cp38-none-win_amd64.whl", hash = "sha256:60b49c245cd90cde4794f5c30f123ee06ccf42fb8730a019a2870cd005653ebd"}, + {file = "jiter-0.7.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8f212eeacc7203256f526f550d105d8efa24605828382cd7d296b703181ff11d"}, + {file = "jiter-0.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d9e247079d88c00e75e297e6cb3a18a039ebcd79fefc43be9ba4eb7fb43eb726"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0aacaa56360139c53dcf352992b0331f4057a0373bbffd43f64ba0c32d2d155"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc1b55314ca97dbb6c48d9144323896e9c1a25d41c65bcb9550b3e0c270ca560"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f281aae41b47e90deb70e7386558e877a8e62e1693e0086f37d015fa1c102289"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:93c20d2730a84d43f7c0b6fb2579dc54335db742a59cf9776d0b80e99d587382"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e81ccccd8069110e150613496deafa10da2f6ff322a707cbec2b0d52a87b9671"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a7d5e85766eff4c9be481d77e2226b4c259999cb6862ccac5ef6621d3c8dcce"}, + {file = "jiter-0.7.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f52ce5799df5b6975439ecb16b1e879d7655e1685b6e3758c9b1b97696313bfb"}, + {file = "jiter-0.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e0c91a0304373fdf97d56f88356a010bba442e6d995eb7773cbe32885b71cdd8"}, + {file = "jiter-0.7.1-cp39-none-win32.whl", hash = "sha256:5c08adf93e41ce2755970e8aa95262298afe2bf58897fb9653c47cd93c3c6cdc"}, + {file = "jiter-0.7.1-cp39-none-win_amd64.whl", hash = "sha256:6592f4067c74176e5f369228fb2995ed01400c9e8e1225fb73417183a5e635f0"}, + {file = "jiter-0.7.1.tar.gz", hash = "sha256:448cf4f74f7363c34cdef26214da527e8eeffd88ba06d0b80b485ad0667baf5d"}, ] [[package]] @@ -2458,15 +2445,18 @@ files = [ [[package]] name = "json5" -version = "0.9.25" +version = "0.9.28" description = "A Python implementation of the JSON5 data format." optional = false -python-versions = ">=3.8" +python-versions = ">=3.8.0" files = [ - {file = "json5-0.9.25-py3-none-any.whl", hash = "sha256:34ed7d834b1341a86987ed52f3f76cd8ee184394906b6e22a1e0deb9ab294e8f"}, - {file = "json5-0.9.25.tar.gz", hash = "sha256:548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae"}, + {file = "json5-0.9.28-py3-none-any.whl", hash = "sha256:29c56f1accdd8bc2e037321237662034a7e07921e2b7223281a5ce2c46f0c4df"}, + {file = "json5-0.9.28.tar.gz", hash = "sha256:1f82f36e615bc5b42f1bbd49dbc94b12563c56408c6ffa06414ea310890e9a6e"}, ] +[package.extras] +dev = ["build (==1.2.2.post1)", "coverage (==7.5.3)", "mypy (==1.13.0)", "pip (==24.3.1)", "pylint (==3.2.3)", "ruff (==0.7.3)", "twine (==5.1.1)", "uv (==0.5.1)"] + [[package]] name = "jsonpointer" version = "3.0.0" @@ -2702,13 +2692,13 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.2.5" +version = "4.3.1" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.2.5-py3-none-any.whl", hash = "sha256:73b6e0775d41a9fee7ee756c80f58a6bed4040869ccc21411dc559818874d321"}, - {file = "jupyterlab-4.2.5.tar.gz", hash = "sha256:ae7f3a1b8cb88b4f55009ce79fa7c06f99d70cd63601ee4aa91815d054f46f75"}, + {file = "jupyterlab-4.3.1-py3-none-any.whl", hash = "sha256:2d9a1c305bc748e277819a17a5d5e22452e533e835f4237b2f30f3b0e491e01f"}, + {file = "jupyterlab-4.3.1.tar.gz", hash = "sha256:a4a338327556443521731d82f2a6ccf926df478914ca029616621704d47c3c65"}, ] [package.dependencies] @@ -2727,9 +2717,9 @@ tornado = ">=6.2.0" traitlets = "*" [package.extras] -dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.3.5)"] -docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"] -docs-screenshots = ["altair (==5.3.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.2)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.1.post2)", "matplotlib (==3.8.3)", "nbconvert (>=7.0.0)", "pandas (==2.2.1)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.6.9)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.1.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.4.1)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.2.post3)", "matplotlib (==3.9.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.14.1)", "vega-datasets (==0.9.0)"] test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] @@ -2905,13 +2895,13 @@ files = [ [[package]] name = "langcodes" -version = "3.4.1" +version = "3.5.0" description = "Tools for labeling human languages with IETF language tags" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "langcodes-3.4.1-py3-none-any.whl", hash = "sha256:68f686fc3d358f222674ecf697ddcee3ace3c2fe325083ecad2543fd28a20e77"}, - {file = "langcodes-3.4.1.tar.gz", hash = "sha256:a24879fed238013ac3af2424b9d1124e38b4a38b2044fd297c8ff38e5912e718"}, + {file = "langcodes-3.5.0-py3-none-any.whl", hash = "sha256:853c69d1a35e0e13da2f427bb68fb2fa4a8f4fb899e0c62ad8df8d073dcfed33"}, + {file = "langcodes-3.5.0.tar.gz", hash = "sha256:1eef8168d07e51e131a2497ffecad4b663f6208e7c3ae3b8dc15c51734a6f801"}, ] [package.dependencies] @@ -2962,17 +2952,17 @@ openai = ["openai (>=0.27.8)"] [[package]] name = "language-data" -version = "1.2.0" +version = "1.3.0" description = "Supplementary data about languages used by the langcodes module" optional = false python-versions = "*" files = [ - {file = "language_data-1.2.0-py3-none-any.whl", hash = "sha256:77d5cab917f91ee0b2f1aa7018443e911cf8985ef734ca2ba3940770f6a3816b"}, - {file = "language_data-1.2.0.tar.gz", hash = "sha256:82a86050bbd677bfde87d97885b17566cfe75dad3ac4f5ce44b52c28f752e773"}, + {file = "language_data-1.3.0-py3-none-any.whl", hash = "sha256:e2ee943551b5ae5f89cd0e801d1fc3835bb0ef5b7e9c3a4e8e17b2b214548fbf"}, + {file = "language_data-1.3.0.tar.gz", hash = "sha256:7600ef8aa39555145d06c89f0c324bf7dab834ea0b0a439d8243762e3ebad7ec"}, ] [package.dependencies] -marisa-trie = ">=0.7.7" +marisa-trie = ">=1.1.0" [package.extras] build = ["build", "twine"] @@ -2980,13 +2970,13 @@ test = ["pytest", "pytest-cov"] [[package]] name = "llama-cloud" -version = "0.1.4" +version = "0.1.5" description = "" optional = false python-versions = "<4,>=3.8" files = [ - {file = "llama_cloud-0.1.4-py3-none-any.whl", hash = "sha256:cfca6c4e0a87468b922d732f0f313a2ecd3a8e0bf74382ee80829ce49dcbc5e0"}, - {file = "llama_cloud-0.1.4.tar.gz", hash = "sha256:6f0155979bd96160951cb812c48836f1face037bc79ccfd8d185b18ef4c9faf8"}, + {file = "llama_cloud-0.1.5-py3-none-any.whl", hash = "sha256:15605022520d04bd6ef6a46c0cbde833f301d652286d34fca02b4c44e2a7a2aa"}, + {file = "llama_cloud-0.1.5.tar.gz", hash = "sha256:8ce1db36754a6a46c8511561dbc040a2e89ba4ca1cf4edfb6ce382a5240f6cb6"}, ] [package.dependencies] @@ -2995,19 +2985,19 @@ pydantic = ">=1.10" [[package]] name = "llama-index" -version = "0.11.20" +version = "0.11.22" description = "Interface between LLMs and your data" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "llama_index-0.11.20-py3-none-any.whl", hash = "sha256:fc9e5e47e6da3610bc3b788d208bb782c03a342fd71e3b22b37abc83ecebe46e"}, - {file = "llama_index-0.11.20.tar.gz", hash = "sha256:5e8e3fcb5af5b4e4525498b075ff0a54160b00bf0fc0b83801fc7faf1c8a8c1d"}, + {file = "llama_index-0.11.22-py3-none-any.whl", hash = "sha256:bda98d925dfbab4b76c07cc61b59bb5920e15e685efd9fbf3a0cd33f1f465f10"}, + {file = "llama_index-0.11.22.tar.gz", hash = "sha256:8d8a7838a7fcc733fc7a262ef3709df001c3021cb42843c8e9da8d244e5355e1"}, ] [package.dependencies] llama-index-agent-openai = ">=0.3.4,<0.4.0" llama-index-cli = ">=0.3.1,<0.4.0" -llama-index-core = ">=0.11.20,<0.12.0" +llama-index-core = ">=0.11.22,<0.12.0" llama-index-embeddings-openai = ">=0.2.4,<0.3.0" llama-index-indices-managed-llama-cloud = ">=0.3.0" llama-index-legacy = ">=0.9.48,<0.10.0" @@ -3053,13 +3043,13 @@ llama-index-llms-openai = ">=0.2.0,<0.3.0" [[package]] name = "llama-index-core" -version = "0.11.20" +version = "0.11.23" description = "Interface between LLMs and your data" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "llama_index_core-0.11.20-py3-none-any.whl", hash = "sha256:e84daf45e90e4b5d9e135baf40ab9853a1c3169a1076af6d58739d098e70adb1"}, - {file = "llama_index_core-0.11.20.tar.gz", hash = "sha256:6b5eaaf4be5030808b9ba953e8f7aead7ba495b8e72ba0a81dfc7dda96be416f"}, + {file = "llama_index_core-0.11.23-py3-none-any.whl", hash = "sha256:25a0cb4a055bfb348655ca4acd1b475529bd8537a7b81874ef14ed13f56e06c1"}, + {file = "llama_index_core-0.11.23.tar.gz", hash = "sha256:e150859696a0eae169fe19323f46e9a31af2c12c3182012e4d0353ea8eb06d24"}, ] [package.dependencies] @@ -3067,6 +3057,7 @@ aiohttp = ">=3.8.6,<4.0.0" dataclasses-json = "*" deprecated = ">=1.2.9.3" dirtyjson = ">=1.0.8,<2.0.0" +filetype = ">=1.2.0,<2.0.0" fsspec = ">=2023.5.0" httpx = "*" nest-asyncio = ">=1.5.8,<2.0.0" @@ -3102,13 +3093,13 @@ llama-index-core = ">=0.11.0,<0.12.0" [[package]] name = "llama-index-embeddings-gemini" -version = "0.2.1" +version = "0.2.2" description = "llama-index embeddings gemini integration" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "llama_index_embeddings_gemini-0.2.1-py3-none-any.whl", hash = "sha256:7b58650d1d0ccce1c316d60b3beb446ec8bdfa9cc4b280652f6fcd14bbb68d98"}, - {file = "llama_index_embeddings_gemini-0.2.1.tar.gz", hash = "sha256:4c0ddd9b5f8d6742a6f4b8bd72cc339b97eeb156174d1a80f56dd4e0e813f762"}, + {file = "llama_index_embeddings_gemini-0.2.2-py3-none-any.whl", hash = "sha256:ace3a93e2938e400d5138319dcd2dfb8f0f979aaae0c1e2b6c2981776e416ae3"}, + {file = "llama_index_embeddings_gemini-0.2.2.tar.gz", hash = "sha256:9555b5dad583a8d416fa68a3c5c17df1a3ae370d34eb14ddbf40a6fb26781f4a"}, ] [package.dependencies] @@ -3132,28 +3123,28 @@ openai = ">=1.1.0" [[package]] name = "llama-index-indices-managed-llama-cloud" -version = "0.4.0" +version = "0.6.0" description = "llama-index indices llama-cloud integration" optional = false -python-versions = "<4.0,>=3.8.1" +python-versions = "<4.0,>=3.9" files = [ - {file = "llama_index_indices_managed_llama_cloud-0.4.0-py3-none-any.whl", hash = "sha256:c2c54821f1bf17a7810e6c013fbe7ddfef4154b7e5b100f7bf8673098f8004e4"}, - {file = "llama_index_indices_managed_llama_cloud-0.4.0.tar.gz", hash = "sha256:fbebff7876a219b6ab96892ae7c432a9299195fab8f67d4a4a0ebf6da210b242"}, + {file = "llama_index_indices_managed_llama_cloud-0.6.0-py3-none-any.whl", hash = "sha256:18a3bbb386c4fbda8883cf40339bde402637e4cd5e06bcf3870d8c174b9baa3a"}, + {file = "llama_index_indices_managed_llama_cloud-0.6.0.tar.gz", hash = "sha256:fe32aecb87ffd81eb824fc64509cc991c3cde574455e53e73a4dbe30961c4f21"}, ] [package.dependencies] -llama-cloud = ">=0.0.11" +llama-cloud = ">=0.1.5" llama-index-core = ">=0.11.13.post1,<0.12.0" [[package]] name = "llama-index-legacy" -version = "0.9.48.post3" +version = "0.9.48.post4" description = "Interface between LLMs and your data" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "llama_index_legacy-0.9.48.post3-py3-none-any.whl", hash = "sha256:04221320d84d96ba9ee3e21e5055bd8527cbd769e8f1c60cf0368ed907e012a2"}, - {file = "llama_index_legacy-0.9.48.post3.tar.gz", hash = "sha256:f6969f1085efb0abebd6367e46f3512020f3f6b9c086f458a519830dd61e8206"}, + {file = "llama_index_legacy-0.9.48.post4-py3-none-any.whl", hash = "sha256:4b817d7c343fb5f7f00c4410eff519f320013b8d5f24c4fedcf270c471f92038"}, + {file = "llama_index_legacy-0.9.48.post4.tar.gz", hash = "sha256:f8a9764e7e134a52bfef5e53d2d62561bfc01fc09874c51cc001df6f5302ae30"}, ] [package.dependencies] @@ -3201,13 +3192,13 @@ llama-index-core = ">=0.11.0,<0.12.0" [[package]] name = "llama-index-llms-bedrock" -version = "0.2.4" +version = "0.2.6" description = "llama-index llms bedrock integration" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "llama_index_llms_bedrock-0.2.4-py3-none-any.whl", hash = "sha256:29e0c494a32b67c3be1267de1efaeb25127079abb199616a4e199eaf2e6511fc"}, - {file = "llama_index_llms_bedrock-0.2.4.tar.gz", hash = "sha256:a29d4863dbacc5f19828ab6974cc6360a1b9e9a666e9d1286ce44754489fc65c"}, + {file = "llama_index_llms_bedrock-0.2.6-py3-none-any.whl", hash = "sha256:faebbf12c55e73694771fa2cfb6a91a290a214a6734529d1ff34d6d44dce1d97"}, + {file = "llama_index_llms_bedrock-0.2.6.tar.gz", hash = "sha256:43183fabff1db584b824e6c7af9650cd186bf43ea0261d48f50b9993374de493"}, ] [package.dependencies] @@ -3217,13 +3208,13 @@ llama-index-llms-anthropic = ">=0.2.0,<0.3.0" [[package]] name = "llama-index-llms-bedrock-converse" -version = "0.3.5" +version = "0.3.9" description = "llama-index llms bedrock converse integration" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "llama_index_llms_bedrock_converse-0.3.5-py3-none-any.whl", hash = "sha256:001db544a8b1b2277154864c089860f30a8d8365a34389fbc77348a58573eedc"}, - {file = "llama_index_llms_bedrock_converse-0.3.5.tar.gz", hash = "sha256:cd5fa7b3085b18d4d9afe3a064b67e5646f2c193dc53dcf4b6c1caffb492825a"}, + {file = "llama_index_llms_bedrock_converse-0.3.9-py3-none-any.whl", hash = "sha256:f6aa6bf56914176f4826a40a2f59a6d930e7aeb901f39f9d5d5b6351defdf3bd"}, + {file = "llama_index_llms_bedrock_converse-0.3.9.tar.gz", hash = "sha256:9389880c20d0bc4625717a3e528eebd07a5c4c8a7078a62fa714e620bb1af959"}, ] [package.dependencies] @@ -3447,13 +3438,13 @@ redisvl = ">=0.3.4,<0.4.0" [[package]] name = "llama-parse" -version = "0.5.12" +version = "0.5.14" description = "Parse files into RAG-Optimized formats." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "llama_parse-0.5.12-py3-none-any.whl", hash = "sha256:6011feb49da5db4bcbeea1cc6688b6ff24b483877fda80b03fe59239cd08b907"}, - {file = "llama_parse-0.5.12.tar.gz", hash = "sha256:e241606cf3574425df76c0f5d01a31a95c792c6fbef80aaf72f8ed6448bd1715"}, + {file = "llama_parse-0.5.14-py3-none-any.whl", hash = "sha256:64a46825598a239cd7066df7bd81f1f952ae7b3e26ad98f0e34aa9625ebcfd72"}, + {file = "llama_parse-0.5.14.tar.gz", hash = "sha256:b90510f58774d6ee73b6275fe4f1aa0ff3a306026df29959606e56073384248c"}, ] [package.dependencies] @@ -3814,13 +3805,13 @@ files = [ [[package]] name = "marshmallow" -version = "3.23.0" +version = "3.23.1" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false python-versions = ">=3.9" files = [ - {file = "marshmallow-3.23.0-py3-none-any.whl", hash = "sha256:82f20a2397834fe6d9611b241f2f7e7b680ed89c49f84728a1ad937be6b4bdf4"}, - {file = "marshmallow-3.23.0.tar.gz", hash = "sha256:98d8827a9f10c03d44ead298d2e99c6aea8197df18ccfad360dae7f89a50da2e"}, + {file = "marshmallow-3.23.1-py3-none-any.whl", hash = "sha256:fece2eb2c941180ea1b7fcbd4a83c51bfdd50093fdd3ad2585ee5e1df2508491"}, + {file = "marshmallow-3.23.1.tar.gz", hash = "sha256:3a8dfda6edd8dcdbf216c0ede1d1e78d230a6dc9c5a088f58c4083b974a0d468"}, ] [package.dependencies] @@ -3828,7 +3819,7 @@ packaging = ">=17.0" [package.extras] dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] -docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.13)", "sphinx (==8.1.3)", "sphinx-issues (==5.0.0)", "sphinx-version-warning (==1.1.2)"] +docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.14)", "sphinx (==8.1.3)", "sphinx-issues (==5.0.0)", "sphinx-version-warning (==1.1.2)"] tests = ["pytest", "simplejson"] [[package]] @@ -4279,26 +4270,26 @@ twitter = ["twython"] [[package]] name = "notebook" -version = "7.2.2" +version = "7.0.7" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = false python-versions = ">=3.8" files = [ - {file = "notebook-7.2.2-py3-none-any.whl", hash = "sha256:c89264081f671bc02eec0ed470a627ed791b9156cad9285226b31611d3e9fe1c"}, - {file = "notebook-7.2.2.tar.gz", hash = "sha256:2ef07d4220421623ad3fe88118d687bc0450055570cdd160814a59cf3a1c516e"}, + {file = "notebook-7.0.7-py3-none-any.whl", hash = "sha256:289b606d7e173f75a18beb1406ef411b43f97f7a9c55ba03efa3622905a62346"}, + {file = "notebook-7.0.7.tar.gz", hash = "sha256:3bcff00c17b3ac142ef5f436d50637d936b274cfa0b41f6ac0175363de9b4e09"}, ] [package.dependencies] jupyter-server = ">=2.4.0,<3" -jupyterlab = ">=4.2.0,<4.3" -jupyterlab-server = ">=2.27.1,<3" +jupyterlab = ">=4.0.2,<5" +jupyterlab-server = ">=2.22.1,<3" notebook-shim = ">=0.2,<0.3" tornado = ">=6.2.0" [package.extras] dev = ["hatch", "pre-commit"] docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] +test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.22.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] [[package]] name = "notebook-shim" @@ -4364,13 +4355,13 @@ files = [ [[package]] name = "openai" -version = "1.52.2" +version = "1.54.5" description = "The official Python library for the openai API" optional = false -python-versions = ">=3.7.1" +python-versions = ">=3.8" files = [ - {file = "openai-1.52.2-py3-none-any.whl", hash = "sha256:57e9e37bc407f39bb6ec3a27d7e8fb9728b2779936daa1fcf95df17d3edfaccc"}, - {file = "openai-1.52.2.tar.gz", hash = "sha256:87b7d0f69d85f5641678d414b7ee3082363647a5c66a462ed7f3ccb59582da0d"}, + {file = "openai-1.54.5-py3-none-any.whl", hash = "sha256:f55a4450f38501814b53e76311ed7845a6f7f35bab46d0fb2a3728035d7a72d8"}, + {file = "openai-1.54.5.tar.gz", hash = "sha256:2aab4f9755a3e1e04d8a45ac1f4ce7b6948bab76646020c6386256d7e5cbb7e0"}, ] [package.dependencies] @@ -4388,69 +4379,69 @@ datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] [[package]] name = "orjson" -version = "3.10.10" +version = "3.10.11" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.10-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b788a579b113acf1c57e0a68e558be71d5d09aa67f62ca1f68e01117e550a998"}, - {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:804b18e2b88022c8905bb79bd2cbe59c0cd014b9328f43da8d3b28441995cda4"}, - {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9972572a1d042ec9ee421b6da69f7cc823da5962237563fa548ab17f152f0b9b"}, - {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc6993ab1c2ae7dd0711161e303f1db69062955ac2668181bfdf2dd410e65258"}, - {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d78e4cacced5781b01d9bc0f0cd8b70b906a0e109825cb41c1b03f9c41e4ce86"}, - {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6eb2598df518281ba0cbc30d24c5b06124ccf7e19169e883c14e0831217a0bc"}, - {file = "orjson-3.10.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23776265c5215ec532de6238a52707048401a568f0fa0d938008e92a147fe2c7"}, - {file = "orjson-3.10.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8cc2a654c08755cef90b468ff17c102e2def0edd62898b2486767204a7f5cc9c"}, - {file = "orjson-3.10.10-cp310-none-win32.whl", hash = "sha256:081b3fc6a86d72efeb67c13d0ea7c030017bd95f9868b1e329a376edc456153b"}, - {file = "orjson-3.10.10-cp310-none-win_amd64.whl", hash = "sha256:ff38c5fb749347768a603be1fb8a31856458af839f31f064c5aa74aca5be9efe"}, - {file = "orjson-3.10.10-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:879e99486c0fbb256266c7c6a67ff84f46035e4f8749ac6317cc83dacd7f993a"}, - {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019481fa9ea5ff13b5d5d95e6fd5ab25ded0810c80b150c2c7b1cc8660b662a7"}, - {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0dd57eff09894938b4c86d4b871a479260f9e156fa7f12f8cad4b39ea8028bb5"}, - {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dbde6d70cd95ab4d11ea8ac5e738e30764e510fc54d777336eec09bb93b8576c"}, - {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2625cb37b8fb42e2147404e5ff7ef08712099197a9cd38895006d7053e69d6"}, - {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbf3c20c6a7db69df58672a0d5815647ecf78c8e62a4d9bd284e8621c1fe5ccb"}, - {file = "orjson-3.10.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:75c38f5647e02d423807d252ce4528bf6a95bd776af999cb1fb48867ed01d1f6"}, - {file = "orjson-3.10.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:23458d31fa50ec18e0ec4b0b4343730928296b11111df5f547c75913714116b2"}, - {file = "orjson-3.10.10-cp311-none-win32.whl", hash = "sha256:2787cd9dedc591c989f3facd7e3e86508eafdc9536a26ec277699c0aa63c685b"}, - {file = "orjson-3.10.10-cp311-none-win_amd64.whl", hash = "sha256:6514449d2c202a75183f807bc755167713297c69f1db57a89a1ef4a0170ee269"}, - {file = "orjson-3.10.10-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8564f48f3620861f5ef1e080ce7cd122ee89d7d6dacf25fcae675ff63b4d6e05"}, - {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bf161a32b479034098c5b81f2608f09167ad2fa1c06abd4e527ea6bf4837a9"}, - {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:68b65c93617bcafa7f04b74ae8bc2cc214bd5cb45168a953256ff83015c6747d"}, - {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8e28406f97fc2ea0c6150f4c1b6e8261453318930b334abc419214c82314f85"}, - {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4d0d9fe174cc7a5bdce2e6c378bcdb4c49b2bf522a8f996aa586020e1b96cee"}, - {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3be81c42f1242cbed03cbb3973501fcaa2675a0af638f8be494eaf37143d999"}, - {file = "orjson-3.10.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:65f9886d3bae65be026219c0a5f32dbbe91a9e6272f56d092ab22561ad0ea33b"}, - {file = "orjson-3.10.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:730ed5350147db7beb23ddaf072f490329e90a1d059711d364b49fe352ec987b"}, - {file = "orjson-3.10.10-cp312-none-win32.whl", hash = "sha256:a8f4bf5f1c85bea2170800020d53a8877812892697f9c2de73d576c9307a8a5f"}, - {file = "orjson-3.10.10-cp312-none-win_amd64.whl", hash = "sha256:384cd13579a1b4cd689d218e329f459eb9ddc504fa48c5a83ef4889db7fd7a4f"}, - {file = "orjson-3.10.10-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44bffae68c291f94ff5a9b4149fe9d1bdd4cd0ff0fb575bcea8351d48db629a1"}, - {file = "orjson-3.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e27b4c6437315df3024f0835887127dac2a0a3ff643500ec27088d2588fa5ae1"}, - {file = "orjson-3.10.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca84df16d6b49325a4084fd8b2fe2229cb415e15c46c529f868c3387bb1339d"}, - {file = "orjson-3.10.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c14ce70e8f39bd71f9f80423801b5d10bf93d1dceffdecd04df0f64d2c69bc01"}, - {file = "orjson-3.10.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:24ac62336da9bda1bd93c0491eff0613003b48d3cb5d01470842e7b52a40d5b4"}, - {file = "orjson-3.10.10-cp313-none-win32.whl", hash = "sha256:eb0a42831372ec2b05acc9ee45af77bcaccbd91257345f93780a8e654efc75db"}, - {file = "orjson-3.10.10-cp313-none-win_amd64.whl", hash = "sha256:f0c4f37f8bf3f1075c6cc8dd8a9f843689a4b618628f8812d0a71e6968b95ffd"}, - {file = "orjson-3.10.10-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:829700cc18503efc0cf502d630f612884258020d98a317679cd2054af0259568"}, - {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0ceb5e0e8c4f010ac787d29ae6299846935044686509e2f0f06ed441c1ca949"}, - {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0c25908eb86968613216f3db4d3003f1c45d78eb9046b71056ca327ff92bdbd4"}, - {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:218cb0bc03340144b6328a9ff78f0932e642199ac184dd74b01ad691f42f93ff"}, - {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2277ec2cea3775640dc81ab5195bb5b2ada2fe0ea6eee4677474edc75ea6785"}, - {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:848ea3b55ab5ccc9d7bbd420d69432628b691fba3ca8ae3148c35156cbd282aa"}, - {file = "orjson-3.10.10-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e3e67b537ac0c835b25b5f7d40d83816abd2d3f4c0b0866ee981a045287a54f3"}, - {file = "orjson-3.10.10-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:7948cfb909353fce2135dcdbe4521a5e7e1159484e0bb024c1722f272488f2b8"}, - {file = "orjson-3.10.10-cp38-none-win32.whl", hash = "sha256:78bee66a988f1a333dc0b6257503d63553b1957889c17b2c4ed72385cd1b96ae"}, - {file = "orjson-3.10.10-cp38-none-win_amd64.whl", hash = "sha256:f1d647ca8d62afeb774340a343c7fc023efacfd3a39f70c798991063f0c681dd"}, - {file = "orjson-3.10.10-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5a059afddbaa6dd733b5a2d76a90dbc8af790b993b1b5cb97a1176ca713b5df8"}, - {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f9b5c59f7e2a1a410f971c5ebc68f1995822837cd10905ee255f96074537ee6"}, - {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d5ef198bafdef4aa9d49a4165ba53ffdc0a9e1c7b6f76178572ab33118afea25"}, - {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aaf29ce0bb5d3320824ec3d1508652421000ba466abd63bdd52c64bcce9eb1fa"}, - {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dddd5516bcc93e723d029c1633ae79c4417477b4f57dad9bfeeb6bc0315e654a"}, - {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12f2003695b10817f0fa8b8fca982ed7f5761dcb0d93cff4f2f9f6709903fd7"}, - {file = "orjson-3.10.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:672f9874a8a8fb9bb1b771331d31ba27f57702c8106cdbadad8bda5d10bc1019"}, - {file = "orjson-3.10.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1dcbb0ca5fafb2b378b2c74419480ab2486326974826bbf6588f4dc62137570a"}, - {file = "orjson-3.10.10-cp39-none-win32.whl", hash = "sha256:d9bbd3a4b92256875cb058c3381b782649b9a3c68a4aa9a2fff020c2f9cfc1be"}, - {file = "orjson-3.10.10-cp39-none-win_amd64.whl", hash = "sha256:766f21487a53aee8524b97ca9582d5c6541b03ab6210fbaf10142ae2f3ced2aa"}, - {file = "orjson-3.10.10.tar.gz", hash = "sha256:37949383c4df7b4337ce82ee35b6d7471e55195efa7dcb45ab8226ceadb0fe3b"}, + {file = "orjson-3.10.11-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6dade64687f2bd7c090281652fe18f1151292d567a9302b34c2dbb92a3872f1f"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82f07c550a6ccd2b9290849b22316a609023ed851a87ea888c0456485a7d196a"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd9a187742d3ead9df2e49240234d728c67c356516cf4db018833a86f20ec18c"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77b0fed6f209d76c1c39f032a70df2d7acf24b1812ca3e6078fd04e8972685a3"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63fc9d5fe1d4e8868f6aae547a7b8ba0a2e592929245fff61d633f4caccdcdd6"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65cd3e3bb4fbb4eddc3c1e8dce10dc0b73e808fcb875f9fab40c81903dd9323e"}, + {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f67c570602300c4befbda12d153113b8974a3340fdcf3d6de095ede86c06d92"}, + {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1f39728c7f7d766f1f5a769ce4d54b5aaa4c3f92d5b84817053cc9995b977acc"}, + {file = "orjson-3.10.11-cp310-none-win32.whl", hash = "sha256:1789d9db7968d805f3d94aae2c25d04014aae3a2fa65b1443117cd462c6da647"}, + {file = "orjson-3.10.11-cp310-none-win_amd64.whl", hash = "sha256:5576b1e5a53a5ba8f8df81872bb0878a112b3ebb1d392155f00f54dd86c83ff6"}, + {file = "orjson-3.10.11-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1444f9cb7c14055d595de1036f74ecd6ce15f04a715e73f33bb6326c9cef01b6"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdec57fe3b4bdebcc08a946db3365630332dbe575125ff3d80a3272ebd0ddafe"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eed32f33a0ea6ef36ccc1d37f8d17f28a1d6e8eefae5928f76aff8f1df85e67"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80df27dd8697242b904f4ea54820e2d98d3f51f91e97e358fc13359721233e4b"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:705f03cee0cb797256d54de6695ef219e5bc8c8120b6654dd460848d57a9af3d"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03246774131701de8e7059b2e382597da43144a9a7400f178b2a32feafc54bd5"}, + {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8b5759063a6c940a69c728ea70d7c33583991c6982915a839c8da5f957e0103a"}, + {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:677f23e32491520eebb19c99bb34675daf5410c449c13416f7f0d93e2cf5f981"}, + {file = "orjson-3.10.11-cp311-none-win32.whl", hash = "sha256:a11225d7b30468dcb099498296ffac36b4673a8398ca30fdaec1e6c20df6aa55"}, + {file = "orjson-3.10.11-cp311-none-win_amd64.whl", hash = "sha256:df8c677df2f9f385fcc85ab859704045fa88d4668bc9991a527c86e710392bec"}, + {file = "orjson-3.10.11-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:360a4e2c0943da7c21505e47cf6bd725588962ff1d739b99b14e2f7f3545ba51"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:496e2cb45de21c369079ef2d662670a4892c81573bcc143c4205cae98282ba97"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7dfa8db55c9792d53c5952900c6a919cfa377b4f4534c7a786484a6a4a350c19"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51f3382415747e0dbda9dade6f1e1a01a9d37f630d8c9049a8ed0e385b7a90c0"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f35a1b9f50a219f470e0e497ca30b285c9f34948d3c8160d5ad3a755d9299433"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f3b7c5803138e67028dde33450e054c87e0703afbe730c105f1fcd873496d5"}, + {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f91d9eb554310472bd09f5347950b24442600594c2edc1421403d7610a0998fd"}, + {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dfbb2d460a855c9744bbc8e36f9c3a997c4b27d842f3d5559ed54326e6911f9b"}, + {file = "orjson-3.10.11-cp312-none-win32.whl", hash = "sha256:d4a62c49c506d4d73f59514986cadebb7e8d186ad510c518f439176cf8d5359d"}, + {file = "orjson-3.10.11-cp312-none-win_amd64.whl", hash = "sha256:f1eec3421a558ff7a9b010a6c7effcfa0ade65327a71bb9b02a1c3b77a247284"}, + {file = "orjson-3.10.11-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c46294faa4e4d0eb73ab68f1a794d2cbf7bab33b1dda2ac2959ffb7c61591899"}, + {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52e5834d7d6e58a36846e059d00559cb9ed20410664f3ad156cd2cc239a11230"}, + {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2fc947e5350fdce548bfc94f434e8760d5cafa97fb9c495d2fef6757aa02ec0"}, + {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0efabbf839388a1dab5b72b5d3baedbd6039ac83f3b55736eb9934ea5494d258"}, + {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3f29634260708c200c4fe148e42b4aae97d7b9fee417fbdd74f8cfc265f15b0"}, + {file = "orjson-3.10.11-cp313-none-win32.whl", hash = "sha256:1a1222ffcee8a09476bbdd5d4f6f33d06d0d6642df2a3d78b7a195ca880d669b"}, + {file = "orjson-3.10.11-cp313-none-win_amd64.whl", hash = "sha256:bc274ac261cc69260913b2d1610760e55d3c0801bb3457ba7b9004420b6b4270"}, + {file = "orjson-3.10.11-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:19b3763e8bbf8ad797df6b6b5e0fc7c843ec2e2fc0621398534e0c6400098f87"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be83a13312e5e58d633580c5eb8d0495ae61f180da2722f20562974188af205"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:afacfd1ab81f46dedd7f6001b6d4e8de23396e4884cd3c3436bd05defb1a6446"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb4d0bea56bba596723d73f074c420aec3b2e5d7d30698bc56e6048066bd560c"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96ed1de70fcb15d5fed529a656df29f768187628727ee2788344e8a51e1c1350"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bfb30c891b530f3f80e801e3ad82ef150b964e5c38e1fb8482441c69c35c61c"}, + {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d496c74fc2b61341e3cefda7eec21b7854c5f672ee350bc55d9a4997a8a95204"}, + {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:655a493bac606655db9a47fe94d3d84fc7f3ad766d894197c94ccf0c5408e7d3"}, + {file = "orjson-3.10.11-cp38-none-win32.whl", hash = "sha256:b9546b278c9fb5d45380f4809e11b4dd9844ca7aaf1134024503e134ed226161"}, + {file = "orjson-3.10.11-cp38-none-win_amd64.whl", hash = "sha256:b592597fe551d518f42c5a2eb07422eb475aa8cfdc8c51e6da7054b836b26782"}, + {file = "orjson-3.10.11-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c95f2ecafe709b4e5c733b5e2768ac569bed308623c85806c395d9cca00e08af"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80c00d4acded0c51c98754fe8218cb49cb854f0f7eb39ea4641b7f71732d2cb7"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:461311b693d3d0a060439aa669c74f3603264d4e7a08faa68c47ae5a863f352d"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52ca832f17d86a78cbab86cdc25f8c13756ebe182b6fc1a97d534051c18a08de"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c57ea78a753812f528178aa2f1c57da633754c91d2124cb28991dab4c79a54"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7fcfc6f7ca046383fb954ba528587e0f9336828b568282b27579c49f8e16aad"}, + {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:86b9dd983857970c29e4c71bb3e95ff085c07d3e83e7c46ebe959bac07ebd80b"}, + {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d83f87582d223e54efb2242a79547611ba4ebae3af8bae1e80fa9a0af83bb7f"}, + {file = "orjson-3.10.11-cp39-none-win32.whl", hash = "sha256:9fd0ad1c129bc9beb1154c2655f177620b5beaf9a11e0d10bac63ef3fce96950"}, + {file = "orjson-3.10.11-cp39-none-win_amd64.whl", hash = "sha256:10f416b2a017c8bd17f325fb9dee1fb5cdd7a54e814284896b7c3f2763faa017"}, + {file = "orjson-3.10.11.tar.gz", hash = "sha256:e35b6d730de6384d5b2dab5fd23f0d76fae8bbc8c353c2f78210aa5fa4beb3ef"}, ] [[package]] @@ -4480,13 +4471,13 @@ files = [ [[package]] name = "packaging" -version = "24.1" +version = "24.2" 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"}, + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] @@ -4613,13 +4604,13 @@ ptyprocess = ">=0.5" [[package]] name = "phonenumbers" -version = "8.13.48" +version = "8.13.50" description = "Python version of Google's common library for parsing, formatting, storing and validating international phone numbers." optional = false python-versions = "*" files = [ - {file = "phonenumbers-8.13.48-py2.py3-none-any.whl", hash = "sha256:5c51939acefa390eb74119750afb10a85d3c628dc83fd62c52d6f532fcf5d205"}, - {file = "phonenumbers-8.13.48.tar.gz", hash = "sha256:62d8df9b0f3c3c41571c6b396f044ddd999d61631534001b8be7fdf7ba1b18f3"}, + {file = "phonenumbers-8.13.50-py2.py3-none-any.whl", hash = "sha256:bb95dbc0d9979c51f7ad94bcd780784938958861fbb4b75a2fe39ccd3d58954a"}, + {file = "phonenumbers-8.13.50.tar.gz", hash = "sha256:e05ac6fb7b98c6d719a87ea895b9fc153673b4a51f455ec9afaf557ef4629da6"}, ] [[package]] @@ -5328,13 +5319,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyjwt" -version = "2.9.0" +version = "2.10.0" description = "JSON Web Token implementation in Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850"}, - {file = "pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"}, + {file = "PyJWT-2.10.0-py3-none-any.whl", hash = "sha256:543b77207db656de204372350926bed5a86201c4cbff159f623f79c7bb487a15"}, + {file = "pyjwt-2.10.0.tar.gz", hash = "sha256:7628a7eb7938959ac1b26e819a1df0fd3259505627b575e4bad6d08f76db695c"}, ] [package.extras] @@ -5462,13 +5453,13 @@ files = [ [[package]] name = "python-multipart" -version = "0.0.16" +version = "0.0.17" description = "A streaming multipart parser for Python" optional = false python-versions = ">=3.8" files = [ - {file = "python_multipart-0.0.16-py3-none-any.whl", hash = "sha256:c2759b7b976ef3937214dfb592446b59dfaa5f04682a076f78b117c94776d87a"}, - {file = "python_multipart-0.0.16.tar.gz", hash = "sha256:8dee37b88dab9b59922ca173c35acb627cc12ec74019f5cd4578369c6df36554"}, + {file = "python_multipart-0.0.17-py3-none-any.whl", hash = "sha256:15dc4f487e0a9476cc1201261188ee0940165cffc94429b6fc565c4d3045cb5d"}, + {file = "python_multipart-0.0.17.tar.gz", hash = "sha256:41330d831cae6e2f22902704ead2826ea038d0419530eadff3ea80175aec5538"}, ] [[package]] @@ -5724,13 +5715,13 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)" [[package]] name = "redisvl" -version = "0.3.5" +version = "0.3.6" description = "Python client library and CLI for using Redis as a vector database" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "redisvl-0.3.5-py3-none-any.whl", hash = "sha256:7948bcddf20d4f2f8ae5b5d7bf393239eda08b1b322403a82a3d00fa132c4c2e"}, - {file = "redisvl-0.3.5.tar.gz", hash = "sha256:49ce666796c10f554c81656b9fecc1a00dff19715192b1d64c133dd431a44e9f"}, + {file = "redisvl-0.3.6-py3-none-any.whl", hash = "sha256:9fe24d6eb18026b5257deed147d38345548afe5722e66b76d1851d9f98439ff9"}, + {file = "redisvl-0.3.6.tar.gz", hash = "sha256:a41f753601880822627eecfb997f065ed17cdf9717a9fb108a0ae6f3785795fc"}, ] [package.dependencies] @@ -5767,105 +5758,105 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2024.9.11" +version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" files = [ - {file = "regex-2024.9.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1494fa8725c285a81d01dc8c06b55287a1ee5e0e382d8413adc0a9197aac6408"}, - {file = "regex-2024.9.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0e12c481ad92d129c78f13a2a3662317e46ee7ef96c94fd332e1c29131875b7d"}, - {file = "regex-2024.9.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:16e13a7929791ac1216afde26f712802e3df7bf0360b32e4914dca3ab8baeea5"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46989629904bad940bbec2106528140a218b4a36bb3042d8406980be1941429c"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a906ed5e47a0ce5f04b2c981af1c9acf9e8696066900bf03b9d7879a6f679fc8"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a091b0550b3b0207784a7d6d0f1a00d1d1c8a11699c1a4d93db3fbefc3ad35"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ddcd9a179c0a6fa8add279a4444015acddcd7f232a49071ae57fa6e278f1f71"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6b41e1adc61fa347662b09398e31ad446afadff932a24807d3ceb955ed865cc8"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ced479f601cd2f8ca1fd7b23925a7e0ad512a56d6e9476f79b8f381d9d37090a"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:635a1d96665f84b292e401c3d62775851aedc31d4f8784117b3c68c4fcd4118d"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c0256beda696edcf7d97ef16b2a33a8e5a875affd6fa6567b54f7c577b30a137"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3ce4f1185db3fbde8ed8aa223fc9620f276c58de8b0d4f8cc86fd1360829edb6"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:09d77559e80dcc9d24570da3745ab859a9cf91953062e4ab126ba9d5993688ca"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a22ccefd4db3f12b526eccb129390942fe874a3a9fdbdd24cf55773a1faab1a"}, - {file = "regex-2024.9.11-cp310-cp310-win32.whl", hash = "sha256:f745ec09bc1b0bd15cfc73df6fa4f726dcc26bb16c23a03f9e3367d357eeedd0"}, - {file = "regex-2024.9.11-cp310-cp310-win_amd64.whl", hash = "sha256:01c2acb51f8a7d6494c8c5eafe3d8e06d76563d8a8a4643b37e9b2dd8a2ff623"}, - {file = "regex-2024.9.11-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2cce2449e5927a0bf084d346da6cd5eb016b2beca10d0013ab50e3c226ffc0df"}, - {file = "regex-2024.9.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b37fa423beefa44919e009745ccbf353d8c981516e807995b2bd11c2c77d268"}, - {file = "regex-2024.9.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64ce2799bd75039b480cc0360907c4fb2f50022f030bf9e7a8705b636e408fad"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4cc92bb6db56ab0c1cbd17294e14f5e9224f0cc6521167ef388332604e92679"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d05ac6fa06959c4172eccd99a222e1fbf17b5670c4d596cb1e5cde99600674c4"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:040562757795eeea356394a7fb13076ad4f99d3c62ab0f8bdfb21f99a1f85664"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6113c008a7780792efc80f9dfe10ba0cd043cbf8dc9a76ef757850f51b4edc50"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e5fb5f77c8745a60105403a774fe2c1759b71d3e7b4ca237a5e67ad066c7199"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:54d9ff35d4515debf14bc27f1e3b38bfc453eff3220f5bce159642fa762fe5d4"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df5cbb1fbc74a8305b6065d4ade43b993be03dbe0f8b30032cced0d7740994bd"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7fb89ee5d106e4a7a51bce305ac4efb981536301895f7bdcf93ec92ae0d91c7f"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a738b937d512b30bf75995c0159c0ddf9eec0775c9d72ac0202076c72f24aa96"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e28f9faeb14b6f23ac55bfbbfd3643f5c7c18ede093977f1df249f73fd22c7b1"}, - {file = "regex-2024.9.11-cp311-cp311-win32.whl", hash = "sha256:18e707ce6c92d7282dfce370cd205098384b8ee21544e7cb29b8aab955b66fa9"}, - {file = "regex-2024.9.11-cp311-cp311-win_amd64.whl", hash = "sha256:313ea15e5ff2a8cbbad96ccef6be638393041b0a7863183c2d31e0c6116688cf"}, - {file = "regex-2024.9.11-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b0d0a6c64fcc4ef9c69bd5b3b3626cc3776520a1637d8abaa62b9edc147a58f7"}, - {file = "regex-2024.9.11-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:49b0e06786ea663f933f3710a51e9385ce0cba0ea56b67107fd841a55d56a231"}, - {file = "regex-2024.9.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5b513b6997a0b2f10e4fd3a1313568e373926e8c252bd76c960f96fd039cd28d"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee439691d8c23e76f9802c42a95cfeebf9d47cf4ffd06f18489122dbb0a7ad64"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8f877c89719d759e52783f7fe6e1c67121076b87b40542966c02de5503ace42"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23b30c62d0f16827f2ae9f2bb87619bc4fba2044911e2e6c2eb1af0161cdb766"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ab7824093d8f10d44330fe1e6493f756f252d145323dd17ab6b48733ff6c0a"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dee5b4810a89447151999428fe096977346cf2f29f4d5e29609d2e19e0199c9"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98eeee2f2e63edae2181c886d7911ce502e1292794f4c5ee71e60e23e8d26b5d"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:57fdd2e0b2694ce6fc2e5ccf189789c3e2962916fb38779d3e3521ff8fe7a822"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d552c78411f60b1fdaafd117a1fca2f02e562e309223b9d44b7de8be451ec5e0"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a0b2b80321c2ed3fcf0385ec9e51a12253c50f146fddb2abbb10f033fe3d049a"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:18406efb2f5a0e57e3a5881cd9354c1512d3bb4f5c45d96d110a66114d84d23a"}, - {file = "regex-2024.9.11-cp312-cp312-win32.whl", hash = "sha256:e464b467f1588e2c42d26814231edecbcfe77f5ac414d92cbf4e7b55b2c2a776"}, - {file = "regex-2024.9.11-cp312-cp312-win_amd64.whl", hash = "sha256:9e8719792ca63c6b8340380352c24dcb8cd7ec49dae36e963742a275dfae6009"}, - {file = "regex-2024.9.11-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c157bb447303070f256e084668b702073db99bbb61d44f85d811025fcf38f784"}, - {file = "regex-2024.9.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4db21ece84dfeefc5d8a3863f101995de646c6cb0536952c321a2650aa202c36"}, - {file = "regex-2024.9.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:220e92a30b426daf23bb67a7962900ed4613589bab80382be09b48896d211e92"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb1ae19e64c14c7ec1995f40bd932448713d3c73509e82d8cd7744dc00e29e86"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f47cd43a5bfa48f86925fe26fbdd0a488ff15b62468abb5d2a1e092a4fb10e85"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9d4a76b96f398697fe01117093613166e6aa8195d63f1b4ec3f21ab637632963"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ea51dcc0835eea2ea31d66456210a4e01a076d820e9039b04ae8d17ac11dee6"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7aaa315101c6567a9a45d2839322c51c8d6e81f67683d529512f5bcfb99c802"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c57d08ad67aba97af57a7263c2d9006d5c404d721c5f7542f077f109ec2a4a29"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f8404bf61298bb6f8224bb9176c1424548ee1181130818fcd2cbffddc768bed8"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dd4490a33eb909ef5078ab20f5f000087afa2a4daa27b4c072ccb3cb3050ad84"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:eee9130eaad130649fd73e5cd92f60e55708952260ede70da64de420cdcad554"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6a2644a93da36c784e546de579ec1806bfd2763ef47babc1b03d765fe560c9f8"}, - {file = "regex-2024.9.11-cp313-cp313-win32.whl", hash = "sha256:e997fd30430c57138adc06bba4c7c2968fb13d101e57dd5bb9355bf8ce3fa7e8"}, - {file = "regex-2024.9.11-cp313-cp313-win_amd64.whl", hash = "sha256:042c55879cfeb21a8adacc84ea347721d3d83a159da6acdf1116859e2427c43f"}, - {file = "regex-2024.9.11-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:35f4a6f96aa6cb3f2f7247027b07b15a374f0d5b912c0001418d1d55024d5cb4"}, - {file = "regex-2024.9.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:55b96e7ce3a69a8449a66984c268062fbaa0d8ae437b285428e12797baefce7e"}, - {file = "regex-2024.9.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cb130fccd1a37ed894824b8c046321540263013da72745d755f2d35114b81a60"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:323c1f04be6b2968944d730e5c2091c8c89767903ecaa135203eec4565ed2b2b"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be1c8ed48c4c4065ecb19d882a0ce1afe0745dfad8ce48c49586b90a55f02366"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5b029322e6e7b94fff16cd120ab35a253236a5f99a79fb04fda7ae71ca20ae8"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6fff13ef6b5f29221d6904aa816c34701462956aa72a77f1f151a8ec4f56aeb"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:587d4af3979376652010e400accc30404e6c16b7df574048ab1f581af82065e4"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:079400a8269544b955ffa9e31f186f01d96829110a3bf79dc338e9910f794fca"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f9268774428ec173654985ce55fc6caf4c6d11ade0f6f914d48ef4719eb05ebb"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:23f9985c8784e544d53fc2930fc1ac1a7319f5d5332d228437acc9f418f2f168"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2941333154baff9838e88aa71c1d84f4438189ecc6021a12c7573728b5838e"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e93f1c331ca8e86fe877a48ad64e77882c0c4da0097f2212873a69bbfea95d0c"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:846bc79ee753acf93aef4184c040d709940c9d001029ceb7b7a52747b80ed2dd"}, - {file = "regex-2024.9.11-cp38-cp38-win32.whl", hash = "sha256:c94bb0a9f1db10a1d16c00880bdebd5f9faf267273b8f5bd1878126e0fbde771"}, - {file = "regex-2024.9.11-cp38-cp38-win_amd64.whl", hash = "sha256:2b08fce89fbd45664d3df6ad93e554b6c16933ffa9d55cb7e01182baaf971508"}, - {file = "regex-2024.9.11-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:07f45f287469039ffc2c53caf6803cd506eb5f5f637f1d4acb37a738f71dd066"}, - {file = "regex-2024.9.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4838e24ee015101d9f901988001038f7f0d90dc0c3b115541a1365fb439add62"}, - {file = "regex-2024.9.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6edd623bae6a737f10ce853ea076f56f507fd7726bee96a41ee3d68d347e4d16"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c69ada171c2d0e97a4b5aa78fbb835e0ffbb6b13fc5da968c09811346564f0d3"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02087ea0a03b4af1ed6ebab2c54d7118127fee8d71b26398e8e4b05b78963199"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:69dee6a020693d12a3cf892aba4808fe168d2a4cef368eb9bf74f5398bfd4ee8"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:297f54910247508e6e5cae669f2bc308985c60540a4edd1c77203ef19bfa63ca"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ecea58b43a67b1b79805f1a0255730edaf5191ecef84dbc4cc85eb30bc8b63b9"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eab4bb380f15e189d1313195b062a6aa908f5bd687a0ceccd47c8211e9cf0d4a"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0cbff728659ce4bbf4c30b2a1be040faafaa9eca6ecde40aaff86f7889f4ab39"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:54c4a097b8bc5bb0dfc83ae498061d53ad7b5762e00f4adaa23bee22b012e6ba"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:73d6d2f64f4d894c96626a75578b0bf7d9e56dcda8c3d037a2118fdfe9b1c664"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:e53b5fbab5d675aec9f0c501274c467c0f9a5d23696cfc94247e1fb56501ed89"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ffbcf9221e04502fc35e54d1ce9567541979c3fdfb93d2c554f0ca583a19b35"}, - {file = "regex-2024.9.11-cp39-cp39-win32.whl", hash = "sha256:e4c22e1ac1f1ec1e09f72e6c44d8f2244173db7eb9629cc3a346a8d7ccc31142"}, - {file = "regex-2024.9.11-cp39-cp39-win_amd64.whl", hash = "sha256:faa3c142464efec496967359ca99696c896c591c56c53506bac1ad465f66e919"}, - {file = "regex-2024.9.11.tar.gz", hash = "sha256:6c188c307e8433bcb63dc1915022deb553b4203a70722fc542c363bf120a01fd"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, + {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, + {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, + {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, + {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, + {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, + {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, + {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, + {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, + {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, + {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, + {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, + {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, + {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, ] [[package]] @@ -5930,13 +5921,13 @@ files = [ [[package]] name = "rich" -version = "13.9.3" +version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" files = [ - {file = "rich-13.9.3-py3-none-any.whl", hash = "sha256:9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283"}, - {file = "rich-13.9.3.tar.gz", hash = "sha256:bc1e01b899537598cf02579d2b9f4a415104d3fc439313a7a2c165d76557a08e"}, + {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, + {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, ] [package.dependencies] @@ -5948,114 +5939,101 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.20.0" +version = "0.21.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2"}, - {file = "rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94"}, - {file = "rpds_py-0.20.0-cp310-none-win32.whl", hash = "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee"}, - {file = "rpds_py-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399"}, - {file = "rpds_py-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489"}, - {file = "rpds_py-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58"}, - {file = "rpds_py-0.20.0-cp311-none-win32.whl", hash = "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0"}, - {file = "rpds_py-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c"}, - {file = "rpds_py-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6"}, - {file = "rpds_py-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174"}, - {file = "rpds_py-0.20.0-cp312-none-win32.whl", hash = "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139"}, - {file = "rpds_py-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585"}, - {file = "rpds_py-0.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29"}, - {file = "rpds_py-0.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57"}, - {file = "rpds_py-0.20.0-cp313-none-win32.whl", hash = "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a"}, - {file = "rpds_py-0.20.0-cp313-none-win_amd64.whl", hash = "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2"}, - {file = "rpds_py-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24"}, - {file = "rpds_py-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a"}, - {file = "rpds_py-0.20.0-cp38-none-win32.whl", hash = "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5"}, - {file = "rpds_py-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232"}, - {file = "rpds_py-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22"}, - {file = "rpds_py-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b"}, - {file = "rpds_py-0.20.0-cp39-none-win32.whl", hash = "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7"}, - {file = "rpds_py-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8"}, - {file = "rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121"}, + {file = "rpds_py-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590"}, + {file = "rpds_py-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664"}, + {file = "rpds_py-0.21.0-cp310-none-win32.whl", hash = "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682"}, + {file = "rpds_py-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5"}, + {file = "rpds_py-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95"}, + {file = "rpds_py-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8"}, + {file = "rpds_py-0.21.0-cp311-none-win32.whl", hash = "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a"}, + {file = "rpds_py-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e"}, + {file = "rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d"}, + {file = "rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11"}, + {file = "rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952"}, + {file = "rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd"}, + {file = "rpds_py-0.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937"}, + {file = "rpds_py-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976"}, + {file = "rpds_py-0.21.0-cp313-none-win32.whl", hash = "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202"}, + {file = "rpds_py-0.21.0-cp313-none-win_amd64.whl", hash = "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e"}, + {file = "rpds_py-0.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2c51d99c30091f72a3c5d126fad26236c3f75716b8b5e5cf8effb18889ced928"}, + {file = "rpds_py-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbd7504a10b0955ea287114f003b7ad62330c9e65ba012c6223dba646f6ffd05"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dcc4949be728ede49e6244eabd04064336012b37f5c2200e8ec8eb2988b209c"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f414da5c51bf350e4b7960644617c130140423882305f7574b6cf65a3081cecb"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9afe42102b40007f588666bc7de82451e10c6788f6f70984629db193849dced1"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b929c2bb6e29ab31f12a1117c39f7e6d6450419ab7464a4ea9b0b417174f044"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8404b3717da03cbf773a1d275d01fec84ea007754ed380f63dfc24fb76ce4592"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e12bb09678f38b7597b8346983d2323a6482dcd59e423d9448108c1be37cac9d"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58a0e345be4b18e6b8501d3b0aa540dad90caeed814c515e5206bb2ec26736fd"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3761f62fcfccf0864cc4665b6e7c3f0c626f0380b41b8bd1ce322103fa3ef87"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c2b2f71c6ad6c2e4fc9ed9401080badd1469fa9889657ec3abea42a3d6b2e1ed"}, + {file = "rpds_py-0.21.0-cp39-none-win32.whl", hash = "sha256:b21747f79f360e790525e6f6438c7569ddbfb1b3197b9e65043f25c3c9b489d8"}, + {file = "rpds_py-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:0626238a43152918f9e72ede9a3b6ccc9e299adc8ade0d67c5e142d564c9a83d"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:031819f906bb146561af051c7cef4ba2003d28cff07efacef59da973ff7969ba"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b876f2bc27ab5954e2fd88890c071bd0ed18b9c50f6ec3de3c50a5ece612f7a6"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc5695c321e518d9f03b7ea6abb5ea3af4567766f9852ad1560f501b17588c7b"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4de1da871b5c0fd5537b26a6fc6814c3cc05cabe0c941db6e9044ffbb12f04a"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:878f6fea96621fda5303a2867887686d7a198d9e0f8a40be100a63f5d60c88c9"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8eeec67590e94189f434c6d11c426892e396ae59e4801d17a93ac96b8c02a6c"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff2eba7f6c0cb523d7e9cff0903f2fe1feff8f0b2ceb6bd71c0e20a4dcee271"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a429b99337062877d7875e4ff1a51fe788424d522bd64a8c0a20ef3021fdb6ed"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d167e4dbbdac48bd58893c7e446684ad5d425b407f9336e04ab52e8b9194e2ed"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eb2de8a147ffe0626bfdc275fc6563aa7bf4b6db59cf0d44f0ccd6ca625a24e"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e78868e98f34f34a88e23ee9ccaeeec460e4eaf6db16d51d7a9b883e5e785a5e"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4991ca61656e3160cdaca4851151fd3f4a92e9eba5c7a530ab030d6aee96ec89"}, + {file = "rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db"}, ] [[package]] @@ -6074,29 +6052,29 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -version = "0.7.1" +version = "0.7.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.7.1-py3-none-linux_armv6l.whl", hash = "sha256:cb1bc5ed9403daa7da05475d615739cc0212e861b7306f314379d958592aaa89"}, - {file = "ruff-0.7.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:27c1c52a8d199a257ff1e5582d078eab7145129aa02721815ca8fa4f9612dc35"}, - {file = "ruff-0.7.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:588a34e1ef2ea55b4ddfec26bbe76bc866e92523d8c6cdec5e8aceefeff02d99"}, - {file = "ruff-0.7.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94fc32f9cdf72dc75c451e5f072758b118ab8100727168a3df58502b43a599ca"}, - {file = "ruff-0.7.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:985818742b833bffa543a84d1cc11b5e6871de1b4e0ac3060a59a2bae3969250"}, - {file = "ruff-0.7.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32f1e8a192e261366c702c5fb2ece9f68d26625f198a25c408861c16dc2dea9c"}, - {file = "ruff-0.7.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:699085bf05819588551b11751eff33e9ca58b1b86a6843e1b082a7de40da1565"}, - {file = "ruff-0.7.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:344cc2b0814047dc8c3a8ff2cd1f3d808bb23c6658db830d25147339d9bf9ea7"}, - {file = "ruff-0.7.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4316bbf69d5a859cc937890c7ac7a6551252b6a01b1d2c97e8fc96e45a7c8b4a"}, - {file = "ruff-0.7.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79d3af9dca4c56043e738a4d6dd1e9444b6d6c10598ac52d146e331eb155a8ad"}, - {file = "ruff-0.7.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c5c121b46abde94a505175524e51891f829414e093cd8326d6e741ecfc0a9112"}, - {file = "ruff-0.7.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8422104078324ea250886954e48f1373a8fe7de59283d747c3a7eca050b4e378"}, - {file = "ruff-0.7.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:56aad830af8a9db644e80098fe4984a948e2b6fc2e73891538f43bbe478461b8"}, - {file = "ruff-0.7.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:658304f02f68d3a83c998ad8bf91f9b4f53e93e5412b8f2388359d55869727fd"}, - {file = "ruff-0.7.1-py3-none-win32.whl", hash = "sha256:b517a2011333eb7ce2d402652ecaa0ac1a30c114fbbd55c6b8ee466a7f600ee9"}, - {file = "ruff-0.7.1-py3-none-win_amd64.whl", hash = "sha256:f38c41fcde1728736b4eb2b18850f6d1e3eedd9678c914dede554a70d5241307"}, - {file = "ruff-0.7.1-py3-none-win_arm64.whl", hash = "sha256:19aa200ec824c0f36d0c9114c8ec0087082021732979a359d6f3c390a6ff2a37"}, - {file = "ruff-0.7.1.tar.gz", hash = "sha256:9d8a41d4aa2dad1575adb98a82870cf5db5f76b2938cf2206c22c940034a36f4"}, + {file = "ruff-0.7.4-py3-none-linux_armv6l.whl", hash = "sha256:a4919925e7684a3f18e18243cd6bea7cfb8e968a6eaa8437971f681b7ec51478"}, + {file = "ruff-0.7.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cfb365c135b830778dda8c04fb7d4280ed0b984e1aec27f574445231e20d6c63"}, + {file = "ruff-0.7.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:63a569b36bc66fbadec5beaa539dd81e0527cb258b94e29e0531ce41bacc1f20"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d06218747d361d06fd2fdac734e7fa92df36df93035db3dc2ad7aa9852cb109"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0cea28d0944f74ebc33e9f934238f15c758841f9f5edd180b5315c203293452"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80094ecd4793c68b2571b128f91754d60f692d64bc0d7272ec9197fdd09bf9ea"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:997512325c6620d1c4c2b15db49ef59543ef9cd0f4aa8065ec2ae5103cedc7e7"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00b4cf3a6b5fad6d1a66e7574d78956bbd09abfd6c8a997798f01f5da3d46a05"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7dbdc7d8274e1422722933d1edddfdc65b4336abf0b16dfcb9dedd6e6a517d06"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e92dfb5f00eaedb1501b2f906ccabfd67b2355bdf117fea9719fc99ac2145bc"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3bd726099f277d735dc38900b6a8d6cf070f80828877941983a57bca1cd92172"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2e32829c429dd081ee5ba39aef436603e5b22335c3d3fff013cd585806a6486a"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:662a63b4971807623f6f90c1fb664613f67cc182dc4d991471c23c541fee62dd"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:876f5e09eaae3eb76814c1d3b68879891d6fde4824c015d48e7a7da4cf066a3a"}, + {file = "ruff-0.7.4-py3-none-win32.whl", hash = "sha256:75c53f54904be42dd52a548728a5b572344b50d9b2873d13a3f8c5e3b91f5cac"}, + {file = "ruff-0.7.4-py3-none-win_amd64.whl", hash = "sha256:745775c7b39f914238ed1f1b0bebed0b9155a17cd8bc0b08d3c87e4703b990d6"}, + {file = "ruff-0.7.4-py3-none-win_arm64.whl", hash = "sha256:11bff065102c3ae9d3ea4dc9ecdfe5a5171349cdd0787c1fc64761212fc9cf1f"}, + {file = "ruff-0.7.4.tar.gz", hash = "sha256:cd12e35031f5af6b9b93715d8c4f40360070b2041f81273d0527683d5708fce2"}, ] [[package]] @@ -6118,13 +6096,13 @@ crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] [[package]] name = "selenium" -version = "4.25.0" +version = "4.26.1" description = "Official Python bindings for Selenium WebDriver" optional = false python-versions = ">=3.8" files = [ - {file = "selenium-4.25.0-py3-none-any.whl", hash = "sha256:3798d2d12b4a570bc5790163ba57fef10b2afee958bf1d80f2a3cf07c4141f33"}, - {file = "selenium-4.25.0.tar.gz", hash = "sha256:95d08d3b82fb353f3c474895154516604c7f0e6a9a565ae6498ef36c9bac6921"}, + {file = "selenium-4.26.1-py3-none-any.whl", hash = "sha256:1db3f3a0cd5bb07624fa8a3905a6fdde1595a42185a0617077c361dc53d104fb"}, + {file = "selenium-4.26.1.tar.gz", hash = "sha256:7640f3f08ae7f4e450f895678e8a10a55eb4e4ca18311ed675ecc4684b96b683"}, ] [package.dependencies] @@ -6168,23 +6146,23 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "75.3.0" +version = "75.5.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "setuptools-75.3.0-py3-none-any.whl", hash = "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd"}, - {file = "setuptools-75.3.0.tar.gz", hash = "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686"}, + {file = "setuptools-75.5.0-py3-none-any.whl", hash = "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829"}, + {file = "setuptools-75.5.0.tar.gz", hash = "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef"}, ] [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.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"] +core = ["importlib-metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.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 (>=5.5)", "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.12.*)", "pytest-mypy"] +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 (>=5.5)", "packaging (>=24.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.12,<1.14)", "pytest-mypy"] [[package]] name = "sgmllib3k" @@ -6782,13 +6760,13 @@ files = [ [[package]] name = "tldextract" -version = "5.1.2" +version = "5.1.3" description = "Accurately separates a URL's subdomain, domain, and public suffix, using the Public Suffix List (PSL). By default, this includes the public ICANN TLDs and their exceptions. You can optionally support the Public Suffix List's private domains as well." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "tldextract-5.1.2-py3-none-any.whl", hash = "sha256:4dfc4c277b6b97fa053899fcdb892d2dc27295851ab5fac4e07797b6a21b2e46"}, - {file = "tldextract-5.1.2.tar.gz", hash = "sha256:c9e17f756f05afb5abac04fe8f766e7e70f9fe387adb1859f0f52408ee060200"}, + {file = "tldextract-5.1.3-py3-none-any.whl", hash = "sha256:78de310cc2ca018692de5ddf320f9d6bd7c5cf857d0fd4f2175f0cdf4440ea75"}, + {file = "tldextract-5.1.3.tar.gz", hash = "sha256:d43c7284c23f5dc8a42fd0fee2abede2ff74cc622674e4cb07f514ab3330c338"}, ] [package.dependencies] @@ -6799,115 +6777,127 @@ requests-file = ">=1.4" [package.extras] release = ["build", "twine"] -testing = ["black", "mypy", "pytest", "pytest-gitignore", "pytest-mock", "responses", "ruff", "syrupy", "tox", "types-filelock", "types-requests"] +testing = ["mypy", "pytest", "pytest-gitignore", "pytest-mock", "responses", "ruff", "syrupy", "tox", "tox-uv", "types-filelock", "types-requests"] [[package]] name = "tokenizers" -version = "0.20.1" +version = "0.20.3" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "tokenizers-0.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:439261da7c0a5c88bda97acb284d49fbdaf67e9d3b623c0bfd107512d22787a9"}, - {file = "tokenizers-0.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03dae629d99068b1ea5416d50de0fea13008f04129cc79af77a2a6392792d93c"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b61f561f329ffe4b28367798b89d60c4abf3f815d37413b6352bc6412a359867"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ec870fce1ee5248a10be69f7a8408a234d6f2109f8ea827b4f7ecdbf08c9fd15"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d388d1ea8b7447da784e32e3b86a75cce55887e3b22b31c19d0b186b1c677800"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:299c85c1d21135bc01542237979bf25c32efa0d66595dd0069ae259b97fb2dbe"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e96f6c14c9752bb82145636b614d5a78e9cde95edfbe0a85dad0dd5ddd6ec95c"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc9e95ad49c932b80abfbfeaf63b155761e695ad9f8a58c52a47d962d76e310f"}, - {file = "tokenizers-0.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f22dee205329a636148c325921c73cf3e412e87d31f4d9c3153b302a0200057b"}, - {file = "tokenizers-0.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2ffd9a8895575ac636d44500c66dffaef133823b6b25067604fa73bbc5ec09d"}, - {file = "tokenizers-0.20.1-cp310-none-win32.whl", hash = "sha256:2847843c53f445e0f19ea842a4e48b89dd0db4e62ba6e1e47a2749d6ec11f50d"}, - {file = "tokenizers-0.20.1-cp310-none-win_amd64.whl", hash = "sha256:f9aa93eacd865f2798b9e62f7ce4533cfff4f5fbd50c02926a78e81c74e432cd"}, - {file = "tokenizers-0.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4a717dcb08f2dabbf27ae4b6b20cbbb2ad7ed78ce05a829fae100ff4b3c7ff15"}, - {file = "tokenizers-0.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3f84dad1ff1863c648d80628b1b55353d16303431283e4efbb6ab1af56a75832"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:929c8f3afa16a5130a81ab5079c589226273ec618949cce79b46d96e59a84f61"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d10766473954397e2d370f215ebed1cc46dcf6fd3906a2a116aa1d6219bfedc3"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9300fac73ddc7e4b0330acbdda4efaabf74929a4a61e119a32a181f534a11b47"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ecaf7b0e39caeb1aa6dd6e0975c405716c82c1312b55ac4f716ef563a906969"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5170be9ec942f3d1d317817ced8d749b3e1202670865e4fd465e35d8c259de83"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f1ae08fa9aea5891cbd69df29913e11d3841798e0bfb1ff78b78e4e7ea0a4"}, - {file = "tokenizers-0.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ee86d4095d3542d73579e953c2e5e07d9321af2ffea6ecc097d16d538a2dea16"}, - {file = "tokenizers-0.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:86dcd08da163912e17b27bbaba5efdc71b4fbffb841530fdb74c5707f3c49216"}, - {file = "tokenizers-0.20.1-cp311-none-win32.whl", hash = "sha256:9af2dc4ee97d037bc6b05fa4429ddc87532c706316c5e11ce2f0596dfcfa77af"}, - {file = "tokenizers-0.20.1-cp311-none-win_amd64.whl", hash = "sha256:899152a78b095559c287b4c6d0099469573bb2055347bb8154db106651296f39"}, - {file = "tokenizers-0.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:407ab666b38e02228fa785e81f7cf79ef929f104bcccf68a64525a54a93ceac9"}, - {file = "tokenizers-0.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f13a2d16032ebc8bd812eb8099b035ac65887d8f0c207261472803b9633cf3e"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e98eee4dca22849fbb56a80acaa899eec5b72055d79637dd6aa15d5e4b8628c9"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47c1bcdd61e61136087459cb9e0b069ff23b5568b008265e5cbc927eae3387ce"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:128c1110e950534426e2274837fc06b118ab5f2fa61c3436e60e0aada0ccfd67"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2e2d47a819d2954f2c1cd0ad51bb58ffac6f53a872d5d82d65d79bf76b9896d"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bdd67a0e3503a9a7cf8bc5a4a49cdde5fa5bada09a51e4c7e1c73900297539bd"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:689b93d2e26d04da337ac407acec8b5d081d8d135e3e5066a88edd5bdb5aff89"}, - {file = "tokenizers-0.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0c6a796ddcd9a19ad13cf146997cd5895a421fe6aec8fd970d69f9117bddb45c"}, - {file = "tokenizers-0.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3ea919687aa7001a8ff1ba36ac64f165c4e89035f57998fa6cedcfd877be619d"}, - {file = "tokenizers-0.20.1-cp312-none-win32.whl", hash = "sha256:6d3ac5c1f48358ffe20086bf065e843c0d0a9fce0d7f0f45d5f2f9fba3609ca5"}, - {file = "tokenizers-0.20.1-cp312-none-win_amd64.whl", hash = "sha256:b0874481aea54a178f2bccc45aa2d0c99cd3f79143a0948af6a9a21dcc49173b"}, - {file = "tokenizers-0.20.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:96af92e833bd44760fb17f23f402e07a66339c1dcbe17d79a9b55bb0cc4f038e"}, - {file = "tokenizers-0.20.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:65f34e5b731a262dfa562820818533c38ce32a45864437f3d9c82f26c139ca7f"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17f98fccb5c12ab1ce1f471731a9cd86df5d4bd2cf2880c5a66b229802d96145"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b8c0fc3542cf9370bf92c932eb71bdeb33d2d4aeeb4126d9fd567b60bd04cb30"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b39356df4575d37f9b187bb623aab5abb7b62c8cb702867a1768002f814800c"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfdad27b0e50544f6b838895a373db6114b85112ba5c0cefadffa78d6daae563"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:094663dd0e85ee2e573126918747bdb40044a848fde388efb5b09d57bc74c680"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14e4cf033a2aa207d7ac790e91adca598b679999710a632c4a494aab0fc3a1b2"}, - {file = "tokenizers-0.20.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9310951c92c9fb91660de0c19a923c432f110dbfad1a2d429fbc44fa956bf64f"}, - {file = "tokenizers-0.20.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:05e41e302c315bd2ed86c02e917bf03a6cf7d2f652c9cee1a0eb0d0f1ca0d32c"}, - {file = "tokenizers-0.20.1-cp37-none-win32.whl", hash = "sha256:212231ab7dfcdc879baf4892ca87c726259fa7c887e1688e3f3cead384d8c305"}, - {file = "tokenizers-0.20.1-cp37-none-win_amd64.whl", hash = "sha256:896195eb9dfdc85c8c052e29947169c1fcbe75a254c4b5792cdbd451587bce85"}, - {file = "tokenizers-0.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:741fb22788482d09d68e73ece1495cfc6d9b29a06c37b3df90564a9cfa688e6d"}, - {file = "tokenizers-0.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10be14ebd8082086a342d969e17fc2d6edc856c59dbdbddd25f158fa40eaf043"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:514cf279b22fa1ae0bc08e143458c74ad3b56cd078b319464959685a35c53d5e"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a647c5b7cb896d6430cf3e01b4e9a2d77f719c84cefcef825d404830c2071da2"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cdf379219e1e1dd432091058dab325a2e6235ebb23e0aec8d0508567c90cd01"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ba72260449e16c4c2f6f3252823b059fbf2d31b32617e582003f2b18b415c39"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:910b96ed87316e4277b23c7bcaf667ce849c7cc379a453fa179e7e09290eeb25"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e53975a6694428a0586534cc1354b2408d4e010a3103117f617cbb550299797c"}, - {file = "tokenizers-0.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:07c4b7be58da142b0730cc4e5fd66bb7bf6f57f4986ddda73833cd39efef8a01"}, - {file = "tokenizers-0.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b605c540753e62199bf15cf69c333e934077ef2350262af2ccada46026f83d1c"}, - {file = "tokenizers-0.20.1-cp38-none-win32.whl", hash = "sha256:88b3bc76ab4db1ab95ead623d49c95205411e26302cf9f74203e762ac7e85685"}, - {file = "tokenizers-0.20.1-cp38-none-win_amd64.whl", hash = "sha256:d412a74cf5b3f68a90c615611a5aa4478bb303d1c65961d22db45001df68afcb"}, - {file = "tokenizers-0.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a25dcb2f41a0a6aac31999e6c96a75e9152fa0127af8ece46c2f784f23b8197a"}, - {file = "tokenizers-0.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a12c3cebb8c92e9c35a23ab10d3852aee522f385c28d0b4fe48c0b7527d59762"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02e18da58cf115b7c40de973609c35bde95856012ba42a41ee919c77935af251"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f326a1ac51ae909b9760e34671c26cd0dfe15662f447302a9d5bb2d872bab8ab"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b4872647ea6f25224e2833b044b0b19084e39400e8ead3cfe751238b0802140"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce6238a3311bb8e4c15b12600927d35c267b92a52c881ef5717a900ca14793f7"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57b7a8880b208866508b06ce365dc631e7a2472a3faa24daa430d046fb56c885"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a908c69c2897a68f412aa05ba38bfa87a02980df70f5a72fa8490479308b1f2d"}, - {file = "tokenizers-0.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:da1001aa46f4490099c82e2facc4fbc06a6a32bf7de3918ba798010954b775e0"}, - {file = "tokenizers-0.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:42c097390e2f0ed0a5c5d569e6669dd4e9fff7b31c6a5ce6e9c66a61687197de"}, - {file = "tokenizers-0.20.1-cp39-none-win32.whl", hash = "sha256:3d4d218573a3d8b121a1f8c801029d70444ffb6d8f129d4cca1c7b672ee4a24c"}, - {file = "tokenizers-0.20.1-cp39-none-win_amd64.whl", hash = "sha256:37d1e6f616c84fceefa7c6484a01df05caf1e207669121c66213cb5b2911d653"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48689da7a395df41114f516208d6550e3e905e1239cc5ad386686d9358e9cef0"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:712f90ea33f9bd2586b4a90d697c26d56d0a22fd3c91104c5858c4b5b6489a79"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:359eceb6a620c965988fc559cebc0a98db26713758ec4df43fb76d41486a8ed5"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d3caf244ce89d24c87545aafc3448be15870096e796c703a0d68547187192e1"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03b03cf8b9a32254b1bf8a305fb95c6daf1baae0c1f93b27f2b08c9759f41dee"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:218e5a3561561ea0f0ef1559c6d95b825308dbec23fb55b70b92589e7ff2e1e8"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f40df5e0294a95131cc5f0e0eb91fe86d88837abfbee46b9b3610b09860195a7"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:08aaa0d72bb65058e8c4b0455f61b840b156c557e2aca57627056624c3a93976"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:998700177b45f70afeb206ad22c08d9e5f3a80639dae1032bf41e8cbc4dada4b"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62f7fbd3c2c38b179556d879edae442b45f68312019c3a6013e56c3947a4e648"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31e87fca4f6bbf5cc67481b562147fe932f73d5602734de7dd18a8f2eee9c6dd"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:956f21d359ae29dd51ca5726d2c9a44ffafa041c623f5aa33749da87cfa809b9"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:1fbbaf17a393c78d8aedb6a334097c91cb4119a9ced4764ab8cfdc8d254dc9f9"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ebe63e31f9c1a970c53866d814e35ec2ec26fda03097c486f82f3891cee60830"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:81970b80b8ac126910295f8aab2d7ef962009ea39e0d86d304769493f69aaa1e"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130e35e76f9337ed6c31be386e75d4925ea807055acf18ca1a9b0eec03d8fe23"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd28a8614f5c82a54ab2463554e84ad79526c5184cf4573bbac2efbbbcead457"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9041ee665d0fa7f5c4ccf0f81f5e6b7087f797f85b143c094126fc2611fec9d0"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:62eb9daea2a2c06bcd8113a5824af8ef8ee7405d3a71123ba4d52c79bb3d9f1a"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f861889707b54a9ab1204030b65fd6c22bdd4a95205deec7994dc22a8baa2ea4"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:89d5c337d74ea6e5e7dc8af124cf177be843bbb9ca6e58c01f75ea103c12c8a9"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0b7f515c83397e73292accdbbbedc62264e070bae9682f06061e2ddce67cacaf"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0305fc1ec6b1e5052d30d9c1d5c807081a7bd0cae46a33d03117082e91908c"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dc611e6ac0fa00a41de19c3bf6391a05ea201d2d22b757d63f5491ec0e67faa"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5ffe0d7f7bfcfa3b2585776ecf11da2e01c317027c8573c78ebcb8985279e23"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e7edb8ec12c100d5458d15b1e47c0eb30ad606a05641f19af7563bc3d1608c14"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:de291633fb9303555793cc544d4a86e858da529b7d0b752bcaf721ae1d74b2c9"}, - {file = "tokenizers-0.20.1.tar.gz", hash = "sha256:84edcc7cdeeee45ceedb65d518fffb77aec69311c9c8e30f77ad84da3025f002"}, + {file = "tokenizers-0.20.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:31ccab28dbb1a9fe539787210b0026e22debeab1662970f61c2d921f7557f7e4"}, + {file = "tokenizers-0.20.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6361191f762bda98c773da418cf511cbaa0cb8d0a1196f16f8c0119bde68ff8"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f128d5da1202b78fa0a10d8d938610472487da01b57098d48f7e944384362514"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79c4121a2e9433ad7ef0769b9ca1f7dd7fa4c0cd501763d0a030afcbc6384481"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7850fde24197fe5cd6556e2fdba53a6d3bae67c531ea33a3d7c420b90904141"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b357970c095dc134978a68c67d845a1e3803ab7c4fbb39195bde914e7e13cf8b"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a333d878c4970b72d6c07848b90c05f6b045cf9273fc2bc04a27211721ad6118"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd9fee817f655a8f50049f685e224828abfadd436b8ff67979fc1d054b435f1"}, + {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e7816808b402129393a435ea2a509679b41246175d6e5e9f25b8692bfaa272b"}, + {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba96367db9d8a730d3a1d5996b4b7babb846c3994b8ef14008cd8660f55db59d"}, + {file = "tokenizers-0.20.3-cp310-none-win32.whl", hash = "sha256:ee31ba9d7df6a98619426283e80c6359f167e2e9882d9ce1b0254937dbd32f3f"}, + {file = "tokenizers-0.20.3-cp310-none-win_amd64.whl", hash = "sha256:a845c08fdad554fe0871d1255df85772f91236e5fd6b9287ef8b64f5807dbd0c"}, + {file = "tokenizers-0.20.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:585b51e06ca1f4839ce7759941e66766d7b060dccfdc57c4ca1e5b9a33013a90"}, + {file = "tokenizers-0.20.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61cbf11954f3b481d08723ebd048ba4b11e582986f9be74d2c3bdd9293a4538d"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef820880d5e4e8484e2fa54ff8d297bb32519eaa7815694dc835ace9130a3eea"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:67ef4dcb8841a4988cd00dd288fb95dfc8e22ed021f01f37348fd51c2b055ba9"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff1ef8bd47a02b0dc191688ccb4da53600df5d4c9a05a4b68e1e3de4823e78eb"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:444d188186eab3148baf0615b522461b41b1f0cd58cd57b862ec94b6ac9780f1"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37c04c032c1442740b2c2d925f1857885c07619224a533123ac7ea71ca5713da"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:453c7769d22231960ee0e883d1005c93c68015025a5e4ae56275406d94a3c907"}, + {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4bb31f7b2847e439766aaa9cc7bccf7ac7088052deccdb2275c952d96f691c6a"}, + {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:843729bf0f991b29655a069a2ff58a4c24375a553c70955e15e37a90dd4e045c"}, + {file = "tokenizers-0.20.3-cp311-none-win32.whl", hash = "sha256:efcce3a927b1e20ca694ba13f7a68c59b0bd859ef71e441db68ee42cf20c2442"}, + {file = "tokenizers-0.20.3-cp311-none-win_amd64.whl", hash = "sha256:88301aa0801f225725b6df5dea3d77c80365ff2362ca7e252583f2b4809c4cc0"}, + {file = "tokenizers-0.20.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:49d12a32e190fad0e79e5bdb788d05da2f20d8e006b13a70859ac47fecf6ab2f"}, + {file = "tokenizers-0.20.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:282848cacfb9c06d5e51489f38ec5aa0b3cd1e247a023061945f71f41d949d73"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abe4e08c7d0cd6154c795deb5bf81d2122f36daf075e0c12a8b050d824ef0a64"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca94fc1b73b3883c98f0c88c77700b13d55b49f1071dfd57df2b06f3ff7afd64"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef279c7e239f95c8bdd6ff319d9870f30f0d24915b04895f55b1adcf96d6c60d"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16384073973f6ccbde9852157a4fdfe632bb65208139c9d0c0bd0176a71fd67f"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:312d522caeb8a1a42ebdec87118d99b22667782b67898a76c963c058a7e41d4f"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2b7cb962564785a83dafbba0144ecb7f579f1d57d8c406cdaa7f32fe32f18ad"}, + {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:124c5882ebb88dadae1fc788a582299fcd3a8bd84fc3e260b9918cf28b8751f5"}, + {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2b6e54e71f84c4202111a489879005cb14b92616a87417f6c102c833af961ea2"}, + {file = "tokenizers-0.20.3-cp312-none-win32.whl", hash = "sha256:83d9bfbe9af86f2d9df4833c22e94d94750f1d0cd9bfb22a7bb90a86f61cdb1c"}, + {file = "tokenizers-0.20.3-cp312-none-win_amd64.whl", hash = "sha256:44def74cee574d609a36e17c8914311d1b5dbcfe37c55fd29369d42591b91cf2"}, + {file = "tokenizers-0.20.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e0b630e0b536ef0e3c8b42c685c1bc93bd19e98c0f1543db52911f8ede42cf84"}, + {file = "tokenizers-0.20.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a02d160d2b19bcbfdf28bd9a4bf11be4cb97d0499c000d95d4c4b1a4312740b6"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e3d80d89b068bc30034034b5319218c7c0a91b00af19679833f55f3becb6945"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:174a54910bed1b089226512b4458ea60d6d6fd93060254734d3bc3540953c51c"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:098b8a632b8656aa5802c46689462c5c48f02510f24029d71c208ec2c822e771"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:78c8c143e3ae41e718588281eb3e212c2b31623c9d6d40410ec464d7d6221fb5"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b26b0aadb18cd8701077362ba359a06683662d5cafe3e8e8aba10eb05c037f1"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07d7851a72717321022f3774e84aa9d595a041d643fafa2e87fbc9b18711dac0"}, + {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:bd44e48a430ada902c6266a8245f5036c4fe744fcb51f699999fbe82aa438797"}, + {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a4c186bb006ccbe1f5cc4e0380d1ce7806f5955c244074fd96abc55e27b77f01"}, + {file = "tokenizers-0.20.3-cp313-none-win32.whl", hash = "sha256:6e19e0f1d854d6ab7ea0c743d06e764d1d9a546932be0a67f33087645f00fe13"}, + {file = "tokenizers-0.20.3-cp313-none-win_amd64.whl", hash = "sha256:d50ede425c7e60966a9680d41b58b3a0950afa1bb570488e2972fa61662c4273"}, + {file = "tokenizers-0.20.3-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:9adda1ff5fb9dcdf899ceca672a4e2ce9e797adb512a6467305ca3d8bfcfbdd0"}, + {file = "tokenizers-0.20.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:6dde2cae6004ba7a3badff4a11911cae03ebf23e97eebfc0e71fef2530e5074f"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4a7fd678b35614fca708579eb95b7587a5e8a6d328171bd2488fd9f27d82be4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1b80e3c7283a01a356bd2210f53d1a4a5d32b269c2024389ed0173137708d50e"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8cc0e8176b762973758a77f0d9c4467d310e33165fb74173418ca3734944da4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5634b2e2f5f3d2b4439d2d74066e22eb4b1f04f3fea05cb2a3c12d89b5a3bcd"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b4ba635165bc1ea46f2da8e5d80b5f70f6ec42161e38d96dbef33bb39df73964"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18e4c7c64172e7789bd8b07aa3087ea87c4c4de7e90937a2aa036b5d92332536"}, + {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1f74909ef7675c26d4095a817ec3393d67f3158ca4836c233212e5613ef640c4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0e9b81321a1e05b16487d312b4264984513f8b4a7556229cafac6e88c2036b09"}, + {file = "tokenizers-0.20.3-cp37-none-win32.whl", hash = "sha256:ab48184cd58b4a03022a2ec75b54c9f600ffea9a733612c02325ed636f353729"}, + {file = "tokenizers-0.20.3-cp37-none-win_amd64.whl", hash = "sha256:60ac483cebee1c12c71878523e768df02fa17e4c54412966cb3ac862c91b36c1"}, + {file = "tokenizers-0.20.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3229ef103c89583d10b9378afa5d601b91e6337530a0988e17ca8d635329a996"}, + {file = "tokenizers-0.20.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6ac52cc24bad3de865c7e65b1c4e7b70d00938a8ae09a92a453b8f676e714ad5"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04627b7b502fa6a2a005e1bd446fa4247d89abcb1afaa1b81eb90e21aba9a60f"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c27ceb887f0e81a3c377eb4605dca7a95a81262761c0fba308d627b2abb98f2b"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65ab780194da4e1fcf5670523a2f377c4838ebf5249efe41fa1eddd2a84fb49d"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98d343134f47159e81f7f242264b0eb222e6b802f37173c8d7d7b64d5c9d1388"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2475bb004ab2009d29aff13b5047bfdb3d4b474f0aa9d4faa13a7f34dbbbb43"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b6583a65c01db1197c1eb36857ceba8ec329d53afadd268b42a6b04f4965724"}, + {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:62d00ba208358c037eeab7bfc00a905adc67b2d31b68ab40ed09d75881e114ea"}, + {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0fc7a39e5bedc817bda395a798dfe2d9c5f7c71153c90d381b5135a0328d9520"}, + {file = "tokenizers-0.20.3-cp38-none-win32.whl", hash = "sha256:84d40ee0f8550d64d3ea92dd7d24a8557a9172165bdb986c9fb2503b4fe4e3b6"}, + {file = "tokenizers-0.20.3-cp38-none-win_amd64.whl", hash = "sha256:205a45246ed7f1718cf3785cff88450ba603352412aaf220ace026384aa3f1c0"}, + {file = "tokenizers-0.20.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:93e37f0269a11dc3b1a953f1fca9707f0929ebf8b4063c591c71a0664219988e"}, + {file = "tokenizers-0.20.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f4cb0c614b0135e781de96c2af87e73da0389ac1458e2a97562ed26e29490d8d"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7eb2fb1c432f5746b22f8a7f09fc18c4156cb0031c77f53cb19379d82d43297a"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bfa8d029bb156181b006643309d6b673615a24e4ed24cf03aa191d599b996f51"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f90549622de3bf476ad9f1dd6f3f952ec3ed6ab8615ae88ef060d0c5bfad55d"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1d469c74eebf5c43fd61cd9b030e271d17198edd7bd45392e03a3c091d7d6d4"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bee8f53b2594749f4460d53253bae55d718f04e9b633efa0f5df8938bd98e4f0"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:938441babf3e5720e4459e306ef2809fb267680df9d1ff2873458b22aef60248"}, + {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7310ab23d7b0caebecc0e8be11a1146f320f5f07284000f6ea54793e83de1b75"}, + {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:16121eb030a2b13094cfec936b0c12e8b4063c5f839591ea7d0212336d8f9921"}, + {file = "tokenizers-0.20.3-cp39-none-win32.whl", hash = "sha256:401cc21ef642ee235985d747f65e18f639464d377c70836c9003df208d582064"}, + {file = "tokenizers-0.20.3-cp39-none-win_amd64.whl", hash = "sha256:7498f3ea7746133335a6adb67a77cf77227a8b82c8483f644a2e5f86fea42b8d"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e919f2e3e68bb51dc31de4fcbbeff3bdf9c1cad489044c75e2b982a91059bd3c"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b8e9608f2773996cc272156e305bd79066163a66b0390fe21750aff62df1ac07"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39270a7050deaf50f7caff4c532c01b3c48f6608d42b3eacdebdc6795478c8df"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e005466632b1c5d2d2120f6de8aa768cc9d36cd1ab7d51d0c27a114c91a1e6ee"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a07962340b36189b6c8feda552ea1bfeee6cf067ff922a1d7760662c2ee229e5"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:55046ad3dd5f2b3c67501fcc8c9cbe3e901d8355f08a3b745e9b57894855f85b"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:efcf0eb939988b627558aaf2b9dc3e56d759cad2e0cfa04fcab378e4b48fc4fd"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f3558a7ae6a6d38a77dfce12172a1e2e1bf3e8871e744a1861cd7591ea9ebe24"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d53029fe44bc70c3ff14ef512460a0cf583495a0f8e2f4b70e26eb9438e38a9"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a2a56397b2bec5a629b516b23f0f8a3e4f978c7488d4a299980f8375954b85"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e5bfaae740ef9ece000f8a07e78ac0e2b085c5ce9648f8593ddf0243c9f76d"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fbaf3ea28fedfb2283da60e710aff25492e795a7397cad8a50f1e079b65a5a70"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c47c037116310dc976eb96b008e41b9cfaba002ed8005848d4d632ee0b7ba9ae"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c31751f0721f58f5e19bb27c1acc259aeff860d8629c4e1a900b26a1979ada8e"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:c697cbd3be7a79ea250ea5f380d6f12e534c543cfb137d5c734966b3ee4f34cc"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b48971b88ef9130bf35b41b35fd857c3c4dae4a9cd7990ebc7fc03e59cc92438"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e615de179bbe060ab33773f0d98a8a8572b5883dd7dac66c1de8c056c7e748c"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da1ec842035ed9999c62e45fbe0ff14b7e8a7e02bb97688cc6313cf65e5cd755"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:6ee4954c1dd23aadc27958dad759006e71659d497dcb0ef0c7c87ea992c16ebd"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3eda46ca402751ec82553a321bf35a617b76bbed7586e768c02ccacbdda94d6d"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:de082392a85eb0055cc055c535bff2f0cc15d7a000bdc36fbf601a0f3cf8507a"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c3db46cc0647bfd88263afdb739b92017a02a87ee30945cb3e86c7e25c7c9917"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a292392f24ab9abac5cfa8197e5a6208f2e43723420217e1ceba0b4ec77816ac"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dcd91f4e60f62b20d83a87a84fe062035a1e3ff49a8c2bbdeb2d441c8e311f4"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:900991a2b8ee35961b1095db7e265342e0e42a84c1a594823d5ee9f8fb791958"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5a8d8261ca2133d4f98aa9627c748189502b3787537ba3d7e2beb4f7cfc5d627"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c4fd4d71e6deb6ddf99d8d0eab87d1d16f635898906e631914a9bae8ae9f2cfb"}, + {file = "tokenizers-0.20.3.tar.gz", hash = "sha256:2278b34c5d0dd78e087e1ca7f9b1dcbf129d80211afa645f214bd6e051037539"}, ] [package.dependencies] @@ -6962,13 +6952,13 @@ files = [ [[package]] name = "tqdm" -version = "4.66.6" +version = "4.67.0" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.6-py3-none-any.whl", hash = "sha256:223e8b5359c2efc4b30555531f09e9f2f3589bcd7fdd389271191031b49b7a63"}, - {file = "tqdm-4.66.6.tar.gz", hash = "sha256:4bdd694238bef1485ce839d67967ab50af8f9272aab687c0d7702a01da0be090"}, + {file = "tqdm-4.67.0-py3-none-any.whl", hash = "sha256:0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be"}, + {file = "tqdm-4.67.0.tar.gz", hash = "sha256:fe5a6f95e6fe0b9755e9469b77b9c3cf850048224ecaa8293d7d2d31f97d869a"}, ] [package.dependencies] @@ -6976,6 +6966,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] @@ -7031,13 +7022,13 @@ wsproto = ">=0.14" [[package]] name = "typer" -version = "0.12.5" +version = "0.13.1" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." optional = false python-versions = ">=3.7" files = [ - {file = "typer-0.12.5-py3-none-any.whl", hash = "sha256:62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b"}, - {file = "typer-0.12.5.tar.gz", hash = "sha256:f592f089bedcc8ec1b974125d64851029c3b1af145f04aca64d69410f0c9b722"}, + {file = "typer-0.13.1-py3-none-any.whl", hash = "sha256:5b59580fd925e89463a29d363e0a43245ec02765bde9fb77d39e5d0f29dd7157"}, + {file = "typer-0.13.1.tar.gz", hash = "sha256:9d444cb96cc268ce6f8b94e13b4335084cef4c079998a9f4851a90229a3bd25c"}, ] [package.dependencies] @@ -7359,19 +7350,15 @@ wasabi = ">=0.9.1,<1.2.0" [[package]] name = "webcolors" -version = "24.8.0" +version = "24.11.1" description = "A library for working with the color formats defined by HTML and CSS." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "webcolors-24.8.0-py3-none-any.whl", hash = "sha256:fc4c3b59358ada164552084a8ebee637c221e4059267d0f8325b3b560f6c7f0a"}, - {file = "webcolors-24.8.0.tar.gz", hash = "sha256:08b07af286a01bcd30d583a7acadf629583d1f79bfef27dd2c2c5c263817277d"}, + {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, + {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, ] -[package.extras] -docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] -tests = ["coverage[toml]"] - [[package]] name = "webencodings" version = "0.5.1" @@ -7586,93 +7573,93 @@ h11 = ">=0.9.0,<1" [[package]] name = "yarl" -version = "1.17.0" +version = "1.17.2" description = "Yet another URL library" optional = false python-versions = ">=3.9" files = [ - {file = "yarl-1.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2d8715edfe12eee6f27f32a3655f38d6c7410deb482158c0b7d4b7fad5d07628"}, - {file = "yarl-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1803bf2a7a782e02db746d8bd18f2384801bc1d108723840b25e065b116ad726"}, - {file = "yarl-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e66589110e20c2951221a938fa200c7aa134a8bdf4e4dc97e6b21539ff026d4"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7069d411cfccf868e812497e0ec4acb7c7bf8d684e93caa6c872f1e6f5d1664d"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbf70ba16118db3e4b0da69dcde9d4d4095d383c32a15530564c283fa38a7c52"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0bc53cc349675b32ead83339a8de79eaf13b88f2669c09d4962322bb0f064cbc"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6aa18a402d1c80193ce97c8729871f17fd3e822037fbd7d9b719864018df746"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d89c5bc701861cfab357aa0cd039bc905fe919997b8c312b4b0c358619c38d4d"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b728bdf38ca58f2da1d583e4af4ba7d4cd1a58b31a363a3137a8159395e7ecc7"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:5542e57dc15d5473da5a39fbde14684b0cc4301412ee53cbab677925e8497c11"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e564b57e5009fb150cb513804d7e9e9912fee2e48835638f4f47977f88b4a39c"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:eb3c4cff524b4c1c1dba3a6da905edb1dfd2baf6f55f18a58914bbb2d26b59e1"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:05e13f389038842da930d439fbed63bdce3f7644902714cb68cf527c971af804"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:153c38ee2b4abba136385af4467459c62d50f2a3f4bde38c7b99d43a20c143ef"}, - {file = "yarl-1.17.0-cp310-cp310-win32.whl", hash = "sha256:4065b4259d1ae6f70fd9708ffd61e1c9c27516f5b4fae273c41028afcbe3a094"}, - {file = "yarl-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:abf366391a02a8335c5c26163b5fe6f514cc1d79e74d8bf3ffab13572282368e"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:19a4fe0279626c6295c5b0c8c2bb7228319d2e985883621a6e87b344062d8135"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cadd0113f4db3c6b56868d6a19ca6286f5ccfa7bc08c27982cf92e5ed31b489a"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:60d6693eef43215b1ccfb1df3f6eae8db30a9ff1e7989fb6b2a6f0b468930ee8"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb8bf3843e1fa8cf3fe77813c512818e57368afab7ebe9ef02446fe1a10b492"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d2a5b35fd1d8d90443e061d0c8669ac7600eec5c14c4a51f619e9e105b136715"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5bf17b32f392df20ab5c3a69d37b26d10efaa018b4f4e5643c7520d8eee7ac7"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48f51b529b958cd06e78158ff297a8bf57b4021243c179ee03695b5dbf9cb6e1"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fcaa06bf788e19f913d315d9c99a69e196a40277dc2c23741a1d08c93f4d430"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:32f3ee19ff0f18a7a522d44e869e1ebc8218ad3ae4ebb7020445f59b4bbe5897"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:a4fb69a81ae2ec2b609574ae35420cf5647d227e4d0475c16aa861dd24e840b0"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7bacc8b77670322132a1b2522c50a1f62991e2f95591977455fd9a398b4e678d"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:437bf6eb47a2d20baaf7f6739895cb049e56896a5ffdea61a4b25da781966e8b"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:30534a03c87484092080e3b6e789140bd277e40f453358900ad1f0f2e61fc8ec"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b30df4ff98703649915144be6f0df3b16fd4870ac38a09c56d5d9e54ff2d5f96"}, - {file = "yarl-1.17.0-cp311-cp311-win32.whl", hash = "sha256:263b487246858e874ab53e148e2a9a0de8465341b607678106829a81d81418c6"}, - {file = "yarl-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:07055a9e8b647a362e7d4810fe99d8f98421575e7d2eede32e008c89a65a17bd"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:84095ab25ba69a8fa3fb4936e14df631b8a71193fe18bd38be7ecbe34d0f5512"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:02608fb3f6df87039212fc746017455ccc2a5fc96555ee247c45d1e9f21f1d7b"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13468d291fe8c12162b7cf2cdb406fe85881c53c9e03053ecb8c5d3523822cd9"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8da3f8f368fb7e2f052fded06d5672260c50b5472c956a5f1bd7bf474ae504ab"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec0507ab6523980bed050137007c76883d941b519aca0e26d4c1ec1f297dd646"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08fc76df7fd8360e9ff30e6ccc3ee85b8dbd6ed5d3a295e6ec62bcae7601b932"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d522f390686acb6bab2b917dd9ca06740c5080cd2eaa5aef8827b97e967319d"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:147c527a80bb45b3dcd6e63401af8ac574125d8d120e6afe9901049286ff64ef"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:24cf43bcd17a0a1f72284e47774f9c60e0bf0d2484d5851f4ddf24ded49f33c6"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c28a44b9e0fba49c3857360e7ad1473fc18bc7f6659ca08ed4f4f2b9a52c75fa"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:350cacb2d589bc07d230eb995d88fcc646caad50a71ed2d86df533a465a4e6e1"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:fd1ab1373274dea1c6448aee420d7b38af163b5c4732057cd7ee9f5454efc8b1"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4934e0f96dadc567edc76d9c08181633c89c908ab5a3b8f698560124167d9488"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8d0a278170d75c88e435a1ce76557af6758bfebc338435b2eba959df2552163e"}, - {file = "yarl-1.17.0-cp312-cp312-win32.whl", hash = "sha256:61584f33196575a08785bb56db6b453682c88f009cd9c6f338a10f6737ce419f"}, - {file = "yarl-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:9987a439ad33a7712bd5bbd073f09ad10d38640425fa498ecc99d8aa064f8fc4"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8deda7b8eb15a52db94c2014acdc7bdd14cb59ec4b82ac65d2ad16dc234a109e"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56294218b348dcbd3d7fce0ffd79dd0b6c356cb2a813a1181af730b7c40de9e7"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1fab91292f51c884b290ebec0b309a64a5318860ccda0c4940e740425a67b6b7"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cf93fa61ff4d9c7d40482ce1a2c9916ca435e34a1b8451e17f295781ccc034f"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:261be774a0d71908c8830c33bacc89eef15c198433a8cc73767c10eeeb35a7d0"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:deec9693b67f6af856a733b8a3e465553ef09e5e8ead792f52c25b699b8f9e6e"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c804b07622ba50a765ca7fb8145512836ab65956de01307541def869e4a456c9"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d013a7c9574e98c14831a8f22d27277688ec3b2741d0188ac01a910b009987a"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e2cfcba719bd494c7413dcf0caafb51772dec168c7c946e094f710d6aa70494e"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c068aba9fc5b94dfae8ea1cedcbf3041cd4c64644021362ffb750f79837e881f"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3616df510ffac0df3c9fa851a40b76087c6c89cbcea2de33a835fc80f9faac24"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:755d6176b442fba9928a4df787591a6a3d62d4969f05c406cad83d296c5d4e05"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c18f6e708d1cf9ff5b1af026e697ac73bea9cb70ee26a2b045b112548579bed2"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5b937c216b6dee8b858c6afea958de03c5ff28406257d22b55c24962a2baf6fd"}, - {file = "yarl-1.17.0-cp313-cp313-win32.whl", hash = "sha256:d0131b14cb545c1a7bd98f4565a3e9bdf25a1bd65c83fc156ee5d8a8499ec4a3"}, - {file = "yarl-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:01c96efa4313c01329e88b7e9e9e1b2fc671580270ddefdd41129fa8d0db7696"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0d44f67e193f0a7acdf552ecb4d1956a3a276c68e7952471add9f93093d1c30d"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:16ea0aa5f890cdcb7ae700dffa0397ed6c280840f637cd07bffcbe4b8d68b985"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cf5469dc7dcfa65edf5cc3a6add9f84c5529c6b556729b098e81a09a92e60e51"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e662bf2f6e90b73cf2095f844e2bc1fda39826472a2aa1959258c3f2a8500a2f"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8260e88f1446904ba20b558fa8ce5d0ab9102747238e82343e46d056d7304d7e"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dc16477a4a2c71e64c5d3d15d7ae3d3a6bb1e8b955288a9f73c60d2a391282f"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46027e326cecd55e5950184ec9d86c803f4f6fe4ba6af9944a0e537d643cdbe0"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc95e46c92a2b6f22e70afe07e34dbc03a4acd07d820204a6938798b16f4014f"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:16ca76c7ac9515320cd09d6cc083d8d13d1803f6ebe212b06ea2505fd66ecff8"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:eb1a5b97388f2613f9305d78a3473cdf8d80c7034e554d8199d96dcf80c62ac4"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:41fd5498975418cdc34944060b8fbeec0d48b2741068077222564bea68daf5a6"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:146ca582ed04a5664ad04b0e0603934281eaab5c0115a5a46cce0b3c061a56a1"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:6abb8c06107dbec97481b2392dafc41aac091a5d162edf6ed7d624fe7da0587a"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d14be4613dd4f96c25feb4bd8c0d8ce0f529ab0ae555a17df5789e69d8ec0c5"}, - {file = "yarl-1.17.0-cp39-cp39-win32.whl", hash = "sha256:174d6a6cad1068f7850702aad0c7b1bca03bcac199ca6026f84531335dfc2646"}, - {file = "yarl-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:6af417ca2c7349b101d3fd557ad96b4cd439fdb6ab0d288e3f64a068eea394d0"}, - {file = "yarl-1.17.0-py3-none-any.whl", hash = "sha256:62dd42bb0e49423f4dd58836a04fcf09c80237836796025211bbe913f1524993"}, - {file = "yarl-1.17.0.tar.gz", hash = "sha256:d3f13583f378930377e02002b4085a3d025b00402d5a80911726d43a67911cd9"}, + {file = "yarl-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:93771146ef048b34201bfa382c2bf74c524980870bb278e6df515efaf93699ff"}, + {file = "yarl-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8281db240a1616af2f9c5f71d355057e73a1409c4648c8949901396dc0a3c151"}, + {file = "yarl-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:170ed4971bf9058582b01a8338605f4d8c849bd88834061e60e83b52d0c76870"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc61b005f6521fcc00ca0d1243559a5850b9dd1e1fe07b891410ee8fe192d0c0"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:871e1b47eec7b6df76b23c642a81db5dd6536cbef26b7e80e7c56c2fd371382e"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a58a2f2ca7aaf22b265388d40232f453f67a6def7355a840b98c2d547bd037f"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:736bb076f7299c5c55dfef3eb9e96071a795cb08052822c2bb349b06f4cb2e0a"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8fd51299e21da709eabcd5b2dd60e39090804431292daacbee8d3dabe39a6bc0"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:358dc7ddf25e79e1cc8ee16d970c23faee84d532b873519c5036dbb858965795"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:50d866f7b1a3f16f98603e095f24c0eeba25eb508c85a2c5939c8b3870ba2df8"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8b9c4643e7d843a0dca9cd9d610a0876e90a1b2cbc4c5ba7930a0d90baf6903f"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d63123bfd0dce5f91101e77c8a5427c3872501acece8c90df457b486bc1acd47"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:4e76381be3d8ff96a4e6c77815653063e87555981329cf8f85e5be5abf449021"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:734144cd2bd633a1516948e477ff6c835041c0536cef1d5b9a823ae29899665b"}, + {file = "yarl-1.17.2-cp310-cp310-win32.whl", hash = "sha256:26bfb6226e0c157af5da16d2d62258f1ac578d2899130a50433ffee4a5dfa673"}, + {file = "yarl-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:76499469dcc24759399accd85ec27f237d52dec300daaca46a5352fcbebb1071"}, + {file = "yarl-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:792155279dc093839e43f85ff7b9b6493a8eaa0af1f94f1f9c6e8f4de8c63500"}, + {file = "yarl-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38bc4ed5cae853409cb193c87c86cd0bc8d3a70fd2268a9807217b9176093ac6"}, + {file = "yarl-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4a8c83f6fcdc327783bdc737e8e45b2e909b7bd108c4da1892d3bc59c04a6d84"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6d5fed96f0646bfdf698b0a1cebf32b8aae6892d1bec0c5d2d6e2df44e1e2d"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:782ca9c58f5c491c7afa55518542b2b005caedaf4685ec814fadfcee51f02493"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ff6af03cac0d1a4c3c19e5dcc4c05252411bf44ccaa2485e20d0a7c77892ab6e"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a3f47930fbbed0f6377639503848134c4aa25426b08778d641491131351c2c8"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1fa68a3c921365c5745b4bd3af6221ae1f0ea1bf04b69e94eda60e57958907f"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:187df91395c11e9f9dc69b38d12406df85aa5865f1766a47907b1cc9855b6303"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:93d1c8cc5bf5df401015c5e2a3ce75a5254a9839e5039c881365d2a9dcfc6dc2"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:11d86c6145ac5c706c53d484784cf504d7d10fa407cb73b9d20f09ff986059ef"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c42774d1d1508ec48c3ed29e7b110e33f5e74a20957ea16197dbcce8be6b52ba"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8e589379ef0407b10bed16cc26e7392ef8f86961a706ade0a22309a45414d7"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1056cadd5e850a1c026f28e0704ab0a94daaa8f887ece8dfed30f88befb87bb0"}, + {file = "yarl-1.17.2-cp311-cp311-win32.whl", hash = "sha256:be4c7b1c49d9917c6e95258d3d07f43cfba2c69a6929816e77daf322aaba6628"}, + {file = "yarl-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:ac8eda86cc75859093e9ce390d423aba968f50cf0e481e6c7d7d63f90bae5c9c"}, + {file = "yarl-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:dd90238d3a77a0e07d4d6ffdebc0c21a9787c5953a508a2231b5f191455f31e9"}, + {file = "yarl-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c74f0b0472ac40b04e6d28532f55cac8090e34c3e81f118d12843e6df14d0909"}, + {file = "yarl-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4d486ddcaca8c68455aa01cf53d28d413fb41a35afc9f6594a730c9779545876"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25b7e93f5414b9a983e1a6c1820142c13e1782cc9ed354c25e933aebe97fcf2"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a0baff7827a632204060f48dca9e63fbd6a5a0b8790c1a2adfb25dc2c9c0d50"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:460024cacfc3246cc4d9f47a7fc860e4fcea7d1dc651e1256510d8c3c9c7cde0"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5870d620b23b956f72bafed6a0ba9a62edb5f2ef78a8849b7615bd9433384171"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2941756754a10e799e5b87e2319bbec481ed0957421fba0e7b9fb1c11e40509f"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9611b83810a74a46be88847e0ea616794c406dbcb4e25405e52bff8f4bee2d0a"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:cd7e35818d2328b679a13268d9ea505c85cd773572ebb7a0da7ccbca77b6a52e"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6b981316fcd940f085f646b822c2ff2b8b813cbd61281acad229ea3cbaabeb6b"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:688058e89f512fb7541cb85c2f149c292d3fa22f981d5a5453b40c5da49eb9e8"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:56afb44a12b0864d17b597210d63a5b88915d680f6484d8d202ed68ade38673d"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:17931dfbb84ae18b287279c1f92b76a3abcd9a49cd69b92e946035cff06bcd20"}, + {file = "yarl-1.17.2-cp312-cp312-win32.whl", hash = "sha256:ff8d95e06546c3a8c188f68040e9d0360feb67ba8498baf018918f669f7bc39b"}, + {file = "yarl-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:4c840cc11163d3c01a9d8aad227683c48cd3e5be5a785921bcc2a8b4b758c4f3"}, + {file = "yarl-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:3294f787a437cb5d81846de3a6697f0c35ecff37a932d73b1fe62490bef69211"}, + {file = "yarl-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f1e7fedb09c059efee2533119666ca7e1a2610072076926fa028c2ba5dfeb78c"}, + {file = "yarl-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:da9d3061e61e5ae3f753654813bc1cd1c70e02fb72cf871bd6daf78443e9e2b1"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91c012dceadc695ccf69301bfdccd1fc4472ad714fe2dd3c5ab4d2046afddf29"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f11fd61d72d93ac23718d393d2a64469af40be2116b24da0a4ca6922df26807e"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:46c465ad06971abcf46dd532f77560181387b4eea59084434bdff97524444032"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef6eee1a61638d29cd7c85f7fd3ac7b22b4c0fabc8fd00a712b727a3e73b0685"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4434b739a8a101a837caeaa0137e0e38cb4ea561f39cb8960f3b1e7f4967a3fc"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:752485cbbb50c1e20908450ff4f94217acba9358ebdce0d8106510859d6eb19a"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:17791acaa0c0f89323c57da7b9a79f2174e26d5debbc8c02d84ebd80c2b7bff8"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5c6ea72fe619fee5e6b5d4040a451d45d8175f560b11b3d3e044cd24b2720526"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db5ac3871ed76340210fe028f535392f097fb31b875354bcb69162bba2632ef4"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7a1606ba68e311576bcb1672b2a1543417e7e0aa4c85e9e718ba6466952476c0"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9bc27dd5cfdbe3dc7f381b05e6260ca6da41931a6e582267d5ca540270afeeb2"}, + {file = "yarl-1.17.2-cp313-cp313-win32.whl", hash = "sha256:52492b87d5877ec405542f43cd3da80bdcb2d0c2fbc73236526e5f2c28e6db28"}, + {file = "yarl-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:8e1bf59e035534ba4077f5361d8d5d9194149f9ed4f823d1ee29ef3e8964ace3"}, + {file = "yarl-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c556fbc6820b6e2cda1ca675c5fa5589cf188f8da6b33e9fc05b002e603e44fa"}, + {file = "yarl-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f2f44a4247461965fed18b2573f3a9eb5e2c3cad225201ee858726cde610daca"}, + {file = "yarl-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3a3ede8c248f36b60227eb777eac1dbc2f1022dc4d741b177c4379ca8e75571a"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2654caaf5584449d49c94a6b382b3cb4a246c090e72453493ea168b931206a4d"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d41c684f286ce41fa05ab6af70f32d6da1b6f0457459a56cf9e393c1c0b2217"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2270d590997445a0dc29afa92e5534bfea76ba3aea026289e811bf9ed4b65a7f"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18662443c6c3707e2fc7fad184b4dc32dd428710bbe72e1bce7fe1988d4aa654"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:75ac158560dec3ed72f6d604c81090ec44529cfb8169b05ae6fcb3e986b325d9"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1fee66b32e79264f428dc8da18396ad59cc48eef3c9c13844adec890cd339db5"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:585ce7cd97be8f538345de47b279b879e091c8b86d9dbc6d98a96a7ad78876a3"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c019abc2eca67dfa4d8fb72ba924871d764ec3c92b86d5b53b405ad3d6aa56b0"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c6e659b9a24d145e271c2faf3fa6dd1fcb3e5d3f4e17273d9e0350b6ab0fe6e2"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:d17832ba39374134c10e82d137e372b5f7478c4cceeb19d02ae3e3d1daed8721"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bc3003710e335e3f842ae3fd78efa55f11a863a89a72e9a07da214db3bf7e1f8"}, + {file = "yarl-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f5ffc6b7ace5b22d9e73b2a4c7305740a339fbd55301d52735f73e21d9eb3130"}, + {file = "yarl-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:48e424347a45568413deec6f6ee2d720de2cc0385019bedf44cd93e8638aa0ed"}, + {file = "yarl-1.17.2-py3-none-any.whl", hash = "sha256:dd7abf4f717e33b7487121faf23560b3a50924f80e4bef62b22dab441ded8f3b"}, + {file = "yarl-1.17.2.tar.gz", hash = "sha256:753eaaa0c7195244c84b5cc159dc8204b7fd99f716f11198f999f2332a86b178"}, ] [package.dependencies] diff --git a/apps/chatbot/pyproject.toml b/apps/chatbot/pyproject.toml index 8cd9acb07c..3087002b7b 100644 --- a/apps/chatbot/pyproject.toml +++ b/apps/chatbot/pyproject.toml @@ -38,6 +38,7 @@ llama-index-postprocessor-presidio = "^0.2.0" langfuse = "^2.53.9" [tool.poetry.group.dev.dependencies] +httpx = "^0.27.2" gradio = "^4.36.1" jupyter = "^1.0.0" pytest = "^8.3.3" diff --git a/apps/chatbot/scripts/create_redis_index.sh b/apps/chatbot/scripts/create_redis_index.sh new file mode 100755 index 0000000000..d4ae13ef0f --- /dev/null +++ b/apps/chatbot/scripts/create_redis_index.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +python src/modules/create_vector_index.py --params config/params.yaml diff --git a/apps/chatbot/scripts/dynamodb-init.sh b/apps/chatbot/scripts/dynamodb-init.sh new file mode 100755 index 0000000000..6403db6937 --- /dev/null +++ b/apps/chatbot/scripts/dynamodb-init.sh @@ -0,0 +1,20 @@ +#!/bin/bash +aws dynamodb create-table \ +--endpoint-url http://dynamodb:8000 \ +--cli-input-json file://./docker/files/dynamodb_schemas/sessions.json \ +--region eu-south-1 + +aws dynamodb create-table \ +--endpoint-url http://dynamodb:8000 \ +--cli-input-json file://./docker/files/dynamodb_schemas/queries.json \ +--region eu-south-1 + +aws dynamodb scan \ + --table-name chatbot-local-sessions \ + --endpoint-url http://dynamodb:8000 \ + --region eu-south-1 + +aws dynamodb scan \ + --table-name chatbot-local-queries \ + --endpoint-url http://dynamodb:8000 \ + --region eu-south-1 diff --git a/apps/chatbot/scripts/run.local.sh b/apps/chatbot/scripts/run.local.sh new file mode 100755 index 0000000000..8d39c6a4d5 --- /dev/null +++ b/apps/chatbot/scripts/run.local.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +echo '-=-=-=-=-=-=-=-=-= init DynamoDB -==-=-=-=-=-=-=-=-' +./scripts/dynamodb-init.sh + +echo '-=-=-=-=-=-=-= create redis index =-=-=-=-=-=-=-=-' +./scripts/create_redis_index.sh + +echo '-=-=-=-=-=-=-=-=-= run FastAPI =-==-=-=-=-=-=-=-=-' +fastapi dev src/app/main.py --port 8080 --host 0.0.0.0 diff --git a/apps/chatbot/scripts/run.test.sh b/apps/chatbot/scripts/run.test.sh new file mode 100755 index 0000000000..a32fd5b22c --- /dev/null +++ b/apps/chatbot/scripts/run.test.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +echo '-=-=-=-=-=-=-=-=-= init DynamoDB -==-=-=-=-=-=-=-=-' +./scripts/dynamodb-init.sh + +echo '-=-=-=-=-=-=-= create redis index =-=-=-=-=-=-=-=-' +./scripts/create_redis_index.sh + +echo '-=-=-=-=-=-=-=-=-=- run pytest -=-==-=-=-=-=-=-=-=-' +pytest -p no:warnings diff --git a/apps/chatbot/src/app/main.py b/apps/chatbot/src/app/main.py index 0654a442e2..3a6b54329c 100644 --- a/apps/chatbot/src/app/main.py +++ b/apps/chatbot/src/app/main.py @@ -6,9 +6,8 @@ import uuid import boto3 import datetime -import time import jwt -from typing import Annotated +from typing import Annotated, List from boto3.dynamodb.conditions import Key from botocore.exceptions import BotoCoreError, ClientError from fastapi import FastAPI, HTTPException, Header @@ -24,9 +23,15 @@ chatbot = Chatbot(params, prompts) +class QueryFromThePast(BaseModel): + id: str | None = None + question: str + answer: str | None = None + class Query(BaseModel): question: str queriedAt: str | None = None + history: List[QueryFromThePast] | None = None class QueryFeedback(BaseModel): badAnswer: bool @@ -75,7 +80,11 @@ async def query_creation ( now = datetime.datetime.now(datetime.UTC) userId = current_user_id(authorization) session = find_or_create_session(userId, now=now) - answer = chatbot.chat_generate(query.question) + answer = chatbot.chat_generate( + query_str = query.question, + messages = [item.dict() for item in query.history] if query.history else None + ) + if query.queriedAt is None: queriedAt = now.isoformat() @@ -291,6 +300,7 @@ async def query_feedback ( handler = mangum.Mangum(app, lifespan="off") + if __name__ == "__main__": uvicorn.run( "main:app", diff --git a/apps/chatbot/src/app/test_main.py b/apps/chatbot/src/app/test_main.py new file mode 100644 index 0000000000..408841ce76 --- /dev/null +++ b/apps/chatbot/src/app/test_main.py @@ -0,0 +1,45 @@ +from fastapi.testclient import TestClient +from src.app.main import app + +client = TestClient(app) + +def test_get_healthz(): + response = client.get("/healthz") + assert response.status_code == 200 + assert response.json() == {"message": "OK"} + +def test_post_queries(): + response = client.post( + "/queries", + json={ + "question": "come ti chiami?", + "queriedAt": "2024-11-11" + } + ) + # response example + # { + # "id": '8a0f7f9a-b794-483e-9e09-809c31b75334', + # "sessionId": "f163a47d-12b4-483d-9847-df6147a84370", + # "question": "come ti chiami?", + # "answer": "Scusa, non sono riuscito ad elaborare questa domanda.\nChiedimi un'altra domanda.", + # "createdAt": "2024-11-19T10:02:13.348758+00:00", + # "queriedAt": "2024-11-11", + # "badAnswer": False + # } + assert response.status_code == 200 + json = response.json() + assert 'id' in json.keys() + assert 'sessionId' in json.keys() + assert 'question' in json.keys() + assert 'answer' in json.keys() + assert 'createdAt' in json.keys() + assert 'queriedAt' in json.keys() + assert 'badAnswer' in json.keys() + +def test_get_queries(): + response = client.get( + "/queries" + ) + # json = response.json() + assert response.status_code == 200 + diff --git a/apps/chatbot/src/modules/create_vector_index.py b/apps/chatbot/src/modules/create_vector_index.py index 0968adcb55..fe9767e252 100644 --- a/apps/chatbot/src/modules/create_vector_index.py +++ b/apps/chatbot/src/modules/create_vector_index.py @@ -14,8 +14,6 @@ DOCUMENTATION_DIR = os.getenv("CHB_DOCUMENTATION_DIR") -AWS_S3_BUCKET = os.getenv("CHB_AWS_S3_BUCKET", os.getenv("AWS_S3_BUCKET")) - if __name__ == "__main__": parser = argparse.ArgumentParser() diff --git a/apps/chatbot/src/modules/test_chatbot.py b/apps/chatbot/src/modules/test_chatbot.py index 3a3c3aa7a2..d8fe7171d1 100644 --- a/apps/chatbot/src/modules/test_chatbot.py +++ b/apps/chatbot/src/modules/test_chatbot.py @@ -46,8 +46,8 @@ def test_messages_to_chathistory(): def test_pii_mask(): - masked_str = CHATBOT.mask_pii("Il mio nome ĆØ Mario Rossi") - assert masked_str == "Il mio nome ĆØ " + masked_str = CHATBOT.mask_pii("Il mio nome e' Mario Rossi") + assert masked_str == "Il mio nome e' " def test_connection_langfuse(): diff --git a/apps/chatbot/src/modules/vector_database.py b/apps/chatbot/src/modules/vector_database.py index 269b2eac30..8ac75a093a 100644 --- a/apps/chatbot/src/modules/vector_database.py +++ b/apps/chatbot/src/modules/vector_database.py @@ -43,9 +43,16 @@ PROVIDER = os.getenv("CHB_PROVIDER") assert PROVIDER in ["google", "aws"] -TODAY = datetime.now(pytz.timezone("Europe/Rome")).strftime("%Y-%m-%d--%H:%M:%S") -INDEX_ID = get_ssm_parameter(os.getenv("CHB_LLAMAINDEX_INDEX_ID")) -NEW_INDEX_ID = f"index--{TODAY}" +INDEX_ID = get_ssm_parameter(os.getenv("CHB_LLAMAINDEX_INDEX_ID"), 'default-index') + +def calculate_new_index_id(current_index_id): + if current_index_id == 'default-index': + return current_index_id + TODAY = datetime.now(pytz.timezone("Europe/Rome")).strftime("%Y-%m-%d--%H:%M:%S") + rtn = f"index--{TODAY}" + return rtn + +NEW_INDEX_ID = calculate_new_index_id(INDEX_ID) REDIS_URL = os.getenv("CHB_REDIS_URL") WEBSITE_URL = os.getenv("CHB_WEBSITE_URL") diff --git a/apps/cloudfront-functions/CHANGELOG.md b/apps/cloudfront-functions/CHANGELOG.md index 4dd7479a3f..5a41c7f86c 100644 --- a/apps/cloudfront-functions/CHANGELOG.md +++ b/apps/cloudfront-functions/CHANGELOG.md @@ -1,5 +1,11 @@ # cloudfront-functions +## 0.0.4 + +### Patch Changes + +- f591264: Add special cases to exceptions list to avoid false positives that cause 404 + ## 0.0.3 ### Patch Changes diff --git a/apps/cloudfront-functions/package.json b/apps/cloudfront-functions/package.json index 1ae3805a39..116d5e498c 100644 --- a/apps/cloudfront-functions/package.json +++ b/apps/cloudfront-functions/package.json @@ -1,6 +1,6 @@ { "name": "cloudfront-functions", - "version": "0.0.3", + "version": "0.0.4", "private": true, "scripts": { "clean": "shx rm -rf dist/", diff --git a/apps/cloudfront-functions/src/viewer-request-handler.ts b/apps/cloudfront-functions/src/viewer-request-handler.ts index bf58211057..025839c86f 100644 --- a/apps/cloudfront-functions/src/viewer-request-handler.ts +++ b/apps/cloudfront-functions/src/viewer-request-handler.ts @@ -20,7 +20,7 @@ const handler = ( const isHomepage = uri === '/'; // List of special cases (add more as needed) - const specialCases: readonly string[] = ['.bollo']; + const specialCases: readonly string[] = ['.bollo', '.a', '.b']; // Function to check if URI ends with any of the special cases const isSpecialCase = specialCases.some((caseExt) => uri.endsWith(caseExt)); diff --git a/apps/nextjs-website/.env.default b/apps/nextjs-website/.env.default index e0562625e6..44fc1ec1a0 100644 --- a/apps/nextjs-website/.env.default +++ b/apps/nextjs-website/.env.default @@ -12,6 +12,7 @@ NEXT_PUBLIC_CHATBOT_HOST="" NEXT_PUBLIC_CHATBOT_ACTIVE="" NEXT_PUBLIC_COOKIE_DOMAIN_SCRIPT="a8c87faf-1769-4c95-a2e5-a6fff26eadab-test" NEXT_PUBLIC_CHATBOT_HOST="http://localhost:8000" +NEXT_PUBLIC_CHAT_MAX_HISTORY_MESSAGES=10 NEXT_PUBLIC_CHATBOT_ACTIVE="false" STRAPI_ENDPOINT="http://127.0.0.1:1337" STRAPI_API_TOKEN="aStrapiApiToken" diff --git a/apps/nextjs-website/CHANGELOG.md b/apps/nextjs-website/CHANGELOG.md index b50777c6b6..b4e15e6da9 100644 --- a/apps/nextjs-website/CHANGELOG.md +++ b/apps/nextjs-website/CHANGELOG.md @@ -1,5 +1,16 @@ # nextjs-website +## 4.12.0 + +### Minor Changes + +- aa761a7: Chat uses local storage to save chat session information + +### Patch Changes + +- 63a2efc: Update .env.default files for strapi and nextjs, update README.md +- 2ce3156: Fix feedback in chatbot hook + ## 4.11.0 ### Minor Changes diff --git a/apps/nextjs-website/package.json b/apps/nextjs-website/package.json index c836326619..75ca40b1c6 100644 --- a/apps/nextjs-website/package.json +++ b/apps/nextjs-website/package.json @@ -1,6 +1,6 @@ { "name": "nextjs-website", - "version": "4.11.0", + "version": "4.12.0", "private": true, "scripts": { "download-docs": "./scripts/fetch-docs.sh docs/from-gitbook", diff --git a/apps/nextjs-website/src/config.ts b/apps/nextjs-website/src/config.ts index 3c472bdf0f..41113bf412 100644 --- a/apps/nextjs-website/src/config.ts +++ b/apps/nextjs-website/src/config.ts @@ -14,6 +14,8 @@ export const allowCrawler = process.env.ALLOW_CRAWLER === 'true'; export const isProduction = process.env.NEXT_PUBLIC_ENVIRONMENT === 'prod'; export const isChatbotActive = process.env.NEXT_PUBLIC_CHATBOT_ACTIVE === 'true'; +export const chatMaxHistoryMessages = + parseInt(`${process.env.NEXT_PUBLIC_CHAT_MAX_HISTORY_MESSAGES}`) || 10; export const amplifyConfig = { Auth: { diff --git a/apps/nextjs-website/src/helpers/chatbot.helper.tsx b/apps/nextjs-website/src/helpers/chatbot.helper.tsx index 6848c04e71..8e3b9a3761 100644 --- a/apps/nextjs-website/src/helpers/chatbot.helper.tsx +++ b/apps/nextjs-website/src/helpers/chatbot.helper.tsx @@ -14,6 +14,7 @@ import { } from '@/lib/chatbot/queries'; import { pipe } from 'fp-ts/lib/function'; import * as E from 'fp-ts/lib/Either'; +import { chatMaxHistoryMessages } from '@/config'; const HISTORY_PAGE_SIZE = 10; const EXPIRE_CHAT_DATE_LOCAL_STORAGE_KEY = 'expireChatDate'; @@ -133,6 +134,7 @@ export const useChatbot = (isUserAuthenticated: boolean) => { sendChatbotQuery({ question: queryMessage, queriedAt: queriedAt, + history: previousQueries.slice(-chatMaxHistoryMessages), }) .then((response) => { setIsAwaitingResponse(false); diff --git a/apps/nextjs-website/src/lib/chatbot/__tests__/chatbotApi.test.ts b/apps/nextjs-website/src/lib/chatbot/__tests__/chatbotApi.test.ts index 0f1c555c7d..767495f832 100644 --- a/apps/nextjs-website/src/lib/chatbot/__tests__/chatbotApi.test.ts +++ b/apps/nextjs-website/src/lib/chatbot/__tests__/chatbotApi.test.ts @@ -21,6 +21,18 @@ const postQueryResponses = { queriedAt: '2024-02-08T11:12:02.142Z', question: 'question', answer: 'answer', + history: [ + { + id: '1', + question: 'question', + answer: 'answer', + }, + { + id: '2', + question: 'question', + answer: 'answer', + }, + ], createdAt: '2024-02-08T11:12:02.438Z', badAnswer: false, }, diff --git a/apps/nextjs-website/src/lib/chatbot/queries.ts b/apps/nextjs-website/src/lib/chatbot/queries.ts index 428b6d0a0c..dac9a6f646 100644 --- a/apps/nextjs-website/src/lib/chatbot/queries.ts +++ b/apps/nextjs-website/src/lib/chatbot/queries.ts @@ -1,4 +1,5 @@ import * as t from 'io-ts/lib'; +import { NullToUndefinedCodec } from '../strapi/codecs/NullToUndefinedCodec'; export const QueryCodec = t.strict({ id: t.string, @@ -10,14 +11,21 @@ export const QueryCodec = t.strict({ createdAt: t.string, }); +const ChatbotHistoryCodec = t.array(QueryCodec); + +export const QueryWithHistoryCodec = t.intersection([ + QueryCodec, + t.strict({ + history: t.union([NullToUndefinedCodec, ChatbotHistoryCodec]), + }), +]); + export type RemoteQuery = t.TypeOf; export const ChatbotQueriesCodec = t.array(QueryCodec); export type ChatbotQueries = t.TypeOf; -export type QueryInput = Pick; - export type Answer = Pick; export type Query = { @@ -30,6 +38,15 @@ export type Query = { readonly createdAt: string | null; }; +export type QueryWithHistory = Query & { + readonly history?: readonly Pick[]; +}; + +export type QueryInput = Pick< + QueryWithHistory, + 'question' | 'queriedAt' | 'history' +>; + export const SessionCodec = t.strict({ id: t.string, title: t.string, diff --git a/apps/nextjs-website/src/lib/strapi/__tests__/urlReplaceMap.test.ts b/apps/nextjs-website/src/lib/strapi/__tests__/urlReplaceMap.test.ts index 218ef4e89a..105f35cc98 100644 --- a/apps/nextjs-website/src/lib/strapi/__tests__/urlReplaceMap.test.ts +++ b/apps/nextjs-website/src/lib/strapi/__tests__/urlReplaceMap.test.ts @@ -59,12 +59,10 @@ describe('UrlReplaceMapCodec', () => { const result = pipe( validation, Either.fold( - (left) => { - console.error('Error:', left); + () => { return null; // or handle the error as needed }, (right) => { - console.log('Success:', right); return right; } ) diff --git a/apps/strapi-cms/CHANGELOG.md b/apps/strapi-cms/CHANGELOG.md index dcea59f993..633506a370 100644 --- a/apps/strapi-cms/CHANGELOG.md +++ b/apps/strapi-cms/CHANGELOG.md @@ -1,5 +1,11 @@ # strapi-cms +## 3.1.1 + +### Patch Changes + +- 63a2efc: Update .env.default files for strapi and nextjs, update README.md + ## 3.1.0 ### Minor Changes diff --git a/apps/strapi-cms/package.json b/apps/strapi-cms/package.json index 1ec31adb96..cbbce99ac5 100644 --- a/apps/strapi-cms/package.json +++ b/apps/strapi-cms/package.json @@ -1,7 +1,7 @@ { "name": "strapi-cms", "private": true, - "version": "3.1.0", + "version": "3.1.1", "scripts": { "clean": "shx rm -rf dist/", "generate": "strapi ts:generate-types", diff --git a/package-lock.json b/package-lock.json index 0d9268c1ec..5ed9e06ff0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "version": "4.0.0" }, "apps/cloudfront-functions": { - "version": "0.0.3", + "version": "0.0.4", "devDependencies": { "@types/aws-cloudfront-function": "^1.0.2", "@types/rewire": "^2.5.28", @@ -61,7 +61,7 @@ "version": "1.3.0" }, "apps/nextjs-website": { - "version": "4.11.0", + "version": "4.12.0", "dependencies": { "@apidevtools/swagger-parser": "^10.1.0", "@aws-amplify/auth": "^5.6.6", @@ -414,7 +414,7 @@ } }, "apps/strapi-cms": { - "version": "3.1.0", + "version": "3.1.1", "license": "MIT", "dependencies": { "@ckeditor/strapi-plugin-ckeditor": "^0.0.13", @@ -31246,6 +31246,28 @@ "version": "8.0.0", "license": "MIT" }, + "node_modules/emojibase": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/emojibase/-/emojibase-15.3.1.tgz", + "integrity": "sha512-GNsjHnG2J3Ktg684Fs/vZR/6XpOSkZPMAv85EHrr6br2RN2cJNwdS4am/3YSK3y+/gOv2kmoK3GGdahXdMxg2g==", + "peer": true, + "funding": { + "type": "ko-fi", + "url": "https://ko-fi.com/milesjohnson" + } + }, + "node_modules/emojibase-data": { + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/emojibase-data/-/emojibase-data-15.3.2.tgz", + "integrity": "sha512-TpDyTDDTdqWIJixV5sTA6OQ0P0JfIIeK2tFRR3q56G9LK65ylAZ7z3KyBXokpvTTJ+mLUXQXbLNyVkjvnTLE+A==", + "funding": { + "type": "ko-fi", + "url": "https://ko-fi.com/milesjohnson" + }, + "peerDependencies": { + "emojibase": "*" + } + }, "node_modules/emojis-list": { "version": "3.0.0", "license": "MIT", @@ -49311,6 +49333,7 @@ }, "node_modules/tree-sitter-json": { "version": "0.20.1", + "hasInstallScript": true, "license": "MIT", "optional": true, "dependencies": { @@ -51767,13 +51790,11 @@ } }, "packages/active-campaign-client": { - "version": "0.1.0", + "version": "0.1.1", "dependencies": { "@types/aws-lambda": "^8.10.126", "@types/jest": "^29.5.1", "aws-lambda": "^1.0.7", - "axios": "^1.7.7", - "dotenv": "16.4.5", "jest": "^29.7.0", "ts-jest": "^29.1.1", "typescript": "^5.0.2" @@ -51781,6 +51802,7 @@ "devDependencies": { "@eslint/eslintrc": "^2.1.4", "@eslint/js": "^8.57.1", + "dotenv": "16.4.5", "eslint": "^8.57.1", "eslint-config-custom": "^0.1.0" } @@ -51819,18 +51841,11 @@ "dev": true, "license": "BSD-3-Clause" }, - "packages/active-campaign-client/node_modules/axios": { - "version": "1.7.7", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "packages/active-campaign-client/node_modules/dotenv": { "version": "16.4.5", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true, "engines": { "node": ">=12" }, @@ -51968,9 +51983,10 @@ } }, "packages/gitbook-docs": { - "version": "0.2.1", + "version": "0.3.0", "dependencies": { "@markdoc/markdoc": "0.3.0", + "emojibase-data": "^15.3.2", "fp-ts": "^2.13.1", "htmlparser2": "^9.0.0", "js-yaml": "^4.1.0", diff --git a/packages/active-campaign-client/.env.example b/packages/active-campaign-client/.env.example new file mode 100644 index 0000000000..aabb8523e9 --- /dev/null +++ b/packages/active-campaign-client/.env.example @@ -0,0 +1,3 @@ +AC_BASE_URL=your_account_url +AC_API_KEY=your_api_key +SENDER_URL=localhost:3000 diff --git a/packages/active-campaign-client/.eslintrc.json b/packages/active-campaign-client/.eslintrc.json index e800f40dc9..b79e714255 100644 --- a/packages/active-campaign-client/.eslintrc.json +++ b/packages/active-campaign-client/.eslintrc.json @@ -7,6 +7,7 @@ "functional/no-expression-statements": "off", "functional/no-this-expressions": "off", "functional/no-classes": "off", - "functional/immutable-data": "off" + "functional/immutable-data": "off", + "functional/no-try-statements": "off" } } diff --git a/packages/active-campaign-client/CHANGELOG.md b/packages/active-campaign-client/CHANGELOG.md new file mode 100644 index 0000000000..e3ef97d23b --- /dev/null +++ b/packages/active-campaign-client/CHANGELOG.md @@ -0,0 +1,7 @@ +# active-campaign-client + +## 0.1.1 + +### Patch Changes + +- a899ee5: Create package and add function signatures diff --git a/packages/active-campaign-client/README.md b/packages/active-campaign-client/README.md index 59b896fcbd..bf2d37b88a 100644 --- a/packages/active-campaign-client/README.md +++ b/packages/active-campaign-client/README.md @@ -96,3 +96,9 @@ All requests require authentication using an API key. The key is passed in the h 'Content-Type': 'application/json' } ``` + +# Tests + +Since the client is a wrapper around the Active Campaign API, it is not possible to test the client without making actual requests to the API. +The tests are therefore integration tests that require a valid Active Campaign account and API key to run. +They are skipped by default but can be run by deleting the `.skip` from the test suite. \ No newline at end of file diff --git a/packages/active-campaign-client/jest.config.ts b/packages/active-campaign-client/jest.config.ts index 4a5b465ecb..066e81b16d 100644 --- a/packages/active-campaign-client/jest.config.ts +++ b/packages/active-campaign-client/jest.config.ts @@ -1,3 +1,8 @@ +import * as dotenv from 'dotenv'; + +// Load environment variables from .env file +dotenv.config({ path: '.env' }); + module.exports = { preset: 'ts-jest', testEnvironment: 'node', diff --git a/packages/active-campaign-client/package.json b/packages/active-campaign-client/package.json index 132ba61a3b..ef972019b7 100644 --- a/packages/active-campaign-client/package.json +++ b/packages/active-campaign-client/package.json @@ -1,6 +1,6 @@ { "name": "active-campaign-client", - "version": "0.1.0", + "version": "0.1.1", "description": "Implements ActiveCampaign API to add, update and delete Accounts and to add and update lists", "scripts": { "lint": "eslint src", @@ -10,14 +10,13 @@ "@eslint/eslintrc": "^2.1.4", "@eslint/js": "^8.57.1", "eslint": "^8.57.1", + "dotenv": "16.4.5", "eslint-config-custom": "^0.1.0" }, "dependencies": { "@types/aws-lambda": "^8.10.126", "@types/jest": "^29.5.1", "aws-lambda": "^1.0.7", - "axios": "^1.7.7", - "dotenv": "16.4.5", "jest": "^29.7.0", "ts-jest": "^29.1.1", "typescript": "^5.0.2" diff --git a/packages/active-campaign-client/src/__tests__/empty-test.test.ts b/packages/active-campaign-client/src/__tests__/empty-test.test.ts new file mode 100644 index 0000000000..ec129970f5 --- /dev/null +++ b/packages/active-campaign-client/src/__tests__/empty-test.test.ts @@ -0,0 +1,5 @@ +describe('nothing', () => { + it('should not fail tests without tests but it does', async () => { + expect(1).toBe(1); + }); +}); diff --git a/packages/active-campaign-client/src/__tests__/handlers/addContact.test.ts b/packages/active-campaign-client/src/__tests__/handlers/addContact.test.ts new file mode 100644 index 0000000000..f912c7cc39 --- /dev/null +++ b/packages/active-campaign-client/src/__tests__/handlers/addContact.test.ts @@ -0,0 +1,39 @@ +import { addContact } from '../../handlers/addContact'; +import { SQSEvent } from 'aws-lambda'; + +// remove .skip to run the test, be aware it does a real API call so it will create a contact in the active campaign account +describe.skip('addContact handler', () => { + it('should create a contact successfully', async () => { + const event: SQSEvent = { + Records: [ + { + messageId: '1', + receiptHandle: '1', + body: JSON.stringify({ + username: `test@example${new Date().getTime()}e.com`, + firstName: 'Giovanni', + cognitoId: '466e0280-9061-7007-c3e0-beb6be672f68', + lastName: 'Doe', + company: 'Test Co', + role: 'Developer', + mailinglistAccepted: true, + }), + attributes: { + ApproximateReceiveCount: '1', + SentTimestamp: '1', + SenderId: '1', + ApproximateFirstReceiveTimestamp: '1', + }, + messageAttributes: {}, + md5OfBody: '1', + eventSource: 'aws:sqs', + eventSourceARN: 'arn:aws:sqs:region:account-id:queue-name', + awsRegion: 'region', + }, + ], + }; + + const response = await addContact(event); + expect(response.statusCode).toBe(200); + }); +}); diff --git a/packages/active-campaign-client/src/__tests__/handlers/createList.test.ts b/packages/active-campaign-client/src/__tests__/handlers/createList.test.ts new file mode 100644 index 0000000000..1c8d722ace --- /dev/null +++ b/packages/active-campaign-client/src/__tests__/handlers/createList.test.ts @@ -0,0 +1,37 @@ +import { createList } from '../../handlers/createList'; +import { SQSEvent } from 'aws-lambda'; + +describe.skip('createList handler', () => { + it('should create a list successfully', async () => { + const event: SQSEvent = { + Records: [ + { + messageId: '1', + receiptHandle: '1', + body: JSON.stringify({ + title: `Test Webinar ${new Date().getTime()}`, + slug: `test-webinar-${new Date().getTime()}`, + description: 'Test Description', + subscribeCtaLabel: 'Subscribe to webinar', + isVisibleInList: true, + imagePath: '/path/to/image.jpg', + }), + attributes: { + ApproximateReceiveCount: '1', + SentTimestamp: '1', + SenderId: '1', + ApproximateFirstReceiveTimestamp: '1', + }, + messageAttributes: {}, + md5OfBody: '1', + eventSource: 'aws:sqs', + eventSourceARN: 'arn:aws:sqs:region:account-id:queue-name', + awsRegion: 'region', + }, + ], + }; + + const response = await createList(event); + expect(response.statusCode).toBe(200); + }); +}); diff --git a/packages/active-campaign-client/src/__tests__/handlers/deleteContact.test.ts b/packages/active-campaign-client/src/__tests__/handlers/deleteContact.test.ts new file mode 100644 index 0000000000..f6b809496b --- /dev/null +++ b/packages/active-campaign-client/src/__tests__/handlers/deleteContact.test.ts @@ -0,0 +1,34 @@ +import { deleteContact } from '../../handlers/deleteContact'; +import { SQSEvent } from 'aws-lambda'; + +// remove .skip to run the test, be aware it does a real API call so it will create a contact in the active campaign account +describe.skip('deleteContact handler', () => { + it('should delete a contact successfully', async () => { + const event: SQSEvent = { + Records: [ + { + messageId: '1', + receiptHandle: '1', + body: JSON.stringify({ + // Replace this with the existing email of the contact you want to delete, otherwise the test will fail + cognitoId: `466e0280-9061-7007-c3e0-beb6be672f68`, + }), + attributes: { + ApproximateReceiveCount: '1', + SentTimestamp: '1', + SenderId: '1', + ApproximateFirstReceiveTimestamp: '1', + }, + messageAttributes: {}, + md5OfBody: '1', + eventSource: 'aws:sqs', + eventSourceARN: 'arn:aws:sqs:region:account-id:queue-name', + awsRegion: 'region', + }, + ], + }; + + const response = await deleteContact(event); + expect(response.statusCode).toBe(200); + }); +}); diff --git a/packages/active-campaign-client/src/__tests__/handlers/deleteList.test.ts b/packages/active-campaign-client/src/__tests__/handlers/deleteList.test.ts new file mode 100644 index 0000000000..90ffd8ce87 --- /dev/null +++ b/packages/active-campaign-client/src/__tests__/handlers/deleteList.test.ts @@ -0,0 +1,31 @@ +import { deleteList } from '../../handlers/deleteList'; +import { SQSEvent } from 'aws-lambda'; + +describe.skip('deleteList handler', () => { + it('should delete a list successfully', async () => { + const event: SQSEvent = { + Records: [ + { + messageId: '1', + receiptHandle: '1', + body: JSON.stringify({ + slug: 'test-webinar-1732097293540', + }), + attributes: { + ApproximateReceiveCount: '1', + SentTimestamp: '1', + SenderId: '1', + ApproximateFirstReceiveTimestamp: '1', + }, + messageAttributes: {}, + md5OfBody: '1', + eventSource: 'aws:sqs', + eventSourceARN: 'arn:aws:sqs:region:account-id:queue-name', + awsRegion: 'region', + }, + ], + }; + const response = await deleteList(event); + expect(response.statusCode).toBe(200); + }); +}); diff --git a/packages/active-campaign-client/src/__tests__/handlers/updateContact.test.ts b/packages/active-campaign-client/src/__tests__/handlers/updateContact.test.ts new file mode 100644 index 0000000000..521c774cf9 --- /dev/null +++ b/packages/active-campaign-client/src/__tests__/handlers/updateContact.test.ts @@ -0,0 +1,39 @@ +import { updateContact } from '../../handlers/updateContact'; +import { SQSEvent } from 'aws-lambda'; + +// remove .skip to run the test, be aware it does a real API call so it will create a contact in the active campaign account +describe.skip('updateContact handler', () => { + it('should update a contact successfully', async () => { + const event: SQSEvent = { + Records: [ + { + messageId: '1', + receiptHandle: '1', + body: JSON.stringify({ + username: `test@example1731961399739e.com`, + firstName: 'Alberto', + lastName: 'Doe', + company: 'Test Co', + role: 'Developer', + mailinglistAccepted: true, + cognitoId: '466e0280-9061-7007-c3e0-beb6be672f68', + }), + attributes: { + ApproximateReceiveCount: '1', + SentTimestamp: '1', + SenderId: '1', + ApproximateFirstReceiveTimestamp: '1', + }, + messageAttributes: {}, + md5OfBody: '1', + eventSource: 'aws:sqs', + eventSourceARN: 'arn:aws:sqs:region:account-id:queue-name', + awsRegion: 'region', + }, + ], + }; + + const response = await updateContact(event); + expect(response.statusCode).toBe(200); + }); +}); diff --git a/packages/active-campaign-client/src/empty-file.ts b/packages/active-campaign-client/src/empty-file.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/active-campaign-client/src/handlers/addContact.ts b/packages/active-campaign-client/src/handlers/addContact.ts new file mode 100644 index 0000000000..e6bdadb7ca --- /dev/null +++ b/packages/active-campaign-client/src/handlers/addContact.ts @@ -0,0 +1,52 @@ +import { APIGatewayProxyResult, SQSEvent } from 'aws-lambda'; +import { acClient } from '../utils/activeCampaignClient'; +import { SignUpUserData } from 'nextjs-website/src/lib/types/sign-up'; +import { ContactPayload } from '../types/contactPayload'; + +export async function addContact(event: { + readonly Records: SQSEvent['Records']; +}): Promise { + try { + const firstMessage = event.Records[0] ?? { body: '{}' }; + // Parse request body + const userData: SignUpUserData & { readonly cognitoId: string } = + JSON.parse(firstMessage.body); + + // Transform to AC payload + const acPayload: ContactPayload = { + contact: { + email: userData.username, + firstName: userData.firstName, + lastName: userData.lastName, + phone: `cognito:${userData.cognitoId}`, + fieldValues: [ + { + field: '2', + value: userData.company, + }, + { + field: '1', + value: userData.role, + }, + { + field: '3', + value: userData.mailinglistAccepted ? 'TRUE' : 'FALSE', + }, + ], + }, + }; + + const response = await acClient.createContact(acPayload); + + return { + statusCode: 200, + body: JSON.stringify(response), + }; + } catch (error) { + console.error('Error:', error); + return { + statusCode: 500, + body: JSON.stringify({ message: 'Internal server error' }), + }; + } +} diff --git a/packages/active-campaign-client/src/handlers/createList.ts b/packages/active-campaign-client/src/handlers/createList.ts new file mode 100644 index 0000000000..db5996dc5a --- /dev/null +++ b/packages/active-campaign-client/src/handlers/createList.ts @@ -0,0 +1,37 @@ +import { APIGatewayProxyResult, SQSEvent } from 'aws-lambda'; +import { acClient } from '../utils/activeCampaignClient'; +import { ListPayload } from '../types/listPayload'; +import { WebinarPayload } from '../types/webinarPayload'; + +export async function createList(event: { + readonly Records: SQSEvent['Records']; +}): Promise { + try { + const firstMessage = event.Records[0] ?? { body: '{}' }; + const webinarData: WebinarPayload = JSON.parse(firstMessage.body); + + const acPayload: ListPayload = { + list: { + name: webinarData.slug, + stringid: webinarData.title, // Using slug as the stringid + sender_url: process.env.SENDER_URL || '', + sender_reminder: webinarData.subscribeCtaLabel || '', + subscription_notify: '', + unsubscription_notify: '', + }, + }; + + const response = await acClient.createList(acPayload); + + return { + statusCode: 200, + body: JSON.stringify(response), + }; + } catch (error) { + console.error('Error:', error); + return { + statusCode: 500, + body: JSON.stringify({ message: 'Internal server error' }), + }; + } +} diff --git a/packages/active-campaign-client/src/handlers/deleteContact.ts b/packages/active-campaign-client/src/handlers/deleteContact.ts new file mode 100644 index 0000000000..1d72f6d691 --- /dev/null +++ b/packages/active-campaign-client/src/handlers/deleteContact.ts @@ -0,0 +1,34 @@ +import { APIGatewayProxyResult, SQSEvent } from 'aws-lambda'; +import { acClient } from '../utils/activeCampaignClient'; + +export async function deleteContact(event: { + readonly Records: SQSEvent['Records']; +}): Promise { + try { + const firstMessage = event.Records[0] ?? { body: '{}' }; + // Parse request body + const { cognitoId } = JSON.parse(firstMessage.body); + + const contactId = await acClient.getContactByCognitoId(cognitoId); + + if (!contactId) { + return { + statusCode: 404, + body: JSON.stringify({ message: 'Contact not found' }), + }; + } + + const response = await acClient.deleteContact(contactId); + + return { + statusCode: 200, + body: JSON.stringify(response), + }; + } catch (error) { + console.error('Error:', error); + return { + statusCode: 500, + body: JSON.stringify({ message: 'Internal server error' }), + }; + } +} diff --git a/packages/active-campaign-client/src/handlers/deleteList.ts b/packages/active-campaign-client/src/handlers/deleteList.ts new file mode 100644 index 0000000000..22ea9ac9c5 --- /dev/null +++ b/packages/active-campaign-client/src/handlers/deleteList.ts @@ -0,0 +1,42 @@ +import { APIGatewayProxyResult, SQSEvent } from 'aws-lambda'; +import { acClient } from '../utils/activeCampaignClient'; + +export async function deleteList(event: { + readonly Records: SQSEvent['Records']; +}): Promise { + try { + const firstMessage = event.Records[0] ?? { body: '{}' }; + const { slug } = JSON.parse(firstMessage.body); + + if (!slug) { + return { + statusCode: 400, + body: JSON.stringify({ message: 'Webinar slug is required' }), + }; + } + + // Get list ID using the slug (name) + const listId = await acClient.getListIdByName(slug); + + if (!listId) { + return { + statusCode: 404, + body: JSON.stringify({ message: 'List not found' }), + }; + } + + // Delete the list + await acClient.deleteList(Number(listId)); + + return { + statusCode: 200, + body: JSON.stringify({ message: 'List deleted successfully' }), + }; + } catch (error) { + console.error('Error:', error); + return { + statusCode: 500, + body: JSON.stringify({ message: 'Internal server error' }), + }; + } +} diff --git a/packages/active-campaign-client/src/handlers/updateContact.ts b/packages/active-campaign-client/src/handlers/updateContact.ts new file mode 100644 index 0000000000..dff29e4bd5 --- /dev/null +++ b/packages/active-campaign-client/src/handlers/updateContact.ts @@ -0,0 +1,64 @@ +import { APIGatewayProxyResult, SQSEvent } from 'aws-lambda'; +import { acClient } from '../utils/activeCampaignClient'; +import { ContactPayload } from '../types/contactPayload'; + +export async function updateContact(event: { + readonly Records: SQSEvent['Records']; +}): Promise { + try { + const firstMessage = event.Records[0] ?? { body: '{}' }; + // Parse request body + const userData = JSON.parse(firstMessage.body); + + if (!userData.username) { + return { + statusCode: 400, + body: JSON.stringify({ message: 'Missing email' }), + }; + } + + const contactId = await acClient.getContactByCognitoId(userData.cognitoId); + + if (!contactId) { + return { + statusCode: 404, + body: JSON.stringify({ message: 'Contact not found' }), + }; + } + + const acPayload: ContactPayload = { + contact: { + email: userData.username, + firstName: userData.firstName, + lastName: userData.lastName, + fieldValues: [ + { + field: '2', + value: userData.company, + }, + { + field: '1', + value: userData.role, + }, + { + field: '3', + value: userData.mailinglistAccepted ? 'TRUE' : 'FALSE', + }, + ], + }, + }; + + const response = await acClient.updateContact(contactId, acPayload); + + return { + statusCode: 200, + body: JSON.stringify(response), + }; + } catch (error) { + console.error('Error:', error); + return { + statusCode: 500, + body: JSON.stringify({ message: 'Internal server error' }), + }; + } +} diff --git a/packages/active-campaign-client/src/index.ts b/packages/active-campaign-client/src/index.ts new file mode 100644 index 0000000000..87b5a2fdae --- /dev/null +++ b/packages/active-campaign-client/src/index.ts @@ -0,0 +1,12 @@ +import { APIGatewayProxyResult, SQSEvent } from 'aws-lambda'; +import { addContact } from './handlers/addContact'; + +export async function handler(event: { + readonly Records: SQSEvent['Records']; +}): Promise { + console.log('Event:', event); + return { + statusCode: 200, + body: JSON.stringify(event), + }; +} diff --git a/packages/active-campaign-client/src/types/contactPayload.ts b/packages/active-campaign-client/src/types/contactPayload.ts new file mode 100644 index 0000000000..da7b70cfeb --- /dev/null +++ b/packages/active-campaign-client/src/types/contactPayload.ts @@ -0,0 +1,12 @@ +export type ContactPayload = { + readonly contact: { + readonly email: string; + readonly firstName: string; + readonly lastName: string; + readonly phone?: string; + readonly fieldValues: readonly { + readonly field: string; + readonly value: string; + }[]; + }; +}; diff --git a/packages/active-campaign-client/src/types/listPayload.ts b/packages/active-campaign-client/src/types/listPayload.ts new file mode 100644 index 0000000000..2f62a0b7cc --- /dev/null +++ b/packages/active-campaign-client/src/types/listPayload.ts @@ -0,0 +1,10 @@ +export type ListPayload = { + readonly list: { + readonly name: string; + readonly stringid: string; + readonly sender_url: string; + readonly sender_reminder: string; + readonly subscription_notify?: string; + readonly unsubscription_notify?: string; + }; +}; diff --git a/packages/active-campaign-client/src/types/listStatusPayload.ts b/packages/active-campaign-client/src/types/listStatusPayload.ts new file mode 100644 index 0000000000..84b34131b8 --- /dev/null +++ b/packages/active-campaign-client/src/types/listStatusPayload.ts @@ -0,0 +1,7 @@ +export type ListStatusPayload = { + readonly contactList: { + readonly list: string; + readonly contact: string; + readonly status: string; + }; +}; diff --git a/packages/active-campaign-client/src/types/webinarPayload.ts b/packages/active-campaign-client/src/types/webinarPayload.ts new file mode 100644 index 0000000000..93e64b4691 --- /dev/null +++ b/packages/active-campaign-client/src/types/webinarPayload.ts @@ -0,0 +1,5 @@ +export type WebinarPayload = { + readonly slug: string; + readonly title: string; + readonly subscribeCtaLabel: string; +}; diff --git a/packages/active-campaign-client/src/utils/activeCampaignClient.ts b/packages/active-campaign-client/src/utils/activeCampaignClient.ts new file mode 100644 index 0000000000..53cd3ccaa5 --- /dev/null +++ b/packages/active-campaign-client/src/utils/activeCampaignClient.ts @@ -0,0 +1,121 @@ +import * as https from 'https'; +import { ContactPayload } from '../types/contactPayload'; +import { ListPayload } from '../types/listPayload'; + +export class ActiveCampaignClient { + private readonly baseUrl: string; + private readonly apiKey: string; + + constructor(baseUrl: string, apiKey: string) { + // Remove any trailing slashes from the baseUrl + this.baseUrl = baseUrl.replace(/\/$/, ''); + this.apiKey = apiKey; + } + + private getHeaders() { + return { + 'Api-Token': this.apiKey, + 'Content-Type': 'application/json', + }; + } + + private async makeRequest( + method: string, + path: string, + data?: any, + params?: Record + ): Promise { + return new Promise((resolve, reject) => { + // Parse the base URL to get hostname and path + const url = new URL(path, this.baseUrl); + + // Add query parameters if they exist + if (params) { + Object.entries(params).forEach(([key, value]) => { + url.searchParams.append(key, value); + }); + } + + const options = { + method, + hostname: url.hostname, + path: `${url.pathname}${url.search}`, + headers: this.getHeaders(), + }; + + const req = https.request(options, (res) => { + // eslint-disable-next-line functional/no-let + let data = ''; + + res.on('data', (chunk) => { + data += chunk; + }); + + res.on('end', () => { + if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) { + try { + resolve(JSON.parse(data)); + } catch (error) { + reject(new Error('Failed to parse response data')); + } + } else { + reject( + new Error(`Request failed with status code ${res.statusCode}`) + ); + } + }); + }); + + req.on('error', (error) => { + reject(error); + }); + + if (data) { + req.write(JSON.stringify(data)); + } + + req.end(); + }); + } + + async createContact(data: ContactPayload) { + return this.makeRequest('POST', '/api/3/contacts', data); + } + + async updateContact(contactId: string, data: ContactPayload) { + return this.makeRequest('PUT', `/api/3/contacts/${contactId}`, data); + } + + async deleteContact(contactId: string) { + return this.makeRequest('DELETE', `/api/3/contacts/${contactId}`); + } + + async getContactByCognitoId(cognitoId: string) { + const response = await this.makeRequest<{ + readonly contacts: ReadonlyArray<{ readonly id: string }>; + }>('GET', '/api/3/contacts', undefined, { phone: `cognito:${cognitoId}` }); + return response?.contacts?.[0]?.id; + } + + async createList(data: ListPayload) { + return this.makeRequest('POST', '/api/3/lists', data); + } + + async getListIdByName(name: string) { + const response = await this.makeRequest<{ + readonly lists: ReadonlyArray<{ readonly id: number }>; + }>('GET', '/api/3/lists', undefined, { 'filters[name][eq]': name }); + return response?.lists[0]?.id; + } + + async deleteList(id: number) { + return this.makeRequest('DELETE', `/api/3/lists/${id}`); + } +} + +export const acClient = new ActiveCampaignClient( + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + process.env.AC_BASE_URL!, + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + process.env.AC_API_KEY! +); diff --git a/packages/gitbook-docs/CHANGELOG.md b/packages/gitbook-docs/CHANGELOG.md index c1c71492a1..399c00f538 100644 --- a/packages/gitbook-docs/CHANGELOG.md +++ b/packages/gitbook-docs/CHANGELOG.md @@ -1,5 +1,11 @@ # gitbook-docs +## 0.3.0 + +### Minor Changes + +- ea14e69: Fix emoji in guide + ## 0.2.1 ### Patch Changes diff --git a/packages/gitbook-docs/jest.config.ts b/packages/gitbook-docs/jest.config.ts index bb3b316a09..7836b23362 100644 --- a/packages/gitbook-docs/jest.config.ts +++ b/packages/gitbook-docs/jest.config.ts @@ -3,7 +3,7 @@ import type { JestConfigWithTsJest } from 'ts-jest'; const jestConfig: JestConfigWithTsJest = { roots: ['/src'], testMatch: ['**/__tests__/**/*.+(ts)'], - moduleFileExtensions: ['ts', 'js'], + moduleFileExtensions: ['ts', 'js', 'json'], transform: { '^.+\\.(ts)$': 'ts-jest', }, diff --git a/packages/gitbook-docs/package.json b/packages/gitbook-docs/package.json index e5fab5ce70..5f95e67700 100644 --- a/packages/gitbook-docs/package.json +++ b/packages/gitbook-docs/package.json @@ -1,6 +1,6 @@ { "name": "gitbook-docs", - "version": "0.2.1", + "version": "0.3.0", "private": true, "exports": { "./": "./dist/" @@ -23,6 +23,7 @@ }, "dependencies": { "@markdoc/markdoc": "0.3.0", + "emojibase-data": "^15.3.2", "fp-ts": "^2.13.1", "htmlparser2": "^9.0.0", "js-yaml": "^4.1.0", diff --git a/packages/gitbook-docs/src/__tests__/parseContent.test.ts b/packages/gitbook-docs/src/__tests__/parseContent.test.ts index 9e6908b2e6..1b89f0243c 100644 --- a/packages/gitbook-docs/src/__tests__/parseContent.test.ts +++ b/packages/gitbook-docs/src/__tests__/parseContent.test.ts @@ -46,7 +46,7 @@ describe('parseContent', () => { }); it('should parse heading', () => { expect(parseContent('# šŸ  h1šŸ \n## h2', config)).toStrictEqual([ - new Markdoc.Tag('Heading', { level: 1, id: 'h1' }, ['h1']), + new Markdoc.Tag('Heading', { level: 1, id: 'h1' }, ['šŸ  h1šŸ ']), new Markdoc.Tag('Heading', { level: 2, id: 'h2' }, ['h2']), ]); expect( @@ -457,6 +457,22 @@ describe('parseContent', () => { ]); }); + it('should parse emoji and convert from name to unicode', () => { + expect(parseContent(':sos:', config)).toStrictEqual([ + new Markdoc.Tag('Paragraph', {}, ['šŸ†˜']), + ]); + }); + + it('should parse emoji in title and convert from name to unicode', () => { + expect( + parseContent('## :technologist:Ideare un servizio', config) + ).toStrictEqual([ + new Markdoc.Tag('Heading', { level: 2, id: 'ideare-un-servizio' }, [ + 'šŸ§‘ā€šŸ’»Ideare un servizio', + ]), + ]); + }); + it('should parse hint', () => { expect( parseContent('{% hint style="info" %}\nText\n{% endhint %}\nText', config) diff --git a/packages/gitbook-docs/src/convertEmojiToUnicode.ts b/packages/gitbook-docs/src/convertEmojiToUnicode.ts new file mode 100644 index 0000000000..918cdb375d --- /dev/null +++ b/packages/gitbook-docs/src/convertEmojiToUnicode.ts @@ -0,0 +1,13 @@ +import emojiData from 'emojibase-data/en/compact.json'; + +export const convertEmojiToUnicode = (match: string): string => { + const emojiName = match.replace(/:/g, ''); + const result = emojiData.find(({ label }) => label === emojiName); + if (result) { + return result.unicode; + } + const fallbackResult = emojiData.find(({ tags }) => + tags?.some((tag) => tag === emojiName) + ); + return fallbackResult?.unicode ? fallbackResult.unicode : match; +}; diff --git a/packages/gitbook-docs/src/markdoc/schema/heading.ts b/packages/gitbook-docs/src/markdoc/schema/heading.ts index 9942ef770b..e27580e356 100644 --- a/packages/gitbook-docs/src/markdoc/schema/heading.ts +++ b/packages/gitbook-docs/src/markdoc/schema/heading.ts @@ -1,5 +1,5 @@ import Markdoc, { Node, Schema } from '@markdoc/markdoc'; -import { sanitizedText } from './sanitizedText'; +import { sanitizedText, sanitizedTextLeadingWhitespace } from './sanitizedText'; export type HeadingProps = { readonly level: number; @@ -7,7 +7,7 @@ export type HeadingProps = { readonly id: string; }; -export const heading: Schema = { +export const heading = (excludeEmoji?: boolean): Schema => ({ children: ['inline'], attributes: { level: { type: Number, required: true }, @@ -15,7 +15,10 @@ export const heading: Schema = { transform(node: Node, config) { const children = node.transformChildren({ ...config, - nodes: { ...config.nodes, text: sanitizedText }, + nodes: { + ...config.nodes, + text: excludeEmoji ? sanitizedTextLeadingWhitespace : sanitizedText, + }, }); const attributes = node.transformAttributes(config); @@ -37,4 +40,4 @@ export const heading: Schema = { return new Markdoc.Tag(`Heading`, { ...attributes, id }, children); }, -}; +}); diff --git a/packages/gitbook-docs/src/markdoc/schema/sanitizedText.ts b/packages/gitbook-docs/src/markdoc/schema/sanitizedText.ts index 69da9147d0..39c1b1850a 100644 --- a/packages/gitbook-docs/src/markdoc/schema/sanitizedText.ts +++ b/packages/gitbook-docs/src/markdoc/schema/sanitizedText.ts @@ -11,3 +11,12 @@ export const sanitizedText: Schema = { .replace(/^\s*/, ''); }, }; + +export const sanitizedTextLeadingWhitespace: Schema = { + attributes: { + content: { type: String, required: true }, + }, + transform: (node) => { + return node.attributes.content.replace(/^\s*/, ''); + }, +}; diff --git a/packages/gitbook-docs/src/parseContent.ts b/packages/gitbook-docs/src/parseContent.ts index 2a1d0c0f9c..a46398b765 100644 --- a/packages/gitbook-docs/src/parseContent.ts +++ b/packages/gitbook-docs/src/parseContent.ts @@ -25,6 +25,7 @@ import { table } from './markdoc/schema/table'; import { pageLink } from './markdoc/schema/pageLink'; import { processHtmlTokens } from './markdoc/tokenProcessor'; import { PageTitlePath } from './parseDoc'; +import { convertEmojiToUnicode } from './convertEmojiToUnicode'; export type ParseContentConfig = { readonly assetsPrefix: string; @@ -84,7 +85,7 @@ const schema: ConfigType = { nodes: { document, paragraph, - heading, + heading: heading(true), image: img, link, list, @@ -112,7 +113,8 @@ export const parseAst = (markdown: string) => { .replaceAll(markR.regex, markR.replace) .replaceAll(summaryR.regex, summaryR.replace) .replaceAll('{% @figma/embed', '{% figma-embed') - .replaceAll(fileR.regex, fileR.replace); + .replaceAll(fileR.regex, fileR.replace) + .replaceAll(/:([a-z0-9_]+):/g, convertEmojiToUnicode); // Enable the parsing of html elements (e.g. ). During the parse phase // the html content is handled as a token of type html_block. diff --git a/packages/gitbook-docs/src/parseInPageMenu.ts b/packages/gitbook-docs/src/parseInPageMenu.ts index 76ce973ae3..60cb430634 100644 --- a/packages/gitbook-docs/src/parseInPageMenu.ts +++ b/packages/gitbook-docs/src/parseInPageMenu.ts @@ -14,7 +14,7 @@ const HEADING_LEVELS_TO_SHOW = [2, 3]; const schema: ConfigType = { nodes: { document, - heading, + heading: heading(), }, }; From a15a53e2ec71fcd3c8578b4f66acce59f6ca89a5 Mon Sep 17 00:00:00 2001 From: mdciri Date: Tue, 26 Nov 2024 12:18:10 +0100 Subject: [PATCH 22/66] Update authors in pyproject --- apps/chatbot/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/chatbot/pyproject.toml b/apps/chatbot/pyproject.toml index 3087002b7b..ff92d09df9 100644 --- a/apps/chatbot/pyproject.toml +++ b/apps/chatbot/pyproject.toml @@ -2,7 +2,7 @@ name = "chatbot" version = "0.1.0" description = "Chatbot repository for PagoPA" -authors = ["Marco Cirillo "] +authors = ["Marco Domenico Cirillo ", Devis Battisti "] readme = "README.md" package-mode = false From 4d8583e27982ceda9a54e765890fedfc40b3b431 Mon Sep 17 00:00:00 2001 From: mdciri Date: Tue, 26 Nov 2024 14:48:47 +0100 Subject: [PATCH 23/66] Update docker compose test --- apps/chatbot/docker/compose.test.yaml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/chatbot/docker/compose.test.yaml b/apps/chatbot/docker/compose.test.yaml index b696d9e324..df409feee6 100644 --- a/apps/chatbot/docker/compose.test.yaml +++ b/apps/chatbot/docker/compose.test.yaml @@ -10,7 +10,7 @@ services: volumes: - ..:/app - ./files/.aws:/root/.aws - - ./files/nextjs-website/out:/app/build-devp/out + - ../../nextjs-website/out:/app/build-devp/out depends_on: redis: condition: service_started @@ -26,13 +26,17 @@ services: - AWS_SECRET_ACCESS_KEY=dummy - AWS_DEFAULT_REGION=local healthcheck: - test: ["CMD-SHELL", '[ "$(curl -s -o /dev/null -I -w ''%{http_code}'' http://localhost:8000)" == "400" ]'] + test: + [ + "CMD-SHELL", + '[ "$(curl -s -o /dev/null -I -w ''%{http_code}'' http://localhost:8000)" == "400" ]', + ] interval: 10s timeout: 10s retries: 10 networks: - ntw - + redis: image: redis/redis-stack:7.2.0-v13 networks: From d9fa13b3c9300fe7d647c4bedc4ceb0fd77b366a Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Wed, 27 Nov 2024 11:35:05 +0100 Subject: [PATCH 24/66] chore: out dir for tests --- apps/chatbot/docker/compose.test.yaml | 2 +- .../files/nextjs-website/generated/404.html | 1 + .../case-histories/tari-cagliari.html | 1 + .../case-histories/tari-cagliari.txt | 23 +++++++++++++++++++ .../generated/case-histories/test-case.html | 1 + .../generated/case-histories/test-case.txt | 23 +++++++++++++++++++ .../files/nextjs-website/generated/index.html | 1 + .../generated/privacy-policy.html | 1 + .../nextjs-website/generated/solutions.html | 1 + .../generated/terms-of-service.html | 1 + .../nextjs-website/generated/webinars.html | 1 + 11 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 apps/chatbot/docker/files/nextjs-website/generated/404.html create mode 100644 apps/chatbot/docker/files/nextjs-website/generated/case-histories/tari-cagliari.html create mode 100644 apps/chatbot/docker/files/nextjs-website/generated/case-histories/tari-cagliari.txt create mode 100644 apps/chatbot/docker/files/nextjs-website/generated/case-histories/test-case.html create mode 100644 apps/chatbot/docker/files/nextjs-website/generated/case-histories/test-case.txt create mode 100644 apps/chatbot/docker/files/nextjs-website/generated/index.html create mode 100644 apps/chatbot/docker/files/nextjs-website/generated/privacy-policy.html create mode 100644 apps/chatbot/docker/files/nextjs-website/generated/solutions.html create mode 100644 apps/chatbot/docker/files/nextjs-website/generated/terms-of-service.html create mode 100644 apps/chatbot/docker/files/nextjs-website/generated/webinars.html diff --git a/apps/chatbot/docker/compose.test.yaml b/apps/chatbot/docker/compose.test.yaml index df409feee6..3ba859f77a 100644 --- a/apps/chatbot/docker/compose.test.yaml +++ b/apps/chatbot/docker/compose.test.yaml @@ -10,7 +10,7 @@ services: volumes: - ..:/app - ./files/.aws:/root/.aws - - ../../nextjs-website/out:/app/build-devp/out + - ../../nextjs-website/generated:/app/build-devp/out depends_on: redis: condition: service_started diff --git a/apps/chatbot/docker/files/nextjs-website/generated/404.html b/apps/chatbot/docker/files/nextjs-website/generated/404.html new file mode 100644 index 0000000000..e0b59ef3ac --- /dev/null +++ b/apps/chatbot/docker/files/nextjs-website/generated/404.html @@ -0,0 +1 @@ +
404

Pagina non trovata

La pagina che stai cercando non esiste


\ No newline at end of file diff --git a/apps/chatbot/docker/files/nextjs-website/generated/case-histories/tari-cagliari.html b/apps/chatbot/docker/files/nextjs-website/generated/case-histories/tari-cagliari.html new file mode 100644 index 0000000000..0da1794de1 --- /dev/null +++ b/apps/chatbot/docker/files/nextjs-website/generated/case-histories/tari-cagliari.html @@ -0,0 +1 @@ +PagoPA DevPortal | Il processo di riscossione della TARI del Comune di Cagliari

Il processo di riscossione della TARI del Comune di Cagliari

Il racconto dell'esperienza del Comune di Cagliari, uno dei primi Comuni d'Italia a integrare SEND per gestire le notifiche a valore legale relative agli accertamenti Tari.

Lo scenario

Il Comune di Cagliari, che giĆ  da tempo ĆØ attivo sulla piattaforma pagoPA, ĆØ stato uno dei primi comuni a salire a bordo di SEND per gestire le notifiche a valore legale relative agli accertamenti Tari. Abbiamo incontrato Sabrina Contu e Paola Cuccureddu, rispettivamente funzionaria IMU/Tasi e funzionaria TARI del Comune di Cagliari, e abbiamo chiesto loro di raccontarci lā€™esperienza di onboarding e integrazione di SEND.

ā€œQuando nel 2022 ĆØ stata pubblicata la Misura 1.4.5 Piattaforma Notifiche Digitali che consentiva alle amministrazioni di poter ricevere un finanziamento, nellā€™ambito del PNRR, per l'adesione a SENDā€ ci spiega Sabrina Contu, ā€œabbiamo studiato il regolamento di attuazione della normativa e, prima di procedere, abbiamo fatto un'analisi degli invii di atti a valore legale effettuati nellā€™ultimo triennio verso societĆ  e professionisti. Questa analisi del business case ĆØ stata fondamentale perchĆØ ci ha consentito di quantificare il valore di quegli avvisi e, nell'analisi costi / benefici, di renderci immediatamente conto degli evidenti vantaggi per lā€™Amministrazione nellā€™adesione a SEND, sia dal punto di vista economico che dal punto di vista della sicurezza dellā€™incasso a fronte di una maggiore probabilitĆ  di reperibilitĆ  del destinatario.

Onboarding e integrazione

ā€œUna volta deciso di procedere con lā€™adesione, il passo successivo ĆØ stato la scelta del fornitore tecnologico per lā€™integrazione alla Piattaforma. Nel nostro caso, la software house che giĆ  gestiva l'applicativo dei tributi era anche giĆ  pronta per partire con SEND. Ci siamo quindi interfacciati con i referenti di PagoPA che ci hanno dato tutte le indicazioni utili per lā€™adesione: dallā€™accesso all'area riservata alla firma dellā€™accordo.

Dal canto nostro, abbiamo istituito lā€™apposito capitolo di spesa ed effettuato su questo lā€™apposito impegno di spesa per la prestazione del servizio.

Naturalmente questa nuova modalitĆ  di invio impone il rispetto di una serie di criteri e parametri: ad esempio, lā€™atto ĆØ nativo digitale e richiede quindi - per la versione stampata - di seguire delle specifiche precise, che ci sono state fornite e spiegate dal team di PagoPA e ci hanno consentito di procedere alla digitalizzazione degli atti con grande facilitĆ .ā€

ā€œSiamo pienamente soddisfatti di quanto fatto giĆ  lo scorso anno con SEND: abbiamo rilevato un significativo snellimento dei processi e abbiamo sperimentato i vantaggi legati al ritorno della notifica che viene automaticamente caricata in procedura.ā€ conclude Sabrina Contu.

La risposta dei cittadini

ā€œAbbiamo cercato di fare una comunicazione sul territorio in modo che i cittadini fossero informati di questa nuova possibilitĆ , per accompagnarli in questo percorso di transizione digitale e consentire loro di percepire il cambio di passo del Comune come un vantaggio reale.ā€ racconta Paola Cuccureddu. ā€œSappiamo bene all'interno di un comune quanto siano rilevanti - e purtroppo limitate - sia il fattore tempo che le risorse umane e tecniche disponibili. Con SEND abbiamo potuto ridurre i costi e ottimizzare al meglio le risorse disponibili, creando un servizio maggiormente di valore e impiegando quelle risorse per riuscire a fare una maggiore lotta all'evasione. Per il 2024 vogliamo continuare a notificare con SEND, forti anche dellā€™esperienza dello scorso anno, e contiamo di gestire circa 40.000 notifiche legate agli accertamenti TARI.ā€

Siamo pienamente soddisfatti di quanto fatto giĆ  lo scorso anno con SEND: abbiamo rilevato un significativo snellimento dei processi e abbiamo sperimentato i vantaggi legati al ritorno della notifica che viene automaticamente caricata in procedura.
Siamo pienamente soddisfatti di quanto fatto giĆ  lo scorso anno con SEND: abbiamo rilevato un significativo snellimento dei processi e abbiamo sperimentato i vantaggi legati al ritorno della notifica che viene automaticamente caricata in procedura.

Come integrarsi? Inizia da qui

IO, lā€™app dei servizi pubblici

Raccogli tutti i servizi digitali del tuo ente in unā€™unica piattaforma e interagisci in modo semplice e sicuro con i cittadini.

Piattaforma pagoPA

Gestisci gli incassi in modo centralizzato e con immediata riconciliazione delle posizioni debitorie.

SEND - Servizio Notifiche Digitali

Invia comunicazioni a valore legale con un processo di notificazione gestito interamente dalla piattaforma.


\ No newline at end of file diff --git a/apps/chatbot/docker/files/nextjs-website/generated/case-histories/tari-cagliari.txt b/apps/chatbot/docker/files/nextjs-website/generated/case-histories/tari-cagliari.txt new file mode 100644 index 0000000000..878bba4eb5 --- /dev/null +++ b/apps/chatbot/docker/files/nextjs-website/generated/case-histories/tari-cagliari.txt @@ -0,0 +1,23 @@ +1:HL["/_next/static/media/28fac4a6e903645b-s.p.woff2",{"as":"font","type":"font/woff2"}] +2:HL["/_next/static/media/2bb25458ea2620e9-s.p.woff2",{"as":"font","type":"font/woff2"}] +3:HL["/_next/static/media/f378bd2abf9e0d48-s.p.woff2",{"as":"font","type":"font/woff2"}] +4:HL["/_next/static/css/c1a3c2f6d783e471.css",{"as":"style"}] +0:["dgB9Zym4WNhjMAim9VsHX",[[["",{"children":["case-histories",{"children":[["caseHistorySlug","tari-cagliari","d"],{"children":["__PAGE__?{\"caseHistorySlug\":\"tari-cagliari\"}",{}]}]}]},"$undefined","$undefined",true],"$L5",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/c1a3c2f6d783e471.css","precedence":"next"}]],"$L6"]]]] +7:HL["/_next/static/css/918940977e95543e.css",{"as":"style"}] +5:[null,"$L8",null] +9:I{"id":44631,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +a:I{"id":36738,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +b:I{"id":93038,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +c:I{"id":8392,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +d:I{"id":10099,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +e:I{"id":15337,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +f:I{"id":13249,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +10:I{"id":92842,"chunks":["2272:static/chunks/webpack-d4fd03056baeac5f.js","1293:static/chunks/1dd3208c-3c1077ed7a7ffc38.js","3575:static/chunks/3575-63f451fe7624e01e.js"],"name":"default","async":false} +11:I{"id":41316,"chunks":["2272:static/chunks/webpack-d4fd03056baeac5f.js","1293:static/chunks/1dd3208c-3c1077ed7a7ffc38.js","3575:static/chunks/3575-63f451fe7624e01e.js"],"name":"default","async":false} +12:I{"id":80741,"chunks":["7950:static/chunks/7950-2339fabfd6a7629e.js","3093:static/chunks/3093-9dff2f7303959b74.js","2352:static/chunks/2352-337e28b99911d4e6.js","9160:static/chunks/app/not-found-b6e4c33c40a04c85.js"],"name":"Abstract","async":false} +15:I{"id":61151,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +8:["$","html",null,{"lang":"it","className":"__variable_c1363f","children":[["$","head",null,{"children":false}],["$","$L9",null,{"options":{"key":"mui"},"children":["$","$La",null,{"locale":"it","messages":{"devPortal":{"company":"PagoPA","siteHeader":{"label":"Menu","products":"Prodotti","profile":"Profilo","webinars":"Webinar","solutions":"Soluzioni"},"title":"DevPortal"},"profile":{"title":"Profilo","agreements":{"newsletter":{"description":"Inviami email relative alle risorse e agli aggiornamenti sui prodotti. Se questa opzione ĆØ attiva, PagoPA ti invierĆ  di tanto in tanto delle email utili e pertinenti.","error":{"subscribe":"C'ĆØ stato un errore nell'iscrizione, riprova piĆ¹ tardi o contatta l'assistenza tecnica.","unsubscribe":"C'ĆØ stato un errore nella cancellazione, riprova piĆ¹ tardi o contatta l'assistenza tecnica."},"subscribe":"Iscriviti","title":"Iscrizione alla newsletter","unsubscribe":"Annulla iscrizione"},"privacy":{"basicData":"PagoPA raccoglie dati personali di base che ti permettono di creare e utilizzare il tuo account su DevPortal. Questi dati sono raccolti durante la registrazione e l'aggiornamento del tuo profilo. PagoPA garantisce che i tuoi dati vengano gestiti in modo sicuro e ne giustifica lā€™utilizzo secondo lā€™informativa Privacy di PagoPA. I tuoi dati personali di base verranno conservati fino a quando avrai un account attivo su PagoPA DevPortal.","title":"Privacy","statement":{"text":"La nostra $labelOfLinkToReplace$ fornisce informazioni dettagliate sui tuoi diritti in materia di privacy.","labelOfLinkToReplace":"Informativa Privacy"}},"title":"Consensi e privacy"},"personalData":{"save":"Conferma","cancel":"Annulla","title":"Su di te","dataSection":"I tuoi dati","accountSection":"Il tuo account","deleteAccountSection":"Eliminazione Account","deleteAccount":{"sectionLabel":"Puoi decidere di eliminare il tuo account su PagoPA DevPortal in qualsiasi momento. I tuoi dati verranno cancellati dai nostri sistemi.","buttonLabel":"Elimina account","modalTitle":"Confermi di voler eliminare il tuo account?","modalText":"Se elimini il tuo account PagoPA DevPortal tutte le tue preferenze e i tuoi dati verranno cancellati dai nostri sistemi. Questa azione non ĆØ reversibile."},"deleteAccountButton":"Elimina account","addField":"Inserisci","fields":{"name":"Nome","surname":"Cognome","role":"Ruolo","company":"Tipologia di ente o azienda","sector":"Settore","products":"Prodotti di interesse","email":"Indirizzo email","password":"Password"}},"changePassword":{"title":"Cambia password","currentPassword":"Password attuale","newPassword":"Nuova password","confirmPassword":"Conferma password","wrongPassword":"La password inserita non risulta corretta","requiredCurrentPassword":"ƈ necessario inserire la password attuale","passwordsNotMatch":"Le password non corrispondono","passwordPolicy":"Non rispetta i requisiti. Minimo 8 caratteri, almeno un numero, almeno una lettera maiuscola e almeno un carattere speciale","cancel":"Annulla","save":"Conferma","dialog":{"title":"La password ĆØ stata modificata correttamente","text":"Effettua lā€™accesso utilizzando la nuova password. Se sono presenti altre finestre del browser con accesso al tuo account tramite la vecchia password, assicurati di chiuderle.","confirmLabel":"Vai al login"}},"changeEmail":{"cancel":"Annulla","save":"Conferma","title":"Modifica l'indirizzo email","notAuthorizedException":"L'indirizzo email inserito non ĆØ valido","wrongEmail":"L'indirizzo email inserito non risulta corretto","dialog":{"title":"Verifica il nuovo indirizzo email","text":"Abbiamo inviato una email allā€™indirizzo che hai inserito.\nClicca sul link contenuto al suo interno per verificarlo e associarlo al tuo account PagoPA DevPortal.","confirmLabel":"Chiudi"}},"insert":"Inserisci"},"webinar":{"liveWebinar":"Webinar in corso","subscriptionError":"Limite di iscrizioni raggiunto","genericSubscriptionError":"Qualcosa ĆØ andato storto, riprova piĆ¹ tardi","goToWebinar":"Vai al webinar","whyParticipate":"PerchĆ© partecipare?","speakers":"Ospiti","subscribe":"Iscriviti","speakersTitle":"Ospiti","questionList":{"title":{"highlightedQuestions":"Domande scelte","questions":"Domande"},"hiddenByMe":"Hai nascosto questa domanda","highlightedBy":"Scelta da"},"questionsForm":{"title":"Scrivi qui domande e commenti per la discussione finale (al massimo {maxLength} caratteri)","question":"Domanda","submit":"Invia","submitted":"Inviato","error":"Errore nell'invio, riprova piĆ¹ tardi."},"warnings":{"email":"Il giorno prima dell'evento riceverai una email con i dettagli.","goTo":"Collegati alla pagina del webinar all'orario di inizio dell'evento.","refresh":"Collegati a questa pagina all'orario di inizio dell'evento."},"webinarsSection":{"description":"","noWebinars":"Stiamo preparando i prossimi eventi, controlla piĆ¹ avanti.","title":{"dontLoseNext":"Non perderti il prossimo webinar","dontLoseNextPlural":"Non perderti i prossimi webinar","next":"I prossimi appuntamenti","our":"I nostri webinar","participateTo":"Partecipa ai nostri webinar","dedicatedWebinar":"Guarda il webinar dedicato"},"solutionDescription":"I webinar PagoPA LAB sono incontri formativi in cui gli specialisti del nostro team illustrano tutti i passaggi del processo di gestione di un servizio pubblico digitale, approfondendo i benefici di un approccio integrato delle piattaforme gestite da PagoPA.","questionsAndAnswers":{"title":"Le risposte alle vostre domande","showMore":"Mostra piĆ¹ domande","showLess":"Mostra meno domande"},"relatedResources":{"title":"Risorse correlate"}},"view":"Visualizza","pastWebinars":{"title":"Esplora tutti i webinar","description":"Approfondisci argomenti legati all'integrazione con i nostri prodotti attraverso la guida e i consigli esperti dei professionisti PagoPA.","cta":"Vedi tutti"}},"webinars":{"title":"Partecipa agli eventi live e guarda i webinar passati ","subtitle":"Con i webinar di PagoPA DevPortal hai l'opportunitĆ  di approfondire argomenti legati all'integrazione con i nostri prodotti, attraverso la guida e i consigli esperti del nostro team.","nextWebinars":"I prossimi appuntamenti","pastWebinars":"Webinar passati"},"auth":{"logout":"Esci","login":{"action":"Accedi","loginToYourAccount":"Accedi al tuo account DevPortal","rememberMe":"Ricordami","forgotPassword":"Hai dimenticato la password?","noAccount":"Non hai un account?","noAccountError":"Nome utente o password non corretti.","accountAlreadyConfirmed":{"yourAccountIsAlreadyConfirmed":"Hai giĆ  validato questo indirizzo email","goToLogin":"Vai al Login"}},"confirmation":{"title":"Verifica la tua identitĆ ","body":"Abbiamo inviato un codice di verifica a {email}
Il codice scade tra 15 minuti.","code":"Codice di verifica","checkJunkMail":"Non hai ricevuto alcuna email? Controlla la posta indesiderata oppure","continue":"Continua","ctaLabel":"Reinvia email","resendEmail":"Reinvia email"},"resendEmail":{"label":"Reinvia email"},"signUp":{"action":"Iscriviti","createYourAccount":"Crea il tuo account","passwordMismatchError":"Le password non combaciano","confirmComunications":"Inviami email relative alle risorse e agli aggiornamenti sui prodotti. Se questa casella ĆØ selezionata, PagoPA ti invierĆ  di tanto in tanto delle email utili e pertinenti. Puoi annullare l'iscrizione in qualsiasi momento.","acceptPolicy":"Cliccando su iscriviti dichiari di aver preso visione della nostra informativa privacy e dei nostri termini e condizioni d'uso.","alreadyHaveAnAccount":"Hai giĆ  un account?","whyCreateAccount":"PerchĆ© iscriversi a PagoPA DevPortal","passwordError":"Non rispetta i requisiti.","passwordPolicy":"Minimo 8 caratteri, almeno un numero, almeno una lettera maiuscola e almeno un carattere speciale","emailSent":"Email inviata a {email}","advantages":{"exclusive_contents":{"title":"Accedi a contenuti esclusivi","text":"Assisti ai webinar di PagoPA e interagisci con noi sugli argomenti del momento.","isComingSoon":"false"},"product_updates":{"title":"Ricevi aggiornamenti sui nostri prodotti","text":"Non perdere neanche un nuovo contenuto, guida o tutorial. Puoi scegliere di ricevere via email le novitĆ  sui prodotti PagoPA e sull'integrazione tecnologica. ","isComingSoon":"false"},"api_keys":{"title":"Genera, gestisci e utilizza api Key","text":"Sblocca tutto il potenziale del DevPortal con API Key, Mocker, SDK ed altro ancora.","isComingSoon":"true"},"support":{"title":"Richiedi assistenza tramite un form dedicato","text":"Avvicinati con facilitĆ  alle soluzioni di cui hai bisogno e risolvi le difficoltĆ  con il nostro aiuto.","isComingSoon":"true"}},"companyRoles":{"ente-pubblico":"Ente pubblico","partner-tecnologico":"Partner tecnologico","psp":"PSP","gestore-di-pubblico-servizio":"Gestore di pubblico servizio","azienda-privata":"Azienda privata","altro":"Altro"}},"confirmSignUp":{"title":"Confermaci che sei tu","emailSent":"Abbiamo inviato una email a ","clickToConfirm":"Clicca sul pulsante contenuto al suo interno per verificarla.","didntReceiveEmail":"Non hai ricevuto l'email? Controlla la posta indesiderata oppure","resendEmail":"Invia nuovamente l'email","wrongEmail":"L'indirizzo email ĆØ errato?"},"confirmLogin":{"title":"Verifica la tua identitĆ ","code":"Codice di verifica","confirmationCodeSent":"Abbiamo inviato un codice di verifica a ","confirmationCodeExpires":"Il codice scade tra 15 minuti.","checkJunkMail":"Non hai ricevuto alcuna email? Controlla la posta indesiderata oppure","continue":"Continua","resendEmail":"Reinvia email","invalidCode":"Il codice inserito non ĆØ corretto","emptyCode":"Il codice ĆØ obbligatorio"},"accountActivated":{"goToLogin":"Vai al login","welcomeMessage":"Ti diamo il benvenuto su PagoPA DevPortal.","yourAccountIsActive":"Il tuo account ĆØ attivo"},"resetPassword":{"body":"Inserisci il tuo indirizzo email e ti invieremo le istruzioni per impostare una nuova password.","checkEmailEnd":"riceverai una email con un link per impostare una nuova password.","checkEmailStart":"Se esiste un account associato a ","checkEmailTitle":"Controlla l'email","emailFieldError":"Lā€™indirizzo email non ĆØ valido","goToLogin":"Torna al login","invalidLinkError":"Il link non ĆØ valido","newPassword":"Imposta una nuova password","passwordSet":"Password impostata correttamente","rememberPassword":"Ricordi la tua password?","resendEmail":"Reinvia email","resendEmailPrompt":"Non hai ricevuto l'email? Controlla nella posta indesiderata oppure","send":"Invia","title":"Recupera password","wrongEmail":"L'indirizzo email ĆØ errato?"},"expiredCode":{"expiredLink":"Il link che hai usato ĆØ scaduto","goToProfile":"Vai al profilo"}},"shared":{"comingSoon":"In Arrivo","readTutorial":"Leggi il tutorial","readStory":"Leggi la storia","moreInfo":"Scopri di piĆ¹","version":"Versione","copiedTooltip":"Copiato","siteTitle":"PagoPA DevPortal","emailAddress":"Indirizzo email","password":"Password","goBack":"Torna indietro","requiredFields":"* Campi obbligatori","firstName":"Nome","lastName":"Cognome","confirmPassword":"Conferma password","company":"Tipologia Ente o Azienda","role":"Ruolo","requiredFieldError":"Questo campo non puĆ² essere vuoto","emailFieldError":"Inserisci un indirizzo email valido","emailAlreadyTaken":"Esiste giĆ  un account per questo indirizzo email","goToModel":"Vai al modello","edit":"Modifica","cancel":"Annulla","yourData":"Profilo","subscribeButton":{"subscribeLabel":{"default":"Iscriviti","takePart":"Partecipa","view":"Visualizza"},"subscribedLabel":"Iscrizione confermata","unsubscribeLabel":"Annulla iscrizione"},"relatedLinks":"Link utili","downloadableDocuments":"Materiali scaricabili","download":"Scarica"},"pageNotFound":{"overline":"404","title":"Pagina non trovata","description":"La pagina che stai cercando non esiste"},"productGuidePage":{"onThisPage":"In questa pagina","tableOfContents":"Tabella dei contenuti"},"homepage":{"news":{"title":"In evidenza","list":{"0":{"title":"Usa il validatore di SEND per fare una verifica sullā€™integrazione","href":{"label":"Vai al validatore","title":"Vai al validatore"},"image":{"url":"/images/homepage-validatore.png","alt":"Immagine: Usa il validatore di SEND per fare una verifica sullā€™integrazione"}},"1":{"title":"Scopri i nuovi tutorial di Firma con IO","href":{"label":"Vai ai tutorial","title":"Vai ai tutorial"},"image":{"url":"/images/homepage-io-sign.png","alt":"Immagine: Scopri i nuovi tutorial di Firma con IO"}},"2":{"title":"Scopri la Quick Start di piattaforma pagoPA: lā€™integrazione in pochi semplici step","href":{"label":"Vai alla guida","title":"Vai alla guida"},"image":{"url":"/images/homepage-pago-pa.png","alt":"Immagine: Scopri la Quick Start di piattaforma pagoPA: lā€™integrazione in pochi semplici step"}}}},"webinarBannerButtonContent":"Scopri","productsShowcaseTitle":"Scopri il nostro ecosistema","heroItems":{"0":{"title":"Tutto ciĆ² che serve per integrarsi con i prodotti PagoPA"},"1":{"title":"Invia comunicazioni a valore legale con piattaforma notifiche","ctaLabel":"Vai a SEND"},"2":{"title":"Richiedi una firma su documenti e contratti","ctaLabel":"Vai a Firma con IO"}},"webinarsSection":{"description":"","title":"Partecipa ai nostri webinar","link":{"href":"#","label":"Vedi tutti i webinar"}},"comingsoonDocumentation":{"title":"Documentazione in arrivo","links":{"0":{"text":"InteroperabilitĆ . Scambia informazioni con altri enti in tutta sicurezza."},"1":{"text":"Check IBAN. Utilizza un sistema per la gestione degli incassi centralizzato e immediato."}}}},"quickStartGuide":{"content":{"apiPhases":{"request":{"cta":{"label":"Invia la richiesta"},"title":"Chiamata API"},"response":{"cta":{"icon":"Replay","label":"Ripristina la chiamata"},"title":"Risposta del server"}},"next":"Prossimo contenuto","previous":"Contenuto precedente"}},"overview":{"startInfo":{"title":"Si comincia da qui"},"tutorial":{"title":"Esplora i tutorial","ctaLabel":"Vedi tutti i tutorial"},"postIntegration":{"title":"Dopo l'integrazione"},"relatedLinks":{"title":"LINK UTILI"}},"footer":{"companyLink":{"ariaLabel":"Link: vai al sito di PagoPA S.p.A."},"languages":{"it":"Italiano"},"legalInfo":"PagoPA S.p.A. - SocietĆ  per azioni con socio unico - Capitale sociale di euro 1,000,000 interamente versato - Sede legale in Roma, Piazza Colonna 370,

CAP 00187 - N. di iscrizione a Registro Imprese di Roma, CF e P.IVA 15376371009","followUs":{"links":{"accessibility":{"ariaLabel":"Vai al link: AccessibilitĆ ","label":"AccessibilitĆ "}},"title":"Seguici su"},"aboutUs":{"title":"","links":{"whoWeAre":{"ariaLabel":"Vai al link: Chi siamo","label":"Chi siamo"},"pnrr":{"ariaLabel":"Vai al link: PNRR","label":"PNRR"},"media":{"ariaLabel":"Vai al link: Media","label":"Media"},"workWithUs":{"ariaLabel":"Vai al link: Lavora con noi","label":"Lavora con noi"}}},"resources":{"title":"Risorse","links":{"privacyPolicy":{"ariaLabel":"Vai al link: Informativa Privacy","label":"Informativa Privacy"},"termsOfService":{"ariaLabel":"Vai al link: Termini e Condizioni","label":"Termini e Condizioni"},"societaTrasparente":{"ariaLabel":"Vai al link: SocietĆ  trasparente","label":"SocietĆ  trasparente"},"disclosurePolicy":{"ariaLabel":"Vai al link: Responsible Disclosure Policy","label":"Responsible Disclosure Policy"},"model231":{"ariaLabel":"Vai al link: Modello 231","label":"Modello 231"}}},"services":{"title":"PRODOTTI E SERVIZI","links":{"appIO":{"ariaLabel":"Vai al link: App IO","label":"App IO"},"pagoPA":{"ariaLabel":"Vai al link: Piattaforma pagoPA","label":"Piattaforma pagoPA"},"centroStella":{"ariaLabel":"Vai al link: Centro stella","label":"Centro stella"},"checkIBAN":{"ariaLabel":"Vai al link: Check IBAN","label":"Check IBAN"},"send":{"ariaLabel":"Vai al link: SEND - Servizio Notifiche Digitali","label":"SEND - Servizio Notifiche Digitali"},"pdnd":{"ariaLabel":"Vai al link: Piattaforma Digitale Nazionale Dati - InteroperabilitĆ ","label":"Piattaforma Digitale Nazionale Dati - InteroperabilitĆ "}}},"cookiePreferences":{"ariaLabel":"Preferenza Cookie","label":"Preferenza Cookie"}},"errors":{"CodeDeliveryFailureException":"Impossibile inviare il codice di verifica.","ForbiddenException":"La tua richiesta non ĆØ stata consentita dal sistema di autenticazione.","InternalErrorException":"Si ĆØ verificato un errore interno al sistema di autenticazione.","InvalidEmailRoleAccessPolicyException":"Il sistema di autenticazione non ĆØ autorizzato a utilizzare la tua identitĆ  email.","InvalidLambdaResponseException":"Il sistema di autenticazione ha riscontrato una risposta non valida.","InvalidParameterException":"Il servizio di autenticazione ha riscontrato un parametro non valido.","InvalidPasswordException":"Password non valida.","ResourceNotFoundException":"Il servizio di autenticazione non trova la risorsa richiesta.","TooManyRequestsException":"Troppe richieste di autenticazione.","UnexpectedLambdaException":"Ɖ stata riscontrata un'eccezione imprevista con il sistema di autenticazione.","UserLambdaValidationException":"Il servizio di autenticazione ha riscontrato un'eccezione di convalida utente.","UsernameExistsException":"Username giĆ  registrato.","UserNotFoundException":"Utente non registrato.","NotAuthorizedException":"Operazione non autorizzata.","PasswordResetRequiredException":"Ɖ stato richiesto un reset della password.","UserNotConfirmedException":"Utente non confermato, controlla nella email e apri il link di conferma.","CodeMismatchException":"Codice non valido.","ExpiredCodeException":"Codice scaduto.","TooManyFailedAttemptsException":"Troppi tentativi errati.","LimitExceededException":"Limiti di autenticazione superati."},"swagger":{"errorCard":{"header":"Oops, manca qualcosa.","message":"Non siamo riusciti a trovare la fonte originale per visualizzare questo contenuto."},"parameters":{"header":"Parametri","empty":"Nessun parametro"},"requestBody":{"header":"Corpo"},"responses":{"header":"Risposte"},"example":"Esempio","schema":"Modello","emptyOperations":{"header":"Nessuna operazione","message":"Non ci sono operazioni disponibili per questo endpoint."}},"breadcrumbs":{"home":"DevPortal","webinars":"Webinar","solutions":"Soluzioni"},"solution":{"steps":{"platforms":"Piattaforme Abilitanti"},"ctaDetailLabel":"Leggi la guida completa"},"caseHistory":{"productShowcaseLabel":"Come integrarsi? Inizia da qui"},"apiDataListPage":{"explore":"Esplora le API"},"chatBot":{"title":"Chatbot","writeNewMessagePlaceholder":"Scrivi un nuovo messaggio","chatHistory":"Cronologia chat","delete":"Elimina"}},"timeZone":"Europe/Rome","children":["$","$Lb",null,{"children":[["$","$Lc",null,{"cookieDomainScript":"$undefined"}],["$","$Ld",null,{"children":["$","$Le",null,{"isChatbotVisible":false,"children":[["$","$Lf",null,{"products":[{"name":"IO, lā€™app dei servizi pubblici","shortName":"IO","description":"Raccogli tutti i servizi digitali del tuo ente in unā€™unica piattaforma e interagisci in modo semplice e sicuro con i cittadini.","slug":"app-io","path":"/app-io","logo":{"alternativeText":"IO, lā€™app dei servizi pubblici","caption":"$undefined","size":10,"name":"","width":60,"height":61,"ext":".svg","mime":"image/svg+xml","url":"/icons/appIo.svg"},"subpaths":{"overview":{"name":"Panoramica","path":"/app-io/overview"},"quickStart":{"name":"Quick start","path":"/app-io/quick-start"},"api":{"name":"API","path":"/app-io/api/app-io-main"},"tutorials":{"name":"Tutorial","path":"/app-io/tutorials"},"guides":{"name":"Guide e manuali","path":"/app-io/guides"}}},{"name":"Firma con IO","shortName":"Firma con IO","description":"Richiedi la Firma Elettronica Certificata su contratti e documenti. Le cittadine e i cittadini possono firmare direttamente sullā€™app IO.","slug":"firma-con-io","path":"/firma-con-io","logo":{"alternativeText":"Firma con IO","caption":"$undefined","size":10,"name":"","width":60,"height":61,"ext":".svg","mime":"image/svg+xml","url":"/icons/appIo.svg"},"subpaths":{"overview":{"name":"Panoramica","path":"/firma-con-io/overview"},"quickStart":{"name":"Quick start","path":"/firma-con-io/quick-start"},"api":{"name":"API","path":"/firma-con-io/api/firma-con-io-main"},"tutorials":{"name":"Tutorial","path":"/firma-con-io/tutorials"},"guides":{"name":"Guide e manuali","path":"/firma-con-io/guides"}}},{"name":"SEND - Servizio Notifiche Digitali","shortName":"SEND","description":"Invia comunicazioni a valore legale con un processo di notificazione gestito interamente dalla piattaforma.","slug":"send","path":"/send","logo":{"alternativeText":"SEND - Servizio Notifiche Digitali","caption":"$undefined","size":10,"name":"","width":60,"height":61,"ext":".svg","mime":"image/svg+xml","url":"/icons/send.svg"},"subpaths":{"overview":{"name":"Panoramica","path":"/send/overview"},"quickStart":{"name":"Quick start","path":"/send/quick-start"},"api":{"name":"API","path":"/send/api/send-main"},"tutorials":{"name":"Tutorial","path":"/send/tutorials"},"guides":{"name":"Guide e manuali","path":"/send/guides"}}},{"name":"Piattaforma pagoPA","shortName":"pagoPA","description":"Gestisci gli incassi in modo centralizzato e con immediata riconciliazione delle posizioni debitorie.","path":"/pago-pa","slug":"pago-pa","logo":{"alternativeText":"Piattaforma pagoPA","caption":"$undefined","size":10,"name":"","width":60,"height":61,"ext":".svg","mime":"image/svg+xml","url":"/icons/pagoPa.svg"},"subpaths":{"overview":{"name":"Panoramica","path":"/pago-pa/overview"},"quickStart":{"name":"Quick start","path":"/pago-pa/quick-start"},"api":{"name":"API","path":"/pago-pa/api"},"tutorials":{"name":"Tutorial","path":"/pago-pa/tutorials"},"guides":{"name":"Guide e manuali","path":"/pago-pa/guides"}}}]}],["$","main",null,{"children":["$","$L10",null,{"parallelRouterKey":"children","segmentPath":["children"],"loading":"$undefined","loadingStyles":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","template":["$","$L11",null,{}],"templateStyles":"$undefined","notFound":["$","$L12",null,{"layout":"center","overline":"404","title":"Pagina non trovata","description":"La pagina che stai cercando non esiste"}],"notFoundStyles":[],"childProp":{"current":[null,["$","div",null,{"id":"chatbot-page-content","children":["$","$L10",null,{"parallelRouterKey":"children","segmentPath":["children","case-histories","children"],"loading":"$undefined","loadingStyles":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","template":["$","$L11",null,{}],"templateStyles":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","childProp":{"current":["$","$L10",null,{"parallelRouterKey":"children","segmentPath":["children","case-histories","children",["caseHistorySlug","tari-cagliari","d"],"children"],"loading":"$undefined","loadingStyles":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","template":["$","$L11",null,{}],"templateStyles":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","childProp":{"current":["$L13","$L14",null],"segment":"__PAGE__?{\"caseHistorySlug\":\"tari-cagliari\"}"},"styles":[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/918940977e95543e.css","precedence":"next"}]]}],"segment":["caseHistorySlug","tari-cagliari","d"]},"styles":[]}]}],null],"segment":"case-histories"},"styles":[]}]}],["$","$L15",null,{}]]}]}]]}]}]}]]}] +16:I{"id":54316,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","3495:static/chunks/f5890c91-7948379131fd4dd8.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","1189:static/chunks/1189-2b1aa7c0348b14f6.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","6686:static/chunks/6686-9bc47ab2e6abbf5b.js","1878:static/chunks/1878-a3a68810eafbc18e.js","2536:static/chunks/2536-70a61cc5dfb9f7da.js","2373:static/chunks/app/case-histories/[caseHistorySlug]/page-bb9f62747b123bc3.js"],"name":"","async":false} +14:["$","$L16",null,{"slug":"tari-cagliari","title":"Il processo di riscossione della TARI del Comune di Cagliari","description":"Il racconto dell'esperienza del Comune di Cagliari, uno dei primi Comuni d'Italia a integrare SEND per gestire le notifiche a valore legale relative agli accertamenti Tari.","publishedAt":"$D2024-07-24T06:58:54.121Z","image":{"name":"tari.png","alternativeText":"$undefined","caption":"$undefined","width":364,"height":208,"ext":".png","mime":"image/png","size":16.7,"url":"https://cdn.dev.developer.pagopa.it/tari_71964937e2.png"},"parts":[{"component":"blockRenderer","html":[{"type":"heading","level":5,"children":[{"text":"Lo scenario","type":"text"}]},{"type":"paragraph","children":[{"text":"Il Comune di Cagliari, che giĆ  da tempo ĆØ attivo sulla piattaforma pagoPA, ĆØ stato uno dei primi comuni a salire a bordo di SEND per gestire le notifiche a valore legale relative agli accertamenti Tari. Abbiamo incontrato Sabrina Contu e Paola Cuccureddu, rispettivamente funzionaria IMU/Tasi e funzionaria TARI del Comune di Cagliari, e abbiamo chiesto loro di raccontarci lā€™esperienza di onboarding e integrazione di SEND.","type":"text"}]},{"type":"paragraph","children":[{"text":"ā€œQuando nel 2022 ĆØ stata pubblicata la Misura 1.4.5 Piattaforma Notifiche Digitali che consentiva alle amministrazioni di poter ricevere un finanziamento, nellā€™ambito del PNRR, per l'adesione a SENDā€ ci spiega Sabrina Contu, ā€œabbiamo studiato il regolamento di attuazione della normativa e, prima di procedere, abbiamo fatto un'analisi degli invii di atti a valore legale effettuati nellā€™ultimo triennio verso societĆ  e professionisti. Questa analisi del business case ĆØ stata fondamentale perchĆØ ci ha consentito di quantificare il valore di quegli avvisi e, nell'analisi costi / benefici, di renderci immediatamente conto degli evidenti vantaggi per lā€™Amministrazione nellā€™adesione a SEND, sia dal punto di vista economico che dal punto di vista della sicurezza dellā€™incasso a fronte di una maggiore probabilitĆ  di reperibilitĆ  del destinatario.","type":"text"}]},{"type":"heading","level":5,"children":[{"text":"Onboarding e integrazione","type":"text"}]},{"type":"paragraph","children":[{"text":"ā€œUna volta deciso di procedere con lā€™adesione, il passo successivo ĆØ stato la scelta del fornitore tecnologico per lā€™integrazione alla Piattaforma. Nel nostro caso, la software house che giĆ  gestiva l'applicativo dei tributi era anche giĆ  pronta per partire con SEND. Ci siamo quindi interfacciati con i referenti di PagoPA che ci hanno dato tutte le indicazioni utili per lā€™adesione: dallā€™accesso all'area riservata alla firma dellā€™accordo. ","type":"text"}]},{"type":"paragraph","children":[{"text":"Dal canto nostro, abbiamo istituito lā€™apposito capitolo di spesa ed effettuato su questo lā€™apposito impegno di spesa per la prestazione del servizio.","type":"text"}]},{"type":"paragraph","children":[{"text":"Naturalmente questa nuova modalitĆ  di invio impone il rispetto di una serie di criteri e parametri: ad esempio, lā€™atto ĆØ nativo digitale e richiede quindi - per la versione stampata - di seguire delle specifiche precise, che ci sono state fornite e spiegate dal team di PagoPA e ci hanno consentito di procedere alla digitalizzazione degli atti con grande facilitĆ .ā€","type":"text"}]},{"type":"paragraph","children":[{"text":"ā€œSiamo pienamente soddisfatti di quanto fatto giĆ  lo scorso anno con SEND: abbiamo rilevato un significativo snellimento dei processi e abbiamo sperimentato i vantaggi legati al ritorno della notifica che viene automaticamente caricata in procedura.ā€ conclude Sabrina Contu. ","type":"text"}]},{"type":"heading","level":5,"children":[{"text":"La risposta dei cittadini","type":"text"}]},{"type":"paragraph","children":[{"text":"ā€œAbbiamo cercato di fare una comunicazione sul territorio in modo che i cittadini fossero informati di questa nuova possibilitĆ , per accompagnarli in questo percorso di transizione digitale e consentire loro di percepire il cambio di passo del Comune come un vantaggio reale.ā€ racconta Paola Cuccureddu. ā€œSappiamo bene all'interno di un comune quanto siano rilevanti - e purtroppo limitate - sia il fattore tempo che le risorse umane e tecniche disponibili. Con SEND abbiamo potuto ridurre i costi e ottimizzare al meglio le risorse disponibili, creando un servizio maggiormente di valore e impiegando quelle risorse per riuscire a fare una maggiore lotta all'evasione. Per il 2024 vogliamo continuare a notificare con SEND, forti anche dellā€™esperienza dello scorso anno, e contiamo di gestire circa 40.000 notifiche legate agli accertamenti TARI.ā€","type":"text"}]}],"id":8,"__component":"parts.html"},{"component":"quote","quote":"Siamo pienamente soddisfatti di quanto fatto giĆ  lo scorso anno con SEND: abbiamo rilevato un significativo snellimento dei processi e abbiamo sperimentato i vantaggi legati al ritorno della notifica che viene automaticamente caricata in procedura.","backgroundImage":{"name":"43575a126f32092f1a455b95e4192aca.jpg","alternativeText":"$undefined","caption":"$undefined","width":2880,"height":1120,"ext":".jpg","mime":"image/jpeg","size":596.04,"url":"https://cdn.dev.developer.pagopa.it/43575a126f32092f1a455b95e4192aca_9932ad76b1.jpg"}}],"products":[{"name":"IO, lā€™app dei servizi pubblici","description":"Raccogli tutti i servizi digitali del tuo ente in unā€™unica piattaforma e interagisci in modo semplice e sicuro con i cittadini.","slug":"app-io","shortName":"IO","logo":{"name":"appIo.svg","alternativeText":"$undefined","caption":"$undefined","width":60,"height":61,"ext":".svg","mime":"image/svg+xml","size":1.9,"url":"https://cdn.dev.developer.pagopa.it/app_Io_d9bffd556b.svg"}},{"name":"Piattaforma pagoPA","description":"Gestisci gli incassi in modo centralizzato e con immediata riconciliazione delle posizioni debitorie.","slug":"pago-pa","shortName":"pagoPA","logo":{"name":"pagoPa.svg","alternativeText":"$undefined","caption":"$undefined","width":60,"height":61,"ext":".svg","mime":"image/svg+xml","size":2.28,"url":"https://cdn.dev.developer.pagopa.it/pago_Pa_ce808e88c2.svg"}},{"name":"SEND - Servizio Notifiche Digitali","description":"Invia comunicazioni a valore legale con un processo di notificazione gestito interamente dalla piattaforma.","slug":"send","shortName":"SEND","logo":{"name":"send.svg","alternativeText":"$undefined","caption":"$undefined","width":60,"height":61,"ext":".svg","mime":"image/svg+xml","size":1.56,"url":"https://cdn.dev.developer.pagopa.it/send_9dd94aaf2a.svg"}}]}] +6:[["$","meta","0",{"charSet":"utf-8"}],["$","title","1",{"children":"PagoPA DevPortal | Il processo di riscossione della TARI del Comune di Cagliari"}],["$","meta","2",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","3",{"property":"og:title","content":"PagoPA DevPortal | Il processo di riscossione della TARI del Comune di Cagliari"}],["$","meta","4",{"property":"og:locale","content":"it_IT"}],["$","meta","5",{"property":"og:image","content":"https://dev.developer.pagopa.it/images/dev-portal-home.jpg"}],["$","meta","6",{"property":"og:type","content":"website"}],["$","meta","7",{"name":"twitter:card","content":"summary"}],["$","meta","8",{"name":"twitter:site","content":"@pagopa"}],["$","meta","9",{"name":"twitter:creator","content":"@pagopa"}],["$","meta","10",{"name":"twitter:title","content":"PagoPA DevPortal | Il processo di riscossione della TARI del Comune di Cagliari"}],["$","meta","11",{"name":"twitter:image","content":"https://dev.developer.pagopa.it/images/dev-portal-home.jpg"}],["$","link","12",{"rel":"icon","href":"/icon.svg?f2ac316c8a418774","type":"image/svg+xml","sizes":"any"}],["$","meta","13",{"name":"next-size-adjust"}]] +13:null diff --git a/apps/chatbot/docker/files/nextjs-website/generated/case-histories/test-case.html b/apps/chatbot/docker/files/nextjs-website/generated/case-histories/test-case.html new file mode 100644 index 0000000000..d5d87eee48 --- /dev/null +++ b/apps/chatbot/docker/files/nextjs-website/generated/case-histories/test-case.html @@ -0,0 +1 @@ +PagoPA DevPortal | test case

test case

h1

h2

h3

h4

h5

\ No newline at end of file diff --git a/apps/chatbot/docker/files/nextjs-website/generated/case-histories/test-case.txt b/apps/chatbot/docker/files/nextjs-website/generated/case-histories/test-case.txt new file mode 100644 index 0000000000..80f29fda36 --- /dev/null +++ b/apps/chatbot/docker/files/nextjs-website/generated/case-histories/test-case.txt @@ -0,0 +1,23 @@ +1:HL["/_next/static/media/28fac4a6e903645b-s.p.woff2",{"as":"font","type":"font/woff2"}] +2:HL["/_next/static/media/2bb25458ea2620e9-s.p.woff2",{"as":"font","type":"font/woff2"}] +3:HL["/_next/static/media/f378bd2abf9e0d48-s.p.woff2",{"as":"font","type":"font/woff2"}] +4:HL["/_next/static/css/c1a3c2f6d783e471.css",{"as":"style"}] +0:["dgB9Zym4WNhjMAim9VsHX",[[["",{"children":["case-histories",{"children":[["caseHistorySlug","test-case","d"],{"children":["__PAGE__?{\"caseHistorySlug\":\"test-case\"}",{}]}]}]},"$undefined","$undefined",true],"$L5",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/c1a3c2f6d783e471.css","precedence":"next"}]],"$L6"]]]] +7:HL["/_next/static/css/918940977e95543e.css",{"as":"style"}] +5:[null,"$L8",null] +9:I{"id":44631,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +a:I{"id":36738,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +b:I{"id":93038,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +c:I{"id":8392,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +d:I{"id":10099,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +e:I{"id":15337,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +f:I{"id":13249,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +10:I{"id":92842,"chunks":["2272:static/chunks/webpack-d4fd03056baeac5f.js","1293:static/chunks/1dd3208c-3c1077ed7a7ffc38.js","3575:static/chunks/3575-63f451fe7624e01e.js"],"name":"default","async":false} +11:I{"id":41316,"chunks":["2272:static/chunks/webpack-d4fd03056baeac5f.js","1293:static/chunks/1dd3208c-3c1077ed7a7ffc38.js","3575:static/chunks/3575-63f451fe7624e01e.js"],"name":"default","async":false} +12:I{"id":80741,"chunks":["7950:static/chunks/7950-2339fabfd6a7629e.js","3093:static/chunks/3093-9dff2f7303959b74.js","2352:static/chunks/2352-337e28b99911d4e6.js","9160:static/chunks/app/not-found-b6e4c33c40a04c85.js"],"name":"Abstract","async":false} +15:I{"id":61151,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","793:static/chunks/793-77ca7af0bb11a65e.js","9324:static/chunks/9324-d505475479bc0041.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","3185:static/chunks/app/layout-c2a6e31b15c439fb.js"],"name":"","async":false} +8:["$","html",null,{"lang":"it","className":"__variable_c1363f","children":[["$","head",null,{"children":false}],["$","$L9",null,{"options":{"key":"mui"},"children":["$","$La",null,{"locale":"it","messages":{"devPortal":{"company":"PagoPA","siteHeader":{"label":"Menu","products":"Prodotti","profile":"Profilo","webinars":"Webinar","solutions":"Soluzioni"},"title":"DevPortal"},"profile":{"title":"Profilo","agreements":{"newsletter":{"description":"Inviami email relative alle risorse e agli aggiornamenti sui prodotti. Se questa opzione ĆØ attiva, PagoPA ti invierĆ  di tanto in tanto delle email utili e pertinenti.","error":{"subscribe":"C'ĆØ stato un errore nell'iscrizione, riprova piĆ¹ tardi o contatta l'assistenza tecnica.","unsubscribe":"C'ĆØ stato un errore nella cancellazione, riprova piĆ¹ tardi o contatta l'assistenza tecnica."},"subscribe":"Iscriviti","title":"Iscrizione alla newsletter","unsubscribe":"Annulla iscrizione"},"privacy":{"basicData":"PagoPA raccoglie dati personali di base che ti permettono di creare e utilizzare il tuo account su DevPortal. Questi dati sono raccolti durante la registrazione e l'aggiornamento del tuo profilo. PagoPA garantisce che i tuoi dati vengano gestiti in modo sicuro e ne giustifica lā€™utilizzo secondo lā€™informativa Privacy di PagoPA. I tuoi dati personali di base verranno conservati fino a quando avrai un account attivo su PagoPA DevPortal.","title":"Privacy","statement":{"text":"La nostra $labelOfLinkToReplace$ fornisce informazioni dettagliate sui tuoi diritti in materia di privacy.","labelOfLinkToReplace":"Informativa Privacy"}},"title":"Consensi e privacy"},"personalData":{"save":"Conferma","cancel":"Annulla","title":"Su di te","dataSection":"I tuoi dati","accountSection":"Il tuo account","deleteAccountSection":"Eliminazione Account","deleteAccount":{"sectionLabel":"Puoi decidere di eliminare il tuo account su PagoPA DevPortal in qualsiasi momento. I tuoi dati verranno cancellati dai nostri sistemi.","buttonLabel":"Elimina account","modalTitle":"Confermi di voler eliminare il tuo account?","modalText":"Se elimini il tuo account PagoPA DevPortal tutte le tue preferenze e i tuoi dati verranno cancellati dai nostri sistemi. Questa azione non ĆØ reversibile."},"deleteAccountButton":"Elimina account","addField":"Inserisci","fields":{"name":"Nome","surname":"Cognome","role":"Ruolo","company":"Tipologia di ente o azienda","sector":"Settore","products":"Prodotti di interesse","email":"Indirizzo email","password":"Password"}},"changePassword":{"title":"Cambia password","currentPassword":"Password attuale","newPassword":"Nuova password","confirmPassword":"Conferma password","wrongPassword":"La password inserita non risulta corretta","requiredCurrentPassword":"ƈ necessario inserire la password attuale","passwordsNotMatch":"Le password non corrispondono","passwordPolicy":"Non rispetta i requisiti. Minimo 8 caratteri, almeno un numero, almeno una lettera maiuscola e almeno un carattere speciale","cancel":"Annulla","save":"Conferma","dialog":{"title":"La password ĆØ stata modificata correttamente","text":"Effettua lā€™accesso utilizzando la nuova password. Se sono presenti altre finestre del browser con accesso al tuo account tramite la vecchia password, assicurati di chiuderle.","confirmLabel":"Vai al login"}},"changeEmail":{"cancel":"Annulla","save":"Conferma","title":"Modifica l'indirizzo email","notAuthorizedException":"L'indirizzo email inserito non ĆØ valido","wrongEmail":"L'indirizzo email inserito non risulta corretto","dialog":{"title":"Verifica il nuovo indirizzo email","text":"Abbiamo inviato una email allā€™indirizzo che hai inserito.\nClicca sul link contenuto al suo interno per verificarlo e associarlo al tuo account PagoPA DevPortal.","confirmLabel":"Chiudi"}},"insert":"Inserisci"},"webinar":{"liveWebinar":"Webinar in corso","subscriptionError":"Limite di iscrizioni raggiunto","genericSubscriptionError":"Qualcosa ĆØ andato storto, riprova piĆ¹ tardi","goToWebinar":"Vai al webinar","whyParticipate":"PerchĆ© partecipare?","speakers":"Ospiti","subscribe":"Iscriviti","speakersTitle":"Ospiti","questionList":{"title":{"highlightedQuestions":"Domande scelte","questions":"Domande"},"hiddenByMe":"Hai nascosto questa domanda","highlightedBy":"Scelta da"},"questionsForm":{"title":"Scrivi qui domande e commenti per la discussione finale (al massimo {maxLength} caratteri)","question":"Domanda","submit":"Invia","submitted":"Inviato","error":"Errore nell'invio, riprova piĆ¹ tardi."},"warnings":{"email":"Il giorno prima dell'evento riceverai una email con i dettagli.","goTo":"Collegati alla pagina del webinar all'orario di inizio dell'evento.","refresh":"Collegati a questa pagina all'orario di inizio dell'evento."},"webinarsSection":{"description":"","noWebinars":"Stiamo preparando i prossimi eventi, controlla piĆ¹ avanti.","title":{"dontLoseNext":"Non perderti il prossimo webinar","dontLoseNextPlural":"Non perderti i prossimi webinar","next":"I prossimi appuntamenti","our":"I nostri webinar","participateTo":"Partecipa ai nostri webinar","dedicatedWebinar":"Guarda il webinar dedicato"},"solutionDescription":"I webinar PagoPA LAB sono incontri formativi in cui gli specialisti del nostro team illustrano tutti i passaggi del processo di gestione di un servizio pubblico digitale, approfondendo i benefici di un approccio integrato delle piattaforme gestite da PagoPA.","questionsAndAnswers":{"title":"Le risposte alle vostre domande","showMore":"Mostra piĆ¹ domande","showLess":"Mostra meno domande"},"relatedResources":{"title":"Risorse correlate"}},"view":"Visualizza","pastWebinars":{"title":"Esplora tutti i webinar","description":"Approfondisci argomenti legati all'integrazione con i nostri prodotti attraverso la guida e i consigli esperti dei professionisti PagoPA.","cta":"Vedi tutti"}},"webinars":{"title":"Partecipa agli eventi live e guarda i webinar passati ","subtitle":"Con i webinar di PagoPA DevPortal hai l'opportunitĆ  di approfondire argomenti legati all'integrazione con i nostri prodotti, attraverso la guida e i consigli esperti del nostro team.","nextWebinars":"I prossimi appuntamenti","pastWebinars":"Webinar passati"},"auth":{"logout":"Esci","login":{"action":"Accedi","loginToYourAccount":"Accedi al tuo account DevPortal","rememberMe":"Ricordami","forgotPassword":"Hai dimenticato la password?","noAccount":"Non hai un account?","noAccountError":"Nome utente o password non corretti.","accountAlreadyConfirmed":{"yourAccountIsAlreadyConfirmed":"Hai giĆ  validato questo indirizzo email","goToLogin":"Vai al Login"}},"confirmation":{"title":"Verifica la tua identitĆ ","body":"Abbiamo inviato un codice di verifica a {email}
Il codice scade tra 15 minuti.","code":"Codice di verifica","checkJunkMail":"Non hai ricevuto alcuna email? Controlla la posta indesiderata oppure","continue":"Continua","ctaLabel":"Reinvia email","resendEmail":"Reinvia email"},"resendEmail":{"label":"Reinvia email"},"signUp":{"action":"Iscriviti","createYourAccount":"Crea il tuo account","passwordMismatchError":"Le password non combaciano","confirmComunications":"Inviami email relative alle risorse e agli aggiornamenti sui prodotti. Se questa casella ĆØ selezionata, PagoPA ti invierĆ  di tanto in tanto delle email utili e pertinenti. Puoi annullare l'iscrizione in qualsiasi momento.","acceptPolicy":"Cliccando su iscriviti dichiari di aver preso visione della nostra informativa privacy e dei nostri termini e condizioni d'uso.","alreadyHaveAnAccount":"Hai giĆ  un account?","whyCreateAccount":"PerchĆ© iscriversi a PagoPA DevPortal","passwordError":"Non rispetta i requisiti.","passwordPolicy":"Minimo 8 caratteri, almeno un numero, almeno una lettera maiuscola e almeno un carattere speciale","emailSent":"Email inviata a {email}","advantages":{"exclusive_contents":{"title":"Accedi a contenuti esclusivi","text":"Assisti ai webinar di PagoPA e interagisci con noi sugli argomenti del momento.","isComingSoon":"false"},"product_updates":{"title":"Ricevi aggiornamenti sui nostri prodotti","text":"Non perdere neanche un nuovo contenuto, guida o tutorial. Puoi scegliere di ricevere via email le novitĆ  sui prodotti PagoPA e sull'integrazione tecnologica. ","isComingSoon":"false"},"api_keys":{"title":"Genera, gestisci e utilizza api Key","text":"Sblocca tutto il potenziale del DevPortal con API Key, Mocker, SDK ed altro ancora.","isComingSoon":"true"},"support":{"title":"Richiedi assistenza tramite un form dedicato","text":"Avvicinati con facilitĆ  alle soluzioni di cui hai bisogno e risolvi le difficoltĆ  con il nostro aiuto.","isComingSoon":"true"}},"companyRoles":{"ente-pubblico":"Ente pubblico","partner-tecnologico":"Partner tecnologico","psp":"PSP","gestore-di-pubblico-servizio":"Gestore di pubblico servizio","azienda-privata":"Azienda privata","altro":"Altro"}},"confirmSignUp":{"title":"Confermaci che sei tu","emailSent":"Abbiamo inviato una email a ","clickToConfirm":"Clicca sul pulsante contenuto al suo interno per verificarla.","didntReceiveEmail":"Non hai ricevuto l'email? Controlla la posta indesiderata oppure","resendEmail":"Invia nuovamente l'email","wrongEmail":"L'indirizzo email ĆØ errato?"},"confirmLogin":{"title":"Verifica la tua identitĆ ","code":"Codice di verifica","confirmationCodeSent":"Abbiamo inviato un codice di verifica a ","confirmationCodeExpires":"Il codice scade tra 15 minuti.","checkJunkMail":"Non hai ricevuto alcuna email? Controlla la posta indesiderata oppure","continue":"Continua","resendEmail":"Reinvia email","invalidCode":"Il codice inserito non ĆØ corretto","emptyCode":"Il codice ĆØ obbligatorio"},"accountActivated":{"goToLogin":"Vai al login","welcomeMessage":"Ti diamo il benvenuto su PagoPA DevPortal.","yourAccountIsActive":"Il tuo account ĆØ attivo"},"resetPassword":{"body":"Inserisci il tuo indirizzo email e ti invieremo le istruzioni per impostare una nuova password.","checkEmailEnd":"riceverai una email con un link per impostare una nuova password.","checkEmailStart":"Se esiste un account associato a ","checkEmailTitle":"Controlla l'email","emailFieldError":"Lā€™indirizzo email non ĆØ valido","goToLogin":"Torna al login","invalidLinkError":"Il link non ĆØ valido","newPassword":"Imposta una nuova password","passwordSet":"Password impostata correttamente","rememberPassword":"Ricordi la tua password?","resendEmail":"Reinvia email","resendEmailPrompt":"Non hai ricevuto l'email? Controlla nella posta indesiderata oppure","send":"Invia","title":"Recupera password","wrongEmail":"L'indirizzo email ĆØ errato?"},"expiredCode":{"expiredLink":"Il link che hai usato ĆØ scaduto","goToProfile":"Vai al profilo"}},"shared":{"comingSoon":"In Arrivo","readTutorial":"Leggi il tutorial","readStory":"Leggi la storia","moreInfo":"Scopri di piĆ¹","version":"Versione","copiedTooltip":"Copiato","siteTitle":"PagoPA DevPortal","emailAddress":"Indirizzo email","password":"Password","goBack":"Torna indietro","requiredFields":"* Campi obbligatori","firstName":"Nome","lastName":"Cognome","confirmPassword":"Conferma password","company":"Tipologia Ente o Azienda","role":"Ruolo","requiredFieldError":"Questo campo non puĆ² essere vuoto","emailFieldError":"Inserisci un indirizzo email valido","emailAlreadyTaken":"Esiste giĆ  un account per questo indirizzo email","goToModel":"Vai al modello","edit":"Modifica","cancel":"Annulla","yourData":"Profilo","subscribeButton":{"subscribeLabel":{"default":"Iscriviti","takePart":"Partecipa","view":"Visualizza"},"subscribedLabel":"Iscrizione confermata","unsubscribeLabel":"Annulla iscrizione"},"relatedLinks":"Link utili","downloadableDocuments":"Materiali scaricabili","download":"Scarica"},"pageNotFound":{"overline":"404","title":"Pagina non trovata","description":"La pagina che stai cercando non esiste"},"productGuidePage":{"onThisPage":"In questa pagina","tableOfContents":"Tabella dei contenuti"},"homepage":{"news":{"title":"In evidenza","list":{"0":{"title":"Usa il validatore di SEND per fare una verifica sullā€™integrazione","href":{"label":"Vai al validatore","title":"Vai al validatore"},"image":{"url":"/images/homepage-validatore.png","alt":"Immagine: Usa il validatore di SEND per fare una verifica sullā€™integrazione"}},"1":{"title":"Scopri i nuovi tutorial di Firma con IO","href":{"label":"Vai ai tutorial","title":"Vai ai tutorial"},"image":{"url":"/images/homepage-io-sign.png","alt":"Immagine: Scopri i nuovi tutorial di Firma con IO"}},"2":{"title":"Scopri la Quick Start di piattaforma pagoPA: lā€™integrazione in pochi semplici step","href":{"label":"Vai alla guida","title":"Vai alla guida"},"image":{"url":"/images/homepage-pago-pa.png","alt":"Immagine: Scopri la Quick Start di piattaforma pagoPA: lā€™integrazione in pochi semplici step"}}}},"webinarBannerButtonContent":"Scopri","productsShowcaseTitle":"Scopri il nostro ecosistema","heroItems":{"0":{"title":"Tutto ciĆ² che serve per integrarsi con i prodotti PagoPA"},"1":{"title":"Invia comunicazioni a valore legale con piattaforma notifiche","ctaLabel":"Vai a SEND"},"2":{"title":"Richiedi una firma su documenti e contratti","ctaLabel":"Vai a Firma con IO"}},"webinarsSection":{"description":"","title":"Partecipa ai nostri webinar","link":{"href":"#","label":"Vedi tutti i webinar"}},"comingsoonDocumentation":{"title":"Documentazione in arrivo","links":{"0":{"text":"InteroperabilitĆ . Scambia informazioni con altri enti in tutta sicurezza."},"1":{"text":"Check IBAN. Utilizza un sistema per la gestione degli incassi centralizzato e immediato."}}}},"quickStartGuide":{"content":{"apiPhases":{"request":{"cta":{"label":"Invia la richiesta"},"title":"Chiamata API"},"response":{"cta":{"icon":"Replay","label":"Ripristina la chiamata"},"title":"Risposta del server"}},"next":"Prossimo contenuto","previous":"Contenuto precedente"}},"overview":{"startInfo":{"title":"Si comincia da qui"},"tutorial":{"title":"Esplora i tutorial","ctaLabel":"Vedi tutti i tutorial"},"postIntegration":{"title":"Dopo l'integrazione"},"relatedLinks":{"title":"LINK UTILI"}},"footer":{"companyLink":{"ariaLabel":"Link: vai al sito di PagoPA S.p.A."},"languages":{"it":"Italiano"},"legalInfo":"PagoPA S.p.A. - SocietĆ  per azioni con socio unico - Capitale sociale di euro 1,000,000 interamente versato - Sede legale in Roma, Piazza Colonna 370,

CAP 00187 - N. di iscrizione a Registro Imprese di Roma, CF e P.IVA 15376371009","followUs":{"links":{"accessibility":{"ariaLabel":"Vai al link: AccessibilitĆ ","label":"AccessibilitĆ "}},"title":"Seguici su"},"aboutUs":{"title":"","links":{"whoWeAre":{"ariaLabel":"Vai al link: Chi siamo","label":"Chi siamo"},"pnrr":{"ariaLabel":"Vai al link: PNRR","label":"PNRR"},"media":{"ariaLabel":"Vai al link: Media","label":"Media"},"workWithUs":{"ariaLabel":"Vai al link: Lavora con noi","label":"Lavora con noi"}}},"resources":{"title":"Risorse","links":{"privacyPolicy":{"ariaLabel":"Vai al link: Informativa Privacy","label":"Informativa Privacy"},"termsOfService":{"ariaLabel":"Vai al link: Termini e Condizioni","label":"Termini e Condizioni"},"societaTrasparente":{"ariaLabel":"Vai al link: SocietĆ  trasparente","label":"SocietĆ  trasparente"},"disclosurePolicy":{"ariaLabel":"Vai al link: Responsible Disclosure Policy","label":"Responsible Disclosure Policy"},"model231":{"ariaLabel":"Vai al link: Modello 231","label":"Modello 231"}}},"services":{"title":"PRODOTTI E SERVIZI","links":{"appIO":{"ariaLabel":"Vai al link: App IO","label":"App IO"},"pagoPA":{"ariaLabel":"Vai al link: Piattaforma pagoPA","label":"Piattaforma pagoPA"},"centroStella":{"ariaLabel":"Vai al link: Centro stella","label":"Centro stella"},"checkIBAN":{"ariaLabel":"Vai al link: Check IBAN","label":"Check IBAN"},"send":{"ariaLabel":"Vai al link: SEND - Servizio Notifiche Digitali","label":"SEND - Servizio Notifiche Digitali"},"pdnd":{"ariaLabel":"Vai al link: Piattaforma Digitale Nazionale Dati - InteroperabilitĆ ","label":"Piattaforma Digitale Nazionale Dati - InteroperabilitĆ "}}},"cookiePreferences":{"ariaLabel":"Preferenza Cookie","label":"Preferenza Cookie"}},"errors":{"CodeDeliveryFailureException":"Impossibile inviare il codice di verifica.","ForbiddenException":"La tua richiesta non ĆØ stata consentita dal sistema di autenticazione.","InternalErrorException":"Si ĆØ verificato un errore interno al sistema di autenticazione.","InvalidEmailRoleAccessPolicyException":"Il sistema di autenticazione non ĆØ autorizzato a utilizzare la tua identitĆ  email.","InvalidLambdaResponseException":"Il sistema di autenticazione ha riscontrato una risposta non valida.","InvalidParameterException":"Il servizio di autenticazione ha riscontrato un parametro non valido.","InvalidPasswordException":"Password non valida.","ResourceNotFoundException":"Il servizio di autenticazione non trova la risorsa richiesta.","TooManyRequestsException":"Troppe richieste di autenticazione.","UnexpectedLambdaException":"Ɖ stata riscontrata un'eccezione imprevista con il sistema di autenticazione.","UserLambdaValidationException":"Il servizio di autenticazione ha riscontrato un'eccezione di convalida utente.","UsernameExistsException":"Username giĆ  registrato.","UserNotFoundException":"Utente non registrato.","NotAuthorizedException":"Operazione non autorizzata.","PasswordResetRequiredException":"Ɖ stato richiesto un reset della password.","UserNotConfirmedException":"Utente non confermato, controlla nella email e apri il link di conferma.","CodeMismatchException":"Codice non valido.","ExpiredCodeException":"Codice scaduto.","TooManyFailedAttemptsException":"Troppi tentativi errati.","LimitExceededException":"Limiti di autenticazione superati."},"swagger":{"errorCard":{"header":"Oops, manca qualcosa.","message":"Non siamo riusciti a trovare la fonte originale per visualizzare questo contenuto."},"parameters":{"header":"Parametri","empty":"Nessun parametro"},"requestBody":{"header":"Corpo"},"responses":{"header":"Risposte"},"example":"Esempio","schema":"Modello","emptyOperations":{"header":"Nessuna operazione","message":"Non ci sono operazioni disponibili per questo endpoint."}},"breadcrumbs":{"home":"DevPortal","webinars":"Webinar","solutions":"Soluzioni"},"solution":{"steps":{"platforms":"Piattaforme Abilitanti"},"ctaDetailLabel":"Leggi la guida completa"},"caseHistory":{"productShowcaseLabel":"Come integrarsi? Inizia da qui"},"apiDataListPage":{"explore":"Esplora le API"},"chatBot":{"title":"Chatbot","writeNewMessagePlaceholder":"Scrivi un nuovo messaggio","chatHistory":"Cronologia chat","delete":"Elimina"}},"timeZone":"Europe/Rome","children":["$","$Lb",null,{"children":[["$","$Lc",null,{"cookieDomainScript":"$undefined"}],["$","$Ld",null,{"children":["$","$Le",null,{"isChatbotVisible":false,"children":[["$","$Lf",null,{"products":[{"name":"IO, lā€™app dei servizi pubblici","shortName":"IO","description":"Raccogli tutti i servizi digitali del tuo ente in unā€™unica piattaforma e interagisci in modo semplice e sicuro con i cittadini.","slug":"app-io","path":"/app-io","logo":{"alternativeText":"IO, lā€™app dei servizi pubblici","caption":"$undefined","size":10,"name":"","width":60,"height":61,"ext":".svg","mime":"image/svg+xml","url":"/icons/appIo.svg"},"subpaths":{"overview":{"name":"Panoramica","path":"/app-io/overview"},"quickStart":{"name":"Quick start","path":"/app-io/quick-start"},"api":{"name":"API","path":"/app-io/api/app-io-main"},"tutorials":{"name":"Tutorial","path":"/app-io/tutorials"},"guides":{"name":"Guide e manuali","path":"/app-io/guides"}}},{"name":"Firma con IO","shortName":"Firma con IO","description":"Richiedi la Firma Elettronica Certificata su contratti e documenti. Le cittadine e i cittadini possono firmare direttamente sullā€™app IO.","slug":"firma-con-io","path":"/firma-con-io","logo":{"alternativeText":"Firma con IO","caption":"$undefined","size":10,"name":"","width":60,"height":61,"ext":".svg","mime":"image/svg+xml","url":"/icons/appIo.svg"},"subpaths":{"overview":{"name":"Panoramica","path":"/firma-con-io/overview"},"quickStart":{"name":"Quick start","path":"/firma-con-io/quick-start"},"api":{"name":"API","path":"/firma-con-io/api/firma-con-io-main"},"tutorials":{"name":"Tutorial","path":"/firma-con-io/tutorials"},"guides":{"name":"Guide e manuali","path":"/firma-con-io/guides"}}},{"name":"SEND - Servizio Notifiche Digitali","shortName":"SEND","description":"Invia comunicazioni a valore legale con un processo di notificazione gestito interamente dalla piattaforma.","slug":"send","path":"/send","logo":{"alternativeText":"SEND - Servizio Notifiche Digitali","caption":"$undefined","size":10,"name":"","width":60,"height":61,"ext":".svg","mime":"image/svg+xml","url":"/icons/send.svg"},"subpaths":{"overview":{"name":"Panoramica","path":"/send/overview"},"quickStart":{"name":"Quick start","path":"/send/quick-start"},"api":{"name":"API","path":"/send/api/send-main"},"tutorials":{"name":"Tutorial","path":"/send/tutorials"},"guides":{"name":"Guide e manuali","path":"/send/guides"}}},{"name":"Piattaforma pagoPA","shortName":"pagoPA","description":"Gestisci gli incassi in modo centralizzato e con immediata riconciliazione delle posizioni debitorie.","path":"/pago-pa","slug":"pago-pa","logo":{"alternativeText":"Piattaforma pagoPA","caption":"$undefined","size":10,"name":"","width":60,"height":61,"ext":".svg","mime":"image/svg+xml","url":"/icons/pagoPa.svg"},"subpaths":{"overview":{"name":"Panoramica","path":"/pago-pa/overview"},"quickStart":{"name":"Quick start","path":"/pago-pa/quick-start"},"api":{"name":"API","path":"/pago-pa/api"},"tutorials":{"name":"Tutorial","path":"/pago-pa/tutorials"},"guides":{"name":"Guide e manuali","path":"/pago-pa/guides"}}}]}],["$","main",null,{"children":["$","$L10",null,{"parallelRouterKey":"children","segmentPath":["children"],"loading":"$undefined","loadingStyles":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","template":["$","$L11",null,{}],"templateStyles":"$undefined","notFound":["$","$L12",null,{"layout":"center","overline":"404","title":"Pagina non trovata","description":"La pagina che stai cercando non esiste"}],"notFoundStyles":[],"childProp":{"current":[null,["$","div",null,{"id":"chatbot-page-content","children":["$","$L10",null,{"parallelRouterKey":"children","segmentPath":["children","case-histories","children"],"loading":"$undefined","loadingStyles":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","template":["$","$L11",null,{}],"templateStyles":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","childProp":{"current":["$","$L10",null,{"parallelRouterKey":"children","segmentPath":["children","case-histories","children",["caseHistorySlug","test-case","d"],"children"],"loading":"$undefined","loadingStyles":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","template":["$","$L11",null,{}],"templateStyles":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","childProp":{"current":["$L13","$L14",null],"segment":"__PAGE__?{\"caseHistorySlug\":\"test-case\"}"},"styles":[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/918940977e95543e.css","precedence":"next"}]]}],"segment":["caseHistorySlug","test-case","d"]},"styles":[]}]}],null],"segment":"case-histories"},"styles":[]}]}],["$","$L15",null,{}]]}]}]]}]}]}]]}] +16:I{"id":54316,"chunks":["2978:static/chunks/e871d0c9-75a84d7b32d4bfcc.js","3495:static/chunks/f5890c91-7948379131fd4dd8.js","7950:static/chunks/7950-2339fabfd6a7629e.js","2645:static/chunks/2645-e818d1ef9d77508b.js","3093:static/chunks/3093-9dff2f7303959b74.js","1607:static/chunks/1607-bd6a7b286c720918.js","3401:static/chunks/3401-95a9b8907071a549.js","2352:static/chunks/2352-337e28b99911d4e6.js","9962:static/chunks/9962-d802b3a5617cee9a.js","1464:static/chunks/1464-708bd411d4e8fbe2.js","8541:static/chunks/8541-575bce64f7a8e39b.js","9889:static/chunks/9889-574b6d473be64fdb.js","6751:static/chunks/6751-e35273ed6785c759.js","3864:static/chunks/3864-8d73cd0bdcf76e4e.js","2056:static/chunks/2056-b2663ceea2894c1f.js","2377:static/chunks/2377-3873cc84882ec78b.js","7640:static/chunks/7640-ca747730c54eac58.js","4263:static/chunks/4263-662bc88b72cc5d29.js","4047:static/chunks/4047-f8e10a6b37bf2b34.js","1189:static/chunks/1189-2b1aa7c0348b14f6.js","2367:static/chunks/2367-df6623c4eb9dd6b0.js","6686:static/chunks/6686-9bc47ab2e6abbf5b.js","1878:static/chunks/1878-a3a68810eafbc18e.js","2536:static/chunks/2536-70a61cc5dfb9f7da.js","2373:static/chunks/app/case-histories/[caseHistorySlug]/page-bb9f62747b123bc3.js"],"name":"","async":false} +14:["$","$L16",null,{"slug":"test-case","title":"test case","description":"$undefined","publishedAt":"$D2024-07-24T07:55:19.128Z","image":"$undefined","parts":[{"component":"blockRenderer","html":[{"type":"heading","level":1,"children":[{"text":"h1","type":"text"}]},{"type":"heading","level":2,"children":[{"text":"h2","type":"text"}]},{"type":"heading","level":3,"children":[{"text":"h3","type":"text"}]},{"type":"heading","level":4,"children":[{"text":"h4","type":"text"}]},{"type":"heading","level":5,"children":[{"text":"h5","type":"text"}]}],"id":10,"__component":"parts.html"}],"products":[]}] +6:[["$","meta","0",{"charSet":"utf-8"}],["$","title","1",{"children":"PagoPA DevPortal | test case"}],["$","meta","2",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","3",{"property":"og:title","content":"PagoPA DevPortal | test case"}],["$","meta","4",{"property":"og:locale","content":"it_IT"}],["$","meta","5",{"property":"og:image","content":"https://dev.developer.pagopa.it/images/dev-portal-home.jpg"}],["$","meta","6",{"property":"og:type","content":"website"}],["$","meta","7",{"name":"twitter:card","content":"summary"}],["$","meta","8",{"name":"twitter:site","content":"@pagopa"}],["$","meta","9",{"name":"twitter:creator","content":"@pagopa"}],["$","meta","10",{"name":"twitter:title","content":"PagoPA DevPortal | test case"}],["$","meta","11",{"name":"twitter:image","content":"https://dev.developer.pagopa.it/images/dev-portal-home.jpg"}],["$","link","12",{"rel":"icon","href":"/icon.svg?f2ac316c8a418774","type":"image/svg+xml","sizes":"any"}],["$","meta","13",{"name":"next-size-adjust"}]] +13:null diff --git a/apps/chatbot/docker/files/nextjs-website/generated/index.html b/apps/chatbot/docker/files/nextjs-website/generated/index.html new file mode 100644 index 0000000000..95c28d0ede --- /dev/null +++ b/apps/chatbot/docker/files/nextjs-website/generated/index.html @@ -0,0 +1 @@ +PagoPA DevPortal | PagoPA DevPortal

Tutto ciĆ² che serve per integrarsi con i prodotti PagoPA

Tutto ciĆ² che serve per integrarsi con i prodotti PagoPA

Invia comunicazioni a valore legale con SEND

Invia comunicazioni a valore legale con SEND

Richiedi una firma su documenti e contratti

Richiedi una firma su documenti e contratti

In evidenza

13 marzo 2024

Scopri la Quick Start di piattaforma pagoPA: lā€™integrazione in pochi semplici step

01 marzo 2024

Usa il validatore di SEND per fare una verifica sullā€™integrazione

01 marzo 2024

Scopri i nuovi tutorial di Firma con IO

Scopri il nostro ecosistema

IO, lā€™app dei servizi pubblici

Raccogli tutti i servizi digitali del tuo ente in unā€™unica piattaforma e interagisci in modo semplice e sicuro con i cittadini.

Firma con IO

Richiedi la Firma Elettronica Certificata su contratti e documenti. Le cittadine e i cittadini possono firmare direttamente sullā€™app IO.

Piattaforma pagoPA

Gestisci gli incassi in modo centralizzato e con immediata riconciliazione delle posizioni debitorie.

SEND - Servizio Notifiche Digitali

Invia comunicazioni a valore legale con un processo di notificazione gestito interamente dalla piattaforma.


\ No newline at end of file diff --git a/apps/chatbot/docker/files/nextjs-website/generated/privacy-policy.html b/apps/chatbot/docker/files/nextjs-website/generated/privacy-policy.html new file mode 100644 index 0000000000..818281c7e2 --- /dev/null +++ b/apps/chatbot/docker/files/nextjs-website/generated/privacy-policy.html @@ -0,0 +1 @@ +

\ No newline at end of file diff --git a/apps/chatbot/docker/files/nextjs-website/generated/solutions.html b/apps/chatbot/docker/files/nextjs-website/generated/solutions.html new file mode 100644 index 0000000000..a2db58576c --- /dev/null +++ b/apps/chatbot/docker/files/nextjs-website/generated/solutions.html @@ -0,0 +1 @@ +

Le soluzioni PagoPA: una nuova esperienza di servizi pubblici

Scopri le soluzioni, guide pratiche realizzate per supportarti nella trasformazione digitale dei tuoi servizi attraverso lā€™utilizzo integrato delle piattaforme PagoPA.

Multe per violazioni al Codice della Strada

In questa guida trovi i consigli utili per erogare in maniera virtuosa il servizio di sanzioni per violazione al Codice della strada, con approfondimenti sulla gestione delle diverse fasi.

IO
pagoPA
SEND
Tassa sui rifiuti (TARI)

La soluzione dedicata alle buone pratiche per gestire al meglio la riscossione della Tassa sui rifiuti (TARI), tramite un approccio automatizzato e integrato che garantisca una maggiore efficienza in termini di tempi e costi.

IO
pagoPA
SEND

I benefici della trasformazione digitale dei servizi

Comunicazione tempestiva e trasparente
Comunicazione tempestiva e trasparente

I cittadini hanno un accesso piĆ¹ diretto e immediato alle informazioni importanti e ai servizi che possono utilizzare

Processi di erogazione ottimizzati
Processi di erogazione ottimizzati

L'automazione dei processi e la digitalizzazione dei servizi portano una riduzione dei costi operativi associati alle procedure manuali

Riduzione dei tempi  di incasso
Riduzione dei tempi di incasso

I pagamenti vengono elaborati in tempo reale, sono sempre tracciabili e possono essere facilmente aggiorati nel tempo.

Storie di successo

Le testimonianze di come gli enti hanno dato forma a servizi efficienti e accessibili, ottimizzando i processi grazie allā€™integrazione con le piattaforme PagoPA.

Il processo di riscossione della TARI del Comune di Cagliari

\ No newline at end of file diff --git a/apps/chatbot/docker/files/nextjs-website/generated/terms-of-service.html b/apps/chatbot/docker/files/nextjs-website/generated/terms-of-service.html new file mode 100644 index 0000000000..fbb75907c9 --- /dev/null +++ b/apps/chatbot/docker/files/nextjs-website/generated/terms-of-service.html @@ -0,0 +1 @@ +

\ No newline at end of file diff --git a/apps/chatbot/docker/files/nextjs-website/generated/webinars.html b/apps/chatbot/docker/files/nextjs-website/generated/webinars.html new file mode 100644 index 0000000000..e1c4ee7403 --- /dev/null +++ b/apps/chatbot/docker/files/nextjs-website/generated/webinars.html @@ -0,0 +1 @@ +PagoPA DevPortal | PagoPA DevPortal - Webinars

\ No newline at end of file From ee7c25243208a48cb02ca048fc426fafc4f2fd93 Mon Sep 17 00:00:00 2001 From: mdciri Date: Wed, 27 Nov 2024 17:05:23 +0100 Subject: [PATCH 25/66] Update src.modules --- apps/chatbot/src/modules/chatbot.py | 14 +++++++------- apps/chatbot/src/modules/test_chatbot.py | 9 ++++++++- apps/chatbot/src/modules/vector_database.py | 16 ++++------------ 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index 4fbe504f14..4ce8a2550d 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -41,9 +41,9 @@ "Your role is to provide accurate, professional, and helpful responses to users' queries regarding " "the PagoPA DevPortal documentation available at: https://dev.developer.pagopa.it" ) -LANGFUSE_PUBLIC_KEY = os.getenv("LANGFUSE_PUBLIC_KEY") -LANGFUSE_SECRET_KEY = os.getenv("LANGFUSE_SECRET_KEY") -LANGFUSE_HOST = os.getenv("LANGFUSE_HOST") +LANGFUSE_PUBLIC_KEY = os.getenv("LANGFUSE_INIT_PROJECT_PUBLIC_KEY") +LANGFUSE_SECRET_KEY = os.getenv("LANGFUSE_INIT_PROJECT_SECRET_KEY") +LANGFUSE_HOST = os.getenv("NEXTAUTH_URL") LANGFUSE_TAG = os.getenv("LANGFUSE_TAG", "development") LANGFUSE = Langfuse( public_key = LANGFUSE_PUBLIC_KEY, @@ -211,7 +211,8 @@ def _messages_to_chathistory(self, messages: Optional[List[dict]] = None) -> Lis def get_trace(self, trace_id: str, as_dict: bool = False) -> TraceWithFullDetails | dict: try: - trace = LANGFUSE.get_trace(trace_id) + trace = LANGFUSE.fetch_trace(trace_id) + trace = trace.data except Exception as e: logger.error(e) @@ -317,8 +318,7 @@ def chat_generate( trace_id = trace_id, session_id = session_id, user_id = user_id, - tags = tags, - metadata = {"user_feedback": None} + tags = tags ): try: @@ -333,7 +333,7 @@ def chat_generate( response_str = self._get_response_str(engine_response) except Exception as e: - response_str = "Scusa, non posso elaborare la tua richiesta.\nProva a chiedimi una nuova domanda." + response_str = "Scusa, non posso elaborare la tua richiesta.\nProva a chierdimi una nuova domanda." logger.error(f"Exception: {e}") self.instrumentor.flush() diff --git a/apps/chatbot/src/modules/test_chatbot.py b/apps/chatbot/src/modules/test_chatbot.py index dfc44486e6..c63eed81de 100644 --- a/apps/chatbot/src/modules/test_chatbot.py +++ b/apps/chatbot/src/modules/test_chatbot.py @@ -62,17 +62,24 @@ def test_chat_generation(): try: res = CHATBOT.chat_generate( query_str = query_str, + trace_id = "abcde", user_id = "user-test", session_id = "session-test", tags = "test" ) res = CHATBOT.chat_generate( - query_str = "sai dirmi di piĆ¹?", + query_str = "sai dirmi di piĆ¹?", + trace_id = "fghik", messages = [{"question": query_str, "answer": res}], user_id = "user-test", session_id = "session-test", tags = "test" ) + + trace1 = CHATBOT.get_trace("abcde") + print("trace 1:", trace1) + trace2 = CHATBOT.get_trace("fghik") + print("trace 2:", trace2) except Exception as e: logger.error(e) res = f"Something went wrong!" diff --git a/apps/chatbot/src/modules/vector_database.py b/apps/chatbot/src/modules/vector_database.py index 8ac75a093a..8ce403b118 100644 --- a/apps/chatbot/src/modules/vector_database.py +++ b/apps/chatbot/src/modules/vector_database.py @@ -43,17 +43,9 @@ PROVIDER = os.getenv("CHB_PROVIDER") assert PROVIDER in ["google", "aws"] -INDEX_ID = get_ssm_parameter(os.getenv("CHB_LLAMAINDEX_INDEX_ID"), 'default-index') - -def calculate_new_index_id(current_index_id): - if current_index_id == 'default-index': - return current_index_id - TODAY = datetime.now(pytz.timezone("Europe/Rome")).strftime("%Y-%m-%d--%H:%M:%S") - rtn = f"index--{TODAY}" - return rtn - -NEW_INDEX_ID = calculate_new_index_id(INDEX_ID) - +TODAY = datetime.now(pytz.timezone("Europe/Rome")).strftime("%Y-%m-%d--%H:%M:%S") +INDEX_ID = get_ssm_parameter(os.getenv("CHB_LLAMAINDEX_INDEX_ID"), "default-index") +NEW_INDEX_ID = f"index--{TODAY}" if INDEX_ID != "default-index" else "default-index" REDIS_URL = os.getenv("CHB_REDIS_URL") WEBSITE_URL = os.getenv("CHB_WEBSITE_URL") REDIS_CLIENT = Redis.from_url(REDIS_URL, socket_timeout=10) @@ -326,7 +318,7 @@ def load_automerging_index_redis( def delete_old_index(): - if INDEX_ID: # is in ssm there is nothing, INDEX_ID = None + if INDEX_ID != "default-index": # if in ssm there is nothing, INDEX_ID = None for key in REDIS_CLIENT.scan_iter(): if f"{INDEX_ID}/vector" in str(key) or f"hash_table_{INDEX_ID}" == str(key): REDIS_CLIENT.delete(key) From f9c414a3bce68a96d4926a48ca006d37273da9da Mon Sep 17 00:00:00 2001 From: mdciri Date: Wed, 27 Nov 2024 17:05:41 +0100 Subject: [PATCH 26/66] Update src.app.main --- apps/chatbot/src/app/main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/chatbot/src/app/main.py b/apps/chatbot/src/app/main.py index 3a6b54329c..dd0f509c63 100644 --- a/apps/chatbot/src/app/main.py +++ b/apps/chatbot/src/app/main.py @@ -1,6 +1,7 @@ import yaml import mangum import uvicorn +import logging import json import os import uuid @@ -16,6 +17,7 @@ from src.modules.chatbot import Chatbot +logging.basicConfig(level=logging.INFO) params = yaml.safe_load(open("config/params.yaml", "r")) prompts = yaml.safe_load(open("config/prompts.yaml", "r")) AWS_DEFAULT_REGION = os.getenv('CHB_AWS_DEFAULT_REGION', os.getenv('AWS_DEFAULT_REGION', None)) From e88d8b0522e58f4c63e224d2c10e2ce11b5fe6e4 Mon Sep 17 00:00:00 2001 From: mdciri Date: Wed, 27 Nov 2024 17:05:54 +0100 Subject: [PATCH 27/66] Update docker --- apps/chatbot/docker/app.local.Dockerfile | 1 + apps/chatbot/docker/compose.test.yaml | 2 +- apps/chatbot/docker/compose.yaml | 28 ++++--------------- .../docker/docker-compose-build-local.sh | 2 +- 4 files changed, 8 insertions(+), 25 deletions(-) diff --git a/apps/chatbot/docker/app.local.Dockerfile b/apps/chatbot/docker/app.local.Dockerfile index c64badc5b7..b2d61ac35e 100644 --- a/apps/chatbot/docker/app.local.Dockerfile +++ b/apps/chatbot/docker/app.local.Dockerfile @@ -23,6 +23,7 @@ COPY ./pyproject.toml . COPY ./poetry.lock . COPY ./src ./src COPY ./config ./config +COPY ./scripts ./scripts RUN poetry config virtualenvs.create false RUN poetry install diff --git a/apps/chatbot/docker/compose.test.yaml b/apps/chatbot/docker/compose.test.yaml index 3ba859f77a..40c242b930 100644 --- a/apps/chatbot/docker/compose.test.yaml +++ b/apps/chatbot/docker/compose.test.yaml @@ -10,7 +10,7 @@ services: volumes: - ..:/app - ./files/.aws:/root/.aws - - ../../nextjs-website/generated:/app/build-devp/out + - ./files/nextjs-website/out:/app/build-devp/out depends_on: redis: condition: service_started diff --git a/apps/chatbot/docker/compose.yaml b/apps/chatbot/docker/compose.yaml index fd1ab2cef5..7837dcdd89 100644 --- a/apps/chatbot/docker/compose.yaml +++ b/apps/chatbot/docker/compose.yaml @@ -3,7 +3,6 @@ services: build: context: .. dockerfile: docker/app.local.Dockerfile - env_file: ../.env.local command: "./scripts/run.local.sh" ports: - "8080:8080" @@ -18,26 +17,24 @@ services: condition: service_started langfuse: condition: service_started + env_file: ../.env.local networks: - ntw postgres: - image: postgres + image: postgres:17.2-alpine3.20 restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 3s timeout: 3s retries: 10 - environment: - - POSTGRES_USER=postgres - - POSTGRES_PASSWORD=postgres - - POSTGRES_DB=postgres ports: - "5432:5432" volumes: - database_data:/var/lib/postgresql/data + env_file: ../.env.local networks: - ntw @@ -74,6 +71,7 @@ services: depends_on: redis: condition: service_started + env_file: ../.env.local networks: - ntw @@ -84,23 +82,7 @@ services: condition: service_healthy ports: - "3000:3000" - environment: - - DATABASE_URL=${DATABASE_URL:-} - - NEXTAUTH_SECRET=${NEXTAUTH_SECRET:-} - - SALT=${SALT:-} - - ENCRYPTION_KEY=${ENCRYPTION_KEY:-} - - NEXTAUTH_URL=${LANGFUSE_HOST:-} - - TELEMETRY_ENABLED=${TELEMETRY_ENABLED:-true} - - LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES=${LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES:-false} - - LANGFUSE_INIT_ORG_ID=${LANGFUSE_INIT_ORG_ID:-} - - LANGFUSE_INIT_ORG_NAME=${LANGFUSE_INIT_ORG_NAME:-} - - LANGFUSE_INIT_PROJECT_ID=${LANGFUSE_INIT_PROJECT_ID:-} - - LANGFUSE_INIT_PROJECT_NAME=${LANGFUSE_INIT_PROJECT_NAME:-} - - LANGFUSE_INIT_PROJECT_PUBLIC_KEY=${LANGFUSE_PUBLIC_KEY:-} - - LANGFUSE_INIT_PROJECT_SECRET_KEY=${LANGFUSE_SECRET_KEY:-} - - LANGFUSE_INIT_USER_EMAIL=${LANGFUSE_INIT_USER_EMAIL:-} - - LANGFUSE_INIT_USER_NAME=${LANGFUSE_INIT_USER_NAME:-} - - LANGFUSE_INIT_USER_PASSWORD=${LANGFUSE_INIT_USER_PASSWORD:-} + env_file: ../.env.local networks: - ntw diff --git a/apps/chatbot/docker/docker-compose-build-local.sh b/apps/chatbot/docker/docker-compose-build-local.sh index bab889c9b2..ac1c475f1e 100755 --- a/apps/chatbot/docker/docker-compose-build-local.sh +++ b/apps/chatbot/docker/docker-compose-build-local.sh @@ -1,2 +1,2 @@ #!/bin/bash -docker compose --env-file .env -f docker/compose.yaml -p chatbot build +docker compose -f docker/compose.yaml -p chatbot build From 13ec17d01b92b6fcacf7f590ada76e97c6567fd5 Mon Sep 17 00:00:00 2001 From: mdciri Date: Wed, 27 Nov 2024 17:06:33 +0100 Subject: [PATCH 28/66] Restore pre-push --- .husky/pre-push | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.husky/pre-push b/.husky/pre-push index 5a873e0d96..541229e81e 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,4 +1,4 @@ #!/usr/bin/env sh -# . "$(dirname -- "$0")/_/husky.sh" +. "$(dirname -- "$0")/_/husky.sh" -# npm run compile && npm run lint +npm run compile && npm run lint From c9896c2c81a16a05f22983773484e213b6448336 Mon Sep 17 00:00:00 2001 From: mdciri Date: Wed, 27 Nov 2024 18:09:18 +0100 Subject: [PATCH 29/66] Update poetry --- apps/chatbot/poetry.lock | 1554 ++++++++++++++++------------------- apps/chatbot/pyproject.toml | 8 +- 2 files changed, 732 insertions(+), 830 deletions(-) diff --git a/apps/chatbot/poetry.lock b/apps/chatbot/poetry.lock index 8ffc9a5751..d1a083813b 100644 --- a/apps/chatbot/poetry.lock +++ b/apps/chatbot/poetry.lock @@ -65,87 +65,87 @@ files = [ [[package]] name = "aiohttp" -version = "3.11.6" +version = "3.11.7" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" files = [ - {file = "aiohttp-3.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7510b3ca2275691875ddf072a5b6cd129278d11fe09301add7d292fc8d3432de"}, - {file = "aiohttp-3.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bfab0d2c3380c588fc925168533edb21d3448ad76c3eadc360ff963019161724"}, - {file = "aiohttp-3.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf02dba0f342f3a8228f43fae256aafc21c4bc85bffcf537ce4582e2b1565188"}, - {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92daedf7221392e7a7984915ca1b0481a94c71457c2f82548414a41d65555e70"}, - {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2274a7876e03429e3218589a6d3611a194bdce08c3f1e19962e23370b47c0313"}, - {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8a2e1eae2d2f62f3660a1591e16e543b2498358593a73b193006fb89ee37abc6"}, - {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:978ec3fb0a42efcd98aae608f58c6cfcececaf0a50b4e86ee3ea0d0a574ab73b"}, - {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a51f87b27d9219ed4e202ed8d6f1bb96f829e5eeff18db0d52f592af6de6bdbf"}, - {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:04d1a02a669d26e833c8099992c17f557e3b2fdb7960a0c455d7b1cbcb05121d"}, - {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3679d5fcbc7f1ab518ab4993f12f80afb63933f6afb21b9b272793d398303b98"}, - {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a4b24e03d04893b5c8ec9cd5f2f11dc9c8695c4e2416d2ac2ce6c782e4e5ffa5"}, - {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d9abdfd35ecff1c95f270b7606819a0e2de9e06fa86b15d9080de26594cf4c23"}, - {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8b5c3e7928a0ad80887a5eba1c1da1830512ddfe7394d805badda45c03db3109"}, - {file = "aiohttp-3.11.6-cp310-cp310-win32.whl", hash = "sha256:913dd9e9378f3c38aeb5c4fb2b8383d6490bc43f3b427ae79f2870651ae08f22"}, - {file = "aiohttp-3.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:4ac26d482c2000c3a59bf757a77adc972828c9d4177b4bd432a46ba682ca7271"}, - {file = "aiohttp-3.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:26ac4c960ea8debf557357a172b3ef201f2236a462aefa1bc17683a75483e518"}, - {file = "aiohttp-3.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8b1f13ebc99fb98c7c13057b748f05224ccc36d17dee18136c695ef23faaf4ff"}, - {file = "aiohttp-3.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4679f1a47516189fab1774f7e45a6c7cac916224c91f5f94676f18d0b64ab134"}, - {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74491fdb3d140ff561ea2128cb7af9ba0a360067ee91074af899c9614f88a18f"}, - {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f51e1a90412d387e62aa2d243998c5eddb71373b199d811e6ed862a9f34f9758"}, - {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72ab89510511c3bb703d0bb5504787b11e0ed8be928ed2a7cf1cda9280628430"}, - {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6681c9e046d99646e8059266688374a063da85b2e4c0ebfa078cda414905d080"}, - {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a17f8a6d3ab72cbbd137e494d1a23fbd3ea973db39587941f32901bb3c5c350"}, - {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:867affc7612a314b95f74d93aac550ce0909bc6f0b6c658cc856890f4d326542"}, - {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:00d894ebd609d5a423acef885bd61e7f6a972153f99c5b3ea45fc01fe909196c"}, - {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:614c87be9d0d64477d1e4b663bdc5d1534fc0a7ebd23fb08347ab9fd5fe20fd7"}, - {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:533ed46cf772f28f3bffae81c0573d916a64dee590b5dfaa3f3d11491da05b95"}, - {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:589884cfbc09813afb1454816b45677e983442e146183143f988f7f5a040791a"}, - {file = "aiohttp-3.11.6-cp311-cp311-win32.whl", hash = "sha256:1da63633ba921669eec3d7e080459d4ceb663752b3dafb2f31f18edd248d2170"}, - {file = "aiohttp-3.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:d778ddda09622e7d83095cc8051698a0084c155a1474bfee9bac27d8613dbc31"}, - {file = "aiohttp-3.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:943a952df105a5305257984e7a1f5c2d0fd8564ff33647693c4d07eb2315446d"}, - {file = "aiohttp-3.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d24ec28b7658970a1f1d98608d67f88376c7e503d9d45ff2ba1949c09f2b358c"}, - {file = "aiohttp-3.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6720e809a660fdb9bec7c168c582e11cfedce339af0a5ca847a5d5b588dce826"}, - {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4252d30da0ada6e6841b325869c7ef5104b488e8dd57ec439892abbb8d7b3615"}, - {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f65f43ff01b238aa0b5c47962c83830a49577efe31bd37c1400c3d11d8a32835"}, - {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dc5933f6c9b26404444d36babb650664f984b8e5fa0694540e7b7315d11a4ff"}, - {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5bf546ba0c029dfffc718c4b67748687fd4f341b07b7c8f1719d6a3a46164798"}, - {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c351d05bbeae30c088009c0bb3b17dda04fd854f91cc6196c448349cc98f71c3"}, - {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:10499079b063576fad1597898de3f9c0a2ce617c19cc7cd6b62fdcff6b408bf7"}, - {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:442ee82eda47dd59798d6866ce020fb8d02ea31ac9ac82b3d719ed349e6a9d52"}, - {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:86fce9127bc317119b34786d9e9ae8af4508a103158828a535f56d201da6ab19"}, - {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:973d26a5537ce5d050302eb3cd876457451745b1da0624cbb483217970e12567"}, - {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:532b8f038a4e001137d3600cea5d3439d1881df41bdf44d0f9651264d562fdf0"}, - {file = "aiohttp-3.11.6-cp312-cp312-win32.whl", hash = "sha256:4863c59f748dbe147da82b389931f2a676aebc9d3419813ed5ca32d057c9cb32"}, - {file = "aiohttp-3.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:5d7f481f82c18ac1f7986e31ba6eea9be8b2e2c86f1ef035b6866179b6c5dd68"}, - {file = "aiohttp-3.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:40f502350496ba4c6820816d3164f8a0297b9aa4e95d910da31beb189866a9df"}, - {file = "aiohttp-3.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9072669b0bffb40f1f6977d0b5e8a296edc964f9cefca3a18e68649c214d0ce3"}, - {file = "aiohttp-3.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:518160ecf4e6ffd61715bc9173da0925fcce44ae6c7ca3d3f098fe42585370fb"}, - {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f69cc1b45115ac44795b63529aa5caa9674be057f11271f65474127b24fc1ce6"}, - {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6be90a6beced41653bda34afc891617c6d9e8276eef9c183f029f851f0a3c3d"}, - {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00c22fe2486308770d22ef86242101d7b0f1e1093ce178f2358f860e5149a551"}, - {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2607ebb783e3aeefa017ec8f34b506a727e6b6ab2c4b037d65f0bc7151f4430a"}, - {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5f761d6819870c2a8537f75f3e2fc610b163150cefa01f9f623945840f601b2c"}, - {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e44d1bc6c88f5234115011842219ba27698a5f2deee245c963b180080572aaa2"}, - {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7e0cb6a1b1f499cb2aa0bab1c9f2169ad6913c735b7447e058e0c29c9e51c0b5"}, - {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a76b4d4ca34254dca066acff2120811e2a8183997c135fcafa558280f2cc53f3"}, - {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:69051c1e45fb18c0ae4d39a075532ff0b015982e7997f19eb5932eb4a3e05c17"}, - {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aff2ed18274c0bfe0c1d772781c87d5ca97ae50f439729007cec9644ee9b15fe"}, - {file = "aiohttp-3.11.6-cp313-cp313-win32.whl", hash = "sha256:2fbea25f2d44df809a46414a8baafa5f179d9dda7e60717f07bded56300589b3"}, - {file = "aiohttp-3.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:f77bc29a465c0f9f6573d1abe656d385fa673e34efe615bd4acc50899280ee47"}, - {file = "aiohttp-3.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:de6123b298d17bca9e53581f50a275b36e10d98e8137eb743ce69ee766dbdfe9"}, - {file = "aiohttp-3.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a10200f705f4fff00e148b7f41e5d1d929c7cd4ac523c659171a0ea8284cd6fb"}, - {file = "aiohttp-3.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b7776ef6901b54dd557128d96c71e412eec0c39ebc07567e405ac98737995aad"}, - {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e5c2a55583cd91936baf73d223807bb93ace6eb1fe54424782690f2707162ab"}, - {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b032bd6cf7422583bf44f233f4a1489fee53c6d35920123a208adc54e2aba41e"}, - {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04fe2d99acbc5cf606f75d7347bf3a027c24c27bc052d470fb156f4cfcea5739"}, - {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84a79c366375c2250934d1238abe5d5ea7754c823a1c7df0c52bf0a2bfded6a9"}, - {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c33cbbe97dc94a34d1295a7bb68f82727bcbff2b284f73ae7e58ecc05903da97"}, - {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:19e4fb9ac727834b003338dcdd27dcfe0de4fb44082b01b34ed0ab67c3469fc9"}, - {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a97f6b2afbe1d27220c0c14ea978e09fb4868f462ef3d56d810d206bd2e057a2"}, - {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c3f7afeea03a9bc49be6053dfd30809cd442cc12627d6ca08babd1c1f9e04ccf"}, - {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:0d10967600ce5bb69ddcb3e18d84b278efb5199d8b24c3c71a4959c2f08acfd0"}, - {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:60f2f631b9fe7aa321fa0f0ff3f5d8b9f7f9b72afd4eecef61c33cf1cfea5d58"}, - {file = "aiohttp-3.11.6-cp39-cp39-win32.whl", hash = "sha256:4d2b75333deb5c5f61bac5a48bba3dbc142eebbd3947d98788b6ef9cc48628ae"}, - {file = "aiohttp-3.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:8908c235421972a2e02abcef87d16084aabfe825d14cc9a1debd609b3cfffbea"}, - {file = "aiohttp-3.11.6.tar.gz", hash = "sha256:fd9f55c1b51ae1c20a1afe7216a64a88d38afee063baa23c7fce03757023c999"}, + {file = "aiohttp-3.11.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8bedb1f6cb919af3b6353921c71281b1491f948ca64408871465d889b4ee1b66"}, + {file = "aiohttp-3.11.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f5022504adab881e2d801a88b748ea63f2a9d130e0b2c430824682a96f6534be"}, + {file = "aiohttp-3.11.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e22d1721c978a6494adc824e0916f9d187fa57baeda34b55140315fa2f740184"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e993676c71288618eb07e20622572b1250d8713e7e00ab3aabae28cb70f3640d"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e13a05db87d3b241c186d0936808d0e4e12decc267c617d54e9c643807e968b6"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ba8d043fed7ffa117024d7ba66fdea011c0e7602327c6d73cacaea38abe4491"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda3ed0a7869d2fa16aa41f9961ade73aa2c2e3b2fcb0a352524e7b744881889"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43bfd25113c1e98aec6c70e26d5f4331efbf4aa9037ba9ad88f090853bf64d7f"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3dd3e7e7c9ef3e7214f014f1ae260892286647b3cf7c7f1b644a568fd410f8ca"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:78c657ece7a73b976905ab9ec8be9ef2df12ed8984c24598a1791c58ce3b4ce4"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:db70a47987e34494b451a334605bee57a126fe8d290511349e86810b4be53b01"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:9e67531370a3b07e49b280c1f8c2df67985c790ad2834d1b288a2f13cd341c5f"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9202f184cc0582b1db15056f2225ab4c1e3dac4d9ade50dd0613ac3c46352ac2"}, + {file = "aiohttp-3.11.7-cp310-cp310-win32.whl", hash = "sha256:2257bdd5cf54a4039a4337162cd8048f05a724380a2283df34620f55d4e29341"}, + {file = "aiohttp-3.11.7-cp310-cp310-win_amd64.whl", hash = "sha256:b7215bf2b53bc6cb35808149980c2ae80a4ae4e273890ac85459c014d5aa60ac"}, + {file = "aiohttp-3.11.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cea52d11e02123f125f9055dfe0ccf1c3857225fb879e4a944fae12989e2aef2"}, + {file = "aiohttp-3.11.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3ce18f703b7298e7f7633efd6a90138d99a3f9a656cb52c1201e76cb5d79cf08"}, + {file = "aiohttp-3.11.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:670847ee6aeb3a569cd7cdfbe0c3bec1d44828bbfbe78c5d305f7f804870ef9e"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dda726f89bfa5c465ba45b76515135a3ece0088dfa2da49b8bb278f3bdeea12"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25b74a811dba37c7ea6a14d99eb9402d89c8d739d50748a75f3cf994cf19c43"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5522ee72f95661e79db691310290c4618b86dff2d9b90baedf343fd7a08bf79"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fbf41a6bbc319a7816ae0f0177c265b62f2a59ad301a0e49b395746eb2a9884"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59ee1925b5a5efdf6c4e7be51deee93984d0ac14a6897bd521b498b9916f1544"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:24054fce8c6d6f33a3e35d1c603ef1b91bbcba73e3f04a22b4f2f27dac59b347"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:351849aca2c6f814575c1a485c01c17a4240413f960df1bf9f5deb0003c61a53"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:12724f3a211fa243570e601f65a8831372caf1a149d2f1859f68479f07efec3d"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7ea4490360b605804bea8173d2d086b6c379d6bb22ac434de605a9cbce006e7d"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e0bf378db07df0a713a1e32381a1b277e62ad106d0dbe17b5479e76ec706d720"}, + {file = "aiohttp-3.11.7-cp311-cp311-win32.whl", hash = "sha256:cd8d62cab363dfe713067027a5adb4907515861f1e4ce63e7be810b83668b847"}, + {file = "aiohttp-3.11.7-cp311-cp311-win_amd64.whl", hash = "sha256:bf0e6cce113596377cadda4e3ac5fb89f095bd492226e46d91b4baef1dd16f60"}, + {file = "aiohttp-3.11.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4bb7493c3e3a36d3012b8564bd0e2783259ddd7ef3a81a74f0dbfa000fce48b7"}, + {file = "aiohttp-3.11.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e143b0ef9cb1a2b4f74f56d4fbe50caa7c2bb93390aff52f9398d21d89bc73ea"}, + {file = "aiohttp-3.11.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f7c58a240260822dc07f6ae32a0293dd5bccd618bb2d0f36d51c5dbd526f89c0"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d20cfe63a1c135d26bde8c1d0ea46fd1200884afbc523466d2f1cf517d1fe33"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12e4d45847a174f77b2b9919719203769f220058f642b08504cf8b1cf185dacf"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf4efa2d01f697a7dbd0509891a286a4af0d86902fc594e20e3b1712c28c0106"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee6a4cdcbf54b8083dc9723cdf5f41f722c00db40ccf9ec2616e27869151129"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6095aaf852c34f42e1bd0cf0dc32d1e4b48a90bfb5054abdbb9d64b36acadcb"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1cf03d27885f8c5ebf3993a220cc84fc66375e1e6e812731f51aab2b2748f4a6"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:1a17f6a230f81eb53282503823f59d61dff14fb2a93847bf0399dc8e87817307"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:481f10a1a45c5f4c4a578bbd74cff22eb64460a6549819242a87a80788461fba"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:db37248535d1ae40735d15bdf26ad43be19e3d93ab3f3dad8507eb0f85bb8124"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9d18a8b44ec8502a7fde91446cd9c9b95ce7c49f1eacc1fb2358b8907d4369fd"}, + {file = "aiohttp-3.11.7-cp312-cp312-win32.whl", hash = "sha256:3d1c9c15d3999107cbb9b2d76ca6172e6710a12fda22434ee8bd3f432b7b17e8"}, + {file = "aiohttp-3.11.7-cp312-cp312-win_amd64.whl", hash = "sha256:018f1b04883a12e77e7fc161934c0f298865d3a484aea536a6a2ca8d909f0ba0"}, + {file = "aiohttp-3.11.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:241a6ca732d2766836d62c58c49ca7a93d08251daef0c1e3c850df1d1ca0cbc4"}, + {file = "aiohttp-3.11.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:aa3705a8d14de39898da0fbad920b2a37b7547c3afd2a18b9b81f0223b7d0f68"}, + {file = "aiohttp-3.11.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9acfc7f652b31853eed3b92095b0acf06fd5597eeea42e939bd23a17137679d5"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcefcf2915a2dbdbce37e2fc1622129a1918abfe3d06721ce9f6cdac9b6d2eaa"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c1f6490dd1862af5aae6cfcf2a274bffa9a5b32a8f5acb519a7ecf5a99a88866"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac5462582d6561c1c1708853a9faf612ff4e5ea5e679e99be36143d6eabd8e"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c1a6309005acc4b2bcc577ba3b9169fea52638709ffacbd071f3503264620da"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5b973cce96793725ef63eb449adfb74f99c043c718acb76e0d2a447ae369962"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ce91a24aac80de6be8512fb1c4838a9881aa713f44f4e91dd7bb3b34061b497d"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:875f7100ce0e74af51d4139495eec4025affa1a605280f23990b6434b81df1bd"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c171fc35d3174bbf4787381716564042a4cbc008824d8195eede3d9b938e29a8"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ee9afa1b0d2293c46954f47f33e150798ad68b78925e3710044e0d67a9487791"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8360c7cc620abb320e1b8d603c39095101391a82b1d0be05fb2225471c9c5c52"}, + {file = "aiohttp-3.11.7-cp313-cp313-win32.whl", hash = "sha256:7a9318da4b4ada9a67c1dd84d1c0834123081e746bee311a16bb449f363d965e"}, + {file = "aiohttp-3.11.7-cp313-cp313-win_amd64.whl", hash = "sha256:fc6da202068e0a268e298d7cd09b6e9f3997736cd9b060e2750963754552a0a9"}, + {file = "aiohttp-3.11.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:17829f37c0d31d89aa6b8b010475a10233774771f9b6dc2cc352ea4f8ce95d9a"}, + {file = "aiohttp-3.11.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d6177077a31b1aecfc3c9070bd2f11419dbb4a70f30f4c65b124714f525c2e48"}, + {file = "aiohttp-3.11.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:badda65ac99555791eed75e234afb94686ed2317670c68bff8a4498acdaee935"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0de6466b9d742b4ee56fe1b2440706e225eb48c77c63152b1584864a236e7a50"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04b0cc74d5a882c9dacaeeccc1444f0233212b6f5be8bc90833feef1e1ce14b9"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c7af3e50e5903d21d7b935aceed901cc2475463bc16ddd5587653548661fdb"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c63f898f683d1379b9be5afc3dd139e20b30b0b1e0bf69a3fc3681f364cf1629"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fdadc3f6a32d6eca45f9a900a254757fd7855dfb2d8f8dcf0e88f0fae3ff8eb1"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d329300fb23e14ed1f8c6d688dfd867d1dcc3b1d7cd49b7f8c5b44e797ce0932"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5578cf40440eafcb054cf859964bc120ab52ebe0e0562d2b898126d868749629"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7b2f8107a3c329789f3c00b2daad0e35f548d0a55cda6291579136622099a46e"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:43dd89a6194f6ab02a3fe36b09e42e2df19c211fc2050ce37374d96f39604997"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d2fa6fc7cc865d26ff42480ac9b52b8c9b7da30a10a6442a9cdf429de840e949"}, + {file = "aiohttp-3.11.7-cp39-cp39-win32.whl", hash = "sha256:a7d9a606355655617fee25dd7e54d3af50804d002f1fd3118dd6312d26692d70"}, + {file = "aiohttp-3.11.7-cp39-cp39-win_amd64.whl", hash = "sha256:53c921b58fdc6485d6b2603e0132bb01cd59b8f0620ffc0907f525e0ba071687"}, + {file = "aiohttp-3.11.7.tar.gz", hash = "sha256:01a8aca4af3da85cea5c90141d23f4b0eee3cbecfd33b029a45a80f28c66c668"}, ] [package.dependencies] @@ -1040,44 +1040,37 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "cymem" -version = "2.0.8" +version = "2.0.10" description = "Manage calls to calloc/free through Cython" optional = false python-versions = "*" files = [ - {file = "cymem-2.0.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:77b5d3a73c41a394efd5913ab7e48512054cd2dabb9582d489535456641c7666"}, - {file = "cymem-2.0.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bd33da892fb560ba85ea14b1528c381ff474048e861accc3366c8b491035a378"}, - {file = "cymem-2.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29a551eda23eebd6d076b855f77a5ed14a1d1cae5946f7b3cb5de502e21b39b0"}, - {file = "cymem-2.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8260445652ae5ab19fff6851f32969a7b774f309162e83367dd0f69aac5dbf7"}, - {file = "cymem-2.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:a63a2bef4c7e0aec7c9908bca0a503bf91ac7ec18d41dd50dc7dff5d994e4387"}, - {file = "cymem-2.0.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6b84b780d52cb2db53d4494fe0083c4c5ee1f7b5380ceaea5b824569009ee5bd"}, - {file = "cymem-2.0.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d5f83dc3cb5a39f0e32653cceb7c8ce0183d82f1162ca418356f4a8ed9e203e"}, - {file = "cymem-2.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ac218cf8a43a761dc6b2f14ae8d183aca2bbb85b60fe316fd6613693b2a7914"}, - {file = "cymem-2.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42c993589d1811ec665d37437d5677b8757f53afadd927bf8516ac8ce2d3a50c"}, - {file = "cymem-2.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:ab3cf20e0eabee9b6025ceb0245dadd534a96710d43fb7a91a35e0b9e672ee44"}, - {file = "cymem-2.0.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cb51fddf1b920abb1f2742d1d385469bc7b4b8083e1cfa60255e19bc0900ccb5"}, - {file = "cymem-2.0.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9235957f8c6bc2574a6a506a1687164ad629d0b4451ded89d49ebfc61b52660c"}, - {file = "cymem-2.0.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2cc38930ff5409f8d61f69a01e39ecb185c175785a1c9bec13bcd3ac8a614ba"}, - {file = "cymem-2.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bf49e3ea2c441f7b7848d5c61b50803e8cbd49541a70bb41ad22fce76d87603"}, - {file = "cymem-2.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:ecd12e3bacf3eed5486e4cd8ede3c12da66ee0e0a9d0ae046962bc2bb503acef"}, - {file = "cymem-2.0.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:167d8019db3b40308aabf8183fd3fbbc256323b645e0cbf2035301058c439cd0"}, - {file = "cymem-2.0.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17cd2c2791c8f6b52f269a756ba7463f75bf7265785388a2592623b84bb02bf8"}, - {file = "cymem-2.0.8-cp36-cp36m-win_amd64.whl", hash = "sha256:6204f0a3307bf45d109bf698ba37997ce765f21e359284328e4306c7500fcde8"}, - {file = "cymem-2.0.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9c05db55ea338648f8e5f51dd596568c7f62c5ae32bf3fa5b1460117910ebae"}, - {file = "cymem-2.0.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ce641f7ba0489bd1b42a4335a36f38c8507daffc29a512681afaba94a0257d2"}, - {file = "cymem-2.0.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6b83a5972a64f62796118da79dfeed71f4e1e770b2b7455e889c909504c2358"}, - {file = "cymem-2.0.8-cp37-cp37m-win_amd64.whl", hash = "sha256:ada6eb022e4a0f4f11e6356a5d804ceaa917174e6cf33c0b3e371dbea4dd2601"}, - {file = "cymem-2.0.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1e593cd57e2e19eb50c7ddaf7e230b73c890227834425b9dadcd4a86834ef2ab"}, - {file = "cymem-2.0.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d513f0d5c6d76facdc605e42aa42c8d50bb7dedca3144ec2b47526381764deb0"}, - {file = "cymem-2.0.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e370dd54359101b125bfb191aca0542718077b4edb90ccccba1a28116640fed"}, - {file = "cymem-2.0.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84f8c58cde71b8fc7024883031a4eec66c0a9a4d36b7850c3065493652695156"}, - {file = "cymem-2.0.8-cp38-cp38-win_amd64.whl", hash = "sha256:6a6edddb30dd000a27987fcbc6f3c23b7fe1d74f539656952cb086288c0e4e29"}, - {file = "cymem-2.0.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b896c83c08dadafe8102a521f83b7369a9c5cc3e7768eca35875764f56703f4c"}, - {file = "cymem-2.0.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a4f8f2bfee34f6f38b206997727d29976666c89843c071a968add7d61a1e8024"}, - {file = "cymem-2.0.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7372e2820fa66fd47d3b135f3eb574ab015f90780c3a21cfd4809b54f23a4723"}, - {file = "cymem-2.0.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4e57bee56d35b90fc2cba93e75b2ce76feaca05251936e28a96cf812a1f5dda"}, - {file = "cymem-2.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:ceeab3ce2a92c7f3b2d90854efb32cb203e78cb24c836a5a9a2cac221930303b"}, - {file = "cymem-2.0.8.tar.gz", hash = "sha256:8fb09d222e21dcf1c7e907dc85cf74501d4cea6c4ed4ac6c9e016f98fb59cbbf"}, + {file = "cymem-2.0.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:010f78804cf5e2fbd08abad210d2b78a828bea1a9f978737e28e1614f5a258b4"}, + {file = "cymem-2.0.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9688f691518859e76c24c37686314dc5163f2fae1b9df264714220fc087b09a5"}, + {file = "cymem-2.0.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61ce538c594f348b90037b03910da31ce7aacca090ea64063593688c55f6adad"}, + {file = "cymem-2.0.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4d45b99c727dfc303db3bb9f136b86731a4d231fbf9c27ce5745ea4a527da0b5"}, + {file = "cymem-2.0.10-cp310-cp310-win_amd64.whl", hash = "sha256:a03abe0e2f8925707c3dee88060bea1a94b9a24afc7d07ee17f319022126bcb4"}, + {file = "cymem-2.0.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:18dc5a7b6a325d5fc0b2b40beb02673f36f64655ee086649c91e44ce092c7b36"}, + {file = "cymem-2.0.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d30ce83ff9009e5c5c8186845d9d583f867dace88113089bfc0ee1c348e45d5a"}, + {file = "cymem-2.0.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce6cb07416c82633503974f331abde9e1514c90aae8b3240884e749c2a60adbc"}, + {file = "cymem-2.0.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:34406e2bff8707719f3f4b262e50b04876369233d5277a7c2d0c2e73a8579b46"}, + {file = "cymem-2.0.10-cp311-cp311-win_amd64.whl", hash = "sha256:51218af9645541005a1313d6640bf6e86e7fb4b38a87268a5ea428d50ac3cec2"}, + {file = "cymem-2.0.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c6ed8b1ed448cd65e12405a02aa71b22a4094d8a623205625057c4c73ba4b133"}, + {file = "cymem-2.0.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5e57928d9e93c61265281ea01a1d24499d397625b2766a0c5735b99bceb3ba75"}, + {file = "cymem-2.0.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc4932060a5d55648fa4a3960f1cad9905572ed5c6f02af42f849e869d2803d4"}, + {file = "cymem-2.0.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f4bc6c823b400d32cddcfeefb3f352d52a0cc911cb0b5c1ef64e3f9741fd56b9"}, + {file = "cymem-2.0.10-cp312-cp312-win_amd64.whl", hash = "sha256:6ae7f22af4bc4311f06c925df61c62219c11939dffc9c91d67caf89a7e1557a5"}, + {file = "cymem-2.0.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5698a515900dc697874444fa05d8d852bbad43543de2e7834ec3895156cc2aad"}, + {file = "cymem-2.0.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6580d657d0f208d675d62cc052fb908529d52d24282342e24a9843de85352b88"}, + {file = "cymem-2.0.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea72cf0e369f3cf1f10038d572143d88ce7c959222cf7d742acbeb45e00ac5c0"}, + {file = "cymem-2.0.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:33d7f5014ad36af22995847fccd82ca0bd4b0394fb1d9dd9fef1e8cefdab2444"}, + {file = "cymem-2.0.10-cp313-cp313-win_amd64.whl", hash = "sha256:82f19a39052747309ced6b948b34aff62aa00c795c9d9d3d31a071e8c791efee"}, + {file = "cymem-2.0.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e644c3c48663d2c0580292e1d636e7eb8885bfe9df75f929d8ad0403621b75fe"}, + {file = "cymem-2.0.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0f2bc8c69a23e3243e3a0c0feca08c9d4454d3cb7934bb11f5e1b3333151d69d"}, + {file = "cymem-2.0.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5369f1974854102ee1751577f13acbbb6a13ba73f9fbb44580f8f3275dae0205"}, + {file = "cymem-2.0.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ffb6181d589e65c46c2d515d8326746a2e0bda31b67c8b1edfbf0663249f84fb"}, + {file = "cymem-2.0.10-cp39-cp39-win_amd64.whl", hash = "sha256:9805f7dbf078a0e2eb417b7e1166cedc590887b55e38a3f3ba5349649c93e6be"}, + {file = "cymem-2.0.10.tar.gz", hash = "sha256:f51700acfa1209b4a221dc892cca8030f4bc10d4c153dec098042f484c7f07a4"}, ] [[package]] @@ -1097,37 +1090,37 @@ typing-inspect = ">=0.4.0,<1" [[package]] name = "debugpy" -version = "1.8.8" +version = "1.8.9" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.8-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:e59b1607c51b71545cb3496876544f7186a7a27c00b436a62f285603cc68d1c6"}, - {file = "debugpy-1.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6531d952b565b7cb2fbd1ef5df3d333cf160b44f37547a4e7cf73666aca5d8d"}, - {file = "debugpy-1.8.8-cp310-cp310-win32.whl", hash = "sha256:b01f4a5e5c5fb1d34f4ccba99a20ed01eabc45a4684f4948b5db17a319dfb23f"}, - {file = "debugpy-1.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:535f4fb1c024ddca5913bb0eb17880c8f24ba28aa2c225059db145ee557035e9"}, - {file = "debugpy-1.8.8-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:c399023146e40ae373753a58d1be0a98bf6397fadc737b97ad612886b53df318"}, - {file = "debugpy-1.8.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09cc7b162586ea2171eea055985da2702b0723f6f907a423c9b2da5996ad67ba"}, - {file = "debugpy-1.8.8-cp311-cp311-win32.whl", hash = "sha256:eea8821d998ebeb02f0625dd0d76839ddde8cbf8152ebbe289dd7acf2cdc6b98"}, - {file = "debugpy-1.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:d4483836da2a533f4b1454dffc9f668096ac0433de855f0c22cdce8c9f7e10c4"}, - {file = "debugpy-1.8.8-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:0cc94186340be87b9ac5a707184ec8f36547fb66636d1029ff4f1cc020e53996"}, - {file = "debugpy-1.8.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64674e95916e53c2e9540a056e5f489e0ad4872645399d778f7c598eacb7b7f9"}, - {file = "debugpy-1.8.8-cp312-cp312-win32.whl", hash = "sha256:5c6e885dbf12015aed73770f29dec7023cb310d0dc2ba8bfbeb5c8e43f80edc9"}, - {file = "debugpy-1.8.8-cp312-cp312-win_amd64.whl", hash = "sha256:19ffbd84e757a6ca0113574d1bf5a2298b3947320a3e9d7d8dc3377f02d9f864"}, - {file = "debugpy-1.8.8-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:705cd123a773d184860ed8dae99becd879dfec361098edbefb5fc0d3683eb804"}, - {file = "debugpy-1.8.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:890fd16803f50aa9cb1a9b9b25b5ec321656dd6b78157c74283de241993d086f"}, - {file = "debugpy-1.8.8-cp313-cp313-win32.whl", hash = "sha256:90244598214bbe704aa47556ec591d2f9869ff9e042e301a2859c57106649add"}, - {file = "debugpy-1.8.8-cp313-cp313-win_amd64.whl", hash = "sha256:4b93e4832fd4a759a0c465c967214ed0c8a6e8914bced63a28ddb0dd8c5f078b"}, - {file = "debugpy-1.8.8-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:143ef07940aeb8e7316de48f5ed9447644da5203726fca378f3a6952a50a9eae"}, - {file = "debugpy-1.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f95651bdcbfd3b27a408869a53fbefcc2bcae13b694daee5f1365b1b83a00113"}, - {file = "debugpy-1.8.8-cp38-cp38-win32.whl", hash = "sha256:26b461123a030e82602a750fb24d7801776aa81cd78404e54ab60e8b5fecdad5"}, - {file = "debugpy-1.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:f3cbf1833e644a3100eadb6120f25be8a532035e8245584c4f7532937edc652a"}, - {file = "debugpy-1.8.8-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:53709d4ec586b525724819dc6af1a7703502f7e06f34ded7157f7b1f963bb854"}, - {file = "debugpy-1.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a9c013077a3a0000e83d97cf9cc9328d2b0bbb31f56b0e99ea3662d29d7a6a2"}, - {file = "debugpy-1.8.8-cp39-cp39-win32.whl", hash = "sha256:ffe94dd5e9a6739a75f0b85316dc185560db3e97afa6b215628d1b6a17561cb2"}, - {file = "debugpy-1.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5c0e5a38c7f9b481bf31277d2f74d2109292179081f11108e668195ef926c0f9"}, - {file = "debugpy-1.8.8-py2.py3-none-any.whl", hash = "sha256:ec684553aba5b4066d4de510859922419febc710df7bba04fe9e7ef3de15d34f"}, - {file = "debugpy-1.8.8.zip", hash = "sha256:e6355385db85cbd666be703a96ab7351bc9e6c61d694893206f8001e22aee091"}, + {file = "debugpy-1.8.9-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:cfe1e6c6ad7178265f74981edf1154ffce97b69005212fbc90ca22ddfe3d017e"}, + {file = "debugpy-1.8.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ada7fb65102a4d2c9ab62e8908e9e9f12aed9d76ef44880367bc9308ebe49a0f"}, + {file = "debugpy-1.8.9-cp310-cp310-win32.whl", hash = "sha256:c36856343cbaa448171cba62a721531e10e7ffb0abff838004701454149bc037"}, + {file = "debugpy-1.8.9-cp310-cp310-win_amd64.whl", hash = "sha256:17c5e0297678442511cf00a745c9709e928ea4ca263d764e90d233208889a19e"}, + {file = "debugpy-1.8.9-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:b74a49753e21e33e7cf030883a92fa607bddc4ede1aa4145172debc637780040"}, + {file = "debugpy-1.8.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62d22dacdb0e296966d7d74a7141aaab4bec123fa43d1a35ddcb39bf9fd29d70"}, + {file = "debugpy-1.8.9-cp311-cp311-win32.whl", hash = "sha256:8138efff315cd09b8dcd14226a21afda4ca582284bf4215126d87342bba1cc66"}, + {file = "debugpy-1.8.9-cp311-cp311-win_amd64.whl", hash = "sha256:ff54ef77ad9f5c425398efb150239f6fe8e20c53ae2f68367eba7ece1e96226d"}, + {file = "debugpy-1.8.9-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:957363d9a7a6612a37458d9a15e72d03a635047f946e5fceee74b50d52a9c8e2"}, + {file = "debugpy-1.8.9-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e565fc54b680292b418bb809f1386f17081d1346dca9a871bf69a8ac4071afe"}, + {file = "debugpy-1.8.9-cp312-cp312-win32.whl", hash = "sha256:3e59842d6c4569c65ceb3751075ff8d7e6a6ada209ceca6308c9bde932bcef11"}, + {file = "debugpy-1.8.9-cp312-cp312-win_amd64.whl", hash = "sha256:66eeae42f3137eb428ea3a86d4a55f28da9bd5a4a3d369ba95ecc3a92c1bba53"}, + {file = "debugpy-1.8.9-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:957ecffff80d47cafa9b6545de9e016ae8c9547c98a538ee96ab5947115fb3dd"}, + {file = "debugpy-1.8.9-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1efbb3ff61487e2c16b3e033bc8595aea578222c08aaf3c4bf0f93fadbd662ee"}, + {file = "debugpy-1.8.9-cp313-cp313-win32.whl", hash = "sha256:7c4d65d03bee875bcb211c76c1d8f10f600c305dbd734beaed4077e902606fee"}, + {file = "debugpy-1.8.9-cp313-cp313-win_amd64.whl", hash = "sha256:e46b420dc1bea64e5bbedd678148be512442bc589b0111bd799367cde051e71a"}, + {file = "debugpy-1.8.9-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:472a3994999fe6c0756945ffa359e9e7e2d690fb55d251639d07208dbc37caea"}, + {file = "debugpy-1.8.9-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:365e556a4772d7d0d151d7eb0e77ec4db03bcd95f26b67b15742b88cacff88e9"}, + {file = "debugpy-1.8.9-cp38-cp38-win32.whl", hash = "sha256:54a7e6d3014c408eb37b0b06021366ee985f1539e12fe49ca2ee0d392d9ceca5"}, + {file = "debugpy-1.8.9-cp38-cp38-win_amd64.whl", hash = "sha256:8e99c0b1cc7bf86d83fb95d5ccdc4ad0586d4432d489d1f54e4055bcc795f693"}, + {file = "debugpy-1.8.9-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:7e8b079323a56f719977fde9d8115590cb5e7a1cba2fcee0986ef8817116e7c1"}, + {file = "debugpy-1.8.9-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6953b335b804a41f16a192fa2e7851bdcfd92173cbb2f9f777bb934f49baab65"}, + {file = "debugpy-1.8.9-cp39-cp39-win32.whl", hash = "sha256:7e646e62d4602bb8956db88b1e72fe63172148c1e25c041e03b103a25f36673c"}, + {file = "debugpy-1.8.9-cp39-cp39-win_amd64.whl", hash = "sha256:3d9755e77a2d680ce3d2c5394a444cf42be4a592caaf246dbfbdd100ffcf7ae5"}, + {file = "debugpy-1.8.9-py2.py3-none-any.whl", hash = "sha256:cc37a6c9987ad743d9c3a14fa1b1a14b7e4e6041f9dd0c8abf8895fe7a97b899"}, + {file = "debugpy-1.8.9.zip", hash = "sha256:1339e14c7d980407248f09824d1b25ff5c5616651689f1e0f0e51bdead3ea13e"}, ] [[package]] @@ -1636,13 +1629,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.153.0" +version = "2.154.0" description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" files = [ - {file = "google_api_python_client-2.153.0-py2.py3-none-any.whl", hash = "sha256:6ff13bbfa92a57972e33ec3808e18309e5981b8ca1300e5da23bf2b4d6947384"}, - {file = "google_api_python_client-2.153.0.tar.gz", hash = "sha256:35cce8647f9c163fc04fb4d811fc91aae51954a2bdd74918decbe0e65d791dd2"}, + {file = "google_api_python_client-2.154.0-py2.py3-none-any.whl", hash = "sha256:a521bbbb2ec0ba9d6f307cdd64ed6e21eeac372d1bd7493a4ab5022941f784ad"}, + {file = "google_api_python_client-2.154.0.tar.gz", hash = "sha256:1b420062e03bfcaa1c79e2e00a612d29a6a934151ceb3d272fe150a656dc8f17"}, ] [package.dependencies] @@ -2341,84 +2334,86 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jiter" -version = "0.7.1" +version = "0.8.0" description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" files = [ - {file = "jiter-0.7.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:262e96d06696b673fad6f257e6a0abb6e873dc22818ca0e0600f4a1189eb334f"}, - {file = "jiter-0.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be6de02939aac5be97eb437f45cfd279b1dc9de358b13ea6e040e63a3221c40d"}, - {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935f10b802bc1ce2b2f61843e498c7720aa7f4e4bb7797aa8121eab017293c3d"}, - {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9cd3cccccabf5064e4bb3099c87bf67db94f805c1e62d1aefd2b7476e90e0ee2"}, - {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4aa919ebfc5f7b027cc368fe3964c0015e1963b92e1db382419dadb098a05192"}, - {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ae2d01e82c94491ce4d6f461a837f63b6c4e6dd5bb082553a70c509034ff3d4"}, - {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f9568cd66dbbdab67ae1b4c99f3f7da1228c5682d65913e3f5f95586b3cb9a9"}, - {file = "jiter-0.7.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9ecbf4e20ec2c26512736284dc1a3f8ed79b6ca7188e3b99032757ad48db97dc"}, - {file = "jiter-0.7.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b1a0508fddc70ce00b872e463b387d49308ef02b0787992ca471c8d4ba1c0fa1"}, - {file = "jiter-0.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f84c9996664c460f24213ff1e5881530abd8fafd82058d39af3682d5fd2d6316"}, - {file = "jiter-0.7.1-cp310-none-win32.whl", hash = "sha256:c915e1a1960976ba4dfe06551ea87063b2d5b4d30759012210099e712a414d9f"}, - {file = "jiter-0.7.1-cp310-none-win_amd64.whl", hash = "sha256:75bf3b7fdc5c0faa6ffffcf8028a1f974d126bac86d96490d1b51b3210aa0f3f"}, - {file = "jiter-0.7.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ad04a23a91f3d10d69d6c87a5f4471b61c2c5cd6e112e85136594a02043f462c"}, - {file = "jiter-0.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e47a554de88dff701226bb5722b7f1b6bccd0b98f1748459b7e56acac2707a5"}, - {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e44fff69c814a2e96a20b4ecee3e2365e9b15cf5fe4e00869d18396daa91dab"}, - {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df0a1d05081541b45743c965436f8b5a1048d6fd726e4a030113a2699a6046ea"}, - {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f22cf8f236a645cb6d8ffe2a64edb5d2b66fb148bf7c75eea0cb36d17014a7bc"}, - {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da8589f50b728ea4bf22e0632eefa125c8aa9c38ed202a5ee6ca371f05eeb3ff"}, - {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f20de711224f2ca2dbb166a8d512f6ff48c9c38cc06b51f796520eb4722cc2ce"}, - {file = "jiter-0.7.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8a9803396032117b85ec8cbf008a54590644a062fedd0425cbdb95e4b2b60479"}, - {file = "jiter-0.7.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3d8bae77c82741032e9d89a4026479061aba6e646de3bf5f2fc1ae2bbd9d06e0"}, - {file = "jiter-0.7.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3dc9939e576bbc68c813fc82f6620353ed68c194c7bcf3d58dc822591ec12490"}, - {file = "jiter-0.7.1-cp311-none-win32.whl", hash = "sha256:f7605d24cd6fab156ec89e7924578e21604feee9c4f1e9da34d8b67f63e54892"}, - {file = "jiter-0.7.1-cp311-none-win_amd64.whl", hash = "sha256:f3ea649e7751a1a29ea5ecc03c4ada0a833846c59c6da75d747899f9b48b7282"}, - {file = "jiter-0.7.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ad36a1155cbd92e7a084a568f7dc6023497df781adf2390c345dd77a120905ca"}, - {file = "jiter-0.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7ba52e6aaed2dc5c81a3d9b5e4ab95b039c4592c66ac973879ba57c3506492bb"}, - {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b7de0b6f6728b678540c7927587e23f715284596724be203af952418acb8a2d"}, - {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9463b62bd53c2fb85529c700c6a3beb2ee54fde8bef714b150601616dcb184a6"}, - {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:627164ec01d28af56e1f549da84caf0fe06da3880ebc7b7ee1ca15df106ae172"}, - {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25d0e5bf64e368b0aa9e0a559c3ab2f9b67e35fe7269e8a0d81f48bbd10e8963"}, - {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c244261306f08f8008b3087059601997016549cb8bb23cf4317a4827f07b7d74"}, - {file = "jiter-0.7.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7ded4e4b75b68b843b7cea5cd7c55f738c20e1394c68c2cb10adb655526c5f1b"}, - {file = "jiter-0.7.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:80dae4f1889b9d09e5f4de6b58c490d9c8ce7730e35e0b8643ab62b1538f095c"}, - {file = "jiter-0.7.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5970cf8ec943b51bce7f4b98d2e1ed3ada170c2a789e2db3cb484486591a176a"}, - {file = "jiter-0.7.1-cp312-none-win32.whl", hash = "sha256:701d90220d6ecb3125d46853c8ca8a5bc158de8c49af60fd706475a49fee157e"}, - {file = "jiter-0.7.1-cp312-none-win_amd64.whl", hash = "sha256:7824c3ecf9ecf3321c37f4e4d4411aad49c666ee5bc2a937071bdd80917e4533"}, - {file = "jiter-0.7.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:097676a37778ba3c80cb53f34abd6943ceb0848263c21bf423ae98b090f6c6ba"}, - {file = "jiter-0.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3298af506d4271257c0a8f48668b0f47048d69351675dd8500f22420d4eec378"}, - {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12fd88cfe6067e2199964839c19bd2b422ca3fd792949b8f44bb8a4e7d21946a"}, - {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dacca921efcd21939123c8ea8883a54b9fa7f6545c8019ffcf4f762985b6d0c8"}, - {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de3674a5fe1f6713a746d25ad9c32cd32fadc824e64b9d6159b3b34fd9134143"}, - {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65df9dbae6d67e0788a05b4bad5706ad40f6f911e0137eb416b9eead6ba6f044"}, - {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ba9a358d59a0a55cccaa4957e6ae10b1a25ffdabda863c0343c51817610501d"}, - {file = "jiter-0.7.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:576eb0f0c6207e9ede2b11ec01d9c2182973986514f9c60bc3b3b5d5798c8f50"}, - {file = "jiter-0.7.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:e550e29cdf3577d2c970a18f3959e6b8646fd60ef1b0507e5947dc73703b5627"}, - {file = "jiter-0.7.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:81d968dbf3ce0db2e0e4dec6b0a0d5d94f846ee84caf779b07cab49f5325ae43"}, - {file = "jiter-0.7.1-cp313-none-win32.whl", hash = "sha256:f892e547e6e79a1506eb571a676cf2f480a4533675f834e9ae98de84f9b941ac"}, - {file = "jiter-0.7.1-cp313-none-win_amd64.whl", hash = "sha256:0302f0940b1455b2a7fb0409b8d5b31183db70d2b07fd177906d83bf941385d1"}, - {file = "jiter-0.7.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c65a3ce72b679958b79d556473f192a4dfc5895e8cc1030c9f4e434690906076"}, - {file = "jiter-0.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e80052d3db39f9bb8eb86d207a1be3d9ecee5e05fdec31380817f9609ad38e60"}, - {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70a497859c4f3f7acd71c8bd89a6f9cf753ebacacf5e3e799138b8e1843084e3"}, - {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c1288bc22b9e36854a0536ba83666c3b1fb066b811019d7b682c9cf0269cdf9f"}, - {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b096ca72dd38ef35675e1d3b01785874315182243ef7aea9752cb62266ad516f"}, - {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8dbbd52c50b605af13dbee1a08373c520e6fcc6b5d32f17738875847fea4e2cd"}, - {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af29c5c6eb2517e71ffa15c7ae9509fa5e833ec2a99319ac88cc271eca865519"}, - {file = "jiter-0.7.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f114a4df1e40c03c0efbf974b376ed57756a1141eb27d04baee0680c5af3d424"}, - {file = "jiter-0.7.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:191fbaee7cf46a9dd9b817547bf556facde50f83199d07fc48ebeff4082f9df4"}, - {file = "jiter-0.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0e2b445e5ee627fb4ee6bbceeb486251e60a0c881a8e12398dfdff47c56f0723"}, - {file = "jiter-0.7.1-cp38-none-win32.whl", hash = "sha256:47ac4c3cf8135c83e64755b7276339b26cd3c7ddadf9e67306ace4832b283edf"}, - {file = "jiter-0.7.1-cp38-none-win_amd64.whl", hash = "sha256:60b49c245cd90cde4794f5c30f123ee06ccf42fb8730a019a2870cd005653ebd"}, - {file = "jiter-0.7.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8f212eeacc7203256f526f550d105d8efa24605828382cd7d296b703181ff11d"}, - {file = "jiter-0.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d9e247079d88c00e75e297e6cb3a18a039ebcd79fefc43be9ba4eb7fb43eb726"}, - {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0aacaa56360139c53dcf352992b0331f4057a0373bbffd43f64ba0c32d2d155"}, - {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc1b55314ca97dbb6c48d9144323896e9c1a25d41c65bcb9550b3e0c270ca560"}, - {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f281aae41b47e90deb70e7386558e877a8e62e1693e0086f37d015fa1c102289"}, - {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:93c20d2730a84d43f7c0b6fb2579dc54335db742a59cf9776d0b80e99d587382"}, - {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e81ccccd8069110e150613496deafa10da2f6ff322a707cbec2b0d52a87b9671"}, - {file = "jiter-0.7.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a7d5e85766eff4c9be481d77e2226b4c259999cb6862ccac5ef6621d3c8dcce"}, - {file = "jiter-0.7.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f52ce5799df5b6975439ecb16b1e879d7655e1685b6e3758c9b1b97696313bfb"}, - {file = "jiter-0.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e0c91a0304373fdf97d56f88356a010bba442e6d995eb7773cbe32885b71cdd8"}, - {file = "jiter-0.7.1-cp39-none-win32.whl", hash = "sha256:5c08adf93e41ce2755970e8aa95262298afe2bf58897fb9653c47cd93c3c6cdc"}, - {file = "jiter-0.7.1-cp39-none-win_amd64.whl", hash = "sha256:6592f4067c74176e5f369228fb2995ed01400c9e8e1225fb73417183a5e635f0"}, - {file = "jiter-0.7.1.tar.gz", hash = "sha256:448cf4f74f7363c34cdef26214da527e8eeffd88ba06d0b80b485ad0667baf5d"}, + {file = "jiter-0.8.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:dee4eeb293ffcd2c3b31ebab684dbf7f7b71fe198f8eddcdf3a042cc6e10205a"}, + {file = "jiter-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aad1e6e9b01cf0304dcee14db03e92e0073287a6297caf5caf2e9dbfea16a924"}, + {file = "jiter-0.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:504099fb7acdbe763e10690d560a25d4aee03d918d6a063f3a761d8a09fb833f"}, + {file = "jiter-0.8.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2373487caad7fe39581f588ab5c9262fc1ade078d448626fec93f4ffba528858"}, + {file = "jiter-0.8.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c341ecc3f9bccde952898b0c97c24f75b84b56a7e2f8bbc7c8e38cab0875a027"}, + {file = "jiter-0.8.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e48e7a336529b9419d299b70c358d4ebf99b8f4b847ed3f1000ec9f320e8c0c"}, + {file = "jiter-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5ee157a8afd2943be690db679f82fafb8d347a8342e8b9c34863de30c538d55"}, + {file = "jiter-0.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d7dceae3549b80087f913aad4acc2a7c1e0ab7cb983effd78bdc9c41cabdcf18"}, + {file = "jiter-0.8.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e29e9ecce53d396772590438214cac4ab89776f5e60bd30601f1050b34464019"}, + {file = "jiter-0.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fa1782f22d5f92c620153133f35a9a395d3f3823374bceddd3e7032e2fdfa0b1"}, + {file = "jiter-0.8.0-cp310-none-win32.whl", hash = "sha256:f754ef13b4e4f67a3bf59fe974ef4342523801c48bf422f720bd37a02a360584"}, + {file = "jiter-0.8.0-cp310-none-win_amd64.whl", hash = "sha256:796f750b65f5d605f5e7acaccc6b051675e60c41d7ac3eab40dbd7b5b81a290f"}, + {file = "jiter-0.8.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f6f4e645efd96b4690b9b6091dbd4e0fa2885ba5c57a0305c1916b75b4f30ff6"}, + {file = "jiter-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f61cf6d93c1ade9b8245c9f14b7900feadb0b7899dbe4aa8de268b705647df81"}, + {file = "jiter-0.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0396bc5cb1309c6dab085e70bb3913cdd92218315e47b44afe9eace68ee8adaa"}, + {file = "jiter-0.8.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62d0e42ec5dc772bd8554a304358220be5d97d721c4648b23f3a9c01ccc2cb26"}, + {file = "jiter-0.8.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec4b711989860705733fc59fb8c41b2def97041cea656b37cf6c8ea8dee1c3f4"}, + {file = "jiter-0.8.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:859cc35bf304ab066d88f10a44a3251a9cd057fb11ec23e00be22206db878f4f"}, + {file = "jiter-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5000195921aa293b39b9b5bc959d7fa658e7f18f938c0e52732da8e3cc70a278"}, + {file = "jiter-0.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:36050284c0abde57aba34964d3920f3d6228211b65df7187059bb7c7f143759a"}, + {file = "jiter-0.8.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a88f608e050cfe45c48d771e86ecdbf5258314c883c986d4217cc79e1fb5f689"}, + {file = "jiter-0.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:646cf4237665b2e13b4159d8f26d53f59bc9f2e6e135e3a508a2e5dd26d978c6"}, + {file = "jiter-0.8.0-cp311-none-win32.whl", hash = "sha256:21fe5b8345db1b3023052b2ade9bb4d369417827242892051244af8fae8ba231"}, + {file = "jiter-0.8.0-cp311-none-win_amd64.whl", hash = "sha256:30c2161c5493acf6b6c3c909973fb64ae863747def01cc7574f3954e0a15042c"}, + {file = "jiter-0.8.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d91a52d8f49ada2672a4b808a0c5c25d28f320a2c9ca690e30ebd561eb5a1002"}, + {file = "jiter-0.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c38cf25cf7862f61410b7a49684d34eb3b5bcbd7ddaf4773eea40e0bd43de706"}, + {file = "jiter-0.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6189beb5c4b3117624be6b2e84545cff7611f5855d02de2d06ff68e316182be"}, + {file = "jiter-0.8.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e13fa849c0e30643554add089983caa82f027d69fad8f50acadcb21c462244ab"}, + {file = "jiter-0.8.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d7765ca159d0a58e8e0f8ca972cd6d26a33bc97b4480d0d2309856763807cd28"}, + {file = "jiter-0.8.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b0befe7c6e9fc867d5bed21bab0131dfe27d1fa5cd52ba2bced67da33730b7d"}, + {file = "jiter-0.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7d6363d4c6f1052b1d8b494eb9a72667c3ef5f80ebacfe18712728e85327000"}, + {file = "jiter-0.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a873e57009863eeac3e3969e4653f07031d6270d037d6224415074ac17e5505c"}, + {file = "jiter-0.8.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2582912473c0d9940791479fe1bf2976a34f212eb8e0a82ee9e645ac275c5d16"}, + {file = "jiter-0.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:646163201af42f55393ee6e8f6136b8df488253a6533f4230a64242ecbfe6048"}, + {file = "jiter-0.8.0-cp312-none-win32.whl", hash = "sha256:96e75c9abfbf7387cba89a324d2356d86d8897ac58c956017d062ad510832dae"}, + {file = "jiter-0.8.0-cp312-none-win_amd64.whl", hash = "sha256:ed6074552b4a32e047b52dad5ab497223721efbd0e9efe68c67749f094a092f7"}, + {file = "jiter-0.8.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:dd5e351cb9b3e676ec3360a85ea96def515ad2b83c8ae3a251ce84985a2c9a6f"}, + {file = "jiter-0.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ba9f12b0f801ecd5ed0cec29041dc425d1050922b434314c592fc30d51022467"}, + {file = "jiter-0.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7ba461c3681728d556392e8ae56fb44a550155a24905f01982317b367c21dd4"}, + {file = "jiter-0.8.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a15ed47ab09576db560dbc5c2c5a64477535beb056cd7d997d5dd0f2798770e"}, + {file = "jiter-0.8.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cef55042816d0737142b0ec056c0356a5f681fb8d6aa8499b158e87098f4c6f8"}, + {file = "jiter-0.8.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:549f170215adeb5e866f10617c3d019d8eb4e6d4e3c6b724b3b8c056514a3487"}, + {file = "jiter-0.8.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f867edeb279d22020877640d2ea728de5817378c60a51be8af731a8a8f525306"}, + {file = "jiter-0.8.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aef8845f463093799db4464cee2aa59d61aa8edcb3762aaa4aacbec3f478c929"}, + {file = "jiter-0.8.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:d0d6e22e4062c3d3c1bf3594baa2f67fc9dcdda8275abad99e468e0c6540bc54"}, + {file = "jiter-0.8.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:079e62e64696241ac3f408e337aaac09137ed760ccf2b72b1094b48745c13641"}, + {file = "jiter-0.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74d2b56ed3da5760544df53b5f5c39782e68efb64dc3aa0bba4cc08815e6fae8"}, + {file = "jiter-0.8.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:798dafe108cba58a7bb0a50d4d5971f98bb7f3c974e1373e750de6eb21c1a329"}, + {file = "jiter-0.8.0-cp313-none-win32.whl", hash = "sha256:ca6d3064dfc743eb0d3d7539d89d4ba886957c717567adc72744341c1e3573c9"}, + {file = "jiter-0.8.0-cp313-none-win_amd64.whl", hash = "sha256:38caedda64fe1f04b06d7011fc15e86b3b837ed5088657bf778656551e3cd8f9"}, + {file = "jiter-0.8.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:bb5c8a0a8d081c338db22e5b8d53a89a121790569cbb85f7d3cfb1fe0fbe9836"}, + {file = "jiter-0.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:202dbe8970bfb166fab950eaab8f829c505730a0b33cc5e1cfb0a1c9dd56b2f9"}, + {file = "jiter-0.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9046812e5671fdcfb9ae02881fff1f6a14d484b7e8b3316179a372cdfa1e8026"}, + {file = "jiter-0.8.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e6ac56425023e52d65150918ae25480d0a1ce2a6bf5ea2097f66a2cc50f6d692"}, + {file = "jiter-0.8.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7dfcf97210c6eab9d2a1c6af15dd39e1d5154b96a7145d0a97fa1df865b7b834"}, + {file = "jiter-0.8.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4e3c8444d418686f78c9a547b9b90031faf72a0a1a46bfec7fb31edbd889c0d"}, + {file = "jiter-0.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6507011a299b7f578559084256405a8428875540d8d13530e00b688e41b09493"}, + {file = "jiter-0.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0aae4738eafdd34f0f25c2d3668ce9e8fa0d7cb75a2efae543c9a69aebc37323"}, + {file = "jiter-0.8.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7f5d782e790396b13f2a7b36bdcaa3736a33293bdda80a4bf1a3ce0cd5ef9f15"}, + {file = "jiter-0.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cc7f993bc2c4e03015445adbb16790c303282fce2e8d9dc3a3905b1d40e50564"}, + {file = "jiter-0.8.0-cp38-none-win32.whl", hash = "sha256:d4a8a6eda018a991fa58ef707dd51524055d11f5acb2f516d70b1be1d15ab39c"}, + {file = "jiter-0.8.0-cp38-none-win_amd64.whl", hash = "sha256:4cca948a3eda8ea24ed98acb0ee19dc755b6ad2e570ec85e1527d5167f91ff67"}, + {file = "jiter-0.8.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ef89663678d8257063ce7c00d94638e05bd72f662c5e1eb0e07a172e6c1a9a9f"}, + {file = "jiter-0.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c402ddcba90b4cc71db3216e8330f4db36e0da2c78cf1d8a9c3ed8f272602a94"}, + {file = "jiter-0.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a6dfe795b7a173a9f8ba7421cdd92193d60c1c973bbc50dc3758a9ad0fa5eb6"}, + {file = "jiter-0.8.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ec29a31b9abd6be39453a2c45da067138a3005d65d2c0507c530e0f1fdcd9a4"}, + {file = "jiter-0.8.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a488f8c54bddc3ddefaf3bfd6de4a52c97fc265d77bc2dcc6ee540c17e8c342"}, + {file = "jiter-0.8.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aeb5561adf4d26ca0d01b5811b4d7b56a8986699a473d700757b4758ef787883"}, + {file = "jiter-0.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ab961858d7ad13132328517d29f121ae1b2d94502191d6bcf96bddcc8bb5d1c"}, + {file = "jiter-0.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a207e718d114d23acf0850a2174d290f42763d955030d9924ffa4227dbd0018f"}, + {file = "jiter-0.8.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:733bc9dc8ff718a0ae4695239e9268eb93e88b73b367dfac3ec227d8ce2f1e77"}, + {file = "jiter-0.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d1ec27299e22d05e13a06e460bf7f75f26f9aaa0e0fb7d060f40e88df1d81faa"}, + {file = "jiter-0.8.0-cp39-none-win32.whl", hash = "sha256:e8dbfcb46553e6661d3fc1f33831598fcddf73d0f67834bce9fc3e9ebfe5c439"}, + {file = "jiter-0.8.0-cp39-none-win_amd64.whl", hash = "sha256:af2ce2487b3a93747e2cb5150081d4ae1e5874fce5924fc1a12e9e768e489ad8"}, + {file = "jiter-0.8.0.tar.gz", hash = "sha256:86fee98b569d4cc511ff2e3ec131354fafebd9348a487549c31ad371ae730310"}, ] [[package]] @@ -2445,13 +2440,13 @@ files = [ [[package]] name = "json5" -version = "0.9.28" +version = "0.10.0" description = "A Python implementation of the JSON5 data format." optional = false python-versions = ">=3.8.0" files = [ - {file = "json5-0.9.28-py3-none-any.whl", hash = "sha256:29c56f1accdd8bc2e037321237662034a7e07921e2b7223281a5ce2c46f0c4df"}, - {file = "json5-0.9.28.tar.gz", hash = "sha256:1f82f36e615bc5b42f1bbd49dbc94b12563c56408c6ffa06414ea310890e9a6e"}, + {file = "json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa"}, + {file = "json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559"}, ] [package.extras] @@ -2927,13 +2922,13 @@ six = "*" [[package]] name = "langfuse" -version = "2.53.9" +version = "2.54.1" description = "A client library for accessing langfuse" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langfuse-2.53.9-py3-none-any.whl", hash = "sha256:04363bc323f7513621c88a997003f7b906ae8f5d096bd54221cfcb6bf7a6f16a"}, - {file = "langfuse-2.53.9.tar.gz", hash = "sha256:6bfecf86e28c684034ae52a0b19535c94cc86923085267b548d63e5c1ce2b82c"}, + {file = "langfuse-2.54.1-py3-none-any.whl", hash = "sha256:1f1261cf763886758c70e192133340ff296169cc0930cde725eee52d467eb661"}, + {file = "langfuse-2.54.1.tar.gz", hash = "sha256:7efc70799740ffa0ac7e04066e0596fb6433e8e501fc850c6a4e7967de6de8a7"}, ] [package.dependencies] @@ -3438,18 +3433,19 @@ redisvl = ">=0.3.4,<0.4.0" [[package]] name = "llama-parse" -version = "0.5.14" +version = "0.5.15" description = "Parse files into RAG-Optimized formats." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "llama_parse-0.5.14-py3-none-any.whl", hash = "sha256:64a46825598a239cd7066df7bd81f1f952ae7b3e26ad98f0e34aa9625ebcfd72"}, - {file = "llama_parse-0.5.14.tar.gz", hash = "sha256:b90510f58774d6ee73b6275fe4f1aa0ff3a306026df29959606e56073384248c"}, + {file = "llama_parse-0.5.15-py3-none-any.whl", hash = "sha256:7a3506c7d3ae5a8e68c70a457a7213d2698e26abcef1d7a989eb9771cd73ae60"}, + {file = "llama_parse-0.5.15.tar.gz", hash = "sha256:ecb009f71c8b4c657085ca81808a922c80785810e38b10f3b46f03cfd29ba92a"}, ] [package.dependencies] click = ">=8.1.7,<9.0.0" llama-index-core = ">=0.11.0" +pydantic = "!=2.10" [[package]] name = "lxml" @@ -4056,44 +4052,37 @@ files = [ [[package]] name = "murmurhash" -version = "1.0.10" +version = "1.0.11" description = "Cython bindings for MurmurHash" optional = false python-versions = ">=3.6" files = [ - {file = "murmurhash-1.0.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3e90eef568adca5e17a91f96975e9a782ace3a617bbb3f8c8c2d917096e9bfeb"}, - {file = "murmurhash-1.0.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f8ecb00cc1ab57e4b065f9fb3ea923b55160c402d959c69a0b6dbbe8bc73efc3"}, - {file = "murmurhash-1.0.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3310101004d9e2e0530c2fed30174448d998ffd1b50dcbfb7677e95db101aa4b"}, - {file = "murmurhash-1.0.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65401a6f1778676253cbf89c1f45a8a7feb7d73038e483925df7d5943c08ed9"}, - {file = "murmurhash-1.0.10-cp310-cp310-win_amd64.whl", hash = "sha256:f23f2dfc7174de2cdc5007c0771ab8376a2a3f48247f32cac4a5563e40c6adcc"}, - {file = "murmurhash-1.0.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90ed37ee2cace9381b83d56068334f77e3e30bc521169a1f886a2a2800e965d6"}, - {file = "murmurhash-1.0.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:22e9926fdbec9d24ced9b0a42f0fee68c730438be3cfb00c2499fd495caec226"}, - {file = "murmurhash-1.0.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54bfbfd68baa99717239b8844600db627f336a08b1caf4df89762999f681cdd1"}, - {file = "murmurhash-1.0.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b9d200a09d48ef67f6840b77c14f151f2b6c48fd69661eb75c7276ebdb146c"}, - {file = "murmurhash-1.0.10-cp311-cp311-win_amd64.whl", hash = "sha256:e5d7cfe392c0a28129226271008e61e77bf307afc24abf34f386771daa7b28b0"}, - {file = "murmurhash-1.0.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:96f0a070344d4802ea76a160e0d4c88b7dc10454d2426f48814482ba60b38b9e"}, - {file = "murmurhash-1.0.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9f61862060d677c84556610ac0300a0776cb13cb3155f5075ed97e80f86e55d9"}, - {file = "murmurhash-1.0.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3b6d2d877d8881a08be66d906856d05944be0faf22b9a0390338bcf45299989"}, - {file = "murmurhash-1.0.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f54b0031d8696fed17ed6e9628f339cdea0ba2367ca051e18ff59193f52687"}, - {file = "murmurhash-1.0.10-cp312-cp312-win_amd64.whl", hash = "sha256:97e09d675de2359e586f09de1d0de1ab39f9911edffc65c9255fb5e04f7c1f85"}, - {file = "murmurhash-1.0.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b64e5332932993fef598e78d633b1ba664789ab73032ed511f3dc615a631a1a"}, - {file = "murmurhash-1.0.10-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e2a38437a8497e082408aa015c6d90554b9e00c2c221fdfa79728a2d99a739e"}, - {file = "murmurhash-1.0.10-cp36-cp36m-win_amd64.whl", hash = "sha256:55f4e4f9291a53c36070330950b472d72ba7d331e4ce3ce1ab349a4f458f7bc4"}, - {file = "murmurhash-1.0.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:16ef9f0855952493fe08929d23865425906a8c0c40607ac8a949a378652ba6a9"}, - {file = "murmurhash-1.0.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cc3351ae92b89c2fcdc6e41ac6f17176dbd9b3554c96109fd0713695d8663e7"}, - {file = "murmurhash-1.0.10-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6559fef7c2e7349a42a63549067709b656d6d1580752bd76be1541d8b2d65718"}, - {file = "murmurhash-1.0.10-cp37-cp37m-win_amd64.whl", hash = "sha256:8bf49e3bb33febb7057ae3a5d284ef81243a1e55eaa62bdcd79007cddbdc0461"}, - {file = "murmurhash-1.0.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f1605fde07030516eb63d77a598dd164fb9bf217fd937dbac588fe7e47a28c40"}, - {file = "murmurhash-1.0.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4904f7e68674a64eb2b08823c72015a5e14653e0b4b109ea00c652a005a59bad"}, - {file = "murmurhash-1.0.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0438f0cb44cf1cd26251f72c1428213c4197d40a4e3f48b1efc3aea12ce18517"}, - {file = "murmurhash-1.0.10-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db1171a3f9a10571931764cdbfaa5371f4cf5c23c680639762125cb075b833a5"}, - {file = "murmurhash-1.0.10-cp38-cp38-win_amd64.whl", hash = "sha256:1c9fbcd7646ad8ba67b895f71d361d232c6765754370ecea473dd97d77afe99f"}, - {file = "murmurhash-1.0.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7024ab3498434f22f8e642ae31448322ad8228c65c8d9e5dc2d563d57c14c9b8"}, - {file = "murmurhash-1.0.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a99dedfb7f0cc5a4cd76eb409ee98d3d50eba024f934e705914f6f4d765aef2c"}, - {file = "murmurhash-1.0.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b580b8503647de5dd7972746b7613ea586270f17ac92a44872a9b1b52c36d68"}, - {file = "murmurhash-1.0.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d75840212bf75eb1352c946c3cf1622dacddd6d6bdda34368237d1eb3568f23a"}, - {file = "murmurhash-1.0.10-cp39-cp39-win_amd64.whl", hash = "sha256:a4209962b9f85de397c3203ea4b3a554da01ae9fd220fdab38757d4e9eba8d1a"}, - {file = "murmurhash-1.0.10.tar.gz", hash = "sha256:5282aab1317804c6ebd6dd7f69f15ba9075aee671c44a34be2bde0f1b11ef88a"}, + {file = "murmurhash-1.0.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a73cf9f55c8218d5aa47b3b6dac28fa2e1730bbca0874e7eabe5e1a6024780c5"}, + {file = "murmurhash-1.0.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:48716859a12596024d9adecf399e356c3c5c38ba2eb0d8270bd6655c05a0af28"}, + {file = "murmurhash-1.0.11-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1967ccc893c80798a420c5c3829ea9755d0b4a4972b0bf6e5c34d1117f5d0222"}, + {file = "murmurhash-1.0.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:904c4d6550c640e0f640b6357ecaa13406e6d925e55fbb4ac9e1f27ff25bee3c"}, + {file = "murmurhash-1.0.11-cp310-cp310-win_amd64.whl", hash = "sha256:4c24f1c96e8ce720ac85058c37e6e775be6017f0966abff2863733d91368e03e"}, + {file = "murmurhash-1.0.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53ed86ce0bef2475af9314f732ca66456e7b00abb1d1a6c29c432e5f0f49bad5"}, + {file = "murmurhash-1.0.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51e7c61f59e0ee1c465c841f530ef6373a98dc028059048fc0c857dfd5d57b1c"}, + {file = "murmurhash-1.0.11-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b9a5109e29d43c79bfdca8dbad9bee7190846a88ec6d4135754727fb49a64e5"}, + {file = "murmurhash-1.0.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:12845ad43a2e54734b52f58e8d228eacd03803d368b689b3868a0bdec4c10da1"}, + {file = "murmurhash-1.0.11-cp311-cp311-win_amd64.whl", hash = "sha256:e3d0bdbffd82924725cd6549b03ee11997a2c58253f0fdda571a5fedacc894a1"}, + {file = "murmurhash-1.0.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:185b2cd20b81fa876eaa2249faafd0b7b3d0c54ef04714e38135d9f482cf6ce9"}, + {file = "murmurhash-1.0.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fd3083c6d977c2bc1e2f35ff999c39de43de09fd588f780243ec78debb316406"}, + {file = "murmurhash-1.0.11-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49a3cf4d26f7213d0f4a6c2c49496cbe9f78b30d56b1c3b17fbc74676372ea3f"}, + {file = "murmurhash-1.0.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a1bdb3c3fe32d93f7c461f11e6b2f7bbe64b3d70f56e48052490435853ed5c91"}, + {file = "murmurhash-1.0.11-cp312-cp312-win_amd64.whl", hash = "sha256:0b507dd8ea10f3e5204b397ea9917a3a5f11756859d91406a8f485f18a411bdf"}, + {file = "murmurhash-1.0.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:036aea55d160d65698888a903fd2a19c4258be711f7bf2ab1b6cebdf41e09e09"}, + {file = "murmurhash-1.0.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:61f4b991b5bd88f5d57550a6328f8adb2f16656781e9eade9c16e55b41f6fab7"}, + {file = "murmurhash-1.0.11-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5527ec305236a2ef404a38e0e57b1dc886a431e2032acf4c7ce3b17382c49ef"}, + {file = "murmurhash-1.0.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b26cf1be87c13fb242b9c252f11a25da71056c8fb5f22623e455129cce99592a"}, + {file = "murmurhash-1.0.11-cp313-cp313-win_amd64.whl", hash = "sha256:24aba80a793bf371de70fffffc1f16c06810e4d8b90125b5bb762aabda3174d1"}, + {file = "murmurhash-1.0.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:234cc9719a5df1bffe174664b84b8381f66016a1f094d43db3fb8ffca1d72207"}, + {file = "murmurhash-1.0.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:faf1db780cfca0a021ce32542ac750d24b9b3e81e2a4a6fcb78efcc8ec611813"}, + {file = "murmurhash-1.0.11-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1f7f7c8bce5fa1c50c6214421af27eb0bbb07cc55c4a35efa5735ceaf1a6a1c"}, + {file = "murmurhash-1.0.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b8d8fad28cf7d9661486f8e3d48e4215db69f5f9b091e78edcccf2c46459846a"}, + {file = "murmurhash-1.0.11-cp39-cp39-win_amd64.whl", hash = "sha256:6ae5fc4f59be8eebcb8d24ffee49f32ee4eccdc004060848834eb2540ee3a056"}, + {file = "murmurhash-1.0.11.tar.gz", hash = "sha256:87ff68a255e54e7648d0729ff4130f43f7f38f03288a376e567934e16db93767"}, ] [[package]] @@ -4355,13 +4344,13 @@ files = [ [[package]] name = "openai" -version = "1.54.5" +version = "1.55.1" description = "The official Python library for the openai API" optional = false python-versions = ">=3.8" files = [ - {file = "openai-1.54.5-py3-none-any.whl", hash = "sha256:f55a4450f38501814b53e76311ed7845a6f7f35bab46d0fb2a3728035d7a72d8"}, - {file = "openai-1.54.5.tar.gz", hash = "sha256:2aab4f9755a3e1e04d8a45ac1f4ce7b6948bab76646020c6386256d7e5cbb7e0"}, + {file = "openai-1.55.1-py3-none-any.whl", hash = "sha256:d10d96a4f9dc5f05d38dea389119ec8dcd24bc9698293c8357253c601b4a77a5"}, + {file = "openai-1.55.1.tar.gz", hash = "sha256:471324321e7739214f16a544e801947a046d3c5d516fae8719a317234e4968d3"}, ] [package.dependencies] @@ -4379,69 +4368,86 @@ datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] [[package]] name = "orjson" -version = "3.10.11" +version = "3.10.12" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.11-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6dade64687f2bd7c090281652fe18f1151292d567a9302b34c2dbb92a3872f1f"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82f07c550a6ccd2b9290849b22316a609023ed851a87ea888c0456485a7d196a"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd9a187742d3ead9df2e49240234d728c67c356516cf4db018833a86f20ec18c"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77b0fed6f209d76c1c39f032a70df2d7acf24b1812ca3e6078fd04e8972685a3"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63fc9d5fe1d4e8868f6aae547a7b8ba0a2e592929245fff61d633f4caccdcdd6"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65cd3e3bb4fbb4eddc3c1e8dce10dc0b73e808fcb875f9fab40c81903dd9323e"}, - {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f67c570602300c4befbda12d153113b8974a3340fdcf3d6de095ede86c06d92"}, - {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1f39728c7f7d766f1f5a769ce4d54b5aaa4c3f92d5b84817053cc9995b977acc"}, - {file = "orjson-3.10.11-cp310-none-win32.whl", hash = "sha256:1789d9db7968d805f3d94aae2c25d04014aae3a2fa65b1443117cd462c6da647"}, - {file = "orjson-3.10.11-cp310-none-win_amd64.whl", hash = "sha256:5576b1e5a53a5ba8f8df81872bb0878a112b3ebb1d392155f00f54dd86c83ff6"}, - {file = "orjson-3.10.11-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1444f9cb7c14055d595de1036f74ecd6ce15f04a715e73f33bb6326c9cef01b6"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdec57fe3b4bdebcc08a946db3365630332dbe575125ff3d80a3272ebd0ddafe"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eed32f33a0ea6ef36ccc1d37f8d17f28a1d6e8eefae5928f76aff8f1df85e67"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80df27dd8697242b904f4ea54820e2d98d3f51f91e97e358fc13359721233e4b"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:705f03cee0cb797256d54de6695ef219e5bc8c8120b6654dd460848d57a9af3d"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03246774131701de8e7059b2e382597da43144a9a7400f178b2a32feafc54bd5"}, - {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8b5759063a6c940a69c728ea70d7c33583991c6982915a839c8da5f957e0103a"}, - {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:677f23e32491520eebb19c99bb34675daf5410c449c13416f7f0d93e2cf5f981"}, - {file = "orjson-3.10.11-cp311-none-win32.whl", hash = "sha256:a11225d7b30468dcb099498296ffac36b4673a8398ca30fdaec1e6c20df6aa55"}, - {file = "orjson-3.10.11-cp311-none-win_amd64.whl", hash = "sha256:df8c677df2f9f385fcc85ab859704045fa88d4668bc9991a527c86e710392bec"}, - {file = "orjson-3.10.11-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:360a4e2c0943da7c21505e47cf6bd725588962ff1d739b99b14e2f7f3545ba51"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:496e2cb45de21c369079ef2d662670a4892c81573bcc143c4205cae98282ba97"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7dfa8db55c9792d53c5952900c6a919cfa377b4f4534c7a786484a6a4a350c19"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51f3382415747e0dbda9dade6f1e1a01a9d37f630d8c9049a8ed0e385b7a90c0"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f35a1b9f50a219f470e0e497ca30b285c9f34948d3c8160d5ad3a755d9299433"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f3b7c5803138e67028dde33450e054c87e0703afbe730c105f1fcd873496d5"}, - {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f91d9eb554310472bd09f5347950b24442600594c2edc1421403d7610a0998fd"}, - {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dfbb2d460a855c9744bbc8e36f9c3a997c4b27d842f3d5559ed54326e6911f9b"}, - {file = "orjson-3.10.11-cp312-none-win32.whl", hash = "sha256:d4a62c49c506d4d73f59514986cadebb7e8d186ad510c518f439176cf8d5359d"}, - {file = "orjson-3.10.11-cp312-none-win_amd64.whl", hash = "sha256:f1eec3421a558ff7a9b010a6c7effcfa0ade65327a71bb9b02a1c3b77a247284"}, - {file = "orjson-3.10.11-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c46294faa4e4d0eb73ab68f1a794d2cbf7bab33b1dda2ac2959ffb7c61591899"}, - {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52e5834d7d6e58a36846e059d00559cb9ed20410664f3ad156cd2cc239a11230"}, - {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2fc947e5350fdce548bfc94f434e8760d5cafa97fb9c495d2fef6757aa02ec0"}, - {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0efabbf839388a1dab5b72b5d3baedbd6039ac83f3b55736eb9934ea5494d258"}, - {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3f29634260708c200c4fe148e42b4aae97d7b9fee417fbdd74f8cfc265f15b0"}, - {file = "orjson-3.10.11-cp313-none-win32.whl", hash = "sha256:1a1222ffcee8a09476bbdd5d4f6f33d06d0d6642df2a3d78b7a195ca880d669b"}, - {file = "orjson-3.10.11-cp313-none-win_amd64.whl", hash = "sha256:bc274ac261cc69260913b2d1610760e55d3c0801bb3457ba7b9004420b6b4270"}, - {file = "orjson-3.10.11-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:19b3763e8bbf8ad797df6b6b5e0fc7c843ec2e2fc0621398534e0c6400098f87"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be83a13312e5e58d633580c5eb8d0495ae61f180da2722f20562974188af205"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:afacfd1ab81f46dedd7f6001b6d4e8de23396e4884cd3c3436bd05defb1a6446"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb4d0bea56bba596723d73f074c420aec3b2e5d7d30698bc56e6048066bd560c"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96ed1de70fcb15d5fed529a656df29f768187628727ee2788344e8a51e1c1350"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bfb30c891b530f3f80e801e3ad82ef150b964e5c38e1fb8482441c69c35c61c"}, - {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d496c74fc2b61341e3cefda7eec21b7854c5f672ee350bc55d9a4997a8a95204"}, - {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:655a493bac606655db9a47fe94d3d84fc7f3ad766d894197c94ccf0c5408e7d3"}, - {file = "orjson-3.10.11-cp38-none-win32.whl", hash = "sha256:b9546b278c9fb5d45380f4809e11b4dd9844ca7aaf1134024503e134ed226161"}, - {file = "orjson-3.10.11-cp38-none-win_amd64.whl", hash = "sha256:b592597fe551d518f42c5a2eb07422eb475aa8cfdc8c51e6da7054b836b26782"}, - {file = "orjson-3.10.11-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c95f2ecafe709b4e5c733b5e2768ac569bed308623c85806c395d9cca00e08af"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80c00d4acded0c51c98754fe8218cb49cb854f0f7eb39ea4641b7f71732d2cb7"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:461311b693d3d0a060439aa669c74f3603264d4e7a08faa68c47ae5a863f352d"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52ca832f17d86a78cbab86cdc25f8c13756ebe182b6fc1a97d534051c18a08de"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c57ea78a753812f528178aa2f1c57da633754c91d2124cb28991dab4c79a54"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7fcfc6f7ca046383fb954ba528587e0f9336828b568282b27579c49f8e16aad"}, - {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:86b9dd983857970c29e4c71bb3e95ff085c07d3e83e7c46ebe959bac07ebd80b"}, - {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d83f87582d223e54efb2242a79547611ba4ebae3af8bae1e80fa9a0af83bb7f"}, - {file = "orjson-3.10.11-cp39-none-win32.whl", hash = "sha256:9fd0ad1c129bc9beb1154c2655f177620b5beaf9a11e0d10bac63ef3fce96950"}, - {file = "orjson-3.10.11-cp39-none-win_amd64.whl", hash = "sha256:10f416b2a017c8bd17f325fb9dee1fb5cdd7a54e814284896b7c3f2763faa017"}, - {file = "orjson-3.10.11.tar.gz", hash = "sha256:e35b6d730de6384d5b2dab5fd23f0d76fae8bbc8c353c2f78210aa5fa4beb3ef"}, + {file = "orjson-3.10.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ece01a7ec71d9940cc654c482907a6b65df27251255097629d0dea781f255c6d"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c34ec9aebc04f11f4b978dd6caf697a2df2dd9b47d35aa4cc606cabcb9df69d7"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd6ec8658da3480939c79b9e9e27e0db31dffcd4ba69c334e98c9976ac29140e"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f17e6baf4cf01534c9de8a16c0c611f3d94925d1701bf5f4aff17003677d8ced"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6402ebb74a14ef96f94a868569f5dccf70d791de49feb73180eb3c6fda2ade56"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0000758ae7c7853e0a4a6063f534c61656ebff644391e1f81698c1b2d2fc8cd2"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:888442dcee99fd1e5bd37a4abb94930915ca6af4db50e23e746cdf4d1e63db13"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c1f7a3ce79246aa0e92f5458d86c54f257fb5dfdc14a192651ba7ec2c00f8a05"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:802a3935f45605c66fb4a586488a38af63cb37aaad1c1d94c982c40dcc452e85"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1da1ef0113a2be19bb6c557fb0ec2d79c92ebd2fed4cfb1b26bab93f021fb885"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a3273e99f367f137d5b3fecb5e9f45bcdbfac2a8b2f32fbc72129bbd48789c2"}, + {file = "orjson-3.10.12-cp310-none-win32.whl", hash = "sha256:475661bf249fd7907d9b0a2a2421b4e684355a77ceef85b8352439a9163418c3"}, + {file = "orjson-3.10.12-cp310-none-win_amd64.whl", hash = "sha256:87251dc1fb2b9e5ab91ce65d8f4caf21910d99ba8fb24b49fd0c118b2362d509"}, + {file = "orjson-3.10.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a734c62efa42e7df94926d70fe7d37621c783dea9f707a98cdea796964d4cf74"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:750f8b27259d3409eda8350c2919a58b0cfcd2054ddc1bd317a643afc646ef23"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb52c22bfffe2857e7aa13b4622afd0dd9d16ea7cc65fd2bf318d3223b1b6252"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:440d9a337ac8c199ff8251e100c62e9488924c92852362cd27af0e67308c16ef"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9e15c06491c69997dfa067369baab3bf094ecb74be9912bdc4339972323f252"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:362d204ad4b0b8724cf370d0cd917bb2dc913c394030da748a3bb632445ce7c4"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b57cbb4031153db37b41622eac67329c7810e5f480fda4cfd30542186f006ae"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:165c89b53ef03ce0d7c59ca5c82fa65fe13ddf52eeb22e859e58c237d4e33b9b"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5dee91b8dfd54557c1a1596eb90bcd47dbcd26b0baaed919e6861f076583e9da"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a4e1cfb72de6f905bdff061172adfb3caf7a4578ebf481d8f0530879476c07"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:038d42c7bc0606443459b8fe2d1f121db474c49067d8d14c6a075bbea8bf14dd"}, + {file = "orjson-3.10.12-cp311-none-win32.whl", hash = "sha256:03b553c02ab39bed249bedd4abe37b2118324d1674e639b33fab3d1dafdf4d79"}, + {file = "orjson-3.10.12-cp311-none-win_amd64.whl", hash = "sha256:8b8713b9e46a45b2af6b96f559bfb13b1e02006f4242c156cbadef27800a55a8"}, + {file = "orjson-3.10.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:53206d72eb656ca5ac7d3a7141e83c5bbd3ac30d5eccfe019409177a57634b0d"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8010afc2150d417ebda810e8df08dd3f544e0dd2acab5370cfa6bcc0662f8f"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed459b46012ae950dd2e17150e838ab08215421487371fa79d0eced8d1461d70"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dcb9673f108a93c1b52bfc51b0af422c2d08d4fc710ce9c839faad25020bb69"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22a51ae77680c5c4652ebc63a83d5255ac7d65582891d9424b566fb3b5375ee9"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910fdf2ac0637b9a77d1aad65f803bac414f0b06f720073438a7bd8906298192"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:24ce85f7100160936bc2116c09d1a8492639418633119a2224114f67f63a4559"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a76ba5fc8dd9c913640292df27bff80a685bed3a3c990d59aa6ce24c352f8fc"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ff70ef093895fd53f4055ca75f93f047e088d1430888ca1229393a7c0521100f"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4244b7018b5753ecd10a6d324ec1f347da130c953a9c88432c7fbc8875d13be"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:16135ccca03445f37921fa4b585cff9a58aa8d81ebcb27622e69bfadd220b32c"}, + {file = "orjson-3.10.12-cp312-none-win32.whl", hash = "sha256:2d879c81172d583e34153d524fcba5d4adafbab8349a7b9f16ae511c2cee8708"}, + {file = "orjson-3.10.12-cp312-none-win_amd64.whl", hash = "sha256:fc23f691fa0f5c140576b8c365bc942d577d861a9ee1142e4db468e4e17094fb"}, + {file = "orjson-3.10.12-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47962841b2a8aa9a258b377f5188db31ba49af47d4003a32f55d6f8b19006543"}, + {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6334730e2532e77b6054e87ca84f3072bee308a45a452ea0bffbbbc40a67e296"}, + {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:accfe93f42713c899fdac2747e8d0d5c659592df2792888c6c5f829472e4f85e"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7974c490c014c48810d1dede6c754c3cc46598da758c25ca3b4001ac45b703f"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3f250ce7727b0b2682f834a3facff88e310f52f07a5dcfd852d99637d386e79e"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f31422ff9486ae484f10ffc51b5ab2a60359e92d0716fcce1b3593d7bb8a9af6"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5f29c5d282bb2d577c2a6bbde88d8fdcc4919c593f806aac50133f01b733846e"}, + {file = "orjson-3.10.12-cp313-none-win32.whl", hash = "sha256:f45653775f38f63dc0e6cd4f14323984c3149c05d6007b58cb154dd080ddc0dc"}, + {file = "orjson-3.10.12-cp313-none-win_amd64.whl", hash = "sha256:229994d0c376d5bdc91d92b3c9e6be2f1fbabd4cc1b59daae1443a46ee5e9825"}, + {file = "orjson-3.10.12-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7d69af5b54617a5fac5c8e5ed0859eb798e2ce8913262eb522590239db6c6763"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ed119ea7d2953365724a7059231a44830eb6bbb0cfead33fcbc562f5fd8f935"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c5fc1238ef197e7cad5c91415f524aaa51e004be5a9b35a1b8a84ade196f73f"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43509843990439b05f848539d6f6198d4ac86ff01dd024b2f9a795c0daeeab60"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f72e27a62041cfb37a3de512247ece9f240a561e6c8662276beaf4d53d406db4"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a904f9572092bb6742ab7c16c623f0cdccbad9eeb2d14d4aa06284867bddd31"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:855c0833999ed5dc62f64552db26f9be767434917d8348d77bacaab84f787d7b"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:897830244e2320f6184699f598df7fb9db9f5087d6f3f03666ae89d607e4f8ed"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:0b32652eaa4a7539f6f04abc6243619c56f8530c53bf9b023e1269df5f7816dd"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:36b4aa31e0f6a1aeeb6f8377769ca5d125db000f05c20e54163aef1d3fe8e833"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5535163054d6cbf2796f93e4f0dbc800f61914c0e3c4ed8499cf6ece22b4a3da"}, + {file = "orjson-3.10.12-cp38-none-win32.whl", hash = "sha256:90a5551f6f5a5fa07010bf3d0b4ca2de21adafbbc0af6cb700b63cd767266cb9"}, + {file = "orjson-3.10.12-cp38-none-win_amd64.whl", hash = "sha256:703a2fb35a06cdd45adf5d733cf613cbc0cb3ae57643472b16bc22d325b5fb6c"}, + {file = "orjson-3.10.12-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f29de3ef71a42a5822765def1febfb36e0859d33abf5c2ad240acad5c6a1b78d"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de365a42acc65d74953f05e4772c974dad6c51cfc13c3240899f534d611be967"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91a5a0158648a67ff0004cb0df5df7dcc55bfc9ca154d9c01597a23ad54c8d0c"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c47ce6b8d90fe9646a25b6fb52284a14ff215c9595914af63a5933a49972ce36"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0eee4c2c5bfb5c1b47a5db80d2ac7aaa7e938956ae88089f098aff2c0f35d5d8"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35d3081bbe8b86587eb5c98a73b97f13d8f9fea685cf91a579beddacc0d10566"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c23a6e90383884068bc2dba83d5222c9fcc3b99a0ed2411d38150734236755"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5472be7dc3269b4b52acba1433dac239215366f89dc1d8d0e64029abac4e714e"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7319cda750fca96ae5973efb31b17d97a5c5225ae0bc79bf5bf84df9e1ec2ab6"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:74d5ca5a255bf20b8def6a2b96b1e18ad37b4a122d59b154c458ee9494377f80"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ff31d22ecc5fb85ef62c7d4afe8301d10c558d00dd24274d4bbe464380d3cd69"}, + {file = "orjson-3.10.12-cp39-none-win32.whl", hash = "sha256:c22c3ea6fba91d84fcb4cda30e64aff548fcf0c44c876e681f47d61d24b12e6b"}, + {file = "orjson-3.10.12-cp39-none-win_amd64.whl", hash = "sha256:be604f60d45ace6b0b33dd990a66b4526f1a7a186ac411c942674625456ca548"}, + {file = "orjson-3.10.12.tar.gz", hash = "sha256:0a78bbda3aea0f9f079057ee1ee8a1ecf790d4f1af88dd67493c6b8ee52506ff"}, ] [[package]] @@ -4728,18 +4734,18 @@ type = ["mypy (>=1.11.2)"] [[package]] name = "playwright" -version = "1.48.0" +version = "1.49.0" description = "A high-level API to automate web browsers" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "playwright-1.48.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:082bce2739f1078acc7d0734da8cc0e23eb91b7fae553f3316d733276f09a6b1"}, - {file = "playwright-1.48.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7da2eb51a19c7f3b523e9faa9d98e7af92e52eb983a099979ea79c9668e3cbf7"}, - {file = "playwright-1.48.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:115b988d1da322358b77bc3bf2d3cc90f8c881e691461538e7df91614c4833c9"}, - {file = "playwright-1.48.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:8dabb80e62f667fe2640a8b694e26a7b884c0b4803f7514a3954fc849126227b"}, - {file = "playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ff8303409ebed76bed4c3d655340320b768817d900ba208b394fdd7d7939a5c"}, - {file = "playwright-1.48.0-py3-none-win32.whl", hash = "sha256:85598c360c590076d4f435525be991246d74a905b654ac19d26eab7ed9b98b2d"}, - {file = "playwright-1.48.0-py3-none-win_amd64.whl", hash = "sha256:e0e87b0c4dc8fce83c725dd851aec37bc4e882bb225ec8a96bd83cf32d4f1623"}, + {file = "playwright-1.49.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:704532a2d8ba580ec9e1895bfeafddce2e3d52320d4eb8aa38e80376acc5cbb0"}, + {file = "playwright-1.49.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e453f02c4e5cc2db7e9759c47e7425f32e50ac76c76b7eb17c69eed72f01c4d8"}, + {file = "playwright-1.49.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:37ae985309184472946a6eb1a237e5d93c9e58a781fa73b75c8751325002a5d4"}, + {file = "playwright-1.49.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:68d94beffb3c9213e3ceaafa66171affd9a5d9162e0c8a3eed1b1132c2e57598"}, + {file = "playwright-1.49.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f12d2aecdb41fc25a624cb15f3e8391c252ebd81985e3d5c1c261fe93779345"}, + {file = "playwright-1.49.0-py3-none-win32.whl", hash = "sha256:91103de52d470594ad375b512d7143fa95d6039111ae11a93eb4fe2f2b4a4858"}, + {file = "playwright-1.49.0-py3-none-win_amd64.whl", hash = "sha256:34d28a2c2d46403368610be4339898dc9c34eb9f7c578207b4715c49743a072a"}, ] [package.dependencies] @@ -5153,22 +5159,19 @@ files = [ [[package]] name = "pydantic" -version = "2.9.2" +version = "2.10.2" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, - {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, + {file = "pydantic-2.10.2-py3-none-any.whl", hash = "sha256:cfb96e45951117c3024e6b67b25cdc33a3cb7b2fa62e239f7af1378358a1d99e"}, + {file = "pydantic-2.10.2.tar.gz", hash = "sha256:2bc2d7f17232e0841cbba4641e65ba1eb6fafb3a08de3a091ff3ce14a197c4fa"}, ] [package.dependencies] annotated-types = ">=0.6.0" -pydantic-core = "2.23.4" -typing-extensions = [ - {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, - {version = ">=4.6.1", markers = "python_version < \"3.13\""}, -] +pydantic-core = "2.27.1" +typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] @@ -5176,100 +5179,111 @@ timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.23.4" +version = "2.27.1" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, - {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f"}, - {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3"}, - {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071"}, - {file = "pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119"}, - {file = "pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f"}, - {file = "pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8"}, - {file = "pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b"}, - {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0"}, - {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64"}, - {file = "pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f"}, - {file = "pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3"}, - {file = "pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231"}, - {file = "pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126"}, - {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e"}, - {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24"}, - {file = "pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84"}, - {file = "pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9"}, - {file = "pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc"}, - {file = "pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327"}, - {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6"}, - {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f"}, - {file = "pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769"}, - {file = "pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5"}, - {file = "pydantic_core-2.23.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555"}, - {file = "pydantic_core-2.23.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12"}, - {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2"}, - {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb"}, - {file = "pydantic_core-2.23.4-cp38-none-win32.whl", hash = "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6"}, - {file = "pydantic_core-2.23.4-cp38-none-win_amd64.whl", hash = "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556"}, - {file = "pydantic_core-2.23.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a"}, - {file = "pydantic_core-2.23.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55"}, - {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040"}, - {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605"}, - {file = "pydantic_core-2.23.4-cp39-none-win32.whl", hash = "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6"}, - {file = "pydantic_core-2.23.4-cp39-none-win_amd64.whl", hash = "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e"}, - {file = "pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206"}, + {file = "pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c"}, + {file = "pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc"}, + {file = "pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9"}, + {file = "pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5"}, + {file = "pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae"}, + {file = "pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c"}, + {file = "pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16"}, + {file = "pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23"}, + {file = "pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05"}, + {file = "pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337"}, + {file = "pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b"}, + {file = "pydantic_core-2.27.1-cp38-none-win32.whl", hash = "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618"}, + {file = "pydantic_core-2.27.1-cp38-none-win_amd64.whl", hash = "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131"}, + {file = "pydantic_core-2.27.1-cp39-none-win32.whl", hash = "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3"}, + {file = "pydantic_core-2.27.1-cp39-none-win_amd64.whl", hash = "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840"}, + {file = "pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235"}, ] [package.dependencies] @@ -6052,40 +6066,40 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -version = "0.7.4" +version = "0.8.0" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.7.4-py3-none-linux_armv6l.whl", hash = "sha256:a4919925e7684a3f18e18243cd6bea7cfb8e968a6eaa8437971f681b7ec51478"}, - {file = "ruff-0.7.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cfb365c135b830778dda8c04fb7d4280ed0b984e1aec27f574445231e20d6c63"}, - {file = "ruff-0.7.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:63a569b36bc66fbadec5beaa539dd81e0527cb258b94e29e0531ce41bacc1f20"}, - {file = "ruff-0.7.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d06218747d361d06fd2fdac734e7fa92df36df93035db3dc2ad7aa9852cb109"}, - {file = "ruff-0.7.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0cea28d0944f74ebc33e9f934238f15c758841f9f5edd180b5315c203293452"}, - {file = "ruff-0.7.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80094ecd4793c68b2571b128f91754d60f692d64bc0d7272ec9197fdd09bf9ea"}, - {file = "ruff-0.7.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:997512325c6620d1c4c2b15db49ef59543ef9cd0f4aa8065ec2ae5103cedc7e7"}, - {file = "ruff-0.7.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00b4cf3a6b5fad6d1a66e7574d78956bbd09abfd6c8a997798f01f5da3d46a05"}, - {file = "ruff-0.7.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7dbdc7d8274e1422722933d1edddfdc65b4336abf0b16dfcb9dedd6e6a517d06"}, - {file = "ruff-0.7.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e92dfb5f00eaedb1501b2f906ccabfd67b2355bdf117fea9719fc99ac2145bc"}, - {file = "ruff-0.7.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3bd726099f277d735dc38900b6a8d6cf070f80828877941983a57bca1cd92172"}, - {file = "ruff-0.7.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2e32829c429dd081ee5ba39aef436603e5b22335c3d3fff013cd585806a6486a"}, - {file = "ruff-0.7.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:662a63b4971807623f6f90c1fb664613f67cc182dc4d991471c23c541fee62dd"}, - {file = "ruff-0.7.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:876f5e09eaae3eb76814c1d3b68879891d6fde4824c015d48e7a7da4cf066a3a"}, - {file = "ruff-0.7.4-py3-none-win32.whl", hash = "sha256:75c53f54904be42dd52a548728a5b572344b50d9b2873d13a3f8c5e3b91f5cac"}, - {file = "ruff-0.7.4-py3-none-win_amd64.whl", hash = "sha256:745775c7b39f914238ed1f1b0bebed0b9155a17cd8bc0b08d3c87e4703b990d6"}, - {file = "ruff-0.7.4-py3-none-win_arm64.whl", hash = "sha256:11bff065102c3ae9d3ea4dc9ecdfe5a5171349cdd0787c1fc64761212fc9cf1f"}, - {file = "ruff-0.7.4.tar.gz", hash = "sha256:cd12e35031f5af6b9b93715d8c4f40360070b2041f81273d0527683d5708fce2"}, + {file = "ruff-0.8.0-py3-none-linux_armv6l.whl", hash = "sha256:fcb1bf2cc6706adae9d79c8d86478677e3bbd4ced796ccad106fd4776d395fea"}, + {file = "ruff-0.8.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:295bb4c02d58ff2ef4378a1870c20af30723013f441c9d1637a008baaf928c8b"}, + {file = "ruff-0.8.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7b1f1c76b47c18fa92ee78b60d2d20d7e866c55ee603e7d19c1e991fad933a9a"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb0d4f250a7711b67ad513fde67e8870109e5ce590a801c3722580fe98c33a99"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e55cce9aa93c5d0d4e3937e47b169035c7e91c8655b0974e61bb79cf398d49c"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f4cd64916d8e732ce6b87f3f5296a8942d285bbbc161acee7fe561134af64f9"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c5c1466be2a2ebdf7c5450dd5d980cc87c8ba6976fb82582fea18823da6fa362"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2dabfd05b96b7b8f2da00d53c514eea842bff83e41e1cceb08ae1966254a51df"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:facebdfe5a5af6b1588a1d26d170635ead6892d0e314477e80256ef4a8470cf3"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87a8e86bae0dbd749c815211ca11e3a7bd559b9710746c559ed63106d382bd9c"}, + {file = "ruff-0.8.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:85e654f0ded7befe2d61eeaf3d3b1e4ef3894469cd664ffa85006c7720f1e4a2"}, + {file = "ruff-0.8.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:83a55679c4cb449fa527b8497cadf54f076603cc36779b2170b24f704171ce70"}, + {file = "ruff-0.8.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:812e2052121634cf13cd6fddf0c1871d0ead1aad40a1a258753c04c18bb71bbd"}, + {file = "ruff-0.8.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:780d5d8523c04202184405e60c98d7595bdb498c3c6abba3b6d4cdf2ca2af426"}, + {file = "ruff-0.8.0-py3-none-win32.whl", hash = "sha256:5fdb6efecc3eb60bba5819679466471fd7d13c53487df7248d6e27146e985468"}, + {file = "ruff-0.8.0-py3-none-win_amd64.whl", hash = "sha256:582891c57b96228d146725975fbb942e1f30a0c4ba19722e692ca3eb25cc9b4f"}, + {file = "ruff-0.8.0-py3-none-win_arm64.whl", hash = "sha256:ba93e6294e9a737cd726b74b09a6972e36bb511f9a102f1d9a7e1ce94dd206a6"}, + {file = "ruff-0.8.0.tar.gz", hash = "sha256:a7ccfe6331bf8c8dad715753e157457faf7351c2b69f62f32c165c2dbcbacd44"}, ] [[package]] name = "s3transfer" -version = "0.10.3" +version = "0.10.4" description = "An Amazon S3 Transfer Manager" optional = false python-versions = ">=3.8" files = [ - {file = "s3transfer-0.10.3-py3-none-any.whl", hash = "sha256:263ed587a5803c6c708d3ce44dc4dfedaab4c1a32e8329bab818933d79ddcf5d"}, - {file = "s3transfer-0.10.3.tar.gz", hash = "sha256:4f50ed74ab84d474ce614475e0b8d5047ff080810aac5d01ea25231cfc944b0c"}, + {file = "s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e"}, + {file = "s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7"}, ] [package.dependencies] @@ -6096,13 +6110,13 @@ crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] [[package]] name = "selenium" -version = "4.26.1" +version = "4.27.1" description = "Official Python bindings for Selenium WebDriver" optional = false python-versions = ">=3.8" files = [ - {file = "selenium-4.26.1-py3-none-any.whl", hash = "sha256:1db3f3a0cd5bb07624fa8a3905a6fdde1595a42185a0617077c361dc53d104fb"}, - {file = "selenium-4.26.1.tar.gz", hash = "sha256:7640f3f08ae7f4e450f895678e8a10a55eb4e4ca18311ed675ecc4684b96b683"}, + {file = "selenium-4.27.1-py3-none-any.whl", hash = "sha256:b89b1f62b5cfe8025868556fe82360d6b649d464f75d2655cb966c8f8447ea18"}, + {file = "selenium-4.27.1.tar.gz", hash = "sha256:5296c425a75ff1b44d0d5199042b36a6d1ef76c04fb775b97b40be739a9caae2"}, ] [package.dependencies] @@ -6146,23 +6160,23 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "75.5.0" +version = "75.6.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" files = [ - {file = "setuptools-75.5.0-py3-none-any.whl", hash = "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829"}, - {file = "setuptools-75.5.0.tar.gz", hash = "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef"}, + {file = "setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d"}, + {file = "setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"] -core = ["importlib-metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.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 (>=5.5)", "packaging (>=24.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.12,<1.14)", "pytest-mypy"] +type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] [[package]] name = "sgmllib3k" @@ -6781,123 +6795,26 @@ testing = ["mypy", "pytest", "pytest-gitignore", "pytest-mock", "responses", "ru [[package]] name = "tokenizers" -version = "0.20.3" +version = "0.20.4" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "tokenizers-0.20.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:31ccab28dbb1a9fe539787210b0026e22debeab1662970f61c2d921f7557f7e4"}, - {file = "tokenizers-0.20.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6361191f762bda98c773da418cf511cbaa0cb8d0a1196f16f8c0119bde68ff8"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f128d5da1202b78fa0a10d8d938610472487da01b57098d48f7e944384362514"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79c4121a2e9433ad7ef0769b9ca1f7dd7fa4c0cd501763d0a030afcbc6384481"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7850fde24197fe5cd6556e2fdba53a6d3bae67c531ea33a3d7c420b90904141"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b357970c095dc134978a68c67d845a1e3803ab7c4fbb39195bde914e7e13cf8b"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a333d878c4970b72d6c07848b90c05f6b045cf9273fc2bc04a27211721ad6118"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd9fee817f655a8f50049f685e224828abfadd436b8ff67979fc1d054b435f1"}, - {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e7816808b402129393a435ea2a509679b41246175d6e5e9f25b8692bfaa272b"}, - {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba96367db9d8a730d3a1d5996b4b7babb846c3994b8ef14008cd8660f55db59d"}, - {file = "tokenizers-0.20.3-cp310-none-win32.whl", hash = "sha256:ee31ba9d7df6a98619426283e80c6359f167e2e9882d9ce1b0254937dbd32f3f"}, - {file = "tokenizers-0.20.3-cp310-none-win_amd64.whl", hash = "sha256:a845c08fdad554fe0871d1255df85772f91236e5fd6b9287ef8b64f5807dbd0c"}, - {file = "tokenizers-0.20.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:585b51e06ca1f4839ce7759941e66766d7b060dccfdc57c4ca1e5b9a33013a90"}, - {file = "tokenizers-0.20.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61cbf11954f3b481d08723ebd048ba4b11e582986f9be74d2c3bdd9293a4538d"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef820880d5e4e8484e2fa54ff8d297bb32519eaa7815694dc835ace9130a3eea"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:67ef4dcb8841a4988cd00dd288fb95dfc8e22ed021f01f37348fd51c2b055ba9"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff1ef8bd47a02b0dc191688ccb4da53600df5d4c9a05a4b68e1e3de4823e78eb"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:444d188186eab3148baf0615b522461b41b1f0cd58cd57b862ec94b6ac9780f1"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37c04c032c1442740b2c2d925f1857885c07619224a533123ac7ea71ca5713da"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:453c7769d22231960ee0e883d1005c93c68015025a5e4ae56275406d94a3c907"}, - {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4bb31f7b2847e439766aaa9cc7bccf7ac7088052deccdb2275c952d96f691c6a"}, - {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:843729bf0f991b29655a069a2ff58a4c24375a553c70955e15e37a90dd4e045c"}, - {file = "tokenizers-0.20.3-cp311-none-win32.whl", hash = "sha256:efcce3a927b1e20ca694ba13f7a68c59b0bd859ef71e441db68ee42cf20c2442"}, - {file = "tokenizers-0.20.3-cp311-none-win_amd64.whl", hash = "sha256:88301aa0801f225725b6df5dea3d77c80365ff2362ca7e252583f2b4809c4cc0"}, - {file = "tokenizers-0.20.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:49d12a32e190fad0e79e5bdb788d05da2f20d8e006b13a70859ac47fecf6ab2f"}, - {file = "tokenizers-0.20.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:282848cacfb9c06d5e51489f38ec5aa0b3cd1e247a023061945f71f41d949d73"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abe4e08c7d0cd6154c795deb5bf81d2122f36daf075e0c12a8b050d824ef0a64"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca94fc1b73b3883c98f0c88c77700b13d55b49f1071dfd57df2b06f3ff7afd64"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef279c7e239f95c8bdd6ff319d9870f30f0d24915b04895f55b1adcf96d6c60d"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16384073973f6ccbde9852157a4fdfe632bb65208139c9d0c0bd0176a71fd67f"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:312d522caeb8a1a42ebdec87118d99b22667782b67898a76c963c058a7e41d4f"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2b7cb962564785a83dafbba0144ecb7f579f1d57d8c406cdaa7f32fe32f18ad"}, - {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:124c5882ebb88dadae1fc788a582299fcd3a8bd84fc3e260b9918cf28b8751f5"}, - {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2b6e54e71f84c4202111a489879005cb14b92616a87417f6c102c833af961ea2"}, - {file = "tokenizers-0.20.3-cp312-none-win32.whl", hash = "sha256:83d9bfbe9af86f2d9df4833c22e94d94750f1d0cd9bfb22a7bb90a86f61cdb1c"}, - {file = "tokenizers-0.20.3-cp312-none-win_amd64.whl", hash = "sha256:44def74cee574d609a36e17c8914311d1b5dbcfe37c55fd29369d42591b91cf2"}, - {file = "tokenizers-0.20.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e0b630e0b536ef0e3c8b42c685c1bc93bd19e98c0f1543db52911f8ede42cf84"}, - {file = "tokenizers-0.20.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a02d160d2b19bcbfdf28bd9a4bf11be4cb97d0499c000d95d4c4b1a4312740b6"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e3d80d89b068bc30034034b5319218c7c0a91b00af19679833f55f3becb6945"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:174a54910bed1b089226512b4458ea60d6d6fd93060254734d3bc3540953c51c"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:098b8a632b8656aa5802c46689462c5c48f02510f24029d71c208ec2c822e771"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:78c8c143e3ae41e718588281eb3e212c2b31623c9d6d40410ec464d7d6221fb5"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b26b0aadb18cd8701077362ba359a06683662d5cafe3e8e8aba10eb05c037f1"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07d7851a72717321022f3774e84aa9d595a041d643fafa2e87fbc9b18711dac0"}, - {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:bd44e48a430ada902c6266a8245f5036c4fe744fcb51f699999fbe82aa438797"}, - {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a4c186bb006ccbe1f5cc4e0380d1ce7806f5955c244074fd96abc55e27b77f01"}, - {file = "tokenizers-0.20.3-cp313-none-win32.whl", hash = "sha256:6e19e0f1d854d6ab7ea0c743d06e764d1d9a546932be0a67f33087645f00fe13"}, - {file = "tokenizers-0.20.3-cp313-none-win_amd64.whl", hash = "sha256:d50ede425c7e60966a9680d41b58b3a0950afa1bb570488e2972fa61662c4273"}, - {file = "tokenizers-0.20.3-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:9adda1ff5fb9dcdf899ceca672a4e2ce9e797adb512a6467305ca3d8bfcfbdd0"}, - {file = "tokenizers-0.20.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:6dde2cae6004ba7a3badff4a11911cae03ebf23e97eebfc0e71fef2530e5074f"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4a7fd678b35614fca708579eb95b7587a5e8a6d328171bd2488fd9f27d82be4"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1b80e3c7283a01a356bd2210f53d1a4a5d32b269c2024389ed0173137708d50e"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8cc0e8176b762973758a77f0d9c4467d310e33165fb74173418ca3734944da4"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5634b2e2f5f3d2b4439d2d74066e22eb4b1f04f3fea05cb2a3c12d89b5a3bcd"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b4ba635165bc1ea46f2da8e5d80b5f70f6ec42161e38d96dbef33bb39df73964"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18e4c7c64172e7789bd8b07aa3087ea87c4c4de7e90937a2aa036b5d92332536"}, - {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1f74909ef7675c26d4095a817ec3393d67f3158ca4836c233212e5613ef640c4"}, - {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0e9b81321a1e05b16487d312b4264984513f8b4a7556229cafac6e88c2036b09"}, - {file = "tokenizers-0.20.3-cp37-none-win32.whl", hash = "sha256:ab48184cd58b4a03022a2ec75b54c9f600ffea9a733612c02325ed636f353729"}, - {file = "tokenizers-0.20.3-cp37-none-win_amd64.whl", hash = "sha256:60ac483cebee1c12c71878523e768df02fa17e4c54412966cb3ac862c91b36c1"}, - {file = "tokenizers-0.20.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3229ef103c89583d10b9378afa5d601b91e6337530a0988e17ca8d635329a996"}, - {file = "tokenizers-0.20.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6ac52cc24bad3de865c7e65b1c4e7b70d00938a8ae09a92a453b8f676e714ad5"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04627b7b502fa6a2a005e1bd446fa4247d89abcb1afaa1b81eb90e21aba9a60f"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c27ceb887f0e81a3c377eb4605dca7a95a81262761c0fba308d627b2abb98f2b"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65ab780194da4e1fcf5670523a2f377c4838ebf5249efe41fa1eddd2a84fb49d"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98d343134f47159e81f7f242264b0eb222e6b802f37173c8d7d7b64d5c9d1388"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2475bb004ab2009d29aff13b5047bfdb3d4b474f0aa9d4faa13a7f34dbbbb43"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b6583a65c01db1197c1eb36857ceba8ec329d53afadd268b42a6b04f4965724"}, - {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:62d00ba208358c037eeab7bfc00a905adc67b2d31b68ab40ed09d75881e114ea"}, - {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0fc7a39e5bedc817bda395a798dfe2d9c5f7c71153c90d381b5135a0328d9520"}, - {file = "tokenizers-0.20.3-cp38-none-win32.whl", hash = "sha256:84d40ee0f8550d64d3ea92dd7d24a8557a9172165bdb986c9fb2503b4fe4e3b6"}, - {file = "tokenizers-0.20.3-cp38-none-win_amd64.whl", hash = "sha256:205a45246ed7f1718cf3785cff88450ba603352412aaf220ace026384aa3f1c0"}, - {file = "tokenizers-0.20.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:93e37f0269a11dc3b1a953f1fca9707f0929ebf8b4063c591c71a0664219988e"}, - {file = "tokenizers-0.20.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f4cb0c614b0135e781de96c2af87e73da0389ac1458e2a97562ed26e29490d8d"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7eb2fb1c432f5746b22f8a7f09fc18c4156cb0031c77f53cb19379d82d43297a"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bfa8d029bb156181b006643309d6b673615a24e4ed24cf03aa191d599b996f51"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f90549622de3bf476ad9f1dd6f3f952ec3ed6ab8615ae88ef060d0c5bfad55d"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1d469c74eebf5c43fd61cd9b030e271d17198edd7bd45392e03a3c091d7d6d4"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bee8f53b2594749f4460d53253bae55d718f04e9b633efa0f5df8938bd98e4f0"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:938441babf3e5720e4459e306ef2809fb267680df9d1ff2873458b22aef60248"}, - {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7310ab23d7b0caebecc0e8be11a1146f320f5f07284000f6ea54793e83de1b75"}, - {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:16121eb030a2b13094cfec936b0c12e8b4063c5f839591ea7d0212336d8f9921"}, - {file = "tokenizers-0.20.3-cp39-none-win32.whl", hash = "sha256:401cc21ef642ee235985d747f65e18f639464d377c70836c9003df208d582064"}, - {file = "tokenizers-0.20.3-cp39-none-win_amd64.whl", hash = "sha256:7498f3ea7746133335a6adb67a77cf77227a8b82c8483f644a2e5f86fea42b8d"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e919f2e3e68bb51dc31de4fcbbeff3bdf9c1cad489044c75e2b982a91059bd3c"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b8e9608f2773996cc272156e305bd79066163a66b0390fe21750aff62df1ac07"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39270a7050deaf50f7caff4c532c01b3c48f6608d42b3eacdebdc6795478c8df"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e005466632b1c5d2d2120f6de8aa768cc9d36cd1ab7d51d0c27a114c91a1e6ee"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a07962340b36189b6c8feda552ea1bfeee6cf067ff922a1d7760662c2ee229e5"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:55046ad3dd5f2b3c67501fcc8c9cbe3e901d8355f08a3b745e9b57894855f85b"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:efcf0eb939988b627558aaf2b9dc3e56d759cad2e0cfa04fcab378e4b48fc4fd"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f3558a7ae6a6d38a77dfce12172a1e2e1bf3e8871e744a1861cd7591ea9ebe24"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d53029fe44bc70c3ff14ef512460a0cf583495a0f8e2f4b70e26eb9438e38a9"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a2a56397b2bec5a629b516b23f0f8a3e4f978c7488d4a299980f8375954b85"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e5bfaae740ef9ece000f8a07e78ac0e2b085c5ce9648f8593ddf0243c9f76d"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fbaf3ea28fedfb2283da60e710aff25492e795a7397cad8a50f1e079b65a5a70"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c47c037116310dc976eb96b008e41b9cfaba002ed8005848d4d632ee0b7ba9ae"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c31751f0721f58f5e19bb27c1acc259aeff860d8629c4e1a900b26a1979ada8e"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:c697cbd3be7a79ea250ea5f380d6f12e534c543cfb137d5c734966b3ee4f34cc"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b48971b88ef9130bf35b41b35fd857c3c4dae4a9cd7990ebc7fc03e59cc92438"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e615de179bbe060ab33773f0d98a8a8572b5883dd7dac66c1de8c056c7e748c"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da1ec842035ed9999c62e45fbe0ff14b7e8a7e02bb97688cc6313cf65e5cd755"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:6ee4954c1dd23aadc27958dad759006e71659d497dcb0ef0c7c87ea992c16ebd"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3eda46ca402751ec82553a321bf35a617b76bbed7586e768c02ccacbdda94d6d"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:de082392a85eb0055cc055c535bff2f0cc15d7a000bdc36fbf601a0f3cf8507a"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c3db46cc0647bfd88263afdb739b92017a02a87ee30945cb3e86c7e25c7c9917"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a292392f24ab9abac5cfa8197e5a6208f2e43723420217e1ceba0b4ec77816ac"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dcd91f4e60f62b20d83a87a84fe062035a1e3ff49a8c2bbdeb2d441c8e311f4"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:900991a2b8ee35961b1095db7e265342e0e42a84c1a594823d5ee9f8fb791958"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5a8d8261ca2133d4f98aa9627c748189502b3787537ba3d7e2beb4f7cfc5d627"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c4fd4d71e6deb6ddf99d8d0eab87d1d16f635898906e631914a9bae8ae9f2cfb"}, - {file = "tokenizers-0.20.3.tar.gz", hash = "sha256:2278b34c5d0dd78e087e1ca7f9b1dcbf129d80211afa645f214bd6e051037539"}, + {file = "tokenizers-0.20.4-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:25f59ebc5b79e7bbafe86bfec62696468016627157d8a9ceba5092486796a156"}, + {file = "tokenizers-0.20.4-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:f41df992797ad0ff9472e8a2c7a3ef7178667935d984639b73da7d19b33ea4e2"}, + {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7786004e180fab72e6e873e982ccd18b3cfa31521d397b6c024cc19175abf91b"}, + {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:075635cd7e6936cc4b3a13901c1a05690d5b533ce3d0f035dee21117dd4f04ae"}, + {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa392bae7f0a36e4c97ad43100390ad84f2a1bfff6742604774210f7d7a4fa13"}, + {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eee647ccba9cbd36b5ec4e8e73d25dbd586ec06de7a43ff83a3dad9fec466a29"}, + {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:735ffc9bba65d20f8ab5f82dfbab262bb066afc7dee3684c5e5435e7a5da445d"}, + {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05c2bab579c1f31292b48bb79b6334b5346c1ec87dac81089e6098b8a20b2fd4"}, + {file = "tokenizers-0.20.4-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3e960ad5c467a95e5665e518151ed9024e7aa111d2c54ff1938162cc7c2b8959"}, + {file = "tokenizers-0.20.4-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:e59a405459ed31b73426b364752c2e7c73f4a94210a63fd7acd161a774af7bd2"}, + {file = "tokenizers-0.20.4-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:84bf8b4a7bbf1c6bb78775ae309a5c69d08dadf7b88125d6d19ccb4738a87350"}, + {file = "tokenizers-0.20.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a6d392a20ca70692aaba8a636677b57f6c67655879773ba2b6be8cb4a19ce6b8"}, + {file = "tokenizers-0.20.4-cp39-abi3-win32.whl", hash = "sha256:60ea37c885a9bb8efa53b7542ea83561cd00eb3ffb47a77f5ae622d9f7f66ffe"}, + {file = "tokenizers-0.20.4-cp39-abi3-win_amd64.whl", hash = "sha256:6cba92b87969ddf5a7e2f2293577c30129d8c22c6f68e8c626d3e76b8d52412c"}, + {file = "tokenizers-0.20.4.tar.gz", hash = "sha256:db50ac15e92981227f499268541306824f49e97dbeec05d118ebdc7c2d22322c"}, ] [package.dependencies] @@ -6932,40 +6849,40 @@ files = [ [[package]] name = "tornado" -version = "6.4.1" +version = "6.4.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">=3.8" files = [ - {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"}, - {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698"}, - {file = "tornado-6.4.1-cp38-abi3-win32.whl", hash = "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d"}, - {file = "tornado-6.4.1-cp38-abi3-win_amd64.whl", hash = "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7"}, - {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, + {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"}, + {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c"}, + {file = "tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482"}, + {file = "tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38"}, + {file = "tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b"}, ] [[package]] name = "tqdm" -version = "4.67.0" +version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.67.0-py3-none-any.whl", hash = "sha256:0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be"}, - {file = "tqdm-4.67.0.tar.gz", hash = "sha256:fe5a6f95e6fe0b9755e9469b77b9c3cf850048224ecaa8293d7d2d31f97d869a"}, + {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, + {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] @@ -7222,94 +7139,82 @@ colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\" and python [[package]] name = "watchfiles" -version = "0.24.0" +version = "1.0.0" description = "Simple, modern and high performance file watching and code reload in python." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {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"}, + {file = "watchfiles-1.0.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:1d19df28f99d6a81730658fbeb3ade8565ff687f95acb59665f11502b441be5f"}, + {file = "watchfiles-1.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:28babb38cf2da8e170b706c4b84aa7e4528a6fa4f3ee55d7a0866456a1662041"}, + {file = "watchfiles-1.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12ab123135b2f42517f04e720526d41448667ae8249e651385afb5cda31fedc0"}, + {file = "watchfiles-1.0.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:13a4f9ee0cd25682679eea5c14fc629e2eaa79aab74d963bc4e21f43b8ea1877"}, + {file = "watchfiles-1.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e1d9284cc84de7855fcf83472e51d32daf6f6cecd094160192628bc3fee1b78"}, + {file = "watchfiles-1.0.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ee5edc939f53466b329bbf2e58333a5461e6c7b50c980fa6117439e2c18b42d"}, + {file = "watchfiles-1.0.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dccfc70480087567720e4e36ec381bba1ed68d7e5f368fe40c93b3b1eba0105"}, + {file = "watchfiles-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c83a6d33a9eda0af6a7470240d1af487807adc269704fe76a4972dd982d16236"}, + {file = "watchfiles-1.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:905f69aad276639eff3893759a07d44ea99560e67a1cf46ff389cd62f88872a2"}, + {file = "watchfiles-1.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:09551237645d6bff3972592f2aa5424df9290e7a2e15d63c5f47c48cde585935"}, + {file = "watchfiles-1.0.0-cp310-none-win32.whl", hash = "sha256:d2b39aa8edd9e5f56f99a2a2740a251dc58515398e9ed5a4b3e5ff2827060755"}, + {file = "watchfiles-1.0.0-cp310-none-win_amd64.whl", hash = "sha256:2de52b499e1ab037f1a87cb8ebcb04a819bf087b1015a4cf6dcf8af3c2a2613e"}, + {file = "watchfiles-1.0.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:fbd0ab7a9943bbddb87cbc2bf2f09317e74c77dc55b1f5657f81d04666c25269"}, + {file = "watchfiles-1.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:774ef36b16b7198669ce655d4f75b4c3d370e7f1cbdfb997fb10ee98717e2058"}, + {file = "watchfiles-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b4fb98100267e6a5ebaff6aaa5d20aea20240584647470be39fe4823012ac96"}, + {file = "watchfiles-1.0.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0fc3bf0effa2d8075b70badfdd7fb839d7aa9cea650d17886982840d71fdeabf"}, + {file = "watchfiles-1.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:648e2b6db53eca6ef31245805cd528a16f56fa4cc15aeec97795eaf713c11435"}, + {file = "watchfiles-1.0.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa13d604fcb9417ae5f2e3de676e66aa97427d888e83662ad205bed35a313176"}, + {file = "watchfiles-1.0.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:936f362e7ff28311b16f0b97ec51e8f2cc451763a3264640c6ed40fb252d1ee4"}, + {file = "watchfiles-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:245fab124b9faf58430da547512d91734858df13f2ddd48ecfa5e493455ffccb"}, + {file = "watchfiles-1.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4ff9c7e84e8b644a8f985c42bcc81457240316f900fc72769aaedec9d088055a"}, + {file = "watchfiles-1.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9c9a8d8fd97defe935ef8dd53d562e68942ad65067cd1c54d6ed8a088b1d931d"}, + {file = "watchfiles-1.0.0-cp311-none-win32.whl", hash = "sha256:a0abf173975eb9dd17bb14c191ee79999e650997cc644562f91df06060610e62"}, + {file = "watchfiles-1.0.0-cp311-none-win_amd64.whl", hash = "sha256:2a825ba4b32c214e3855b536eb1a1f7b006511d8e64b8215aac06eb680642d84"}, + {file = "watchfiles-1.0.0-cp311-none-win_arm64.whl", hash = "sha256:a5a7a06cfc65e34fd0a765a7623c5ba14707a0870703888e51d3d67107589817"}, + {file = "watchfiles-1.0.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:28fb64b5843d94e2c2483f7b024a1280662a44409bedee8f2f51439767e2d107"}, + {file = "watchfiles-1.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e3750434c83b61abb3163b49c64b04180b85b4dabb29a294513faec57f2ffdb7"}, + {file = "watchfiles-1.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bedf84835069f51c7b026b3ca04e2e747ea8ed0a77c72006172c72d28c9f69fc"}, + {file = "watchfiles-1.0.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:90004553be36427c3d06ec75b804233f8f816374165d5225b93abd94ba6e7234"}, + {file = "watchfiles-1.0.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b46e15c34d4e401e976d6949ad3a74d244600d5c4b88c827a3fdf18691a46359"}, + {file = "watchfiles-1.0.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:487d15927f1b0bd24e7df921913399bb1ab94424c386bea8b267754d698f8f0e"}, + {file = "watchfiles-1.0.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ff236d7a3f4b0a42f699a22fc374ba526bc55048a70cbb299661158e1bb5e1f"}, + {file = "watchfiles-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c01446626574561756067f00b37e6b09c8622b0fc1e9fdbc7cbcea328d4e514"}, + {file = "watchfiles-1.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b551c465a59596f3d08170bd7e1c532c7260dd90ed8135778038e13c5d48aa81"}, + {file = "watchfiles-1.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e1ed613ee107269f66c2df631ec0fc8efddacface85314d392a4131abe299f00"}, + {file = "watchfiles-1.0.0-cp312-none-win32.whl", hash = "sha256:5f75cd42e7e2254117cf37ff0e68c5b3f36c14543756b2da621408349bd9ca7c"}, + {file = "watchfiles-1.0.0-cp312-none-win_amd64.whl", hash = "sha256:cf517701a4a872417f4e02a136e929537743461f9ec6cdb8184d9a04f4843545"}, + {file = "watchfiles-1.0.0-cp312-none-win_arm64.whl", hash = "sha256:8a2127cd68950787ee36753e6d401c8ea368f73beaeb8e54df5516a06d1ecd82"}, + {file = "watchfiles-1.0.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:95de85c254f7fe8cbdf104731f7f87f7f73ae229493bebca3722583160e6b152"}, + {file = "watchfiles-1.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:533a7cbfe700e09780bb31c06189e39c65f06c7f447326fee707fd02f9a6e945"}, + {file = "watchfiles-1.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2218e78e2c6c07b1634a550095ac2a429026b2d5cbcd49a594f893f2bb8c936"}, + {file = "watchfiles-1.0.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9122b8fdadc5b341315d255ab51d04893f417df4e6c1743b0aac8bf34e96e025"}, + {file = "watchfiles-1.0.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9272fdbc0e9870dac3b505bce1466d386b4d8d6d2bacf405e603108d50446940"}, + {file = "watchfiles-1.0.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a3b33c3aefe9067ebd87846806cd5fc0b017ab70d628aaff077ab9abf4d06b3"}, + {file = "watchfiles-1.0.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bc338ce9f8846543d428260fa0f9a716626963148edc937d71055d01d81e1525"}, + {file = "watchfiles-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ac778a460ea22d63c7e6fb0bc0f5b16780ff0b128f7f06e57aaec63bd339285"}, + {file = "watchfiles-1.0.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:53ae447f06f8f29f5ab40140f19abdab822387a7c426a369eb42184b021e97eb"}, + {file = "watchfiles-1.0.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1f73c2147a453315d672c1ad907abe6d40324e34a185b51e15624bc793f93cc6"}, + {file = "watchfiles-1.0.0-cp313-none-win32.whl", hash = "sha256:eba98901a2eab909dbd79681190b9049acc650f6111fde1845484a4450761e98"}, + {file = "watchfiles-1.0.0-cp313-none-win_amd64.whl", hash = "sha256:d562a6114ddafb09c33246c6ace7effa71ca4b6a2324a47f4b09b6445ea78941"}, + {file = "watchfiles-1.0.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3d94fd83ed54266d789f287472269c0def9120a2022674990bd24ad989ebd7a0"}, + {file = "watchfiles-1.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48051d1c504448b2fcda71c5e6e3610ae45de6a0b8f5a43b961f250be4bdf5a8"}, + {file = "watchfiles-1.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29cf884ad4285d23453c702ed03d689f9c0e865e3c85d20846d800d4787de00f"}, + {file = "watchfiles-1.0.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d3572d4c34c4e9c33d25b3da47d9570d5122f8433b9ac6519dca49c2740d23cd"}, + {file = "watchfiles-1.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c2696611182c85eb0e755b62b456f48debff484b7306b56f05478b843ca8ece"}, + {file = "watchfiles-1.0.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:550109001920a993a4383b57229c717fa73627d2a4e8fcb7ed33c7f1cddb0c85"}, + {file = "watchfiles-1.0.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b555a93c15bd2c71081922be746291d776d47521a00703163e5fbe6d2a402399"}, + {file = "watchfiles-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:947ccba18a38b85c366dafeac8df2f6176342d5992ca240a9d62588b214d731f"}, + {file = "watchfiles-1.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ffd98a299b0a74d1b704ef0ed959efb753e656a4e0425c14e46ae4c3cbdd2919"}, + {file = "watchfiles-1.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f8c4f3a1210ed099a99e6a710df4ff2f8069411059ffe30fa5f9467ebed1256b"}, + {file = "watchfiles-1.0.0-cp39-none-win32.whl", hash = "sha256:1e176b6b4119b3f369b2b4e003d53a226295ee862c0962e3afd5a1c15680b4e3"}, + {file = "watchfiles-1.0.0-cp39-none-win_amd64.whl", hash = "sha256:2d9c0518fabf4a3f373b0a94bb9e4ea7a1df18dec45e26a4d182aa8918dee855"}, + {file = "watchfiles-1.0.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f159ac795785cde4899e0afa539f4c723fb5dd336ce5605bc909d34edd00b79b"}, + {file = "watchfiles-1.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:c3d258d78341d5d54c0c804a5b7faa66cd30ba50b2756a7161db07ce15363b8d"}, + {file = "watchfiles-1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bbd0311588c2de7f9ea5cf3922ccacfd0ec0c1922870a2be503cc7df1ca8be7"}, + {file = "watchfiles-1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a13ac46b545a7d0d50f7641eefe47d1597e7d1783a5d89e09d080e6dff44b0"}, + {file = "watchfiles-1.0.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2bca898c1dc073912d3db7fa6926cc08be9575add9e84872de2c99c688bac4e"}, + {file = "watchfiles-1.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:06d828fe2adc4ac8a64b875ca908b892a3603d596d43e18f7948f3fef5fc671c"}, + {file = "watchfiles-1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:074c7618cd6c807dc4eaa0982b4a9d3f8051cd0b72793511848fd64630174b17"}, + {file = "watchfiles-1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95dc785bc284552d044e561b8f4fe26d01ab5ca40d35852a6572d542adfeb4bc"}, + {file = "watchfiles-1.0.0.tar.gz", hash = "sha256:37566c844c9ce3b5deb964fe1a23378e575e74b114618d211fbda8f59d7b5dab"}, ] [package.dependencies] @@ -7480,81 +7385,76 @@ files = [ [[package]] name = "wrapt" -version = "1.16.0" +version = "1.17.0" description = "Module for decorators, wrappers and monkey patching." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" 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"}, + {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301"}, + {file = "wrapt-1.17.0-cp310-cp310-win32.whl", hash = "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22"}, + {file = "wrapt-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575"}, + {file = "wrapt-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b"}, + {file = "wrapt-1.17.0-cp311-cp311-win32.whl", hash = "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346"}, + {file = "wrapt-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a"}, + {file = "wrapt-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4"}, + {file = "wrapt-1.17.0-cp312-cp312-win32.whl", hash = "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635"}, + {file = "wrapt-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7"}, + {file = "wrapt-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a"}, + {file = "wrapt-1.17.0-cp313-cp313-win32.whl", hash = "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045"}, + {file = "wrapt-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838"}, + {file = "wrapt-1.17.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab"}, + {file = "wrapt-1.17.0-cp313-cp313t-win32.whl", hash = "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf"}, + {file = "wrapt-1.17.0-cp313-cp313t-win_amd64.whl", hash = "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a"}, + {file = "wrapt-1.17.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:69c40d4655e078ede067a7095544bcec5a963566e17503e75a3a3e0fe2803b13"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f495b6754358979379f84534f8dd7a43ff8cff2558dcdea4a148a6e713a758f"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baa7ef4e0886a6f482e00d1d5bcd37c201b383f1d314643dfb0367169f94f04c"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fc931382e56627ec4acb01e09ce66e5c03c384ca52606111cee50d931a342d"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8f8909cdb9f1b237786c09a810e24ee5e15ef17019f7cecb207ce205b9b5fcce"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ad47b095f0bdc5585bced35bd088cbfe4177236c7df9984b3cc46b391cc60627"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:948a9bd0fb2c5120457b07e59c8d7210cbc8703243225dbd78f4dfc13c8d2d1f"}, + {file = "wrapt-1.17.0-cp38-cp38-win32.whl", hash = "sha256:5ae271862b2142f4bc687bdbfcc942e2473a89999a54231aa1c2c676e28f29ea"}, + {file = "wrapt-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:f335579a1b485c834849e9075191c9898e0731af45705c2ebf70e0cd5d58beed"}, + {file = "wrapt-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0"}, + {file = "wrapt-1.17.0-cp39-cp39-win32.whl", hash = "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88"}, + {file = "wrapt-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977"}, + {file = "wrapt-1.17.0-py3-none-any.whl", hash = "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371"}, + {file = "wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801"}, ] [[package]] @@ -7573,93 +7473,93 @@ h11 = ">=0.9.0,<1" [[package]] name = "yarl" -version = "1.17.2" +version = "1.18.0" description = "Yet another URL library" optional = false python-versions = ">=3.9" files = [ - {file = "yarl-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:93771146ef048b34201bfa382c2bf74c524980870bb278e6df515efaf93699ff"}, - {file = "yarl-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8281db240a1616af2f9c5f71d355057e73a1409c4648c8949901396dc0a3c151"}, - {file = "yarl-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:170ed4971bf9058582b01a8338605f4d8c849bd88834061e60e83b52d0c76870"}, - {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc61b005f6521fcc00ca0d1243559a5850b9dd1e1fe07b891410ee8fe192d0c0"}, - {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:871e1b47eec7b6df76b23c642a81db5dd6536cbef26b7e80e7c56c2fd371382e"}, - {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a58a2f2ca7aaf22b265388d40232f453f67a6def7355a840b98c2d547bd037f"}, - {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:736bb076f7299c5c55dfef3eb9e96071a795cb08052822c2bb349b06f4cb2e0a"}, - {file = "yarl-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8fd51299e21da709eabcd5b2dd60e39090804431292daacbee8d3dabe39a6bc0"}, - {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:358dc7ddf25e79e1cc8ee16d970c23faee84d532b873519c5036dbb858965795"}, - {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:50d866f7b1a3f16f98603e095f24c0eeba25eb508c85a2c5939c8b3870ba2df8"}, - {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8b9c4643e7d843a0dca9cd9d610a0876e90a1b2cbc4c5ba7930a0d90baf6903f"}, - {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d63123bfd0dce5f91101e77c8a5427c3872501acece8c90df457b486bc1acd47"}, - {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:4e76381be3d8ff96a4e6c77815653063e87555981329cf8f85e5be5abf449021"}, - {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:734144cd2bd633a1516948e477ff6c835041c0536cef1d5b9a823ae29899665b"}, - {file = "yarl-1.17.2-cp310-cp310-win32.whl", hash = "sha256:26bfb6226e0c157af5da16d2d62258f1ac578d2899130a50433ffee4a5dfa673"}, - {file = "yarl-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:76499469dcc24759399accd85ec27f237d52dec300daaca46a5352fcbebb1071"}, - {file = "yarl-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:792155279dc093839e43f85ff7b9b6493a8eaa0af1f94f1f9c6e8f4de8c63500"}, - {file = "yarl-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38bc4ed5cae853409cb193c87c86cd0bc8d3a70fd2268a9807217b9176093ac6"}, - {file = "yarl-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4a8c83f6fcdc327783bdc737e8e45b2e909b7bd108c4da1892d3bc59c04a6d84"}, - {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6d5fed96f0646bfdf698b0a1cebf32b8aae6892d1bec0c5d2d6e2df44e1e2d"}, - {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:782ca9c58f5c491c7afa55518542b2b005caedaf4685ec814fadfcee51f02493"}, - {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ff6af03cac0d1a4c3c19e5dcc4c05252411bf44ccaa2485e20d0a7c77892ab6e"}, - {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a3f47930fbbed0f6377639503848134c4aa25426b08778d641491131351c2c8"}, - {file = "yarl-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1fa68a3c921365c5745b4bd3af6221ae1f0ea1bf04b69e94eda60e57958907f"}, - {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:187df91395c11e9f9dc69b38d12406df85aa5865f1766a47907b1cc9855b6303"}, - {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:93d1c8cc5bf5df401015c5e2a3ce75a5254a9839e5039c881365d2a9dcfc6dc2"}, - {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:11d86c6145ac5c706c53d484784cf504d7d10fa407cb73b9d20f09ff986059ef"}, - {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c42774d1d1508ec48c3ed29e7b110e33f5e74a20957ea16197dbcce8be6b52ba"}, - {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8e589379ef0407b10bed16cc26e7392ef8f86961a706ade0a22309a45414d7"}, - {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1056cadd5e850a1c026f28e0704ab0a94daaa8f887ece8dfed30f88befb87bb0"}, - {file = "yarl-1.17.2-cp311-cp311-win32.whl", hash = "sha256:be4c7b1c49d9917c6e95258d3d07f43cfba2c69a6929816e77daf322aaba6628"}, - {file = "yarl-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:ac8eda86cc75859093e9ce390d423aba968f50cf0e481e6c7d7d63f90bae5c9c"}, - {file = "yarl-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:dd90238d3a77a0e07d4d6ffdebc0c21a9787c5953a508a2231b5f191455f31e9"}, - {file = "yarl-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c74f0b0472ac40b04e6d28532f55cac8090e34c3e81f118d12843e6df14d0909"}, - {file = "yarl-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4d486ddcaca8c68455aa01cf53d28d413fb41a35afc9f6594a730c9779545876"}, - {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25b7e93f5414b9a983e1a6c1820142c13e1782cc9ed354c25e933aebe97fcf2"}, - {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a0baff7827a632204060f48dca9e63fbd6a5a0b8790c1a2adfb25dc2c9c0d50"}, - {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:460024cacfc3246cc4d9f47a7fc860e4fcea7d1dc651e1256510d8c3c9c7cde0"}, - {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5870d620b23b956f72bafed6a0ba9a62edb5f2ef78a8849b7615bd9433384171"}, - {file = "yarl-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2941756754a10e799e5b87e2319bbec481ed0957421fba0e7b9fb1c11e40509f"}, - {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9611b83810a74a46be88847e0ea616794c406dbcb4e25405e52bff8f4bee2d0a"}, - {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:cd7e35818d2328b679a13268d9ea505c85cd773572ebb7a0da7ccbca77b6a52e"}, - {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6b981316fcd940f085f646b822c2ff2b8b813cbd61281acad229ea3cbaabeb6b"}, - {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:688058e89f512fb7541cb85c2f149c292d3fa22f981d5a5453b40c5da49eb9e8"}, - {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:56afb44a12b0864d17b597210d63a5b88915d680f6484d8d202ed68ade38673d"}, - {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:17931dfbb84ae18b287279c1f92b76a3abcd9a49cd69b92e946035cff06bcd20"}, - {file = "yarl-1.17.2-cp312-cp312-win32.whl", hash = "sha256:ff8d95e06546c3a8c188f68040e9d0360feb67ba8498baf018918f669f7bc39b"}, - {file = "yarl-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:4c840cc11163d3c01a9d8aad227683c48cd3e5be5a785921bcc2a8b4b758c4f3"}, - {file = "yarl-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:3294f787a437cb5d81846de3a6697f0c35ecff37a932d73b1fe62490bef69211"}, - {file = "yarl-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f1e7fedb09c059efee2533119666ca7e1a2610072076926fa028c2ba5dfeb78c"}, - {file = "yarl-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:da9d3061e61e5ae3f753654813bc1cd1c70e02fb72cf871bd6daf78443e9e2b1"}, - {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91c012dceadc695ccf69301bfdccd1fc4472ad714fe2dd3c5ab4d2046afddf29"}, - {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f11fd61d72d93ac23718d393d2a64469af40be2116b24da0a4ca6922df26807e"}, - {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:46c465ad06971abcf46dd532f77560181387b4eea59084434bdff97524444032"}, - {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef6eee1a61638d29cd7c85f7fd3ac7b22b4c0fabc8fd00a712b727a3e73b0685"}, - {file = "yarl-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4434b739a8a101a837caeaa0137e0e38cb4ea561f39cb8960f3b1e7f4967a3fc"}, - {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:752485cbbb50c1e20908450ff4f94217acba9358ebdce0d8106510859d6eb19a"}, - {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:17791acaa0c0f89323c57da7b9a79f2174e26d5debbc8c02d84ebd80c2b7bff8"}, - {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5c6ea72fe619fee5e6b5d4040a451d45d8175f560b11b3d3e044cd24b2720526"}, - {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db5ac3871ed76340210fe028f535392f097fb31b875354bcb69162bba2632ef4"}, - {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7a1606ba68e311576bcb1672b2a1543417e7e0aa4c85e9e718ba6466952476c0"}, - {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9bc27dd5cfdbe3dc7f381b05e6260ca6da41931a6e582267d5ca540270afeeb2"}, - {file = "yarl-1.17.2-cp313-cp313-win32.whl", hash = "sha256:52492b87d5877ec405542f43cd3da80bdcb2d0c2fbc73236526e5f2c28e6db28"}, - {file = "yarl-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:8e1bf59e035534ba4077f5361d8d5d9194149f9ed4f823d1ee29ef3e8964ace3"}, - {file = "yarl-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c556fbc6820b6e2cda1ca675c5fa5589cf188f8da6b33e9fc05b002e603e44fa"}, - {file = "yarl-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f2f44a4247461965fed18b2573f3a9eb5e2c3cad225201ee858726cde610daca"}, - {file = "yarl-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3a3ede8c248f36b60227eb777eac1dbc2f1022dc4d741b177c4379ca8e75571a"}, - {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2654caaf5584449d49c94a6b382b3cb4a246c090e72453493ea168b931206a4d"}, - {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d41c684f286ce41fa05ab6af70f32d6da1b6f0457459a56cf9e393c1c0b2217"}, - {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2270d590997445a0dc29afa92e5534bfea76ba3aea026289e811bf9ed4b65a7f"}, - {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18662443c6c3707e2fc7fad184b4dc32dd428710bbe72e1bce7fe1988d4aa654"}, - {file = "yarl-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:75ac158560dec3ed72f6d604c81090ec44529cfb8169b05ae6fcb3e986b325d9"}, - {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1fee66b32e79264f428dc8da18396ad59cc48eef3c9c13844adec890cd339db5"}, - {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:585ce7cd97be8f538345de47b279b879e091c8b86d9dbc6d98a96a7ad78876a3"}, - {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c019abc2eca67dfa4d8fb72ba924871d764ec3c92b86d5b53b405ad3d6aa56b0"}, - {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c6e659b9a24d145e271c2faf3fa6dd1fcb3e5d3f4e17273d9e0350b6ab0fe6e2"}, - {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:d17832ba39374134c10e82d137e372b5f7478c4cceeb19d02ae3e3d1daed8721"}, - {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bc3003710e335e3f842ae3fd78efa55f11a863a89a72e9a07da214db3bf7e1f8"}, - {file = "yarl-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f5ffc6b7ace5b22d9e73b2a4c7305740a339fbd55301d52735f73e21d9eb3130"}, - {file = "yarl-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:48e424347a45568413deec6f6ee2d720de2cc0385019bedf44cd93e8638aa0ed"}, - {file = "yarl-1.17.2-py3-none-any.whl", hash = "sha256:dd7abf4f717e33b7487121faf23560b3a50924f80e4bef62b22dab441ded8f3b"}, - {file = "yarl-1.17.2.tar.gz", hash = "sha256:753eaaa0c7195244c84b5cc159dc8204b7fd99f716f11198f999f2332a86b178"}, + {file = "yarl-1.18.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:074fee89caab89a97e18ef5f29060ef61ba3cae6cd77673acc54bfdd3214b7b7"}, + {file = "yarl-1.18.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b026cf2c32daf48d90c0c4e406815c3f8f4cfe0c6dfccb094a9add1ff6a0e41a"}, + {file = "yarl-1.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ae38bd86eae3ba3d2ce5636cc9e23c80c9db2e9cb557e40b98153ed102b5a736"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:685cc37f3f307c6a8e879986c6d85328f4c637f002e219f50e2ef66f7e062c1d"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8254dbfce84ee5d1e81051ee7a0f1536c108ba294c0fdb5933476398df0654f3"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:20de4a8b04de70c49698dc2390b7fd2d18d424d3b876371f9b775e2b462d4b41"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0a2074a37285570d54b55820687de3d2f2b9ecf1b714e482e48c9e7c0402038"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f576ed278860df2721a5d57da3381040176ef1d07def9688a385c8330db61a1"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3a3709450a574d61be6ac53d582496014342ea34876af8dc17cc16da32826c9a"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bd80ed29761490c622edde5dd70537ca8c992c2952eb62ed46984f8eff66d6e8"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:32141e13a1d5a48525e519c9197d3f4d9744d818d5c7d6547524cc9eccc8971e"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8b8d3e4e014fb4274f1c5bf61511d2199e263909fb0b8bda2a7428b0894e8dc6"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:701bb4a8f4de191c8c0cc9a1e6d5142f4df880e9d1210e333b829ca9425570ed"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a45d94075ac0647621eaaf693c8751813a3eccac455d423f473ffed38c8ac5c9"}, + {file = "yarl-1.18.0-cp310-cp310-win32.whl", hash = "sha256:34176bfb082add67cb2a20abd85854165540891147f88b687a5ed0dc225750a0"}, + {file = "yarl-1.18.0-cp310-cp310-win_amd64.whl", hash = "sha256:73553bbeea7d6ec88c08ad8027f4e992798f0abc459361bf06641c71972794dc"}, + {file = "yarl-1.18.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b8e8c516dc4e1a51d86ac975b0350735007e554c962281c432eaa5822aa9765c"}, + {file = "yarl-1.18.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2e6b4466714a73f5251d84b471475850954f1fa6acce4d3f404da1d55d644c34"}, + {file = "yarl-1.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c893f8c1a6d48b25961e00922724732d00b39de8bb0b451307482dc87bddcd74"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13aaf2bdbc8c86ddce48626b15f4987f22e80d898818d735b20bd58f17292ee8"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd21c0128e301851de51bc607b0a6da50e82dc34e9601f4b508d08cc89ee7929"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:205de377bd23365cd85562c9c6c33844050a93661640fda38e0567d2826b50df"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed69af4fe2a0949b1ea1d012bf065c77b4c7822bad4737f17807af2adb15a73c"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e1c18890091aa3cc8a77967943476b729dc2016f4cfe11e45d89b12519d4a93"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:91b8fb9427e33f83ca2ba9501221ffaac1ecf0407f758c4d2f283c523da185ee"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:536a7a8a53b75b2e98ff96edb2dfb91a26b81c4fed82782035767db5a465be46"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a64619a9c47c25582190af38e9eb382279ad42e1f06034f14d794670796016c0"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c73a6bbc97ba1b5a0c3c992ae93d721c395bdbb120492759b94cc1ac71bc6350"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a173401d7821a2a81c7b47d4e7d5c4021375a1441af0c58611c1957445055056"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7520e799b1f84e095cce919bd6c23c9d49472deeef25fe1ef960b04cca51c3fc"}, + {file = "yarl-1.18.0-cp311-cp311-win32.whl", hash = "sha256:c4cb992d8090d5ae5f7afa6754d7211c578be0c45f54d3d94f7781c495d56716"}, + {file = "yarl-1.18.0-cp311-cp311-win_amd64.whl", hash = "sha256:52c136f348605974c9b1c878addd6b7a60e3bf2245833e370862009b86fa4689"}, + {file = "yarl-1.18.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1ece25e2251c28bab737bdf0519c88189b3dd9492dc086a1d77336d940c28ced"}, + {file = "yarl-1.18.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:454902dc1830d935c90b5b53c863ba2a98dcde0fbaa31ca2ed1ad33b2a7171c6"}, + {file = "yarl-1.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:01be8688fc211dc237e628fcc209dda412d35de7642453059a0553747018d075"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d26f1fa9fa2167bb238f6f4b20218eb4e88dd3ef21bb8f97439fa6b5313e30d"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b234a4a9248a9f000b7a5dfe84b8cb6210ee5120ae70eb72a4dcbdb4c528f72f"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe94d1de77c4cd8caff1bd5480e22342dbd54c93929f5943495d9c1e8abe9f42"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b4c90c5363c6b0a54188122b61edb919c2cd1119684999d08cd5e538813a28e"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a98ecadc5a241c9ba06de08127ee4796e1009555efd791bac514207862b43d"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9106025c7f261f9f5144f9aa7681d43867eed06349a7cfb297a1bc804de2f0d1"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:f275ede6199d0f1ed4ea5d55a7b7573ccd40d97aee7808559e1298fe6efc8dbd"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f7edeb1dcc7f50a2c8e08b9dc13a413903b7817e72273f00878cb70e766bdb3b"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c083f6dd6951b86e484ebfc9c3524b49bcaa9c420cb4b2a78ef9f7a512bfcc85"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:80741ec5b471fbdfb997821b2842c59660a1c930ceb42f8a84ba8ca0f25a66aa"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b1a3297b9cad594e1ff0c040d2881d7d3a74124a3c73e00c3c71526a1234a9f7"}, + {file = "yarl-1.18.0-cp312-cp312-win32.whl", hash = "sha256:cd6ab7d6776c186f544f893b45ee0c883542b35e8a493db74665d2e594d3ca75"}, + {file = "yarl-1.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:039c299a0864d1f43c3e31570045635034ea7021db41bf4842693a72aca8df3a"}, + {file = "yarl-1.18.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6fb64dd45453225f57d82c4764818d7a205ee31ce193e9f0086e493916bd4f72"}, + {file = "yarl-1.18.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3adaaf9c6b1b4fc258584f4443f24d775a2086aee82d1387e48a8b4f3d6aecf6"}, + {file = "yarl-1.18.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:da206d1ec78438a563c5429ab808a2b23ad7bc025c8adbf08540dde202be37d5"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:576d258b21c1db4c6449b1c572c75d03f16a482eb380be8003682bdbe7db2f28"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c60e547c0a375c4bfcdd60eef82e7e0e8698bf84c239d715f5c1278a73050393"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3818eabaefb90adeb5e0f62f047310079d426387991106d4fbf3519eec7d90a"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5f72421246c21af6a92fbc8c13b6d4c5427dfd949049b937c3b731f2f9076bd"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7fa7d37f2ada0f42e0723632993ed422f2a679af0e200874d9d861720a54f53e"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:42ba84e2ac26a3f252715f8ec17e6fdc0cbf95b9617c5367579fafcd7fba50eb"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:6a49ad0102c0f0ba839628d0bf45973c86ce7b590cdedf7540d5b1833ddc6f00"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:96404e8d5e1bbe36bdaa84ef89dc36f0e75939e060ca5cd45451aba01db02902"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a0509475d714df8f6d498935b3f307cd122c4ca76f7d426c7e1bb791bcd87eda"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:1ff116f0285b5c8b3b9a2680aeca29a858b3b9e0402fc79fd850b32c2bcb9f8b"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2580c1d7e66e6d29d6e11855e3b1c6381971e0edd9a5066e6c14d79bc8967af"}, + {file = "yarl-1.18.0-cp313-cp313-win32.whl", hash = "sha256:14408cc4d34e202caba7b5ac9cc84700e3421a9e2d1b157d744d101b061a4a88"}, + {file = "yarl-1.18.0-cp313-cp313-win_amd64.whl", hash = "sha256:1db1537e9cb846eb0ff206eac667f627794be8b71368c1ab3207ec7b6f8c5afc"}, + {file = "yarl-1.18.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fa2c9cb607e0f660d48c54a63de7a9b36fef62f6b8bd50ff592ce1137e73ac7d"}, + {file = "yarl-1.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c0f4808644baf0a434a3442df5e0bedf8d05208f0719cedcd499e168b23bfdc4"}, + {file = "yarl-1.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7db9584235895a1dffca17e1c634b13870852094f6389b68dcc6338086aa7b08"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:309f8d27d6f93ceeeb80aa6980e883aa57895270f7f41842b92247e65d7aeddf"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:609ffd44fed2ed88d9b4ef62ee860cf86446cf066333ad4ce4123505b819e581"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f172b8b2c72a13a06ea49225a9c47079549036ad1b34afa12d5491b881f5b993"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d89ae7de94631b60d468412c18290d358a9d805182373d804ec839978b120422"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:466d31fd043ef9af822ee3f1df8fdff4e8c199a7f4012c2642006af240eade17"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7609b8462351c4836b3edce4201acb6dd46187b207c589b30a87ffd1813b48dc"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:d9d4f5e471e8dc49b593a80766c2328257e405f943c56a3dc985c125732bc4cf"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:67b336c15e564d76869c9a21316f90edf546809a5796a083b8f57c845056bc01"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b212452b80cae26cb767aa045b051740e464c5129b7bd739c58fbb7deb339e7b"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:38b39b7b3e692b6c92b986b00137a3891eddb66311b229d1940dcbd4f025083c"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a7ee6884a8848792d58b854946b685521f41d8871afa65e0d4a774954e9c9e89"}, + {file = "yarl-1.18.0-cp39-cp39-win32.whl", hash = "sha256:b4095c5019bb889aa866bf12ed4c85c0daea5aafcb7c20d1519f02a1e738f07f"}, + {file = "yarl-1.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:2d90f2e4d16a5b0915ee065218b435d2ef619dd228973b1b47d262a6f7cd8fa5"}, + {file = "yarl-1.18.0-py3-none-any.whl", hash = "sha256:dbf53db46f7cf176ee01d8d98c39381440776fcda13779d269a8ba664f69bec0"}, + {file = "yarl-1.18.0.tar.gz", hash = "sha256:20d95535e7d833889982bfe7cc321b7f63bf8879788fee982c76ae2b24cfb715"}, ] [package.dependencies] @@ -7670,4 +7570,4 @@ propcache = ">=0.2.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "2167e611e3b38ce2712e7cae4a51da903fef36c11058029d750e045ca0da77b4" +content-hash = "229b25085b86f58651a7823725460c3fe9ee7ecfe44f5bd6a7dfbc10c3c6fdfd" diff --git a/apps/chatbot/pyproject.toml b/apps/chatbot/pyproject.toml index ff92d09df9..8830f99501 100644 --- a/apps/chatbot/pyproject.toml +++ b/apps/chatbot/pyproject.toml @@ -2,7 +2,7 @@ name = "chatbot" version = "0.1.0" description = "Chatbot repository for PagoPA" -authors = ["Marco Domenico Cirillo ", Devis Battisti "] +authors = ["Marco Domenico Cirillo ", "Devis Battisti "] readme = "README.md" package-mode = false @@ -37,11 +37,13 @@ llama-index-llms-bedrock-converse = "^0.3.0" llama-index-postprocessor-presidio = "^0.2.0" langfuse = "^2.53.9" -[tool.poetry.group.dev.dependencies] +[tool.poetry.group.test.dependencies] httpx = "^0.27.2" +pytest = "^8.3.3" + +[tool.poetry.group.dev.dependencies] gradio = "^4.36.1" jupyter = "^1.0.0" -pytest = "^8.3.3" [build-system] requires = ["poetry-core"] From 53ca1bab9e8d5616a303158a4037ab8e0a6fdfde Mon Sep 17 00:00:00 2001 From: mdciri Date: Wed, 27 Nov 2024 18:09:35 +0100 Subject: [PATCH 30/66] Update src.app.main --- apps/chatbot/src/app/main.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/apps/chatbot/src/app/main.py b/apps/chatbot/src/app/main.py index dd0f509c63..c9026c8100 100644 --- a/apps/chatbot/src/app/main.py +++ b/apps/chatbot/src/app/main.py @@ -1,9 +1,10 @@ +import os import yaml import mangum import uvicorn import logging import json -import os +import hashlib import uuid import boto3 import datetime @@ -70,6 +71,9 @@ class QueryFeedback(BaseModel): allow_headers=["*"], ) +def hash_func(user_id: str) -> str: + return hashlib.sha256(user_id.encode()).hexdigest() + @app.get("/healthz") async def healthz (): return {"message": "OK"} @@ -80,11 +84,16 @@ async def query_creation ( authorization: Annotated[str | None, Header()] = None ): now = datetime.datetime.now(datetime.UTC) + trace_id = str(uuid.uuid4()) userId = current_user_id(authorization) session = find_or_create_session(userId, now=now) + answer = chatbot.chat_generate( query_str = query.question, - messages = [item.dict() for item in query.history] if query.history else None + messages = [item.dict() for item in query.history] if query.history else None, + trace_id = trace_id, + user_id = hash_func(userId), + session_id = session["id"] ) @@ -94,7 +103,7 @@ async def query_creation ( queriedAt = query.queriedAt bodyToReturn = { - "id": f'{uuid.uuid4()}', + "id": trace_id, "sessionId": session['id'], "question": query.question, "answer": answer, @@ -113,7 +122,7 @@ async def query_creation ( return bodyToReturn -def current_user_id(authorization: str): +def current_user_id(authorization: str) -> str: if authorization is None: # TODO remove fake user and return None # return None From 345d6305d8f7e3dfd10a262c6751534ec4db15f0 Mon Sep 17 00:00:00 2001 From: mdciri Date: Wed, 27 Nov 2024 18:09:53 +0100 Subject: [PATCH 31/66] Update docker --- apps/chatbot/.dockerignore | 1 + apps/chatbot/docker/compose.yaml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/chatbot/.dockerignore b/apps/chatbot/.dockerignore index c694205073..efb4c09adc 100644 --- a/apps/chatbot/.dockerignore +++ b/apps/chatbot/.dockerignore @@ -2,3 +2,4 @@ build-devp .pytest_cache load-test +*.ipynb \ No newline at end of file diff --git a/apps/chatbot/docker/compose.yaml b/apps/chatbot/docker/compose.yaml index 7837dcdd89..0a9c6ed629 100644 --- a/apps/chatbot/docker/compose.yaml +++ b/apps/chatbot/docker/compose.yaml @@ -23,7 +23,7 @@ services: - ntw postgres: - image: postgres:17.2-alpine3.20 + image: postgres restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] From 9a48b18cad7935a0aaa6ab8fba5020600b3f1770 Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Wed, 27 Nov 2024 23:34:18 +0100 Subject: [PATCH 32/66] chore: use port 3001 for Langfuse because 3000 is used by frontend --- apps/chatbot/docker/compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/chatbot/docker/compose.yaml b/apps/chatbot/docker/compose.yaml index 0a9c6ed629..9f08d83bdf 100644 --- a/apps/chatbot/docker/compose.yaml +++ b/apps/chatbot/docker/compose.yaml @@ -81,7 +81,7 @@ services: postgres: condition: service_healthy ports: - - "3000:3000" + - "3001:3000" env_file: ../.env.local networks: - ntw From 0872a0f0d0cc2267f21b8bada6f85b85f6588c70 Mon Sep 17 00:00:00 2001 From: mdciri Date: Thu, 28 Nov 2024 12:41:41 +0100 Subject: [PATCH 33/66] Remove gradio and webapp --- apps/chatbot/README.md | 11 +- apps/chatbot/poetry.lock | 242 +--------------------------- apps/chatbot/pyproject.toml | 1 - apps/chatbot/src/webapp/app.py | 82 ---------- apps/chatbot/src/webapp/chatbot.png | Bin 22002 -> 0 bytes apps/chatbot/src/webapp/user.png | Bin 13491 -> 0 bytes 6 files changed, 8 insertions(+), 328 deletions(-) delete mode 100644 apps/chatbot/src/webapp/app.py delete mode 100644 apps/chatbot/src/webapp/chatbot.png delete mode 100644 apps/chatbot/src/webapp/user.png diff --git a/apps/chatbot/README.md b/apps/chatbot/README.md index 27e5b40194..24c10f63cf 100644 --- a/apps/chatbot/README.md +++ b/apps/chatbot/README.md @@ -7,6 +7,8 @@ Even though the provider is the Google one, we stored its API key in AWS. So, be The Retrieval-Augmented Generation (RAG) was implemented using [llama-index](https://docs.llamaindex.ai/en/stable/). All the parameters and prompts used are stored in `config`. +The monitoring is done using [Langfuse](https://langfuse.com/) deployed on AWS. + ## Environment Variables Create a `.env` file inside this folder and store the environment variables listed in `.env.example`. @@ -56,10 +58,11 @@ Check out the params in order to store your vector index accordingly. pytest ``` -## Web App +## Docker - python src/webapp/app.py +In order to run the chatbot locally, you need first to install [Docker Compose](https://docs.docker.com/compose/install/), and then run the two following bash scripts: -This scripts uses [Gradio](https://www.gradio.app/) framework to lunch a web application at the [default link](http://127.0.0.1:7860) where the user can interact with the chatbot. + ./docker/docker-compose-build-local.sh + ./docker/docker-compose-up-api.sh -Both [`user icon`](https://www.flaticon.com/free-icon/user_1077012) and [`chatbot icon`](https://www.flaticon.com/free-icon/chatbot_8943377) are made by [Freepick](https://www.freepik.com/) and they were downloaded from [Flaticon](https://www.flaticon.com/). +Notice that the `docker/compose.yaml` needs `.env.local` file with the environment variables. diff --git a/apps/chatbot/poetry.lock b/apps/chatbot/poetry.lock index d1a083813b..7666daa55d 100644 --- a/apps/chatbot/poetry.lock +++ b/apps/chatbot/poetry.lock @@ -1319,17 +1319,6 @@ files = [ [package.dependencies] sgmllib3k = "*" -[[package]] -name = "ffmpy" -version = "0.4.0" -description = "A simple Python wrapper for FFmpeg" -optional = false -python-versions = "<4.0.0,>=3.8.1" -files = [ - {file = "ffmpy-0.4.0-py3-none-any.whl", hash = "sha256:39c0f20c5b465e7f8d29a5191f3a7d7675a8c546d9d985de8921151cd9b59e14"}, - {file = "ffmpy-0.4.0.tar.gz", hash = "sha256:131b57794e802ad555f579007497f7a3d0cab0583d37496c685b8acae4837b1d"}, -] - [[package]] name = "filelock" version = "3.16.1" @@ -1723,68 +1712,6 @@ protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4 [package.extras] grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] -[[package]] -name = "gradio" -version = "4.44.1" -description = "Python library for easily interacting with trained machine learning models" -optional = false -python-versions = ">=3.8" -files = [ - {file = "gradio-4.44.1-py3-none-any.whl", hash = "sha256:c908850c638e4a176b22f95a758ce6a63ffbc2a7a5a74b23186ceeeedc23f4d9"}, - {file = "gradio-4.44.1.tar.gz", hash = "sha256:a68a52498ac6b63f8864ef84bf7866a70e7d07ebe913edf921e1d2a3708ad5ae"}, -] - -[package.dependencies] -aiofiles = ">=22.0,<24.0" -anyio = ">=3.0,<5.0" -fastapi = "<1.0" -ffmpy = "*" -gradio-client = "1.3.0" -httpx = ">=0.24.1" -huggingface-hub = ">=0.19.3" -importlib-resources = ">=1.3,<7.0" -jinja2 = "<4.0" -markupsafe = ">=2.0,<3.0" -matplotlib = ">=3.0,<4.0" -numpy = ">=1.0,<3.0" -orjson = ">=3.0,<4.0" -packaging = "*" -pandas = ">=1.0,<3.0" -pillow = ">=8.0,<11.0" -pydantic = ">=2.0" -pydub = "*" -python-multipart = ">=0.0.9" -pyyaml = ">=5.0,<7.0" -ruff = {version = ">=0.2.2", markers = "sys_platform != \"emscripten\""} -semantic-version = ">=2.0,<3.0" -tomlkit = "0.12.0" -typer = {version = ">=0.12,<1.0", markers = "sys_platform != \"emscripten\""} -typing-extensions = ">=4.0,<5.0" -urllib3 = ">=2.0,<3.0" -uvicorn = {version = ">=0.14.0", markers = "sys_platform != \"emscripten\""} - -[package.extras] -oauth = ["authlib", "itsdangerous"] - -[[package]] -name = "gradio-client" -version = "1.3.0" -description = "Python library for easily interacting with trained machine learning models" -optional = false -python-versions = ">=3.8" -files = [ - {file = "gradio_client-1.3.0-py3-none-any.whl", hash = "sha256:20c40cb4d56e18de1a025ccf58079f08a304e4fb2dfbcf7c2352815b2cb31091"}, - {file = "gradio_client-1.3.0.tar.gz", hash = "sha256:d904afeae4f5682add0a6a263542c10e7669ff6c9de0a53a5c2fc9b719a24bb8"}, -] - -[package.dependencies] -fsspec = "*" -httpx = ">=0.24.1" -huggingface-hub = ">=0.19.3" -packaging = "*" -typing-extensions = ">=4.0,<5.0" -websockets = ">=10.0,<13.0" - [[package]] name = "greenlet" version = "3.1.1" @@ -2152,25 +2079,6 @@ files = [ [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] -[[package]] -name = "importlib-resources" -version = "6.4.5" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717"}, - {file = "importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"}, -] - -[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 = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] -type = ["pytest-mypy"] - [[package]] name = "iniconfig" version = "2.0.0" @@ -4366,90 +4274,6 @@ typing-extensions = ">=4.11,<5" [package.extras] datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] -[[package]] -name = "orjson" -version = "3.10.12" -description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" -optional = false -python-versions = ">=3.8" -files = [ - {file = "orjson-3.10.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ece01a7ec71d9940cc654c482907a6b65df27251255097629d0dea781f255c6d"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c34ec9aebc04f11f4b978dd6caf697a2df2dd9b47d35aa4cc606cabcb9df69d7"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd6ec8658da3480939c79b9e9e27e0db31dffcd4ba69c334e98c9976ac29140e"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f17e6baf4cf01534c9de8a16c0c611f3d94925d1701bf5f4aff17003677d8ced"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6402ebb74a14ef96f94a868569f5dccf70d791de49feb73180eb3c6fda2ade56"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0000758ae7c7853e0a4a6063f534c61656ebff644391e1f81698c1b2d2fc8cd2"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:888442dcee99fd1e5bd37a4abb94930915ca6af4db50e23e746cdf4d1e63db13"}, - {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c1f7a3ce79246aa0e92f5458d86c54f257fb5dfdc14a192651ba7ec2c00f8a05"}, - {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:802a3935f45605c66fb4a586488a38af63cb37aaad1c1d94c982c40dcc452e85"}, - {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1da1ef0113a2be19bb6c557fb0ec2d79c92ebd2fed4cfb1b26bab93f021fb885"}, - {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a3273e99f367f137d5b3fecb5e9f45bcdbfac2a8b2f32fbc72129bbd48789c2"}, - {file = "orjson-3.10.12-cp310-none-win32.whl", hash = "sha256:475661bf249fd7907d9b0a2a2421b4e684355a77ceef85b8352439a9163418c3"}, - {file = "orjson-3.10.12-cp310-none-win_amd64.whl", hash = "sha256:87251dc1fb2b9e5ab91ce65d8f4caf21910d99ba8fb24b49fd0c118b2362d509"}, - {file = "orjson-3.10.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a734c62efa42e7df94926d70fe7d37621c783dea9f707a98cdea796964d4cf74"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:750f8b27259d3409eda8350c2919a58b0cfcd2054ddc1bd317a643afc646ef23"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb52c22bfffe2857e7aa13b4622afd0dd9d16ea7cc65fd2bf318d3223b1b6252"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:440d9a337ac8c199ff8251e100c62e9488924c92852362cd27af0e67308c16ef"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9e15c06491c69997dfa067369baab3bf094ecb74be9912bdc4339972323f252"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:362d204ad4b0b8724cf370d0cd917bb2dc913c394030da748a3bb632445ce7c4"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b57cbb4031153db37b41622eac67329c7810e5f480fda4cfd30542186f006ae"}, - {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:165c89b53ef03ce0d7c59ca5c82fa65fe13ddf52eeb22e859e58c237d4e33b9b"}, - {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5dee91b8dfd54557c1a1596eb90bcd47dbcd26b0baaed919e6861f076583e9da"}, - {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a4e1cfb72de6f905bdff061172adfb3caf7a4578ebf481d8f0530879476c07"}, - {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:038d42c7bc0606443459b8fe2d1f121db474c49067d8d14c6a075bbea8bf14dd"}, - {file = "orjson-3.10.12-cp311-none-win32.whl", hash = "sha256:03b553c02ab39bed249bedd4abe37b2118324d1674e639b33fab3d1dafdf4d79"}, - {file = "orjson-3.10.12-cp311-none-win_amd64.whl", hash = "sha256:8b8713b9e46a45b2af6b96f559bfb13b1e02006f4242c156cbadef27800a55a8"}, - {file = "orjson-3.10.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:53206d72eb656ca5ac7d3a7141e83c5bbd3ac30d5eccfe019409177a57634b0d"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8010afc2150d417ebda810e8df08dd3f544e0dd2acab5370cfa6bcc0662f8f"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed459b46012ae950dd2e17150e838ab08215421487371fa79d0eced8d1461d70"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dcb9673f108a93c1b52bfc51b0af422c2d08d4fc710ce9c839faad25020bb69"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22a51ae77680c5c4652ebc63a83d5255ac7d65582891d9424b566fb3b5375ee9"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910fdf2ac0637b9a77d1aad65f803bac414f0b06f720073438a7bd8906298192"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:24ce85f7100160936bc2116c09d1a8492639418633119a2224114f67f63a4559"}, - {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a76ba5fc8dd9c913640292df27bff80a685bed3a3c990d59aa6ce24c352f8fc"}, - {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ff70ef093895fd53f4055ca75f93f047e088d1430888ca1229393a7c0521100f"}, - {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4244b7018b5753ecd10a6d324ec1f347da130c953a9c88432c7fbc8875d13be"}, - {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:16135ccca03445f37921fa4b585cff9a58aa8d81ebcb27622e69bfadd220b32c"}, - {file = "orjson-3.10.12-cp312-none-win32.whl", hash = "sha256:2d879c81172d583e34153d524fcba5d4adafbab8349a7b9f16ae511c2cee8708"}, - {file = "orjson-3.10.12-cp312-none-win_amd64.whl", hash = "sha256:fc23f691fa0f5c140576b8c365bc942d577d861a9ee1142e4db468e4e17094fb"}, - {file = "orjson-3.10.12-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47962841b2a8aa9a258b377f5188db31ba49af47d4003a32f55d6f8b19006543"}, - {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6334730e2532e77b6054e87ca84f3072bee308a45a452ea0bffbbbc40a67e296"}, - {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:accfe93f42713c899fdac2747e8d0d5c659592df2792888c6c5f829472e4f85e"}, - {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7974c490c014c48810d1dede6c754c3cc46598da758c25ca3b4001ac45b703f"}, - {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3f250ce7727b0b2682f834a3facff88e310f52f07a5dcfd852d99637d386e79e"}, - {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f31422ff9486ae484f10ffc51b5ab2a60359e92d0716fcce1b3593d7bb8a9af6"}, - {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5f29c5d282bb2d577c2a6bbde88d8fdcc4919c593f806aac50133f01b733846e"}, - {file = "orjson-3.10.12-cp313-none-win32.whl", hash = "sha256:f45653775f38f63dc0e6cd4f14323984c3149c05d6007b58cb154dd080ddc0dc"}, - {file = "orjson-3.10.12-cp313-none-win_amd64.whl", hash = "sha256:229994d0c376d5bdc91d92b3c9e6be2f1fbabd4cc1b59daae1443a46ee5e9825"}, - {file = "orjson-3.10.12-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7d69af5b54617a5fac5c8e5ed0859eb798e2ce8913262eb522590239db6c6763"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ed119ea7d2953365724a7059231a44830eb6bbb0cfead33fcbc562f5fd8f935"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c5fc1238ef197e7cad5c91415f524aaa51e004be5a9b35a1b8a84ade196f73f"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43509843990439b05f848539d6f6198d4ac86ff01dd024b2f9a795c0daeeab60"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f72e27a62041cfb37a3de512247ece9f240a561e6c8662276beaf4d53d406db4"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a904f9572092bb6742ab7c16c623f0cdccbad9eeb2d14d4aa06284867bddd31"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:855c0833999ed5dc62f64552db26f9be767434917d8348d77bacaab84f787d7b"}, - {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:897830244e2320f6184699f598df7fb9db9f5087d6f3f03666ae89d607e4f8ed"}, - {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:0b32652eaa4a7539f6f04abc6243619c56f8530c53bf9b023e1269df5f7816dd"}, - {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:36b4aa31e0f6a1aeeb6f8377769ca5d125db000f05c20e54163aef1d3fe8e833"}, - {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5535163054d6cbf2796f93e4f0dbc800f61914c0e3c4ed8499cf6ece22b4a3da"}, - {file = "orjson-3.10.12-cp38-none-win32.whl", hash = "sha256:90a5551f6f5a5fa07010bf3d0b4ca2de21adafbbc0af6cb700b63cd767266cb9"}, - {file = "orjson-3.10.12-cp38-none-win_amd64.whl", hash = "sha256:703a2fb35a06cdd45adf5d733cf613cbc0cb3ae57643472b16bc22d325b5fb6c"}, - {file = "orjson-3.10.12-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f29de3ef71a42a5822765def1febfb36e0859d33abf5c2ad240acad5c6a1b78d"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de365a42acc65d74953f05e4772c974dad6c51cfc13c3240899f534d611be967"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91a5a0158648a67ff0004cb0df5df7dcc55bfc9ca154d9c01597a23ad54c8d0c"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c47ce6b8d90fe9646a25b6fb52284a14ff215c9595914af63a5933a49972ce36"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0eee4c2c5bfb5c1b47a5db80d2ac7aaa7e938956ae88089f098aff2c0f35d5d8"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35d3081bbe8b86587eb5c98a73b97f13d8f9fea685cf91a579beddacc0d10566"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c23a6e90383884068bc2dba83d5222c9fcc3b99a0ed2411d38150734236755"}, - {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5472be7dc3269b4b52acba1433dac239215366f89dc1d8d0e64029abac4e714e"}, - {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7319cda750fca96ae5973efb31b17d97a5c5225ae0bc79bf5bf84df9e1ec2ab6"}, - {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:74d5ca5a255bf20b8def6a2b96b1e18ad37b4a122d59b154c458ee9494377f80"}, - {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ff31d22ecc5fb85ef62c7d4afe8301d10c558d00dd24274d4bbe464380d3cd69"}, - {file = "orjson-3.10.12-cp39-none-win32.whl", hash = "sha256:c22c3ea6fba91d84fcb4cda30e64aff548fcf0c44c876e681f47d61d24b12e6b"}, - {file = "orjson-3.10.12-cp39-none-win_amd64.whl", hash = "sha256:be604f60d45ace6b0b33dd990a66b4526f1a7a186ac411c942674625456ca548"}, - {file = "orjson-3.10.12.tar.gz", hash = "sha256:0a78bbda3aea0f9f079057ee1ee8a1ecf790d4f1af88dd67493c6b8ee52506ff"}, -] - [[package]] name = "outcome" version = "1.3.0.post0" @@ -5289,17 +5113,6 @@ files = [ [package.dependencies] typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" -[[package]] -name = "pydub" -version = "0.25.1" -description = "Manipulate audio with an simple and easy high level interface" -optional = false -python-versions = "*" -files = [ - {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"}, - {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, -] - [[package]] name = "pyee" version = "12.0.0" @@ -6064,33 +5877,6 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" -[[package]] -name = "ruff" -version = "0.8.0" -description = "An extremely fast Python linter and code formatter, written in Rust." -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruff-0.8.0-py3-none-linux_armv6l.whl", hash = "sha256:fcb1bf2cc6706adae9d79c8d86478677e3bbd4ced796ccad106fd4776d395fea"}, - {file = "ruff-0.8.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:295bb4c02d58ff2ef4378a1870c20af30723013f441c9d1637a008baaf928c8b"}, - {file = "ruff-0.8.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7b1f1c76b47c18fa92ee78b60d2d20d7e866c55ee603e7d19c1e991fad933a9a"}, - {file = "ruff-0.8.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb0d4f250a7711b67ad513fde67e8870109e5ce590a801c3722580fe98c33a99"}, - {file = "ruff-0.8.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e55cce9aa93c5d0d4e3937e47b169035c7e91c8655b0974e61bb79cf398d49c"}, - {file = "ruff-0.8.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f4cd64916d8e732ce6b87f3f5296a8942d285bbbc161acee7fe561134af64f9"}, - {file = "ruff-0.8.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c5c1466be2a2ebdf7c5450dd5d980cc87c8ba6976fb82582fea18823da6fa362"}, - {file = "ruff-0.8.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2dabfd05b96b7b8f2da00d53c514eea842bff83e41e1cceb08ae1966254a51df"}, - {file = "ruff-0.8.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:facebdfe5a5af6b1588a1d26d170635ead6892d0e314477e80256ef4a8470cf3"}, - {file = "ruff-0.8.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87a8e86bae0dbd749c815211ca11e3a7bd559b9710746c559ed63106d382bd9c"}, - {file = "ruff-0.8.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:85e654f0ded7befe2d61eeaf3d3b1e4ef3894469cd664ffa85006c7720f1e4a2"}, - {file = "ruff-0.8.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:83a55679c4cb449fa527b8497cadf54f076603cc36779b2170b24f704171ce70"}, - {file = "ruff-0.8.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:812e2052121634cf13cd6fddf0c1871d0ead1aad40a1a258753c04c18bb71bbd"}, - {file = "ruff-0.8.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:780d5d8523c04202184405e60c98d7595bdb498c3c6abba3b6d4cdf2ca2af426"}, - {file = "ruff-0.8.0-py3-none-win32.whl", hash = "sha256:5fdb6efecc3eb60bba5819679466471fd7d13c53487df7248d6e27146e985468"}, - {file = "ruff-0.8.0-py3-none-win_amd64.whl", hash = "sha256:582891c57b96228d146725975fbb942e1f30a0c4ba19722e692ca3eb25cc9b4f"}, - {file = "ruff-0.8.0-py3-none-win_arm64.whl", hash = "sha256:ba93e6294e9a737cd726b74b09a6972e36bb511f9a102f1d9a7e1ce94dd206a6"}, - {file = "ruff-0.8.0.tar.gz", hash = "sha256:a7ccfe6331bf8c8dad715753e157457faf7351c2b69f62f32c165c2dbcbacd44"}, -] - [[package]] name = "s3transfer" version = "0.10.4" @@ -6127,21 +5913,6 @@ typing_extensions = ">=4.9,<5.0" urllib3 = {version = ">=1.26,<3", extras = ["socks"]} websocket-client = ">=1.8,<2.0" -[[package]] -name = "semantic-version" -version = "2.10.0" -description = "A library implementing the 'SemVer' scheme." -optional = false -python-versions = ">=2.7" -files = [ - {file = "semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177"}, - {file = "semantic_version-2.10.0.tar.gz", hash = "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c"}, -] - -[package.extras] -dev = ["Django (>=1.11)", "check-manifest", "colorama (<=0.4.1)", "coverage", "flake8", "nose2", "readme-renderer (<25.0)", "tox", "wheel", "zest.releaser[recommended]"] -doc = ["Sphinx", "sphinx-rtd-theme"] - [[package]] name = "send2trash" version = "1.8.3" @@ -6836,17 +6607,6 @@ files = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] -[[package]] -name = "tomlkit" -version = "0.12.0" -description = "Style preserving TOML library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomlkit-0.12.0-py3-none-any.whl", hash = "sha256:926f1f37a1587c7a4f6c7484dae538f1345d96d793d9adab5d3675957b1d0766"}, - {file = "tomlkit-0.12.0.tar.gz", hash = "sha256:01f0477981119c7d8ee0f67ebe0297a7c95b14cf9f4b102b45486deb77018716"}, -] - [[package]] name = "tornado" version = "6.4.2" @@ -7570,4 +7330,4 @@ propcache = ">=0.2.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "229b25085b86f58651a7823725460c3fe9ee7ecfe44f5bd6a7dfbc10c3c6fdfd" +content-hash = "f4a45fa6e7137024c241ae0efb6bc8cb72ec42277cc29ee94f9d95e4e10b2932" diff --git a/apps/chatbot/pyproject.toml b/apps/chatbot/pyproject.toml index 8830f99501..fc09de7619 100644 --- a/apps/chatbot/pyproject.toml +++ b/apps/chatbot/pyproject.toml @@ -42,7 +42,6 @@ httpx = "^0.27.2" pytest = "^8.3.3" [tool.poetry.group.dev.dependencies] -gradio = "^4.36.1" jupyter = "^1.0.0" [build-system] diff --git a/apps/chatbot/src/webapp/app.py b/apps/chatbot/src/webapp/app.py deleted file mode 100644 index 3965f60c3e..0000000000 --- a/apps/chatbot/src/webapp/app.py +++ /dev/null @@ -1,82 +0,0 @@ -import argparse -import time -import yaml -import logging -import gradio as gr -from src.modules.chatbot import Chatbot - - -logging.basicConfig(level=logging.INFO) - - -def print_like_dislike(x: gr.LikeData): - print(x.index, x.value, x.liked) - - -def add_message(history, message): - for x in message["files"]: - history.append(((x,), None)) - if message["text"] is not None: - history.append((message["text"], None)) - return history, gr.MultimodalTextbox(value=None, interactive=False) - - -def bot(history): - - response_str = chatbot.generate(history[-1][0]) - history[-1][1] = "" - for character in response_str: - history[-1][1] += character - time.sleep(0.02) - yield history - - -with gr.Blocks() as demo: - - gr.Markdown("# PagoPA Chatbot") - - gr_chatbot = gr.Chatbot( - [], - elem_id="chatbot", - avatar_images=( - "src/webapp/user.png", - "src/webapp/chatbot.png" - ), - bubble_full_width=False - ) - - chat_input = gr.MultimodalTextbox( - interactive=True, - file_types=None, - placeholder="Enter message..", - show_label=False - ) - - chat_msg = chat_input.submit(add_message, [gr_chatbot, chat_input], [gr_chatbot, chat_input]) - bot_msg = chat_msg.then(bot, gr_chatbot, gr_chatbot, api_name="bot_response") - bot_msg.then(lambda: gr.MultimodalTextbox(interactive=True), None, [chat_input]) - - gr_chatbot.like(print_like_dislike, None, None) - - clear = gr.ClearButton( - value="Clear chat", - components=[chat_input, gr_chatbot] - ) - -demo.queue() - - -if __name__ == "__main__": - - parser = argparse.ArgumentParser() - parser.add_argument("--params", type=str, default="config/params.yaml", help="params path") - parser.add_argument("--prompts", type=str, default="config/prompts.yaml", help="prompts path") - args = parser.parse_args() - - # load parameters - params = yaml.safe_load(open(args.params, "r")) - prompts = yaml.safe_load(open(args.prompts, "r")) - - chatbot = Chatbot(params, prompts) - - demo.launch() diff --git a/apps/chatbot/src/webapp/chatbot.png b/apps/chatbot/src/webapp/chatbot.png deleted file mode 100644 index 02034479b91a68ecc9771fa9fbb364ef54ac214e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22002 zcmd3Og;!Kx^zWUar5ow)QYisx1?d!!7Wh)q3>||s2#C_%!qD9?lA_Ym9g@-@&AiL+ z_ul{TSZmg>xaXX^`<#9DXA`BVu89AL`VjyC_^*`|v;hDL{t5-KF~P4h@88$p7mkaP zp*sK&^gMhZ1I{H@;2$4*yfpC8asJQ4%fihX@bdEFw{voEx3qAv=680p$vBXt1^`Cj zwSug!cjn(kuS{0!Ea{^W9lfl!uYM=L!qa9mU#ld3v?5@wFbBwAXv%6mZ_yb+`z_H2 zM8os9=<>I-Zilf;7-fkeuT^HO-3jWx$Zu65wk`&UJZBeYaTf1%FWUpI-dT9r)6Kq^z~6ByOI{+P-O@i z3| zA;nPZsb*J*$E-2gewRh&&1O!C5@{&?*Y`+RRl%|s3NMMq#I&lQdrE27Xw1n*ffF1C z5I{!@nKk}Af{)>-DVZ>Sb;#G5sGl4y-;(z|(x_-ikmkWr*pLSa;FeM53daq5o?J?Y zAIuVlWLDyZXjX~OALx<;HwAXxB0^6}?B2x?>~od=L`^Rd1u4MznFZcKWOOkX7oX-0 z421~e4k%kNa4^O}M@z(~gT*R<8Ol7I$3*#N6Gzd48>H#vt!)+0+fBiFO_mTDAxPTC z_k2Ib?c`QiacJ4#SAfuDOaD)N3}h!&YxXpThyykKq}9=IWAbPj;u&!ZJ}!{|WQNIF zDE-MYWJro!JM+m_kd%DHA5D0Y=}fMD4?o zi~(#F{)y0L137iAtkUsz1E4*t7)K&EMlGEwh=O;@ANGT6^-dt&7S90qRP~xmKIHMK zH;zvwQ8T(s-LC57Mg-K{D;VE^{%b^WfS!XG3QZd@gxFRos9{90;1 zo>rj7vSo&yu^?-2&b45T``@gt&lPVX(0i=KDJ{z!;+bw~UGcNILzGiD*=6&Xgg@ z03`3hbmLBZ^-b209qytTM4j$w zp=kO3>#pR6887f-b%TKydR7Oi!TzMfL zzS$@qiR0h`Fb}mlIobU!NBkN>T&8Hy5`L`anBlGPV%K1k=s<`8D;$#fTnmicJNl8p zw4Bl}y-@S~;cGkmM`0Rh-qP?{%S)O);Fb(y;RA=Xr17lFu*fI=tVc}F7}W+aiY`k? zZg!k8H1#@tA8>28#8U61uln|MC=VBjRnACOUqx>0NjV3=62p5A1I<=I>N zzyfg}j?<((}cE4)w{!Q76}X3zd#-u@}OlH^{0&vD2; z=0MllpBnF9eA@Iox*f_!sq#@$0G6;H@n4}+43L%*e@b#5;0{mnI(Yw2TXEf)^~sj~ z=m8*T0;8Ct!3Au_g@+ztH5koPuY15dk#Vp%L48rSBBLQ-pVB^GI|~TMDvt z8^zr%v~R#}xzuJieWYVz^0ZQXB$U^v80}=aY$Ek`PRXxcniqIAk zOFjFt_r4LhF<>;eLGQ(1!3)Zd{tURi+}nn@m$*CVZ@!=O>33XT@JjI+U$#v)?=dEj zkNbduv@L9JZr%STi~KC_9L-c9$WN9KY4eidasXwa(ZyK>$F;op5;eqw`g8L>e; z%0#P{wppZ*W17Ne)arXPQQh!L@;=X>e4e)H-ni04>CQn$G6Bqmqhb{Bz)~HRJ6C&@)NEP#21$2Q(dBvjt`jh))8mm=j zuH8UEWainbp+VR;4TghsO2_N)7I2`o`3rLT0p&B>LUb!wdU(-;qvN-p%6t$i*+6`P zcX<`+gI?-*riM%<^Swwr)w7w6;Uf=dEVZA$0>_&fye`vzl~muxaJRGeM{ecy$NgS; zX6;|K)`DN21%Y<6Uyk1&s(G6BNNo4nn)KelrI6j(rH{2u?>vLXCWMFZ_pandl-cI|}CK{m+3b}PAZl~mV; zY3pIk_Q=M_m*juE@DM#4ru;!3!>8#yZ{wYpl3HY86mAq00J^!AWlpf_Di3t7>YL%c zLiRhA$oDlK>-{D>5f6)i``;(+a7?$N9AFK1Wm8ijJ4qn@YsK>O_LeTQ+V30`K%l4) zD@}N9ku*-!Md`4dLXy5vMPv5DXmVCZnEn2s20dqOx5 z$UXDckCgH-8u5ueufHx+X{@@Bc>&2vogXvijh7NKrsd+e#Lvyf>gU|vd9P1>`zAhV zSW;^McpC(DsfN`SMF6g?poMJEznpO5w(1M7Fsjo5BhU{pT59dozo+;%ZVB~{co-qY zHlePv zD~?eR9@PDT(u-$&kGT_jb>`cy3H7qVe#BtFBMK*K4I_>P;g3OyCU_Yn<5?+RPZ)WT z6KI12A~4{Jc!WRuKXbl#gcCPStTk)cNcYPq%%;)v&urT^G015y=pMWkXNr&`4*_Nb z)kJMinD%iIU)xEYu1($`7)ad$0-kbxD2jl%_{T+ZS6a;{e9$xKER~o5X;cH1O1YQ# zv^YZf0!_>qM!|eSIPv*dd(gOpDa+|iRv3F623!TE{5Zx+CFm2<^?^oIYO?BgCO>OX zexN0h_CS$gg^9kb4og2Xq=`#)>;JZP`uiq5#9G`~Pz03J-;+C8n3jvgv52+C>eEGG z|7B}uh4jZ`z<+|g=1?Lh5$;699Zb&Y5sq`hwE?kUV`QWs%`9IN9 z7)GrV%bMWC2a3+NlsS~R4lo%Xq&kXfdr!cPqCBR2;OYCoHTxxeJpBlwqW; z(3RYdpM>v(1tG1l&kf$|m3eJ?Te$(C5@h6O$Dfcizl0Gm=MVm%+$Vg$ryL{$BY4<9BMfIu zDVx|1(2y0vQQt{x+4dAUXhq6o!Kb7kIXG0*2Y1~#KY{0Z4+Oi_ye|zpJlzTqBNNh9 z%v-DmTs~z~NkX5!C3SodWKu@)-m01ZT>!#z)Cr`v_eMP{jAuB#OdOL~tM8Yib2q+z z7D61e1C%4$uguTL=_*M%7#?$eblX|EyzB3^9fT#30l-NqD0F+&x=s{>uB*tzjF7}x zIIp4%K85@SPe3!20utydTW)T=#8--(WXMHPlYH^;!x}(ydxmYO`T8~tT!UC|k?Hj7 ziu~c)=vQT4fb4ajeDmJKfZViqs{rxU#5sc)&V-RR!t#;=7kKG(cd3;+MWsU*5~)N7 zxxFnr)XVB_0?9ZEezv*tVciGGK&%zO9bV;si#PeiKMF%8X$YiUU)rsCmr6k)&UI`D z%VLMw3I5iR7eFXsuO!DagxRM4G>eQ}VhuhFIFOs<@{hofAvX!Urp@$lDf^#UUn0Yf ztqCx6$#LP_c9pR!#f0>rWQY?i`6Tuke>rY-a!z(bbCo-<##j=fBXkECncaACR&OQZ4w&F=&fZPCWZ47I+z)Yvze5Q#pD2RrV4hB!oPt|_<=3L? znE)q6vZHriC-g8iPf8Pyh2HK-XFpO~cSLAkW>tK;$PvMf_*JP73h#Tv2U#@HfHR@V zCz3H3G8nxq5dZrCtg<*+g$-ZI98aQM9WC%tl;8Lpq>X^dhh*_i^DHH08D$(U2#uT7 z>Jw8`10jA<41$F-ZwJbPqPc2dN5`|=$k~u=LY-oGk8B<2(e=0+0Evc*DzpqQygGNO zI<4nOlC68{S$U1RYaI<5LmgFSs+Mne_^KRfb?Lro38^ufW21ZEe}l)FYszz$u+WYY z5j@7mfDP|yt$e!Dsqq-omF#-gw#%6fO8eLST~7oH*{I&Ykt7aM$dOEqhV5s#-7Ke} z+Xiut?T7b9`I?EGNKCg))2=Ez8CEMsY7wH??MTIt$Ou?9cZpDxk+eI%`sLAu9@a4# z1z_!Q`cJu+=R@INSR}Ob<22$ArvD*vxvQ3dj}XJ-3#F6Vl@etdyQc$4M>8;HqCwTP{Nhc(b+2 z#KZSywVCyW#-xp9E@TKo(wI+P#)t;F;r~qDrr|d4`DfAIjG*KZ#mlYZi1<91F=d5; zhFOUMMsPU66S{S-0~F=4Ba5(XPEM5Rw9RvFhMU|y$19Bap2C|m{F6fi1Ik30;Y*xDu_k-gYpCH_r6kF2#l7pUaGW`~H2n`*d>*N#KGF@t)wL=$8qq&+M#A;Cv^I186!I(h>x!V~~0 znUIkGE_2-7VT_{+UNP?W<4scOF$H`Z6@wNF0DP5e?Mh&#*Z8}CP*o@{9LM*tv~F~Y zR)?;~uuwrP!H|2L0pG%;+iEoKO@Bf$N8us}*7JK@cffgL!_zVeZ!*kY-^5S+wV z)T`MTnY{{C<=q;li#;DS^ybdR{lY6UNKYj&khXf)Ahi>yl#R+;O)ju!GJ^pnj+4VlCIqlnB=H``V&&el=gI%4KUA;Am%!-2>s_m_f%hNR2YIf@H zWEH=FBzJ>jE5*H}K1eMFiDwDq1vMkBl@ti9XGuU?e5Yd5pM&el>asr2%<3X}>m!;0 zx1B*^jbs*xznXl_1-cW`CE4U&!Ku1VBBsFzGvK-OR&I+k^YIOXJBPQP?jf;Xx9*jVf_sY5X;F>VIQ2c{KH9%GHQ$43bTuv`7`Nh+vkqZAP zW3DfvHSYqt4wHAXVZ8ciAHn_ONvcEzrsA-(E?t4Wa&hcZ9+a2ClZnJ03ymJO;&Vq?&=An5q` zDVdTwu#X7NMBcOFn9gP0(C-fKjozJaLhy?3YE)fT|Nf^SCkvW$JUBcv;LJmawL`kB z-u&&h2Br5W!UV-xk!s%wBFyj(Gjt`cqbQYGTo*=OfMBI|qFp*!SIF^&sn~wPl=Gs_^G(&Qm^ixqsh?0snFLxDe3ZP1gNh4 z^U4^dJvZU5`fOd`9BFwUc>arL5yA2a+R82%^xvc7$UJf7K5W2i=?UC%9?|;Ihf0Q8 z22(~LbcU5lAD5=gkxL&-IWOsAQS^oWkW7J=uY-|q3f^yW*FwxpXz&*%S3F?gtVuxP zcYj}muNQv1oyr-(W`NhJKsp8HI2#z{IMXP2jhMfjPHUHn-mVV9z&$G=5;M<%S`I>o zUrLqkP=Fl)MOf-3S=bs#@`Pz>>eCgy6LGFT3Sq!2iK}UoM9+q96jUD@EdQ$*k-Wbg z{2}F^NCtcjQtXtsZN@{g0rq-UR53>UPoD_y3}qDXDH5DN;d2fQxXKS}n2)HoKLw^7 z8M>zq@ETz@)diw^^BH$i_>P)c$mgNqGK`T*Vjt(ysfvZC->rURr-I@|S* zV@$Y?=g~!mcT5-&#iLi7|Mw_e)B(7?%@#5ZsK^!XHz>#GU2J4JxIJHdh8TC$I)<*C z9S*V&^?qeLas`BwoT`lZpa1F(i}2pUY-zjq_(rN2@sHroF;Zv#Xhub%#@~_fOAGkjPvuC7a`WS# zU3XPiJxR8?%oxa><)jqs6$(Iy+x1R4!<6S(jnETCsfHUMkI`IHK3mHZ+lH#9xRCCc zoW%IJUJY>42$jS=3zRco{m4r4m5Zt>5rdW6s1!!1Bys%NpV$ z$$KBHc>r}(rKA~v!oV8YW#AF;L|qV&8w+ze^%V#DqngT&ws9p)^y`}+;lh6q%WxaU zsAx$4(hHMera*pp%!N(3AGEe+0e|uF7vU%U`;(J-mG{-vl)lBa^_>@Wcl=ST%*AmP_?ONzDOyr zr#u+!lB4dM6}9rI-rXvqL4er%)}F(}bw=>yVC-@`6a-4b*lnWVGKE13%u9We>m4Og zC-%nfr>NB({U$`*Gj1d0@_F%%(l4@K)!aSDgdvJ)Z2M8C(#W>DPYv zbML15Z@=PkN{YCiB9k`v7y5q6!&^RjpQSYSCxwYK%>gqtIc)2~L4iuJ(CAMx75p0v z{Svf-o6wboHmi_N-c)eEsk)CLK($r0XtqKf1}R&_!D-Nl{NB-05b9auh4)v71lyDFxqq5)7S?7d5WAh-~&>P^4v8qsP^}cwmI;MKFdb(7X=TjbJsfvL#Y#P+8 ziNs=j;=Hz+S<#`MKLw+qI8;-P@)-6pL1{yqP`kqZ=SwNgd4yw9k~b&ZxATPbANG+x z67%BE;<7b_JV|gVed{P!V0HM5_vf|NJpJ_?=c$hXt|NRvQJp)vhfZ=5SHQ_!%%>=w~-2g1fXk3cw~%pPv*t`zQX7 zr2C7bGwHw8Q9+<(THmf7&Vxy@Tf?{Dz}tBf!m_wycCO(4HaCQ&>f8qm%XF5lK)K8( zbDBsgT)6w;XDuB60=LpkYxOT}11Pnhp1)@n98paq(gEICU@n|pZE3^N={d5Fuxu}N z<~+PMg(tsZ_=V;j!roc;el|KFTdrXQnrndUf>6Q!B6-l^v#|#U5SQ`Vt{eL0$iusT z!jn%TC9Nl0)h@@Jb9Cs?kV*n>Jder$9~MByrm4*j(rtk=bUFc;ay(gl6eiVFwLG_H zbTm9~{Q|wR(x2NV^$icPyQ}jjN0kkgVef0R4j2*2_0a8M<(;UlH!C~j!&Gnf9&_ey zR~JREGeLf(t*;T@yOK_4-(*kXJEN-n$N}*qF5p0{z7=ml>ON;UBQEtSXDH+HjBbR{ z%;PWuno#%p_6T+V;ojoB?PON_oqiQa7J<~v4JpKn6nDGd^yk$DCotTqHif-&CyZ)y zcZV<*dHgb1i1q4&Sn61-n9+uq;nBMdq%-=(VNjq3dNVV8hn7qBbe*;x#(!r5Al_qAR`S-Gt`v|c&~BwwVm!ZNpPq@xFr`%(`xmMk)QY+ml}G? zARQ33ey=de&gO*bGt>KubZOj3wfG(-wn1bzga!vFvQbMgmE}t>$EM{L)z{2nbM|14 z_&C138ZEw~S?7UzYO3vls{8W5K}WBg>(^1FlTUiQP60-t%L`+tGJ<8Xy zJFo*juu#(QAc9qgi_UT(w1nlmgAoC9&VqlVxu%pOXtwqz77(D_X7*_*S`{Vm4U;zv zY3hL9;pF=x3qz*Hic9+0?eKDYxZ{fhX{ylgL+|TC=MVj~?ZV#;_Pg{y&q#<>lsuS{ zU3qQCjWNXlZ8rsMkzDqtx;gA{JAUxx(W3V|kAJOm5LW1=2S>gtpRL9)630sVZ=1$r zYOK$)h~{V{4&FA_kl@#e323ibHMk%q8Owv+sDxZ zLJl&q7@3|}zLJ6AVe}3HxqNL}m=M}BF||oGuN`z`zFm*@%$@Wn{x!;=rIPXh=DGRn zq50}M(TeiBd^?seI?_*km^X*dCz6pYtS+}n`cjmm;TeJqGP6*;VJt; zfK^BBzbISOo2uoHOR_MUQ#^vUI>6TUXq6QJ8Y_k-7z5q{%`P~(d~C{(L{V3Nazrh} z_J(IW6-+sbVslVhi3oZX61lo@H{D1Ew5(W8$UjWH`$8BF5 zx$WAtcWJ(wAFTCgeW4COQ)LqREnJ^pnMZz_OdDk~FKRJVHo}xbSE;Q{9TQ31a~m!{ znvjkbJm%*JvQ2WXBG?p&gL%^7-LPlqVLkamIAy-SLc)BG0Gu8ubEwvH$yr>`gzdA)|Mma`nwyf4$v z#r9HLCY_Cxt=!qyw7g)Yq9V;6`ptu{Z2@C%iA-A2e?Up*9cntoi_4)cGyj;H7S{co zwDsyxeFFB&$RC|Re2sOxRUn6!R(8UJ*YO1;h9*9BbSTKHB1$B4!IhpQPd9D6^!%?f z?1iV(0tai_$sgk!YJB*ir>qNjv5mN40J2Rdi^})iqWT?N&Z4%MlR1~M{P*h9#5PKF zn2e_ucQByP0o51e`-8LAZU0GXhLFw=%kpmDtB>txb^Mqc-kfxLBSKu0Du4^m73kW1 zMcLV$P-jo|Y||01q1ZS3}nR zmw61mc;slYI9*TlSp!fb1M5Gc5Ps7+T2eS%DP`?QY3yz69RR{dMq=7r$`vP%yIxLo zhi4ruUb1WH#OMaNPtIkCSO!kcos>Opn7pAERWQ;d^*BVpwM%pV9#zYY1&~7a>hbHm6YdZ{Ey9vR8E-M}Ct(#Zh)q@+ZH8q*Be3P%%WgDx9@|&mjx)^bvq!5<(ei=59 ztf8wGd*~E#&jXNHOycxwO!D43zOYXwP6~m`S9%~{z#aynLA_0=)#r||XQXE~BUl}eM z(_)wge$^hG_OpnASow&Al3n!4tuC%VdQ4y3UGbBH8(eRHGzbGu!vUF#j^o*<;pen#qSb}XKk7Q*)W(kvEPg9ImGDNX zrerhHNN08YPt>D`#T)l*&gFo&Y~2Tb76|dmcIo{kC_ECF(5>Ui!Bqr^T$~k0La!=u`z2t=0m1pmTBMFdHes?%jQ}>HzdO7Hn+=yz-y$Dmivky9pG?rzd!?8_rM*$pPSF^+bc z6!lhtdzLxr$ZC#O$c7JHTDRVdG%}` zEFj*WH}gj#ti@lLIrOO z=f7B|vAutLqYQ#(wBOw!{^;5L9C`Dv)1cwcTL)jWO5b?-=Y5v;>;P0I^~L|vU9t-S z-~|*y+zxHDA{7A*++QF~&ZaSEnn8W@$8D?KKqFpdnYV<`vzYTc9uUsMHk7@TUuXgX z-*~)?PZ=HriVdT2pzX+g{krYXJ45z2oo7waQo@_HcI75l#(k9!3`-R2ryh41gTZpM};p67KrtI!xtRrM~@UkQg}`u@y}>vt#_jUN!XqoBDq%K#lO zYroerBM{U?Rnqe;Zm12zGY!MN8o_vCFWmb=W4UPzAvI)U8Omck@zHt-hT7$Pw27W` z8wuu(-_ZpJy@KUWkNT0fk#qf1Xr3t)xIP~H3m;+~OyxwLU2&*$=j7`lPfRo{Oi+)0 zRY+j#knCgc7K|9x6vZC=A}D9@#?P|ziofVGVb%(1q!7;V#z3R~AS+Oc-prFi*UDqVm$iX&yf8NCVdNpMI(y`?9B?;q@y{H-I#@?9Kwj{%ZhG17LU`N*)JO&3h2njRNYh94h$GbvvGeFNu zfah^ZJSGD8rE262=M_B6Z93%_CxVcpVvtd5P?M@ks}va#Lykwi*?@v6Sqz8Ec;2(b zhMZ{k+hxax=bR;t-S^u*r%8<(3OAkyI9Obc(rIAu72ySpUs)3Z0Bu|IW$&N*a93UEaq*=s65{V55 zmb|7CM#-Ee`4}}btS-7}K-2{j2Ob)&P#pm!ZPjMGD>L*)w2L=s@aykw6 zH&~dv#P5&7Y%Ah_2o02_WWTa` z5njn5hHWMOx`RIbFb5=GnH2f*D}C6%^)1gNjtB?D*8`^JsPyRa%5N`kyP?QGauHdQ)Y{u5R#sNgCVf0Xcb z`xTMdQ6suYbLnD%;OFK5bSso&R`NGNusr7 z#q7qGw~C0-=+BP>i+D>y6YNsm~E1e=Y2F$hr#x{uGyr%bs5yeDUGj8ln^s9LHU$mw&D`z8b8t%8aP^)nl#T52n^Vyf4=fcDX~T zu7K->&qAG4Omlh3cGxSCGOSByEkIY{N;rHQq{4Iv-e;AFD+uHJv;)}G;@z@av27#i z+97^jE+qfevxC4JH&zy+?k#CIiZ}zom$1Z+-yHHvVn?g_nQqU6)S%Tx`1r``UB=1Z zIma$IH?8SPqY3kG)$AhIY*4-=>XL?uNqUv3 zsgCps;aq&SMEBf4Yj~EIC9kLnrIJEs&C8?tqBU9nL!Cq9){>VXlpv!@rm*{V_Sw6Q1z>8}HqIJ&Ke}4{_HsCaZDD}DU>i5-N z<(bA==NACG5L2}&?2|qBTcpesgMcmQW4O=#*3`M_dz-4BQ={%iILtT6)QMP~Ct?}- z#r8QDPIlbs=Kr9=OJlWqX~h!_oS@K_52wB=JY0^Oxv!&y5h1$s|70g|5FGUQjJ9Gy zw+Gu{v6tui>U|*e;nyPCU$q?%>^6%6TyaA>7Sms7}96Bhu}Kq zGUg4SrW#xH&0Wi+16QCj+!S&b=JeyMAq)_c9>w9bhzY`+Xy^MiJ;{?>f|>Ezw5V5X z@Ht(+%Jvll-fdgWtp8Mn)Xb;Os7DSin*`AA?tQPZ;Pq)?OpfIg!$C5RbvuLc918daXcg0PXX*nUbkPAv(PrApbUPc zewGp2s4{J)n}6Z0`WJ$i@tmqJu>8@aCALiLuFT|G6WExQ&xH1J;#K8Jb`*cz*Qu3F z9>M_*eq*@beKP^-X8RSH8mdEUQ0<{OoIs;+ezsAGOvOQutqG558Tt$928^!zz5mJ= zMGD2^MDZT#s-)0wf)vBqaWU#|KQ@8^QjC-&mdZe=jv{?TiZTr7^q23dVuu|3x>zag z)IaVg8yQ$BfacmlGOp486TWotH^j~rp_dymUrMsvQ!5p$6m#Hz_&ii`owI4VFnuvk z5d{f^IC*&uEjWjg_LVFb2MmPr(}GPM{a#>^sah3P0c`WfmEVg3GT4&4M^_fsP5-5! zz~DJ596YB$6wrgwT#e~H@wZgC`Cu{TxHN`h?GOH)_jLomWL+)I&*}3#%{4)Y-UqOD zsW_1Minhj9JkDf14vza~h8Bc)Z8lC{dY-E}$9I8{_ED3W3P7wF>t_x^kpoVVl!vg> zOFA=9S5!`>Q|D@r?<;^aAd!r9f)?zo>>HVkje;lwe0j=Ib&XORy;6&_MQv4u7kFPW2BSvA7JGa zdb0u($(3&(3lbk!2Vd>K{^jhowNb9@yP0$a!Vj3$U>3{Ew@hJGpa`qk=C3xZmT8f` zm-aQZBmz9I3%{$(-!;)5?Q7RCGD{hqs%&_{28qO*&qaLO?u759HI*&D`|lk!ys)Xp zzSVC)E3NkjA({Xv?anMfVMDYbit)cDwp+LUkrLB@NwalSMxDgP<;9CfK-xeMbi49D z#w63l(qPj5<+t?Tnc?5(wI3$jIAko}ks!YWosMX2yqxddTx>-JH<1H`0dK5AdmZ)E ziZt`k%jfz;p+|3si3n=38Bg-((iu1Fr)Aa)q=DR2tf!ArzaT~#vrwIbtKPP0<~NW9 zO!M5gdAfdqF*no4$v9Ul3Wk^=h)nYT}SStYlSt|NZaGUe_V) z;^vN{j|knVLYW)O+r9vEUi#%qYT=r!f;=xYvOTv&>Vx3~=}Imt`~Hjr^_Q^L)0;>6 z-x9`%6hn|OjVPLd&W@(K;HPy#WGAboENj92B5mk*++vZw(I;%feyI7>m%&+C_XhVV zBJKtmv#le`^EQy98;$4>fRy2wF2TufOaipODnhg}j*`6`Sj;J4w)3}t!D28#z-!?!>yR*qC@2wG#hv^^HhZ=(cwp$zNUWqliuglu4K|}&h`CHp zciQXU9Cu#jhX&XX$=hn_R#ekg+gRG+{NZ8z^)^qi1K^P)kvM_38T@B{2De&TR$kun z>Brn}G7*n2`myWJyODV$C+<`vwuJo zG{Jivj2 zdU)shDOAI8Bg0NIe-)s1=$2H3mnefKPLOUClMF&yIV+z^0`C`h7Y9%ulLpNE%;vVj zrEi{9wk;k?bG16sYymUEOD;~w^C=Barqs_cO&HP`Q=_q-i^5CfpyA=5^`%ZHSbci| z3A(g=3l^ZcW?o9p-jJM3UH%iLx>!HxnT~EC5yPb4$C()ysD8)c{En0uhuT&(jF=Eh zj54Z36&?NUZh@G$6CJg-#iXlosR3Z>?|Sz5*eR*T?b3b3t#D|e8FdhP-NtYoI#c2x z2BFU)J!(raG|@<8M<*Er?=*;|iip&-xrw_!w{X>KM9EGY>S_EY4LaT&@51EH`_bNubhPL_Bd(< zZ^7w81Gbeh#g3-4sxmM+_A`}n%3Qo}%lQ4VN!o-BlXOVTLPUT{Bjz+!~S4{#HS}te$sC zpML^oSISjjwL4j)&OoY}z{GN9&a0jK-zDq;t%5c!yCM$2lI*{Zr<0N_w~nH7)a#oL z)+g}1{Z6T7AQEAU2*!|sp`%gneqs9kwL9{qSZUQ7`jMG5ZTIy#+vIEZa@!1pjHM3^ zX^z#_*7R}QODNx^p{H7rYnFf%T5ikuzFzlDT(!#*iB#4bow51^f%NZ`d=zNpz0h1Y z5NOsQ%=DWrM5$LSuPWX1eUr<;J{nm4R{F;O&e4}g#L83E_w#bFt|Rb2U^-f41mLd( zjnFS!bi>AiJDcgsIqJelg18My`tqaX249WUG8z&lf~~73W1%2gM~0hN;VHcg>o1M~ za&!>?JsF5c*y51y8e~TWZaX#4=W)v9G;W>0T47F=dVR+TkNwGZBn3=>sI{tfo7v_~ z1+R|Wb|nz>JjtWC0NTAb9`MoK|53>rJ1%AqJ{e#*oWROgBuy3OHuH{}ASLHd=s4ED^23I!} zQJo04Q!z-kvJk`s0fxNhw%8aRq4MJS7IX>K!L~Cpf=C>Hb)8>mqKg|VQ9;mvPnUIY zZ{06b1s97FHf+F3A_Lb|wYDkn_n@Dq=$|Uxe@ghLz^|s@7P)*hC_b>J&CCxMgBM2o z1$Y(c2;}7kYs%1EJ=^e>!(KS=kbS>Y{(fzl5nhiz4y6iD z>>zsg1(=dCPb!)%BTReZw;n4R-68D?-jDQvokg#?j_D?!NB*#|$?=+c{iQ2Rz8^Jg z8*PRV9|+~-24*6J)rAv~`$XQVV9N(HHSyE>POv%qMsLf7h5}e;4Xsv7O@SOaFLMzm z$lJ;(5r4A5Wm26qTmS)l=t2qw^F^OfC1C4I!tzVGYp?%=SaYsX!Jg z9-f(nL9Y>w{g+?CRe3;Iv>+M2KP@ump$p_HHqY)#TbI5{JR+k8NDbYQ+bI0c1RMDc zS0gI2{Uxc~s}E~`eT0RVp6}^{SHWL&X`iqw8C$fq3Aj zB~gzrRK5$8fsHL2uvPf6t)Kf}_Q~h%a15EW!u)R;g-8wEEk@=OL~fq*j%{34v3P_& z2%jTm3RQgxWmsjGRZ#dtDOmqaSFlqdGT?oY3Mq*5{}@X2QtOd1UhpK?R7C6(#;-6& z6fD2D*Y|0c*Yu$e;PdM-tRX2ynZKG~6VLa3u&uXScE3I@`TMI$!}f5nx1q3m^<1t= z9kW^m?2BP;8V4J*J?=g<7WbOz+8i@e0OZ=F1XT$nHgFqEBI4ML(NH{^Ypgk=cU?MJ zePv)vg{GtApws(1|f#mU|^dGBRQ^=^X!QNPK(aN0$<04XKIvINS1EPLcso%-yCv09xB;* zk&X`xK94Q_MzB2>HnCd(HsGyMg40Wi+1uyHiV7gS`VSm(;hBsKtbMbzssDZZ3PvGq z0nxO^AKU(?E#d-Y45|X#*b?kzP4;4x|4%Ph{twmr#fQO=4B1nbVeCTLcLrs~QVkKZ zgpze8OxBpmHbR&vDOD^_`Y8A!=3xw`NQI5EkmzQ;gqSNDh19`mi0S{-v72&dm=#e3AQQ0j|iMmf4{0Gc9E!TMXA zC=_C(S9BU^bSOmw4J{^LDZ;z#Hrj?|&9S6SCg*T(j?9T2tq(OgMcXS`n-8PBiiMLZ|mx8`udt- z6a*W(5^jq{f{9($AzZiAUmUvI`*}n-2ZuG&^lLCmppzBKf(N-uBFRj25Z;aW%ki2jp|aZ_@VMX zQwSi`9KAx3BHtKy2RSg!0J;(_7(ujKnKBp_5a~%DDPQ~Y9cV{B8Vcp16RxugS^)20 zNdvnWbj8Gh+D!IKEF{#+iga#H9EGixtMzXK%|CLENWb$5PFE=nKj_)N5Uk!+$@07S z3QTfbs;#%WEOY{HwB-Tt_i8h`{sJmyUH_2`TM5SU0c@=F0+^GI(jdR=fDc z+(a1$SCC4Lb10i^-9pq)qmo8I%Xluy9R1U0s*S{sJW+eDq2r0VO@|F+JktjVkX8yO zUENM_yFMQwKsmzsv>nrlGR6$I3#ZAx&tR2O+wt4_Tm5 zj)PtwExo<(7tJEigk*5Bt-JY}%ni?Wd*##gTd+N8ne!_i&u(OvpJTrW!iwYf*w%J_ zd=(T=ppJ5P`IJ{5%TSxidBxng9ce7&mOYpaWJs}cs3F%b6=1^Kp{_t-4>^eT1K}22 zo1pE7|7|lT7Z%@adD6?PLJ1r5T9H+6!krQan4%hZr{U z^Fz_iaY`a!8)mpHD*pWm5dCm-(GXQpWjMaQ^+xS2vWv|We5shg;&egvB$kh#dj_E` z;+knHui_z}4)kTo24Z9)k|x*6uRktdH^>f`Je5@}AP{d)`h;T6Y+~<-l_r{8G=Wc; z^Hz2D{REyr<*9#axqd6}(T}C+%K624{jop(n+Kb3s<#5!0wKiHg7pC-IIj{4zho!k z7QDTi0(VEW+4-1tF`riSs!R}e?LD$0^g+pa2yxSVi%?`Aq2tPxpa&|?dFlN7;K#GP z?&A~gU9x{1wbO-VS=!=20U4@)YtMD8Y}Yyn)wTTG@1t_v5hk|30vDveR%^S*Gs#JK z#Tur}`9sYS=6|K26Tg_!;qs}%5?08n5W&145b!Pj+XEZ6 z4p~RNsvk_oq+))Bm2EG-=~l)u9HFh#-!n4XxUTb05B8ls-j{Sf_I}2o)8pt777uOB z?%|A75JTF4)4WcsUFUepIg7dmI8w^-Pp_9BB%0;ln0@Eh{y0^sewx57Z9reU$igVL z~(-l&R_T9%!aZ2K1Cs@W~d&|Nxt%_3qMLJXY`Uxxe>+PN-$&Xn#& zJL)mzwz(O|I9LACuBYp_M}bCw#g$LxAH_#T&Yfh~Q8y5yo=8EG)re6g_1p|~?5ssC zWskidE9(Q*sqPLO&Md?-P`vbURx9;sx(cMD%!Ytf+=}-1#)#t>Ry*BFZBFWWe&@WdJEs?BT)PK^ntl5=z2P>DM zd8UI`M*=sx#Oez7)*}S4L^JtIa;B-3Zu7g81kv;dzWZ2~rB7>>^@X{_do&cjgM>>P zBYkk0cl}3pls&Ywcx;$#Sk9L94MTphh{3%DU~c9k&k{x1bAFQRMG;DsGO9Ybp1Fh6 zK1ZRAEeQY&A1i0<(e~t|74-Nga&SUFC*>XAn_RA;3Z!U}!oQWZ6Fojdm9KoB?!8nn zSJk-}Spdct56{X8{Aig&cx=PvF{wFyXAyK}Pv>_N6~=tq7h}^U=@ClXq>hwX&XIKxA zr~DWgGWB|y=NxSIEiW1vE1EIE}rdy7*h)Xhm)f}S_Dhdq=T40iT$U^>s zWQHZ$Tm22UTJ5ys;93$DX1%m;DTBVJ#T@fMwA&`Ygj?bEkREIQK z?d-iUjya>l4XS`O`SwlD-<%FS?=>h5R2}d#SSICh-|Cv;-YOjMJR4^Cjwf-)$^9Kw zUaITXksS{GrWskXX-?0&^Lbc;iiy4qt_Rd?Y;Tw+5S%|cBnxCwb?t?c{Q_^%!obC7 zO%gr(fy3AbQ@5WPy2TT?pY*^ge=)2*Ez_hcX~pzK&VIA6{-a8!bajiV9Wna-M~LwG z0m@hj)aP>9uLxcphyKfugQ2)(M_unrQ{&u=fDtKt6^11J5%v^R?wLCacd$xxLV+mJ zuc|=Ka{s94O^Sb>wDJpxB6vFnSS30<<+pCig@WK*S9%YQb03gv5ltL4nr6+0&n~Gb zX(g(zC5VH7Y)@!@H7SFbBKeBZTY)479xy!IkK1-5tF1Q*pTG8g+M%THnVzhQVfNr; zBFxq5XlF?u`Ob9r@5q^)eXrX5?~Hr+CYz`n!`AF;APD{&M#TK{cb`8K;5hBrF1;i# z>(#Y|TSRZJ&Q|f9KW-LZRU@aHLhnxm_|Dlx^D^S8@#*zpp?cK{EWe{>e75+xaWnRB z_pqag>VyZ@()7IP0I-VIemY<#~*#U-G;pwN+ zMcHni!3uw2K8CP8q>I3!GW#6g-&%$M7;Jb0Vd-u+;TW~zCVE75QI&mEp`be|rO(k# zWYL^noqxtP)1;wNB54KF!$K93`eqC5^ zvEnLc?!7+sqH-YO>bbMX+r+YBam$OY1Db8;b<$mYSU)P+1<p>njZ29Hzp+Qw}MB7EL5wli2Z3 zcyu_&w)T$7$cfqikg^_^4h4x2!NxBy;U9N@Dz<|oU?uXkcKZ!?UeSR~p zRr3n=S2llBVS8PjZk&SVH`ZoE7h{^6dM$TwAX4`24&L$lkF(N~tVBr;2Ak|ltpeG-9Eh^@(iftz~M-N2W zr;d;a0E=H~C??$WSP z@TslWtE89YSXw;8gBV&i^7s_W2eeS+< zz>jE$erRVck+{6-hiPA+Sn|{(>av7mEFbJYK+tuT!gq%AI$soKXq5p=f1Xg2==AG?Kb%;VL)fBUz1w#kKhDY6zO?|l zUTkxGh1p@X>*)Yl4PeRu85Mh9b6;xNf|hdZ)GGq=ypm0BVaGH`!e{(}N@aR5t9n1@ zXA#TeRqwoZf)4j}s)fx-AoOfy@93a*35 zJL9#==bCJC={GPLJ4&Z;N=4#80oUEdlUMr0ZD#OYIpE)~UtTEgCtS#8YD(8F=?;+g zW=m6wFvJmak^z_sokKr)w$C4RkECVF)Ph&5cP82nk)lukGG-j}Z}@xFW83y5b9umt z_G-s>GXyHk*T(h8Wi-ypSv55~hFe<>hvEw(C>bT!CX1nf`=$UtN0jy%9ho$sOpt9w zzTf9>JFeffTt+sf{$vDq#GuMgv%;w`%Gf3GyIn4s&ZXhY4yS;C^9if@eCUU05);nV zEn%9Mz)H_m><7_!Qcp7Kp7VQjDfShBL{F8+DSkob9SWQfG|1C6mtt5kp@kcLLlMGv zlWl2T*UwaVE!2jVK>NEGi|#Dy_=3SS@3zwNCRKxDKZUZ965xn%AV1MPD+QF(#UhH= zY91Py5g#&_fnO%Y`d$^ns+^8W<@&H>EPq}U4wSv9>A2^z=|akJVS?B*s+u^oKmgdD zZ(AAm?tX1@T`81w3-Be`u*Pka8Pc3giA*|aJuWwH;eJT<0Wa%~b4Wh!n)GZBGrBqF zq#0E!i_4~-01C5>g@&(TXG7D=OV diff --git a/apps/chatbot/src/webapp/user.png b/apps/chatbot/src/webapp/user.png deleted file mode 100644 index 4cc32ca73ae8351b5e5ed88ec2b4b64a46adace3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13491 zcmY*<2{_c>7xx_#DqE$ZWT|G-W@!-ynbKlX6tb_OEJckA|wPq zh0sC~_`?rspN2mR{P&W~7s9`gg|3nCyy&c% z+0P9H1_r8nczgM~IG=S>_3=A(e^_@lLQ06VZ;yFU(hqiUqANLcvo%1iY|egN6BV{+?A=NP|scFWiX&BLM7frClCFV&Y* z6F15v(GBqOTez~McQ}>AIc|5ien#<`!OYIhe$7{C**Y9gzr4+vn>mk@zR;64;51b| zGW@;ElFAPHmFRH1B}EQ~cmD`?L&@J{5%JYd{qIs{W7xS5dUL@=^vcq?n<<})N#ld< zNo`4EtDDCH2`%S|&9lwHU26DA1J0K~Sy5uSIzmQGQh$1J$(y-XXep2TBSL(X=Uz-n zQt!^RXpL5sC3CvJCrzr=d>xRNpQ=TTa#%F**smszAE2Q>YH}ywIvra!ULWX(hN8!2 zuXEhy-UZJECUHVlW!F?Z_X^jduG)sE#+zkANG%8+Y3LA~vQ&<_h$SDb_)C6}H+vT>E;FXUkglsUmh^iq0>)g&U-Bh;U6r)9zP z!X@YSYmTp1d5d)lblC7=cwsXE-!~;vzUkPddDq^1@vq#_Q1d%i z#nG9=4Z&TamulWeh~ZPSJH_bmpti#hUkuRvhH}8lj0tc2;stZ#HWaQRl1>HOPH8 zbJD1%R?*_+(dP|61CQr1z8VR>siP&KO%Z=W44BzDX4FsZud*}pLMBUcbf{B3%TQXb zos}xrhNNtrfx{%APxUSRVc(`|3IVY9$YSa;Nl1zD_Da3cbjt71g9|#gn3?#rZw@@J znPU$)Yy=#>H&f z1O}aNvYqu_(m8VrMcec}IFL(;Ad430i=z*omCcj)dp^$@#say4%q`ua*1be2ZkXXM5PSrD;BSBrf#u>0*~eAOjhR(8 zr|2uxu+MsvWKL419c0C0!de)@v9e%t`!9ug%ScUct3?HUQ+JcYiaD`PX9FV0VgSW} zgJb8a@~=yU)2%>aKJD4vCBq0Of*7X`GksZ0sn02HgO}fS$T*x}W7JV=aNo=OxMY`P z%)b4ho;@>gIBLbiM8;2f6kt(0x>F+w|gvF$ax^xvo~5;-WxQZd|Zj9QITmnhCvCuw+g>~~K8>A{nvW0jHnO}}pe zq)yvYPA8MlzEppQ^=)mFubj^E17X%KW27G5x7T>tGPAF2UrDcd;s22qe1hj~DO&T?J zx`A%GmmR2JDefAyvHcZ^U4XJAi45BFrvEgOG zx7Fi=ogjz9;;6C13n%X(kHOi4qS=sZKS}54#Oi{4^6W-&_O8ho`d-N+MIdxP7|ApHn<>9DqA_lZ?e7%44!f z?5=3fzLsn`mVzt$!gnY1;P}jhlBXWRd=eK+LPuu^G<|on=b0YjUkh zl)AJq)u(fxOCqH!(Uc{-R_k7o9;*X4dPgkcN$`k1b)kEEHpfa+34Ci}bRlkvwG`c3 z{e1AH0Ki4V#Bvan+$md86jXGeV$Ojl@(N;=9b05#ZUsCei%<`GwQu=CiwXvg!+-x! zjC@ew&~iMla-f4HAE_pS1O{TC`G+T|K5Xjm6UeFi?G=4#pIPj>>|@!wg$(C2bqws! zSE%~1U~WOd`_Wo;-Ijl^y6%Xj&@HV`p+sw|{EF8Mj9^^lOex(UcRgy%IhMV~j9qZ< zDOt290z(b`_FFOXg1Wf9?5-{s_J!Zh=qJw=7s6hou;_g4j=Br7i{vD#z#e7-+cLoR)ha`3BE0Kb5*e?K3N(`t+9thgP&}{* zT=BszGATIj5}r89^=S7pDex8qd3H79yv>*@AFpkq=nOw@&W zIwEL^zw?KnOJr=%1q_u9YKp37E=Sj;0wD$17ke8EgZej#EBYi;g8)yNc2*la01wou zMRMcVT)8Du;%Mll&pc7+a`b`Je^l&a02J!s&L7UgN;g3#_}fqcpwuu@UA#11^v`Ql zt!gKPXzRpN&m>a^T#%Ctuzz`BZJikq3>6SugkqOFzsbJv)KMIr6;p~;cmD9zf;c3D zMauxB*Ou)X6wCQL)X;8TbQ%8i&ho!LD^Tf^EW}oB!1JdV=bI4ADv{R62wjs_Em0*F z37%#JpSFkt3pZe-76#GWGs!3|8iTH35bo%kfA3!`Ksb{puUU&CcZnbzFt=c_RKY(A zzCsB1elHL01GFwvM#P@W&i_pk5R078+qVASl<$jbck>qf9agmoEdq=+3V6#QBkIKB zM>oh=!J?$qC6cJs!PuM0z`U5l4mqBND9efA>^hn)^TAai31hQ{7!)&H`kpRR6zG1J3`?HncKCLHPgC zTJ#-s7FMG1&+`yEGimg1AdPPek3V{Kt5%E0{MxS67zsOI7@5`*gox+0S~#oF2T)D= zgIY*xW6G&V7rb68CCx zyq|mj0}BZD#ETJYnZI+dNFyZ-a`zEpE;_)|?1*a)AdGR#}nDtJA%Lw82hUtr_Uu0oL;Ia4Er zV19rLeMtNJ*zkv_u0_d!Wg-2zD{*5ewy1`HtxgXPd+f@l27#{cdQmSMxs0=y z6RcR&{Lc$?l6v%diTi%v9SRq|ls=<*O;YJ z&tSR?4|j#NlxU-+zoRcn6QUzmXY_!KU0)R+@CY36%CHUR_p57t0s|`;Z7Iw{N)iCx zBu?@vaLKSSZ;=CGTOF1y2uM==KBpnOrft8nNmBfM~!=m!o}AG>}9DHyg!O5$ih zzP?=$-~eq+b-y@zKFEjkO;j&cP>JvX#$C_@`(~MZF_HeJcMEKvowCzC4J^W2J&^;$ zas1stXLv^Gd<+@O1m|#$ahTbXv!43mSD{{s=p|m>(_tb3;?v#O^<+|Qj~<5jE{W5j zr@zA;B1Ui(6|hew?he)};ulCuZ$f@QX&b1d2hs86Ktl%Dj7Ty4`+xSI8-MNfU!2%o z{pK>gidNJ{5RQbCxN$ygR2L#X@TJMy)PE_`xZMAM1!HSc5BBc}ir)nf2 zk%bcsfGv-S9GEj>+UD$_Zamv8HhX%w2qN1r3}J2^A_j`z2(i{xM6s#7siQz1(v50F z)U2@A-7LGQ|I~T!caX|qS@Kkfpfx3K96m(3LKlUE$s6KXgOt=Mf1achIDdwh(|1); z_N(kmx7MYke&mXl_CknB;;sDq(Z}h#GR?y1-ZNtip=m1Yb<2eA768Y0v0E<@HTuFW zA0tXM{VI8J>!#+h!MmqNqCf&VxwZoH;{+1mc~hbc$f=&IpRreakD>nYMCo7#Qfu)-lZbA7;)gy|$m{~uzqxY`e z$Tdi-RG{o4NXgZ(>$~Ildr6RZDe09TF8J6ou|`@vX6`LR*c}eK2hKx=mZHMdslyv$ zKtwA(NEClOLS@c&%UjV_fvmN-AZkee;J`qi-9`H z!7*BO1TOc^_Zwd8u1Qlvd*3K})FR@q+hSWfLT*<30a0f(B!6(uaJ?!&qcSmd$Nydw8UGgo@*Q7cI5b)h{FfVl!!mDk6xPZWna-p21hc-eo&H6p_P*pf^%}`HMvk z`aJW->fkVqINqNk#qaUIzDW(qDMK*Y_i`DDV?4iABaa)2OGV&xnPSgU z$<602)wOJ%4r9_{FlZ=KP$;q>af}GTIlU_O`)85os(ILIZ5hhlA)oTY{q|6P^@0U)u%Q1j z)ivw5TS@u10%*QXIj_BtR`8y)shm@lPzPSB@L8+~g62f1XIYU>nat}pyf}HlR~C-r zLl2ZwlQ>oSAk5EDPTdUURO7yvg&n#pw2YR9yf|tuN`-oY{f6K1oGC@YxfKp$m{bf3 z*jxHFb4u^R4m{MLGiga4acLTVWf3yZNf~i`i9JsphO#jGsOr{)fa~{MzCxXP?ImU3 zdlHEAed=yg^H}(>?)+-b7Y-P(2!^7N!1_5ow9_Io#oE^_$T&oarytIk|KJVd?FMGP zuI2pE_iZj?YEQm)I(z$|3U=vBgwh_^St)VDNfZX%1t+gF+ftt$tt@;-5j8gi&)ps? zKhhi=eztiwBPp=LKkrp<&;^Kp(J@xY>TlBH1IN@kzUmp6)|uGUfRvJt+9Q+Ar8<4( zsahQHR}s2lGLg!V7FqV~wO}qIi9HUVo}6rX+kB>FvD|Zoh9idF5&oandffkB+~5)Q zz1Z;6_oQ8<;XNd&LyRb?V5MM)oC`xp@9^??kGl%9&V?mX4-_=?56>xaCuzg+0bag_ z&xaGR6Bf}8*%|@oDjss$4djn|4UAF@-X)p)8%w9OUG`r+nN+Of0qgW96>EDGa`;qE zz{(-|QoZ4LdeH%-T6DU+$`IF%%h;?Dy57JTRt=8+p19Gf38XS*Sb z@~)VatbY7{cQ0K}xo`WuwmD$9MXzNFkW6{jw5NN8X0afiN^q}DNWb5zG8n{JY& zy`b2-9_3nTJg&T!l@}CbrWNb?->;0R z+S?>GyJ!C&gK!^+XkvO|=b8u$5~DAS6Gk4&+h`s;-pqKkqRr*2$*gs#9?Z^{V}-Jg z3~Uu43iTPiJw!MH(>rLA1uC9Va=5-IgXvuI!UD}Lb^P`-($jU1edXQQ+Z|zk7rU-{ zmUYBkUxaw^yAk0iv-{9nBf=Z44CxK{=tGPbT6FjF_ad1ko`>&V%i2BvRWkXw*N3Xn zOm>LLH|Fly9R2JP$J9<0mY%yJEdAYxa-AM%NI2N^=SSSIF{$?TTDGhF#Q>c%70q2c z^IC=yO{>U88QP?%Km3R*+M%O$8q>-=g+@iJQr$0ng&}jwGwh+7Z&h&P%N4XP>ov>` zye0H^Z?~ziw>^rM`qA3pF(Vh?Z2Vbfe6UU1(MwZuY$oQ#3H0i4B~BS^3E2L}zQ)VH zsBzD{UK`p$Sin^;a2N?X8=;z#v$??gDNFhZgKlX#E<%wmk*<@%DjoQR*K=eleBUbFMINSCj@5`>tM=TXmtK1X6 zuR;}la3D!!F@(UG{l_ju@!njbdy zoc!0te#Qj%3zZ$I9a+(}Syqz|u3?s7rfBg-(>Lfla&4Clmw1M0e$|0Bv^GPBaFZ0zZ@Rb<9@v|JyX)sq0Lh9s7LDCXFa=&IzrCrGe#UVQsvIxAul|gRO}Ew z_Ej=;v$xL=qwB9L7~!N;hah&raFI7@iwN}sH(}y*EZ>f|a=^=TH)+&_wRRxpjte2^ z&+WYMpoo;3?yzEt&~Yh;C%_-ih8MrH=iy5GU9&wYpI=3Uo0pq1^8v37gayfyJ@5D_ z=Sv2qq<(%=ToiX)IQ&bRk9baJF!1(j5mDwyRXK-8i?=Fq%CA)6e(8xFE|A=FK6m3F z{Y>2S;A3CC8iw%AK5cI7{^>^8QnytJeG&G75m0wvp29mQE%POlQseoRJ+TVKF*P%Q zP3F(*l@qO!6_K`o(ncO!Vf2-8xaPc=A}18Er;;v3qU4iBZJt>(|KMk_Cd+PQRJ}Ny z8sr|qI^1#lsdvqg%8xd7)OoUykIay+2vPJ%6=QOT=WdqFPyQB-`p21>=||p8llf5jJ;A2Aic=-uCKNfCLh1d?PcIS=7kW+lf;;7>+jKQ+ zQF2x2b!CqYHJA#@S?ko4HzXoQ9T9MjOgyd2gMFd6>>#rqXYa6vN%u7x%w27EGAr+< z&#KPup`0h34ACFY>6VkK+_v{}5mP?7(y~ZCR*k!!HrLF+%8x6P5=hf_zJ}pNF{Jx& zR-VtY-m6Fx{L`{>$Wnw;9;w6DU$R{^CH;S~yv3=z08R=Tj=fOa3K3=ki8MJK3B)-WE5S^h>@m6 z|D5YW>*1$a7@PCwRN@Gkrg1)OtlT@90h#Xb2;+ib!(}4G`(XT@)77AEvONsXT}*P^ zD9PR38~?#t`|Qj>FwJUk)niWSz zo_dpnM5=ZBj0omTDZIQV`{J9=^!`onSG-<3`+=}wv$5J>(Y36uD)QczM5+k^l(_QPhINr)v&G|U{^&aW;kqqufq3pWbnHmAj=11~BTfZ;V z?m3uE*`B30jO1IgFLNR=>QYm*N*q^E*seI^*+nWi#;gN)YYcmot=OMzmFd;A?|8j3lyj&l%^N#R?zt4KyXazA*54vdI6on#VroLCB#E_07g~@FgThg%-Vg^<>fM z{l{8zckzE6I+77%$q!IqUNQztG5@<}iqOnhFPIvu=JAN`g%69`W2w89JHbu;jGF~t zC3-qe;c40vX)lS2G}BJ83{Qf0d74`XLzkyYuYD*wAlALxGQV&*a=i#K>K9&qBUgqd zS?s+h>&z{_Evf3`SnBJwdhN~n?j4CM+YOT27m`m@JnZF3$lH4j6nNUdQ}(iXRWViY zU57i0r*I{L?Y-E`G{vba`-~U|n2t7qXvdRG?IpWR=1+ebpP&12iSjb&cvO=49dofq zUFzmOvRV0S`(7T^i#}R<;K_scM~|M_Xqnr<@maLbI^059RIPnaxz-bna^*7NDcV)& zC#R{c_n6|hq@PZuDRh0DReBJ2&Z506^pGZr5<@mhI-Ber5B}>o6VH-I)Ore-M+K|= zKBm&n!l1m%^8aRrY}B934n5 z)C>LpHprkhb%#;@BTiSwDO?u)0T8Q`6pMxtDjNQlO!?%&8wW}oU0_9Je3z*R@?Cz2 z5|mK~$_N5HE>5j@lTfsm2{|{U1to=P5F}N)vzNjLy~EvOEt-ZHB@C=3NOdVSX>k6Yvg=)n#x;h>!&RC)*r ze9NFBQhK=SCa<6^>Pt_B81@0zp0?8FAVLH$-sRnH>?JEQ6_LQ_QSOsPp(s;)c%Ze7 z#oG$(8qT7lV2Mc$DY&84UzB+)}QF0lSU3K+5PMdO6ej9Qy4QR+RD zSsv6RQ9x%g$=;Lgr1BiAimF^I>DvEEdWBG}{SJ#yU+`&X)je z(a@RX)(bEc3R+v~-pG&=4eckSex^L_IZI+CQwy1%uMkC}R<;`gzCbiqJUmcrE&*F; zxy={nNg`rE`)a>C_jaFVzdw_?8ugTfqiToKsfW7bFlIZ@FTC3${%knZZRU$jJh|7? zQoPvjk7TYwG!eW?A?$RY$wrT~teZB00cQ6^Q2jijhJGSsnps3Y;`nb{F`qU?le|;( zl7U4_?7_cwTy1_nJP>a#jz}ECU(otO?~4m*DVDD?+)#N90l~!s+j=tp?KZt;M!MWG zeOO=51R9b6uJ@Kwk23GEtOElKdPJ$ee<`8|!k?ANkI4p_I12i1G#D2U567ppyV%6z z8+U(h(eOagJ}E@Xk1c8i{47zEUI7XG!#3J(1U)HKbo$+8V+W1LIpl-N_;WDdW-~Zq z5XX%9;4e>!iY`Wa+%g@6OMdJ+{|AEz?#~`~+Gqxt()5+2=Y?S$=Y}Q!6iXuc_IFHm zdN>C87yBQY-BKR_1T%1cK#+3vc8sz%OkIE5JQF|3M%UJ$p5Kb7RYY1N_nEh#qzb8f zfs5%u{P>ERYkv~JF&|})3HJI^GgRlRBW!hV4}iETcDWUxmG;ooq~D+qiU5E4Z)(1t z;=*oSBo0(g7PuUWvW&rxG(X!XI9ikV0J=aH+Aoi0vEl-CoYF+70#LMK;*Lw$Xcj?r z7779%c0W?K)-19;Ap*El_&K4Eh@uc@XjeQ*unH_PI{{0Z;l>4uLd!HYV*Q|!R-+c^ zvLRfj`H_}lZ}$wG1T`)fXf4*pKw)pMk`=+*RJLA>JwNZ)AyeuGar6x-2!CRF2YiK!x6F5+>3I7Y@ma4 zMx(++cs|VHy8>k>U7*&BKd-OMUu{;$aH%|@2bBA8$xfikhBs{t@)SI;kn2NUQ;;Fy zn5h#ODZ>O$`%_k$jh0_T|AIR&yS-;#UMM9q`Se-hr2 zNXgOZUtbK0PgCQ{3LrJTb8n`?;BsEfR3xZ9e;>&j)SgJ_kfS^#*M__bM!K&7`mqkr zucmmg)fIge(6yjt(0@wFBFlUIdjY*R)M)NWc*Ssr&JO&paaHN^NsAssUzdUC4nJ2d z@!MLNfH|QJJ5q@&`XZ2(_xM$Z(`M3K-~wv3INpq z#HLd^N3MT!9+qkZ&;Di_Do?!=vtLLeW5MSQUT^bOo28QL?Ou5Uv=_HSLkOYAFZ+!y zIJmO6$vl-qw3ztYPr)D%X@e3K)eL9Vo_|2ycfihZ@$!01^-q1Iw7rL-Ok5*c-J1ib z`S6I8rh4q+CczRdrz`Tfp?;qKrzOS=4RLbqXLal6nVqbz6;{0TpgPgKx+|T zZ2MkPw0hXcg2)a4SP_xA7etNDbuJtS3|YMPM3Dj{EYR4i*T8sq+*b|>@U|{PVQ{11 z^BHtj2&g7e3?ghbi#B^>snWpu_jWnLhkv650$-;bV}iZ$8GQu?mT3EitX2}}P4M;J zHq^Td{bef&*s7-V<>=Vdzyzn1y`;)EUzU7sWD_t2M#UA7Ro!)&xs)X#co*9qtzWsvgL;=mfb)2$VwocHv+4iFJZ= z3w1^T#yNSp2r==?u@B7tiUQn@xM(?ug znASyKgyB2mL-~@8#{Z6@-B+j;1JES4zwVEw3NZQ!C$5bdSO9aB2DLB)=LvGCWwWFr3X5)TP zW_j8?sJ+#=u2>5%eH}-8AeRF zk_Eo9Bca2Ub#p#pUf>!NCj>|&`l$?e$Y@F`bBeULL1Y(S4V_pR8rSrsEAD+TOa900 zMA(lRjQk8GfN{Bq=e3OVEiH z(GvG9I(!Fd2(F;?#D?LxW`Z#Iw-uBm^j1}TWTdw((?gG;1b0s05BYAP8u1gncAVa? zKt~Aut{Y?>A{a5@Rw2Zw+9XjmrcS;h3;M6@*xwi>5>zMGb0z9lA?iXM_lIx$G^Xj~ zgC+D6$k5c+(9)~yQ@#aGE_Yd{gRAl6S7NA%{kQAIy>d^)XJ^6{n+R07p} zBT5{-l_88;oe&I+;hKyC z2}ODb)0H_9%|9c1VMU9t}Wbo?}Sq10A}?I z-{{?t9=eHBS1pey+Rt1}65PIp%s~{;w0z zE%RoQsLIh&{po!%x-H_OQq1H!KMmptu?9$b2OI|HX zKsLa?A})CYSCSx~ItYLOgcgR++Qz@1Ute%16(d&I_v zf2|H>LNx=fV5b8-bNh2IDz41Hpw<<}%x7V<9H==M?w;X9NK-)Z1S2kETA{3J zZ05f($(=1U6axde4Nr=598;UzimoR7E>grkF!+VnhL#$CH>rL#2hpG-9Fdb>#|#Ti zS8L_%5}11v=+qKUQx@jL79C)2{wa@sgc>c;O)nAAobPIG`z1q; zf=v!&7lgU6;|_=;m$pF3q;0dc2_o;0i6g7QMdtR2Z7mcbdxfCs#yaPYocqihf9uUL zw~K6=ww=9>>)yHW8uWfk#!qQfDrMN77h2)-hBt3B`E{u{H4<{1!%W9Rl+1f3Yjj^0 zFC>GOWpm9~|GFa|T0j*W7>UZ_n@B?=1{D z(;PHy_LX<)LcUi>hL4}TK6Km{-B#Olbc|Lroc?toNen+u8cd$!r07@BDB`sDcyTKK zSJHRwD=8UQIqjoKgDGZB{#k^KEROllqz$1a;ctT&p980#bGR8PZ9h6CyyD3EpGM}f ZO&e0|elF~A0Vjz_`;GVI?RC2Ne*l7hb87$q From 1b4dc910b3e0e64d9111dc2f7a5016f1d233e0e9 Mon Sep 17 00:00:00 2001 From: mdciri Date: Thu, 28 Nov 2024 16:40:58 +0100 Subject: [PATCH 34/66] Update src.modules --- apps/chatbot/.env.example | 1 + apps/chatbot/src/modules/chatbot.py | 18 ++++---- apps/chatbot/src/modules/engine.py | 57 +++++++++++++++----------- apps/chatbot/src/modules/evaluation.py | 10 ++--- 4 files changed, 51 insertions(+), 35 deletions(-) diff --git a/apps/chatbot/.env.example b/apps/chatbot/.env.example index be55ca80ae..17e16d4986 100644 --- a/apps/chatbot/.env.example +++ b/apps/chatbot/.env.example @@ -21,6 +21,7 @@ CHB_MODEL_ID=... CHB_MODEL_TEMPERATURE=... CHB_MODEL_MAXTOKENS=... CHB_EMBED_MODEL_ID=... +CHB_USE_CHAT_ENGINE=True CHB_ENGINE_SIMILARITY_TOPK=... CHB_ENGINE_SIMILARITY_CUTOFF=... CHB_ENGINE_USE_ASYNC=True diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index 4ce8a2550d..62d87083c6 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -30,13 +30,14 @@ USE_PRESIDIO = True if (os.getenv("CHB_USE_PRESIDIO", "True")).lower() == "true" else False +USE_CHAT_ENGINE = True if (os.getenv("CHB_USE_CHAT_ENGINE", "True")).lower() == "true" else False USE_ASYNC = True if (os.getenv('CHB_ENGINE_USE_ASYNC', "True")).lower() == "true" else False USE_STREAMING = True if (os.getenv('CHB_ENGINE_USE_STREAMING', "False")).lower() == "true" else False RESPONSE_TYPE = Union[ Response, StreamingResponse, AsyncStreamingResponse, PydanticResponse, AgentChatResponse, StreamingAgentChatResponse ] -PREFIX_MESSAGE = ( +SYSTEM_PROMPT = ( "You are the virtual PagoPA S.p.A. assistant. Your name is Discovery.\n" "Your role is to provide accurate, professional, and helpful responses to users' queries regarding " "the PagoPA DevPortal documentation available at: https://dev.developer.pagopa.it" @@ -55,12 +56,14 @@ class Chatbot(): def __init__( self, - params, - prompts + params: dict, + prompts: dict, + use_chat_engine: bool | None = None ): self.params = params self.prompts = prompts + self.use_chat_engine = use_chat_engine if use_chat_engine else USE_CHAT_ENGINE if USE_PRESIDIO: self.pii = PresidioPII(config=params["config_presidio"]) @@ -80,11 +83,12 @@ def __init__( text_qa_template = self.qa_prompt_tmpl, refine_template = self.ref_prompt_tmpl, condense_template = self.condense_prompt_tmpl, - verbose=self.params["engine"]["verbose"] + verbose = self.params["engine"]["verbose"], + use_chat_engine = self.use_chat_engine ) - self.prefix_message = ChatMessage( + self.system_message = ChatMessage( role = self.model.metadata.system_role, - content = PREFIX_MESSAGE + content = SYSTEM_PROMPT ) if isinstance(self.engine, BaseChatEngine) else None self.instrumentor = LlamaIndexInstrumentor( public_key = LANGFUSE_PUBLIC_KEY, @@ -191,7 +195,7 @@ def mask_pii(self, message: str) -> str: def _messages_to_chathistory(self, messages: Optional[List[dict]] = None) -> List[ChatMessage]: - chat_history = [self.prefix_message] + chat_history = [self.system_message] if messages: for message in messages: chat_history += [ diff --git a/apps/chatbot/src/modules/engine.py b/apps/chatbot/src/modules/engine.py index 8d3d40cdf2..d7c54a62c5 100644 --- a/apps/chatbot/src/modules/engine.py +++ b/apps/chatbot/src/modules/engine.py @@ -3,7 +3,7 @@ from llama_index.core.llms.llm import LLM from llama_index.core.retrievers import AutoMergingRetriever from llama_index.core.query_engine import RetrieverQueryEngine -from llama_index.core.chat_engine import CondenseQuestionChatEngine +from llama_index.core.chat_engine import CondensePlusContextChatEngine from llama_index.core.postprocessor import SimilarityPostprocessor from dotenv import load_dotenv @@ -12,10 +12,16 @@ load_dotenv() -SIMILARITY_TOPK = os.getenv('CHB_ENGINE_SIMILARITY_TOPK', "5") -SIMILARITY_CUTOFF = os.getenv('CHB_ENGINE_SIMILARITY_CUTOFF', "0.55") -USE_ASYNC = True if (os.getenv('CHB_ENGINE_USE_ASYNC', "True")).lower() == "true" else False -USE_STREAMING = True if (os.getenv('CHB_ENGINE_USE_STREAMING', "False")).lower() == "true" else False +USE_CHAT_ENGINE = True if (os.getenv("CHB_USE_CHAT_ENGINE", "True")).lower() == "true" else False +SIMILARITY_TOPK = os.getenv("CHB_ENGINE_SIMILARITY_TOPK", "5") +SIMILARITY_CUTOFF = os.getenv("CHB_ENGINE_SIMILARITY_CUTOFF", "0.55") +USE_ASYNC = True if (os.getenv("CHB_ENGINE_USE_ASYNC", "True")).lower() == "true" else False +USE_STREAMING = True if (os.getenv("CHB_ENGINE_USE_STREAMING", "False")).lower() == "true" else False +SYSTEM_PROMPT = ( + "You are the virtual PagoPA S.p.A. assistant. Your name is Discovery.\n" + "Your role is to provide accurate, professional, and helpful responses to users' queries regarding " + "the PagoPA DevPortal documentation available at: https://dev.developer.pagopa.it" +) def get_automerging_engine( @@ -26,7 +32,11 @@ def get_automerging_engine( refine_template: PromptTemplate | None = None, condense_template: PromptTemplate | None = None, verbose: bool = True, - ) -> (RetrieverQueryEngine | CondenseQuestionChatEngine): + use_chat_engine: bool | None = None + ) -> (RetrieverQueryEngine | CondensePlusContextChatEngine): + + + use_chat_engine = use_chat_engine if use_chat_engine else USE_CHAT_ENGINE base_retriever = index.as_retriever( similarity_top_k=int(SIMILARITY_TOPK) @@ -40,22 +50,23 @@ def get_automerging_engine( similarity_cutoff=float(SIMILARITY_CUTOFF) ) - automerging_engine = RetrieverQueryEngine.from_args( - retriever, - llm=llm, - response_mode=response_mode, - node_postprocessors=[ - similarity_postprocessor - ], - text_qa_template=text_qa_template, - refine_template=refine_template, - use_async=USE_ASYNC, - streaming=USE_STREAMING + if use_chat_engine: + return CondensePlusContextChatEngine.from_defaults( + retriever = retriever, + llm = llm, + context_prompt = text_qa_template, + context_refine_prompt = refine_template, + condense_prompt = condense_template, + node_postprocessors = [similarity_postprocessor] ) - - automerging_engine = CondenseQuestionChatEngine.from_defaults( - query_engine = automerging_engine, - condense_question_prompt = condense_template + else: + return RetrieverQueryEngine.from_args( + retriever, + llm = llm, + response_mode = response_mode, + node_postprocessors = [similarity_postprocessor], + text_qa_template = text_qa_template, + refine_template = refine_template, + use_async = USE_ASYNC, + streaming = USE_STREAMING ) - - return automerging_engine \ No newline at end of file diff --git a/apps/chatbot/src/modules/evaluation.py b/apps/chatbot/src/modules/evaluation.py index 4b520f7bf2..9e0278933b 100644 --- a/apps/chatbot/src/modules/evaluation.py +++ b/apps/chatbot/src/modules/evaluation.py @@ -18,7 +18,7 @@ ContextRelevancyEvaluator ) from llama_index.core.evaluation.base import BaseEvaluator, EvaluationResult -from llama_index.core.evaluation.eval_utils import aget_responses +from llama_index.core.evaluation.eval_utils import get_responses from src.modules.chatbot import Chatbot from src.modules.models import get_llm @@ -158,7 +158,7 @@ def table_results(responses, eval_results): params = yaml.safe_load(open("config/params.yaml", "r")) prompts = yaml.safe_load(open("config/prompts.yaml", "r")) eval_prompts = yaml.safe_load(open("config/eval_prompts.yaml", "r")) - bot = Chatbot(params, prompts) + bot = Chatbot(params, prompts, use_chat_engine=False) eval_model = get_llm() # load FAQs @@ -190,18 +190,18 @@ def table_results(responses, eval_results): batch_runner = BatchEvalRunner(evaluator_dict, workers=12, show_progress=True) # get predition responses - pred_responses = asyncio.run(aget_responses(questions, bot.engine._query_engine, show_progress=True)) + pred_responses = get_responses(questions, bot.engine, show_progress=True) for i, pr in enumerate(pred_responses): after = bot._get_response_str(pr) pred_responses[i].response = after # get evaluation results - eval_results = asyncio.run(batch_runner.aevaluate_responses( + eval_results = batch_runner.evaluate_responses( questions, responses=pred_responses, reference=ref_responses - )) + ) # save results now = datetime.datetime.now() From 699b8b7de7c147a966506cd900edf40074d8d875 Mon Sep 17 00:00:00 2001 From: mdciri Date: Thu, 28 Nov 2024 16:41:16 +0100 Subject: [PATCH 35/66] Update docker compose.yaml --- apps/chatbot/docker/compose.yaml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/chatbot/docker/compose.yaml b/apps/chatbot/docker/compose.yaml index 9f08d83bdf..aa6fbdbe75 100644 --- a/apps/chatbot/docker/compose.yaml +++ b/apps/chatbot/docker/compose.yaml @@ -23,7 +23,7 @@ services: - ntw postgres: - image: postgres + image: postgres:17.2-alpine restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] @@ -33,7 +33,7 @@ services: ports: - "5432:5432" volumes: - - database_data:/var/lib/postgresql/data + - postgres_data:/var/lib/postgresql/data env_file: ../.env.local networks: - ntw @@ -54,6 +54,8 @@ services: ports: - "6379:6379" - "8001:8001" + volumes: + - redis_data:/var/lib/redis/data networks: - ntw @@ -87,7 +89,9 @@ services: - ntw volumes: - database_data: + postgres_data: + driver: local + redis_data: driver: local networks: From eb5d59eebac3bbdac4568026ae9fd9fff20aaa44 Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Fri, 29 Nov 2024 10:33:35 +0100 Subject: [PATCH 36/66] chore: redis data persistence, frontend build --- apps/chatbot/docker/compose.yaml | 2 +- apps/chatbot/docker/docker-compose-up-api.sh | 2 +- package-lock.json | 179 ++++++++++++++++++- 3 files changed, 180 insertions(+), 3 deletions(-) diff --git a/apps/chatbot/docker/compose.yaml b/apps/chatbot/docker/compose.yaml index aa6fbdbe75..36c698f080 100644 --- a/apps/chatbot/docker/compose.yaml +++ b/apps/chatbot/docker/compose.yaml @@ -55,7 +55,7 @@ services: - "6379:6379" - "8001:8001" volumes: - - redis_data:/var/lib/redis/data + - redis_data:/data networks: - ntw diff --git a/apps/chatbot/docker/docker-compose-up-api.sh b/apps/chatbot/docker/docker-compose-up-api.sh index ffb89369ea..05cfd55912 100755 --- a/apps/chatbot/docker/docker-compose-up-api.sh +++ b/apps/chatbot/docker/docker-compose-up-api.sh @@ -1,2 +1,2 @@ #!/bin/bash -docker compose --env-file .env -f docker/compose.yaml -p chatbot up api +docker compose -f docker/compose.yaml -p chatbot up api diff --git a/package-lock.json b/package-lock.json index 3b410b8de4..59673223d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1794,6 +1794,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity-provider/-/client-cognito-identity-provider-3.696.0.tgz", "integrity": "sha512-hC31OhTlchMkIVExJTLtisay9BgWkHkV1qW/OZhaLiUeiM3FlDi+80ZGaiSg1hoFgOUR5SQL1kEf177/6PWJgg==", + "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -1845,6 +1846,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "dev": true, "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -1859,6 +1861,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1870,6 +1873,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -1882,6 +1886,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -1894,6 +1899,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dev": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -1907,6 +1913,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "dev": true, "dependencies": { "tslib": "^2.6.2" } @@ -1915,6 +1922,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dev": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -1925,6 +1933,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1936,6 +1945,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -1948,6 +1958,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -1960,6 +1971,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.696.0.tgz", "integrity": "sha512-q5TTkd08JS0DOkHfUL853tuArf7NrPeqoS5UOvqJho8ibV9Ak/a/HO4kNvy9Nj3cib/toHYHsQIEtecUPSUUrQ==", + "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -2008,6 +2020,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.696.0.tgz", "integrity": "sha512-ikxQ3mo86d1mAq5zTaQAh8rLBERwL+I4MUYu/IVYW2hhl9J2SDsl0SgnKeXQG6S8zWuHcBO587zsZaRta1MQ/g==", + "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -2060,6 +2073,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.696.0.tgz", "integrity": "sha512-eJOxR8/UyI7kGSRyE751Ea7MKEzllQs7eNveDJy9OP4t/jsN/P19HJ1YHeA1np40JRTUBfqa6WLAAiIXsk8rkg==", + "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -2110,6 +2124,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.696.0.tgz", "integrity": "sha512-3c9III1k03DgvRZWg8vhVmfIXPG6hAciN9MzQTzqGngzWAELZF/WONRTRQuDFixVtarQatmLHYVw/atGeA2Byw==", + "dev": true, "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/core": "^2.5.3", @@ -2131,6 +2146,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.696.0.tgz", "integrity": "sha512-T9iMFnJL7YTlESLpVFT3fg1Lkb1lD+oiaIC8KMpepb01gDUBIpj9+Y+pA/cgRWW0yRxmkDXNazAE2qQTVFGJzA==", + "dev": true, "dependencies": { "@aws-sdk/core": "3.696.0", "@aws-sdk/types": "3.696.0", @@ -2146,6 +2162,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.696.0.tgz", "integrity": "sha512-GV6EbvPi2eq1+WgY/o2RFA3P7HGmnkIzCNmhwtALFlqMroLYWKE7PSeHw66Uh1dFQeVESn0/+hiUNhu1mB0emA==", + "dev": true, "dependencies": { "@aws-sdk/core": "3.696.0", "@aws-sdk/types": "3.696.0", @@ -2166,6 +2183,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.696.0.tgz", "integrity": "sha512-9WsZZofjPjNAAZhIh7c7FOhLK8CR3RnGgUm1tdZzV6ZSM1BuS2m6rdwIilRxAh3fxxKDkmW/r/aYmmCYwA+AYA==", + "dev": true, "dependencies": { "@aws-sdk/core": "3.696.0", "@aws-sdk/credential-provider-env": "3.696.0", @@ -2191,6 +2209,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.696.0.tgz", "integrity": "sha512-8F6y5FcfRuMJouC5s207Ko1mcVvOXReBOlJmhIwE4QH1CnO/CliIyepnAZrRQ659mo5wIuquz6gXnpYbitEVMg==", + "dev": true, "dependencies": { "@aws-sdk/credential-provider-env": "3.696.0", "@aws-sdk/credential-provider-http": "3.696.0", @@ -2213,6 +2232,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.696.0.tgz", "integrity": "sha512-mL1RcFDe9sfmyU5K1nuFkO8UiJXXxLX4JO1gVaDIOvPqwStpUAwi3A1BoeZhWZZNQsiKI810RnYGo0E0WB/hUA==", + "dev": true, "dependencies": { "@aws-sdk/core": "3.696.0", "@aws-sdk/types": "3.696.0", @@ -2229,6 +2249,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.696.0.tgz", "integrity": "sha512-4SSZ9Nk08JSu4/rX1a+dEac/Ims1HCXfV7YLUe5LGdtRLSKRoQQUy+hkFaGYoSugP/p1UfUPl3BuTO9Vv8z1pA==", + "dev": true, "dependencies": { "@aws-sdk/client-sso": "3.696.0", "@aws-sdk/core": "3.696.0", @@ -2247,6 +2268,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.696.0.tgz", "integrity": "sha512-XJ/CVlWChM0VCoc259vWguFUjJDn/QwDqHwbx+K9cg3v6yrqXfK5ai+p/6lx0nQpnk4JzPVeYYxWRpaTsGC9rg==", + "dev": true, "dependencies": { "@aws-sdk/core": "3.696.0", "@aws-sdk/types": "3.696.0", @@ -2265,6 +2287,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.696.0.tgz", "integrity": "sha512-zELJp9Ta2zkX7ELggMN9qMCgekqZhFC5V2rOr4hJDEb/Tte7gpfKSObAnw/3AYiVqt36sjHKfdkoTsuwGdEoDg==", + "dev": true, "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/protocol-http": "^4.1.7", @@ -2279,6 +2302,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.696.0.tgz", "integrity": "sha512-KhkHt+8AjCxcR/5Zp3++YPJPpFQzxpr+jmONiT/Jw2yqnSngZ0Yspm5wGoRx2hS1HJbyZNuaOWEGuJoxLeBKfA==", + "dev": true, "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/types": "^3.7.1", @@ -2292,6 +2316,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.696.0.tgz", "integrity": "sha512-si/maV3Z0hH7qa99f9ru2xpS5HlfSVcasRlNUXKSDm611i7jFMWwGNLUOXFAOLhXotPX5G3Z6BLwL34oDeBMug==", + "dev": true, "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/protocol-http": "^4.1.7", @@ -2306,6 +2331,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.696.0.tgz", "integrity": "sha512-Lvyj8CTyxrHI6GHd2YVZKIRI5Fmnugt3cpJo0VrKKEgK5zMySwEZ1n4dqPK6czYRWKd5+WnYHYAuU+Wdk6Jsjw==", + "dev": true, "dependencies": { "@aws-sdk/core": "3.696.0", "@aws-sdk/types": "3.696.0", @@ -2323,6 +2349,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.696.0.tgz", "integrity": "sha512-7EuH142lBXjI8yH6dVS/CZeiK/WZsmb/8zP6bQbVYpMrppSTgB3MzZZdxVZGzL5r8zPQOU10wLC4kIMy0qdBVQ==", + "dev": true, "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/node-config-provider": "^3.1.11", @@ -2339,6 +2366,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.696.0.tgz", "integrity": "sha512-fvTcMADrkwRdNwVmJXi2pSPf1iizmUqczrR1KusH4XehI/KybS4U6ViskRT0v07vpxwL7x+iaD/8fR0PUu5L/g==", + "dev": true, "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/property-provider": "^3.1.9", @@ -2357,6 +2385,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.696.0.tgz", "integrity": "sha512-9rTvUJIAj5d3//U5FDPWGJ1nFJLuWb30vugGOrWk7aNZ6y9tuA3PI7Cc9dP8WEXKVyK1vuuk8rSFP2iqXnlgrw==", + "dev": true, "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -2369,6 +2398,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.696.0.tgz", "integrity": "sha512-T5s0IlBVX+gkb9g/I6CLt4yAZVzMSiGnbUqWihWsHvQR1WOoIcndQy/Oz/IJXT9T2ipoy7a80gzV6a5mglrioA==", + "dev": true, "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/types": "^3.7.1", @@ -2383,6 +2413,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.696.0.tgz", "integrity": "sha512-Z5rVNDdmPOe6ELoM5AhF/ja5tSjbe6ctSctDPb0JdDf4dT0v2MfwhJKzXju2RzX8Es/77Glh7MlaXLE0kCB9+Q==", + "dev": true, "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/types": "^3.7.1", @@ -2394,6 +2425,7 @@ "version": "3.696.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.696.0.tgz", "integrity": "sha512-KhKqcfyXIB0SCCt+qsu4eJjsfiOrNzK5dCV7RAW2YIpp+msxGUUX0NdRE9rkzjiv+3EMktgJm3eEIS+yxtlVdQ==", + "dev": true, "dependencies": { "@aws-sdk/middleware-user-agent": "3.696.0", "@aws-sdk/types": "3.696.0", @@ -2417,6 +2449,7 @@ "version": "3.1.8", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.8.tgz", "integrity": "sha512-+3DOBcUn5/rVjlxGvUPKc416SExarAQ+Qe0bqk30YSUjbepwpS7QN0cyKUSifvLJhdMZ0WPzPP5ymut0oonrpQ==", + "dev": true, "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -2429,6 +2462,7 @@ "version": "3.0.12", "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.12.tgz", "integrity": "sha512-YAJP9UJFZRZ8N+UruTeq78zkdjUHmzsY62J4qKWZ4SXB4QXJ/+680EfXXgkYA2xj77ooMqtUY9m406zGNqwivQ==", + "dev": true, "dependencies": { "@smithy/node-config-provider": "^3.1.11", "@smithy/types": "^3.7.1", @@ -2444,6 +2478,7 @@ "version": "2.5.3", "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.3.tgz", "integrity": "sha512-96uW8maifUSmehaeW7uydWn7wBc98NEeNI3zN8vqakGpyCQgzyJaA64Z4FCOUmAdCJkhppd/7SZ798Fo4Xx37g==", + "dev": true, "dependencies": { "@smithy/middleware-serde": "^3.0.10", "@smithy/protocol-http": "^4.1.7", @@ -2462,6 +2497,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.7.tgz", "integrity": "sha512-cEfbau+rrWF8ylkmmVAObOmjbTIzKyUC5TkBL58SbLywD0RCBC4JAUKbmtSm2w5KUJNRPGgpGFMvE2FKnuNlWQ==", + "dev": true, "dependencies": { "@smithy/node-config-provider": "^3.1.11", "@smithy/property-provider": "^3.1.10", @@ -2477,6 +2513,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.1.tgz", "integrity": "sha512-bH7QW0+JdX0bPBadXt8GwMof/jz0H28I84hU1Uet9ISpzUqXqRQ3fEZJ+ANPOhzSEczYvANNl3uDQDYArSFDtA==", + "dev": true, "dependencies": { "@smithy/protocol-http": "^4.1.7", "@smithy/querystring-builder": "^3.0.10", @@ -2489,6 +2526,7 @@ "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.10.tgz", "integrity": "sha512-3zWGWCHI+FlJ5WJwx73Mw2llYR8aflVyZN5JhoqLxbdPZi6UyKSdCeXAWJw9ja22m6S6Tzz1KZ+kAaSwvydi0g==", + "dev": true, "dependencies": { "@smithy/types": "^3.7.1", "@smithy/util-buffer-from": "^3.0.0", @@ -2503,6 +2541,7 @@ "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.10.tgz", "integrity": "sha512-Lp2L65vFi+cj0vFMu2obpPW69DU+6O5g3086lmI4XcnRCG8PxvpWC7XyaVwJCxsZFzueHjXnrOH/E0pl0zikfA==", + "dev": true, "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -2512,6 +2551,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -2523,6 +2563,7 @@ "version": "3.0.12", "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.12.tgz", "integrity": "sha512-1mDEXqzM20yywaMDuf5o9ue8OkJ373lSPbaSjyEvkWdqELhFMyNNgKGWL/rCSf4KME8B+HlHKuR8u9kRj8HzEQ==", + "dev": true, "dependencies": { "@smithy/protocol-http": "^4.1.7", "@smithy/types": "^3.7.1", @@ -2536,6 +2577,7 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.3.tgz", "integrity": "sha512-Hdl9296i/EMptaX7agrSzJZDiz5Y8XPUeBbctTmMtnCguGpqfU3jVsTUan0VLaOhsnquqWLL8Bl5HrlbVGT1og==", + "dev": true, "dependencies": { "@smithy/core": "^2.5.3", "@smithy/middleware-serde": "^3.0.10", @@ -2554,6 +2596,7 @@ "version": "3.0.27", "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.27.tgz", "integrity": "sha512-H3J/PjJpLL7Tt+fxDKiOD25sMc94YetlQhCnYeNmina2LZscAdu0ZEZPas/kwePHABaEtqp7hqa5S4UJgMs1Tg==", + "dev": true, "dependencies": { "@smithy/node-config-provider": "^3.1.11", "@smithy/protocol-http": "^4.1.7", @@ -2573,6 +2616,7 @@ "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.10.tgz", "integrity": "sha512-MnAuhh+dD14F428ubSJuRnmRsfOpxSzvRhaGVTvd/lrUDE3kxzCCmH8lnVTvoNQnV2BbJ4c15QwZ3UdQBtFNZA==", + "dev": true, "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -2585,6 +2629,7 @@ "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.10.tgz", "integrity": "sha512-grCHyoiARDBBGPyw2BeicpjgpsDFWZZxptbVKb3CRd/ZA15F/T6rZjCCuBUjJwdck1nwUuIxYtsS4H9DDpbP5w==", + "dev": true, "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -2597,6 +2642,7 @@ "version": "3.1.11", "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.11.tgz", "integrity": "sha512-URq3gT3RpDikh/8MBJUB+QGZzfS7Bm6TQTqoh4CqE8NBuyPkWa5eUXj0XFcFfeZVgg3WMh1u19iaXn8FvvXxZw==", + "dev": true, "dependencies": { "@smithy/property-provider": "^3.1.10", "@smithy/shared-ini-file-loader": "^3.1.11", @@ -2611,6 +2657,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.1.tgz", "integrity": "sha512-fr+UAOMGWh6bn4YSEezBCpJn9Ukp9oR4D32sCjCo7U81evE11YePOQ58ogzyfgmjIO79YeOdfXXqr0jyhPQeMg==", + "dev": true, "dependencies": { "@smithy/abort-controller": "^3.1.8", "@smithy/protocol-http": "^4.1.7", @@ -2626,6 +2673,7 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.10.tgz", "integrity": "sha512-n1MJZGTorTH2DvyTVj+3wXnd4CzjJxyXeOgnTlgNVFxaaMeT4OteEp4QrzF8p9ee2yg42nvyVK6R/awLCakjeQ==", + "dev": true, "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -2638,6 +2686,7 @@ "version": "4.1.7", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.7.tgz", "integrity": "sha512-FP2LepWD0eJeOTm0SjssPcgqAlDFzOmRXqXmGhfIM52G7Lrox/pcpQf6RP4F21k0+O12zaqQt5fCDOeBtqY6Cg==", + "dev": true, "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -2650,6 +2699,7 @@ "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.10.tgz", "integrity": "sha512-nT9CQF3EIJtIUepXQuBFb8dxJi3WVZS3XfuDksxSCSn+/CzZowRLdhDn+2acbBv8R6eaJqPupoI/aRFIImNVPQ==", + "dev": true, "dependencies": { "@smithy/types": "^3.7.1", "@smithy/util-uri-escape": "^3.0.0", @@ -2663,6 +2713,7 @@ "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.10.tgz", "integrity": "sha512-Oa0XDcpo9SmjhiDD9ua2UyM3uU01ZTuIrNdZvzwUTykW1PM8o2yJvMh1Do1rY5sUQg4NDV70dMi0JhDx4GyxuQ==", + "dev": true, "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -2675,6 +2726,7 @@ "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.10.tgz", "integrity": "sha512-zHe642KCqDxXLuhs6xmHVgRwy078RfqxP2wRDpIyiF8EmsWXptMwnMwbVa50lw+WOGNrYm9zbaEg0oDe3PTtvQ==", + "dev": true, "dependencies": { "@smithy/types": "^3.7.1" }, @@ -2686,6 +2738,7 @@ "version": "3.1.11", "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.11.tgz", "integrity": "sha512-AUdrIZHFtUgmfSN4Gq9nHu3IkHMa1YDcN+s061Nfm+6pQ0mJy85YQDB0tZBCmls0Vuj22pLwDPmL92+Hvfwwlg==", + "dev": true, "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -2698,6 +2751,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.3.tgz", "integrity": "sha512-pPSQQ2v2vu9vc8iew7sszLd0O09I5TRc5zhY71KA+Ao0xYazIG+uLeHbTJfIWGO3BGVLiXjUr3EEeCcEQLjpWQ==", + "dev": true, "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "@smithy/protocol-http": "^4.1.7", @@ -2716,6 +2770,7 @@ "version": "3.4.4", "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.4.tgz", "integrity": "sha512-dPGoJuSZqvirBq+yROapBcHHvFjChoAQT8YPWJ820aPHHiowBlB3RL1Q4kPT1hx0qKgJuf+HhyzKi5Gbof4fNA==", + "dev": true, "dependencies": { "@smithy/core": "^2.5.3", "@smithy/middleware-endpoint": "^3.2.3", @@ -2733,6 +2788,7 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.1.tgz", "integrity": "sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA==", + "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -2744,6 +2800,7 @@ "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.10.tgz", "integrity": "sha512-j90NUalTSBR2NaZTuruEgavSdh8MLirf58LoGSk4AtQfyIymogIhgnGUU2Mga2bkMkpSoC9gxb74xBXL5afKAQ==", + "dev": true, "dependencies": { "@smithy/querystring-parser": "^3.0.10", "@smithy/types": "^3.7.1", @@ -2754,6 +2811,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "dev": true, "dependencies": { "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", @@ -2767,6 +2825,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "dev": true, "dependencies": { "tslib": "^2.6.2" } @@ -2775,6 +2834,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -2786,6 +2846,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dev": true, "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" @@ -2798,6 +2859,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -2809,6 +2871,7 @@ "version": "3.0.27", "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.27.tgz", "integrity": "sha512-GV8NvPy1vAGp7u5iD/xNKUxCorE4nQzlyl057qRac+KwpH5zq8wVq6rE3lPPeuFLyQXofPN6JwxL1N9ojGapiQ==", + "dev": true, "dependencies": { "@smithy/property-provider": "^3.1.10", "@smithy/smithy-client": "^3.4.4", @@ -2824,6 +2887,7 @@ "version": "3.0.27", "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.27.tgz", "integrity": "sha512-7+4wjWfZqZxZVJvDutO+i1GvL6bgOajEkop4FuR6wudFlqBiqwxw3HoH6M9NgeCd37km8ga8NPp2JacQEtAMPg==", + "dev": true, "dependencies": { "@smithy/config-resolver": "^3.0.12", "@smithy/credential-provider-imds": "^3.2.7", @@ -2841,6 +2905,7 @@ "version": "2.1.6", "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.6.tgz", "integrity": "sha512-mFV1t3ndBh0yZOJgWxO9J/4cHZVn5UG1D8DeCc6/echfNkeEJWu9LD7mgGH5fHrEdR7LDoWw7PQO6QiGpHXhgA==", + "dev": true, "dependencies": { "@smithy/node-config-provider": "^3.1.11", "@smithy/types": "^3.7.1", @@ -2854,6 +2919,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -2865,6 +2931,7 @@ "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.10.tgz", "integrity": "sha512-eJO+/+RsrG2RpmY68jZdwQtnfsxjmPxzMlQpnHKjFPwrYqvlcT+fHdT+ZVwcjlWSrByOhGr9Ff2GG17efc192A==", + "dev": true, "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -2877,6 +2944,7 @@ "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.10.tgz", "integrity": "sha512-1l4qatFp4PiU6j7UsbasUHL2VU023NRB/gfaa1M0rDqVrRN4g3mCArLRyH3OuktApA4ye+yjWQHjdziunw2eWA==", + "dev": true, "dependencies": { "@smithy/service-error-classification": "^3.0.10", "@smithy/types": "^3.7.1", @@ -2890,6 +2958,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.3.1.tgz", "integrity": "sha512-Ff68R5lJh2zj+AUTvbAU/4yx+6QPRzg7+pI7M1FbtQHcRIp7xvguxVsQBKyB3fwiOwhAKu0lnNyYBaQfSW6TNw==", + "dev": true, "dependencies": { "@smithy/fetch-http-handler": "^4.1.1", "@smithy/node-http-handler": "^3.3.1", @@ -2908,6 +2977,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -2919,6 +2989,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dev": true, "dependencies": { "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" @@ -2931,6 +3002,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -52942,7 +53014,6 @@ "packages/active-campaign-client": { "version": "0.1.1", "dependencies": { - "@aws-sdk/client-cognito-identity-provider": "^3.696.0", "@types/aws-lambda": "^8.10.126", "@types/jest": "^29.5.1", "aws-lambda": "^1.0.7", @@ -52951,6 +53022,7 @@ "typescript": "^5.0.2" }, "devDependencies": { + "@aws-sdk/client-cognito-identity-provider": "^3.696.0", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "^8.57.1", "dotenv": "16.4.5", @@ -53265,6 +53337,111 @@ "node": ">=18.0.0 <=20.x.x", "npm": ">=6.0.0" } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz", + "integrity": "sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz", + "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz", + "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz", + "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz", + "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz", + "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz", + "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } } } } From 31a6e7d4a5a63ce5ea9daa6c7dbd4a068cb7274b Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Fri, 29 Nov 2024 12:08:47 +0100 Subject: [PATCH 37/66] chore: langfuse host --- apps/chatbot/scripts/run.local.sh | 4 ++-- apps/chatbot/src/modules/chatbot.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/chatbot/scripts/run.local.sh b/apps/chatbot/scripts/run.local.sh index 8d39c6a4d5..95bab83f65 100755 --- a/apps/chatbot/scripts/run.local.sh +++ b/apps/chatbot/scripts/run.local.sh @@ -3,8 +3,8 @@ echo '-=-=-=-=-=-=-=-=-= init DynamoDB -==-=-=-=-=-=-=-=-' ./scripts/dynamodb-init.sh -echo '-=-=-=-=-=-=-= create redis index =-=-=-=-=-=-=-=-' -./scripts/create_redis_index.sh +#echo '-=-=-=-=-=-=-= create redis index =-=-=-=-=-=-=-=-' +#./scripts/create_redis_index.sh echo '-=-=-=-=-=-=-=-=-= run FastAPI =-==-=-=-=-=-=-=-=-' fastapi dev src/app/main.py --port 8080 --host 0.0.0.0 diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index 62d87083c6..2ba92149bd 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -44,7 +44,7 @@ ) LANGFUSE_PUBLIC_KEY = os.getenv("LANGFUSE_INIT_PROJECT_PUBLIC_KEY") LANGFUSE_SECRET_KEY = os.getenv("LANGFUSE_INIT_PROJECT_SECRET_KEY") -LANGFUSE_HOST = os.getenv("NEXTAUTH_URL") +LANGFUSE_HOST = os.getenv("CHB_LANGFUSE_HOST") LANGFUSE_TAG = os.getenv("LANGFUSE_TAG", "development") LANGFUSE = Langfuse( public_key = LANGFUSE_PUBLIC_KEY, From b6c5217807270c7ad594b7f1edc1a7ed4d88761c Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Fri, 29 Nov 2024 12:48:43 +0100 Subject: [PATCH 38/66] chore: readme --- apps/chatbot/README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/apps/chatbot/README.md b/apps/chatbot/README.md index 24c10f63cf..752fe432ab 100644 --- a/apps/chatbot/README.md +++ b/apps/chatbot/README.md @@ -60,9 +60,18 @@ pytest ## Docker -In order to run the chatbot locally, you need first to install [Docker Compose](https://docs.docker.com/compose/install/), and then run the two following bash scripts: +In order to run the chatbot locally for the first time, you need to: + +- install [Docker Compose](https://docs.docker.com/compose/install/) +- create `.env.local` file running: + cp .env.example .env.local +- run the following bash scripts: ./docker/docker-compose-build-local.sh + ./docker/docker-compose-run-create_index.sh + +In this way, the docker images are built and the vector index is stored in Redis. Now you can start the API running: + ./docker/docker-compose-up-api.sh -Notice that the `docker/compose.yaml` needs `.env.local` file with the environment variables. +Notice that the `docker/compose.yaml` needs `.env.local` file with the correct environment variables. From d404aec855393b1aa45b5c187ac49b15c011f6ae Mon Sep 17 00:00:00 2001 From: mdciri Date: Fri, 29 Nov 2024 14:13:14 +0100 Subject: [PATCH 39/66] Update README --- .gitmodules | 2 +- apps/chatbot/README.md | 34 ++++++++++++++++++++-------------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/.gitmodules b/.gitmodules index 871ef6b87b..3e82eeea1e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "apps/nextjs-website/.tmp-docs"] path = apps/nextjs-website/.tmp-docs - url = https://github.com/pagopa/devportal-docs.git \ No newline at end of file + url = https://github.com/pagopa/devportal-docs.git diff --git a/apps/chatbot/README.md b/apps/chatbot/README.md index 752fe432ab..710245c4ab 100644 --- a/apps/chatbot/README.md +++ b/apps/chatbot/README.md @@ -13,6 +13,10 @@ The monitoring is done using [Langfuse](https://langfuse.com/) deployed on AWS. Create a `.env` file inside this folder and store the environment variables listed in `.env.example`. +cp .env.example .env + +Note that the envirables inside `.env` file should be pointing to the AWS infrastructure.s + ## Virtual environment Before creating your virtual environment, install [Miniconda](https://docs.anaconda.com/miniconda/#quick-command-line-install) and [Poetry](https://python-poetry.org/docs/main#installation) on your device. @@ -38,40 +42,42 @@ In this way, `PYTHONPATH` points to where the Python packages and modules are, n To reach the remote redis instance, it is necessary to open a tunnel: -``` ./scripts/redis-tunnel.sh -``` Verify that the HTML files that compose the Developer Portal documentation exist in a directory. Otherwise create the documentation. Once you have the documentation directory ready, put its path in `params` and, in the end, create the vector index doing: -``` python src/modules/create_vector_index.py --params config/params.yaml -``` This script reads the documentation, split it into chucks with gerarchical organization, and stores it on Redis. Check out the params in order to store your vector index accordingly. -## test +## Test -``` -pytest -``` +Run the tests for the chatbot and the APIs running: + + pytest ## Docker In order to run the chatbot locally for the first time, you need to: -- install [Docker Compose](https://docs.docker.com/compose/install/) +- install [Docker Compose](https://docs.docker.com/compose/install/), - create `.env.local` file running: - cp .env.example .env.local + + cp .env.example .env.local + + and fill it in, + - run the following bash scripts: - ./docker/docker-compose-build-local.sh - ./docker/docker-compose-run-create_index.sh + ./docker/docker-compose-build-local.sh + ./docker/docker-compose-run-create_index.sh + +In this way, the docker images are built and the vector index is stored in Redis. -In this way, the docker images are built and the vector index is stored in Redis. Now you can start the API running: +Now you can start the API running: ./docker/docker-compose-up-api.sh -Notice that the `docker/compose.yaml` needs `.env.local` file with the correct environment variables. +Note that the `docker/compose.yaml` needs `.env.local` file with the correct environment variables. From 583ddf5613ad70fdfbc12251b172d2a12f66457b Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Fri, 29 Nov 2024 14:19:59 +0100 Subject: [PATCH 40/66] chore: scripts --- apps/chatbot/docker/compose.yaml | 4 +++- apps/chatbot/docker/docker-compose-run-create_index.sh | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/chatbot/docker/compose.yaml b/apps/chatbot/docker/compose.yaml index 36c698f080..e9d2363bda 100644 --- a/apps/chatbot/docker/compose.yaml +++ b/apps/chatbot/docker/compose.yaml @@ -1,3 +1,4 @@ +--- services: api: build: @@ -68,7 +69,8 @@ services: volumes: - ..:/app - ../../nextjs-website/out:/app/build-devp/out - command: "python src/modules/create_vector_index.py --params config/params.yaml" + command: > + "python src/modules/create_vector_index.py --params config/params.yaml" tty: true depends_on: redis: diff --git a/apps/chatbot/docker/docker-compose-run-create_index.sh b/apps/chatbot/docker/docker-compose-run-create_index.sh index 3e03f4f306..841345d5bc 100755 --- a/apps/chatbot/docker/docker-compose-run-create_index.sh +++ b/apps/chatbot/docker/docker-compose-run-create_index.sh @@ -1,2 +1,2 @@ #!/bin/bash -docker compose --env-file .env -f docker/compose.yaml -p chatbot run create_index +docker compose -f docker/compose.yaml -p chatbot run create_index From c2d583d44af122655f3470674f7fa6a3d62b136f Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Mon, 2 Dec 2024 10:17:13 +0100 Subject: [PATCH 41/66] fix: create index command --- apps/chatbot/docker/compose.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/chatbot/docker/compose.yaml b/apps/chatbot/docker/compose.yaml index e9d2363bda..5fdec24110 100644 --- a/apps/chatbot/docker/compose.yaml +++ b/apps/chatbot/docker/compose.yaml @@ -19,7 +19,6 @@ services: langfuse: condition: service_started env_file: ../.env.local - networks: - ntw @@ -64,13 +63,12 @@ services: build: context: .. dockerfile: docker/app.local.Dockerfile + command: "python src/modules/create_vector_index.py --params config/params.yaml" ports: - "8080:8080" volumes: - ..:/app - ../../nextjs-website/out:/app/build-devp/out - command: > - "python src/modules/create_vector_index.py --params config/params.yaml" tty: true depends_on: redis: From 5a2276f6c6ccc38951d9af24c9f237cd7d5d2fdf Mon Sep 17 00:00:00 2001 From: mdciri Date: Mon, 2 Dec 2024 10:21:12 +0100 Subject: [PATCH 42/66] Update main.py --- apps/chatbot/src/app/main.py | 2 +- apps/nextjs-website/.tmp-docs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 160000 apps/nextjs-website/.tmp-docs diff --git a/apps/chatbot/src/app/main.py b/apps/chatbot/src/app/main.py index c9026c8100..4df87f6ff1 100644 --- a/apps/chatbot/src/app/main.py +++ b/apps/chatbot/src/app/main.py @@ -103,7 +103,7 @@ async def query_creation ( queriedAt = query.queriedAt bodyToReturn = { - "id": trace_id, + "id": str(uuid.uuid4()), "sessionId": session['id'], "question": query.question, "answer": answer, diff --git a/apps/nextjs-website/.tmp-docs b/apps/nextjs-website/.tmp-docs new file mode 160000 index 0000000000..ba27414f16 --- /dev/null +++ b/apps/nextjs-website/.tmp-docs @@ -0,0 +1 @@ +Subproject commit ba27414f16b693666cef9cfce2a0878e677c753e From 4d434a4491d963d1a42aabee37ba0c709b9a47d6 Mon Sep 17 00:00:00 2001 From: mdciri Date: Mon, 2 Dec 2024 11:22:02 +0100 Subject: [PATCH 43/66] Update fe package-lock.json --- package-lock.json | 210 +++++++++++++++++++++++----------------------- 1 file changed, 105 insertions(+), 105 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59673223d4..7368ffabca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18117,6 +18117,66 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@next/swc-darwin-arm64": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz", + "integrity": "sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz", + "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz", + "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz", + "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@next/swc-linux-x64-gnu": { "version": "13.4.19", "cpu": [ @@ -18145,6 +18205,51 @@ "node": ">= 10" } }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz", + "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz", + "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz", + "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "license": "MIT", @@ -53337,111 +53442,6 @@ "node": ">=18.0.0 <=20.x.x", "npm": ">=6.0.0" } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz", - "integrity": "sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz", - "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz", - "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz", - "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz", - "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz", - "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz", - "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } } } } From 9ba8e27b57fd23c3d54d2f970204378cae0a3272 Mon Sep 17 00:00:00 2001 From: mdciri Date: Mon, 2 Dec 2024 12:21:23 +0100 Subject: [PATCH 44/66] Update retrieve langfuse api key through SSM --- apps/chatbot/src/modules/chatbot.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index 2ba92149bd..afeff20e67 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -21,6 +21,7 @@ from src.modules.engine import get_automerging_engine from src.modules.handlers import EventHandler from src.modules.presidio import PresidioPII +from src.modules.utils import get_ssm_parameter from dotenv import load_dotenv @@ -42,8 +43,8 @@ "Your role is to provide accurate, professional, and helpful responses to users' queries regarding " "the PagoPA DevPortal documentation available at: https://dev.developer.pagopa.it" ) -LANGFUSE_PUBLIC_KEY = os.getenv("LANGFUSE_INIT_PROJECT_PUBLIC_KEY") -LANGFUSE_SECRET_KEY = os.getenv("LANGFUSE_INIT_PROJECT_SECRET_KEY") +LANGFUSE_PUBLIC_KEY = get_ssm_parameter(os.getenv("LANGFUSE_INIT_PROJECT_PUBLIC_KEY"), os.getenv("LANGFUSE_INIT_PROJECT_PUBLIC_KEY")) +LANGFUSE_SECRET_KEY = get_ssm_parameter(os.getenv("LANGFUSE_INIT_PROJECT_SECRET_KEY"), os.getenv("LANGFUSE_INIT_PROJECT_SECRET_KEY")) LANGFUSE_HOST = os.getenv("CHB_LANGFUSE_HOST") LANGFUSE_TAG = os.getenv("LANGFUSE_TAG", "development") LANGFUSE = Langfuse( From fd1d918e18e5b687b11718b25e48dc167a3b8360 Mon Sep 17 00:00:00 2001 From: mdciri Date: Mon, 2 Dec 2024 12:37:52 +0100 Subject: [PATCH 45/66] Update retrieve langfuse api key through SSM --- apps/chatbot/src/modules/chatbot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index afeff20e67..f1d1b81d1f 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -43,8 +43,8 @@ "Your role is to provide accurate, professional, and helpful responses to users' queries regarding " "the PagoPA DevPortal documentation available at: https://dev.developer.pagopa.it" ) -LANGFUSE_PUBLIC_KEY = get_ssm_parameter(os.getenv("LANGFUSE_INIT_PROJECT_PUBLIC_KEY"), os.getenv("LANGFUSE_INIT_PROJECT_PUBLIC_KEY")) -LANGFUSE_SECRET_KEY = get_ssm_parameter(os.getenv("LANGFUSE_INIT_PROJECT_SECRET_KEY"), os.getenv("LANGFUSE_INIT_PROJECT_SECRET_KEY")) +LANGFUSE_PUBLIC_KEY = get_ssm_parameter(os.getenv("CHB_LANGFUSE_PUBLIC_KEY"), os.getenv("LANGFUSE_INIT_PROJECT_PUBLIC_KEY")) +LANGFUSE_SECRET_KEY = get_ssm_parameter(os.getenv("CHB_LANGFUSE_SECRET_KEY"), os.getenv("LANGFUSE_INIT_PROJECT_SECRET_KEY")) LANGFUSE_HOST = os.getenv("CHB_LANGFUSE_HOST") LANGFUSE_TAG = os.getenv("LANGFUSE_TAG", "development") LANGFUSE = Langfuse( From f89cc2a544ce3ae5c5613dd8a727d959fbfc4897 Mon Sep 17 00:00:00 2001 From: mdciri Date: Mon, 2 Dec 2024 14:59:43 +0100 Subject: [PATCH 46/66] Update add and remove tag for langfuse --- apps/chatbot/src/modules/chatbot.py | 34 ++++++++++++++++++----------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index f1d1b81d1f..9b7f24cc1c 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -46,7 +46,6 @@ LANGFUSE_PUBLIC_KEY = get_ssm_parameter(os.getenv("CHB_LANGFUSE_PUBLIC_KEY"), os.getenv("LANGFUSE_INIT_PROJECT_PUBLIC_KEY")) LANGFUSE_SECRET_KEY = get_ssm_parameter(os.getenv("CHB_LANGFUSE_SECRET_KEY"), os.getenv("LANGFUSE_INIT_PROJECT_SECRET_KEY")) LANGFUSE_HOST = os.getenv("CHB_LANGFUSE_HOST") -LANGFUSE_TAG = os.getenv("LANGFUSE_TAG", "development") LANGFUSE = Langfuse( public_key = LANGFUSE_PUBLIC_KEY, secret_key = LANGFUSE_SECRET_KEY, @@ -252,12 +251,29 @@ def get_traces( return traces - def update_trace_with_feedback(self, trace_id: str, user_feedback: str) -> None: + def add_langfuse_tag(self, trace_id: str, tag: str) -> None: with self.instrumentor.observe(trace_id=trace_id) as trace: trace_info = self.get_trace(trace_id, as_dict=False) - trace.update( - tags = trace_info.tags + [user_feedback] - ) + if tag not in trace_info.tags: + trace.update( + tags = trace_info.tags + [tag] + ) + logger.info(f"Added tag {tag} to trace {trace_id}") + else: + logger.warning(f"Tag {tag} already present in trace {trace_id}") + + + def remove_langfuse_tag(self, trace_id: str, tag: str) -> None: + with self.instrumentor.observe(trace_id=trace_id) as trace: + trace_info = self.get_trace(trace_id, as_dict=False) + if tag in trace_info.tags: + tags = trace_info.tags.pop(trace_info.tags.index(tag)) + trace.update( + tags = tags + ) + logger.info(f"Removed tag {tag} from trace {trace_id}") + else: + logger.warning(f"Tag {tag} not present in trace {trace_id}") def _mask_trace(self, data: Any) -> None: @@ -304,14 +320,6 @@ def chat_generate( chat_history = self._messages_to_chathistory(messages) - if tags is None: - tags = [LANGFUSE_TAG] - elif isinstance(tags, str): - tags = [tags] - elif isinstance(tags, List[str]): - pass - else: - raise ValueError(f"Error! tags: {tags} is not acceptable. It has to be a sting, a list of string, or None") if not trace_id: logger.debug(f"[Langfuse] Trace id not provided. Generating a new one") From c622c2d37dc3ddf23569f14bfb66d85eaa7af425 Mon Sep 17 00:00:00 2001 From: mdciri Date: Mon, 2 Dec 2024 15:12:52 +0100 Subject: [PATCH 47/66] Update add and remove tag for langfuse --- apps/chatbot/src/modules/chatbot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index 9b7f24cc1c..278208744d 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -267,9 +267,9 @@ def remove_langfuse_tag(self, trace_id: str, tag: str) -> None: with self.instrumentor.observe(trace_id=trace_id) as trace: trace_info = self.get_trace(trace_id, as_dict=False) if tag in trace_info.tags: - tags = trace_info.tags.pop(trace_info.tags.index(tag)) + trace_info.tags.pop(trace_info.tags.index(tag)) trace.update( - tags = tags + tags = trace_info.tags ) logger.info(f"Removed tag {tag} from trace {trace_id}") else: From ec8b0997ff8ebc703dc4f431db3e99d5b9978594 Mon Sep 17 00:00:00 2001 From: mdciri Date: Mon, 2 Dec 2024 16:06:59 +0100 Subject: [PATCH 48/66] Update chat_generate method --- apps/chatbot/src/modules/chatbot.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index 278208744d..0433a06227 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -314,10 +314,12 @@ def chat_generate( trace_id: str | None = None, session_id: str | None = None, user_id: str | None = None, - messages: Optional[List[dict]] = None, + messages: List[dict] | None = None, tags: Union[str, List[str]] | None = None ) -> str: + if isinstance(tags, str): + tags = [tags] chat_history = self._messages_to_chathistory(messages) From 79a251d21573a5836e413e662071c34fd3be899e Mon Sep 17 00:00:00 2001 From: mdciri Date: Tue, 3 Dec 2024 12:03:46 +0100 Subject: [PATCH 49/66] Update trace id langfuse equal to dynamodb id --- apps/chatbot/src/app/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/chatbot/src/app/main.py b/apps/chatbot/src/app/main.py index 4df87f6ff1..c9026c8100 100644 --- a/apps/chatbot/src/app/main.py +++ b/apps/chatbot/src/app/main.py @@ -103,7 +103,7 @@ async def query_creation ( queriedAt = query.queriedAt bodyToReturn = { - "id": str(uuid.uuid4()), + "id": trace_id, "sessionId": session['id'], "question": query.question, "answer": answer, From 99dfa434deb0134df3f94bc0408c824697d25f95 Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Wed, 4 Dec 2024 10:29:53 +0100 Subject: [PATCH 50/66] chore: .env.example order --- apps/chatbot/.env.example | 69 +++++++++++++++++++++-------------- apps/nextjs-website/.tmp-docs | 2 +- 2 files changed, 43 insertions(+), 28 deletions(-) diff --git a/apps/chatbot/.env.example b/apps/chatbot/.env.example index 17e16d4986..f81a384d16 100644 --- a/apps/chatbot/.env.example +++ b/apps/chatbot/.env.example @@ -1,48 +1,63 @@ -environment=local -CORS_DOMAINS=["*"] -PYTHONPATH=app-path -LOG_LEVEL=DEBUG - +AUTH_COGNITO_ALLOW_ACCOUNT_LINKING=true +AUTH_COGNITO_CLIENT_ID=... +AUTH_COGNITO_CLIENT_SECRET= +AUTH_COGNITO_ISSUER=https://cognito-idp.eu-south-1.amazonaws.com/eu-south-1_xxxxxxxx +AUTH_DISABLE_SIGNUP=false +AUTH_DISABLE_USERNAME_PASSWORD=true CHB_AWS_ACCESS_KEY_ID=... -CHB_AWS_SECRET_ACCESS_KEY=... -CHB_AWS_DEFAULT_REGION=eu-south-1 CHB_AWS_BEDROCK_REGION=eu-west-3 +CHB_AWS_DEFAULT_REGION=eu-south-1 CHB_AWS_GUARDRAIL_ID=... CHB_AWS_GUARDRAIL_VERSION=... -CHB_REDIS_URL=... -CHB_WEBSITE_URL=... -CHB_REDIS_INDEX_NAME=... -CHB_LLAMAINDEX_INDEX_ID=... +CHB_AWS_SECRET_ACCESS_KEY=... CHB_DOCUMENTATION_DIR=... -CHB_USE_PRESIDIO=... -CHB_GOOGLE_API_KEY=... -CHB_PROVIDER=... -CHB_MODEL_ID=... -CHB_MODEL_TEMPERATURE=... -CHB_MODEL_MAXTOKENS=... +CHB_DYNAMODB_URL=http://locahost:8080 CHB_EMBED_MODEL_ID=... -CHB_USE_CHAT_ENGINE=True -CHB_ENGINE_SIMILARITY_TOPK=... CHB_ENGINE_SIMILARITY_CUTOFF=... +CHB_ENGINE_SIMILARITY_TOPK=... CHB_ENGINE_USE_ASYNC=True CHB_ENGINE_USE_STREAMING=... +CHB_GOOGLE_API_KEY=... +CHB_LANGFUSE_HOST=http://localhost:3000 +CHB_LLAMAINDEX_INDEX_ID=... +CHB_MODEL_ID=... +CHB_MODEL_MAXTOKENS=... +CHB_MODEL_TEMPERATURE=... +CHB_PROVIDER=... CHB_QUERY_TABLE_PREFIX=chatbot-local -CHB_DYNAMODB_URL=http://locahost:8080 -CHB_USE_PRESIDIO=True +CHB_REDIS_INDEX_NAME=... +CHB_REDIS_URL=... CHB_SESSION_MAX_DURATION_DAYS=1 - -DATABASE_URL=postgresql://postgres:postgres@postgres:5432/postgres -LANGFUSE_HOST=http://langfuse:3000 -NEXTAUTH_SECRET=mysecret -SALT=mysalt +CHB_USE_CHAT_ENGINE=True +CHB_USE_PRESIDIO=True +CHB_WEBSITE_URL=... +CORS_DOMAINS=["*"] ENCRYPTION_KEY=0000000000000000000000000000000000000000000000000000000000000000 +environment=local +LANGFUSE_HOST=http://langfuse:3000 LANGFUSE_ORG_ID=... LANGFUSE_ORG_NAME=... LANGFUSE_PROJECT_ID=... LANGFUSE_PROJECT_NAME=... LANGFUSE_PUBLIC_KEY=... LANGFUSE_SECRET_KEY=... +LANGFUSE_INIT_PROJECT_SECRET_KEY=... +LANGFUSE_INIT_USER_EMAIL=... +LANGFUSE_INIT_USER_NAME=... +LANGFUSE_INIT_USER_PASSWORD=... +LANGFUSE_TAG=development LANGFUSE_USER_EMAIL=user@example.com LANGFUSE_USER_NAME=User LANGFUSE_USER_PASSWORD=abcd1234 -LANGFUSE_TAG=development +LOG_LEVEL=DEBUG +NEXTAUTH_SECRET=mysecret +NEXTAUTH_URL=http://localhost:3001 +POSTGRES_DB=postgres +POSTGRES_HOST=localhost +POSTGRES_PASSWORD=postgres +POSTGRES_PORT=5432 +POSTGRES_USER=postgres +DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} +PYTHONPATH=app-path +SALT=mysalt +TELEMETRY_ENABLED=true diff --git a/apps/nextjs-website/.tmp-docs b/apps/nextjs-website/.tmp-docs index ba27414f16..ff6582f21f 160000 --- a/apps/nextjs-website/.tmp-docs +++ b/apps/nextjs-website/.tmp-docs @@ -1 +1 @@ -Subproject commit ba27414f16b693666cef9cfce2a0878e677c753e +Subproject commit ff6582f21f24f5fcddc910b11b5a92aff877733d From 12f753a710a813d069a4609be6de09f122c0f4ad Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Wed, 4 Dec 2024 10:37:20 +0100 Subject: [PATCH 51/66] chore: langfuse env.example --- apps/chatbot/.env.example | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/apps/chatbot/.env.example b/apps/chatbot/.env.example index f81a384d16..224c91ad64 100644 --- a/apps/chatbot/.env.example +++ b/apps/chatbot/.env.example @@ -34,21 +34,21 @@ CHB_WEBSITE_URL=... CORS_DOMAINS=["*"] ENCRYPTION_KEY=0000000000000000000000000000000000000000000000000000000000000000 environment=local -LANGFUSE_HOST=http://langfuse:3000 -LANGFUSE_ORG_ID=... -LANGFUSE_ORG_NAME=... -LANGFUSE_PROJECT_ID=... -LANGFUSE_PROJECT_NAME=... -LANGFUSE_PUBLIC_KEY=... -LANGFUSE_SECRET_KEY=... -LANGFUSE_INIT_PROJECT_SECRET_KEY=... +LAMBDA_TASK_ROOT=/home/batdevis/code/pagopa/developer-portal/apps/chatbot +LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES=false +LANGFUSE_INIT_ORG_ID=... +LANGFUSE_INIT_ORG_NAME=... +LANGFUSE_INIT_PROJECT_ID=monitor-123 +LANGFUSE_INIT_PROJECT_NAME=Monitor +LANGFUSE_INIT_PROJECT_PUBLIC_KEY=pk-xxx +LANGFUSE_INIT_PROJECT_SECRET_KEY=sk-xxx LANGFUSE_INIT_USER_EMAIL=... LANGFUSE_INIT_USER_NAME=... LANGFUSE_INIT_USER_PASSWORD=... LANGFUSE_TAG=development LANGFUSE_USER_EMAIL=user@example.com LANGFUSE_USER_NAME=User -LANGFUSE_USER_PASSWORD=abcd1234 +LANGFUSE_USER_PASSWORD=... LOG_LEVEL=DEBUG NEXTAUTH_SECRET=mysecret NEXTAUTH_URL=http://localhost:3001 From 1349abac666ca26bcedacca80bf2afe6a1dc0ed2 Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Wed, 4 Dec 2024 10:42:10 +0100 Subject: [PATCH 52/66] chore: env.example fix --- apps/chatbot/.env.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/chatbot/.env.example b/apps/chatbot/.env.example index 224c91ad64..eae9e47af6 100644 --- a/apps/chatbot/.env.example +++ b/apps/chatbot/.env.example @@ -34,7 +34,7 @@ CHB_WEBSITE_URL=... CORS_DOMAINS=["*"] ENCRYPTION_KEY=0000000000000000000000000000000000000000000000000000000000000000 environment=local -LAMBDA_TASK_ROOT=/home/batdevis/code/pagopa/developer-portal/apps/chatbot +LAMBDA_TASK_ROOT=app-dir LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES=false LANGFUSE_INIT_ORG_ID=... LANGFUSE_INIT_ORG_NAME=... From a1605e97311e5728eac910afbb5a690e3b42a3ba Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Wed, 4 Dec 2024 10:50:18 +0100 Subject: [PATCH 53/66] chore: langfuse env vars --- apps/chatbot/.env.example | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/chatbot/.env.example b/apps/chatbot/.env.example index eae9e47af6..d54e4c752d 100644 --- a/apps/chatbot/.env.example +++ b/apps/chatbot/.env.example @@ -19,6 +19,8 @@ CHB_ENGINE_USE_ASYNC=True CHB_ENGINE_USE_STREAMING=... CHB_GOOGLE_API_KEY=... CHB_LANGFUSE_HOST=http://localhost:3000 +CHB_LANGFUSE_PUBLIC_KEY=pk-xxx +CHB_LANGFUSE_SECRET_KEY=sk-xxx CHB_LLAMAINDEX_INDEX_ID=... CHB_MODEL_ID=... CHB_MODEL_MAXTOKENS=... From e8d02c248be3b7994d866c094e7a4c8e4bd35972 Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Wed, 4 Dec 2024 12:51:06 +0100 Subject: [PATCH 54/66] feat: salts table --- apps/chatbot/.env.example | 4 +-- .../docker/files/dynamodb_schemas/salts.json | 21 ++++++++++++ .../dynamodb-create-table-queries-local.sh | 33 ------------------- .../dynamodb-create-table-sessions-local.sh | 33 ------------------- apps/chatbot/scripts/dynamodb-init.sh | 10 ++++++ apps/chatbot/src/app/main.py | 1 + 6 files changed, 34 insertions(+), 68 deletions(-) create mode 100644 apps/chatbot/docker/files/dynamodb_schemas/salts.json delete mode 100755 apps/chatbot/scripts/dynamodb-create-table-queries-local.sh delete mode 100755 apps/chatbot/scripts/dynamodb-create-table-sessions-local.sh diff --git a/apps/chatbot/.env.example b/apps/chatbot/.env.example index d54e4c752d..5d1f2ed1ca 100644 --- a/apps/chatbot/.env.example +++ b/apps/chatbot/.env.example @@ -19,8 +19,8 @@ CHB_ENGINE_USE_ASYNC=True CHB_ENGINE_USE_STREAMING=... CHB_GOOGLE_API_KEY=... CHB_LANGFUSE_HOST=http://localhost:3000 -CHB_LANGFUSE_PUBLIC_KEY=pk-xxx -CHB_LANGFUSE_SECRET_KEY=sk-xxx +CHB_LANGFUSE_PUBLIC_KEY=/nonexistent/ssmpath +CHB_LANGFUSE_SECRET_KEY=/nonexistent/ssmpath CHB_LLAMAINDEX_INDEX_ID=... CHB_MODEL_ID=... CHB_MODEL_MAXTOKENS=... diff --git a/apps/chatbot/docker/files/dynamodb_schemas/salts.json b/apps/chatbot/docker/files/dynamodb_schemas/salts.json new file mode 100644 index 0000000000..3c6c119e34 --- /dev/null +++ b/apps/chatbot/docker/files/dynamodb_schemas/salts.json @@ -0,0 +1,21 @@ +{ + "TableName": "chatbot-local-salts", + "KeySchema": [ + { + "AttributeName": "sessionId", + "KeyType": "HASH" + } + ], + "AttributeDefinitions": [ + { + "AttributeName": "sessionId", + "AttributeType": "S" + } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + }, + "TableClass": "STANDARD", + "DeletionProtectionEnabled": true +} diff --git a/apps/chatbot/scripts/dynamodb-create-table-queries-local.sh b/apps/chatbot/scripts/dynamodb-create-table-queries-local.sh deleted file mode 100755 index d9d351cae4..0000000000 --- a/apps/chatbot/scripts/dynamodb-create-table-queries-local.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -aws dynamodb create-table \ - --table-name chatbot-local-queries \ - --key-schema \ - AttributeName=sessionId,KeyType=HASH \ - AttributeName=id,KeyType=RANGE \ - --attribute-definitions \ - AttributeName=id,AttributeType=S \ - AttributeName=sessionId,AttributeType=S \ - AttributeName=createdAt,AttributeType=S \ - --local-secondary-indexes '[ - { - "IndexName": "QueriesByCreatedAtIndex", - "KeySchema": [ - { - "AttributeName": "sessionId", - "KeyType": "HASH" - }, - { - "AttributeName": "createdAt", - "KeyType": "RANGE" - } - ], - "Projection": { - "ProjectionType": "ALL" - } - } - ]' \ - --table-class STANDARD \ - --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ - --endpoint-url http://localhost:8000 \ - --region eu-south-1 \ - --profile dummy diff --git a/apps/chatbot/scripts/dynamodb-create-table-sessions-local.sh b/apps/chatbot/scripts/dynamodb-create-table-sessions-local.sh deleted file mode 100755 index 52ff0505f4..0000000000 --- a/apps/chatbot/scripts/dynamodb-create-table-sessions-local.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -aws dynamodb create-table \ - --table-name chatbot-local-sessions \ - --key-schema \ - AttributeName=userId,KeyType=HASH \ - AttributeName=id,KeyType=RANGE \ - --attribute-definitions \ - AttributeName=id,AttributeType=S \ - AttributeName=userId,AttributeType=S \ - AttributeName=createdAt,AttributeType=S \ - --local-secondary-indexes '[ - { - "IndexName": "SessionsByCreatedAtIndex", - "KeySchema": [ - { - "AttributeName": "userId", - "KeyType": "HASH" - }, - { - "AttributeName": "createdAt", - "KeyType": "RANGE" - } - ], - "Projection": { - "ProjectionType": "ALL" - } - } - ]' \ - --table-class STANDARD \ - --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ - --endpoint-url http://localhost:8000 \ - --region eu-south-1 \ - --profile dummy diff --git a/apps/chatbot/scripts/dynamodb-init.sh b/apps/chatbot/scripts/dynamodb-init.sh index 6403db6937..a1ea7c161f 100755 --- a/apps/chatbot/scripts/dynamodb-init.sh +++ b/apps/chatbot/scripts/dynamodb-init.sh @@ -9,6 +9,11 @@ aws dynamodb create-table \ --cli-input-json file://./docker/files/dynamodb_schemas/queries.json \ --region eu-south-1 +aws dynamodb create-table \ +--endpoint-url http://dynamodb:8000 \ +--cli-input-json file://./docker/files/dynamodb_schemas/salts.json \ +--region eu-south-1 + aws dynamodb scan \ --table-name chatbot-local-sessions \ --endpoint-url http://dynamodb:8000 \ @@ -18,3 +23,8 @@ aws dynamodb scan \ --table-name chatbot-local-queries \ --endpoint-url http://dynamodb:8000 \ --region eu-south-1 + +aws dynamodb scan \ + --table-name chatbot-local-salts \ + --endpoint-url http://dynamodb:8000 \ + --region eu-south-1 diff --git a/apps/chatbot/src/app/main.py b/apps/chatbot/src/app/main.py index c9026c8100..ad8f66ec2e 100644 --- a/apps/chatbot/src/app/main.py +++ b/apps/chatbot/src/app/main.py @@ -85,6 +85,7 @@ async def query_creation ( ): now = datetime.datetime.now(datetime.UTC) trace_id = str(uuid.uuid4()) + salt = str(uuid.uuid4()) userId = current_user_id(authorization) session = find_or_create_session(userId, now=now) From 3cf0f8e69897a9ff4d18a28156986279a49d10da Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Wed, 4 Dec 2024 17:46:18 +0100 Subject: [PATCH 55/66] feat(chatbot): salt for user id hash --- .../files/dynamodb_schemas/queries.json | 2 +- .../docker/files/dynamodb_schemas/salts.json | 2 +- .../files/dynamodb_schemas/sessions.json | 2 +- apps/chatbot/scripts/dynamodb-init.sh | 13 +------ apps/chatbot/src/app/main.py | 34 ++++++++++++++++--- 5 files changed, 33 insertions(+), 20 deletions(-) diff --git a/apps/chatbot/docker/files/dynamodb_schemas/queries.json b/apps/chatbot/docker/files/dynamodb_schemas/queries.json index 77d652c1f6..a6674d5aa7 100644 --- a/apps/chatbot/docker/files/dynamodb_schemas/queries.json +++ b/apps/chatbot/docker/files/dynamodb_schemas/queries.json @@ -47,5 +47,5 @@ "WriteCapacityUnits": 5 }, "TableClass": "STANDARD", - "DeletionProtectionEnabled": true + "DeletionProtectionEnabled": false } diff --git a/apps/chatbot/docker/files/dynamodb_schemas/salts.json b/apps/chatbot/docker/files/dynamodb_schemas/salts.json index 3c6c119e34..4223747933 100644 --- a/apps/chatbot/docker/files/dynamodb_schemas/salts.json +++ b/apps/chatbot/docker/files/dynamodb_schemas/salts.json @@ -17,5 +17,5 @@ "WriteCapacityUnits": 5 }, "TableClass": "STANDARD", - "DeletionProtectionEnabled": true + "DeletionProtectionEnabled": false } diff --git a/apps/chatbot/docker/files/dynamodb_schemas/sessions.json b/apps/chatbot/docker/files/dynamodb_schemas/sessions.json index 71404bbeeb..bd0f90277b 100644 --- a/apps/chatbot/docker/files/dynamodb_schemas/sessions.json +++ b/apps/chatbot/docker/files/dynamodb_schemas/sessions.json @@ -47,5 +47,5 @@ "WriteCapacityUnits": 5 }, "TableClass": "STANDARD", - "DeletionProtectionEnabled": true + "DeletionProtectionEnabled": false } diff --git a/apps/chatbot/scripts/dynamodb-init.sh b/apps/chatbot/scripts/dynamodb-init.sh index a1ea7c161f..2f2c521364 100755 --- a/apps/chatbot/scripts/dynamodb-init.sh +++ b/apps/chatbot/scripts/dynamodb-init.sh @@ -14,17 +14,6 @@ aws dynamodb create-table \ --cli-input-json file://./docker/files/dynamodb_schemas/salts.json \ --region eu-south-1 -aws dynamodb scan \ - --table-name chatbot-local-sessions \ - --endpoint-url http://dynamodb:8000 \ - --region eu-south-1 - -aws dynamodb scan \ - --table-name chatbot-local-queries \ - --endpoint-url http://dynamodb:8000 \ - --region eu-south-1 - -aws dynamodb scan \ - --table-name chatbot-local-salts \ +aws dynamodb list-tables \ --endpoint-url http://dynamodb:8000 \ --region eu-south-1 diff --git a/apps/chatbot/src/app/main.py b/apps/chatbot/src/app/main.py index ad8f66ec2e..e349f9092f 100644 --- a/apps/chatbot/src/app/main.py +++ b/apps/chatbot/src/app/main.py @@ -61,6 +61,9 @@ class QueryFeedback(BaseModel): table_sessions = dynamodb.Table( f"{os.getenv('CHB_QUERY_TABLE_PREFIX', 'chatbot')}-sessions" ) +table_salts = dynamodb.Table( + f"{os.getenv('CHB_QUERY_TABLE_PREFIX', 'chatbot')}-salts" +) app = FastAPI() app.add_middleware( @@ -71,8 +74,9 @@ class QueryFeedback(BaseModel): allow_headers=["*"], ) -def hash_func(user_id: str) -> str: - return hashlib.sha256(user_id.encode()).hexdigest() +def hash_func(user_id: str, salt: str) -> str: + # TODO: use salt qb + return hashlib.sha256(user_id.encode()).hexdigest() @app.get("/healthz") async def healthz (): @@ -85,15 +89,15 @@ async def query_creation ( ): now = datetime.datetime.now(datetime.UTC) trace_id = str(uuid.uuid4()) - salt = str(uuid.uuid4()) userId = current_user_id(authorization) session = find_or_create_session(userId, now=now) + salt = session_salt(session['id']) answer = chatbot.chat_generate( query_str = query.question, messages = [item.dict() for item in query.history] if query.history else None, trace_id = trace_id, - user_id = hash_func(userId), + user_id = hash_func(userId, salt), session_id = session["id"] ) @@ -167,7 +171,7 @@ def find_or_create_session(userId: str, now: datetime.datetime): "createdAt": now.isoformat() } try: - table_sessions.put_item(Item = body) + create_session_record(body) except (BotoCoreError, ClientError) as e: raise HTTPException(status_code=422, detail=f"[find_or_create_session] body: {body}, error: {e}") @@ -176,6 +180,26 @@ def find_or_create_session(userId: str, now: datetime.datetime): return body +def create_session_record(body: dict): + saltValue = str(uuid.uuid4()) + saltBody = { + 'sessionId': body['id'], + 'value': saltValue + } + # TODO: transaction https://github.com/boto/boto3/pull/4010 + table_sessions.put_item(Item = body) + table_salts.put_item(Item = saltBody) + +def session_salt(sessionId: str): + try: + dbResponse = table_salts.query( + KeyConditionExpression=Key("sessionId").eq(sessionId) + ) + except (BotoCoreError, ClientError) as e: + raise HTTPException(status_code=422, detail=f"[salts_fetching] sessionId: {sessionId}, error: {e}") + result = dbResponse.get('Item', {}) + return result.get('salt', None) + @app.get("/queries") async def queries_fetching( From 5a8e1e3f328d65d8c68e8fa957a81e2d5e8ff203 Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Thu, 5 Dec 2024 09:26:43 +0100 Subject: [PATCH 56/66] fix(chatbot): salts query --- apps/chatbot/src/app/main.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/chatbot/src/app/main.py b/apps/chatbot/src/app/main.py index e349f9092f..5e348ec366 100644 --- a/apps/chatbot/src/app/main.py +++ b/apps/chatbot/src/app/main.py @@ -197,8 +197,12 @@ def session_salt(sessionId: str): ) except (BotoCoreError, ClientError) as e: raise HTTPException(status_code=422, detail=f"[salts_fetching] sessionId: {sessionId}, error: {e}") - result = dbResponse.get('Item', {}) - return result.get('salt', None) + result = dbResponse.get('Items', []) + if len(result) == 0: + result = None + else: + result = result[0] + return result.get('value', None) @app.get("/queries") From e1ec765a0fc072adaee2fafe600fd5def4b6fc5e Mon Sep 17 00:00:00 2001 From: mdciri Date: Thu, 5 Dec 2024 18:09:40 +0100 Subject: [PATCH 57/66] Update scripts for langfuse --- apps/chatbot/src/app/main.py | 16 ++++++------ apps/chatbot/src/modules/chatbot.py | 40 +++++++++++++++++++---------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/apps/chatbot/src/app/main.py b/apps/chatbot/src/app/main.py index 5e348ec366..bad62560fc 100644 --- a/apps/chatbot/src/app/main.py +++ b/apps/chatbot/src/app/main.py @@ -75,8 +75,8 @@ class QueryFeedback(BaseModel): ) def hash_func(user_id: str, salt: str) -> str: - # TODO: use salt qb - return hashlib.sha256(user_id.encode()).hexdigest() + salted_user_id = user_id + salt + return hashlib.sha256(salted_user_id.encode()).hexdigest() @app.get("/healthz") async def healthz (): @@ -197,11 +197,11 @@ def session_salt(sessionId: str): ) except (BotoCoreError, ClientError) as e: raise HTTPException(status_code=422, detail=f"[salts_fetching] sessionId: {sessionId}, error: {e}") - result = dbResponse.get('Items', []) - if len(result) == 0: - result = None - else: - result = result[0] + result = dbResponse.get('Items', []) + if len(result) == 0: + result = None + else: + result = result[0] return result.get('value', None) @@ -275,7 +275,7 @@ async def session_delete( KeyConditionExpression=Key("sessionId").eq(id) ) # TODO: use batch writer -# with table_sessions.batch_writer() as batch: + # with table_sessions.batch_writer() as batch: for query in dbResponse_queries['Items']: table_queries.delete_item( Key={ diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index 0433a06227..38d1855565 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -1,9 +1,11 @@ import os import re +import yaml import uuid +from pathlib import Path from datetime import datetime from logging import getLogger -from typing import Union, Tuple, Sequence, Optional, List, Any +from typing import Union, Tuple, Sequence, Optional, List, Any, Dict from llama_index.core import PromptTemplate from llama_index.core.llms import ChatMessage, MessageRole @@ -29,7 +31,8 @@ load_dotenv() logger = getLogger(__name__) - +CWF = Path(__file__) +ROOT = CWF.parent.parent.parent.absolute().__str__() USE_PRESIDIO = True if (os.getenv("CHB_USE_PRESIDIO", "True")).lower() == "true" else False USE_CHAT_ENGINE = True if (os.getenv("CHB_USE_CHAT_ENGINE", "True")).lower() == "true" else False USE_ASYNC = True if (os.getenv('CHB_ENGINE_USE_ASYNC', "True")).lower() == "true" else False @@ -56,13 +59,13 @@ class Chatbot(): def __init__( self, - params: dict, - prompts: dict, + params: dict | None = None, + prompts: dict | None = None, use_chat_engine: bool | None = None ): - self.params = params - self.prompts = prompts + self.params = params if params else yaml.safe_load(open(os.path.join(ROOT, "config", "params.yaml"), "r")) + self.prompts = prompts if prompts else yaml.safe_load(open(os.path.join(ROOT, "config", "prompts.yaml"), "r")) self.use_chat_engine = use_chat_engine if use_chat_engine else USE_CHAT_ENGINE if USE_PRESIDIO: @@ -101,7 +104,6 @@ def __init__( def _get_prompt_templates(self) -> Tuple[PromptTemplate, PromptTemplate]: - # create templates qa_prompt_tmpl = PromptTemplate( self.prompts["qa_prompt_str"], template_var_mappings={ @@ -173,8 +175,8 @@ def _unmask_reference(self, response_str: str, nodes) -> str: # remove sentences with generated masked url: {URL} parts = re.split(r"(?<=[\.\?\!\n])", response_str) - filtered_parts = [part for part in parts if "{URL}" not in part] # filter out parts containing {URL} - response_str = "".join(filtered_parts) # join the filtered parts back into a single string + filtered_parts = [part for part in parts if "{URL}" not in part] + response_str = "".join(filtered_parts) return response_str @@ -193,7 +195,7 @@ def mask_pii(self, message: str) -> str: return message - def _messages_to_chathistory(self, messages: Optional[List[dict]] = None) -> List[ChatMessage]: + def _messages_to_chathistory(self, messages: Optional[List[Dict[str, str]]] = None) -> List[ChatMessage]: chat_history = [self.system_message] if messages: @@ -205,7 +207,7 @@ def _messages_to_chathistory(self, messages: Optional[List[dict]] = None) -> Lis ), ChatMessage( role = MessageRole.ASSISTANT, - content = message["answer"] + content = message["answer"].split("Rif:")[0].strip() ) ] @@ -314,8 +316,8 @@ def chat_generate( trace_id: str | None = None, session_id: str | None = None, user_id: str | None = None, - messages: List[dict] | None = None, - tags: Union[str, List[str]] | None = None + messages: Optional[List[Dict[str, str]]] | None = None, + tags: Optional[Union[str, List[str]]] | None = None ) -> str: if isinstance(tags, str): @@ -334,7 +336,7 @@ def chat_generate( session_id = session_id, user_id = user_id, tags = tags - ): + ) as trace: try: if USE_ASYNC and not USE_STREAMING: @@ -347,10 +349,20 @@ def chat_generate( engine_response = self.engine.chat(query_str, chat_history) response_str = self._get_response_str(engine_response) + context = "" + for node in engine_response.source_nodes: + url = REDIS_KVSTORE.get( + collection=f"hash_table_{INDEX_ID}", + key=node.metadata["filename"] + ) + context += f"URL: {url}\n\n{node.text}\n\n------------------\n\n" + except Exception as e: response_str = "Scusa, non posso elaborare la tua richiesta.\nProva a chierdimi una nuova domanda." + context = "" logger.error(f"Exception: {e}") + trace.update(output=self.mask_pii(response_str), metadata={"context": context}) self.instrumentor.flush() return response_str From ab03a597d4b41a1674214a7d28d7a1917b08780c Mon Sep 17 00:00:00 2001 From: mdciri Date: Thu, 5 Dec 2024 18:11:20 +0100 Subject: [PATCH 58/66] Update prompts --- apps/chatbot/config/prompts.yaml | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/apps/chatbot/config/prompts.yaml b/apps/chatbot/config/prompts.yaml index 4f51b2043d..57b12c3c10 100644 --- a/apps/chatbot/config/prompts.yaml +++ b/apps/chatbot/config/prompts.yaml @@ -36,12 +36,14 @@ qa_prompt_str: | Task: Given the query: {query_str} Reply according to the `Chatbot Policy` listed above. + If the query is a thank, transform it into a polite and contextually appropriate answer. Answer: refine_prompt_str: | - Given the original answer: {existing_answer}, we have the opportunity to refine it (only if needed) with some more context here below: + Given the original answer: {existing_answer}, + we have the opportunity to refine it (only if needed) with some more context here below: -------------------- {context_msg} -------------------- @@ -53,15 +55,15 @@ refine_prompt_str: | Answer: condense_prompt_str: | - Given a conversation (between Human and Assistant) and a follow up message from Human, rewrite the message to be a standalone question that captures all relevant context from the conversation. - - The standalone question must be in Italian. - - + Given the following chat history between a user and an AI assistant: {chat_history} - - + -------------------- + and a follow up question from user: {question} - - - + -------------------- + Task: + Rephrase the follow up question to be a standalone question. + If the follow up question is a thank, transform it into a polite and contextually appropriate standalone response. + The standalone question or response must be in Italian. + + Standalone question or response: From 63dc519f2ad13dfc27181f5db0cb7aecf5aa0080 Mon Sep 17 00:00:00 2001 From: mdciri Date: Thu, 5 Dec 2024 18:14:13 +0100 Subject: [PATCH 59/66] Update pytest --- apps/chatbot/README.md | 4 +- apps/chatbot/TESTBOOK.md | 17 +++++++ apps/chatbot/src/modules/test_chatbot.py | 56 ++++++++++++++++-------- 3 files changed, 58 insertions(+), 19 deletions(-) create mode 100644 apps/chatbot/TESTBOOK.md diff --git a/apps/chatbot/README.md b/apps/chatbot/README.md index 710245c4ab..1d212ccb90 100644 --- a/apps/chatbot/README.md +++ b/apps/chatbot/README.md @@ -54,10 +54,12 @@ Check out the params in order to store your vector index accordingly. ## Test -Run the tests for the chatbot and the APIs running: +In order to test the chatbot and its APIs, run: pytest +For more details, read [TESTBOOK.md](https://github.com/pagopa/developer-portal/blob/main/apps/chatbot/TESTBOOK.md). + ## Docker In order to run the chatbot locally for the first time, you need to: diff --git a/apps/chatbot/TESTBOOK.md b/apps/chatbot/TESTBOOK.md new file mode 100644 index 0000000000..93aeb3f730 --- /dev/null +++ b/apps/chatbot/TESTBOOK.md @@ -0,0 +1,17 @@ +# Testbook + +In order to test the chatbot functions and its APIs, run: + + pytest + +the command test the function explained in the table below. + +| Function | Requirements | Masked Inputs | Description | +| :------------------------------: | :-----------------------: | :---------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| `test_connection_redis()` | Redis client | None | Check the connection with Redis is up | +| `test_connection_langfuse()` | Langfuse client | None | Check the connection with Langfuse is up | +| `test_cloud_connection()` | AWS or Gemini credentials | LLM and Embedding model ID | Check the models' loading | +| `test_prompt_templates()` | Llama-index | `prompts.yaml` | Check the prompts have the same variables of the prompts templates | +| `test_pii_mask()` | Presidio | a string to mask | Check that Presidio works as expected | +| `test_messages_to_chathistory()` | Llama-index | chat history from the local storage | Check the write functioning of creating a chat history in Llama-index | +| `test_chat_generation()` | Llama-index | two queries | Check the chatbot generation given a query, then checks again its functioning generating a new answer usinng a second query and the previous interaction as chat history | diff --git a/apps/chatbot/src/modules/test_chatbot.py b/apps/chatbot/src/modules/test_chatbot.py index c63eed81de..88220520a4 100644 --- a/apps/chatbot/src/modules/test_chatbot.py +++ b/apps/chatbot/src/modules/test_chatbot.py @@ -1,8 +1,11 @@ import os +import re import yaml from logging import getLogger from pathlib import Path +from src.modules.vector_database import REDIS_CLIENT +from src.modules.models import get_llm, get_embed_model from src.modules.chatbot import Chatbot, LANGFUSE @@ -16,19 +19,45 @@ CHATBOT = Chatbot(params=PARAMS, prompts=PROMPTS) +def test_connection_redis(): + flag = False + try: + REDIS_CLIENT.ping() + flag = True + except Exception as e: + logger.error(e) + + assert flag == True + + +def test_connection_langfuse(): + assert LANGFUSE.auth_check() == True + + +def test_cloud_connection(): + + flag = False + try: + _ = get_llm() + _ = get_embed_model() + flag = True + except Exception as e: + logger.error(e) + + assert flag == True + + def test_prompt_templates(): - qa_prompt_tmpl, ref_prompt_tmpl, condense_prompt_tmpl = CHATBOT._get_prompt_templates() - qa_prompt_tmpl, ref_prompt_tmpl, condense_prompt_tmpl = CHATBOT._get_prompt_templates() + for prompt_str, template in zip(PROMPTS.values(), CHATBOT._get_prompt_templates()): + vars_str = re.findall(r'\{(.*?)\}', prompt_str) + vars_tmp = list(template.template_var_mappings.keys()) + assert vars_str == vars_tmp - p1 = PROMPTS["qa_prompt_str"].format(context_str="aaaaa", query_str="bbbbb") - p2 = qa_prompt_tmpl.format(context_str="aaaaa", query_str="bbbbb") - p3 = PROMPTS["refine_prompt_str"].format(existing_answer="aaaaa", context_msg="bbbbb") - p4 = ref_prompt_tmpl.format(existing_answer="aaaaa", context_msg="bbbbb") - p5 = PROMPTS["condense_prompt_str"].format(chat_history="aaaaa", question="bbbbb") - p6 = condense_prompt_tmpl.format(chat_history="aaaaa", question="bbbbb") - assert p1 == p2 and p3 == p4 and p5 == p6 +def test_pii_mask(): + masked_str = CHATBOT.mask_pii("Il mio nome e' Mario Rossi") + assert masked_str == "Il mio nome e' " def test_messages_to_chathistory(): @@ -46,15 +75,6 @@ def test_messages_to_chathistory(): assert len(chat_history) == 2 * len(messages) + 1 -def test_pii_mask(): - masked_str = CHATBOT.mask_pii("Il mio nome e' Mario Rossi") - assert masked_str == "Il mio nome e' " - - -def test_connection_langfuse(): - assert LANGFUSE.auth_check() == True - - def test_chat_generation(): query_str = "GPD gestisce i pagamenti spontanei?" From c9918f7c9cf18c1bc2ec3bda05f2d7849638a551 Mon Sep 17 00:00:00 2001 From: mdciri Date: Fri, 6 Dec 2024 14:22:55 +0100 Subject: [PATCH 60/66] Update chatbot --- apps/chatbot/src/modules/chatbot.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index 38d1855565..bede147632 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -5,7 +5,7 @@ from pathlib import Path from datetime import datetime from logging import getLogger -from typing import Union, Tuple, Sequence, Optional, List, Any, Dict +from typing import Union, Tuple, Sequence, Optional, List, Any, Dict, Literal from llama_index.core import PromptTemplate from llama_index.core.llms import ChatMessage, MessageRole @@ -277,6 +277,31 @@ def remove_langfuse_tag(self, trace_id: str, tag: str) -> None: else: logger.warning(f"Tag {tag} not present in trace {trace_id}") + + def add_langfuse_score( + self, + trace_id: str, + name: str, + value: float, + data_type: Literal['NUMERIC', 'BOOLEAN'] | None = None + ) -> None: + + with self.instrumentor.observe(trace_id=trace_id) as trace: + trace_info = self.get_trace(trace_id, as_dict=False) + flag = True + for score in trace_info.scores: + if score.name == name: + flag = False + score_id = score.id + break + + if flag: + trace.score(name=name, value=value, data_type=data_type) + logger.warning(f"Add score {name}: {value} in trace {trace_id}") + else: + trace.score(id=score_id, name=name, value=value, data_type=data_type) + logger.warning(f"Updating score {name} to {value} in trace {trace_id}") + def _mask_trace(self, data: Any) -> None: From 6baa01d942bfec400eec0c8d8692e793515db929 Mon Sep 17 00:00:00 2001 From: Devis Battisti Date: Fri, 6 Dec 2024 15:01:51 +0100 Subject: [PATCH 61/66] chatbot: langfuse score --- apps/chatbot/src/app/main.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/chatbot/src/app/main.py b/apps/chatbot/src/app/main.py index bad62560fc..8012cc674e 100644 --- a/apps/chatbot/src/app/main.py +++ b/apps/chatbot/src/app/main.py @@ -330,6 +330,14 @@ async def query_feedback ( }, ReturnValues='ALL_NEW' ) + + chatbot.add_langfuse_score( + trace_id = id, + name = 'user-feedback', + value = (1 if query.badAnswer else 0), + data_type = 'BOOLEAN' + ) + except (BotoCoreError, ClientError) as e: raise HTTPException(status_code=422, detail=f"[query_feedback] id: {id}, sessionId: {sessionId}, error: {e}") From 979f9a865c82c217730f9ac5c10f161f9f127bbd Mon Sep 17 00:00:00 2001 From: mdciri Date: Mon, 9 Dec 2024 17:48:43 +0100 Subject: [PATCH 62/66] Update modules.chatbot --- apps/chatbot/src/modules/chatbot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/chatbot/src/modules/chatbot.py b/apps/chatbot/src/modules/chatbot.py index bede147632..7cd0d67ad3 100644 --- a/apps/chatbot/src/modules/chatbot.py +++ b/apps/chatbot/src/modules/chatbot.py @@ -388,6 +388,7 @@ def chat_generate( logger.error(f"Exception: {e}") trace.update(output=self.mask_pii(response_str), metadata={"context": context}) + trace.score(name="user-feedback", value=0, data_type="NUMERIC") self.instrumentor.flush() return response_str From 695dfa8df04ec5cd0e0796235e16c30cd5f13fde Mon Sep 17 00:00:00 2001 From: mdciri Date: Tue, 10 Dec 2024 16:09:00 +0100 Subject: [PATCH 63/66] Update embedding model --- apps/chatbot/.env.example | 3 ++- apps/chatbot/src/modules/models.py | 7 ++++--- apps/chatbot/src/modules/vector_database.py | 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/chatbot/.env.example b/apps/chatbot/.env.example index 5d1f2ed1ca..2ca70aad6c 100644 --- a/apps/chatbot/.env.example +++ b/apps/chatbot/.env.example @@ -5,7 +5,8 @@ AUTH_COGNITO_ISSUER=https://cognito-idp.eu-south-1.amazonaws.com/eu-south-1_xxxx AUTH_DISABLE_SIGNUP=false AUTH_DISABLE_USERNAME_PASSWORD=true CHB_AWS_ACCESS_KEY_ID=... -CHB_AWS_BEDROCK_REGION=eu-west-3 +CHB_AWS_BEDROCK_EMBED_REGION=eu-central-1 +CHB_AWS_BEDROCK_LLM_REGION=eu-west-3 CHB_AWS_DEFAULT_REGION=eu-south-1 CHB_AWS_GUARDRAIL_ID=... CHB_AWS_GUARDRAIL_VERSION=... diff --git a/apps/chatbot/src/modules/models.py b/apps/chatbot/src/modules/models.py index d9734cd7de..41abfc642e 100644 --- a/apps/chatbot/src/modules/models.py +++ b/apps/chatbot/src/modules/models.py @@ -21,7 +21,8 @@ GOOGLE_API_KEY = get_ssm_parameter(name=os.getenv("CHB_GOOGLE_API_KEY")) AWS_ACCESS_KEY_ID = os.getenv("CHB_AWS_ACCESS_KEY_ID") AWS_SECRET_ACCESS_KEY = os.getenv("CHB_AWS_SECRET_ACCESS_KEY") -AWS_BEDROCK_REGION = os.getenv("CHB_AWS_BEDROCK_REGION") +AWS_BEDROCK_LLM_REGION = os.getenv("CHB_AWS_BEDROCK_LLM_REGION") +AWS_BEDROCK_EMBED_REGION = os.getenv("CHB_AWS_BEDROCK_EMBED_REGION") AWS_GUARDRAIL_ID = os.getenv("CHB_AWS_GUARDRAIL_ID") AWS_GUARDRAIL_VERSION = os.getenv("CHB_AWS_GUARDRAIL_VERSION") @@ -41,7 +42,7 @@ def get_llm(): max_tokens=int(MODEL_MAXTOKENS), aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, - region_name=AWS_BEDROCK_REGION + region_name=AWS_BEDROCK_LLM_REGION ) else: @@ -71,7 +72,7 @@ def get_embed_model(): model_name = EMBED_MODEL_ID, aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, - region_name=AWS_BEDROCK_REGION + region_name=AWS_BEDROCK_EMBED_REGION ) else: embed_model = GeminiEmbedding( diff --git a/apps/chatbot/src/modules/vector_database.py b/apps/chatbot/src/modules/vector_database.py index 8ce403b118..c4995b26b5 100644 --- a/apps/chatbot/src/modules/vector_database.py +++ b/apps/chatbot/src/modules/vector_database.py @@ -55,7 +55,8 @@ EMBED_MODEL_ID = os.getenv("CHB_EMBED_MODEL_ID") EMBEDDING_DIMS = { "models/text-embedding-004": 768, - "cohere.embed-multilingual-v3": 1024 + "cohere.embed-multilingual-v3": 1024, + "amazon.titan-embed-text-v2:0": 1024 } REDIS_SCHEMA = IndexSchema.from_dict({ "index": {"name": f"{INDEX_ID}", "prefix": f"{INDEX_ID}/vector"}, From bedb719ec265cc9c9a779b8661ff0b738613299f Mon Sep 17 00:00:00 2001 From: mdciri Date: Wed, 18 Dec 2024 16:03:51 +0100 Subject: [PATCH 64/66] Update feedback --- apps/chatbot/src/app/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/chatbot/src/app/main.py b/apps/chatbot/src/app/main.py index 8012cc674e..8d64f18290 100644 --- a/apps/chatbot/src/app/main.py +++ b/apps/chatbot/src/app/main.py @@ -334,8 +334,8 @@ async def query_feedback ( chatbot.add_langfuse_score( trace_id = id, name = 'user-feedback', - value = (1 if query.badAnswer else 0), - data_type = 'BOOLEAN' + value = (-1 if query.badAnswer else 1), + data_type = 'NUMERIC' ) except (BotoCoreError, ClientError) as e: From 891c058d87d34cb01ac0eda36578e71f1a61e8a9 Mon Sep 17 00:00:00 2001 From: christian-calabrese Date: Wed, 18 Dec 2024 18:28:23 +0100 Subject: [PATCH 65/66] feat: add missing infra parts --- .../src/modules/chatbot/cognito_user.tf | 2 +- .../src/modules/chatbot/data.tf | 4 +++- .../src/modules/chatbot/dynamodb.tf | 18 ++++++++++++++++++ .../src/modules/chatbot/lambda_chatbot.tf | 19 ++++++++++--------- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/apps/infrastructure/src/modules/chatbot/cognito_user.tf b/apps/infrastructure/src/modules/chatbot/cognito_user.tf index 797f39629f..88b35aaa77 100644 --- a/apps/infrastructure/src/modules/chatbot/cognito_user.tf +++ b/apps/infrastructure/src/modules/chatbot/cognito_user.tf @@ -121,7 +121,7 @@ resource "aws_cognito_user_pool_client" "langfuse" { } resource "aws_cognito_user_pool_domain" "monitoring" { - domain = "monitoring" + domain = "monitoring${var.environment}" user_pool_id = aws_cognito_user_pool.monitoring.id } diff --git a/apps/infrastructure/src/modules/chatbot/data.tf b/apps/infrastructure/src/modules/chatbot/data.tf index a895dd6a5d..6aa3e88439 100644 --- a/apps/infrastructure/src/modules/chatbot/data.tf +++ b/apps/infrastructure/src/modules/chatbot/data.tf @@ -48,7 +48,9 @@ data "aws_iam_policy_document" "lambda_dynamodb_policy" { module.dynamodb_chatbot_queries.dynamodb_table_arn, "${module.dynamodb_chatbot_queries.dynamodb_table_arn}/*", module.dynamodb_chatbot_sessions.dynamodb_table_arn, - "${module.dynamodb_chatbot_sessions.dynamodb_table_arn}/*" + "${module.dynamodb_chatbot_sessions.dynamodb_table_arn}/*", + module.dynamodb_chatbot_salts.dynamodb_table_arn, + "${module.dynamodb_chatbot_salts.dynamodb_table_arn}/*" ] } } diff --git a/apps/infrastructure/src/modules/chatbot/dynamodb.tf b/apps/infrastructure/src/modules/chatbot/dynamodb.tf index 71183035be..0a2160b8d4 100644 --- a/apps/infrastructure/src/modules/chatbot/dynamodb.tf +++ b/apps/infrastructure/src/modules/chatbot/dynamodb.tf @@ -71,3 +71,21 @@ module "dynamodb_chatbot_sessions" { } ] } + +module "dynamodb_chatbot_salts" { + source = "git::github.com/terraform-aws-modules/terraform-aws-dynamodb-table.git?ref=715399dbe24f6443820bf5de80f6100b35d56355" # v4.0.0 + + billing_mode = "PAY_PER_REQUEST" + deletion_protection_enabled = false + + name = "${local.prefix}-salts" + hash_key = "sessionId" + server_side_encryption_enabled = true + + attributes = [ + { + name = "sessionId" + type = "S" + } + ] +} diff --git a/apps/infrastructure/src/modules/chatbot/lambda_chatbot.tf b/apps/infrastructure/src/modules/chatbot/lambda_chatbot.tf index 5a7331ede0..ce85cb71d6 100644 --- a/apps/infrastructure/src/modules/chatbot/lambda_chatbot.tf +++ b/apps/infrastructure/src/modules/chatbot/lambda_chatbot.tf @@ -3,7 +3,6 @@ locals { CHB_AWS_S3_BUCKET = module.s3_bucket_llamaindex.s3_bucket_id CHB_AWS_GUARDRAIL_ID = awscc_bedrock_guardrail.guardrail.guardrail_id CHB_AWS_GUARDRAIL_VERSION = awscc_bedrock_guardrail_version.guardrail.version - CHB_AWS_BEDROCK_REGION = var.aws_chatbot_region CHB_REDIS_URL = "redis://${module.nlb.dns_name}:${var.ecs_redis.port}" CHB_WEBSITE_URL = "https://${var.dns_domain_name}" CORS_DOMAINS = var.environment == "dev" ? jsonencode(["https://www.${var.dns_domain_name}", "https://${var.dns_domain_name}", "http://localhost:3000"]) : jsonencode(["https://www.${var.dns_domain_name}", "https://${var.dns_domain_name}"]) @@ -17,14 +16,16 @@ locals { # Be extremely careful when changing the provider # both the generation and the embedding models would be changed # embeddings size change would break the application and requires reindexing - CHB_PROVIDER = "aws" - CHB_MODEL_ID = "mistral.mistral-large-2402-v1:0" - CHB_EMBED_MODEL_ID = "cohere.embed-multilingual-v3" - CHB_MODEL_MAXTOKENS = "768" - CHB_MODEL_TEMPERATURE = "0.3" - CHB_GOOGLE_API_KEY = module.google_api_key_ssm_parameter.ssm_parameter_name - CHB_QUERY_TABLE_PREFIX = local.prefix - CHB_LLAMAINDEX_INDEX_ID = module.index_id_ssm_parameter.ssm_parameter_name + CHB_PROVIDER = "aws" + CHB_AWS_BEDROCK_LLM_REGION = var.aws_chatbot_region + CHB_MODEL_ID = "mistral.mistral-large-2402-v1:0" + CHB_AWS_BEDROCK_EMBED_REGION = "eu-central-1" + CHB_EMBED_MODEL_ID = "amazon.titan-embed-text-v2:0" + CHB_MODEL_MAXTOKENS = "768" + CHB_MODEL_TEMPERATURE = "0.3" + CHB_GOOGLE_API_KEY = module.google_api_key_ssm_parameter.ssm_parameter_name + CHB_QUERY_TABLE_PREFIX = local.prefix + CHB_LLAMAINDEX_INDEX_ID = module.index_id_ssm_parameter.ssm_parameter_name } } From f52491a6c3bf7449fabafe625241f5ccd5367ede Mon Sep 17 00:00:00 2001 From: christian-calabrese Date: Thu, 19 Dec 2024 10:22:48 +0100 Subject: [PATCH 66/66] chore: add changeset --- .changeset/nice-coins-mix.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/nice-coins-mix.md diff --git a/.changeset/nice-coins-mix.md b/.changeset/nice-coins-mix.md new file mode 100644 index 0000000000..b84112ca18 --- /dev/null +++ b/.changeset/nice-coins-mix.md @@ -0,0 +1,6 @@ +--- +"infrastructure": minor +"chatbot": minor +--- + +Implemented llm monitoring with LangFuse