From bcd7356f4d88231784ebe02e3512e798487fe2b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9mence=20Lesn=C3=A9?= Date: Thu, 7 Nov 2024 15:41:04 +0100 Subject: [PATCH] feat: Use gpt-4o-realtime for audio conversation --- README.md | 17 +- app/helpers/call_events.py | 203 +- app/helpers/call_llm.py | 626 +++-- app/helpers/call_utils.py | 165 +- app/helpers/config_models/conversation.py | 18 +- app/helpers/config_models/llm.py | 193 +- app/helpers/config_models/prompts.py | 63 +- app/helpers/config_models/queue.py | 10 - app/helpers/features.py | 53 +- app/helpers/llm_tools.py | 154 +- app/helpers/llm_utils.py | 45 +- app/helpers/llm_worker.py | 271 +-- app/main.py | 393 +-- app/models/call.py | 31 +- app/models/message.py | 30 +- app/persistence/ai_search.py | 6 +- app/persistence/azure_queue_storage.py | 52 +- app/persistence/cosmos_db.py | 1 - cicd/Dockerfile | 1 + cicd/bicep/app.bicep | 82 +- cicd/bicep/main.bicep | 40 +- public/loading.wav | Bin 89752 -> 0 bytes public/ready.wav | Bin 33318 -> 0 bytes pyproject.toml | 6 +- requirements-dev.txt | 2634 ++------------------- requirements.txt | 2001 ++-------------- tests/conftest.py | 2 +- tests/llm.py | 8 - tests/local.py | 8 - 29 files changed, 1412 insertions(+), 5701 deletions(-) delete mode 100644 public/loading.wav delete mode 100644 public/ready.wav diff --git a/README.md b/README.md index dab7e81e..9d95250e 100644 --- a/README.md +++ b/README.md @@ -416,15 +416,14 @@ cognitive_service: endpoint: https://xxx.cognitiveservices.azure.com llm: - fast: + realtime: mode: azure_openai azure_openai: - context: 16385 - deployment: gpt-4o-mini-2024-07-18 + context: 128000 + deployment: gpt-4o-realtime-preview-2024-10-01 endpoint: https://xxx.openai.azure.com - model: gpt-4o-mini - streaming: true - slow: + model: gpt-4o-realtime-preview + sequential: mode: azure_openai azure_openai: context: 128000 @@ -632,10 +631,10 @@ Conversation options are represented as features. They can be configured from Ap | `answer_hard_timeout_sec` | The hard timeout for the bot answer in seconds. | `int` | 180 | | `answer_soft_timeout_sec` | The soft timeout for the bot answer in seconds. | `int` | 30 | | `callback_timeout_hour` | The timeout for a callback in hours. | `int` | 72 | -| `phone_silence_timeout_sec` | The timeout for phone silence in seconds. | `int` | 1 | +| `recognition_retry_max` | The maximum number of retries for voice recognition. | `int` | 2 | | `recording_enabled` | Whether call recording is enabled. | `bool` | false | -| `slow_llm_for_chat` | Whether to use the slower LLM for chat. | `bool` | true | -| `voice_recognition_retry_max` | The maximum number of retries for voice recognition. | `int` | 2 | +| `vad_silence_timeout_ms` | The timeout for phone silence in seconds. | `int` | 500 | +| `vad_threshold` | The threshold for voice activity detection. | `float` | 0.5 | ### Use an OpenAI compatible model for the LLM diff --git a/app/helpers/call_events.py b/app/helpers/call_events.py index 5e603c5d..9922fe2a 100644 --- a/app/helpers/call_events.py +++ b/app/helpers/call_events.py @@ -4,6 +4,10 @@ from azure.communication.callautomation import ( AzureBlobContainerRecordingStorage, DtmfTone, + MediaStreamingAudioChannelType, + MediaStreamingContentType, + MediaStreamingOptions, + MediaStreamingTransportType, RecognitionChoice, RecordingChannel, RecordingContent, @@ -16,16 +20,15 @@ from app.helpers.call_llm import load_llm_chat from app.helpers.call_utils import ( ContextEnum as CallContextEnum, - handle_clear_queue, handle_hangup, handle_play_text, handle_recognize_ivr, - handle_recognize_text, handle_transfer, + start_audio_streaming, ) from app.helpers.config import CONFIG -from app.helpers.features import recording_enabled, voice_recognition_retry_max -from app.helpers.llm_worker import completion_sync +from app.helpers.features import recognition_retry_max, recording_enabled +from app.helpers.llm_worker import completion_sequential from app.helpers.logging import logger from app.helpers.monitoring import CallAttributes, span_attribute, tracer from app.models.call import CallStateModel @@ -50,14 +53,24 @@ async def on_new_call( client: CallAutomationClient, incoming_context: str, phone_number: str, + wss_url: str, ) -> bool: logger.debug("Incoming call handler caller ID: %s", phone_number) + streaming_options = MediaStreamingOptions( + audio_channel_type=MediaStreamingAudioChannelType.UNMIXED, + content_type=MediaStreamingContentType.AUDIO, + start_media_streaming=False, + transport_type=MediaStreamingTransportType.WEBSOCKET, + transport_url=wss_url, + ) + try: answer_call_result = await client.answer_call( callback_url=callback_url, cognitive_services_endpoint=CONFIG.cognitive_service.endpoint, incoming_call_context=incoming_context, + media_streaming=streaming_options, ) logger.info( "Answered call with %s (%s)", @@ -89,9 +102,7 @@ async def on_new_call( async def on_call_connected( call: CallStateModel, client: CallAutomationClient, - post_callback: Callable[[CallStateModel], Awaitable[None]], server_call_id: str, - training_callback: Callable[[CallStateModel], Awaitable[None]], ) -> None: logger.info("Call connected, asking for language") call.recognition_retry = 0 # Reset recognition retry counter @@ -106,8 +117,6 @@ async def on_call_connected( _handle_ivr_language( call=call, client=client, - post_callback=post_callback, - training_callback=training_callback, ), # First, every time a call is answered, confirm the language _db.call_aset( call @@ -134,65 +143,47 @@ async def on_call_disconnected( ) -@tracer.start_as_current_span("on_speech_recognized") -async def on_speech_recognized( +@tracer.start_as_current_span("on_audio_connected") +async def on_audio_connected( # noqa: PLR0913 call: CallStateModel, client: CallAutomationClient, + audio_stream: asyncio.Queue[bytes], post_callback: Callable[[CallStateModel], Awaitable[None]], - text: str, - training_callback: Callable[[CallStateModel], Awaitable[None]], + audio_bits_per_sample: int, + audio_channels: int, + audio_sample_rate: int, ) -> None: - logger.info("Voice recognition: %s", text) - span_attribute(CallAttributes.CALL_CHANNEL, "voice") - span_attribute(CallAttributes.CALL_MESSAGE, text) - call.messages.append( - MessageModel( - content=text, - persona=MessagePersonaEnum.HUMAN, - ) + await load_llm_chat( + audio_bits_per_sample=audio_bits_per_sample, + audio_channels=audio_channels, + audio_sample_rate=audio_sample_rate, + audio_stream=audio_stream, + automation_client=client, + call=call, + post_callback=post_callback, ) - call.recognition_retry = 0 # Reset recognition retry counter - await asyncio.gather( - handle_clear_queue( - call=call, - client=client, - ), # First, when the user speak, the conversation should continue based on its last message - load_llm_chat( - call=call, - client=client, - post_callback=post_callback, - training_callback=training_callback, - ), # Second, the LLM should be loaded to continue the conversation - _db.call_aset( - call - ), # Third, save in DB allowing SMS responses to be more "in-sync" if they are sent during the generation - ) # All in parallel to lower the response latency @tracer.start_as_current_span("on_recognize_timeout_error") -async def on_recognize_timeout_error( +async def on_recognize_error( call: CallStateModel, client: CallAutomationClient, contexts: set[CallContextEnum] | None, - post_callback: Callable[[CallStateModel], Awaitable[None]], - training_callback: Callable[[CallStateModel], Awaitable[None]], ) -> None: if ( contexts and CallContextEnum.IVR_LANG_SELECT in contexts ): # Retry IVR recognition span_attribute(CallAttributes.CALL_CHANNEL, "ivr") - if call.recognition_retry < await voice_recognition_retry_max(): + if call.recognition_retry < await recognition_retry_max(): call.recognition_retry += 1 logger.info( "Timeout, retrying language selection (%s/%s)", call.recognition_retry, - await voice_recognition_retry_max(), + await recognition_retry_max(), ) await _handle_ivr_language( call=call, client=client, - post_callback=post_callback, - training_callback=training_callback, ) else: # IVR retries are exhausted, end call logger.info("Timeout, ending call") @@ -203,7 +194,7 @@ async def on_recognize_timeout_error( return if ( - call.recognition_retry >= await voice_recognition_retry_max() + call.recognition_retry >= await recognition_retry_max() ): # Voice retries are exhausted, end call logger.info("Timeout, ending call") await _handle_goodbye( @@ -212,23 +203,6 @@ async def on_recognize_timeout_error( ) return - # Retry voice recognition - span_attribute(CallAttributes.CALL_CHANNEL, "voice") - call.recognition_retry += 1 - logger.info( - "Timeout, retrying voice recognition (%s/%s)", - call.recognition_retry, - await voice_recognition_retry_max(), - ) - # Never store the warning message in the call history, it has caused hallucinations in the LLM - await handle_recognize_text( - call=call, - client=client, - no_response_error=True, - store=False, - text=await CONFIG.prompts.tts.timeout_silence(call), - ) - async def _handle_goodbye( call: CallStateModel, @@ -243,33 +217,6 @@ async def _handle_goodbye( ) -@tracer.start_as_current_span("on_recognize_unknown_error") -async def on_recognize_unknown_error( - call: CallStateModel, - client: CallAutomationClient, - error_code: int, -) -> None: - span_attribute(CallAttributes.CALL_CHANNEL, "voice") - - if error_code == 8511: # noqa: PLR2004 - # Failure while trying to play the prompt - logger.warning("Failed to play prompt") - else: - logger.warning( - "Recognition failed with unknown error code %s, answering with default error", - error_code, - ) - - # Never store the error message in the call history, it has caused hallucinations in the LLM - await handle_recognize_text( - call=call, - client=client, - no_response_error=True, - store=False, - text=await CONFIG.prompts.tts.error(call), - ) - - @tracer.start_as_current_span("on_play_completed") async def on_play_completed( call: CallStateModel, @@ -308,22 +255,23 @@ async def on_play_error(error_code: int) -> None: logger.debug("Play failed") span_attribute(CallAttributes.CALL_CHANNEL, "voice") # See: https://github.com/MicrosoftDocs/azure-docs/blob/main/articles/communication-services/how-tos/call-automation/play-action.md - if error_code == 8535: # noqa: PLR2004 - # Action failed, file format - logger.warning("Error during media play, file format is invalid") - elif error_code == 8536: # noqa: PLR2004 - # Action failed, file downloaded - logger.warning("Error during media play, file could not be downloaded") - elif error_code == 8565: # noqa: PLR2004 - # Action failed, AI services config - logger.error( - "Error during media play, impossible to connect with Azure AI services" - ) - elif error_code == 9999: # noqa: PLR2004 - # Unknown error code - logger.warning("Error during media play, unknown internal server error") - else: - logger.warning("Error during media play, unknown error code %s", error_code) + match error_code: + case 8535: + # Action failed, file format + logger.warning("Error during media play, file format is invalid") + case 8536: + # Action failed, file downloaded + logger.warning("Error during media play, file could not be downloaded") + case 8565: + # Action failed, AI services config + logger.error( + "Error during media play, impossible to connect with Azure AI services" + ) + case 9999: + # Unknown error code + logger.warning("Error during media play, unknown internal server error") + case _: + logger.warning("Error during media play, unknown error code %s", error_code) @tracer.start_as_current_span("on_ivr_recognized") @@ -331,8 +279,6 @@ async def on_ivr_recognized( call: CallStateModel, client: CallAutomationClient, label: str, - post_callback: Callable[[CallStateModel], Awaitable[None]], - training_callback: Callable[[CallStateModel], Awaitable[None]], ) -> None: logger.info("IVR recognized: %s", label) span_attribute(CallAttributes.CALL_CHANNEL, "ivr") @@ -353,35 +299,31 @@ async def on_ivr_recognized( if len(call.messages) <= 1: # First call, or only the call action await asyncio.gather( - handle_recognize_text( + handle_play_text( call=call, client=client, text=await CONFIG.prompts.tts.hello(call), ), # First, greet the user persist_coro, # Second, persist language change for next messages, should be quick enough to be in sync with the next message - load_llm_chat( + start_audio_streaming( call=call, client=client, - post_callback=post_callback, - training_callback=training_callback, - ), # Third, the LLM should be loaded to continue the conversation + ), # Third, the conversation with the LLM should start ) # All in parallel to lower the response latency else: # Returning call await asyncio.gather( - handle_recognize_text( + handle_play_text( call=call, client=client, style=MessageStyleEnum.CHEERFUL, text=await CONFIG.prompts.tts.welcome_back(call), ), # First, welcome back the user persist_coro, # Second, persist language change for next messages, should be quick enough to be in sync with the next message - load_llm_chat( + start_audio_streaming( call=call, client=client, - post_callback=post_callback, - training_callback=training_callback, - ), # Third, the LLM should be loaded to continue the conversation + ), # Third, the conversation with the LLM should start ) @@ -398,11 +340,10 @@ async def on_transfer_error( error_code: int, ) -> None: logger.info("Error during call transfer, subCode %s", error_code) - await handle_recognize_text( + await handle_play_text( call=call, client=client, context=CallContextEnum.TRANSFER_FAILED, - no_response_error=True, text=await CONFIG.prompts.tts.calltransfer_failure(call), ) @@ -410,10 +351,7 @@ async def on_transfer_error( @tracer.start_as_current_span("on_sms_received") async def on_sms_received( call: CallStateModel, - client: CallAutomationClient, message: str, - post_callback: Callable[[CallStateModel], Awaitable[None]], - training_callback: Callable[[CallStateModel], Awaitable[None]], ) -> bool: logger.info("SMS received from %s: %s", call.initiate.phone_number, message) span_attribute(CallAttributes.CALL_CHANNEL, "sms") @@ -430,12 +368,12 @@ async def on_sms_received( logger.info("Call not in progress, answering with SMS") else: logger.info("Call in progress, answering with voice") - await load_llm_chat( - call=call, - client=client, - post_callback=post_callback, - training_callback=training_callback, - ) + # TODO: Reimplement SMS answers in voice + # await load_llm_chat( + # call=call, + # client=client, + # post_callback=post_callback, + # ) return True @@ -489,7 +427,7 @@ def _validate(req: str | None) -> tuple[bool, str | None, str | None]: return False, "No SMS content", None return True, None, req - content = await completion_sync( + content = await completion_sequential( res_type=str, system=CONFIG.prompts.llm.sms_summary_system(call), validation_callback=_validate, @@ -501,7 +439,6 @@ def _validate(req: str | None) -> tuple[bool, str | None, str | None]: if not content: logger.warning("Error generating SMS report") return - logger.info("SMS report: %s", content) # Send the SMS to both the current caller and the policyholder success = False @@ -543,7 +480,7 @@ def _validate( except ValidationError as e: return False, str(e), None - model = await completion_sync( + model = await completion_sequential( res_type=SynthesisModel, system=CONFIG.prompts.llm.synthesis_system(call), validate_json=True, @@ -574,7 +511,7 @@ def _validate( except ValidationError as e: return False, str(e), None - model = await completion_sync( + model = await completion_sequential( res_type=NextModel, system=CONFIG.prompts.llm.next_system(call), validate_json=True, @@ -592,8 +529,6 @@ def _validate( async def _handle_ivr_language( call: CallStateModel, client: CallAutomationClient, - post_callback: Callable[[CallStateModel], Awaitable[None]], - training_callback: Callable[[CallStateModel], Awaitable[None]], ) -> None: # If only one language is available, skip the IVR if len(CONFIG.conversation.initiate.lang.availables) == 1: @@ -603,8 +538,6 @@ async def _handle_ivr_language( call=call, client=client, label=short_code, - post_callback=post_callback, - training_callback=training_callback, ) return diff --git a/app/helpers/call_llm.py b/app/helpers/call_llm.py index d9e2888c..f1bebf72 100644 --- a/app/helpers/call_llm.py +++ b/app/helpers/call_llm.py @@ -1,29 +1,33 @@ import asyncio -import time from collections.abc import Awaitable, Callable +from functools import wraps +import aiojobs from azure.communication.callautomation.aio import CallAutomationClient -from openai import APIError +from pydub import AudioSegment +from rtclient import ( + RTClient, + RTFunctionCallItem, + RTInputAudioItem, + RTMessageItem, + RTResponse, + RTTextContent, +) from app.helpers.call_utils import ( handle_clear_queue, - handle_media, - handle_recognize_text, + handle_play_text, tts_sentence_split, ) from app.helpers.config import CONFIG -from app.helpers.features import answer_hard_timeout_sec, answer_soft_timeout_sec -from app.helpers.llm_tools import LlmPlugins -from app.helpers.llm_worker import ( - MaximumTokensReachedError, - SafetyCheckError, - completion_stream, -) +from app.helpers.features import vad_silence_timeout_ms, vad_threshold +from app.helpers.llm_tools import DefaultPlugin +from app.helpers.llm_utils import AbstractPlugin +from app.helpers.llm_worker import completion_realtime from app.helpers.logging import logger -from app.helpers.monitoring import tracer +from app.helpers.monitoring import CallAttributes, span_attribute, tracer from app.models.call import CallStateModel from app.models.message import ( - ActionEnum as MessageAction, MessageModel, PersonaEnum as MessagePersonaEnum, StyleEnum as MessageStyleEnum, @@ -32,240 +36,76 @@ remove_message_action, ) -_cache = CONFIG.cache.instance() _db = CONFIG.database.instance() -# TODO: Refacto, this function is too long (and remove PLR0912/PLR0915 ignore) @tracer.start_as_current_span("call_load_llm_chat") -async def load_llm_chat( # noqa: PLR0912, PLR0915 +async def load_llm_chat( + audio_bits_per_sample: int, + audio_channels: int, + audio_sample_rate: int, + audio_stream: asyncio.Queue[bytes], + automation_client: CallAutomationClient, call: CallStateModel, - client: CallAutomationClient, post_callback: Callable[[CallStateModel], Awaitable[None]], - training_callback: Callable[[CallStateModel], Awaitable[None]], - _iterations_remaining: int = 3, -) -> CallStateModel: - """ - Handle the intelligence of the call, including: LLM chat, TTS, and media play. - - Play the loading sound while waiting for the intelligence to be processed. If the intelligence is not processed after few secs, play the timeout sound. If the intelligence is not processed after more secs, stop the intelligence processing and play the error sound. - - Returns the updated call model. - """ - logger.info("Loading LLM chat") - - play_loading_sound = True - - async def _tts_callback(text: str, style: MessageStyleEnum) -> None: - """ - Send back the TTS to the user. - """ - nonlocal play_loading_sound - - # For first TTS, interrupt loading sound and disable loading it - interrupt_queue = False - if play_loading_sound: - interrupt_queue = True - play_loading_sound = False - - await asyncio.gather( - handle_recognize_text( - call=call, - client=client, - interrupt_queue=interrupt_queue, - style=style, - text=text, - ), # First, recognize the next voice - _db.call_aset( - call - ), # Second, save in DB allowing (1) user to cut off the Assistant and (2) SMS answers to be in order - ) - - # Pointer - pointer_cache_key = f"{__name__}-load_llm_chat-pointer-{call.call_id}" - pointer_current = time.time() # Get system current time - await _cache.aset( - key=pointer_cache_key, - ttl_sec=await answer_hard_timeout_sec(), - value=str(pointer_current), - ) +) -> None: + # System prompts + system = CONFIG.prompts.llm.chat_system(call) - # Chat - chat_task = asyncio.create_task( - _execute_llm_chat( - call=call, - client=client, - post_callback=post_callback, - use_tools=_iterations_remaining > 0, - tts_callback=_tts_callback, - ) + # Initialize TTS callbacks + tts_callback = _tts_callback( + automation_client=automation_client, + call=call, ) - # Loading - def _loading_task() -> asyncio.Task: - return asyncio.create_task(asyncio.sleep(loading_timer)) - - loading_timer = 5 # Play loading sound every 5 secs - loading_task = _loading_task() - - # Timeouts - soft_timeout_triggered = False - soft_timeout_task = asyncio.create_task( - asyncio.sleep(await answer_soft_timeout_sec()) - ) - hard_timeout_task = asyncio.create_task( - asyncio.sleep(await answer_hard_timeout_sec()) + # Build plugins + plugin = DefaultPlugin( + call=call, + client=automation_client, + post_callback=post_callback, ) + tools = await plugin.to_rtclient() - def _clear_tasks() -> None: - chat_task.cancel() - hard_timeout_task.cancel() - loading_task.cancel() - soft_timeout_task.cancel() - - is_error = True - continue_chat = True - try: - while True: - logger.debug("Chat task status: %s", chat_task.done()) - - if pointer_current < float( - (await _cache.aget(pointer_cache_key) or b"0").decode() - ): # Test if pointer updated by another instance - logger.warning("Another chat is running, stopping this one") - # Clean up Communication Services queue - await handle_clear_queue(call=call, client=client) - # Clean up tasks - _clear_tasks() - break - - if chat_task.done(): # Break when chat coroutine is done - # Clean up - _clear_tasks() - # Get result - is_error, continue_chat, call = ( - chat_task.result() - ) # Store updated chat model - await training_callback(call) # Trigger trainings generation - await _db.call_aset( - call - ) # Save ASAP in DB allowing (1) user to cut off the Assistant and (2) SMS answers to be in order - break - - if hard_timeout_task.done(): # Break when hard timeout is reached - logger.warning( - "Hard timeout of %ss reached", - await answer_hard_timeout_sec(), - ) - # Clean up - _clear_tasks() - break - - if play_loading_sound: # Catch timeout if async loading is not started - if ( - soft_timeout_task.done() and not soft_timeout_triggered - ): # Speak when soft timeout is reached - logger.warning( - "Soft timeout of %ss reached", - await answer_soft_timeout_sec(), - ) - soft_timeout_triggered = True - # Never store the error message in the call history, it has caused hallucinations in the LLM - await handle_recognize_text( - call=call, - client=client, - store=False, - text=await CONFIG.prompts.tts.timeout_loading(call), - ) - - elif loading_task.done(): # Do not play timeout prompt plus loading, it can be frustrating for the user - loading_task = _loading_task() - await handle_media( - call=call, - client=client, - sound_url=CONFIG.prompts.sounds.loading(), - ) # Play loading sound - - # Wait to not block the event loop for other requests - await asyncio.sleep(1) - - except Exception: - logger.warning("Error loading intelligence", exc_info=True) - - if is_error: # Error during chat - if not continue_chat or _iterations_remaining < 1: # Maximum retries reached - logger.warning("Maximum retries reached, stopping chat") - content = await CONFIG.prompts.tts.error(call) - # Speak the error - await _tts_callback(content, MessageStyleEnum.NONE) - # Never store the error message in the call history, it has caused hallucinations in the LLM - - else: # Retry chat after an error - logger.info("Retrying chat, %s remaining", _iterations_remaining - 1) - return await load_llm_chat( - call=call, - client=client, - post_callback=post_callback, - training_callback=training_callback, - _iterations_remaining=_iterations_remaining - 1, - ) - else: - if continue_chat and _iterations_remaining > 0: # Contiue chat - logger.info("Continuing chat, %s remaining", _iterations_remaining - 1) - return await load_llm_chat( - call=call, - client=client, - post_callback=post_callback, - training_callback=training_callback, - _iterations_remaining=_iterations_remaining - 1, - ) # Recursive chat (like for for retry or tools) - - # End chat - await handle_recognize_text( + # Build client + async with ( + completion_realtime( + max_tokens=160, # Lowest possible value for 90% of the cases, if not sufficient, retry will be triggered, 100 tokens ~= 75 words, 20 words ~= 1 sentence, 6 sentences ~= 160 tokens + messages=call.messages, + system=system, + tools=tools, + ) as client, + aiojobs.Scheduler() as scheduler, + ): + await _in_audio( + automation_client=automation_client, + bits_per_sample=audio_bits_per_sample, call=call, + channels=audio_channels, client=client, - no_response_error=True, - style=MessageStyleEnum.NONE, - text=None, - ) # Trigger an empty text to recognize and generate timeout error if user does not speak - - return call + plugin=plugin, + sample_rate=audio_sample_rate, + scheduler=scheduler, + stream=audio_stream, + tts_callback=tts_callback, + ) -# TODO: Refacto, this function is too long (and remove PLR0911/PLR0912/PLR0915 ignore) -@tracer.start_as_current_span("call_execute_llm_chat") -async def _execute_llm_chat( # noqa: PLR0911, PLR0912, PLR0915 - call: CallStateModel, - client: CallAutomationClient, - post_callback: Callable[[CallStateModel], Awaitable[None]], +async def _out_message_item( + event: RTMessageItem, tts_callback: Callable[[str, MessageStyleEnum], Awaitable[None]], - use_tools: bool, -) -> tuple[bool, bool, CallStateModel]: - """ - Perform the chat with the LLM model. - - This function will handle: - - - The chat with the LLM model (incl system prompts, tools, and user callback) - - Retry as possible if the LLM model fails to return a response - - Returns a tuple with: - - 1. `bool`, notify error - 2. `bool`, should retry chat - 3. `CallStateModel`, the updated model - """ - logger.debug("Running LLM chat") +) -> None: + content_buffer_pointer = 0 content_full = "" - - async def _buffer_callback(text: str, style: MessageStyleEnum) -> None: - nonlocal content_full - content_full += f" {text}" - await tts_callback(text, style) + style = MessageStyleEnum.NONE async def _content_callback( buffer: str, style: MessageStyleEnum ) -> MessageStyleEnum: + """ + Clean text buffer and send to TTS if necessary. + + If the message is the first one, the TTS is interrupted. + """ # Remove tool calls from buffer content and detect style local_style, local_content = extract_message_style( remove_message_action(buffer) @@ -275,131 +115,239 @@ async def _content_callback( await tts_callback(local_content, new_style) return new_style - # Build RAG - trainings = await call.trainings() - logger.info("Enhancing LLM chat with %s trainings", len(trainings)) - logger.debug("Trainings: %s", trainings) - - # System prompts - system = CONFIG.prompts.llm.chat_system( - call=call, - trainings=trainings, + # Consume responses + async for content_part in event: + # Skip non-text content + if not isinstance(content_part, RTTextContent): + continue + # Consume text stream + async for chunck in content_part.text_chunks(): + content_full += chunck + # Return to TTS as soon as a sentence is ready + for sentence, length in tts_sentence_split( + content_full[content_buffer_pointer:], False + ): + # Update buffer pointer + content_buffer_pointer += length + # Send sentence to TTS and update style + style = await _content_callback(sentence, style) + + +async def _out_function_call_item( + event: RTFunctionCallItem, + plugin: AbstractPlugin, +) -> None: + # Consume and parse the event + await event + tool = MessageToolModel( + function_name=event.function_name, + function_arguments=event.arguments, + tool_id=event.call_id, ) + # Execute + await tool.execute_function(plugin) + # Update call model if object reference changed + # TOOD: Uncomment when the shared reference is implemented + # call = plugins.call - # Build plugins - plugins = LlmPlugins( - call=call, - client=client, - post_callback=post_callback, - tts_callback=_buffer_callback, + +async def _out_response( + events: RTResponse, + plugin: AbstractPlugin, + scheduler: aiojobs.Scheduler, + tts_callback: Callable[[str, MessageStyleEnum], Awaitable[None]], +) -> None: + async for event in events: + match event.type: + case "message": + await scheduler.spawn( + _out_message_item( + event=event, + tts_callback=tts_callback, + ) + ) + case "function_call": + await scheduler.spawn( + _out_function_call_item( + event=event, + plugin=plugin, + ) + ) + + +async def _out_input_item( + call: CallStateModel, + event: RTInputAudioItem, +) -> None: + # Consume event and extract content + await event + text = (event.transcript or "").strip() + + # Skip if no transcription + if not text: + return + + # Log + logger.info("Voice recognition: %s", text) + span_attribute(CallAttributes.CALL_CHANNEL, "voice") + span_attribute(CallAttributes.CALL_MESSAGE, text) + + # Update call history + call.messages.append( + MessageModel( + content=text, + persona=MessagePersonaEnum.HUMAN, + ) ) - tools = [] - if not use_tools: - logger.warning("Tools disabled for this chat") - else: - tools = await plugins.to_openai(call) - logger.debug("Tools: %s", tools) - # Execute LLM inference - maximum_tokens_reached = False - content_buffer_pointer = 0 - tool_calls_buffer: dict[int, MessageToolModel] = {} - try: - async for delta in completion_stream( - max_tokens=160, # Lowest possible value for 90% of the cases, if not sufficient, retry will be triggered, 100 tokens ~= 75 words, 20 words ~= 1 sentence, 6 sentences ~= 160 tokens - messages=call.messages, - system=system, - tools=tools, - ): - if not delta.content: - for piece in delta.tool_calls or []: - tool_calls_buffer[piece.index] = tool_calls_buffer.get( - piece.index, MessageToolModel() - ) - tool_calls_buffer[piece.index] += piece - else: - # Store whole content - content_full += delta.content - for sentence, length in tts_sentence_split( - content_full[content_buffer_pointer:], False - ): - content_buffer_pointer += length - plugins.style = await _content_callback(sentence, plugins.style) - except MaximumTokensReachedError: # Retry on maximum tokens reached - logger.warning("Maximum tokens reached for this completion, retry asked") - maximum_tokens_reached = True - except APIError as e: # Retry on API error - logger.warning("OpenAI API call error: %s", e) - return True, True, call # Error, retry - except SafetyCheckError as e: # Last user message is trash, remove it - logger.warning("Safety Check error: %s", e) - if last_message := next( - ( - call - for call in reversed(call.messages) - if call.persona == MessagePersonaEnum.HUMAN - and call.action in [MessageAction.SMS, MessageAction.TALK] - ), - None, - ): # Remove last user message - call.messages.remove(last_message) - return True, False, call # Error, no retry - - # Flush the remaining buffer - if content_buffer_pointer < len(content_full): - plugins.style = await _content_callback( - content_full[content_buffer_pointer:], plugins.style +# TODO: Refacto and simplify +async def _in_audio( # noqa: PLR0913, PLR0915 + automation_client: CallAutomationClient, + bits_per_sample: int, + call: CallStateModel, + channels: int, + client: RTClient, + plugin: AbstractPlugin, + sample_rate: int, + scheduler: aiojobs.Scheduler, + stream: asyncio.Queue[bytes], + tts_callback: Callable[[str, MessageStyleEnum], Awaitable[None]], +) -> None: + clear_tts_task: asyncio.Task | None = None + flush_task: asyncio.Task | None = None + rms_threshold = await vad_threshold() + sample_width = bits_per_sample // 8 + silence_duration_ms = await vad_silence_timeout_ms() + + async def _flush_callback() -> None: + """ + Flush the audio buffer if no audio is detected for a while. + """ + nonlocal clear_tts_task + + # Wait for the timeout + await asyncio.sleep(silence_duration_ms / 1000) + + # Cancel the TTS clear task if any + if clear_tts_task: + clear_tts_task.cancel() + clear_tts_task = None + + logger.debug("Timeout triggered, flushing audio buffer") + + # Commit the buffer + input_item = await client.commit_audio() + response = await client.generate_response() + await scheduler.spawn( + _out_response( + events=response, + plugin=plugin, + scheduler=scheduler, + tts_callback=tts_callback, + ) ) + await scheduler.spawn( + _out_input_item( + call=call, + event=input_item, + ) + ) + + async def _clear_tts_callback() -> None: + """ + Clear the TTS queue. - # Convert tool calls buffer - tool_calls = [tool_call for _, tool_call in tool_calls_buffer.items()] + Start is the index of the buffer where the TTS was triggered. + """ + # Wait 200ms before clearing the TTS queue + await asyncio.sleep(0.2) - # Delete action and style from the message as they are in the history and LLM hallucinates them - _, content_full = extract_message_style(remove_message_action(content_full)) + logger.debug("Voice detected, cancelling TTS") - logger.debug("Chat response: %s", content_full) - logger.debug("Tool calls: %s", tool_calls) + # Clear the LLM queue + await scheduler.spawn(client.clear_audio()) - # OpenAI GPT-4 Turbo sometimes return wrong tools schema, in that case, retry within limits - # TODO: Tries to detect this error earlier - # See: https://community.openai.com/t/model-tries-to-call-unknown-function-multi-tool-use-parallel/490653 - if any( - tool_call.function_name == "multi_tool_use.parallel" for tool_call in tool_calls - ): - logger.warning('LLM send back invalid tool schema "multi_tool_use.parallel"') - return True, True, call # Error, retry - - # OpenAI GPT-4 Turbo tends to return empty content, in that case, retry within limits - if not content_full and not tool_calls: - logger.warning("Empty content, retrying") - return True, True, call # Error, retry - - # Execute tools - tool_tasks = [tool_call.execute_function(plugins) for tool_call in tool_calls] - await asyncio.gather(*tool_tasks) - call = plugins.call # Update call model if object reference changed - - # Store message - if call.messages[-1].persona == MessagePersonaEnum.ASSISTANT: - message = call.messages[-1] - message.content = content_full.strip() - message.style = plugins.style - message.tool_calls = tool_calls - else: - call.messages.append( - MessageModel( - content=content_full.strip(), - persona=MessagePersonaEnum.ASSISTANT, - style=plugins.style, - tool_calls=tool_calls, + # Clear the TTS queue + await scheduler.spawn( + handle_clear_queue( + call=call, + client=automation_client, ) ) - if tool_calls: # Recusive call if needed - return False, True, call + # Consumes audio stream + while True: + # Wait for the next audio packet + in_chunck = await stream.get() + + # Load audio + in_audio: AudioSegment = AudioSegment( + channels=channels, + data=in_chunck, + frame_rate=sample_rate, + sample_width=sample_width, + ) + + # Confirm ASAP that the event is processed + stream.task_done() + + # Get the relative dB, silences shoudl be at 1 to 5% of the max, so 0.1 to 0.5 of the threshold + in_empty = False + if min(in_audio.rms / in_audio.max_possible_amplitude * 10, 1) < rms_threshold: + in_empty = True + # Start timeout if not already started and VAD already triggered + if not flush_task: + flush_task = asyncio.create_task(_flush_callback()) + + # Convert to a compatible format for the LLM + # See: https://platform.openai.com/docs/guides/realtime?text-generation-quickstart-example=text#audio-formats + out_audio = in_audio.set_frame_rate(24000).set_channels(1).set_sample_width(2) + + if in_empty: + # Voice not detected, add the audio to the buffer + assert isinstance(out_audio.raw_data, bytes) + await scheduler.spawn(client.send_audio(out_audio.raw_data)) + # Continue to the next audio packet + continue + + # Voice detected, cancel the flush task if any + if flush_task: + flush_task.cancel() + flush_task = None + + # Start the TTS clear task + if not clear_tts_task: + clear_tts_task = asyncio.create_task(_clear_tts_callback()) - if maximum_tokens_reached: # Retry if maximum tokens reached - return False, True, call # TODO: Should we notify an error? + # Send voice to the LLM + assert isinstance(out_audio.raw_data, bytes) + await scheduler.spawn(client.send_audio(out_audio.raw_data)) + + +def _tts_callback( + automation_client: CallAutomationClient, + call: CallStateModel, +) -> Callable[[str, MessageStyleEnum], Awaitable[None]]: + """ + Send back the TTS to the user. + """ + + @wraps(_tts_callback) + async def wrapper( + text: str, + style: MessageStyleEnum, + ) -> None: + await asyncio.gather( + handle_play_text( + call=call, + client=automation_client, + style=style, + text=text, + ), # First, play the TTS to the user + _db.call_aset( + call + ), # Second, save in DB allowing (1) user to cut off the Assistant and (2) SMS answers to be in order + ) - return False, False, call # No error, no retry + return wrapper diff --git a/app/helpers/call_utils.py b/app/helpers/call_utils.py index 6cbebc4e..3b017279 100644 --- a/app/helpers/call_utils.py +++ b/app/helpers/call_utils.py @@ -11,6 +11,9 @@ RecognizeInputType, SsmlSource, ) +from azure.communication.callautomation._generated.models import ( + StartMediaStreamingRequest, +) from azure.communication.callautomation.aio import ( CallAutomationClient, CallConnectionClient, @@ -18,7 +21,6 @@ from azure.core.exceptions import HttpResponseError, ResourceNotFoundError from app.helpers.config import CONFIG -from app.helpers.features import phone_silence_timeout_sec from app.helpers.logging import logger from app.models.call import CallStateModel from app.models.message import ( @@ -83,51 +85,6 @@ def tts_sentence_split( ) -# TODO: Disable or lower profanity filter. The filter seems enabled by default, it replaces words like "holes in my roof" by "*** in my roof". This is not acceptable for a call center. -async def _handle_recognize_media( # noqa: PLR0913 - call: CallStateModel, - client: CallAutomationClient, - context: ContextEnum | None, - interrupt: bool, - style: MessageStyleEnum, - text: str | None, -) -> None: - """ - Play a media to a call participant and start recognizing the response. - - If `context` is provided, it will be used to track the operation. - """ - logger.info("Recognizing voice: %s", text) - try: - assert call.voice_id, "Voice ID is required for recognizing media" - async with _use_call_client(client, call.voice_id) as call_client: - await call_client.start_recognizing_media( - end_silence_timeout=await phone_silence_timeout_sec(), - input_type=RecognizeInputType.SPEECH, - interrupt_call_media_operation=interrupt, - interrupt_prompt=True, - operation_context=_context_builder({context}), - play_prompt=( - _audio_from_text( - call=call, - style=style, - text=text, - ) - if text - else None - ), # If no text is provided, only recognize - speech_language=call.lang.short_code, - target_participant=PhoneNumberIdentifier(call.initiate.phone_number), # pyright: ignore - ) - except ResourceNotFoundError: - logger.debug("Call hung up before recognizing") - except HttpResponseError as e: - if "call already terminated" in e.message.lower(): - logger.debug("Call hung up before playing") - else: - raise e - - async def _handle_play_text( call: CallStateModel, client: CallAutomationClient, @@ -140,9 +97,9 @@ async def _handle_play_text( If `context` is provided, it will be used to track the operation. """ - logger.info("Playing text: %s", text) + logger.info("Playing TTS: %s", text) try: - assert call.voice_id, "Voice ID is required for playing text" + assert call.voice_id, "Voice ID is required to control the call" async with _use_call_client(client, call.voice_id) as call_client: await call_client.play_media( operation_context=_context_builder({context}), @@ -173,7 +130,7 @@ async def handle_media( If `context` is provided, it will be used to track the operation. """ try: - assert call.voice_id, "Voice ID is required for recognizing media" + assert call.voice_id, "Voice ID is required to control the call" async with _use_call_client(client, call.voice_id) as call_client: await call_client.play_media( operation_context=_context_builder({context}), @@ -188,69 +145,6 @@ async def handle_media( raise e -async def handle_recognize_text( # noqa: PLR0913 - call: CallStateModel, - client: CallAutomationClient, - text: str | None, - context: ContextEnum | None = None, - interrupt_queue: bool = False, - no_response_error: bool = False, - store: bool = True, - style: MessageStyleEnum = MessageStyleEnum.NONE, -) -> None: - """ - Play a text to a call participant and start recognizing the response. - - If `store` is `True`, the text will be stored in the call messages. Starts by playing text, then the "ready" sound, and finally starts recognizing the response. - """ - # Only recognize - if not text: - await _handle_recognize_media( - call=call, - client=client, - context=context, - interrupt=interrupt_queue, - style=style, - text=None, - ) - return - - # Split text in chunks - chunks = await _chunk_before_tts( - call=call, - store=store, - style=style, - text=text, - ) - - # Play each chunk - for i, chunk in enumerate(chunks): - # For first chunk, interrupt media if needed - chunck_interrupt_queue = interrupt_queue if i == 0 else False - - # For last chunk, recognize media to let user to interrupt bot - if i == len(chunks) - 1: - if no_response_error: - await _handle_recognize_media( - call=call, - client=client, - context=context, - interrupt=chunck_interrupt_queue, - style=style, - text=chunk, - ) - return - - # For other chunks, play text - await _handle_play_text( - call=call, - client=client, - context=context, - style=style, - text=chunk, - ) - - async def handle_play_text( # noqa: PLR0913 call: CallStateModel, client: CallAutomationClient, @@ -404,7 +298,7 @@ async def handle_recognize_ivr( """ logger.info("Recognizing IVR: %s", text) try: - assert call.voice_id, "Voice ID is required for recognizing media" + assert call.voice_id, "Voice ID is required to control the call" async with _use_call_client(client, call.voice_id) as call_client: await call_client.start_recognizing_media( choices=choices, @@ -429,7 +323,7 @@ async def handle_hangup( ) -> None: logger.info("Hanging up: %s", call.initiate.phone_number) try: - assert call.voice_id, "Voice ID is required for recognizing media" + assert call.voice_id, "Voice ID is required to control the call" async with _use_call_client(client, call.voice_id) as call_client: await call_client.hang_up(is_for_everyone=True) except ResourceNotFoundError: @@ -449,7 +343,7 @@ async def handle_transfer( ) -> None: logger.info("Transferring call: %s", target) try: - assert call.voice_id, "Voice ID is required for recognizing media" + assert call.voice_id, "Voice ID is required to control the call" async with _use_call_client(client, call.voice_id) as call_client: await call_client.transfer_call_to_participant( operation_context=_context_builder({context}), @@ -464,6 +358,47 @@ async def handle_transfer( raise e +async def start_audio_streaming( + client: CallAutomationClient, + call: CallStateModel, +) -> None: + logger.info("Starting audio streaming") + try: + assert call.voice_id, "Voice ID is required to control the call" + async with _use_call_client(client, call.voice_id) as call_client: + # TODO: Use the public API once the "await" have been fixed + # await call_client.start_media_streaming() + await call_client._call_media_client.start_media_streaming( + call_connection_id=call_client._call_connection_id, + start_media_streaming_request=StartMediaStreamingRequest(), + ) + except ResourceNotFoundError: + logger.debug("Call hung up before starting streaming") + except HttpResponseError as e: + if "call already terminated" in e.message.lower(): + logger.debug("Call hung up before starting streaming") + else: + raise e + + +async def stop_audio_streaming( + client: CallAutomationClient, + call: CallStateModel, +) -> None: + logger.info("Stopping audio streaming") + try: + assert call.voice_id, "Voice ID is required to control the call" + async with _use_call_client(client, call.voice_id) as call_client: + await call_client.stop_media_streaming() + except ResourceNotFoundError: + logger.debug("Call hung up before stopping streaming") + except HttpResponseError as e: + if "call already terminated" in e.message.lower(): + logger.debug("Call hung up before stopping streaming") + else: + raise e + + def _context_builder(contexts: set[ContextEnum | None] | None) -> str | None: if not contexts: return None diff --git a/app/helpers/config_models/conversation.py b/app/helpers/config_models/conversation.py index 233d6810..97608e04 100644 --- a/app/helpers/config_models/conversation.py +++ b/app/helpers/config_models/conversation.py @@ -186,12 +186,12 @@ def _field_to_pydantic( def _type_to_pydantic( data: ClaimTypeEnum, ) -> type | Annotated[Any, ...]: - if data == ClaimTypeEnum.DATETIME: - return datetime - if data == ClaimTypeEnum.EMAIL: - return EmailStr - if data == ClaimTypeEnum.PHONE_NUMBER: - return PhoneNumber - if data == ClaimTypeEnum.TEXT: - return str - raise ValueError(f"Unsupported data: {data}") + match data: + case ClaimTypeEnum.DATETIME: + return datetime + case ClaimTypeEnum.EMAIL: + return EmailStr + case ClaimTypeEnum.PHONE_NUMBER: + return PhoneNumber + case ClaimTypeEnum.TEXT: + return str diff --git a/app/helpers/config_models/llm.py b/app/helpers/config_models/llm.py index e99426da..7cbd1c80 100644 --- a/app/helpers/config_models/llm.py +++ b/app/helpers/config_models/llm.py @@ -1,11 +1,16 @@ from abc import abstractmethod +from collections.abc import AsyncGenerator +from contextlib import asynccontextmanager from enum import Enum -from typing import Any +from azure.core.credentials import AzureKeyCredential from openai import AsyncAzureOpenAI, AsyncOpenAI -from pydantic import BaseModel, Field, SecretStr, ValidationInfo, field_validator +from pydantic import BaseModel, SecretStr, ValidationInfo, field_validator +from rtclient import ( + RTClient, +) -from app.helpers.identity import token +from app.helpers.identity import credential, token class ModeEnum(str, Enum): @@ -14,13 +19,112 @@ class ModeEnum(str, Enum): class AbstractPlatformModel(BaseModel): - _client_kwargs: dict[str, Any] = { - # Reliability - "max_retries": 0, # Retries are managed manually - "timeout": 60, - } + """ + Shared properties for all LLM platform models. + """ + context: int model: str + + +class AbstractRealtimePlatformModel(AbstractPlatformModel): + temperature: float = 0.6 # 0.6 is the minimum as of Nov 5 2024 + + @abstractmethod + @asynccontextmanager + def instance( + self, + ) -> AsyncGenerator[tuple[RTClient, "AbstractRealtimePlatformModel"], None]: + pass + + +class AzureOpenaiRealtimePlatformModel(AbstractRealtimePlatformModel): + """ + Properties for the realtime LLM models, like `gpt-4o-realtime`, hosted on Azure. + """ + + deployment: str + endpoint: str + + @asynccontextmanager + async def instance( + self, + ) -> AsyncGenerator[tuple[RTClient, "AzureOpenaiRealtimePlatformModel"], None]: + async with RTClient( + # Deployment + azure_deployment=self.deployment, + model=self.model, + url=self.endpoint, + # Authentication + token_credential=await credential(), + ) as client: + yield client, self + + +class OpenaiRealtimePlatformModel(AbstractRealtimePlatformModel): + """ + Properties for the realtime LLM models, like `gpt-4o-realtime`, hosted on OpenAI. + """ + + api_key: SecretStr + + @asynccontextmanager + async def instance( + self, + ) -> AsyncGenerator[tuple[RTClient, "OpenaiRealtimePlatformModel"], None]: + async with RTClient( + # Deployment + model=self.model, + # Authentication + key_credential=AzureKeyCredential(self.api_key.get_secret_value()), + ) as client: + yield client, self + + +class SelectedRealtimePlatformModel(BaseModel): + """ + Abstraction for the selected LLM realtime platform model. + + Allows to switch between Azure and OpenAI models from the configuration without changing the interface. + """ + + azure_openai: AzureOpenaiRealtimePlatformModel | None = None + mode: ModeEnum + openai: OpenaiRealtimePlatformModel | None = None + + @field_validator("azure_openai") + @classmethod + def _validate_azure_openai( + cls, + azure_openai: AzureOpenaiRealtimePlatformModel | None, + info: ValidationInfo, + ) -> AzureOpenaiRealtimePlatformModel | None: + if not azure_openai and info.data.get("mode", None) == ModeEnum.AZURE_OPENAI: + raise ValueError("Azure OpenAI config required") + return azure_openai + + @field_validator("openai") + @classmethod + def _validate_openai( + cls, + openai: OpenaiRealtimePlatformModel | None, + info: ValidationInfo, + ) -> OpenaiRealtimePlatformModel | None: + if not openai and info.data.get("mode", None) == ModeEnum.OPENAI: + raise ValueError("OpenAI config required") + return openai + + def selected( + self, + ) -> AbstractRealtimePlatformModel: + platform = ( + self.azure_openai if self.mode == ModeEnum.AZURE_OPENAI else self.openai + ) + assert platform + return platform + + +class AbstractSequentialPlatformModel(AbstractPlatformModel): seed: int = 42 # Reproducible results streaming: bool temperature: float = 0.0 # Most focused and deterministic @@ -28,20 +132,28 @@ class AbstractPlatformModel(BaseModel): @abstractmethod async def instance( self, - ) -> tuple[AsyncAzureOpenAI | AsyncOpenAI, "AbstractPlatformModel"]: + ) -> tuple[AsyncAzureOpenAI | AsyncOpenAI, "AbstractSequentialPlatformModel"]: pass -class AzureOpenaiPlatformModel(AbstractPlatformModel): +class AzureOpenaiSequentialPlatformModel(AbstractSequentialPlatformModel): + """ + Properties for the sequential LLM models, like `gpt-4o-mini`, hosted on Azure. + """ + _client: AsyncAzureOpenAI | None = None api_version: str = "2024-06-01" deployment: str endpoint: str - async def instance(self) -> tuple[AsyncAzureOpenAI, AbstractPlatformModel]: + async def instance( + self, + ) -> tuple[AsyncAzureOpenAI, "AzureOpenaiSequentialPlatformModel"]: if not self._client: self._client = AsyncAzureOpenAI( - **self._client_kwargs, + # Reliability + max_retries=0, # Retries are managed manually + timeout=60, # Deployment api_version=self.api_version, azure_deployment=self.deployment, @@ -54,35 +166,46 @@ async def instance(self) -> tuple[AsyncAzureOpenAI, AbstractPlatformModel]: return self._client, self -class OpenaiPlatformModel(AbstractPlatformModel): +class OpenaiSequentialPlatformModel(AbstractSequentialPlatformModel): + """ + Properties for the sequential LLM models, like `gpt-4o-mini`, hosted on OpenAI. + """ + _client: AsyncOpenAI | None = None api_key: SecretStr - endpoint: str - async def instance(self) -> tuple[AsyncOpenAI, AbstractPlatformModel]: + async def instance( + self, + ) -> tuple[AsyncOpenAI, "OpenaiSequentialPlatformModel"]: if not self._client: self._client = AsyncOpenAI( - **self._client_kwargs, - # API root URL - base_url=self.endpoint, + # Reliability + max_retries=0, # Retries are managed manually + timeout=60, # Authentication api_key=self.api_key.get_secret_value(), ) return self._client, self -class SelectedPlatformModel(BaseModel): - azure_openai: AzureOpenaiPlatformModel | None = None +class SelectedSequentialPlatformModel(BaseModel): + """ + Abstraction for the selected LLM sequential platform model. + + Allows to switch between Azure and OpenAI models from the configuration without changing the interface. + """ + + azure_openai: AzureOpenaiSequentialPlatformModel | None = None mode: ModeEnum - openai: OpenaiPlatformModel | None = None + openai: OpenaiSequentialPlatformModel | None = None @field_validator("azure_openai") @classmethod def _validate_azure_openai( cls, - azure_openai: AzureOpenaiPlatformModel | None, + azure_openai: AzureOpenaiSequentialPlatformModel | None, info: ValidationInfo, - ) -> AzureOpenaiPlatformModel | None: + ) -> AzureOpenaiSequentialPlatformModel | None: if not azure_openai and info.data.get("mode", None) == ModeEnum.AZURE_OPENAI: raise ValueError("Azure OpenAI config required") return azure_openai @@ -91,14 +214,16 @@ def _validate_azure_openai( @classmethod def _validate_openai( cls, - openai: OpenaiPlatformModel | None, + openai: OpenaiSequentialPlatformModel | None, info: ValidationInfo, - ) -> OpenaiPlatformModel | None: + ) -> OpenaiSequentialPlatformModel | None: if not openai and info.data.get("mode", None) == ModeEnum.OPENAI: raise ValueError("OpenAI config required") return openai - def selected(self) -> AzureOpenaiPlatformModel | OpenaiPlatformModel: + def selected( + self, + ) -> AbstractSequentialPlatformModel: platform = ( self.azure_openai if self.mode == ModeEnum.AZURE_OPENAI else self.openai ) @@ -107,13 +232,9 @@ def selected(self) -> AzureOpenaiPlatformModel | OpenaiPlatformModel: class LlmModel(BaseModel): - fast: SelectedPlatformModel = Field( - serialization_alias="backup", # Backwards compatibility with v6 - ) - slow: SelectedPlatformModel = Field( - serialization_alias="primary", # Backwards compatibility with v6 - ) - - def selected(self, is_fast: bool) -> AzureOpenaiPlatformModel | OpenaiPlatformModel: - platform = self.fast if is_fast else self.slow - return platform.selected() + """ + Properties for the LLM configuration. + """ + + realtime: SelectedRealtimePlatformModel + sequential: SelectedSequentialPlatformModel diff --git a/app/helpers/config_models/prompts.py b/app/helpers/config_models/prompts.py index 488aee49..a25daea7 100644 --- a/app/helpers/config_models/prompts.py +++ b/app/helpers/config_models/prompts.py @@ -2,7 +2,6 @@ import random from datetime import datetime from functools import cached_property -from html import escape from logging import Logger from textwrap import dedent @@ -15,26 +14,6 @@ from app.models.next import NextModel from app.models.reminder import ReminderModel from app.models.synthesis import SynthesisModel -from app.models.training import TrainingModel - - -class SoundModel(BaseModel): - loading_tpl: str = "{public_url}/loading.wav" - ready_tpl: str = "{public_url}/ready.wav" - - def loading(self) -> str: - from app.helpers.config import CONFIG - - return self.loading_tpl.format( - public_url=CONFIG.resources.public_url, - ) - - def ready(self) -> str: - from app.helpers.config import CONFIG - - return self.ready_tpl.format( - public_url=CONFIG.resources.public_url, - ) class LlmModel(BaseModel): @@ -118,7 +97,7 @@ class LlmModel(BaseModel): ## Example 1 Conversation objective: Help the customer with their accident. Customer will be calling from a car, with the SOS button. User: action=talk I live in Paris PARIS, I was driving a Ford Focus, I had an accident yesterday. - Tools: update indicent location, update vehicule reference, update incident date + Tools: update indicent location, update vehicule reference, update incident date, get trainings for the car model Assistant: style=sad I understand, your car has been in an accident. style=none Let me think... I have updated your file. Now, could I have the license plate number of your car? Also were there any injuries? ## Example 2 @@ -126,7 +105,7 @@ class LlmModel(BaseModel): Assistant: Hello, I'm Marc, the virtual assistant. I'm here to help you. Don't hesitate to ask me anything. Assistant: I'm specialized in insurance contracts. We can discuss that together. How can I help you today? User: action=talk The roof has had holes since yesterday's big storm. They're about the size of golf balls. I'm worried about water damage. - Tools: update incident description, create a reminder for assistant to plan an appointment with a roofer + Tools: update incident description, get trainings for contract details and claim history, create a reminder for assistant to plan an appointment with a roofer Assistant: style=sad I know what you mean... I see, your roof has holes since the big storm yesterday. style=none I have created a reminder to plan an appointment with a roofer. style=cheerful I hope you are safe and sound! Take care of yourself... style=none Can you confirm me the address of the house plus the date of the storm? ## Example 3 @@ -139,13 +118,13 @@ class LlmModel(BaseModel): Assistant: Hello, I'm John, the virtual assistant. I'm here to help you. Don't hesitate to ask me anything. Assistant: I'm specialized in home care services. How can I help you today? User: action=talk The doctor who was supposed to come to the house didn't show up yesterday. - Tools: create a reminder for assistant to call the doctor to reschedule the appointment, create a reminder for assistant to call the customer in two days to check if the doctor came + Tools: create a reminder for assistant to call the doctor to reschedule the appointment, create a reminder for assistant to call the customer in two days to check if the doctor came, get trainings for the scheduling policy of the doctor Assistant: style=sad Let me see, the doctor did not come to your home yesterday... I'll do my best to help you. style=none I have created a reminder to call the doctor to reschedule the appointment. Now, it should be better for you. And, I'll tale care tomorrow to see if the doctor came. style=cheerful Is it the first time the doctor didn't come? ## Example 5 Conversation objective: Assistant is a call center agent for a car insurance company. Help through the claim process. User: action=call I had an accident this morning, I was shopping. My car is at home, at 134 Rue de Rivoli. - Tools: update incident location, update incident description + Tools: update incident location, update incident description, get trainings for the claim process Assistant: style=sad I understand, you had an accident this morning while shopping. style=none I have updated your file with the location you are at Rue de Rivoli. Can you tell me more about the accident? User: action=hungup User: action=call @@ -155,7 +134,7 @@ class LlmModel(BaseModel): Conversation objective: Fill the claim with the customer. Claim is about a car accident. User: action=talk I had an accident this morning, I was shopping. Let me send the exact location by SMS. User: action=sms At the corner of Rue de la Paix and Rue de Rivoli. - Tools: update incident location + Tools: update incident location,n Assistant: style=sad I get it, you had an accident this morning while shopping. style=none I have updated your file with the location you sent me by SMS. style=cheerful Is it correct? ## Example 7 @@ -167,7 +146,7 @@ class LlmModel(BaseModel): ## Example 8 Conversation objective: Gather feedbacks after an in-person meeting between a sales representative and the customer. User: action=talk Can you talk a bit slower? - Tools: update voice speed + Tools: update voice speed, get trainings for the escalation process Assistant: style=none I will talk slower. If you need me to repeat something, just ask me. Now, can you tall me a bit more about the meeting? How did it go? ## Example 9 @@ -335,7 +314,7 @@ def default_system(self, call: CallStateModel) -> str: ) def chat_system( - self, call: CallStateModel, trainings: list[TrainingModel] + self, call: CallStateModel ) -> list[ChatCompletionSystemMessageParam]: from app.models.message import ( ActionEnum as MessageActionEnum, @@ -354,7 +333,6 @@ def chat_system( .decode(), styles=", ".join([style.value for style in MessageStyleEnum]), task=call.initiate.task, - trainings=trainings, ), call=call, ) @@ -441,31 +419,14 @@ def next_system( def _format( self, prompt_tpl: str, - trainings: list[TrainingModel] | None = None, **kwargs: str, ) -> str: # Remove possible indentation then render the template formatted_prompt = dedent(prompt_tpl.format(**kwargs)).strip() - - # Format trainings, if any - if trainings: - # Format documents for Content Safety scan compatibility - # See: https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/content-filter?tabs=warning%2Cpython-new#embedding-documents-in-your-prompt - trainings_str = "\n".join( - [ - f"{escape(training.model_dump_json(exclude=TrainingModel.excluded_fields_for_llm()))}" - for training in trainings - ] - ) - formatted_prompt += "\n\n# Internal documentation you can use" - formatted_prompt += f"\n{trainings_str}" - # Remove newlines to avoid hallucinations issues with GPT-4 Turbo formatted_prompt = " ".join( [line.strip() for line in formatted_prompt.splitlines()] ) - - self.logger.debug("Formatted prompt: %s", formatted_prompt) return formatted_prompt def _messages( @@ -481,7 +442,6 @@ def _messages( role="system", ), ] - self.logger.debug("Messages: %s", messages) return messages @cached_property @@ -508,11 +468,6 @@ class TtsModel(BaseModel): "Sure, please hold on. I'll connect you to an agent.", "Hold on, I'll transfer you now.", ] - error_tpl: list[str] = [ - "I'm sorry, I didn't understand. Can you rephrase?", - "I didn't catch that. Could you say it differently?", - "Please repeat that.", - ] goodbye_tpl: list[str] = [ "Thank you for calling, I hope I've been able to help. You can call back, I've got it all memorized. {bot_company} wishes you a wonderful day!", "It was a pleasure assisting you today. Remember, {bot_company} is always here to help. Have a fantastic day!", @@ -553,9 +508,6 @@ async def connect_agent(self, call: CallStateModel) -> str: async def end_call_to_connect_agent(self, call: CallStateModel) -> str: return await self._translate(self.end_call_to_connect_agent_tpl, call) - async def error(self, call: CallStateModel) -> str: - return await self._translate(self.error_tpl, call) - async def goodbye(self, call: CallStateModel) -> str: return await self._translate( self.goodbye_tpl, @@ -642,5 +594,4 @@ def logger(self) -> Logger: class PromptsModel(BaseModel): llm: LlmModel = LlmModel() # Object is fully defined by default - sounds: SoundModel = SoundModel() # Object is fully defined by default tts: TtsModel = TtsModel() # Object is fully defined by default diff --git a/app/helpers/config_models/queue.py b/app/helpers/config_models/queue.py index dcbd071a..8fa097a5 100644 --- a/app/helpers/config_models/queue.py +++ b/app/helpers/config_models/queue.py @@ -8,7 +8,6 @@ class QueueModel(BaseModel, frozen=True): call_name: str post_name: str sms_name: str - training_name: str @cache def call(self): @@ -36,12 +35,3 @@ def sms(self): account_url=self.account_url, name=self.sms_name, ) - - @cache - def training(self): - from app.persistence.azure_queue_storage import AzureQueueStorage - - return AzureQueueStorage( - account_url=self.account_url, - name=self.training_name, - ) diff --git a/app/helpers/features.py b/app/helpers/features.py index 5a312a5c..e524540a 100644 --- a/app/helpers/features.py +++ b/app/helpers/features.py @@ -1,17 +1,19 @@ from typing import TypeVar, cast from azure.appconfiguration.aio import AzureAppConfigurationClient +from azure.core.exceptions import ResourceNotFoundError from app.helpers.config import CONFIG from app.helpers.config_models.cache import MemoryModel from app.helpers.http import azure_transport from app.helpers.identity import credential +from app.helpers.logging import logger from app.persistence.icache import ICache from app.persistence.memory import MemoryCache _cache: ICache = MemoryCache(MemoryModel(max_size=100)) _client: AzureAppConfigurationClient | None = None -T = TypeVar("T", bool, int, str) +T = TypeVar("T", bool, int, float, str) async def answer_hard_timeout_sec() -> int: @@ -26,20 +28,20 @@ async def callback_timeout_hour() -> int: return await _get(key="callback_timeout_hour", type_res=int) or 24 -async def phone_silence_timeout_sec() -> int: - return await _get(key="phone_silence_timeout_sec", type_res=int) or 10 +async def vad_silence_timeout_ms() -> int: + return await _get(key="vad_silence_timeout_ms", type_res=int) or 500 -async def recording_enabled() -> bool: - return await _get(key="recording_enabled", type_res=bool) or False +async def vad_threshold() -> float: + return await _get(key="vad_threshold", type_res=float) or 0.5 -async def slow_llm_for_chat() -> bool: - return await _get(key="slow_llm_for_chat", type_res=bool) or True +async def recording_enabled() -> bool: + return await _get(key="recording_enabled", type_res=bool) or False -async def voice_recognition_retry_max() -> int: - return await _get(key="voice_recognition_retry_max", type_res=int) or 3 +async def recognition_retry_max() -> int: + return await _get(key="recognition_retry_max", type_res=int) or 3 async def _get(key: str, type_res: type[T]) -> T | None: @@ -49,10 +51,14 @@ async def _get(key: str, type_res: type[T]) -> T | None: if cached: return _parse(value=cached.decode(), type_res=type_res) # Try live - async with await _use_client() as client: - setting = await client.get_configuration_setting(key) - # Return default if not found - if not setting: + try: + async with await _use_client() as client: + setting = await client.get_configuration_setting(key) + # Return default if not found + if not setting: + return + except ResourceNotFoundError: + logger.warning("Setting %s not found", key) return # Update cache await _cache.aset( @@ -85,11 +91,16 @@ def _cache_key(key: str) -> str: return f"{__name__}-{key}" -def _parse(value: str, type_res: type[T]) -> T: - if type_res is bool: - return cast(T, value.lower() == "true") - if type_res is int: - return cast(T, int(value)) - if type_res is str: - return cast(T, str(value)) - raise ValueError(f"Unsupported type: {type_res}") +def _parse(value: str, type_res: type[T]) -> T | None: + try: + if type_res is bool: + return cast(T, value.lower() == "true") + if type_res is int: + return cast(T, int(value)) + if type_res is float: + return cast(T, float(value)) + if type_res is str: + return cast(T, str(value)) + raise ValueError(f"Unsupported type: {type_res}") + except ValueError: + pass diff --git a/app/helpers/llm_tools.py b/app/helpers/llm_tools.py index 7449c64b..0c642b17 100644 --- a/app/helpers/llm_tools.py +++ b/app/helpers/llm_tools.py @@ -1,16 +1,14 @@ import asyncio from collections.abc import Awaitable, Callable from html import escape -from inspect import getmembers, isfunction from typing import Annotated, Literal, TypedDict from azure.communication.callautomation.aio import CallAutomationClient -from openai.types.chat import ChatCompletionToolParam from pydantic import ValidationError from app.helpers.call_utils import ContextEnum as CallContextEnum, handle_play_text from app.helpers.config import CONFIG -from app.helpers.llm_utils import function_schema +from app.helpers.llm_utils import AbstractPlugin from app.helpers.logging import logger from app.models.call import CallStateModel from app.models.message import ( @@ -31,24 +29,20 @@ class UpdateClaimDict(TypedDict): value: str -class LlmPlugins: - call: CallStateModel +class DefaultPlugin(AbstractPlugin): client: CallAutomationClient post_callback: Callable[[CallStateModel], Awaitable[None]] style: MessageStyleEnum = MessageStyleEnum.NONE - tts_callback: Callable[[str, MessageStyleEnum], Awaitable[None]] def __init__( self, call: CallStateModel, client: CallAutomationClient, post_callback: Callable[[CallStateModel], Awaitable[None]], - tts_callback: Callable[[str, MessageStyleEnum], Awaitable[None]], ): - self.call = call + super().__init__(call) self.client = client self.post_callback = post_callback - self.tts_callback = tts_callback async def end_call(self) -> str: """ @@ -76,20 +70,6 @@ async def end_call(self) -> str: async def new_claim( self, - customer_response: Annotated[ - str, - """ - Phrase used to confirm the update, in the same language as the customer. This phrase will be spoken to the user. - - # Rules - - Action should be rephrased in the present tense - - Must be in a single sentence - - # Examples - - "I'am creating it right now." - - "We'll start a case." - """, - ], ) -> str: """ Use this if the customer wants to create a new claim. @@ -106,7 +86,6 @@ async def new_claim( - Customer wants explicitely to create a new claim - Talking about a totally different subject """ - await self.tts_callback(customer_response, self.style) # Launch post-call intelligence for the current call await self.post_callback(self.call) # Store the last message and use it at first message of the new claim @@ -128,21 +107,6 @@ async def new_claim( async def new_or_updated_reminder( self, - customer_response: Annotated[ - str, - """ - Phrase used to confirm the update, in the same language as the customer. This phrase will be spoken to the user. - - # Rules - - Action should be rephrased in the present tense - - Must be in a single sentence - - # Examples - - "A todo for next week is planned." - - "I'm creating a reminder for the company to manage this for you." - - "The rendez-vous is scheduled for tomorrow." - """, - ], description: Annotated[ str, "Description of the reminder, in English. Should be detailed enough to be understood by anyone. Example: 'Call back customer to get more details about the accident', 'Send analysis report to the customer'.", @@ -177,8 +141,6 @@ async def new_or_updated_reminder( - Call back for a follow-up - Wait for customer to send a document """ - await self.tts_callback(customer_response, self.style) - # Check if reminder already exists, if so update it for reminder in self.call.reminders: if reminder.title == title: @@ -205,21 +167,6 @@ async def new_or_updated_reminder( async def updated_claim( self, - customer_response: Annotated[ - str, - """ - Phrase used to confirm the update, in the same language as the customer. This phrase will be spoken to the user. - - # Rules - - Action should be rephrased in the present tense - - Must be in a single sentence - - # Examples - - "I am updating the claim with your new address." - - "The phone number is now stored in the case." - - "Your birthdate is written down." - """, - ], updates: Annotated[ list[UpdateClaimDict], """ @@ -264,7 +211,6 @@ async def updated_claim( - Store details about the conversation - Update the claim with a new phone number """ - await self.tts_callback(customer_response, self.style) # Update all claim fields res = "# Updated fields" for field in updates: @@ -310,22 +256,6 @@ async def talk_to_human(self) -> str: async def search_document( self, - customer_response: Annotated[ - str, - """ - Phrase used to confirm the update, in the same language as the customer. This phrase will be spoken to the user. - - # Rules - - Action should be rephrased in the present tense - - Must be in a single sentence - - # Examples - - "I am looking for the article about the new law on cyber security." - - "I am looking in our database for your car insurance contract." - - "I am searching for the procedure to declare a stolen luxury watch." - - "I'm looking for this document in our database." - """, - ], queries: Annotated[ list[str], "The text queries to perform the search, in English. Example: ['How much does it cost to repair a broken window?', 'What are the requirements to ask for a cyber attack insurance?']", @@ -346,7 +276,6 @@ async def search_document( - Know the procedure to declare a stolen luxury watch - Understand the requirements to ask for a cyber attack insurance """ - await self.tts_callback(customer_response, self.style) # Execute in parallel tasks = await asyncio.gather( *[ @@ -371,21 +300,6 @@ async def search_document( async def notify_emergencies( self, - customer_response: Annotated[ - str, - """ - Phrase used to confirm the update, in the same language as the customer. This phrase will be spoken to the user. - - # Rules - - Action should be rephrased in the present tense - - Must be in a single sentence - - # Examples - - 'I am calling the firefighters to help you with the fire.' - - 'I am contacting the police for the accident with your neighbor.' - - 'I am notifying the emergency services right now.' - """, - ], reason: Annotated[ str, "The reason to notify the emergency services. Should be detailed enough to be understood by anyone. Example: 'A person is having a heart attack', 'A child is being attacked by a dog'.", @@ -418,7 +332,6 @@ async def notify_emergencies( - A neighbor is having a heart attack - Someons is stuck in a car accident """ - await self.tts_callback(customer_response, self.style) # TODO: Implement notification to emergency services for production usage logger.info( "Notifying %s, location %s, contact %s, reason %s", @@ -431,22 +344,6 @@ async def notify_emergencies( async def send_sms( self, - customer_response: Annotated[ - str, - """ - Phrase used to confirm the update, in the same language as the customer. This phrase will be spoken to the user. - - # Rules - - Action should be rephrased in the present tense - - Must be in a single sentence - - # Examples - - "I am sending a SMS to your phone number." - - "I am texting you the information right now." - - "I'am sending it." - - "SMS with the details is sent." - """, - ], message: Annotated[ str, "The message to send to the customer.", @@ -460,7 +357,6 @@ async def send_sms( - Confirm a detail like a reference number, if there is a misunderstanding - Send a confirmation, if the customer wants to have a written proof """ - await self.tts_callback(customer_response, self.style) success = await _sms.asend( content=message, phone_number=self.call.initiate.phone_number, @@ -478,21 +374,6 @@ async def send_sms( async def speech_speed( self, - customer_response: Annotated[ - str, - """ - Phrase used to confirm the update, in the same language as the customer. This phrase will be spoken to the user. - - # Rules - - Action should be rephrased in the present tense - - Must be in a single sentence - - # Examples - - "I am slowing down the speech." - - "Is it better now that I am speaking slower?" - - "My voice is now faster." - """, - ], speed: Annotated[ float, "The new speed of the voice. Should be between 0.75 and 1.25, where 1.0 is the normal speed.", @@ -514,28 +395,11 @@ async def speech_speed( # Update voice initial_speed = self.call.initiate.prosody_rate self.call.initiate.prosody_rate = speed - # Customer confirmation (with new speed) - await self.tts_callback(customer_response, self.style) # LLM confirmation return f"Voice speed set to {speed} (was {initial_speed})" async def speech_lang( self, - customer_response: Annotated[ - str, - """ - Phrase used to confirm the update, in the new selected language. This phrase will be spoken to the user. - - # Rules - - Action should be rephrased in the present tense - - Must be in a single sentence - - # Examples - - For de-DE, "Ich spreche jetzt auf Deutsch." - - For en-ES, "Espero que me entiendas mejor en español." - - For fr-FR, "Cela devrait être mieux en français." - """, - ], lang: Annotated[ str, """ @@ -577,17 +441,5 @@ async def speech_lang( # Update lang initial_lang = self.call.lang.short_code self.call.lang = lang - # Customer confirmation (with new language) - await self.tts_callback(customer_response, self.style) # LLM confirmation return f"Voice language set to {lang} (was {initial_lang})" - - @staticmethod - async def to_openai(call: CallStateModel) -> list[ChatCompletionToolParam]: - return await asyncio.gather( - *[ - function_schema(arg_type, call=call) - for name, arg_type in getmembers(LlmPlugins, isfunction) - if not name.startswith("_") and name != "to_openai" - ] - ) diff --git a/app/helpers/llm_utils.py b/app/helpers/llm_utils.py index be3471bc..948045b2 100644 --- a/app/helpers/llm_utils.py +++ b/app/helpers/llm_utils.py @@ -3,19 +3,21 @@ See: https://github.com/microsoft/autogen/blob/2750391f847b7168d842dfcb815ac37bd94c9a0e/autogen/function_utils.py """ +import asyncio import inspect from collections.abc import Callable +from inspect import getmembers, isfunction from textwrap import dedent -from typing import Annotated, Any, ForwardRef, TypeVar +from typing import Annotated, Any, ForwardRef, Literal, TypeVar from jinja2 import Environment -from openai.types.chat import ChatCompletionToolParam from openai.types.shared_params.function_definition import FunctionDefinition from pydantic import BaseModel, TypeAdapter from pydantic._internal._typing_extra import eval_type_lenient from pydantic.json_schema import JsonSchemaValue from app.helpers.logging import logger +from app.models.call import CallStateModel T = TypeVar("T") _jinja = Environment( @@ -24,6 +26,10 @@ ) +class RtclientFunctionDefinition(FunctionDefinition, total=False): + type: Literal["function"] + + class Parameters(BaseModel): """ Parameters of a function as defined by the OpenAI API. @@ -34,9 +40,28 @@ class Parameters(BaseModel): type: str = "object" -async def function_schema( +class AbstractPlugin: + call: CallStateModel + + def __init__( + self, + call: CallStateModel, + ): + self.call = call + + async def to_rtclient(self) -> list[RtclientFunctionDefinition]: + return await asyncio.gather( + *[ + _function_schema(arg_type, call=self.call) + for name, arg_type in getmembers(self.__class__, isfunction) + if not name.startswith("_") and name != "to_rtclient" + ] + ) + + +async def _function_schema( f: Callable[..., Any], **kwargs: Any -) -> ChatCompletionToolParam: +) -> RtclientFunctionDefinition: """ Take a function and return a JSON schema for it as defined by the OpenAI API. @@ -82,17 +107,13 @@ async def function_schema( ) ).model_dump() - function = ChatCompletionToolParam( + return RtclientFunctionDefinition( + description=description, + name=name, + parameters=parameters, type="function", - function=FunctionDefinition( - description=description, - name=name, - parameters=parameters, - ), ) - return function - def _typed_annotation(annotation: Any, global_namespace: dict[str, Any]) -> Any: """ diff --git a/app/helpers/llm_worker.py b/app/helpers/llm_worker.py index 03ba698b..5e167097 100644 --- a/app/helpers/llm_worker.py +++ b/app/helpers/llm_worker.py @@ -1,37 +1,36 @@ import json from collections.abc import AsyncGenerator, Callable +from contextlib import asynccontextmanager from functools import lru_cache from os import environ -from typing import TypeVar +from typing import Any, TypeVar import tiktoken from json_repair import repair_json from openai import ( APIConnectionError, APIResponseValidationError, - AsyncAzureOpenAI, - AsyncOpenAI, - AsyncStream, BadRequestError, InternalServerError, RateLimitError, ) from openai.types.chat import ( - ChatCompletion, ChatCompletionAssistantMessageParam, - ChatCompletionChunk, ChatCompletionSystemMessageParam, ChatCompletionToolMessageParam, - ChatCompletionToolParam, ChatCompletionUserMessageParam, ) -from openai.types.chat.chat_completion_chunk import ( - ChoiceDelta, - ChoiceDeltaToolCall, - ChoiceDeltaToolCallFunction, -) from opentelemetry.instrumentation.openai import OpenAIInstrumentor from pydantic import ValidationError +from rtclient import ( + AssistantMessageItem, + InputAudioTranscription, + InputTextContentPart, + NoTurnDetection, + OutputTextContentPart, + RTClient, + UserMessageItem, +) from tenacity import ( AsyncRetrying, retry, @@ -42,14 +41,13 @@ ) from app.helpers.config import CONFIG -from app.helpers.config_models.llm import ( - AbstractPlatformModel as LlmAbstractPlatformModel, -) -from app.helpers.features import slow_llm_for_chat +from app.helpers.llm_utils import RtclientFunctionDefinition from app.helpers.logging import logger from app.helpers.monitoring import tracer from app.helpers.resources import resources_dir -from app.models.message import MessageModel +from app.models.message import ( + MessageModel, +) environ["TRACELOOP_TRACE_CONTENT"] = str( True @@ -60,9 +58,9 @@ environ["TIKTOKEN_CACHE_DIR"] = resources_dir("tiktoken") logger.info( - "Using LLM models %s (slow) and %s (fast)", - CONFIG.llm.selected(False).model, - CONFIG.llm.selected(True).model, + "Using LLM models %s (realtime) and %s (sequential)", + CONFIG.llm.realtime.selected().model, + CONFIG.llm.sequential.selected().model, ) T = TypeVar("T") @@ -84,161 +82,71 @@ class MaximumTokensReachedError(Exception): ] -@tracer.start_as_current_span("llm_completion_stream") -async def completion_stream( +@tracer.start_as_current_span("llm_completion_realtime") +@asynccontextmanager +async def completion_realtime( max_tokens: int, messages: list[MessageModel], system: list[ChatCompletionSystemMessageParam], - tools: list[ChatCompletionToolParam] | None = None, -) -> AsyncGenerator[ChoiceDelta, None]: - """ - Returns a stream of completions. - - Completion is first made with the fast LLM, then the slow LLM if the previous fails. Catch errors for a maximum of 3 times (internal + `RateLimitError`). If it fails again, raise the error. - """ - retryed = AsyncRetrying( - reraise=True, - retry=retry_any( - *[retry_if_exception_type(exception) for exception in _retried_exceptions] - ), - stop=stop_after_attempt(3), # Usage is short-lived, so stop after 3 attempts - wait=wait_random_exponential(multiplier=0.8, max=8), - ) - - # Try first with primary LLM - try: - async for attempt in retryed: - with attempt: - async for chunck in _completion_stream_worker( - is_fast=not await slow_llm_for_chat(), # Let configuration decide - max_tokens=max_tokens, - messages=messages, - system=system, - tools=tools, - ): - yield chunck - return - except Exception as e: - if not any(isinstance(e, exception) for exception in _retried_exceptions): - raise e - logger.warning( - "%s error, trying with the other LLM backend", - e.__class__.__name__, + tools: list[RtclientFunctionDefinition], +) -> AsyncGenerator[RTClient, None]: + # Create client + async with CONFIG.llm.realtime.selected().instance() as (client, platform): + # Build history + history = _limit_messages( + context_window=platform.context, + max_messages=20, # Quick response + max_tokens=max_tokens, + messages=messages, + model=platform.model, + system=system, + tools=tools, + ) # Limit to 20 messages for quick response and avoid hallucinations + + # Transform system prompts to a single text block + system_text = "\n".join( + [ + str(message["content"]) + for message in history + if message["role"] == "system" + ] ) - # Then try more times with backup LLM - async for attempt in retryed: - with attempt: - async for chunck in _completion_stream_worker( - is_fast=await slow_llm_for_chat(), # Let configuration decide - max_tokens=max_tokens, - messages=messages, - system=system, - tools=tools, - ): - yield chunck - - -# TODO: Refacto, too long (and remove PLR0912 ignore) -async def _completion_stream_worker( # noqa: PLR0912 - is_fast: bool, - max_tokens: int, - messages: list[MessageModel], - system: list[ChatCompletionSystemMessageParam], - tools: list[ChatCompletionToolParam] | None = None, -) -> AsyncGenerator[ChoiceDelta, None]: - """ - Returns a stream of completions. - """ - client, platform = await _use_llm(is_fast) - extra = {} - if tools: - extra["tools"] = tools # Add tools if any - - prompt = _limit_messages( - context_window=platform.context, - max_messages=20, # Quick response - max_tokens=max_tokens, - messages=messages, - model=platform.model, - system=system, - tools=tools, - ) # Limit to 20 messages for quick response and avoid hallucinations - chat_kwargs = { - "max_tokens": max_tokens, - "messages": prompt, - "model": platform.model, - "seed": platform.seed, - "temperature": platform.temperature, - **extra, - } # Shared kwargs for both streaming and non-streaming - maximum_tokens_reached = False + # Configure LLM + await client.configure( + # Deployment + model=platform.model, + # Behavior + instructions=system_text, + temperature=platform.temperature, + tool_choice="auto", + tools=tools, + # Input/Output + input_audio_format="pcm16", + input_audio_transcription=InputAudioTranscription(model="whisper-1"), + modalities={"text"}, + turn_detection=NoTurnDetection(), # Disable native turn detection, it is managed manually + # Performance + max_response_output_tokens=160, # Lowest possible value for 90% of the cases, if not sufficient, retry will be triggered, 100 tokens ~= 75 words, 20 words ~= 1 sentence, 6 sentences ~= 160 tokens + ) - try: - if platform.streaming: # Streaming - stream: AsyncStream[ - ChatCompletionChunk - ] = await client.chat.completions.create( - **chat_kwargs, - stream=True, - ) - async for chunck in stream: - choices = chunck.choices - if ( - not choices - ): # Skip empty choices, happens sometimes with GPT-4 Turbo - continue - choice = choices[0] - delta = choice.delta - if ( - choice.finish_reason == "content_filter" - ): # Azure OpenAI content filter - raise SafetyCheckError(f"Issue detected in text: {delta.content}") - if choice.finish_reason == "length": - logger.warning( - "Maximum tokens reached %s, should be fixed", max_tokens - ) - maximum_tokens_reached = True - if delta: - yield delta - - else: # Non-streaming, emulate streaming with a single completion - completion: ChatCompletion = await client.chat.completions.create( - **chat_kwargs - ) - choice = completion.choices[0] - if choice.finish_reason == "content_filter": # Azure OpenAI content filter - raise SafetyCheckError( - f"Issue detected in generation: {choice.message.content}" + # Push conversation history + for message in history: + if message["role"] == "user": + text = str(message["content"]) + logger.debug("Sending user history: %s...", text[:20]) + await client.send_item( + UserMessageItem(content=[InputTextContentPart(text=text)]) ) - if choice.finish_reason == "length": - logger.warning("Maximum tokens reached %s, should be fixed", max_tokens) - maximum_tokens_reached = True - message = choice.message - delta = ChoiceDelta( - content=message.content, - role=message.role, - tool_calls=[ - ChoiceDeltaToolCall( - id=tool.id, - index=0, - type=tool.type, - function=ChoiceDeltaToolCallFunction( - arguments=tool.function.arguments, - name=tool.function.name, - ), - ) - for tool in message.tool_calls or [] - ], - ) - yield delta - except BadRequestError as e: - if e.code == "content_filter": - raise SafetyCheckError("Issue detected in prompt") from e - raise e - - if maximum_tokens_reached: - raise MaximumTokensReachedError(f"Maximum tokens reached {max_tokens}") + elif message["role"] == "assistant" and "content" in message: + text = str(message["content"]) + logger.debug("Sending assistant history: %s...", text[:20]) + await client.send_item( + AssistantMessageItem(content=[OutputTextContentPart(text=text)]) + ) + + # Return + yield client @retry( @@ -247,8 +155,8 @@ async def _completion_stream_worker( # noqa: PLR0912 stop=stop_after_attempt(3), wait=wait_random_exponential(multiplier=0.8, max=8), ) -@tracer.start_as_current_span("llm_completion_sync") -async def completion_sync( +@tracer.start_as_current_span("llm_completion_sequential") +async def completion_sequential( res_type: type[T], system: list[ChatCompletionSystemMessageParam], validation_callback: Callable[[str | None], tuple[bool, str | None, T | None]], @@ -272,8 +180,7 @@ async def completion_sync( ] # Generate - res_content: str | None = await _completion_sync_worker( - is_fast=False, + res_content: str | None = await _completion_sequential_worker( json_output=validate_json, system=messages, ) @@ -292,7 +199,7 @@ async def completion_sync( "LLM validation error, retrying (%s retries left)", _retries_remaining, ) - return await completion_sync( + return await completion_sequential( res_type=res_type, system=system, validate_json=validate_json, @@ -306,8 +213,7 @@ async def completion_sync( return res_object -async def _completion_sync_worker( - is_fast: bool, +async def _completion_sequential_worker( system: list[ChatCompletionSystemMessageParam], json_output: bool = False, max_tokens: int | None = None, @@ -315,7 +221,7 @@ async def _completion_sync_worker( """ Returns a completion. """ - client, platform = await _use_llm(is_fast) + client, platform = await CONFIG.llm.sequential.selected().instance() extra = {} if json_output: extra["response_format"] = {"type": "json_object"} @@ -373,7 +279,7 @@ def _limit_messages( # noqa: PLR0913 model: str, system: list[ChatCompletionSystemMessageParam], max_messages: int = 1000, - tools: list[ChatCompletionToolParam] | None = None, + tools: list[Any] = [], ) -> list[ ChatCompletionAssistantMessageParam | ChatCompletionSystemMessageParam @@ -437,14 +343,3 @@ def _count_tokens(content: str, model: str) -> int: encoding_name = tiktoken.encoding_name_for_model("gpt-3.5") logger.debug("Unknown model %s, using %s encoding", model, encoding_name) return len(tiktoken.get_encoding(encoding_name).encode(content)) - - -async def _use_llm( - is_fast: bool, -) -> tuple[AsyncAzureOpenAI | AsyncOpenAI, LlmAbstractPlatformModel]: - """ - Returns an LLM client and platform model. - - The client is either an Azure OpenAI or an OpenAI client, depending on the configuration. - """ - return await CONFIG.llm.selected(is_fast).instance() diff --git a/app/main.py b/app/main.py index ac200ec6..d7aafb63 100644 --- a/app/main.py +++ b/app/main.py @@ -1,16 +1,23 @@ import asyncio import json +from base64 import b64decode from contextlib import asynccontextmanager from datetime import timedelta from http import HTTPStatus from os import getenv -from typing import Annotated +from typing import Annotated, Any from urllib.parse import quote_plus, urljoin from uuid import UUID import jwt import mistune -from azure.communication.callautomation import PhoneNumberIdentifier +from azure.communication.callautomation import ( + MediaStreamingAudioChannelType, + MediaStreamingContentType, + MediaStreamingOptions, + MediaStreamingTransportType, + PhoneNumberIdentifier, +) from azure.communication.callautomation.aio import CallAutomationClient from azure.core.credentials import AzureKeyCredential from azure.core.messaging import CloudEvent @@ -21,16 +28,19 @@ HTTPException, Request, Response, + WebSocket, ) from fastapi.exceptions import RequestValidationError, ValidationException from fastapi.responses import HTMLResponse, JSONResponse from htmlmin.minify import html_minify from jinja2 import Environment, FileSystemLoader from pydantic import Field, TypeAdapter, ValidationError +from starlette.datastructures import Headers from starlette.exceptions import HTTPException as StarletteHTTPException from twilio.twiml.messaging_response import MessagingResponse from app.helpers.call_events import ( + on_audio_connected, on_call_connected, on_call_disconnected, on_end_call, @@ -38,10 +48,8 @@ on_new_call, on_play_completed, on_play_error, - on_recognize_timeout_error, - on_recognize_unknown_error, + on_recognize_error, on_sms_received, - on_speech_recognized, on_transfer_completed, on_transfer_error, ) @@ -95,15 +103,19 @@ _search = CONFIG.ai_search.instance() _sms = CONFIG.sms.instance() _sms_queue = CONFIG.queue.sms() -_training_queue = CONFIG.queue.training() # Communication Services callback assert CONFIG.public_domain, "public_domain config is not set" +_COMMUNICATIONSERVICES_WSS_TPL = urljoin( + str(CONFIG.public_domain).replace("https://", "wss://"), + "/communicationservices/wss/{call_id}/{callback_secret}", +) +logger.info("Using WebSocket URL %s", _COMMUNICATIONSERVICES_WSS_TPL) _COMMUNICATIONSERVICES_CALLABACK_TPL = urljoin( str(CONFIG.public_domain), - "/communicationservices/event/{call_id}/{callback_secret}", + "/communicationservices/callback/{call_id}/{callback_secret}", ) -logger.info("Using call event URL %s", _COMMUNICATIONSERVICES_CALLABACK_TPL) +logger.info("Using callback URL %s", _COMMUNICATIONSERVICES_CALLABACK_TPL) @asynccontextmanager @@ -126,17 +138,10 @@ async def lifespan(app: FastAPI): # noqa: ARG001 func=sms_event, ) ) - training_task = asyncio.create_task( - _training_queue.trigger( - arg="training", - func=training_event, - ) - ) yield call_task.cancel() post_task.cancel() sms_task.cancel() - training_task.cancel() # FastAPI @@ -367,13 +372,23 @@ async def call_post(request: Request) -> CallGetModel: except ValidationError as e: raise RequestValidationError([str(e)]) from e - url, call = await _communicationservices_event_url(initiate.phone_number, initiate) + callback_url, wss_url, call = await _communicationservices_urls( + initiate.phone_number, initiate + ) span_attribute(CallAttributes.CALL_ID, str(call.call_id)) span_attribute(CallAttributes.CALL_PHONE_NUMBER, call.initiate.phone_number) automation_client = await _use_automation_client() + streaming_options = MediaStreamingOptions( + audio_channel_type=MediaStreamingAudioChannelType.UNMIXED, + content_type=MediaStreamingContentType.AUDIO, + start_media_streaming=False, + transport_type=MediaStreamingTransportType.WEBSOCKET, + transport_url=wss_url, + ) call_connection_properties = await automation_client.create_call( - callback_url=url, + callback_url=callback_url, cognitive_services_endpoint=CONFIG.cognitive_service.endpoint, + media_streaming=streaming_options, source_caller_id_number=_source_caller, target_participant=PhoneNumberIdentifier(initiate.phone_number), # pyright: ignore ) @@ -398,21 +413,22 @@ async def call_event( event = EventGridEvent.from_json(call.content) event_type = event.event_type - logger.debug("Call event with data %s", event.data) if not event_type == SystemEventNames.AcsIncomingCallEventName: logger.warning("Event %s not supported", event_type) + logger.debug("Event data %s", event.data) return call_context: str = event.data["incomingCallContext"] phone_number = PhoneNumber(event.data["from"]["phoneNumber"]["value"]) - url, _call = await _communicationservices_event_url(phone_number) + callback_url, wss_url, _call = await _communicationservices_urls(phone_number) span_attribute(CallAttributes.CALL_ID, str(_call.call_id)) span_attribute(CallAttributes.CALL_PHONE_NUMBER, _call.initiate.phone_number) await on_new_call( - callback_url=url, + callback_url=callback_url, client=await _use_automation_client(), incoming_context=call_context, phone_number=phone_number, + wss_url=wss_url, ) @@ -444,37 +460,17 @@ async def sms_event( return span_attribute(CallAttributes.CALL_ID, str(call.call_id)) - async def _post_callback(_call: CallStateModel) -> None: - await _trigger_post_event(_call) - - async def _training_callback(_call: CallStateModel) -> None: - await _trigger_training_event(_call) - await on_sms_received( call=call, - client=await _use_automation_client(), message=message, - post_callback=_post_callback, - training_callback=_training_callback, ) -@api.post("/communicationservices/event/{call_id}/{secret}") -@tracer.start_as_current_span("communicationservices_event_post") -async def communicationservices_event_post( - call_id: UUID, - secret: Annotated[str, Field(min_length=16, max_length=16)], - request: Request, -) -> None | ErrorModel: - """ - Handle direct events from Azure Communication Services for a running call. - - No parameters are expected. The body is a list of JSON objects `CloudEvent`. - - Returns a 204 No Content if the events are properly formatted. A 401 Unauthorized if the JWT token is invalid. Otherwise, returns a 400 Bad Request. - """ +async def _communicationservices_validate_jwt( + headers: Headers, +) -> None: # Validate JWT token - service_jwt: str | None = request.headers.get("Authorization") + service_jwt: str | None = headers.get("Authorization") if not service_jwt: raise HTTPException( detail="Authorization header missing", @@ -501,6 +497,107 @@ async def communicationservices_event_post( status_code=HTTPStatus.UNAUTHORIZED, ) from e + +async def _communicationservices_validate_call_id( + call_id: UUID, + secret: str, +) -> CallStateModel: + span_attribute(CallAttributes.CALL_ID, str(call_id)) + + call = await _db.call_aget(call_id) + if not call: + raise HTTPException( + detail=f"Call {call_id} not found", + status_code=HTTPStatus.NOT_FOUND, + ) + if call.callback_secret != secret: + raise HTTPException( + detail="Secret does not match", + status_code=HTTPStatus.UNAUTHORIZED, + ) + + span_attribute(CallAttributes.CALL_PHONE_NUMBER, call.initiate.phone_number) + return call + + +@api.websocket("/communicationservices/wss/{call_id}/{secret}") +@tracer.start_as_current_span("communicationservices_event_post") +async def communicationservices_wss_post( + call_id: UUID, + secret: Annotated[str, Field(min_length=16, max_length=16)], + websocket: WebSocket, +) -> None: + # Validate connection + # TODO: Uncomment when JWT validation is fixed + # await _communicationservices_validate_jwt(websocket.headers) + call = await _communicationservices_validate_call_id(call_id, secret) + + # Accept connection + await websocket.accept() + logger.info("WebSocket connection established for call %s", call.call_id) + + # Client SDK + automation_client = await _use_automation_client() + + # Queue audio data + audio_queue: asyncio.Queue[bytes] = asyncio.Queue() + + async def _consume_audio() -> None: + logger.debug("Audio data consumer started") + async for event in websocket.iter_json(): + # DEBUG: Uncomment to see all events, but be careful, it will be verbose ^_^ + # logger.debug("Audio event received %s", event) + + # TODO: Handle configuration event (audio format, sample rate, etc.) + # Skip non-audio events + if "kind" not in event or event["kind"] != "AudioData": + continue + + # Filter out silent audio + audio_data: dict[str, Any] = event.get("audioData", {}) + audio_base64: str | None = audio_data.get("data", None) + audio_silent: bool | None = audio_data.get("silent", True) + if audio_silent or not audio_base64: + continue + + # Queue audio + await audio_queue.put(b64decode(audio_base64)) + + await asyncio.gather( + # Consume audio from the WebSocket + _consume_audio(), + # Process audio + # TODO: Dynamically set the audio format + on_audio_connected( + audio_bits_per_sample=16, + audio_channels=1, + audio_sample_rate=16000, + audio_stream=audio_queue, + call=call, + client=automation_client, + post_callback=_trigger_post_event, + ), + ) + + +@api.post("/communicationservices/callback/{call_id}/{secret}") +@tracer.start_as_current_span("communicationservices_callback_post") +async def communicationservices_callback_post( + call_id: UUID, + request: Request, + secret: Annotated[str, Field(min_length=16, max_length=16)], +) -> None: + """ + Handle direct events from Azure Communication Services for a running call. + + No parameters are expected. The body is a list of JSON objects `CloudEvent`. + + Returns a 204 No Content if the events are properly formatted. A 401 Unauthorized if the JWT token is invalid. Otherwise, returns a 400 Bad Request. + """ + + # Validate connection + await _communicationservices_validate_jwt(request.headers) + # Validate request events = await request.json() if not events or not isinstance(events, list): @@ -520,7 +617,7 @@ async def communicationservices_event_post( # TODO: Refacto, too long (and remove PLR0912/PLR0915 ignore) -async def _communicationservices_event_worker( # noqa: PLR0912, PLR0915 +async def _communicationservices_event_worker( call_id: UUID, event_dict: dict, secret: str, @@ -540,16 +637,10 @@ async def _communicationservices_event_worker( # noqa: PLR0912, PLR0915 Returns None. Can trigger additional events to `training` and `post` queues. """ - span_attribute(CallAttributes.CALL_ID, str(call_id)) - call = await _db.call_aget(call_id) - if not call: - logger.warning("Call %s not found", call_id) - return - if call.callback_secret != secret: - logger.warning("Secret for call %s does not match", call_id) - return - span_attribute(CallAttributes.CALL_PHONE_NUMBER, call.initiate.phone_number) + # Validate connection + call = await _communicationservices_validate_call_id(call_id, secret) + # Event parsing event = CloudEvent.from_dict(event_dict) assert isinstance(event.data, dict) @@ -564,140 +655,84 @@ async def _communicationservices_event_worker( # noqa: PLR0912, PLR0915 # Client SDK automation_client = await _use_automation_client() - logger.debug("Call event received %s for call %s", event_type, call) - logger.debug(event.data) - - async def _post_callback(_call: CallStateModel) -> None: - await _trigger_post_event(_call) - - async def _training_callback(_call: CallStateModel) -> None: - await _trigger_training_event(_call) - - if event_type == "Microsoft.Communication.CallConnected": # Call answered - server_call_id = event.data["serverCallId"] - await on_call_connected( - call=call, - client=automation_client, - post_callback=_post_callback, - server_call_id=server_call_id, - training_callback=_training_callback, - ) + # Log + logger.debug("Call event received %s for call %s", event_type, call.call_id) - elif event_type == "Microsoft.Communication.CallDisconnected": # Call hung up - await on_call_disconnected( - call=call, - client=automation_client, - post_callback=_post_callback, - ) + match event_type: + case "Microsoft.Communication.CallConnected": # Call answered + server_call_id = event.data["serverCallId"] + await on_call_connected( + call=call, + client=automation_client, + server_call_id=server_call_id, + ) - elif ( - event_type == "Microsoft.Communication.RecognizeCompleted" - ): # Speech recognized - recognition_result: str = event.data["recognitionType"] + case "Microsoft.Communication.CallDisconnected": # Call hung up + await on_call_disconnected( + call=call, + client=automation_client, + post_callback=_trigger_post_event, + ) - if recognition_result == "speech": # Handle voice - speech_text: str | None = event.data["speechResult"]["speech"] - if speech_text: - await on_speech_recognized( + case "Microsoft.Communication.RecognizeCompleted": # Speech/IVR recognized + recognition_result: str = event.data["recognitionType"] + if recognition_result == "choices": # Handle IVR + label_detected: str = event.data["choiceResult"]["label"] + await on_ivr_recognized( call=call, client=automation_client, - post_callback=_post_callback, - text=speech_text, - training_callback=_training_callback, + label=label_detected, ) - elif recognition_result == "choices": # Handle IVR - label_detected: str = event.data["choiceResult"]["label"] - await on_ivr_recognized( + case "Microsoft.Communication.RecognizeFailed": # Speech/IVR failed + result_information = event.data["resultInformation"] + error_code: int = result_information["subCode"] + error_message: str = result_information["message"] + logger.debug( + "Speech recognition failed with error code %s: %s", + error_code, + error_message, + ) + await on_recognize_error( call=call, client=automation_client, - label=label_detected, - post_callback=_post_callback, - training_callback=_training_callback, + contexts=operation_contexts, ) - elif ( - event_type == "Microsoft.Communication.RecognizeFailed" - ): # Speech recognition failed - result_information = event.data["resultInformation"] - error_code: int = result_information["subCode"] - error_message: str = result_information["message"] - logger.debug( - "Speech recognition failed with error code %s: %s", - error_code, - error_message, - ) - # Error codes: - # 8510 = Action failed, initial silence timeout reached - # 8532 = Action failed, inter-digit silence timeout reached - # See: https://github.com/MicrosoftDocs/azure-docs/blob/main/articles/communication-services/how-tos/call-automation/recognize-action.md#event-codes - if error_code in (8510, 8532): # Timeout retry - await on_recognize_timeout_error( + case "Microsoft.Communication.PlayCompleted": # Media played + await on_play_completed( call=call, client=automation_client, contexts=operation_contexts, - post_callback=_post_callback, - training_callback=_training_callback, + post_callback=_trigger_post_event, ) - else: # Unknown error - await on_recognize_unknown_error( + + case "Microsoft.Communication.PlayFailed": # Media play failed + result_information = event.data["resultInformation"] + error_code: int = result_information["subCode"] + await on_play_error(error_code) + + case "Microsoft.Communication.CallTransferAccepted": # Call transfer accepted + await on_transfer_completed() + + case "Microsoft.Communication.CallTransferFailed": # Call transfer failed + result_information = event.data["resultInformation"] + sub_code: int = result_information["subCode"] + await on_transfer_error( call=call, client=automation_client, - error_code=error_code, + error_code=sub_code, ) - elif event_type == "Microsoft.Communication.PlayCompleted": # Media played - await on_play_completed( - call=call, - client=automation_client, - contexts=operation_contexts, - post_callback=_post_callback, - ) - - elif event_type == "Microsoft.Communication.PlayFailed": # Media play failed - result_information = event.data["resultInformation"] - error_code: int = result_information["subCode"] - await on_play_error(error_code) - - elif ( - event_type == "Microsoft.Communication.CallTransferAccepted" - ): # Call transfer accepted - await on_transfer_completed() - - elif ( - event_type == "Microsoft.Communication.CallTransferFailed" - ): # Call transfer failed - result_information = event.data["resultInformation"] - sub_code: int = result_information["subCode"] - await on_transfer_error( - call=call, - client=automation_client, - error_code=sub_code, - ) + case _: + logger.warning("Event %s not supported", event_type) + logger.debug("Event data %s", event.data) await _db.call_aset( call ) # TODO: Do not persist on every event, this is simpler but not efficient -@tracer.start_as_current_span("training_event") -async def training_event( - training: AzureQueueStorageMessage, -) -> None: - """ - Handle training event from the queue. - - Queue message is a JSON object `CallStateModel`. The event will load asynchroniously the training for a call. - - Returns None. - """ - call = CallStateModel.model_validate_json(training.content) - logger.debug("Training event received for call %s", call) - span_attribute(CallAttributes.CALL_ID, str(call.call_id)) - span_attribute(CallAttributes.CALL_PHONE_NUMBER, call.initiate.phone_number) - await call.trainings(cache_only=False) # Get trainings by advance to populate cache - - @tracer.start_as_current_span("post_event") async def post_event( post: AzureQueueStorageMessage, @@ -711,19 +746,12 @@ async def post_event( if not call: logger.warning("Call %s not found", post.content) return - logger.debug("Post event received for call %s", call) + logger.debug("Post event received for call %s", call.call_id) span_attribute(CallAttributes.CALL_ID, str(call.call_id)) span_attribute(CallAttributes.CALL_PHONE_NUMBER, call.initiate.phone_number) await on_end_call(call) -async def _trigger_training_event(call: CallStateModel) -> None: - """ - Shortcut to add training to the queue. - """ - await _training_queue.send_message(call.model_dump_json(exclude_none=True)) - - async def _trigger_post_event(call: CallStateModel) -> None: """ Shortcut to add post-call intelligence to the queue. @@ -731,13 +759,15 @@ async def _trigger_post_event(call: CallStateModel) -> None: await _post_queue.send_message(str(call.call_id)) -async def _communicationservices_event_url( +async def _communicationservices_urls( phone_number: PhoneNumber, initiate: CallInitiateModel | None = None -) -> tuple[str, CallStateModel]: +) -> tuple[str, str, CallStateModel]: """ Generate the callback URL for a call. If the caller has already called, use the same call ID, to keep the conversation history. Otherwise, create a new call ID. + + Returnes a tuple of the callback URL, the WebSocket URL, and the call object. """ call = await _db.call_asearch_one(phone_number) if not call or ( @@ -751,11 +781,15 @@ async def _communicationservices_event_url( ) ) await _db.call_aset(call) # Create for the first time - url = _COMMUNICATIONSERVICES_CALLABACK_TPL.format( + wss_url = _COMMUNICATIONSERVICES_WSS_TPL.format( + callback_secret=call.callback_secret, + call_id=str(call.call_id), + ) + callaback_url = _COMMUNICATIONSERVICES_CALLABACK_TPL.format( callback_secret=call.callback_secret, call_id=str(call.call_id), ) - return url, call + return callaback_url, wss_url, call # TODO: Secure this endpoint with a secret, either in the Authorization header or in the URL @@ -782,18 +816,9 @@ async def twilio_sms_post( else: span_attribute(CallAttributes.CALL_ID, str(call.call_id)) - async def _post_callback(_call: CallStateModel) -> None: - await _trigger_post_event(_call) - - async def _training_callback(_call: CallStateModel) -> None: - await _trigger_training_event(_call) - event_status = await on_sms_received( call=call, - client=await _use_automation_client(), message=Body, - post_callback=_post_callback, - training_callback=_training_callback, ) if not event_status: raise HTTPException( diff --git a/app/models/call.py b/app/models/call.py index 3fe244f5..cd93ce28 100644 --- a/app/models/call.py +++ b/app/models/call.py @@ -13,7 +13,12 @@ ) from app.helpers.monitoring import tracer from app.helpers.pydantic_types.phone_numbers import PhoneNumber -from app.models.message import ActionEnum as MessageActionEnum, MessageModel +from app.models.message import ( + ActionEnum as MessageActionEnum, + MessageModel, + PersonaEnum as MessagePersonaEnum, + StyleEnum as MessageStyleEnum, +) from app.models.next import NextModel from app.models.reminder import ReminderModel from app.models.synthesis import SynthesisModel @@ -51,10 +56,11 @@ def in_progress(self) -> bool: inverted_messages.reverse() # Search for the first action we want for message in inverted_messages: - if message.action == MessageActionEnum.CALL: - return True - if message.action == MessageActionEnum.HANGUP: - return False + match message.action: + case MessageActionEnum.CALL: + return True + case MessageActionEnum.HANGUP: + return False # Otherwise, we assume the call is completed return False @@ -144,4 +150,19 @@ async def trainings(self, cache_only: bool = True) -> list[TrainingModel]: return trainings def tz(self) -> tzinfo: + """ + Get the timezone of the phone number. + """ return PhoneNumber.tz(self.initiate.phone_number) + + def last_assistant_style(self) -> MessageStyleEnum: + """ + Get the last assistant message style. + """ + inverted_messages = self.messages.copy() + inverted_messages.reverse() + for message in inverted_messages: + if message.persona != MessagePersonaEnum.ASSISTANT: + continue + return message.style + return MessageStyleEnum.NONE diff --git a/app/models/message.py b/app/models/message.py index e5605945..4ca70657 100644 --- a/app/models/message.py +++ b/app/models/message.py @@ -12,7 +12,6 @@ ChatCompletionToolMessageParam, ChatCompletionUserMessageParam, ) -from openai.types.chat.chat_completion_chunk import ChoiceDeltaToolCall from pydantic import BaseModel, Field, field_validator from app.helpers.monitoring import tracer @@ -50,10 +49,10 @@ class PersonaEnum(str, Enum): class ToolModel(BaseModel): - content: str = "" - function_arguments: str = "" - function_name: str = "" - tool_id: str = "" + content: str | None = None + function_arguments: str + function_name: str + tool_id: str def to_openai(self) -> ChatCompletionMessageToolCallParam: return ChatCompletionMessageToolCallParam( @@ -71,17 +70,7 @@ def to_openai(self) -> ChatCompletionMessageToolCallParam: }, ) - def __add__(self, other: ChoiceDeltaToolCall) -> "ToolModel": - if other.id: - self.tool_id = other.id - if other.function: - if other.function.name: - self.function_name = other.function.name - if other.function.arguments: - self.function_arguments += other.function.arguments - return self - - async def execute_function(self, plugins: object) -> None: + async def execute_function(self, plugin: object) -> None: from app.helpers.logging import logger json_str = self.function_arguments @@ -96,7 +85,7 @@ async def execute_function(self, plugins: object) -> None: # Try to fix JSON args to catch LLM hallucinations # See: https://community.openai.com/t/gpt-4-1106-preview-messes-up-function-call-parameters-encoding/478500 - args: dict[str, Any] = repair_json( + args: dict[str, Any] | Any = repair_json( json_str=json_str, return_objects=True, ) # pyright: ignore @@ -119,7 +108,7 @@ async def execute_function(self, plugins: object) -> None: }, ) as span: try: - res = await getattr(plugins, name)(**args) + res = await getattr(plugin, name)(**args) res_log = f"{res[:20]}...{res[-20:]}" logger.info("Executing function %s (%s): %s", name, args, res_log) except TypeError as e: @@ -146,10 +135,10 @@ async def execute_function(self, plugins: object) -> None: @staticmethod def _available_function_names() -> list[str]: from app.helpers.llm_tools import ( - LlmPlugins, + DefaultPlugin, ) - return [name for name, _ in getmembers(LlmPlugins, isfunction)] + return [name for name, _ in getmembers(DefaultPlugin, isfunction)] class MessageModel(BaseModel): @@ -216,6 +205,7 @@ def to_openai( tool_call_id=tool_call.tool_id, ) for tool_call in self.tool_calls + if tool_call.content ) return res diff --git a/app/persistence/ai_search.py b/app/persistence/ai_search.py index f3be334d..dc2de469 100644 --- a/app/persistence/ai_search.py +++ b/app/persistence/ai_search.py @@ -8,8 +8,8 @@ from azure.search.documents.aio import SearchClient from azure.search.documents.indexes.aio import SearchIndexClient from azure.search.documents.indexes.models import ( - AzureOpenAIParameters, AzureOpenAIVectorizer, + AzureOpenAIVectorizerParameters, HnswAlgorithmConfiguration, LexicalAnalyzerName, SearchableField, @@ -225,9 +225,9 @@ async def _use_client(self) -> SearchClient: ], vectorizers=[ AzureOpenAIVectorizer( - name="vectorizer-default", + vectorizer_name="vectorizer-default", # Without credentials specified, the database will use its system managed identity - azure_open_ai_parameters=AzureOpenAIParameters( + parameters=AzureOpenAIVectorizerParameters( deployment_id=self._config.embedding_deployment, model_name=self._config.embedding_model, resource_uri=self._config.embedding_endpoint, diff --git a/app/persistence/azure_queue_storage.py b/app/persistence/azure_queue_storage.py index a74cf9f0..239c7ef6 100644 --- a/app/persistence/azure_queue_storage.py +++ b/app/persistence/azure_queue_storage.py @@ -4,6 +4,7 @@ from collections.abc import AsyncGenerator, Awaitable, Callable from contextlib import asynccontextmanager +import aiojobs from azure.core.exceptions import ServiceRequestError from azure.storage.queue.aio import QueueClient, QueueServiceClient from pydantic import BaseModel @@ -125,7 +126,7 @@ async def trigger( self, arg: str, func: Callable[..., Awaitable], - ): + ) -> None: """ Trigger a local function when a message is received. """ @@ -134,19 +135,36 @@ async def trigger( self._name, func.__name__, ) - # Loop forever to receive messages - while messages := self.receive_messages( - max_messages=32, - visibility_timeout=32 * 5, # 5 secs per message - ): - # Process messages - async for message in messages: - # Call function with the selected argument name - kwargs = {} - kwargs[arg] = message - # First, call function - await func(**kwargs) - # Then, delete message - await self.delete_message(message) - # Add a small delay to avoid tight loop - await asyncio.sleep(1) + async with aiojobs.Scheduler() as scheduler: + # Loop forever to receive messages + while messages := self.receive_messages( + max_messages=32, + visibility_timeout=32 * 5, # 5 secs per message + ): + # Process messages + async for message in messages: + await scheduler.spawn( + self._process_message( + arg=arg, + func=func, + message=message, + ) + ) + # Add a small delay to avoid high CPU usage + await asyncio.sleep(1) + + async def _process_message( + self, + arg: str, + func: Callable[..., Awaitable], + message: Message, + ) -> None: + """ + Process a message with a function. + """ + # First, call function with the selected argument name + kwargs = {} + kwargs[arg] = message + await func(**kwargs) + # Then, delete message + await self.delete_message(message) diff --git a/app/persistence/cosmos_db.py b/app/persistence/cosmos_db.py index 7ce2cc56..e8c12b36 100644 --- a/app/persistence/cosmos_db.py +++ b/app/persistence/cosmos_db.py @@ -129,7 +129,6 @@ async def call_aset(self, call: CallStateModel) -> bool: # Update live data = call.model_dump(mode="json", exclude_none=True) data["id"] = str(call.call_id) # CosmosDB requires an id field - logger.debug("Saving call %s: %s", call.call_id, data) res = False try: async with self._use_client() as db: diff --git a/cicd/Dockerfile b/cicd/Dockerfile index 8233302a..6ded96fa 100644 --- a/cicd/Dockerfile +++ b/cicd/Dockerfile @@ -10,6 +10,7 @@ RUN --mount=target=/var/lib/apt/lists,type=cache,id=apt-lists-${TARGETPLATFORM}, apt-get update -q \ && apt-get install -y -q --no-install-recommends \ gcc \ + git \ python3-dev \ && python3 -m pip \ --disable-pip-version-check \ diff --git a/cicd/bicep/app.bicep b/cicd/bicep/app.bicep index bb34bff2..07faed6b 100644 --- a/cicd/bicep/app.bicep +++ b/cicd/bicep/app.bicep @@ -5,16 +5,16 @@ param embeddingModel string param embeddingQuota int param embeddingVersion string param imageVersion string -param llmFastContext int -param llmFastDeploymentType string -param llmFastModel string -param llmFastQuota int -param llmFastVersion string -param llmSlowContext int -param llmSlowDeploymentType string -param llmSlowModel string -param llmSlowQuota int -param llmSlowVersion string +param llmRealtimeContext int +param llmRealtimeDeploymentType string +param llmRealtimeModel string +param llmRealtimeQuota int +param llmRealtimeVersion string +param llmSequentialContext int +param llmSequentialDeploymentType string +param llmSequentialModel string +param llmSequentialQuota int +param llmSequentialVersion string param location string param openaiLocation string param promptContentFilter bool @@ -24,8 +24,8 @@ param tags object var appName = 'call-center-ai' var prefix = deployment().name var appUrl = 'https://call-center-ai.${acaEnv.properties.defaultDomain}' -var llmFastModelFullName = toLower('${llmFastModel}-${llmFastVersion}') -var llmSlowModelFullName = toLower('${llmSlowModel}-${llmSlowVersion}') +var llmRealtimeModelFullName = toLower('${llmRealtimeModel}-${llmRealtimeVersion}') +var llmSequentialModelFullName = toLower('${llmSequentialModel}-${llmSequentialVersion}') var embeddingModelFullName = toLower('${embeddingModel}-${embeddingVersion}') var cosmosContainerName = 'calls-v3' // Third schema version var localConfig = loadYamlContent('../../config.yaml') @@ -63,30 +63,28 @@ var config = { call_name: callQueue.name post_name: postQueue.name sms_name: smsQueue.name - training_name: trainingsQueue.name } sms: localConfig.sms cognitive_service: { endpoint: cognitiveCommunication.properties.endpoint } llm: { - fast: { + realtime: { mode: 'azure_openai' azure_openai: { - context: llmFastContext - deployment: llmFast.name + context: llmRealtimeContext + deployment: llmRealtime.name endpoint: cognitiveOpenai.properties.endpoint - model: llmFastModel - streaming: true + model: llmRealtimeModel } } - slow: { + sequential: { mode: 'azure_openai' azure_openai: { - context: llmSlowContext - deployment: llmSlow.name + context: llmSequentialContext + deployment: llmSequential.name endpoint: cognitiveOpenai.properties.endpoint - model: llmSlowModel + model: llmSequentialModel streaming: true } } @@ -174,7 +172,6 @@ var containerAppScaleRules = [ callQueue.name postQueue.name smsQueue.name - trainingsQueue.name ]: { name: 'queue-${queue}' azureQueue: { @@ -304,11 +301,6 @@ resource postQueue 'Microsoft.Storage/storageAccounts/queueServices/queues@2023- name: 'post-${phonenumberSanitized}' } -resource trainingsQueue 'Microsoft.Storage/storageAccounts/queueServices/queues@2023-05-01' = { - parent: queueService - name: 'trainings-${phonenumberSanitized}' -} - resource blobService 'Microsoft.Storage/storageAccounts/blobServices@2023-05-01' = { parent: storageAccount name: 'default' @@ -622,44 +614,44 @@ resource contentfilter 'Microsoft.CognitiveServices/accounts/raiPolicies@2024-06 } } -resource llmSlow 'Microsoft.CognitiveServices/accounts/deployments@2024-06-01-preview' = { +resource llmSequential 'Microsoft.CognitiveServices/accounts/deployments@2024-06-01-preview' = { parent: cognitiveOpenai - name: llmSlowModelFullName + name: llmSequentialModelFullName tags: tags sku: { - capacity: llmSlowQuota - name: llmSlowDeploymentType + capacity: llmSequentialQuota + name: llmSequentialDeploymentType } properties: { raiPolicyName: contentfilter.name versionUpgradeOption: 'NoAutoUpgrade' model: { format: 'OpenAI' - name: llmSlowModel - version: llmSlowVersion + name: llmSequentialModel + version: llmSequentialVersion } } } -resource llmFast 'Microsoft.CognitiveServices/accounts/deployments@2024-06-01-preview' = { +resource llmRealtime 'Microsoft.CognitiveServices/accounts/deployments@2024-06-01-preview' = { parent: cognitiveOpenai - name: llmFastModelFullName + name: llmRealtimeModelFullName tags: tags sku: { - capacity: llmFastQuota - name: llmFastDeploymentType + capacity: llmRealtimeQuota + name: llmRealtimeDeploymentType } properties: { raiPolicyName: contentfilter.name versionUpgradeOption: 'NoAutoUpgrade' model: { format: 'OpenAI' - name: llmFastModel - version: llmFastVersion + name: llmRealtimeModel + version: llmRealtimeVersion } } dependsOn: [ - llmSlow + llmSequential ] } @@ -681,7 +673,7 @@ resource embedding 'Microsoft.CognitiveServices/accounts/deployments@2024-06-01- } } dependsOn: [ - llmFast + llmRealtime ] } @@ -885,10 +877,10 @@ resource configValues 'Microsoft.AppConfiguration/configurationStores/keyValues@ answer_hard_timeout_sec: 180 answer_soft_timeout_sec: 30 callback_timeout_hour: 72 - phone_silence_timeout_sec: 1 + recognition_retry_max: 2 recording_enabled: false - slow_llm_for_chat: true - voice_recognition_retry_max: 2 + vad_silence_timeout_ms: 500 + vad_threshold: '0.5' }): { parent: configStore name: item.key diff --git a/cicd/bicep/main.bicep b/cicd/bicep/main.bicep index 190d352d..47146e39 100644 --- a/cicd/bicep/main.bicep +++ b/cicd/bicep/main.bicep @@ -6,16 +6,16 @@ param embeddingQuota int = 50 param embeddingVersion string = '1' param imageVersion string = 'main' param instance string -param llmFastContext int = 128000 -param llmFastDeploymentType string = 'GlobalStandard' // Pay-as-you-go in all regions -param llmFastModel string = 'gpt-4o-mini' -param llmFastQuota int = 50 -param llmFastVersion string = '2024-07-18' -param llmSlowContext int = 128000 -param llmSlowDeploymentType string = 'GlobalStandard' // Pay-as-you-go in all regions -param llmSlowModel string = 'gpt-4o' -param llmSlowQuota int = 50 -param llmSlowVersion string = '2024-08-06' +param llmRealtimeContext int = 128000 +param llmRealtimeDeploymentType string = 'GlobalStandard' // Pay-as-you-go in all regions +param llmRealtimeModel string = 'gpt-4o-realtime-preview' +param llmRealtimeQuota int = 1 +param llmRealtimeVersion string = '2024-10-01' +param llmSequentialContext int = 128000 +param llmSequentialDeploymentType string = 'GlobalStandard' // Pay-as-you-go in all regions +param llmSequentialModel string = 'gpt-4o' +param llmSequentialQuota int = 300 +param llmSequentialVersion string = '2024-08-06' param location string = deployment().location param openaiLocation string param promptContentFilter bool = true // Should be set to false but requires a custom approval from Microsoft @@ -53,16 +53,16 @@ module app 'app.bicep' = { embeddingQuota: embeddingQuota embeddingVersion: embeddingVersion imageVersion: imageVersion - llmFastContext: llmFastContext - llmFastDeploymentType: llmFastDeploymentType - llmFastModel: llmFastModel - llmFastQuota: llmFastQuota - llmFastVersion: llmFastVersion - llmSlowContext: llmSlowContext - llmSlowDeploymentType: llmSlowDeploymentType - llmSlowModel: llmSlowModel - llmSlowQuota: llmSlowQuota - llmSlowVersion: llmSlowVersion + llmRealtimeContext: llmRealtimeContext + llmRealtimeDeploymentType: llmRealtimeDeploymentType + llmRealtimeModel: llmRealtimeModel + llmRealtimeQuota: llmRealtimeQuota + llmRealtimeVersion: llmRealtimeVersion + llmSequentialContext: llmSequentialContext + llmSequentialDeploymentType: llmSequentialDeploymentType + llmSequentialModel: llmSequentialModel + llmSequentialQuota: llmSequentialQuota + llmSequentialVersion: llmSequentialVersion location: location openaiLocation: openaiLocation promptContentFilter: promptContentFilter diff --git a/public/loading.wav b/public/loading.wav deleted file mode 100644 index 9e28db63f7d3a83593ae63f8a231a54940ed70ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89752 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 z 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 diff --git a/pyproject.toml b/pyproject.toml index 84a38896..e048bf1c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,10 +8,11 @@ requires-python = ">=3.12" dependencies = [ "aiohttp-retry~=2.9", # Retry middleware for aiohttp, used with Twilio SDK "aiohttp[speedups]~=3.10", # Async HTTP client for Azure and Twilio SDKs, plus async DNS resolver and async Brotli compression + "aiojobs~=1.3", # Async job scheduler "aiosqlite~=0.20", # Async SQLite3 driver "azure-ai-translation-text~=1.0", # Azure Cognitive Services Text Translation "azure-appconfiguration~=1.7", # Outsourced configuration for live updates - "azure-communication-callautomation~=1.2", # Azure Communication Services Call Automation + "azure-communication-callautomation~=1.3.0a0", # Azure Communication Services Call Automation "azure-communication-sms~=1.1", # Azure Communication Services SMS "azure-cosmos~=4.7", # Azure Cosmos DB "azure-eventgrid~=4.20", # Azure Event Grid @@ -36,12 +37,14 @@ dependencies = [ "pydantic-extra-types~=2.9", # Extra types for Pydantic "pydantic-settings~=2.6", # Application configuration management with Pydantic "pydantic[email]~=2.9", # Data serialization and validation, plus email validation + "pydub~=0.25", # Audio processing with FFmpeg "pyjwt~=2.9", # Secure inbound calls from Communication Services "python-dotenv~=1.0", # Load environment variables from .env file "python-multipart==0.*", # Form parsing "pytz~=2024.0", # Time zone handling "pyyaml~=6.0", # YAML parser "redis~=5.2", # Redis client + "rtclient@git+https://github.com/Azure-Samples/aoai-realtime-audio-sdk#egg=py-0.5.2&subdirectory=python", # OpenAI real-time audio SDK "structlog~=24.4", # Pretty logging "tenacity~=8.2", # Async retrying library "tiktoken~=0.8", # Tokenization library for OpenAI models @@ -71,7 +74,6 @@ py-modules = [ [tool.pip-tools] allow-unsafe = true -generate-hashes = true [tool.deptry] ignore_notebooks = true diff --git a/requirements-dev.txt b/requirements-dev.txt index 8eba0c4b..90d84dc5 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,108 +2,13 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --allow-unsafe --extra=dev --generate-hashes --output-file=requirements-dev.txt pyproject.toml +# pip-compile --allow-unsafe --extra=dev --output-file=requirements-dev.txt pyproject.toml # -aiodns==3.2.0 \ - --hash=sha256:62869b23409349c21b072883ec8998316b234c9a9e36675756e8e317e8768f72 \ - --hash=sha256:e443c0c27b07da3174a109fd9e736d69058d808f144d3c9d56dbd1776964c5f5 +aiodns==3.2.0 # via aiohttp -aiohappyeyeballs==2.4.3 \ - --hash=sha256:75cf88a15106a5002a8eb1dab212525c00d1f4c0fa96e551c9fbe6f09a621586 \ - --hash=sha256:8a7a83727b2756f394ab2895ea0765a0a8c475e3c71e98d43d76f22b4b435572 +aiohappyeyeballs==2.4.3 # via aiohttp -aiohttp[speedups]==3.10.10 \ - --hash=sha256:007ec22fbc573e5eb2fb7dec4198ef8f6bf2fe4ce20020798b2eb5d0abda6138 \ - --hash=sha256:00819de9e45d42584bed046314c40ea7e9aea95411b38971082cad449392b08c \ - --hash=sha256:01948b1d570f83ee7bbf5a60ea2375a89dfb09fd419170e7f5af029510033d24 \ - --hash=sha256:038f514fe39e235e9fef6717fbf944057bfa24f9b3db9ee551a7ecf584b5b480 \ - --hash=sha256:03a42ac7895406220124c88911ebee31ba8b2d24c98507f4a8bf826b2937c7f2 \ - --hash=sha256:05646ebe6b94cc93407b3bf34b9eb26c20722384d068eb7339de802154d61bc5 \ - --hash=sha256:0631dd7c9f0822cc61c88586ca76d5b5ada26538097d0f1df510b082bad3411a \ - --hash=sha256:0b00807e2605f16e1e198f33a53ce3c4523114059b0c09c337209ae55e3823a8 \ - --hash=sha256:0e1b370d8007c4ae31ee6db7f9a2fe801a42b146cec80a86766e7ad5c4a259cf \ - --hash=sha256:15ecd889a709b0080f02721255b3f80bb261c2293d3c748151274dfea93ac871 \ - --hash=sha256:1b66ccafef7336a1e1f0e389901f60c1d920102315a56df85e49552308fc0486 \ - --hash=sha256:1bbb122c557a16fafc10354b9d99ebf2f2808a660d78202f10ba9d50786384b9 \ - --hash=sha256:1eb89d3d29adaf533588f209768a9c02e44e4baf832b08118749c5fad191781d \ - --hash=sha256:258c5dd01afc10015866114e210fb7365f0d02d9d059c3c3415382ab633fcbcb \ - --hash=sha256:2609e9ab08474702cc67b7702dbb8a80e392c54613ebe80db7e8dbdb79837c68 \ - --hash=sha256:274cfa632350225ce3fdeb318c23b4a10ec25c0e2c880eff951a3842cf358ac1 \ - --hash=sha256:28529e08fde6f12eba8677f5a8608500ed33c086f974de68cc65ab218713a59d \ - --hash=sha256:2b606353da03edcc71130b52388d25f9a30a126e04caef1fd637e31683033abd \ - --hash=sha256:30ca7c3b94708a9d7ae76ff281b2f47d8eaf2579cd05971b5dc681db8caac6e1 \ - --hash=sha256:333cf6cf8e65f6a1e06e9eb3e643a0c515bb850d470902274239fea02033e9a8 \ - --hash=sha256:3455522392fb15ff549d92fbf4b73b559d5e43dc522588f7eb3e54c3f38beee7 \ - --hash=sha256:362f641f9071e5f3ee6f8e7d37d5ed0d95aae656adf4ef578313ee585b585959 \ - --hash=sha256:3bcd391d083f636c06a68715e69467963d1f9600f85ef556ea82e9ef25f043f7 \ - --hash=sha256:3dffb610a30d643983aeb185ce134f97f290f8935f0abccdd32c77bed9388b42 \ - --hash=sha256:3fe407bf93533a6fa82dece0e74dbcaaf5d684e5a51862887f9eaebe6372cd79 \ - --hash=sha256:413251f6fcf552a33c981c4709a6bba37b12710982fec8e558ae944bfb2abd38 \ - --hash=sha256:438cd072f75bb6612f2aca29f8bd7cdf6e35e8f160bc312e49fbecab77c99e3a \ - --hash=sha256:4470c73c12cd9109db8277287d11f9dd98f77fc54155fc71a7738a83ffcc8ea8 \ - --hash=sha256:45c3b868724137f713a38376fef8120c166d1eadd50da1855c112fe97954aed8 \ - --hash=sha256:486f7aabfa292719a2753c016cc3a8f8172965cabb3ea2e7f7436c7f5a22a151 \ - --hash=sha256:4f05e9727ce409358baa615dbeb9b969db94324a79b5a5cea45d39bdb01d82e6 \ - --hash=sha256:50aed5155f819873d23520919e16703fc8925e509abbb1a1491b0087d1cd969e \ - --hash=sha256:50edbcad60d8f0e3eccc68da67f37268b5144ecc34d59f27a02f9611c1d4eec7 \ - --hash=sha256:54ca74df1be3c7ca1cf7f4c971c79c2daf48d9aa65dea1a662ae18926f5bc8ce \ - --hash=sha256:578a4b875af3e0daaf1ac6fa983d93e0bbfec3ead753b6d6f33d467100cdc67b \ - --hash=sha256:597a079284b7ee65ee102bc3a6ea226a37d2b96d0418cc9047490f231dc09fe8 \ - --hash=sha256:59bb3c54aa420521dc4ce3cc2c3fe2ad82adf7b09403fa1f48ae45c0cbde6628 \ - --hash=sha256:5c6a5b8c7926ba5d8545c7dd22961a107526562da31a7a32fa2456baf040939f \ - --hash=sha256:64f6c17757251e2b8d885d728b6433d9d970573586a78b78ba8929b0f41d045a \ - --hash=sha256:679abe5d3858b33c2cf74faec299fda60ea9de62916e8b67e625d65bf069a3b7 \ - --hash=sha256:741a46d58677d8c733175d7e5aa618d277cd9d880301a380fd296975a9cdd7bc \ - --hash=sha256:7789050d9e5d0c309c706953e5e8876e38662d57d45f936902e176d19f1c58ab \ - --hash=sha256:77abf6665ae54000b98b3c742bc6ea1d1fb31c394bcabf8b5d2c1ac3ebfe7f3b \ - --hash=sha256:79019094f87c9fb44f8d769e41dbb664d6e8fcfd62f665ccce36762deaa0e911 \ - --hash=sha256:7b06b7843929e41a94ea09eb1ce3927865387e3e23ebe108e0d0d09b08d25be9 \ - --hash=sha256:7e338c0523d024fad378b376a79faff37fafb3c001872a618cde1d322400a572 \ - --hash=sha256:7ea7ffc6d6d6f8a11e6f40091a1040995cdff02cfc9ba4c2f30a516cb2633554 \ - --hash=sha256:8105fd8a890df77b76dd3054cddf01a879fc13e8af576805d667e0fa0224c35d \ - --hash=sha256:84afcdea18eda514c25bc68b9af2a2b1adea7c08899175a51fe7c4fb6d551257 \ - --hash=sha256:9294bbb581f92770e6ed5c19559e1e99255e4ca604a22c5c6397b2f9dd3ee42c \ - --hash=sha256:93429602396f3383a797a2a70e5f1de5df8e35535d7806c9f91df06f297e109b \ - --hash=sha256:9627cc1a10c8c409b5822a92d57a77f383b554463d1884008e051c32ab1b3742 \ - --hash=sha256:998f3bd3cfc95e9424a6acd7840cbdd39e45bc09ef87533c006f94ac47296090 \ - --hash=sha256:9c72109213eb9d3874f7ac8c0c5fa90e072d678e117d9061c06e30c85b4cf0e6 \ - --hash=sha256:9fc1500fd2a952c5c8e3b29aaf7e3cc6e27e9cfc0a8819b3bce48cc1b849e4cc \ - --hash=sha256:a3f00003de6eba42d6e94fabb4125600d6e484846dbf90ea8e48a800430cc142 \ - --hash=sha256:a45d85cf20b5e0d0aa5a8dca27cce8eddef3292bc29d72dcad1641f4ed50aa16 \ - --hash=sha256:a7d8d14fe962153fc681f6366bdec33d4356f98a3e3567782aac1b6e0e40109a \ - --hash=sha256:a8fa23fe62c436ccf23ff930149c047f060c7126eae3ccea005f0483f27b2e28 \ - --hash=sha256:aa6658732517ddabe22c9036479eabce6036655ba87a0224c612e1ae6af2087e \ - --hash=sha256:aafc8ee9b742ce75044ae9a4d3e60e3d918d15a4c2e08a6c3c3e38fa59b92d94 \ - --hash=sha256:ab5a5a0c7a7991d90446a198689c0535be89bbd6b410a1f9a66688f0880ec026 \ - --hash=sha256:acd48d5b80ee80f9432a165c0ac8cbf9253eaddb6113269a5e18699b33958dbb \ - --hash=sha256:ad7593bb24b2ab09e65e8a1d385606f0f47c65b5a2ae6c551db67d6653e78c28 \ - --hash=sha256:baa42524a82f75303f714108fea528ccacf0386af429b69fff141ffef1c534f9 \ - --hash=sha256:bdfcf6443637c148c4e1a20c48c566aa694fa5e288d34b20fcdc58507882fed3 \ - --hash=sha256:be7443669ae9c016b71f402e43208e13ddf00912f47f623ee5994e12fc7d4b3f \ - --hash=sha256:c02a30b904282777d872266b87b20ed8cc0d1501855e27f831320f471d54d983 \ - --hash=sha256:c1277cd707c465cd09572a774559a3cc7c7a28802eb3a2a9472588f062097205 \ - --hash=sha256:c30a0eafc89d28e7f959281b58198a9fa5e99405f716c0289b7892ca345fe45f \ - --hash=sha256:c5ce2ce7c997e1971b7184ee37deb6ea9922ef5163c6ee5aa3c274b05f9e12fa \ - --hash=sha256:c823bc3971c44ab93e611ab1a46b1eafeae474c0c844aff4b7474287b75fe49c \ - --hash=sha256:ce0cdc074d540265bfeb31336e678b4e37316849d13b308607efa527e981f5c2 \ - --hash=sha256:d1720b4f14c78a3089562b8875b53e36b51c97c51adc53325a69b79b4b48ebcb \ - --hash=sha256:d183cf9c797a5291e8301790ed6d053480ed94070637bfaad914dd38b0981f67 \ - --hash=sha256:d9010c31cd6fa59438da4e58a7f19e4753f7f264300cd152e7f90d4602449762 \ - --hash=sha256:d9e5e4a85bdb56d224f412d9c98ae4cbd032cc4f3161818f692cd81766eee65a \ - --hash=sha256:da1dee8948d2137bb51fbb8a53cce6b1bcc86003c6b42565f008438b806cccd8 \ - --hash=sha256:df9270660711670e68803107d55c2b5949c2e0f2e4896da176e1ecfc068b974a \ - --hash=sha256:e00e3505cd80440f6c98c6d69269dcc2a119f86ad0a9fd70bccc59504bebd68a \ - --hash=sha256:e48d5021a84d341bcaf95c8460b152cfbad770d28e5fe14a768988c461b821bc \ - --hash=sha256:e7f8b04d83483577fd9200461b057c9f14ced334dcb053090cea1da9c8321a91 \ - --hash=sha256:edfe3341033a6b53a5c522c802deb2079eee5cbfbb0af032a55064bd65c73a23 \ - --hash=sha256:ef9c33cc5cbca35808f6c74be11eb7f5f6b14d2311be84a15b594bd3e58b5527 \ - --hash=sha256:f2d4324a98062be0525d16f768a03e0bbb3b9fe301ceee99611dc9a7953124e6 \ - --hash=sha256:f3935f82f6f4a3820270842e90456ebad3af15810cf65932bd24da4463bc0a4c \ - --hash=sha256:f614ab0c76397661b90b6851a030004dac502e48260ea10f2441abd2207fbcc7 \ - --hash=sha256:f7db54c7914cc99d901d93a34704833568d86c20925b2762f9fa779f9cd2e70f \ - --hash=sha256:fbc6264158392bad9df19537e872d476f7c57adf718944cc1e4495cbabf38e2a \ - --hash=sha256:fe2fb38c2ed905a2582948e2de560675e9dfbee94c6d5ccdb1301c6d0a5bf092 \ - --hash=sha256:ffe595f10566f8276b76dc3a11ae4bb7eba1aac8ddd75811736a15b0d5311414 +aiohttp[speedups]==3.10.10 # via # aiohttp-retry # call-center-ai (pyproject.toml) @@ -111,68 +16,43 @@ aiohttp[speedups]==3.10.10 \ # fsspec # langchain # langchain-community + # rtclient # twilio -aiohttp-retry==2.9.1 \ - --hash=sha256:66d2759d1921838256a05a3f80ad7e724936f083e35be5abb5e16eed6be6dc54 \ - --hash=sha256:8eb75e904ed4ee5c2ec242fefe85bf04240f685391c4879d8f541d6028ff01f1 +aiohttp-retry==2.9.1 # via # call-center-ai (pyproject.toml) # twilio -aiosignal==1.3.1 \ - --hash=sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc \ - --hash=sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17 +aiojobs==1.3.0 + # via call-center-ai (pyproject.toml) +aiosignal==1.3.1 # via aiohttp -aiosqlite==0.20.0 \ - --hash=sha256:36a1deaca0cac40ebe32aac9977a6e2bbc7f5189f23f4a54d5908986729e5bd6 \ - --hash=sha256:6d35c8c256637f4672f843c31021464090805bf925385ac39473fb16eaaca3d7 +aiosqlite==0.20.0 # via call-center-ai (pyproject.toml) -annotated-types==0.7.0 \ - --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ - --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 +annotated-types==0.7.0 # via pydantic -anyio==4.6.2.post1 \ - --hash=sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c \ - --hash=sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d +anyio==4.6.2.post1 # via # httpx # openai # starlette # watchfiles -appdirs==1.4.4 \ - --hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 \ - --hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128 +appdirs==1.4.4 # via ragas -asgiref==3.8.1 \ - --hash=sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47 \ - --hash=sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590 +asgiref==3.8.1 # via opentelemetry-instrumentation-asgi -attrs==24.2.0 \ - --hash=sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346 \ - --hash=sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2 +attrs==24.2.0 # via aiohttp -azure-ai-translation-text==1.0.1 \ - --hash=sha256:2c60d1adcda68809dd9f431ec0b8ac1b1977a69037d10751a39c233bc6bc42d8 \ - --hash=sha256:8fff37f7ea4f82f25ad6328374859d6bad022d2f30fde9b30b5ee4cf1f7c1769 +azure-ai-translation-text==1.0.1 # via call-center-ai (pyproject.toml) -azure-appconfiguration==1.7.1 \ - --hash=sha256:3ebe41e9be3f4ae6ca61e5dbc42c4b7cc007a01054a8506501a26dfc199fd3ec \ - --hash=sha256:6e62b040a0210071be4423aafbdca3b053884c0d412855e3f8eff8e8d0b1a02b +azure-appconfiguration==1.7.1 # via call-center-ai (pyproject.toml) -azure-common==1.1.28 \ - --hash=sha256:4ac0cd3214e36b6a1b6a442686722a5d8cc449603aa833f3f0f40bda836704a3 \ - --hash=sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad +azure-common==1.1.28 # via azure-search-documents -azure-communication-callautomation==1.2.0 \ - --hash=sha256:45efce4c0990e9421b3de755d592c750dabd8b19e90441e03f84e12127896461 \ - --hash=sha256:aa02155878f2540c267729657f1b12e98683bc7e7831e6d576277606ece9e3a7 +azure-communication-callautomation==1.3.0b2 # via call-center-ai (pyproject.toml) -azure-communication-sms==1.1.0 \ - --hash=sha256:3ce901924661a7e9f684c777784cdd09d0c2277489a3b563b025868f74d7a676 \ - --hash=sha256:5eb99e12537cf03f6bea96aa63f3fbfd77c3e12db075751708f2956e627d8074 +azure-communication-sms==1.1.0 # via call-center-ai (pyproject.toml) -azure-core==1.32.0 \ - --hash=sha256:22b3c35d6b2dae14990f6c1be2912bf23ffe50b220e708a28ab1bb92b1c730e5 \ - --hash=sha256:eac191a0efb23bfa83fddf321b27b122b4ec847befa3091fa736a5c32c50d7b4 +azure-core==1.32.0 # via # azure-ai-translation-text # azure-appconfiguration @@ -187,790 +67,158 @@ azure-core==1.32.0 \ # azure-search-documents # azure-storage-queue # msrest -azure-core-tracing-opentelemetry==1.0.0b11 \ - --hash=sha256:016cefcaff2900fb5cdb7a8a7abd03e9c266622c06e26b3fe6dafa54c4b48bf5 \ - --hash=sha256:a230d1555838b5d07b7594221cd639ea7bc24e29c881e5675e311c6067bad4f5 +azure-core-tracing-opentelemetry==1.0.0b11 # via azure-monitor-opentelemetry -azure-cosmos==4.7.0 \ - --hash=sha256:03d8c7740ddc2906fb16e07b136acc0fe6a6a02656db46c5dd6f1b127b58cc96 \ - --hash=sha256:72d714033134656302a2e8957c4b93590673bd288b0ca60cb123e348ae99a241 - # via call-center-ai (pyproject.toml) -azure-eventgrid==4.20.0 \ - --hash=sha256:c1edab90769bc4e7a2fb0a2037cf0455754d50af793674c08b3fec2293248c4c \ - --hash=sha256:e93c87df46bf16f38d427adf7fd1673c47066f293dfa6f3cbc19036e2b3d6af1 +azure-cosmos==4.7.0 # via call-center-ai (pyproject.toml) -azure-identity==1.19.0 \ - --hash=sha256:500144dc18197d7019b81501165d4fa92225f03778f17d7ca8a2a180129a9c83 \ - --hash=sha256:e3f6558c181692d7509f09de10cca527c7dce426776454fb97df512a46527e81 +azure-eventgrid==4.20.0 # via call-center-ai (pyproject.toml) -azure-monitor-opentelemetry==1.6.4 \ - --hash=sha256:014142ffa420bc2b287ff3bd30de6c31d64b2846423d011a8280334d7afcb01a \ - --hash=sha256:9f5ce4c666caf1f9b536f8ab4ee207dff94777d568517c74f26e3327f75c3fc3 +azure-identity==1.19.0 + # via + # call-center-ai (pyproject.toml) + # rtclient +azure-monitor-opentelemetry==1.6.4 # via call-center-ai (pyproject.toml) -azure-monitor-opentelemetry-exporter==1.0.0b32 \ - --hash=sha256:48fe5e2c29e509b65413c9715040a9dc6cc052bb7cc932933535373ca0c54ba7 \ - --hash=sha256:f16d1d5636fa3dd834f3f63972dee78c9f17fd296a39525772e6f281e7f258cd +azure-monitor-opentelemetry-exporter==1.0.0b32 # via azure-monitor-opentelemetry -azure-search-documents==11.6.0b6 \ - --hash=sha256:323dce21b584becc72fe8bc22db015fad1db7b62305a27f63609cfa76bfbd340 \ - --hash=sha256:8e64777f2b98d08ae7f8e64a0312e99a2e904e8b8709aea42dc5f5017c1856fb +azure-search-documents==11.6.0b6 # via call-center-ai (pyproject.toml) -azure-storage-queue==12.12.0 \ - --hash=sha256:9305f724e0df6a93e3645bf075b5a7e3fc0a1eb1ee47c85912c7aff6b6fd490d \ - --hash=sha256:baf2f1bc82b7d4f5291922c3ea4f23ce2243e942dbe7494fca1782290b37f1e4 +azure-storage-queue==12.12.0 # via call-center-ai (pyproject.toml) -beautifulsoup4==4.12.3 \ - --hash=sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051 \ - --hash=sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed +beautifulsoup4==4.12.3 # via django-htmlmin -brotli==1.1.0 \ - --hash=sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208 \ - --hash=sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48 \ - --hash=sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354 \ - --hash=sha256:0737ddb3068957cf1b054899b0883830bb1fec522ec76b1098f9b6e0f02d9419 \ - --hash=sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a \ - --hash=sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128 \ - --hash=sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c \ - --hash=sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088 \ - --hash=sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9 \ - --hash=sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a \ - --hash=sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3 \ - --hash=sha256:1b2c248cd517c222d89e74669a4adfa5577e06ab68771a529060cf5a156e9757 \ - --hash=sha256:1e9a65b5736232e7a7f91ff3d02277f11d339bf34099a56cdab6a8b3410a02b2 \ - --hash=sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438 \ - --hash=sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578 \ - --hash=sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b \ - --hash=sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b \ - --hash=sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68 \ - --hash=sha256:2a24c50840d89ded6c9a8fdc7b6ed3692ed4e86f1c4a4a938e1e92def92933e0 \ - --hash=sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d \ - --hash=sha256:2feb1d960f760a575dbc5ab3b1c00504b24caaf6986e2dc2b01c09c87866a943 \ - --hash=sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd \ - --hash=sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409 \ - --hash=sha256:32d95b80260d79926f5fab3c41701dbb818fde1c9da590e77e571eefd14abe28 \ - --hash=sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da \ - --hash=sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50 \ - --hash=sha256:3c0ef38c7a7014ffac184db9e04debe495d317cc9c6fb10071f7fefd93100a4f \ - --hash=sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0 \ - --hash=sha256:3ee8a80d67a4334482d9712b8e83ca6b1d9bc7e351931252ebef5d8f7335a547 \ - --hash=sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180 \ - --hash=sha256:43395e90523f9c23a3d5bdf004733246fba087f2948f87ab28015f12359ca6a0 \ - --hash=sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d \ - --hash=sha256:4410f84b33374409552ac9b6903507cdb31cd30d2501fc5ca13d18f73548444a \ - --hash=sha256:494994f807ba0b92092a163a0a283961369a65f6cbe01e8891132b7a320e61eb \ - --hash=sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112 \ - --hash=sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc \ - --hash=sha256:4f3607b129417e111e30637af1b56f24f7a49e64763253bbc275c75fa887d4b2 \ - --hash=sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265 \ - --hash=sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327 \ - --hash=sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95 \ - --hash=sha256:58d4b711689366d4a03ac7957ab8c28890415e267f9b6589969e74b6e42225ec \ - --hash=sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd \ - --hash=sha256:5dab0844f2cf82be357a0eb11a9087f70c5430b2c241493fc122bb6f2bb0917c \ - --hash=sha256:5e55da2c8724191e5b557f8e18943b1b4839b8efc3ef60d65985bcf6f587dd38 \ - --hash=sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914 \ - --hash=sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0 \ - --hash=sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a \ - --hash=sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7 \ - --hash=sha256:6967ced6730aed543b8673008b5a391c3b1076d834ca438bbd70635c73775368 \ - --hash=sha256:6974f52a02321b36847cd19d1b8e381bf39939c21efd6ee2fc13a28b0d99348c \ - --hash=sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0 \ - --hash=sha256:6c6e0c425f22c1c719c42670d561ad682f7bfeeef918edea971a79ac5252437f \ - --hash=sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451 \ - --hash=sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f \ - --hash=sha256:7bc37c4d6b87fb1017ea28c9508b36bbcb0c3d18b4260fcdf08b200c74a6aee8 \ - --hash=sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e \ - --hash=sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248 \ - --hash=sha256:7eedaa5d036d9336c95915035fb57422054014ebdeb6f3b42eac809928e40d0c \ - --hash=sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91 \ - --hash=sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724 \ - --hash=sha256:832436e59afb93e1836081a20f324cb185836c617659b07b129141a8426973c7 \ - --hash=sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966 \ - --hash=sha256:87a3044c3a35055527ac75e419dfa9f4f3667a1e887ee80360589eb8c90aabb9 \ - --hash=sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97 \ - --hash=sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d \ - --hash=sha256:8bf32b98b75c13ec7cf774164172683d6e7891088f6316e54425fde1efc276d5 \ - --hash=sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf \ - --hash=sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac \ - --hash=sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b \ - --hash=sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951 \ - --hash=sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74 \ - --hash=sha256:91d7cc2a76b5567591d12c01f019dd7afce6ba8cba6571187e21e2fc418ae648 \ - --hash=sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60 \ - --hash=sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c \ - --hash=sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1 \ - --hash=sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8 \ - --hash=sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d \ - --hash=sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc \ - --hash=sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61 \ - --hash=sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460 \ - --hash=sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751 \ - --hash=sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9 \ - --hash=sha256:a7e53012d2853a07a4a79c00643832161a910674a893d296c9f1259859a289d2 \ - --hash=sha256:a93dde851926f4f2678e704fadeb39e16c35d8baebd5252c9fd94ce8ce68c4a0 \ - --hash=sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1 \ - --hash=sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474 \ - --hash=sha256:aea440a510e14e818e67bfc4027880e2fb500c2ccb20ab21c7a7c8b5b4703d75 \ - --hash=sha256:af6fa6817889314555aede9a919612b23739395ce767fe7fcbea9a80bf140fe5 \ - --hash=sha256:b760c65308ff1e462f65d69c12e4ae085cff3b332d894637f6273a12a482d09f \ - --hash=sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2 \ - --hash=sha256:c247dd99d39e0338a604f8c2b3bc7061d5c2e9e2ac7ba9cc1be5a69cb6cd832f \ - --hash=sha256:c5529b34c1c9d937168297f2c1fde7ebe9ebdd5e121297ff9c043bdb2ae3d6fb \ - --hash=sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6 \ - --hash=sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9 \ - --hash=sha256:ca63e1890ede90b2e4454f9a65135a4d387a4585ff8282bb72964fab893f2111 \ - --hash=sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2 \ - --hash=sha256:cb1dac1770878ade83f2ccdf7d25e494f05c9165f5246b46a621cc849341dc01 \ - --hash=sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467 \ - --hash=sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619 \ - --hash=sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf \ - --hash=sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408 \ - --hash=sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579 \ - --hash=sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84 \ - --hash=sha256:d2b35ca2c7f81d173d2fadc2f4f31e88cc5f7a39ae5b6db5513cf3383b0e0ec7 \ - --hash=sha256:d342778ef319e1026af243ed0a07c97acf3bad33b9f29e7ae6a1f68fd083e90c \ - --hash=sha256:d487f5432bf35b60ed625d7e1b448e2dc855422e87469e3f450aa5552b0eb284 \ - --hash=sha256:d7702622a8b40c49bffb46e1e3ba2e81268d5c04a34f460978c6b5517a34dd52 \ - --hash=sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b \ - --hash=sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59 \ - --hash=sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752 \ - --hash=sha256:e4fe605b917c70283db7dfe5ada75e04561479075761a0b3866c081d035b01c1 \ - --hash=sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80 \ - --hash=sha256:e79e6520141d792237c70bcd7a3b122d00f2613769ae0cb61c52e89fd3443839 \ - --hash=sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0 \ - --hash=sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2 \ - --hash=sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3 \ - --hash=sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64 \ - --hash=sha256:f0db75f47be8b8abc8d9e31bc7aad0547ca26f24a54e6fd10231d623f183d089 \ - --hash=sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643 \ - --hash=sha256:f31859074d57b4639318523d6ffdca586ace54271a73ad23ad021acd807eb14b \ - --hash=sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e \ - --hash=sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985 \ - --hash=sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596 \ - --hash=sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2 \ - --hash=sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064 +brotli==1.1.0 # via aiohttp -build==1.2.2.post1 \ - --hash=sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5 \ - --hash=sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7 +build==1.2.2.post1 # via pip-tools -certifi==2024.8.30 \ - --hash=sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 \ - --hash=sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9 +certifi==2024.8.30 # via # httpcore # httpx # msrest # requests # sentry-sdk -cffi==1.17.1 \ - --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \ - --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \ - --hash=sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1 \ - --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \ - --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \ - --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \ - --hash=sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8 \ - --hash=sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36 \ - --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \ - --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \ - --hash=sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc \ - --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \ - --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \ - --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \ - --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \ - --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \ - --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \ - --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \ - --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \ - --hash=sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b \ - --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \ - --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \ - --hash=sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c \ - --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \ - --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \ - --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \ - --hash=sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8 \ - --hash=sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1 \ - --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \ - --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \ - --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \ - --hash=sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595 \ - --hash=sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0 \ - --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \ - --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \ - --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \ - --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \ - --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \ - --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \ - --hash=sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16 \ - --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \ - --hash=sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e \ - --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \ - --hash=sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964 \ - --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \ - --hash=sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576 \ - --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \ - --hash=sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3 \ - --hash=sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662 \ - --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \ - --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \ - --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \ - --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \ - --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \ - --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \ - --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \ - --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \ - --hash=sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9 \ - --hash=sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7 \ - --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \ - --hash=sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a \ - --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \ - --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a \ - --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \ - --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \ - --hash=sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87 \ - --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b +cffi==1.17.1 # via # cryptography # pycares -charset-normalizer==3.4.0 \ - --hash=sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621 \ - --hash=sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6 \ - --hash=sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8 \ - --hash=sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912 \ - --hash=sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c \ - --hash=sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b \ - --hash=sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d \ - --hash=sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d \ - --hash=sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95 \ - --hash=sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e \ - --hash=sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565 \ - --hash=sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64 \ - --hash=sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab \ - --hash=sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be \ - --hash=sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e \ - --hash=sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907 \ - --hash=sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0 \ - --hash=sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2 \ - --hash=sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62 \ - --hash=sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62 \ - --hash=sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23 \ - --hash=sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc \ - --hash=sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284 \ - --hash=sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca \ - --hash=sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455 \ - --hash=sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858 \ - --hash=sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b \ - --hash=sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594 \ - --hash=sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc \ - --hash=sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db \ - --hash=sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b \ - --hash=sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea \ - --hash=sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6 \ - --hash=sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920 \ - --hash=sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749 \ - --hash=sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7 \ - --hash=sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd \ - --hash=sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99 \ - --hash=sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242 \ - --hash=sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee \ - --hash=sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129 \ - --hash=sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2 \ - --hash=sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51 \ - --hash=sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee \ - --hash=sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8 \ - --hash=sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b \ - --hash=sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613 \ - --hash=sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742 \ - --hash=sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe \ - --hash=sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3 \ - --hash=sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5 \ - --hash=sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631 \ - --hash=sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7 \ - --hash=sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15 \ - --hash=sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c \ - --hash=sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea \ - --hash=sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417 \ - --hash=sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250 \ - --hash=sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88 \ - --hash=sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca \ - --hash=sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa \ - --hash=sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99 \ - --hash=sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149 \ - --hash=sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41 \ - --hash=sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574 \ - --hash=sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0 \ - --hash=sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f \ - --hash=sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d \ - --hash=sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654 \ - --hash=sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3 \ - --hash=sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19 \ - --hash=sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90 \ - --hash=sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578 \ - --hash=sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9 \ - --hash=sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1 \ - --hash=sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51 \ - --hash=sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719 \ - --hash=sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236 \ - --hash=sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a \ - --hash=sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c \ - --hash=sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade \ - --hash=sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944 \ - --hash=sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc \ - --hash=sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6 \ - --hash=sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6 \ - --hash=sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27 \ - --hash=sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6 \ - --hash=sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2 \ - --hash=sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12 \ - --hash=sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf \ - --hash=sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114 \ - --hash=sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7 \ - --hash=sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf \ - --hash=sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d \ - --hash=sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b \ - --hash=sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed \ - --hash=sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03 \ - --hash=sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4 \ - --hash=sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67 \ - --hash=sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365 \ - --hash=sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a \ - --hash=sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748 \ - --hash=sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b \ - --hash=sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079 \ - --hash=sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482 +charset-normalizer==3.4.0 # via requests -click==8.1.7 \ - --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ - --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de +click==8.1.7 # via # deptry # pip-tools # typer # uvicorn -cryptography==43.0.3 \ - --hash=sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362 \ - --hash=sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4 \ - --hash=sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa \ - --hash=sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83 \ - --hash=sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff \ - --hash=sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805 \ - --hash=sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6 \ - --hash=sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664 \ - --hash=sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08 \ - --hash=sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e \ - --hash=sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18 \ - --hash=sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f \ - --hash=sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73 \ - --hash=sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5 \ - --hash=sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984 \ - --hash=sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd \ - --hash=sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3 \ - --hash=sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e \ - --hash=sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405 \ - --hash=sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2 \ - --hash=sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c \ - --hash=sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995 \ - --hash=sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73 \ - --hash=sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16 \ - --hash=sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7 \ - --hash=sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd \ - --hash=sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7 +cryptography==43.0.3 # via # azure-identity # azure-storage-queue # msal # pyjwt -dataclasses-json==0.6.7 \ - --hash=sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a \ - --hash=sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0 +dataclasses-json==0.6.7 # via langchain-community -datasets==3.1.0 \ - --hash=sha256:c92cac049e0f9f85b0dd63739c68e564c657b1624bc2b66b1e13489062832e27 \ - --hash=sha256:dc8808a6d17838fe05e13b39aa7ac3ea0fd0806ed7004eaf4d4eb2c2a356bc61 +datasets==3.1.0 # via ragas -deepeval==0.21.36 \ - --hash=sha256:5447512c6e60ec9840c1c11b48f697470b26c718e729e7d48b97887a5db095a3 \ - --hash=sha256:e1c9fa0a37c74e79eb1c21a98437d04d4be964e9db0cc7ce46d2ff7c190772e6 +deepeval==0.21.36 # via call-center-ai (pyproject.toml) -deprecated==1.2.14 \ - --hash=sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c \ - --hash=sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3 +deprecated==1.2.14 # via # opentelemetry-api # opentelemetry-semantic-conventions -deptry==0.21.0 \ - --hash=sha256:1307ffaeac322f97de0b52c56c13abf887a8d8e1f05acdfd5e3f74409b6cab4e \ - --hash=sha256:168aa4ecfcc95f55723079df9f9c43ba90195c6927e050dec40ec985039d2e6e \ - --hash=sha256:3e527e98edf58a710a946c7764fdbdb68ccd2edcafc87f92291350448907be11 \ - --hash=sha256:45ad8726ea46e16b6ec2af0078d2cdf1296131a0ed05374d7b29a2c70d192910 \ - --hash=sha256:6a72a6ff022a95edb68a1d409cecfce59451ab059270731a672b2ac56026dcd8 \ - --hash=sha256:7e6077b4db23fb7b3f4e384af4f86a0aa28e7a8d136ed133923cd798eb4af76c \ - --hash=sha256:a187bafca2adb1ed6e37fc885d4a25ab60264e47265c5114f1bbb77b8f745259 \ - --hash=sha256:afc278049e4fa30a361eabfb68bee0fbbb55a336826fdf5ea0208ac536b55d10 \ - --hash=sha256:d3bfe6161846749e51985c1068e62bcc8f1fe06cc3070a12fe640388b4152e85 \ - --hash=sha256:d5fea3669fc6e6f0f33d257d2ed002a312a0ab15ef58a35a7e94041bb1aeec4c \ - --hash=sha256:e57cac29f0dfaedd89472a0bc146c4930788a436dbee13ddf5ee23fad7c0246d \ - --hash=sha256:ff94480cb7041b382b8be97c3486d1db9585bf7d5da0707741103929e2cd07bd +deptry==0.21.0 # via call-center-ai (pyproject.toml) -dill==0.3.8 \ - --hash=sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca \ - --hash=sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7 +dill==0.3.8 # via # datasets # multiprocess -distro==1.9.0 \ - --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \ - --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 +distro==1.9.0 # via openai -django-htmlmin==0.11.0 \ - --hash=sha256:e41b2a2157570846645cc636a9bddde8aa3e03f6834a9211e61a17f2ed42b87e +django-htmlmin==0.11.0 # via call-center-ai (pyproject.toml) -dnspython==2.7.0 \ - --hash=sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86 \ - --hash=sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1 +dnspython==2.7.0 # via email-validator -docx2txt==0.8 \ - --hash=sha256:2c06d98d7cfe2d3947e5760a57d924e3ff07745b379c8737723922e7009236e5 +docx2txt==0.8 # via deepeval -email-validator==2.2.0 \ - --hash=sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631 \ - --hash=sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7 +email-validator==2.2.0 # via pydantic -execnet==2.1.1 \ - --hash=sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc \ - --hash=sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3 +execnet==2.1.1 # via pytest-xdist -fastapi==0.115.4 \ - --hash=sha256:0b504a063ffb3cf96a5e27dc1bc32c80ca743a2528574f9cdc77daa2d31b4742 \ - --hash=sha256:db653475586b091cb8b2fec2ac54a680ac6a158e07406e1abae31679e8826349 +fastapi==0.115.4 # via call-center-ai (pyproject.toml) -filelock==3.16.1 \ - --hash=sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0 \ - --hash=sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435 +filelock==3.16.1 # via # datasets # huggingface-hub -fixedint==0.1.6 \ - --hash=sha256:41953193f08cbe984f584d8513c38fe5eea5fbd392257433b2210391c8a21ead \ - --hash=sha256:703005d090499d41ce7ce2ee7eae8f7a5589a81acdc6b79f1728a56495f2c799 \ - --hash=sha256:b8cf9f913735d2904deadda7a6daa9f57100599da1de57a7448ea1be75ae8c9c +fixedint==0.1.6 # via azure-monitor-opentelemetry-exporter -frozenlist==1.5.0 \ - --hash=sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e \ - --hash=sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf \ - --hash=sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6 \ - --hash=sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a \ - --hash=sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d \ - --hash=sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f \ - --hash=sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28 \ - --hash=sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b \ - --hash=sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9 \ - --hash=sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2 \ - --hash=sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec \ - --hash=sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2 \ - --hash=sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c \ - --hash=sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336 \ - --hash=sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4 \ - --hash=sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d \ - --hash=sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b \ - --hash=sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c \ - --hash=sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10 \ - --hash=sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08 \ - --hash=sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942 \ - --hash=sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8 \ - --hash=sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f \ - --hash=sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10 \ - --hash=sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5 \ - --hash=sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6 \ - --hash=sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21 \ - --hash=sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c \ - --hash=sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d \ - --hash=sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923 \ - --hash=sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608 \ - --hash=sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de \ - --hash=sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17 \ - --hash=sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0 \ - --hash=sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f \ - --hash=sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641 \ - --hash=sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c \ - --hash=sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a \ - --hash=sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0 \ - --hash=sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9 \ - --hash=sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab \ - --hash=sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f \ - --hash=sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3 \ - --hash=sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a \ - --hash=sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784 \ - --hash=sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604 \ - --hash=sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d \ - --hash=sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5 \ - --hash=sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03 \ - --hash=sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e \ - --hash=sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953 \ - --hash=sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee \ - --hash=sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d \ - --hash=sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817 \ - --hash=sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3 \ - --hash=sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039 \ - --hash=sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f \ - --hash=sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9 \ - --hash=sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf \ - --hash=sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76 \ - --hash=sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba \ - --hash=sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171 \ - --hash=sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb \ - --hash=sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439 \ - --hash=sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631 \ - --hash=sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972 \ - --hash=sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d \ - --hash=sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869 \ - --hash=sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9 \ - --hash=sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411 \ - --hash=sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723 \ - --hash=sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2 \ - --hash=sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b \ - --hash=sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99 \ - --hash=sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e \ - --hash=sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840 \ - --hash=sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3 \ - --hash=sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb \ - --hash=sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3 \ - --hash=sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0 \ - --hash=sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca \ - --hash=sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45 \ - --hash=sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e \ - --hash=sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f \ - --hash=sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5 \ - --hash=sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307 \ - --hash=sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e \ - --hash=sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2 \ - --hash=sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778 \ - --hash=sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a \ - --hash=sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30 \ - --hash=sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a +frozenlist==1.5.0 # via # aiohttp # aiosignal -fsspec[http]==2024.9.0 \ - --hash=sha256:4b0afb90c2f21832df142f292649035d80b421f60a9e1c027802e5a0da2b04e8 \ - --hash=sha256:a0947d552d8a6efa72cc2c730b12c41d043509156966cca4fb157b0f2a0c574b +fsspec[http]==2024.9.0 # via # datasets # huggingface-hub -gunicorn==23.0.0 \ - --hash=sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d \ - --hash=sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec +gunicorn==23.0.0 # via call-center-ai (pyproject.toml) -h11==0.14.0 \ - --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ - --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 +h11==0.14.0 # via # httpcore # uvicorn -html5lib==1.1 \ - --hash=sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d \ - --hash=sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f +html5lib==1.1 # via django-htmlmin -httpcore==1.0.6 \ - --hash=sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f \ - --hash=sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f +httpcore==1.0.6 # via httpx -httptools==0.6.4 \ - --hash=sha256:0614154d5454c21b6410fdf5262b4a3ddb0f53f1e1721cfd59d55f32138c578a \ - --hash=sha256:0e563e54979e97b6d13f1bbc05a96109923e76b901f786a5eae36e99c01237bd \ - --hash=sha256:16e603a3bff50db08cd578d54f07032ca1631450ceb972c2f834c2b860c28ea2 \ - --hash=sha256:288cd628406cc53f9a541cfaf06041b4c71d751856bab45e3702191f931ccd17 \ - --hash=sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8 \ - --hash=sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3 \ - --hash=sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5 \ - --hash=sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da \ - --hash=sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0 \ - --hash=sha256:40a5ec98d3f49904b9fe36827dcf1aadfef3b89e2bd05b0e35e94f97c2b14721 \ - --hash=sha256:40b0f7fe4fd38e6a507bdb751db0379df1e99120c65fbdc8ee6c1d044897a636 \ - --hash=sha256:40dc6a8e399e15ea525305a2ddba998b0af5caa2566bcd79dcbe8948181eeaff \ - --hash=sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0 \ - --hash=sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071 \ - --hash=sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c \ - --hash=sha256:59e724f8b332319e2875efd360e61ac07f33b492889284a3e05e6d13746876f4 \ - --hash=sha256:69422b7f458c5af875922cdb5bd586cc1f1033295aa9ff63ee196a87519ac8e1 \ - --hash=sha256:703c346571fa50d2e9856a37d7cd9435a25e7fd15e236c397bf224afaa355fe9 \ - --hash=sha256:85071a1e8c2d051b507161f6c3e26155b5c790e4e28d7f236422dbacc2a9cc44 \ - --hash=sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083 \ - --hash=sha256:85797e37e8eeaa5439d33e556662cc370e474445d5fab24dcadc65a8ffb04003 \ - --hash=sha256:90d96a385fa941283ebd231464045187a31ad932ebfa541be8edf5b3c2328959 \ - --hash=sha256:94978a49b8f4569ad607cd4946b759d90b285e39c0d4640c6b36ca7a3ddf2efc \ - --hash=sha256:aafe0f1918ed07b67c1e838f950b1c1fabc683030477e60b335649b8020e1076 \ - --hash=sha256:ab9ba8dcf59de5181f6be44a77458e45a578fc99c31510b8c65b7d5acc3cf490 \ - --hash=sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660 \ - --hash=sha256:b799de31416ecc589ad79dd85a0b2657a8fe39327944998dea368c1d4c9e55e6 \ - --hash=sha256:c26f313951f6e26147833fc923f78f95604bbec812a43e5ee37f26dc9e5a686c \ - --hash=sha256:ca80b7485c76f768a3bc83ea58373f8db7b015551117375e4918e2aa77ea9b50 \ - --hash=sha256:d1ffd262a73d7c28424252381a5b854c19d9de5f56f075445d33919a637e3547 \ - --hash=sha256:d3f0d369e7ffbe59c4b6116a44d6a8eb4783aae027f2c0b366cf0aa964185dba \ - --hash=sha256:d54efd20338ac52ba31e7da78e4a72570cf729fac82bc31ff9199bedf1dc7440 \ - --hash=sha256:dacdd3d10ea1b4ca9df97a0a303cbacafc04b5cd375fa98732678151643d4988 \ - --hash=sha256:db353d22843cf1028f43c3651581e4bb49374d85692a85f95f7b9a130e1b2cab \ - --hash=sha256:db78cb9ca56b59b016e64b6031eda5653be0589dba2b1b43453f6e8b405a0970 \ - --hash=sha256:deee0e3343f98ee8047e9f4c5bc7cedbf69f5734454a94c38ee829fb2d5fa3c1 \ - --hash=sha256:df017d6c780287d5c80601dafa31f17bddb170232d85c066604d8558683711a2 \ - --hash=sha256:df959752a0c2748a65ab5387d08287abf6779ae9165916fe053e68ae1fbdc47f \ - --hash=sha256:ec4f178901fa1834d4a060320d2f3abc5c9e39766953d038f1458cb885f47e81 \ - --hash=sha256:f47f8ed67cc0ff862b84a1189831d1d33c963fb3ce1ee0c65d3b0cbe7b711069 \ - --hash=sha256:f8787367fbdfccae38e35abf7641dafc5310310a5987b689f4c32cc8cc3ee975 \ - --hash=sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f \ - --hash=sha256:fc411e1c0a7dcd2f902c7c48cf079947a7e65b5485dea9decb82b9105ca71a43 +httptools==0.6.4 # via uvicorn -httpx==0.27.2 \ - --hash=sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0 \ - --hash=sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2 +httpx==0.27.2 # via # langsmith # openai -httpx-sse==0.4.0 \ - --hash=sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721 \ - --hash=sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f +httpx-sse==0.4.0 # via langchain-community -huggingface-hub==0.26.2 \ - --hash=sha256:98c2a5a8e786c7b2cb6fdeb2740893cba4d53e312572ed3d8afafda65b128c46 \ - --hash=sha256:b100d853465d965733964d123939ba287da60a547087783ddff8a323f340332b +huggingface-hub==0.26.2 # via datasets -idna==3.10 \ - --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ - --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 +idna==3.10 # via # anyio # email-validator # httpx # requests # yarl -importlib-metadata==8.5.0 \ - --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ - --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 +importlib-metadata==8.5.0 # via # deepeval # opentelemetry-api -iniconfig==2.0.0 \ - --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ - --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 +iniconfig==2.0.0 # via pytest -isodate==0.7.2 \ - --hash=sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15 \ - --hash=sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6 +isodate==0.7.2 # via # azure-ai-translation-text # azure-appconfiguration - # azure-communication-callautomation # azure-eventgrid # azure-search-documents # azure-storage-queue # msrest -jinja2==3.1.4 \ - --hash=sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369 \ - --hash=sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d +jinja2==3.1.4 # via call-center-ai (pyproject.toml) -jiter==0.7.0 \ - --hash=sha256:0cf5d42beb3514236459454e3287db53d9c4d56c4ebaa3e9d0efe81b19495129 \ - --hash=sha256:15cf691ebd8693b70c94627d6b748f01e6d697d9a6e9f2bc310934fcfb7cf25e \ - --hash=sha256:17ecb1a578a56e97a043c72b463776b5ea30343125308f667fb8fce4b3796735 \ - --hash=sha256:189cc4262a92e33c19d4fd24018f5890e4e6da5b2581f0059938877943f8298c \ - --hash=sha256:1d89008fb47043a469f97ad90840b97ba54e7c3d62dc7cbb6cbf938bd0caf71d \ - --hash=sha256:2221d5603c139f6764c54e37e7c6960c469cbcd76928fb10d15023ba5903f94b \ - --hash=sha256:243f38eb4072763c54de95b14ad283610e0cd3bf26393870db04e520f60eebb3 \ - --hash=sha256:24cecd18df540963cd27c08ca5ce1d0179f229ff78066d9eecbe5add29361340 \ - --hash=sha256:2791604acef33da6b72d5ecf885a32384bcaf9aa1e4be32737f3b8b9588eef6a \ - --hash=sha256:2ec05b1615f96cc3e4901678bc863958611584072967d9962f9e571d60711d52 \ - --hash=sha256:3ca7c287da9c1d56dda88da1d08855a787dbb09a7e2bd13c66a2e288700bd7c7 \ - --hash=sha256:41d15ccc53931c822dd7f1aebf09faa3cda2d7b48a76ef304c7dbc19d1302e51 \ - --hash=sha256:43a87a9f586636e1f0dd3651a91f79b491ea0d9fd7cbbf4f5c463eebdc48bda7 \ - --hash=sha256:48592c26ea72d3e71aa4bea0a93454df907d80638c3046bb0705507b6704c0d7 \ - --hash=sha256:4a8e2d866e7eda19f012444e01b55079d8e1c4c30346aaac4b97e80c54e2d6d3 \ - --hash=sha256:571feae3e7c901a8eedde9fd2865b0dfc1432fb15cab8c675a8444f7d11b7c5d \ - --hash=sha256:63ee47a149d698796a87abe445fc8dee21ed880f09469700c76c8d84e0d11efd \ - --hash=sha256:662d5d3cca58ad6af7a3c6226b641c8655de5beebcb686bfde0df0f21421aafa \ - --hash=sha256:6d77449d2738cf74752bb35d75ee431af457e741124d1db5e112890023572c7c \ - --hash=sha256:6e46a63c7f877cf7441ffc821c28287cfb9f533ae6ed707bde15e7d4dfafa7ae \ - --hash=sha256:7417c2b928062c496f381fb0cb50412eee5ad1d8b53dbc0e011ce45bb2de522c \ - --hash=sha256:79fef541199bd91cfe8a74529ecccb8eaf1aca38ad899ea582ebbd4854af1e51 \ - --hash=sha256:7b6045fa0527129218cdcd8a8b839f678219686055f31ebab35f87d354d9c36e \ - --hash=sha256:7ba426fa7ff21cb119fa544b75dd3fbee6a70e55a5829709c0338d07ccd30e6d \ - --hash=sha256:7ea52a8a0ff0229ab2920284079becd2bae0688d432fca94857ece83bb49c541 \ - --hash=sha256:836f03dea312967635233d826f783309b98cfd9ccc76ac776e224cfcef577862 \ - --hash=sha256:897745f230350dcedb8d1ebe53e33568d48ea122c25e6784402b6e4e88169be7 \ - --hash=sha256:8e7a7a00b6f9f18289dd563596f97ecaba6c777501a8ba04bf98e03087bcbc60 \ - --hash=sha256:90443994bbafe134f0b34201dad3ebe1c769f0599004084e046fb249ad912425 \ - --hash=sha256:91cec0ad755bd786c9f769ce8d843af955df6a8e56b17658771b2d5cb34a3ff8 \ - --hash=sha256:979ec4711c2e37ac949561858bd42028884c9799516a923e1ff0b501ef341a4a \ - --hash=sha256:997706c683195eeff192d2e5285ce64d2a610414f37da3a3f2625dcf8517cf90 \ - --hash=sha256:9aaf564094c7db8687f2660605e099f3d3e6ea5e7135498486674fcb78e29165 \ - --hash=sha256:9c62c737b5368e51e74960a08fe1adc807bd270227291daede78db24d5fbf556 \ - --hash=sha256:9dcd54fa422fb66ca398bec296fed5f58e756aa0589496011cfea2abb5be38a5 \ - --hash=sha256:a282e1e8a396dabcea82d64f9d05acf7efcf81ecdd925b967020dcb0e671c103 \ - --hash=sha256:a4d27e09825c1b3c7a667adb500ce8b840e8fc9f630da8454b44cdd4fb0081bb \ - --hash=sha256:a5cb97e35370bde7aa0d232a7f910f5a0fbbc96bc0a7dbaa044fd5cd6bcd7ec3 \ - --hash=sha256:a8203519907a1d81d6cb00902c98e27c2d0bf25ce0323c50ca594d30f5f1fbcf \ - --hash=sha256:a8af4df8a262fa2778b68c2a03b6e9d1cb4d43d02bea6976d46be77a3a331af1 \ - --hash=sha256:a8b16c35c846a323ce9067170d5ab8c31ea3dbcab59c4f7608bbbf20c2c3b43f \ - --hash=sha256:a9d866ec066c3616cacb8535dbda38bb1d470b17b25f0317c4540182bc886ce2 \ - --hash=sha256:abf596f951370c648f37aa9899deab296c42a3829736e598b0dd10b08f77a44d \ - --hash=sha256:ac7930bcaaeb1e229e35c91c04ed2e9f39025b86ee9fc3141706bbf6fff4aeeb \ - --hash=sha256:aca4d950863b1c238e315bf159466e064c98743eef3bd0ff9617e48ff63a4715 \ - --hash=sha256:ae60ec89037a78d60bbf3d8b127f1567769c8fa24886e0abed3f622791dea478 \ - --hash=sha256:b160db0987171365c153e406a45dcab0ee613ae3508a77bfff42515cb4ce4d6e \ - --hash=sha256:b5be919bacd73ca93801c3042bce6e95cb9c555a45ca83617b9b6c89df03b9c2 \ - --hash=sha256:b928c76a422ef3d0c85c5e98c498ce3421b313c5246199541e125b52953e1bc0 \ - --hash=sha256:bd028d4165097a611eb0c7494d8c1f2aebd46f73ca3200f02a175a9c9a6f22f5 \ - --hash=sha256:c061d9738535497b5509f8970584f20de1e900806b239a39a9994fc191dad630 \ - --hash=sha256:c07f55a64912b0c7982377831210836d2ea92b7bd343fca67a32212dd72e38e0 \ - --hash=sha256:c138414839effbf30d185e30475c6dc8a16411a1e3681e5fd4605ab1233ac67a \ - --hash=sha256:c6b487247c7836810091e9455efe56a52ec51bfa3a222237e1587d04d3e04527 \ - --hash=sha256:c9b669ff6f8ba08270dee9ccf858d3b0203b42314a428a1676762f2d390fbb64 \ - --hash=sha256:c9e82daaa1b0a68704f9029b81e664a5a9de3e466c2cbaabcda5875f961702e7 \ - --hash=sha256:cb316dacaf48c8c187cea75d0d7f835f299137e6fdd13f691dff8f92914015c7 \ - --hash=sha256:cc5190ea1113ee6f7252fa8a5fe5a6515422e378356c950a03bbde5cafbdbaab \ - --hash=sha256:cc989951f73f9375b8eacd571baaa057f3d7d11b7ce6f67b9d54642e7475bfad \ - --hash=sha256:d1c8d91e0f0bd78602eaa081332e8ee4f512c000716f5bc54e9a037306d693a7 \ - --hash=sha256:d1ef6bb66041f2514739240568136c81b9dcc64fd14a43691c17ea793b6535c0 \ - --hash=sha256:d41b46236b90b043cca73785674c23d2a67d16f226394079d0953f94e765ed76 \ - --hash=sha256:db19a6d160f093cbc8cd5ea2abad420b686f6c0e5fb4f7b41941ebc6a4f83cda \ - --hash=sha256:db7a8d99fc5f842f7d2852f06ccaed066532292c41723e5dff670c339b649f88 \ - --hash=sha256:e14027f61101b3f5e173095d9ecf95c1cac03ffe45a849279bde1d97e559e314 \ - --hash=sha256:e4640722b1bef0f6e342fe4606aafaae0eb4f4be5c84355bb6867f34400f6688 \ - --hash=sha256:e6d28a92f28814e1a9f2824dc11f4e17e1df1f44dc4fdeb94c5450d34bcb2602 \ - --hash=sha256:ebc30ae2ce4bc4986e1764c404b4ea1924f926abf02ce92516485098f8545374 \ - --hash=sha256:ed27b2c43e1b5f6c7fedc5c11d4d8bfa627de42d1143d87e39e2e83ddefd861a \ - --hash=sha256:f367488c3b9453eab285424c61098faa1cab37bb49425e69c8dca34f2dfe7d69 \ - --hash=sha256:f9abf464f9faac652542ce8360cea8e68fba2b78350e8a170248f9bcc228702a \ - --hash=sha256:feba70a28a27d962e353e978dbb6afd798e711c04cb0b4c5e77e9d3779033a1a \ - --hash=sha256:febf3179b2fabf71fbd2fd52acb8594163bb173348b388649567a548f356dbf6 +jiter==0.7.1 # via openai -json-repair==0.30.1 \ - --hash=sha256:5f075c4e3b098d78fb6cd60c34aec07a4517f14e9d423ad5364214b0e870e218 \ - --hash=sha256:6fa8a05d246e282df2f812fa542bd837d671d7774eaae11191aabaac97d41e33 +json-repair==0.30.1 # via call-center-ai (pyproject.toml) -jsonpatch==1.33 \ - --hash=sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade \ - --hash=sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c +jsonpatch==1.33 # via langchain-core -jsonpointer==3.0.0 \ - --hash=sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942 \ - --hash=sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef +jsonpointer==3.0.0 # via jsonpatch -langchain==0.3.7 \ - --hash=sha256:2e4f83bf794ba38562f7ba0ede8171d7e28a583c0cec6f8595cfe72147d336b2 \ - --hash=sha256:cf4af1d5751dacdc278df3de1ff3cbbd8ca7eb55d39deadccdd7fb3d3ee02ac0 +langchain==0.3.7 # via # deepeval # langchain-community # ragas -langchain-community==0.3.5 \ - --hash=sha256:03736105700960fa0acbd72bff678d1c97c49e38e9f8af3012b712d64e992982 \ - --hash=sha256:345febbc972a08c97f09cce6cc07d039aa7d1348fe8efdace85335be6ac9cb7d +langchain-community==0.3.5 # via ragas -langchain-core==0.3.15 \ - --hash=sha256:3d4ca6dbb8ed396a6ee061063832a2451b0ce8c345570f7b086ffa7288e4fa29 \ - --hash=sha256:b1a29787a4ffb7ec2103b4e97d435287201da7809b369740dd1e32f176325aba +langchain-core==0.3.15 # via # deepeval # langchain @@ -978,297 +226,65 @@ langchain-core==0.3.15 \ # langchain-openai # langchain-text-splitters # ragas -langchain-openai==0.2.6 \ - --hash=sha256:7054e5f64498ad8e59d77cdc210103f5ea4f67258997edc48ae237298adeb316 \ - --hash=sha256:d56e4d9183bdd1a5fb5f3ed9d287f15108e01d631ded170dd330a566f2927b95 +langchain-openai==0.2.6 # via # deepeval # ragas -langchain-text-splitters==0.3.2 \ - --hash=sha256:0db28c53f41d1bc024cdb3b1646741f6d46d5371e90f31e7e7c9fbe75d01c726 \ - --hash=sha256:81e6515d9901d6dd8e35fb31ccd4f30f76d44b771890c789dc835ef9f16204df +langchain-text-splitters==0.3.2 # via langchain -langsmith==0.1.142 \ - --hash=sha256:f639ca23c9a0bb77af5fb881679b2f66ff1f21f19d0bebf4e51375e7585a8b38 \ - --hash=sha256:f8a84d100f3052233ff0a1d66ae14c5dfc20b7e41a1601de011384f16ee6cb82 +langsmith==0.1.142 # via # langchain # langchain-community # langchain-core -markdown-it-py==3.0.0 \ - --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ - --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb +markdown-it-py==3.0.0 # via rich -markupsafe==3.0.2 \ - --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ - --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ - --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ - --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ - --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ - --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ - --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ - --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ - --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ - --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ - --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ - --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ - --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ - --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ - --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ - --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ - --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ - --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ - --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ - --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ - --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ - --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ - --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ - --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ - --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ - --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ - --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ - --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ - --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ - --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ - --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ - --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ - --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ - --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ - --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ - --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ - --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ - --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ - --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ - --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ - --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ - --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ - --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ - --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ - --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ - --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ - --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ - --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ - --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ - --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ - --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ - --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ - --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ - --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ - --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ - --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ - --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ - --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ - --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ - --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ - --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 +markupsafe==3.0.2 # via jinja2 -marshmallow==3.23.1 \ - --hash=sha256:3a8dfda6edd8dcdbf216c0ede1d1e78d230a6dc9c5a088f58c4083b974a0d468 \ - --hash=sha256:fece2eb2c941180ea1b7fcbd4a83c51bfdd50093fdd3ad2585ee5e1df2508491 +marshmallow==3.23.1 # via dataclasses-json -mdurl==0.1.2 \ - --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ - --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +mdurl==0.1.2 # via markdown-it-py -mistune==3.0.2 \ - --hash=sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205 \ - --hash=sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8 +mistune==3.0.2 # via call-center-ai (pyproject.toml) -msal==1.31.0 \ - --hash=sha256:2c4f189cf9cc8f00c80045f66d39b7c0f3ed45873fd3d1f2af9f22db2e12ff4b \ - --hash=sha256:96bc37cff82ebe4b160d5fc0f1196f6ca8b50e274ecd0ec5bf69c438514086e7 +msal==1.31.0 # via # azure-identity # msal-extensions -msal-extensions==1.2.0 \ - --hash=sha256:6f41b320bfd2933d631a215c91ca0dd3e67d84bd1a2f50ce917d5874ec646bef \ - --hash=sha256:cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d +msal-extensions==1.2.0 # via azure-identity -msrest==0.7.1 \ - --hash=sha256:21120a810e1233e5e6cc7fe40b474eeb4ec6f757a15d7cf86702c369f9567c32 \ - --hash=sha256:6e7661f46f3afd88b75667b7187a92829924446c7ea1d169be8c4bb7eeb788b9 +msrest==0.7.1 # via + # azure-communication-callautomation # azure-communication-sms # azure-monitor-opentelemetry-exporter -multidict==6.1.0 \ - --hash=sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f \ - --hash=sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056 \ - --hash=sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761 \ - --hash=sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3 \ - --hash=sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b \ - --hash=sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6 \ - --hash=sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748 \ - --hash=sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966 \ - --hash=sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f \ - --hash=sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1 \ - --hash=sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6 \ - --hash=sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada \ - --hash=sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305 \ - --hash=sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2 \ - --hash=sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d \ - --hash=sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a \ - --hash=sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef \ - --hash=sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c \ - --hash=sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb \ - --hash=sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60 \ - --hash=sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6 \ - --hash=sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4 \ - --hash=sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478 \ - --hash=sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81 \ - --hash=sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7 \ - --hash=sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56 \ - --hash=sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3 \ - --hash=sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6 \ - --hash=sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30 \ - --hash=sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb \ - --hash=sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506 \ - --hash=sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0 \ - --hash=sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925 \ - --hash=sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c \ - --hash=sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6 \ - --hash=sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e \ - --hash=sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95 \ - --hash=sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2 \ - --hash=sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133 \ - --hash=sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2 \ - --hash=sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa \ - --hash=sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3 \ - --hash=sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3 \ - --hash=sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436 \ - --hash=sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657 \ - --hash=sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581 \ - --hash=sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492 \ - --hash=sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43 \ - --hash=sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2 \ - --hash=sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2 \ - --hash=sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926 \ - --hash=sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057 \ - --hash=sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc \ - --hash=sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80 \ - --hash=sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255 \ - --hash=sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1 \ - --hash=sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972 \ - --hash=sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53 \ - --hash=sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1 \ - --hash=sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423 \ - --hash=sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a \ - --hash=sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160 \ - --hash=sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c \ - --hash=sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd \ - --hash=sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa \ - --hash=sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5 \ - --hash=sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b \ - --hash=sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa \ - --hash=sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef \ - --hash=sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44 \ - --hash=sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4 \ - --hash=sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156 \ - --hash=sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753 \ - --hash=sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28 \ - --hash=sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d \ - --hash=sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a \ - --hash=sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304 \ - --hash=sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008 \ - --hash=sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429 \ - --hash=sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72 \ - --hash=sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399 \ - --hash=sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3 \ - --hash=sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392 \ - --hash=sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167 \ - --hash=sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c \ - --hash=sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774 \ - --hash=sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351 \ - --hash=sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76 \ - --hash=sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875 \ - --hash=sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd \ - --hash=sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28 \ - --hash=sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db +multidict==6.1.0 # via # aiohttp # yarl -multiprocess==0.70.16 \ - --hash=sha256:0dfd078c306e08d46d7a8d06fb120313d87aa43af60d66da43ffff40b44d2f41 \ - --hash=sha256:161af703d4652a0e1410be6abccecde4a7ddffd19341be0a7011b94aeb171ac1 \ - --hash=sha256:37b55f71c07e2d741374998c043b9520b626a8dddc8b3129222ca4f1a06ef67a \ - --hash=sha256:476887be10e2f59ff183c006af746cb6f1fd0eadcfd4ef49e605cbe2659920ee \ - --hash=sha256:a0bafd3ae1b732eac64be2e72038231c1ba97724b60b09400d68f229fcc2fbf3 \ - --hash=sha256:a71d82033454891091a226dfc319d0cfa8019a4e888ef9ca910372a446de4435 \ - --hash=sha256:af4cabb0dac72abfb1e794fa7855c325fd2b55a10a44628a3c1ad3311c04127a \ - --hash=sha256:ba8c31889abf4511c7308a8c52bb4a30b9d590e7f58523302ba00237702ca054 \ - --hash=sha256:c4a9944c67bd49f823687463660a2d6daae94c289adff97e0f9d696ba6371d02 \ - --hash=sha256:d951bed82c8f73929ac82c61f01a7b5ce8f3e5ef40f5b52553b4f547ce2b08ec \ - --hash=sha256:e7b9d0f307cd9bd50851afaac0dba2cb6c44449efff697df7c7645f7d3f2be3a \ - --hash=sha256:fc0544c531920dde3b00c29863377f87e1632601092ea2daca74e4beb40faa2e +multiprocess==0.70.16 # via datasets -mypy-extensions==1.0.0 \ - --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ - --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 +mypy-extensions==1.0.0 # via typing-inspect -nest-asyncio==1.6.0 \ - --hash=sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe \ - --hash=sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c +nest-asyncio==1.6.0 # via ragas -nodeenv==1.9.1 \ - --hash=sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f \ - --hash=sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9 +nodeenv==1.9.1 # via pyright -numpy==1.26.4 \ - --hash=sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b \ - --hash=sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818 \ - --hash=sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20 \ - --hash=sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0 \ - --hash=sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010 \ - --hash=sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a \ - --hash=sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea \ - --hash=sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c \ - --hash=sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71 \ - --hash=sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110 \ - --hash=sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be \ - --hash=sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a \ - --hash=sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a \ - --hash=sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5 \ - --hash=sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed \ - --hash=sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd \ - --hash=sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c \ - --hash=sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e \ - --hash=sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0 \ - --hash=sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c \ - --hash=sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a \ - --hash=sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b \ - --hash=sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0 \ - --hash=sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6 \ - --hash=sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2 \ - --hash=sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a \ - --hash=sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30 \ - --hash=sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218 \ - --hash=sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5 \ - --hash=sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07 \ - --hash=sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2 \ - --hash=sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4 \ - --hash=sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764 \ - --hash=sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef \ - --hash=sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3 \ - --hash=sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f +numpy==1.26.4 # via # datasets # langchain # langchain-community # pandas # ragas -oauthlib==3.2.2 \ - --hash=sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca \ - --hash=sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918 +oauthlib==3.2.2 # via requests-oauthlib -openai==1.54.3 \ - --hash=sha256:7511b74eeb894ac0b0253dc71f087a15d2e4d71d22d0088767205143d880cca6 \ - --hash=sha256:f18dbaf09c50d70c4185b892a2a553f80681d1d866323a2da7f7be2f688615d5 +openai==1.54.3 # via # call-center-ai (pyproject.toml) # langchain-openai # ragas -opentelemetry-api==1.28.1 \ - --hash=sha256:6fa7295a12c707f5aebef82da3d9ec5afe6992f3e42bfe7bec0339a44b3518e7 \ - --hash=sha256:bfe86c95576cf19a914497f439fd79c9553a38de0adbdc26f7cfc46b0c00b16c +opentelemetry-api==1.28.1 # via # azure-core-tracing-opentelemetry # azure-monitor-opentelemetry-exporter @@ -1290,9 +306,7 @@ opentelemetry-api==1.28.1 \ # opentelemetry-instrumentation-wsgi # opentelemetry-sdk # opentelemetry-semantic-conventions -opentelemetry-instrumentation==0.49b1 \ - --hash=sha256:0a9d3821736104013693ef3b8a9d29b41f2f3a81ee2d8c9288b52d62bae5747c \ - --hash=sha256:2d0e41181b7957ba061bb436b969ad90545ac3eba65f290830009b4264d2824e +opentelemetry-instrumentation==0.49b1 # via # opentelemetry-instrumentation-aiohttp-client # opentelemetry-instrumentation-asgi @@ -1309,84 +323,48 @@ opentelemetry-instrumentation==0.49b1 \ # opentelemetry-instrumentation-urllib # opentelemetry-instrumentation-urllib3 # opentelemetry-instrumentation-wsgi -opentelemetry-instrumentation-aiohttp-client==0.49b1 \ - --hash=sha256:91692efba6cb1ac532745308bc374dfbeda7f95fcf953cbdc51062b38c49eb04 \ - --hash=sha256:b94c70c109e45fafd4be752f0186d08ede92023fe1352dc043f796347521c672 +opentelemetry-instrumentation-aiohttp-client==0.49b1 # via call-center-ai (pyproject.toml) -opentelemetry-instrumentation-asgi==0.49b1 \ - --hash=sha256:8dcbc438cb138789fcb20ae38b6e7f23088e066d77b54bae205c5744856603c6 \ - --hash=sha256:d1a2b4cb76490be28bcad3c0f562c4b3c84157148c922ca298bb04ed9e36c005 +opentelemetry-instrumentation-asgi==0.49b1 # via opentelemetry-instrumentation-fastapi -opentelemetry-instrumentation-dbapi==0.49b1 \ - --hash=sha256:aa19a0dc96a127b155778b7c3aa58d1db100e3c1b4be2b61cd7aa318af9079cd \ - --hash=sha256:ff4fc87f6b6a8fd40bb383efabcdb94078ff6fc7e8f8bf1c501256fb4e8064ed +opentelemetry-instrumentation-dbapi==0.49b1 # via # opentelemetry-instrumentation-psycopg2 # opentelemetry-instrumentation-sqlite3 -opentelemetry-instrumentation-django==0.49b1 \ - --hash=sha256:4a997d1c18d7e81e28d2b7041223c30dc8a60dbc572ade2a20a048fbdc5bbae9 \ - --hash=sha256:79795c46061a298556ae023a71ae47ea2c8c8f715266b0f1dba9f3d7f7018785 +opentelemetry-instrumentation-django==0.49b1 # via azure-monitor-opentelemetry -opentelemetry-instrumentation-fastapi==0.49b1 \ - --hash=sha256:13d9d4d70b4bb831468b8e40807353731cad7fbfaeedde0070d93bcb2c417b07 \ - --hash=sha256:3398940102c8ef613b9c55fc4f179cc92413de456f6bec6eeb1995270de2b087 +opentelemetry-instrumentation-fastapi==0.49b1 # via azure-monitor-opentelemetry -opentelemetry-instrumentation-flask==0.49b1 \ - --hash=sha256:97a91f1539fb841f774fd3e9545b0f11707e4b7d48083aa51e27fb6d527615dc \ - --hash=sha256:e3abb8aaccb86372bfddaa894fa9b4c6cc8c1ac2e023e0bb64c97f07d9df3d28 +opentelemetry-instrumentation-flask==0.49b1 # via azure-monitor-opentelemetry -opentelemetry-instrumentation-httpx==0.49b1 \ - --hash=sha256:7c620c6dd8e5fecddc5a8bb5f5cc1c4c758a031b13703e75cbb8e5abdd4297de \ - --hash=sha256:82285093b68bf0dc89e424f4c201c9524f0d29b9ba326fb0993721e358617710 +opentelemetry-instrumentation-httpx==0.49b1 # via call-center-ai (pyproject.toml) -opentelemetry-instrumentation-openai==0.33.11 \ - --hash=sha256:9289f8c4e0989fae95549840d45f797a1269899b5d4264bdf0be356b8f7c3f7e \ - --hash=sha256:bacb7fb8facb2c45076437c5b3e526fda486db3b76edbb01b18e4e133b70eed0 +opentelemetry-instrumentation-openai==0.33.11 # via call-center-ai (pyproject.toml) -opentelemetry-instrumentation-psycopg2==0.49b1 \ - --hash=sha256:6472cd8cea96f14c979a3a7b799f8d3cc7ebb615bcd2a725a6f82eeda0b71d55 \ - --hash=sha256:de986a39f98d86a4193ed1b69f744333daae28d9706eeb7408fddebebad836d7 +opentelemetry-instrumentation-psycopg2==0.49b1 # via azure-monitor-opentelemetry -opentelemetry-instrumentation-redis==0.49b1 \ - --hash=sha256:3aa468ac87b15e4877c5d1d241e4b227bfdb61221bcbef20d73659bffb837fac \ - --hash=sha256:99031026a65c86bdfc5498775186b73178246a0c69f5f7189abcddb7b2e71654 +opentelemetry-instrumentation-redis==0.49b1 # via call-center-ai (pyproject.toml) -opentelemetry-instrumentation-requests==0.49b1 \ - --hash=sha256:329726afd607e1078e80bc2fb43741bd73e77c2d36804d9250d965858df8bd36 \ - --hash=sha256:4a7f8321f9cca5b4da3a96b63dde0c7a41775302f4e9e0267a775f9800efac59 +opentelemetry-instrumentation-requests==0.49b1 # via azure-monitor-opentelemetry -opentelemetry-instrumentation-sqlite3==0.49b1 \ - --hash=sha256:635338d78bb83c542e44e8c0a7d0eb5a0f23f047eccd443b14914f2440b181d8 \ - --hash=sha256:7e359dec019bd06cdf0aef3a87689301a961ae04b5bff0f7a4e3eb30b6d184f6 +opentelemetry-instrumentation-sqlite3==0.49b1 # via call-center-ai (pyproject.toml) -opentelemetry-instrumentation-urllib==0.49b1 \ - --hash=sha256:0baf74dc2ca613d6d78751f303cc0855580fca166082610e57eed3dc374ca8fb \ - --hash=sha256:8cba9b9da5071ef4e305a43b12d482dd11d6c9a9807242cfafce31b1aed0d4e8 +opentelemetry-instrumentation-urllib==0.49b1 # via azure-monitor-opentelemetry -opentelemetry-instrumentation-urllib3==0.49b1 \ - --hash=sha256:731b79158e21bf1cf8c88fb1b1acba8776ebec9d86a364f72c889fc83aafc12c \ - --hash=sha256:bdf43b010ee1f2ff4a1db3a31ea4eaff74012f987e2f9ad1ffdbf83888d3a8d7 +opentelemetry-instrumentation-urllib3==0.49b1 # via azure-monitor-opentelemetry -opentelemetry-instrumentation-wsgi==0.49b1 \ - --hash=sha256:6ab07115dc5c38f9c5b368e1ae4d9741cddeeef857ad01b211ee314a72ffdbea \ - --hash=sha256:e1dd9a6e10b0a4baa1afd17c75b0836f9e3fd1d40c3d0d5287e898d49436ac34 +opentelemetry-instrumentation-wsgi==0.49b1 # via # opentelemetry-instrumentation-django # opentelemetry-instrumentation-flask -opentelemetry-resource-detector-azure==0.1.5 \ - --hash=sha256:4dcc5d54ab5c3b11226af39509bc98979a8b9e0f8a24c1b888783755d3bf00eb \ - --hash=sha256:e0ba658a87c69eebc806e75398cd0e9f68a8898ea62de99bc1b7083136403710 +opentelemetry-resource-detector-azure==0.1.5 # via azure-monitor-opentelemetry -opentelemetry-sdk==1.28.1 \ - --hash=sha256:100fa371b2046ffba6a340c18f0b2a0463acad7461e5177e126693b613a6ca57 \ - --hash=sha256:72aad7f5fcbe37113c4ab4899f6cdeb6ac77ed3e62f25a85e3627b12583dad0f +opentelemetry-sdk==1.28.1 # via # azure-monitor-opentelemetry # azure-monitor-opentelemetry-exporter # opentelemetry-resource-detector-azure -opentelemetry-semantic-conventions==0.49b1 \ - --hash=sha256:91817883b159ffb94c2ca9548509c4fe0aafce7c24f437aa6ac3fc613aa9a758 \ - --hash=sha256:dd6f3ac8169d2198c752e1a63f827e5f5e110ae9b0ce33f2aad9a3baf0739743 +opentelemetry-semantic-conventions==0.49b1 # via # call-center-ai (pyproject.toml) # opentelemetry-instrumentation @@ -1404,13 +382,9 @@ opentelemetry-semantic-conventions==0.49b1 \ # opentelemetry-instrumentation-urllib3 # opentelemetry-instrumentation-wsgi # opentelemetry-sdk -opentelemetry-semantic-conventions-ai==0.4.2 \ - --hash=sha256:0a5432aacd441eb7dbdf62e0de3f3d90ed4f69595b687a6dd2ccc4c5b94c5861 \ - --hash=sha256:90b969c7d838e03e30a9150ffe46543d8e58e9d7370c7221fd30d4ce4d7a1b96 +opentelemetry-semantic-conventions-ai==0.4.2 # via opentelemetry-instrumentation-openai -opentelemetry-util-http==0.49b1 \ - --hash=sha256:0290b942f7888b6310df6803e52e12f4043b8f224db0659f62dc7b70059eb94f \ - --hash=sha256:6c2bc6f7e20e286dbdfcccb9d895fa290ec9d7c596cdf2e06bf1d8e434b2edd0 +opentelemetry-util-http==0.49b1 # via # opentelemetry-instrumentation-aiohttp-client # opentelemetry-instrumentation-asgi @@ -1422,69 +396,9 @@ opentelemetry-util-http==0.49b1 \ # opentelemetry-instrumentation-urllib # opentelemetry-instrumentation-urllib3 # opentelemetry-instrumentation-wsgi -orjson==3.10.11 \ - --hash=sha256:03246774131701de8e7059b2e382597da43144a9a7400f178b2a32feafc54bd5 \ - --hash=sha256:0efabbf839388a1dab5b72b5d3baedbd6039ac83f3b55736eb9934ea5494d258 \ - --hash=sha256:10f416b2a017c8bd17f325fb9dee1fb5cdd7a54e814284896b7c3f2763faa017 \ - --hash=sha256:1444f9cb7c14055d595de1036f74ecd6ce15f04a715e73f33bb6326c9cef01b6 \ - --hash=sha256:1789d9db7968d805f3d94aae2c25d04014aae3a2fa65b1443117cd462c6da647 \ - --hash=sha256:19b3763e8bbf8ad797df6b6b5e0fc7c843ec2e2fc0621398534e0c6400098f87 \ - --hash=sha256:1a1222ffcee8a09476bbdd5d4f6f33d06d0d6642df2a3d78b7a195ca880d669b \ - --hash=sha256:1be83a13312e5e58d633580c5eb8d0495ae61f180da2722f20562974188af205 \ - --hash=sha256:1f39728c7f7d766f1f5a769ce4d54b5aaa4c3f92d5b84817053cc9995b977acc \ - --hash=sha256:360a4e2c0943da7c21505e47cf6bd725588962ff1d739b99b14e2f7f3545ba51 \ - --hash=sha256:461311b693d3d0a060439aa669c74f3603264d4e7a08faa68c47ae5a863f352d \ - --hash=sha256:496e2cb45de21c369079ef2d662670a4892c81573bcc143c4205cae98282ba97 \ - --hash=sha256:4bfb30c891b530f3f80e801e3ad82ef150b964e5c38e1fb8482441c69c35c61c \ - --hash=sha256:4d83f87582d223e54efb2242a79547611ba4ebae3af8bae1e80fa9a0af83bb7f \ - --hash=sha256:4eed32f33a0ea6ef36ccc1d37f8d17f28a1d6e8eefae5928f76aff8f1df85e67 \ - --hash=sha256:51f3382415747e0dbda9dade6f1e1a01a9d37f630d8c9049a8ed0e385b7a90c0 \ - --hash=sha256:52ca832f17d86a78cbab86cdc25f8c13756ebe182b6fc1a97d534051c18a08de \ - --hash=sha256:52e5834d7d6e58a36846e059d00559cb9ed20410664f3ad156cd2cc239a11230 \ - --hash=sha256:5576b1e5a53a5ba8f8df81872bb0878a112b3ebb1d392155f00f54dd86c83ff6 \ - --hash=sha256:63fc9d5fe1d4e8868f6aae547a7b8ba0a2e592929245fff61d633f4caccdcdd6 \ - --hash=sha256:655a493bac606655db9a47fe94d3d84fc7f3ad766d894197c94ccf0c5408e7d3 \ - --hash=sha256:65cd3e3bb4fbb4eddc3c1e8dce10dc0b73e808fcb875f9fab40c81903dd9323e \ - --hash=sha256:677f23e32491520eebb19c99bb34675daf5410c449c13416f7f0d93e2cf5f981 \ - --hash=sha256:6dade64687f2bd7c090281652fe18f1151292d567a9302b34c2dbb92a3872f1f \ - --hash=sha256:6f67c570602300c4befbda12d153113b8974a3340fdcf3d6de095ede86c06d92 \ - --hash=sha256:705f03cee0cb797256d54de6695ef219e5bc8c8120b6654dd460848d57a9af3d \ - --hash=sha256:77b0fed6f209d76c1c39f032a70df2d7acf24b1812ca3e6078fd04e8972685a3 \ - --hash=sha256:7dfa8db55c9792d53c5952900c6a919cfa377b4f4534c7a786484a6a4a350c19 \ - --hash=sha256:80c00d4acded0c51c98754fe8218cb49cb854f0f7eb39ea4641b7f71732d2cb7 \ - --hash=sha256:80df27dd8697242b904f4ea54820e2d98d3f51f91e97e358fc13359721233e4b \ - --hash=sha256:82f07c550a6ccd2b9290849b22316a609023ed851a87ea888c0456485a7d196a \ - --hash=sha256:86b9dd983857970c29e4c71bb3e95ff085c07d3e83e7c46ebe959bac07ebd80b \ - --hash=sha256:8b5759063a6c940a69c728ea70d7c33583991c6982915a839c8da5f957e0103a \ - --hash=sha256:96ed1de70fcb15d5fed529a656df29f768187628727ee2788344e8a51e1c1350 \ - --hash=sha256:9fd0ad1c129bc9beb1154c2655f177620b5beaf9a11e0d10bac63ef3fce96950 \ - --hash=sha256:a11225d7b30468dcb099498296ffac36b4673a8398ca30fdaec1e6c20df6aa55 \ - --hash=sha256:a2fc947e5350fdce548bfc94f434e8760d5cafa97fb9c495d2fef6757aa02ec0 \ - --hash=sha256:a3f29634260708c200c4fe148e42b4aae97d7b9fee417fbdd74f8cfc265f15b0 \ - --hash=sha256:afacfd1ab81f46dedd7f6001b6d4e8de23396e4884cd3c3436bd05defb1a6446 \ - --hash=sha256:b592597fe551d518f42c5a2eb07422eb475aa8cfdc8c51e6da7054b836b26782 \ - --hash=sha256:b7fcfc6f7ca046383fb954ba528587e0f9336828b568282b27579c49f8e16aad \ - --hash=sha256:b9546b278c9fb5d45380f4809e11b4dd9844ca7aaf1134024503e134ed226161 \ - --hash=sha256:bc274ac261cc69260913b2d1610760e55d3c0801bb3457ba7b9004420b6b4270 \ - --hash=sha256:bd9a187742d3ead9df2e49240234d728c67c356516cf4db018833a86f20ec18c \ - --hash=sha256:c46294faa4e4d0eb73ab68f1a794d2cbf7bab33b1dda2ac2959ffb7c61591899 \ - --hash=sha256:c95f2ecafe709b4e5c733b5e2768ac569bed308623c85806c395d9cca00e08af \ - --hash=sha256:cb4d0bea56bba596723d73f074c420aec3b2e5d7d30698bc56e6048066bd560c \ - --hash=sha256:cdec57fe3b4bdebcc08a946db3365630332dbe575125ff3d80a3272ebd0ddafe \ - --hash=sha256:d496c74fc2b61341e3cefda7eec21b7854c5f672ee350bc55d9a4997a8a95204 \ - --hash=sha256:d4a62c49c506d4d73f59514986cadebb7e8d186ad510c518f439176cf8d5359d \ - --hash=sha256:df8c677df2f9f385fcc85ab859704045fa88d4668bc9991a527c86e710392bec \ - --hash=sha256:dfbb2d460a855c9744bbc8e36f9c3a997c4b27d842f3d5559ed54326e6911f9b \ - --hash=sha256:e2f3b7c5803138e67028dde33450e054c87e0703afbe730c105f1fcd873496d5 \ - --hash=sha256:e35b6d730de6384d5b2dab5fd23f0d76fae8bbc8c353c2f78210aa5fa4beb3ef \ - --hash=sha256:f1eec3421a558ff7a9b010a6c7effcfa0ade65327a71bb9b02a1c3b77a247284 \ - --hash=sha256:f35a1b9f50a219f470e0e497ca30b285c9f34948d3c8160d5ad3a755d9299433 \ - --hash=sha256:f4c57ea78a753812f528178aa2f1c57da633754c91d2124cb28991dab4c79a54 \ - --hash=sha256:f91d9eb554310472bd09f5347950b24442600594c2edc1421403d7610a0998fd +orjson==3.10.11 # via langsmith -packaging==24.2 \ - --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \ - --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f +packaging==24.2 # via # build # datasets @@ -1497,305 +411,33 @@ packaging==24.2 \ # opentelemetry-instrumentation-flask # pytest # requirements-parser -pandas==2.2.3 \ - --hash=sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a \ - --hash=sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d \ - --hash=sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5 \ - --hash=sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4 \ - --hash=sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0 \ - --hash=sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32 \ - --hash=sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea \ - --hash=sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28 \ - --hash=sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f \ - --hash=sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348 \ - --hash=sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18 \ - --hash=sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468 \ - --hash=sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5 \ - --hash=sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e \ - --hash=sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667 \ - --hash=sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645 \ - --hash=sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13 \ - --hash=sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30 \ - --hash=sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3 \ - --hash=sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d \ - --hash=sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb \ - --hash=sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3 \ - --hash=sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039 \ - --hash=sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8 \ - --hash=sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd \ - --hash=sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761 \ - --hash=sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659 \ - --hash=sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57 \ - --hash=sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c \ - --hash=sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c \ - --hash=sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4 \ - --hash=sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a \ - --hash=sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9 \ - --hash=sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42 \ - --hash=sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2 \ - --hash=sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39 \ - --hash=sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc \ - --hash=sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698 \ - --hash=sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed \ - --hash=sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015 \ - --hash=sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24 \ - --hash=sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319 +pandas==2.2.3 # via datasets -phonenumbers==8.13.49 \ - --hash=sha256:e17140955ab3d8f9580727372ea64c5ada5327932d6021ef6fd203c3db8c8139 \ - --hash=sha256:e608ccb61f0bd42e6db1d2c421f7c22186b88f494870bf40aa31d1a2718ab0ae +phonenumbers==8.13.49 # via call-center-ai (pyproject.toml) -pip-tools==7.4.1 \ - --hash=sha256:4c690e5fbae2f21e87843e89c26191f0d9454f362d8acdbd695716493ec8b3a9 \ - --hash=sha256:864826f5073864450e24dbeeb85ce3920cdfb09848a3d69ebf537b521f14bcc9 +pip-tools==7.4.1 # via call-center-ai (pyproject.toml) -pluggy==1.5.0 \ - --hash=sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1 \ - --hash=sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669 +pluggy==1.5.0 # via pytest -portalocker==2.10.1 \ - --hash=sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf \ - --hash=sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f +portalocker==2.10.1 # via # deepeval # msal-extensions -propcache==0.2.0 \ - --hash=sha256:00181262b17e517df2cd85656fcd6b4e70946fe62cd625b9d74ac9977b64d8d9 \ - --hash=sha256:0e53cb83fdd61cbd67202735e6a6687a7b491c8742dfc39c9e01e80354956763 \ - --hash=sha256:1235c01ddaa80da8235741e80815ce381c5267f96cc49b1477fdcf8c047ef325 \ - --hash=sha256:140fbf08ab3588b3468932974a9331aff43c0ab8a2ec2c608b6d7d1756dbb6cb \ - --hash=sha256:191db28dc6dcd29d1a3e063c3be0b40688ed76434622c53a284e5427565bbd9b \ - --hash=sha256:1e41d67757ff4fbc8ef2af99b338bfb955010444b92929e9e55a6d4dcc3c4f09 \ - --hash=sha256:1ec43d76b9677637a89d6ab86e1fef70d739217fefa208c65352ecf0282be957 \ - --hash=sha256:20a617c776f520c3875cf4511e0d1db847a076d720714ae35ffe0df3e440be68 \ - --hash=sha256:218db2a3c297a3768c11a34812e63b3ac1c3234c3a086def9c0fee50d35add1f \ - --hash=sha256:22aa8f2272d81d9317ff5756bb108021a056805ce63dd3630e27d042c8092798 \ - --hash=sha256:25a1f88b471b3bc911d18b935ecb7115dff3a192b6fef46f0bfaf71ff4f12418 \ - --hash=sha256:25c8d773a62ce0451b020c7b29a35cfbc05de8b291163a7a0f3b7904f27253e6 \ - --hash=sha256:2a60ad3e2553a74168d275a0ef35e8c0a965448ffbc3b300ab3a5bb9956c2162 \ - --hash=sha256:2a66df3d4992bc1d725b9aa803e8c5a66c010c65c741ad901e260ece77f58d2f \ - --hash=sha256:2ccc28197af5313706511fab3a8b66dcd6da067a1331372c82ea1cb74285e036 \ - --hash=sha256:2e900bad2a8456d00a113cad8c13343f3b1f327534e3589acc2219729237a2e8 \ - --hash=sha256:2ee7606193fb267be4b2e3b32714f2d58cad27217638db98a60f9efb5efeccc2 \ - --hash=sha256:33ac8f098df0585c0b53009f039dfd913b38c1d2edafed0cedcc0c32a05aa110 \ - --hash=sha256:3444cdba6628accf384e349014084b1cacd866fbb88433cd9d279d90a54e0b23 \ - --hash=sha256:363ea8cd3c5cb6679f1c2f5f1f9669587361c062e4899fce56758efa928728f8 \ - --hash=sha256:375a12d7556d462dc64d70475a9ee5982465fbb3d2b364f16b86ba9135793638 \ - --hash=sha256:388f3217649d6d59292b722d940d4d2e1e6a7003259eb835724092a1cca0203a \ - --hash=sha256:3947483a381259c06921612550867b37d22e1df6d6d7e8361264b6d037595f44 \ - --hash=sha256:39e104da444a34830751715f45ef9fc537475ba21b7f1f5b0f4d71a3b60d7fe2 \ - --hash=sha256:3c997f8c44ec9b9b0bcbf2d422cc00a1d9b9c681f56efa6ca149a941e5560da2 \ - --hash=sha256:3dfafb44f7bb35c0c06eda6b2ab4bfd58f02729e7c4045e179f9a861b07c9850 \ - --hash=sha256:3ebbcf2a07621f29638799828b8d8668c421bfb94c6cb04269130d8de4fb7136 \ - --hash=sha256:3f88a4095e913f98988f5b338c1d4d5d07dbb0b6bad19892fd447484e483ba6b \ - --hash=sha256:439e76255daa0f8151d3cb325f6dd4a3e93043e6403e6491813bcaaaa8733887 \ - --hash=sha256:4569158070180c3855e9c0791c56be3ceeb192defa2cdf6a3f39e54319e56b89 \ - --hash=sha256:466c219deee4536fbc83c08d09115249db301550625c7fef1c5563a584c9bc87 \ - --hash=sha256:4a9d9b4d0a9b38d1c391bb4ad24aa65f306c6f01b512e10a8a34a2dc5675d348 \ - --hash=sha256:4c7dde9e533c0a49d802b4f3f218fa9ad0a1ce21f2c2eb80d5216565202acab4 \ - --hash=sha256:53d1bd3f979ed529f0805dd35ddaca330f80a9a6d90bc0121d2ff398f8ed8861 \ - --hash=sha256:55346705687dbd7ef0d77883ab4f6fabc48232f587925bdaf95219bae072491e \ - --hash=sha256:56295eb1e5f3aecd516d91b00cfd8bf3a13991de5a479df9e27dd569ea23959c \ - --hash=sha256:56bb5c98f058a41bb58eead194b4db8c05b088c93d94d5161728515bd52b052b \ - --hash=sha256:5a5b3bb545ead161be780ee85a2b54fdf7092815995661947812dde94a40f6fb \ - --hash=sha256:5f2564ec89058ee7c7989a7b719115bdfe2a2fb8e7a4543b8d1c0cc4cf6478c1 \ - --hash=sha256:608cce1da6f2672a56b24a015b42db4ac612ee709f3d29f27a00c943d9e851de \ - --hash=sha256:63f13bf09cc3336eb04a837490b8f332e0db41da66995c9fd1ba04552e516354 \ - --hash=sha256:662dd62358bdeaca0aee5761de8727cfd6861432e3bb828dc2a693aa0471a563 \ - --hash=sha256:676135dcf3262c9c5081cc8f19ad55c8a64e3f7282a21266d05544450bffc3a5 \ - --hash=sha256:67aeb72e0f482709991aa91345a831d0b707d16b0257e8ef88a2ad246a7280bf \ - --hash=sha256:67b69535c870670c9f9b14a75d28baa32221d06f6b6fa6f77a0a13c5a7b0a5b9 \ - --hash=sha256:682a7c79a2fbf40f5dbb1eb6bfe2cd865376deeac65acf9beb607505dced9e12 \ - --hash=sha256:6994984550eaf25dd7fc7bd1b700ff45c894149341725bb4edc67f0ffa94efa4 \ - --hash=sha256:69d3a98eebae99a420d4b28756c8ce6ea5a29291baf2dc9ff9414b42676f61d5 \ - --hash=sha256:6e2e54267980349b723cff366d1e29b138b9a60fa376664a157a342689553f71 \ - --hash=sha256:73e4b40ea0eda421b115248d7e79b59214411109a5bc47d0d48e4c73e3b8fcf9 \ - --hash=sha256:74acd6e291f885678631b7ebc85d2d4aec458dd849b8c841b57ef04047833bed \ - --hash=sha256:7665f04d0c7f26ff8bb534e1c65068409bf4687aa2534faf7104d7182debb336 \ - --hash=sha256:7735e82e3498c27bcb2d17cb65d62c14f1100b71723b68362872bca7d0913d90 \ - --hash=sha256:77a86c261679ea5f3896ec060be9dc8e365788248cc1e049632a1be682442063 \ - --hash=sha256:7cf18abf9764746b9c8704774d8b06714bcb0a63641518a3a89c7f85cc02c2ad \ - --hash=sha256:83928404adf8fb3d26793665633ea79b7361efa0287dfbd372a7e74311d51ee6 \ - --hash=sha256:8e40876731f99b6f3c897b66b803c9e1c07a989b366c6b5b475fafd1f7ba3fb8 \ - --hash=sha256:8f188cfcc64fb1266f4684206c9de0e80f54622c3f22a910cbd200478aeae61e \ - --hash=sha256:91997d9cb4a325b60d4e3f20967f8eb08dfcb32b22554d5ef78e6fd1dda743a2 \ - --hash=sha256:91ee8fc02ca52e24bcb77b234f22afc03288e1dafbb1f88fe24db308910c4ac7 \ - --hash=sha256:92fe151145a990c22cbccf9ae15cae8ae9eddabfc949a219c9f667877e40853d \ - --hash=sha256:945db8ee295d3af9dbdbb698cce9bbc5c59b5c3fe328bbc4387f59a8a35f998d \ - --hash=sha256:9517d5e9e0731957468c29dbfd0f976736a0e55afaea843726e887f36fe017df \ - --hash=sha256:952e0d9d07609d9c5be361f33b0d6d650cd2bae393aabb11d9b719364521984b \ - --hash=sha256:97a58a28bcf63284e8b4d7b460cbee1edaab24634e82059c7b8c09e65284f178 \ - --hash=sha256:97e48e8875e6c13909c800fa344cd54cc4b2b0db1d5f911f840458a500fde2c2 \ - --hash=sha256:9e0f07b42d2a50c7dd2d8675d50f7343d998c64008f1da5fef888396b7f84630 \ - --hash=sha256:a3dc1a4b165283bd865e8f8cb5f0c64c05001e0718ed06250d8cac9bec115b48 \ - --hash=sha256:a3ebe9a75be7ab0b7da2464a77bb27febcb4fab46a34f9288f39d74833db7f61 \ - --hash=sha256:a64e32f8bd94c105cc27f42d3b658902b5bcc947ece3c8fe7bc1b05982f60e89 \ - --hash=sha256:a6ed8db0a556343d566a5c124ee483ae113acc9a557a807d439bcecc44e7dfbb \ - --hash=sha256:ad9c9b99b05f163109466638bd30ada1722abb01bbb85c739c50b6dc11f92dc3 \ - --hash=sha256:b33d7a286c0dc1a15f5fc864cc48ae92a846df287ceac2dd499926c3801054a6 \ - --hash=sha256:bc092ba439d91df90aea38168e11f75c655880c12782facf5cf9c00f3d42b562 \ - --hash=sha256:c436130cc779806bdf5d5fae0d848713105472b8566b75ff70048c47d3961c5b \ - --hash=sha256:c5869b8fd70b81835a6f187c5fdbe67917a04d7e52b6e7cc4e5fe39d55c39d58 \ - --hash=sha256:c5ecca8f9bab618340c8e848d340baf68bcd8ad90a8ecd7a4524a81c1764b3db \ - --hash=sha256:cfac69017ef97db2438efb854edf24f5a29fd09a536ff3a992b75990720cdc99 \ - --hash=sha256:d2f0d0f976985f85dfb5f3d685697ef769faa6b71993b46b295cdbbd6be8cc37 \ - --hash=sha256:d5bed7f9805cc29c780f3aee05de3262ee7ce1f47083cfe9f77471e9d6777e83 \ - --hash=sha256:d6a21ef516d36909931a2967621eecb256018aeb11fc48656e3257e73e2e247a \ - --hash=sha256:d9b6ddac6408194e934002a69bcaadbc88c10b5f38fb9307779d1c629181815d \ - --hash=sha256:db47514ffdbd91ccdc7e6f8407aac4ee94cc871b15b577c1c324236b013ddd04 \ - --hash=sha256:df81779732feb9d01e5d513fad0122efb3d53bbc75f61b2a4f29a020bc985e70 \ - --hash=sha256:e4a91d44379f45f5e540971d41e4626dacd7f01004826a18cb048e7da7e96544 \ - --hash=sha256:e63e3e1e0271f374ed489ff5ee73d4b6e7c60710e1f76af5f0e1a6117cd26394 \ - --hash=sha256:e70fac33e8b4ac63dfc4c956fd7d85a0b1139adcfc0d964ce288b7c527537fea \ - --hash=sha256:ecddc221a077a8132cf7c747d5352a15ed763b674c0448d811f408bf803d9ad7 \ - --hash=sha256:f45eec587dafd4b2d41ac189c2156461ebd0c1082d2fe7013571598abb8505d1 \ - --hash=sha256:f52a68c21363c45297aca15561812d542f8fc683c85201df0bebe209e349f793 \ - --hash=sha256:f571aea50ba5623c308aa146eb650eebf7dbe0fd8c5d946e28343cb3b5aad577 \ - --hash=sha256:f60f0ac7005b9f5a6091009b09a419ace1610e163fa5deaba5ce3484341840e7 \ - --hash=sha256:f6475a1b2ecb310c98c28d271a30df74f9dd436ee46d09236a6b750a7599ce57 \ - --hash=sha256:f6d5749fdd33d90e34c2efb174c7e236829147a2713334d708746e94c4bde40d \ - --hash=sha256:f902804113e032e2cdf8c71015651c97af6418363bea8d78dc0911d56c335032 \ - --hash=sha256:fa1076244f54bb76e65e22cb6910365779d5c3d71d1f18b275f1dfc7b0d71b4d \ - --hash=sha256:fc2db02409338bf36590aa985a461b2c96fce91f8e7e0f14c50c5fcc4f229016 \ - --hash=sha256:ffcad6c564fe6b9b8916c1aefbb37a362deebf9394bd2974e9d84232e3e08504 +propcache==0.2.0 # via yarl -protobuf==4.25.1 \ - --hash=sha256:0bf384e75b92c42830c0a679b0cd4d6e2b36ae0cf3dbb1e1dfdda48a244f4bcd \ - --hash=sha256:0f881b589ff449bf0b931a711926e9ddaad3b35089cc039ce1af50b21a4ae8cb \ - --hash=sha256:1484f9e692091450e7edf418c939e15bfc8fc68856e36ce399aed6889dae8bb0 \ - --hash=sha256:193f50a6ab78a970c9b4f148e7c750cfde64f59815e86f686c22e26b4fe01ce7 \ - --hash=sha256:3497c1af9f2526962f09329fd61a36566305e6c72da2590ae0d7d1322818843b \ - --hash=sha256:57d65074b4f5baa4ab5da1605c02be90ac20c8b40fb137d6a8df9f416b0d0ce2 \ - --hash=sha256:8bdbeaddaac52d15c6dce38c71b03038ef7772b977847eb6d374fc86636fa510 \ - --hash=sha256:a19731d5e83ae4737bb2a089605e636077ac001d18781b3cf489b9546c7c80d6 \ - --hash=sha256:abc0525ae2689a8000837729eef7883b9391cd6aa7950249dcf5a4ede230d5dd \ - --hash=sha256:becc576b7e6b553d22cbdf418686ee4daa443d7217999125c045ad56322dda10 \ - --hash=sha256:ca37bf6a6d0046272c152eea90d2e4ef34593aaa32e8873fc14c16440f22d4b7 +protobuf==4.25.1 # via deepeval -psutil==5.9.8 \ - --hash=sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d \ - --hash=sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73 \ - --hash=sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8 \ - --hash=sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2 \ - --hash=sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e \ - --hash=sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36 \ - --hash=sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7 \ - --hash=sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c \ - --hash=sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee \ - --hash=sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421 \ - --hash=sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf \ - --hash=sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81 \ - --hash=sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0 \ - --hash=sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631 \ - --hash=sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4 \ - --hash=sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8 +psutil==5.9.8 # via # azure-monitor-opentelemetry-exporter # pytest-xdist -pyarrow==18.0.0 \ - --hash=sha256:00178509f379415a3fcf855af020e3340254f990a8534294ec3cf674d6e255fd \ - --hash=sha256:03f40b65a43be159d2f97fd64dc998f769d0995a50c00f07aab58b0b3da87e1f \ - --hash=sha256:082ba62bdcb939824ba1ce10b8acef5ab621da1f4c4805e07bfd153617ac19d4 \ - --hash=sha256:09f30690b99ce34e0da64d20dab372ee54431745e4efb78ac938234a282d15f9 \ - --hash=sha256:2333f93260674e185cfbf208d2da3007132572e56871f451ba1a556b45dae6e2 \ - --hash=sha256:28f9c39a56d2c78bf6b87dcc699d520ab850919d4a8c7418cd20eda49874a2ea \ - --hash=sha256:2c664ab88b9766413197733c1720d3dcd4190e8fa3bbdc3710384630a0a7207b \ - --hash=sha256:2c992716cffb1088414f2b478f7af0175fd0a76fea80841b1706baa8fb0ebaad \ - --hash=sha256:2e549a748fa8b8715e734919923f69318c953e077e9c02140ada13e59d043310 \ - --hash=sha256:320ae9bd45ad7ecc12ec858b3e8e462578de060832b98fc4d671dee9f10d9954 \ - --hash=sha256:336addb8b6f5208be1b2398442c703a710b6b937b1a046065ee4db65e782ff5a \ - --hash=sha256:3ac24b2be732e78a5a3ac0b3aa870d73766dd00beba6e015ea2ea7394f8b4e55 \ - --hash=sha256:45476490dd4adec5472c92b4d253e245258745d0ccaabe706f8d03288ed60a79 \ - --hash=sha256:4c381857754da44326f3a49b8b199f7f87a51c2faacd5114352fc78de30d3aba \ - --hash=sha256:4d5ca5d707e158540312e09fd907f9f49bacbe779ab5236d9699ced14d2293b8 \ - --hash=sha256:58a62549a3e0bc9e03df32f350e10e1efb94ec6cf63e3920c3385b26663948ce \ - --hash=sha256:5f0510608ccd6e7f02ca8596962afb8c6cc84c453e7be0da4d85f5f4f7b0328a \ - --hash=sha256:603cd8ad4976568954598ef0a6d4ed3dfb78aff3d57fa8d6271f470f0ce7d34f \ - --hash=sha256:606e9a3dcb0f52307c5040698ea962685fb1c852d72379ee9412be7de9c5f9e2 \ - --hash=sha256:616ea2826c03c16e87f517c46296621a7c51e30400f6d0a61be645f203aa2b93 \ - --hash=sha256:66dcc216ebae2eb4c37b223feaf82f15b69d502821dde2da138ec5a3716e7463 \ - --hash=sha256:6dd1b52d0d58dd8f685ced9971eb49f697d753aa7912f0a8f50833c7a7426319 \ - --hash=sha256:871b292d4b696b09120ed5bde894f79ee2a5f109cb84470546471df264cae136 \ - --hash=sha256:8c70c1965cde991b711a98448ccda3486f2a336457cf4ec4dca257a926e149c9 \ - --hash=sha256:8f40ec677e942374e3d7f2fad6a67a4c2811a8b975e8703c6fd26d3b168a90e2 \ - --hash=sha256:907ee0aa8ca576f5e0cdc20b5aeb2ad4d3953a3b4769fc4b499e00ef0266f02f \ - --hash=sha256:a1824f5b029ddd289919f354bc285992cb4e32da518758c136271cf66046ef22 \ - --hash=sha256:a6aa027b1a9d2970cf328ccd6dbe4a996bc13c39fd427f502782f5bdb9ca20f5 \ - --hash=sha256:a71ab0589a63a3e987beb2bc172e05f000a5c5be2636b4b263c44034e215b5d7 \ - --hash=sha256:b30a927c6dff89ee702686596f27c25160dd6c99be5bcc1513a763ae5b1bfc03 \ - --hash=sha256:b46591222c864e7da7faa3b19455196416cd8355ff6c2cc2e65726a760a3c420 \ - --hash=sha256:b5bd7fd32e3ace012d43925ea4fc8bd1b02cc6cc1e9813b518302950e89b5a22 \ - --hash=sha256:bc1daf7c425f58527900876354390ee41b0ae962a73ad0959b9d829def583bb1 \ - --hash=sha256:bc97316840a349485fbb137eb8d0f4d7057e1b2c1272b1a20eebbbe1848f5122 \ - --hash=sha256:be08af84808dff63a76860847c48ec0416928a7b3a17c2f49a072cac7c45efbd \ - --hash=sha256:d5795e37c0a33baa618c5e054cd61f586cf76850a251e2b21355e4085def6280 \ - --hash=sha256:d6331f280c6e4521c69b201a42dd978f60f7e129511a55da9e0bfe426b4ebb8d \ - --hash=sha256:dc892be34dbd058e8d189b47db1e33a227d965ea8805a235c8a7286f7fd17d3a \ - --hash=sha256:e7ab04f272f98ebffd2a0661e4e126036f6936391ba2889ed2d44c5006237802 \ - --hash=sha256:eb7e3abcda7e1e6b83c2dc2909c8d045881017270a119cc6ee7fdcfe71d02df8 \ - --hash=sha256:f1a198a50c409ab2d009fbf20956ace84567d67f2c5701511d4dd561fae6f32e \ - --hash=sha256:fe92efcdbfa0bcf2fa602e466d7f2905500f33f09eb90bf0bcf2e6ca41b574c8 +pyarrow==18.0.0 # via datasets -pycares==4.4.0 \ - --hash=sha256:112a4979c695b1c86f6782163d7dec58d57a3b9510536dcf4826550f9053dd9a \ - --hash=sha256:1168a48a834813aa80f412be2df4abaf630528a58d15c704857448b20b1675c0 \ - --hash=sha256:21a5a0468861ec7df7befa69050f952da13db5427ae41ffe4713bc96291d1d95 \ - --hash=sha256:229a1675eb33bc9afb1fc463e73ee334950ccc485bc83a43f6ae5839fb4d5fa3 \ - --hash=sha256:22c00bf659a9fa44d7b405cf1cd69b68b9d37537899898d8cbe5dffa4016b273 \ - --hash=sha256:23aa3993a352491a47fcf17867f61472f32f874df4adcbb486294bd9fbe8abee \ - --hash=sha256:24da119850841d16996713d9c3374ca28a21deee056d609fbbed29065d17e1f6 \ - --hash=sha256:2eeec144bcf6a7b6f2d74d6e70cbba7886a84dd373c886f06cb137a07de4954c \ - --hash=sha256:34736a2ffaa9c08ca9c707011a2d7b69074bbf82d645d8138bba771479b2362f \ - --hash=sha256:3aebc73e5ad70464f998f77f2da2063aa617cbd8d3e8174dd7c5b4518f967153 \ - --hash=sha256:3eaa6681c0a3e3f3868c77aca14b7760fed35fdfda2fe587e15c701950e7bc69 \ - --hash=sha256:4afc2644423f4eef97857a9fd61be9758ce5e336b4b0bd3d591238bb4b8b03e0 \ - --hash=sha256:52084961262232ec04bd75f5043aed7e5d8d9695e542ff691dfef0110209f2d4 \ - --hash=sha256:56cf3349fa3a2e67ed387a7974c11d233734636fe19facfcda261b411af14d80 \ - --hash=sha256:5ed4e04af4012f875b78219d34434a6d08a67175150ac1b79eb70ab585d4ba8c \ - --hash=sha256:64965dc19c578a683ea73487a215a8897276224e004d50eeb21f0bc7a0b63c88 \ - --hash=sha256:6ef64649eba56448f65e26546d85c860709844d2fc22ef14d324fe0b27f761a9 \ - --hash=sha256:77cf5a2fd5583c670de41a7f4a7b46e5cbabe7180d8029f728571f4d2e864084 \ - --hash=sha256:7bddc6adba8f699728f7fc1c9ce8cef359817ad78e2ed52b9502cb5f8dc7f741 \ - --hash=sha256:813d661cbe2e37d87da2d16b7110a6860e93ddb11735c6919c8a3545c7b9c8d8 \ - --hash=sha256:82bba2ab77eb5addbf9758d514d9bdef3c1bfe7d1649a47bd9a0d55a23ef478b \ - --hash=sha256:8bf2eaa83a5987e48fa63302f0fe7ce3275cfda87b34d40fef9ce703fb3ac002 \ - --hash=sha256:8d186dafccdaa3409194c0f94db93c1a5d191145a275f19da6591f9499b8e7b8 \ - --hash=sha256:8f64cb58729689d4d0e78f0bfb4c25ce2f851d0274c0273ac751795c04b8798a \ - --hash=sha256:902461a92b6a80fd5041a2ec5235680c7cc35e43615639ec2a40e63fca2dfb51 \ - --hash=sha256:917f08f0b5d9324e9a34211e68d27447c552b50ab967044776bbab7e42a553a2 \ - --hash=sha256:94d6962db81541eb0396d2f0dfcbb18cdb8c8b251d165efc2d974ae652c547d4 \ - --hash=sha256:97892cced5794d721fb4ff8765764aa4ea48fe8b2c3820677505b96b83d4ef47 \ - --hash=sha256:9a0303428d013ccf5c51de59c83f9127aba6200adb7fd4be57eddb432a1edd2a \ - --hash=sha256:9dc04c54c6ea615210c1b9e803d0e2d2255f87a3d5d119b6482c8f0dfa15b26b \ - --hash=sha256:a0c5368206057884cde18602580083aeaad9b860e2eac14fd253543158ce1e93 \ - --hash=sha256:ad58e284a658a8a6a84af2e0b62f2f961f303cedfe551854d7bd40c3cbb61912 \ - --hash=sha256:afb91792f1556f97be7f7acb57dc7756d89c5a87bd8b90363a77dbf9ea653817 \ - --hash=sha256:b61579cecf1f4d616e5ea31a6e423a16680ab0d3a24a2ffe7bb1d4ee162477ff \ - --hash=sha256:b7af06968cbf6851566e806bf3e72825b0e6671832a2cbe840be1d2d65350710 \ - --hash=sha256:bce8db2fc6f3174bd39b81405210b9b88d7b607d33e56a970c34a0c190da0490 \ - --hash=sha256:bfb89ca9e3d0a9b5332deeb666b2ede9d3469107742158f4aeda5ce032d003f4 \ - --hash=sha256:c680fef1b502ee680f8f0b95a41af4ec2c234e50e16c0af5bbda31999d3584bd \ - --hash=sha256:c6a8bde63106f162fca736e842a916853cad3c8d9d137e11c9ffa37efa818b02 \ - --hash=sha256:cb49d5805cd347c404f928c5ae7c35e86ba0c58ffa701dbe905365e77ce7d641 \ - --hash=sha256:ceb12974367b0a68a05d52f4162b29f575d241bd53de155efe632bf2c943c7f6 \ - --hash=sha256:d33e2a1120887e89075f7f814ec144f66a6ce06a54f5722ccefc62fbeda83cff \ - --hash=sha256:db24c4e7fea4a052c6e869cbf387dd85d53b9736cfe1ef5d8d568d1ca925e977 \ - --hash=sha256:e3a6f7cfdfd11eb5493d6d632e582408c8f3b429f295f8799c584c108b28db6f \ - --hash=sha256:eb66c30eb11e877976b7ead13632082a8621df648c408b8e15cdb91a452dd502 \ - --hash=sha256:ed2a38e34bec6f2586435f6ff0bc5fe11d14bebd7ed492cf739a424e81681540 \ - --hash=sha256:f36bdc1562142e3695555d2f4ac0cb69af165eddcefa98efc1c79495b533481f \ - --hash=sha256:f47579d508f2f56eddd16ce72045782ad3b1b3b678098699e2b6a1b30733e1c2 \ - --hash=sha256:f5f646eec041db6ffdbcaf3e0756fb92018f7af3266138c756bb09d2b5baadec \ - --hash=sha256:fd644505a8cfd7f6584d33a9066d4e3d47700f050ef1490230c962de5dfb28c6 \ - --hash=sha256:fff16b09042ba077f7b8aa5868d1d22456f0002574d0ba43462b10a009331677 +pycares==4.4.0 # via aiodns -pycparser==2.22 \ - --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ - --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc +pycparser==2.22 # via cffi -pydantic[email]==2.9.2 \ - --hash=sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f \ - --hash=sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12 +pydantic[email]==2.9.2 # via # call-center-ai (pyproject.toml) # deepeval @@ -1807,134 +449,33 @@ pydantic[email]==2.9.2 \ # pydantic-extra-types # pydantic-settings # ragas -pydantic-core==2.23.4 \ - --hash=sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36 \ - --hash=sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05 \ - --hash=sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071 \ - --hash=sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327 \ - --hash=sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c \ - --hash=sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36 \ - --hash=sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29 \ - --hash=sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744 \ - --hash=sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d \ - --hash=sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec \ - --hash=sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e \ - --hash=sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e \ - --hash=sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577 \ - --hash=sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232 \ - --hash=sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863 \ - --hash=sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6 \ - --hash=sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368 \ - --hash=sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480 \ - --hash=sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2 \ - --hash=sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2 \ - --hash=sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6 \ - --hash=sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769 \ - --hash=sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d \ - --hash=sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2 \ - --hash=sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84 \ - --hash=sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166 \ - --hash=sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271 \ - --hash=sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5 \ - --hash=sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb \ - --hash=sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13 \ - --hash=sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323 \ - --hash=sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556 \ - --hash=sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665 \ - --hash=sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef \ - --hash=sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb \ - --hash=sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119 \ - --hash=sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126 \ - --hash=sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510 \ - --hash=sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b \ - --hash=sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87 \ - --hash=sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f \ - --hash=sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc \ - --hash=sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8 \ - --hash=sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21 \ - --hash=sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f \ - --hash=sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6 \ - --hash=sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658 \ - --hash=sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b \ - --hash=sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3 \ - --hash=sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb \ - --hash=sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59 \ - --hash=sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24 \ - --hash=sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9 \ - --hash=sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3 \ - --hash=sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd \ - --hash=sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753 \ - --hash=sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55 \ - --hash=sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad \ - --hash=sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a \ - --hash=sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605 \ - --hash=sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e \ - --hash=sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b \ - --hash=sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433 \ - --hash=sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8 \ - --hash=sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07 \ - --hash=sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728 \ - --hash=sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0 \ - --hash=sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327 \ - --hash=sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555 \ - --hash=sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64 \ - --hash=sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6 \ - --hash=sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea \ - --hash=sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b \ - --hash=sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df \ - --hash=sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e \ - --hash=sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd \ - --hash=sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068 \ - --hash=sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3 \ - --hash=sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040 \ - --hash=sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12 \ - --hash=sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916 \ - --hash=sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f \ - --hash=sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f \ - --hash=sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801 \ - --hash=sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231 \ - --hash=sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5 \ - --hash=sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8 \ - --hash=sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee \ - --hash=sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607 + # rtclient +pydantic-core==2.23.4 # via pydantic -pydantic-extra-types==2.10.0 \ - --hash=sha256:552c47dd18fe1d00cfed75d9981162a2f3203cf7e77e55a3d3e70936f59587b9 \ - --hash=sha256:b19943914e6286548254f5079d1da094e9c0583ee91a8e611e9df24bfd07dbcd +pydantic-extra-types==2.10.0 # via call-center-ai (pyproject.toml) -pydantic-settings==2.6.1 \ - --hash=sha256:7fb0637c786a558d3103436278a7c4f1cfd29ba8973238a50c5bb9a55387da87 \ - --hash=sha256:e0f92546d8a9923cb8941689abf85d6601a8c19a23e97a34b2964a2e3f813ca0 +pydantic-settings==2.6.1 # via # call-center-ai (pyproject.toml) # langchain-community -pygments==2.18.0 \ - --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \ - --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a +pydub==0.25.1 + # via call-center-ai (pyproject.toml) +pygments==2.18.0 # via rich -pyjwt[crypto]==2.9.0 \ - --hash=sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850 \ - --hash=sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c +pyjwt[crypto]==2.9.0 # via # call-center-ai (pyproject.toml) # msal # twilio -pyproject-hooks==1.2.0 \ - --hash=sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8 \ - --hash=sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913 +pyproject-hooks==1.2.0 # via # build # pip-tools -pyright==1.1.388 \ - --hash=sha256:0166d19b716b77fd2d9055de29f71d844874dbc6b9d3472ccd22df91db3dfa34 \ - --hash=sha256:c7068e9f2c23539c6ac35fc9efac6c6c1b9aa5a0ce97a9a8a6cf0090d7cbf84c +pyright==1.1.388 # via call-center-ai (pyproject.toml) -pysbd==0.3.4 \ - --hash=sha256:cd838939b7b0b185fcf86b0baf6636667dfb6e474743beeff878e9f42e022953 +pysbd==0.3.4 # via ragas -pytest==8.3.3 \ - --hash=sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181 \ - --hash=sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2 +pytest==8.3.3 # via # call-center-ai (pyproject.toml) # deepeval @@ -1942,101 +483,32 @@ pytest==8.3.3 \ # pytest-asyncio # pytest-repeat # pytest-xdist -pytest-assume==2.4.3 \ - --hash=sha256:09074220213b87cf1f400609701a44b75078b4e69588c7227e061ff9b3ecf54b \ - --hash=sha256:983e90537660fd7aa18bb554693523020272e7edeee3e40435593297bcc6347e +pytest-assume==2.4.3 # via call-center-ai (pyproject.toml) -pytest-asyncio==0.24.0 \ - --hash=sha256:a811296ed596b69bf0b6f3dc40f83bcaf341b155a269052d82efa2b25ac7037b \ - --hash=sha256:d081d828e576d85f875399194281e92bf8a68d60d72d1a2faf2feddb6c46b276 +pytest-asyncio==0.24.0 # via call-center-ai (pyproject.toml) -pytest-repeat==0.9.3 \ - --hash=sha256:26ab2df18226af9d5ce441c858f273121e92ff55f5bb311d25755b8d7abdd8ed \ - --hash=sha256:ffd3836dfcd67bb270bec648b330e20be37d2966448c4148c4092d1e8aba8185 +pytest-repeat==0.9.3 # via # call-center-ai (pyproject.toml) # deepeval -pytest-xdist[psutil]==3.6.1 \ - --hash=sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7 \ - --hash=sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d +pytest-xdist[psutil]==3.6.1 # via # call-center-ai (pyproject.toml) # deepeval -python-dateutil==2.9.0.post0 \ - --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ - --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 +python-dateutil==2.9.0.post0 # via pandas -python-dotenv==1.0.1 \ - --hash=sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca \ - --hash=sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a +python-dotenv==1.0.1 # via # call-center-ai (pyproject.toml) # pydantic-settings # uvicorn -python-multipart==0.0.17 \ - --hash=sha256:15dc4f487e0a9476cc1201261188ee0940165cffc94429b6fc565c4d3045cb5d \ - --hash=sha256:41330d831cae6e2f22902704ead2826ea038d0419530eadff3ea80175aec5538 +python-multipart==0.0.17 # via call-center-ai (pyproject.toml) -pytz==2024.2 \ - --hash=sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a \ - --hash=sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725 +pytz==2024.2 # via # call-center-ai (pyproject.toml) # pandas -pyyaml==6.0.2 \ - --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ - --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ - --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ - --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ - --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ - --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ - --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ - --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ - --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ - --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ - --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ - --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ - --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ - --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ - --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ - --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ - --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ - --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ - --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ - --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ - --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ - --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ - --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ - --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ - --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ - --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ - --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ - --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ - --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ - --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ - --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ - --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ - --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ - --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ - --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ - --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ - --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ - --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ - --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ - --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ - --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ - --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ - --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ - --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ - --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ - --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ - --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ - --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ - --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ - --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ - --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ - --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ - --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 +pyyaml==6.0.2 # via # call-center-ai (pyproject.toml) # datasets @@ -2045,113 +517,13 @@ pyyaml==6.0.2 \ # langchain-community # langchain-core # uvicorn -ragas==0.2.4 \ - --hash=sha256:015f5974098cc8de9096143f6883f2b7f70c3566f0b60b9d71854e7964849c48 \ - --hash=sha256:b4edfeac5942bc4e19580a91e04d51f6037f863905ff49fb2c9daad40cfbb476 +ragas==0.2.4 # via deepeval -redis==5.2.0 \ - --hash=sha256:0b1087665a771b1ff2e003aa5bdd354f15a70c9e25d5a7dbf9c722c16528a7b0 \ - --hash=sha256:ae174f2bb3b1bf2b09d54bf3e51fbc1469cf6c10aa03e21141f51969801a7897 +redis==5.2.0 # via call-center-ai (pyproject.toml) -regex==2024.11.6 \ - --hash=sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c \ - --hash=sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60 \ - --hash=sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d \ - --hash=sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d \ - --hash=sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67 \ - --hash=sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773 \ - --hash=sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0 \ - --hash=sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef \ - --hash=sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad \ - --hash=sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe \ - --hash=sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3 \ - --hash=sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114 \ - --hash=sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4 \ - --hash=sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39 \ - --hash=sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e \ - --hash=sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3 \ - --hash=sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7 \ - --hash=sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d \ - --hash=sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e \ - --hash=sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a \ - --hash=sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7 \ - --hash=sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f \ - --hash=sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0 \ - --hash=sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54 \ - --hash=sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b \ - --hash=sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c \ - --hash=sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd \ - --hash=sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57 \ - --hash=sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34 \ - --hash=sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d \ - --hash=sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f \ - --hash=sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b \ - --hash=sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519 \ - --hash=sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4 \ - --hash=sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a \ - --hash=sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638 \ - --hash=sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b \ - --hash=sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839 \ - --hash=sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07 \ - --hash=sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf \ - --hash=sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff \ - --hash=sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0 \ - --hash=sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f \ - --hash=sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95 \ - --hash=sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4 \ - --hash=sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e \ - --hash=sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13 \ - --hash=sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519 \ - --hash=sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2 \ - --hash=sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008 \ - --hash=sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9 \ - --hash=sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc \ - --hash=sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48 \ - --hash=sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20 \ - --hash=sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89 \ - --hash=sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e \ - --hash=sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf \ - --hash=sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b \ - --hash=sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd \ - --hash=sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84 \ - --hash=sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29 \ - --hash=sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b \ - --hash=sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3 \ - --hash=sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45 \ - --hash=sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3 \ - --hash=sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983 \ - --hash=sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e \ - --hash=sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7 \ - --hash=sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4 \ - --hash=sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e \ - --hash=sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467 \ - --hash=sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577 \ - --hash=sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001 \ - --hash=sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0 \ - --hash=sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55 \ - --hash=sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9 \ - --hash=sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf \ - --hash=sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6 \ - --hash=sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e \ - --hash=sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde \ - --hash=sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62 \ - --hash=sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df \ - --hash=sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51 \ - --hash=sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5 \ - --hash=sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86 \ - --hash=sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2 \ - --hash=sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2 \ - --hash=sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0 \ - --hash=sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c \ - --hash=sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f \ - --hash=sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6 \ - --hash=sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2 \ - --hash=sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9 \ - --hash=sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91 +regex==2024.11.6 # via tiktoken -requests==2.32.3 \ - --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ - --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 +requests==2.32.3 # via # azure-core # datasets @@ -2166,205 +538,73 @@ requests==2.32.3 \ # requests-toolbelt # tiktoken # twilio -requests-oauthlib==2.0.0 \ - --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ - --hash=sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9 +requests-oauthlib==2.0.0 # via msrest -requests-toolbelt==1.0.0 \ - --hash=sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6 \ - --hash=sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06 +requests-toolbelt==1.0.0 # via langsmith -requirements-parser==0.11.0 \ - --hash=sha256:35f36dc969d14830bf459803da84f314dc3d17c802592e9e970f63d0359e5920 \ - --hash=sha256:50379eb50311834386c2568263ae5225d7b9d0867fb55cf4ecc93959de2c2684 +requirements-parser==0.11.0 # via deptry -rich==13.9.4 \ - --hash=sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098 \ - --hash=sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90 +rich==13.9.4 # via # deepeval # typer -ruff==0.7.3 \ - --hash=sha256:10ebce7696afe4644e8c1a23b3cf8c0f2193a310c18387c06e583ae9ef284de2 \ - --hash=sha256:1713e2c5545863cdbfe2cbce21f69ffaf37b813bfd1fb3b90dc9a6f1963f5a8c \ - --hash=sha256:34f2339dc22687ec7e7002792d1f50712bf84a13d5152e75712ac08be565d344 \ - --hash=sha256:37d0b619546103274e7f62643d14e1adcbccb242efda4e4bdb9544d7764782e9 \ - --hash=sha256:3f36d56326b3aef8eeee150b700e519880d1aab92f471eefdef656fd57492aa2 \ - --hash=sha256:44eb93c2499a169d49fafd07bc62ac89b1bc800b197e50ff4633aed212569299 \ - --hash=sha256:4ba81a5f0c5478aa61674c5a2194de8b02652f17addf8dfc40c8937e6e7d79fc \ - --hash=sha256:588a9ff2fecf01025ed065fe28809cd5a53b43505f48b69a1ac7707b1b7e4088 \ - --hash=sha256:5d024301109a0007b78d57ab0ba190087b43dce852e552734ebf0b0b85e4fb16 \ - --hash=sha256:5d59f0c3ee4d1a6787614e7135b72e21024875266101142a09a61439cb6e38a5 \ - --hash=sha256:61b46049d6edc0e4317fb14b33bd693245281a3007288b68a3f5b74a22a0746d \ - --hash=sha256:6b6224af8b5e09772c2ecb8dc9f3f344c1aa48201c7f07e7315367f6dd90ac29 \ - --hash=sha256:6d0242ce53f3a576c35ee32d907475a8d569944c0407f91d207c8af5be5dae4e \ - --hash=sha256:7f3eff9961b5d2644bcf1616c606e93baa2d6b349e8aa8b035f654df252c8c67 \ - --hash=sha256:b8963cab06d130c4df2fd52c84e9f10d297826d2e8169ae0c798b6221be1d1d2 \ - --hash=sha256:c50f95a82b94421c964fae4c27c0242890a20fe67d203d127e84fbb8013855f5 \ - --hash=sha256:e1d1ba2e40b6e71a61b063354d04be669ab0d39c352461f3d789cac68b54a313 \ - --hash=sha256:fb397332a1879b9764a3455a0bb1087bda876c2db8aca3a3cbb67b3dbce8cda0 +rtclient @ git+https://github.com/Azure-Samples/aoai-realtime-audio-sdk#subdirectory=python + # via call-center-ai (pyproject.toml) +ruff==0.7.3 # via call-center-ai (pyproject.toml) -sentry-sdk==2.18.0 \ - --hash=sha256:0dc21febd1ab35c648391c664df96f5f79fb0d92d7d4225cd9832e53a617cafd \ - --hash=sha256:ee70e27d1bbe4cd52a38e1bd28a5fadb9b17bc29d91b5f2b97ae29c0a7610442 +sentry-sdk==2.18.0 # via deepeval -shellingham==1.5.4 \ - --hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 \ - --hash=sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de +shellingham==1.5.4 # via typer -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +six==1.16.0 # via # azure-core # html5lib # pytest-assume # python-dateutil -sniffio==1.3.1 \ - --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ - --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc +sniffio==1.3.1 # via # anyio # httpx # openai -soupsieve==2.6 \ - --hash=sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb \ - --hash=sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9 +soupsieve==2.6 # via beautifulsoup4 -sqlalchemy==2.0.35 \ - --hash=sha256:016b2e665f778f13d3c438651dd4de244214b527a275e0acf1d44c05bc6026a9 \ - --hash=sha256:032d979ce77a6c2432653322ba4cbeabf5a6837f704d16fa38b5a05d8e21fa00 \ - --hash=sha256:0375a141e1c0878103eb3d719eb6d5aa444b490c96f3fedab8471c7f6ffe70ee \ - --hash=sha256:042622a5306c23b972192283f4e22372da3b8ddf5f7aac1cc5d9c9b222ab3ff6 \ - --hash=sha256:05c3f58cf91683102f2f0265c0db3bd3892e9eedabe059720492dbaa4f922da1 \ - --hash=sha256:0630774b0977804fba4b6bbea6852ab56c14965a2b0c7fc7282c5f7d90a1ae72 \ - --hash=sha256:0f9f3f9a3763b9c4deb8c5d09c4cc52ffe49f9876af41cc1b2ad0138878453cf \ - --hash=sha256:1b56961e2d31389aaadf4906d453859f35302b4eb818d34a26fab72596076bb8 \ - --hash=sha256:22b83aed390e3099584b839b93f80a0f4a95ee7f48270c97c90acd40ee646f0b \ - --hash=sha256:25b0f63e7fcc2a6290cb5f7f5b4fc4047843504983a28856ce9b35d8f7de03cc \ - --hash=sha256:2a275a806f73e849e1c309ac11108ea1a14cd7058577aba962cd7190e27c9e3c \ - --hash=sha256:2ab3f0336c0387662ce6221ad30ab3a5e6499aab01b9790879b6578fd9b8faa1 \ - --hash=sha256:2e795c2f7d7249b75bb5f479b432a51b59041580d20599d4e112b5f2046437a3 \ - --hash=sha256:3655af10ebcc0f1e4e06c5900bb33e080d6a1fa4228f502121f28a3b1753cde5 \ - --hash=sha256:4668bd8faf7e5b71c0319407b608f278f279668f358857dbfd10ef1954ac9f90 \ - --hash=sha256:4c31943b61ed8fdd63dfd12ccc919f2bf95eefca133767db6fbbd15da62078ec \ - --hash=sha256:4fdcd72a789c1c31ed242fd8c1bcd9ea186a98ee8e5408a50e610edfef980d71 \ - --hash=sha256:627dee0c280eea91aed87b20a1f849e9ae2fe719d52cbf847c0e0ea34464b3f7 \ - --hash=sha256:67219632be22f14750f0d1c70e62f204ba69d28f62fd6432ba05ab295853de9b \ - --hash=sha256:6921ee01caf375363be5e9ae70d08ce7ca9d7e0e8983183080211a062d299468 \ - --hash=sha256:69683e02e8a9de37f17985905a5eca18ad651bf592314b4d3d799029797d0eb3 \ - --hash=sha256:6a93c5a0dfe8d34951e8a6f499a9479ffb9258123551fa007fc708ae2ac2bc5e \ - --hash=sha256:732e026240cdd1c1b2e3ac515c7a23820430ed94292ce33806a95869c46bd139 \ - --hash=sha256:7befc148de64b6060937231cbff8d01ccf0bfd75aa26383ffdf8d82b12ec04ff \ - --hash=sha256:890da8cd1941fa3dab28c5bac3b9da8502e7e366f895b3b8e500896f12f94d11 \ - --hash=sha256:89b64cd8898a3a6f642db4eb7b26d1b28a497d4022eccd7717ca066823e9fb01 \ - --hash=sha256:8a6219108a15fc6d24de499d0d515c7235c617b2540d97116b663dade1a54d62 \ - --hash=sha256:8cdf1a0dbe5ced887a9b127da4ffd7354e9c1a3b9bb330dce84df6b70ccb3a8d \ - --hash=sha256:8d625eddf7efeba2abfd9c014a22c0f6b3796e0ffb48f5d5ab106568ef01ff5a \ - --hash=sha256:93a71c8601e823236ac0e5d087e4f397874a421017b3318fd92c0b14acf2b6db \ - --hash=sha256:9509c4123491d0e63fb5e16199e09f8e262066e58903e84615c301dde8fa2e87 \ - --hash=sha256:a29762cd3d116585278ffb2e5b8cc311fb095ea278b96feef28d0b423154858e \ - --hash=sha256:a62dd5d7cc8626a3634208df458c5fe4f21200d96a74d122c83bc2015b333bc1 \ - --hash=sha256:ada603db10bb865bbe591939de854faf2c60f43c9b763e90f653224138f910d9 \ - --hash=sha256:aee110e4ef3c528f3abbc3c2018c121e708938adeeff9006428dd7c8555e9b3f \ - --hash=sha256:b76d63495b0508ab9fc23f8152bac63205d2a704cd009a2b0722f4c8e0cba8e0 \ - --hash=sha256:c0d8326269dbf944b9201911b0d9f3dc524d64779a07518199a58384c3d37a44 \ - --hash=sha256:c41411e192f8d3ea39ea70e0fae48762cd11a2244e03751a98bd3c0ca9a4e936 \ - --hash=sha256:c68fe3fcde03920c46697585620135b4ecfdfc1ed23e75cc2c2ae9f8502c10b8 \ - --hash=sha256:cb8bea573863762bbf45d1e13f87c2d2fd32cee2dbd50d050f83f87429c9e1ea \ - --hash=sha256:cc32b2990fc34380ec2f6195f33a76b6cdaa9eecf09f0c9404b74fc120aef36f \ - --hash=sha256:ccae5de2a0140d8be6838c331604f91d6fafd0735dbdcee1ac78fc8fbaba76b4 \ - --hash=sha256:d299797d75cd747e7797b1b41817111406b8b10a4f88b6e8fe5b5e59598b43b0 \ - --hash=sha256:e04b622bb8a88f10e439084486f2f6349bf4d50605ac3e445869c7ea5cf0fa8c \ - --hash=sha256:e11d7ea4d24f0a262bccf9a7cd6284c976c5369dac21db237cff59586045ab9f \ - --hash=sha256:e21f66748ab725ade40fa7af8ec8b5019c68ab00b929f6643e1b1af461eddb60 \ - --hash=sha256:eb60b026d8ad0c97917cb81d3662d0b39b8ff1335e3fabb24984c6acd0c900a2 \ - --hash=sha256:f021d334f2ca692523aaf7bbf7592ceff70c8594fad853416a81d66b35e3abf9 \ - --hash=sha256:f552023710d4b93d8fb29a91fadf97de89c5926c6bd758897875435f2a939f33 +sqlalchemy==2.0.35 # via # langchain # langchain-community -starlette==0.41.2 \ - --hash=sha256:9834fd799d1a87fd346deb76158668cfa0b0d56f85caefe8268e2d97c3468b62 \ - --hash=sha256:fbc189474b4731cf30fcef52f18a8d070e3f3b46c6a04c97579e85e6ffca942d +starlette==0.41.2 # via fastapi -structlog==24.4.0 \ - --hash=sha256:597f61e80a91cc0749a9fd2a098ed76715a1c8a01f73e336b746504d1aad7610 \ - --hash=sha256:b27bfecede327a6d2da5fbc96bd859f114ecc398a6389d664f62085ee7ae6fc4 +structlog==24.4.0 # via call-center-ai (pyproject.toml) -tabulate==0.9.0 \ - --hash=sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c \ - --hash=sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f +tabulate==0.9.0 # via deepeval -tenacity==8.2.3 \ - --hash=sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a \ - --hash=sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c +tenacity==8.2.3 # via # call-center-ai (pyproject.toml) # deepeval # langchain # langchain-community # langchain-core -tiktoken==0.8.0 \ - --hash=sha256:02be1666096aff7da6cbd7cdaa8e7917bfed3467cd64b38b1f112e96d3b06a24 \ - --hash=sha256:1473cfe584252dc3fa62adceb5b1c763c1874e04511b197da4e6de51d6ce5a02 \ - --hash=sha256:18228d624807d66c87acd8f25fc135665617cab220671eb65b50f5d70fa51f69 \ - --hash=sha256:25e13f37bc4ef2d012731e93e0fef21dc3b7aea5bb9009618de9a4026844e560 \ - --hash=sha256:294440d21a2a51e12d4238e68a5972095534fe9878be57d905c476017bff99fc \ - --hash=sha256:2efaf6199717b4485031b4d6edb94075e4d79177a172f38dd934d911b588d54a \ - --hash=sha256:326624128590def898775b722ccc327e90b073714227175ea8febbc920ac0a99 \ - --hash=sha256:4177faa809bd55f699e88c96d9bb4635d22e3f59d635ba6fd9ffedf7150b9953 \ - --hash=sha256:5376b6f8dc4753cd81ead935c5f518fa0fbe7e133d9e25f648d8c4dabdd4bad7 \ - --hash=sha256:5637e425ce1fc49cf716d88df3092048359a4b3bbb7da762840426e937ada06d \ - --hash=sha256:56edfefe896c8f10aba372ab5706b9e3558e78db39dd497c940b47bf228bc419 \ - --hash=sha256:6adc8323016d7758d6de7313527f755b0fc6c72985b7d9291be5d96d73ecd1e1 \ - --hash=sha256:6b231f5e8982c245ee3065cd84a4712d64692348bc609d84467c57b4b72dcbc5 \ - --hash=sha256:6b2ddbc79a22621ce8b1166afa9f9a888a664a579350dc7c09346a3b5de837d9 \ - --hash=sha256:7e17807445f0cf1f25771c9d86496bd8b5c376f7419912519699f3cc4dc5c12e \ - --hash=sha256:845287b9798e476b4d762c3ebda5102be87ca26e5d2c9854002825d60cdb815d \ - --hash=sha256:881839cfeae051b3628d9823b2e56b5cc93a9e2efb435f4cf15f17dc45f21586 \ - --hash=sha256:886f80bd339578bbdba6ed6d0567a0d5c6cfe198d9e587ba6c447654c65b8edc \ - --hash=sha256:9269348cb650726f44dd3bbb3f9110ac19a8dcc8f54949ad3ef652ca22a38e21 \ - --hash=sha256:9a58deb7075d5b69237a3ff4bb51a726670419db6ea62bdcd8bd80c78497d7ab \ - --hash=sha256:9ccbb2740f24542534369c5635cfd9b2b3c2490754a78ac8831d99f89f94eeb2 \ - --hash=sha256:9fb0e352d1dbe15aba082883058b3cce9e48d33101bdaac1eccf66424feb5b47 \ - --hash=sha256:b07e33283463089c81ef1467180e3e00ab00d46c2c4bbcef0acab5f771d6695e \ - --hash=sha256:b591fb2b30d6a72121a80be24ec7a0e9eb51c5500ddc7e4c2496516dd5e3816b \ - --hash=sha256:c94ff53c5c74b535b2cbf431d907fc13c678bbd009ee633a2aca269a04389f9a \ - --hash=sha256:d2908c0d043a7d03ebd80347266b0e58440bdef5564f84f4d29fb235b5df3b04 \ - --hash=sha256:d622d8011e6d6f239297efa42a2657043aaed06c4f68833550cac9e9bc723ef1 \ - --hash=sha256:d8c2d0e5ba6453a290b86cd65fc51fedf247e1ba170191715b049dac1f628005 \ - --hash=sha256:d8f3192733ac4d77977432947d563d7e1b310b96497acd3c196c9bddb36ed9db \ - --hash=sha256:f13d13c981511331eac0d01a59b5df7c0d4060a8be1e378672822213da51e0a2 \ - --hash=sha256:fe9399bdc3f29d428f16a2f86c3c8ec20be3eac5f53693ce4980371c3245729b +tiktoken==0.8.0 # via # call-center-ai (pyproject.toml) # langchain-openai # opentelemetry-instrumentation-openai # ragas -tqdm==4.67.0 \ - --hash=sha256:0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be \ - --hash=sha256:fe5a6f95e6fe0b9755e9469b77b9c3cf850048224ecaa8293d7d2d31f97d869a +tqdm==4.67.0 # via # datasets # deepeval # huggingface-hub # openai -twilio==9.3.6 \ - --hash=sha256:c5d7f4cfeb50a7928397b8f819c8f7fb2bb956a1a2cabbda1df1d7a40f9ce1d7 \ - --hash=sha256:d42691f7fe1faaa5ba82942f169bfea4d7f01a0a542a456d82018fb49bd1f5b2 +twilio==9.3.6 # via call-center-ai (pyproject.toml) -typer==0.13.0 \ - --hash=sha256:d85fe0b777b2517cc99c8055ed735452f2659cd45e451507c76f48ce5c1d00e2 \ - --hash=sha256:f1c7198347939361eec90139ffa0fd8b3df3a2259d5852a0f7400e476d95985c +typer==0.13.0 # via deepeval -types-setuptools==75.3.0.20241112 \ - --hash=sha256:78cb5fef4a6056d2f37114d27da90f4655a306e4e38042d7034a8a880bc3f5dd \ - --hash=sha256:f9e1ebd17a56f606e16395c4ee4efa1cdc394b9a2a0ee898a624058b4b62ef8f +types-setuptools==75.3.0.20241112 # via requirements-parser -typing-extensions==4.12.2 \ - --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ - --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 +typing-extensions==4.12.2 # via # aiosqlite # azure-ai-translation-text @@ -2388,298 +628,27 @@ typing-extensions==4.12.2 \ # sqlalchemy # typer # typing-inspect -typing-inspect==0.9.0 \ - --hash=sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f \ - --hash=sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78 +typing-inspect==0.9.0 # via dataclasses-json -tzdata==2024.2 \ - --hash=sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc \ - --hash=sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd +tzdata==2024.2 # via pandas -urllib3==2.2.3 \ - --hash=sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac \ - --hash=sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9 +urllib3==2.2.3 # via # requests # sentry-sdk -uvicorn[standard]==0.32.0 \ - --hash=sha256:60b8f3a5ac027dcd31448f411ced12b5ef452c646f76f02f8cc3f25d8d26fd82 \ - --hash=sha256:f78b36b143c16f54ccdb8190d0a26b5f1901fe5a3c777e1ab29f26391af8551e +uvicorn[standard]==0.32.0 # via call-center-ai (pyproject.toml) -uvloop==0.21.0 \ - --hash=sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0 \ - --hash=sha256:10d66943def5fcb6e7b37310eb6b5639fd2ccbc38df1177262b0640c3ca68c1f \ - --hash=sha256:10da8046cc4a8f12c91a1c39d1dd1585c41162a15caaef165c2174db9ef18bdc \ - --hash=sha256:17df489689befc72c39a08359efac29bbee8eee5209650d4b9f34df73d22e414 \ - --hash=sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f \ - --hash=sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d \ - --hash=sha256:221f4f2a1f46032b403bf3be628011caf75428ee3cc204a22addf96f586b19fd \ - --hash=sha256:2d1f581393673ce119355d56da84fe1dd9d2bb8b3d13ce792524e1607139feff \ - --hash=sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c \ - --hash=sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3 \ - --hash=sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d \ - --hash=sha256:460def4412e473896ef179a1671b40c039c7012184b627898eea5072ef6f017a \ - --hash=sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb \ - --hash=sha256:46923b0b5ee7fc0020bef24afe7836cb068f5050ca04caf6b487c513dc1a20b2 \ - --hash=sha256:53e420a3afe22cdcf2a0f4846e377d16e718bc70103d7088a4f7623567ba5fb0 \ - --hash=sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6 \ - --hash=sha256:67dd654b8ca23aed0a8e99010b4c34aca62f4b7fce88f39d452ed7622c94845c \ - --hash=sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af \ - --hash=sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc \ - --hash=sha256:87c43e0f13022b998eb9b973b5e97200c8b90823454d4bc06ab33829e09fb9bb \ - --hash=sha256:88cb67cdbc0e483da00af0b2c3cdad4b7c61ceb1ee0f33fe00e09c81e3a6cb75 \ - --hash=sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb \ - --hash=sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553 \ - --hash=sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e \ - --hash=sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6 \ - --hash=sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d \ - --hash=sha256:bc09f0ff191e61c2d592a752423c767b4ebb2986daa9ed62908e2b1b9a9ae206 \ - --hash=sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc \ - --hash=sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281 \ - --hash=sha256:c097078b8031190c934ed0ebfee8cc5f9ba9642e6eb88322b9958b649750f72b \ - --hash=sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8 \ - --hash=sha256:e678ad6fe52af2c58d2ae3c73dc85524ba8abe637f134bf3564ed07f555c5e79 \ - --hash=sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f \ - --hash=sha256:f0ce1b49560b1d2d8a2977e3ba4afb2414fb46b86a1b64056bc4ab929efdafbe \ - --hash=sha256:f38b2e090258d051d68a5b14d1da7203a3c3677321cf32a95a6f4db4dd8b6f26 \ - --hash=sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816 \ - --hash=sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2 +uvloop==0.21.0 # via uvicorn -watchfiles==0.24.0 \ - --hash=sha256:01550ccf1d0aed6ea375ef259706af76ad009ef5b0203a3a4cce0f6024f9b68a \ - --hash=sha256:01def80eb62bd5db99a798d5e1f5f940ca0a05986dcfae21d833af7a46f7ee22 \ - --hash=sha256:07cdef0c84c03375f4e24642ef8d8178e533596b229d32d2bbd69e5128ede02a \ - --hash=sha256:083dc77dbdeef09fa44bb0f4d1df571d2e12d8a8f985dccde71ac3ac9ac067a0 \ - --hash=sha256:1cf1f6dd7825053f3d98f6d33f6464ebdd9ee95acd74ba2c34e183086900a827 \ - --hash=sha256:21ab23fdc1208086d99ad3f69c231ba265628014d4aed31d4e8746bd59e88cd1 \ - --hash=sha256:2dadf8a8014fde6addfd3c379e6ed1a981c8f0a48292d662e27cabfe4239c83c \ - --hash=sha256:2e28d91ef48eab0afb939fa446d8ebe77e2f7593f5f463fd2bb2b14132f95b6e \ - --hash=sha256:2efec17819b0046dde35d13fb8ac7a3ad877af41ae4640f4109d9154ed30a188 \ - --hash=sha256:30bbd525c3262fd9f4b1865cb8d88e21161366561cd7c9e1194819e0a33ea86b \ - --hash=sha256:316449aefacf40147a9efaf3bd7c9bdd35aaba9ac5d708bd1eb5763c9a02bef5 \ - --hash=sha256:327763da824817b38ad125dcd97595f942d720d32d879f6c4ddf843e3da3fe90 \ - --hash=sha256:32aa53a9a63b7f01ed32e316e354e81e9da0e6267435c7243bf8ae0f10b428ef \ - --hash=sha256:34e19e56d68b0dad5cff62273107cf5d9fbaf9d75c46277aa5d803b3ef8a9e9b \ - --hash=sha256:3770e260b18e7f4e576edca4c0a639f704088602e0bc921c5c2e721e3acb8d15 \ - --hash=sha256:3d2e3ab79a1771c530233cadfd277fcc762656d50836c77abb2e5e72b88e3a48 \ - --hash=sha256:41face41f036fee09eba33a5b53a73e9a43d5cb2c53dad8e61fa6c9f91b5a51e \ - --hash=sha256:43e3e37c15a8b6fe00c1bce2473cfa8eb3484bbeecf3aefbf259227e487a03df \ - --hash=sha256:449f43f49c8ddca87c6b3980c9284cab6bd1f5c9d9a2b00012adaaccd5e7decd \ - --hash=sha256:4933a508d2f78099162da473841c652ad0de892719043d3f07cc83b33dfd9d91 \ - --hash=sha256:49d617df841a63b4445790a254013aea2120357ccacbed00253f9c2b5dc24e2d \ - --hash=sha256:49fb58bcaa343fedc6a9e91f90195b20ccb3135447dc9e4e2570c3a39565853e \ - --hash=sha256:4a7fa2bc0efef3e209a8199fd111b8969fe9db9c711acc46636686331eda7dd4 \ - --hash=sha256:4abf4ad269856618f82dee296ac66b0cd1d71450fc3c98532d93798e73399b7a \ - --hash=sha256:4b8693502d1967b00f2fb82fc1e744df128ba22f530e15b763c8d82baee15370 \ - --hash=sha256:4d28cea3c976499475f5b7a2fec6b3a36208656963c1a856d328aeae056fc5c1 \ - --hash=sha256:5148c2f1ea043db13ce9b0c28456e18ecc8f14f41325aa624314095b6aa2e9ea \ - --hash=sha256:54ca90a9ae6597ae6dc00e7ed0a040ef723f84ec517d3e7ce13e63e4bc82fa04 \ - --hash=sha256:551ec3ee2a3ac9cbcf48a4ec76e42c2ef938a7e905a35b42a1267fa4b1645896 \ - --hash=sha256:5c51749f3e4e269231510da426ce4a44beb98db2dce9097225c338f815b05d4f \ - --hash=sha256:632676574429bee8c26be8af52af20e0c718cc7f5f67f3fb658c71928ccd4f7f \ - --hash=sha256:6509ed3f467b79d95fc62a98229f79b1a60d1b93f101e1c61d10c95a46a84f43 \ - --hash=sha256:6bdcfa3cd6fdbdd1a068a52820f46a815401cbc2cb187dd006cb076675e7b735 \ - --hash=sha256:7138eff8baa883aeaa074359daabb8b6c1e73ffe69d5accdc907d62e50b1c0da \ - --hash=sha256:7211b463695d1e995ca3feb38b69227e46dbd03947172585ecb0588f19b0d87a \ - --hash=sha256:73bde715f940bea845a95247ea3e5eb17769ba1010efdc938ffcb967c634fa61 \ - --hash=sha256:78470906a6be5199524641f538bd2c56bb809cd4bf29a566a75051610bc982c3 \ - --hash=sha256:7ae3e208b31be8ce7f4c2c0034f33406dd24fbce3467f77223d10cd86778471c \ - --hash=sha256:7e4bd963a935aaf40b625c2499f3f4f6bbd0c3776f6d3bc7c853d04824ff1c9f \ - --hash=sha256:82ae557a8c037c42a6ef26c494d0631cacca040934b101d001100ed93d43f361 \ - --hash=sha256:82b2509f08761f29a0fdad35f7e1638b8ab1adfa2666d41b794090361fb8b855 \ - --hash=sha256:8360f7314a070c30e4c976b183d1d8d1585a4a50c5cb603f431cebcbb4f66327 \ - --hash=sha256:85d5f0c7771dcc7a26c7a27145059b6bb0ce06e4e751ed76cdf123d7039b60b5 \ - --hash=sha256:88bcd4d0fe1d8ff43675360a72def210ebad3f3f72cabfeac08d825d2639b4ab \ - --hash=sha256:9301c689051a4857d5b10777da23fafb8e8e921bcf3abe6448a058d27fb67633 \ - --hash=sha256:951088d12d339690a92cef2ec5d3cfd957692834c72ffd570ea76a6790222777 \ - --hash=sha256:95cf3b95ea665ab03f5a54765fa41abf0529dbaf372c3b83d91ad2cfa695779b \ - --hash=sha256:96619302d4374de5e2345b2b622dc481257a99431277662c30f606f3e22f42be \ - --hash=sha256:999928c6434372fde16c8f27143d3e97201160b48a614071261701615a2a156f \ - --hash=sha256:9a60e2bf9dc6afe7f743e7c9b149d1fdd6dbf35153c78fe3a14ae1a9aee3d98b \ - --hash=sha256:9f895d785eb6164678ff4bb5cc60c5996b3ee6df3edb28dcdeba86a13ea0465e \ - --hash=sha256:a2a9891723a735d3e2540651184be6fd5b96880c08ffe1a98bae5017e65b544b \ - --hash=sha256:a974231b4fdd1bb7f62064a0565a6b107d27d21d9acb50c484d2cdba515b9366 \ - --hash=sha256:aa0fd7248cf533c259e59dc593a60973a73e881162b1a2f73360547132742823 \ - --hash=sha256:acbfa31e315a8f14fe33e3542cbcafc55703b8f5dcbb7c1eecd30f141df50db3 \ - --hash=sha256:afb72325b74fa7a428c009c1b8be4b4d7c2afedafb2982827ef2156646df2fe1 \ - --hash=sha256:b3ef2c69c655db63deb96b3c3e587084612f9b1fa983df5e0c3379d41307467f \ - --hash=sha256:b52a65e4ea43c6d149c5f8ddb0bef8d4a1e779b77591a458a893eb416624a418 \ - --hash=sha256:b665caeeda58625c3946ad7308fbd88a086ee51ccb706307e5b1fa91556ac886 \ - --hash=sha256:b74fdffce9dfcf2dc296dec8743e5b0332d15df19ae464f0e249aa871fc1c571 \ - --hash=sha256:b995bfa6bf01a9e09b884077a6d37070464b529d8682d7691c2d3b540d357a0c \ - --hash=sha256:bd82010f8ab451dabe36054a1622870166a67cf3fce894f68895db6f74bbdc94 \ - --hash=sha256:bdcd5538e27f188dd3c804b4a8d5f52a7fc7f87e7fd6b374b8e36a4ca03db428 \ - --hash=sha256:c79d7719d027b7a42817c5d96461a99b6a49979c143839fc37aa5748c322f234 \ - --hash=sha256:cdab9555053399318b953a1fe1f586e945bc8d635ce9d05e617fd9fe3a4687d6 \ - --hash=sha256:ce72dba6a20e39a0c628258b5c308779b8697f7676c254a845715e2a1039b968 \ - --hash=sha256:d337193bbf3e45171c8025e291530fb7548a93c45253897cd764a6a71c937ed9 \ - --hash=sha256:d3dcb774e3568477275cc76554b5a565024b8ba3a0322f77c246bc7111c5bb9c \ - --hash=sha256:d64ba08db72e5dfd5c33be1e1e687d5e4fcce09219e8aee893a4862034081d4e \ - --hash=sha256:d7a2e3b7f5703ffbd500dabdefcbc9eafeff4b9444bbdd5d83d79eedf8428fab \ - --hash=sha256:d831ee0a50946d24a53821819b2327d5751b0c938b12c0653ea5be7dea9c82ec \ - --hash=sha256:d9018153cf57fc302a2a34cb7564870b859ed9a732d16b41a9b5cb2ebed2d444 \ - --hash=sha256:e5171ef898299c657685306d8e1478a45e9303ddcd8ac5fed5bd52ad4ae0b69b \ - --hash=sha256:e94e98c7cb94cfa6e071d401ea3342767f28eb5a06a58fafdc0d2a4974f4f35c \ - --hash=sha256:ec39698c45b11d9694a1b635a70946a5bad066b593af863460a8e600f0dff1ca \ - --hash=sha256:ed9aba6e01ff6f2e8285e5aa4154e2970068fe0fc0998c4380d0e6278222269b \ - --hash=sha256:edf71b01dec9f766fb285b73930f95f730bb0943500ba0566ae234b5c1618c18 \ - --hash=sha256:ee82c98bed9d97cd2f53bdb035e619309a098ea53ce525833e26b93f673bc318 \ - --hash=sha256:f4c96283fca3ee09fb044f02156d9570d156698bc3734252175a38f0e8975f07 \ - --hash=sha256:f7d9b87c4c55e3ea8881dfcbf6d61ea6775fffed1fedffaa60bd047d3c08c430 \ - --hash=sha256:f83df90191d67af5a831da3a33dd7628b02a95450e168785586ed51e6d28943c \ - --hash=sha256:fca9433a45f18b7c779d2bae7beeec4f740d28b788b117a48368d95a3233ed83 \ - --hash=sha256:fd92bbaa2ecdb7864b7600dcdb6f2f1db6e0346ed425fbd01085be04c63f0b05 +watchfiles==0.24.0 # via uvicorn -webencodings==0.5.1 \ - --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ - --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 +webencodings==0.5.1 # via html5lib -websockets==14.0 \ - --hash=sha256:064a72c0602c2d2c2586143561e0f179ef9b98e0825dc4a3d5cdf55a81898ed6 \ - --hash=sha256:08d62f438a591c016c5d4c79eaf9a8f7a85b6c3ea88793d676c00c930a41e775 \ - --hash=sha256:0913596e0072202be8729dab05266398b72ee57c4232f48d52fe2a0370d0b53f \ - --hash=sha256:0ae0e14729038208711d2e2f769280621c22cd253e3dac00f809fa38c6ccb79d \ - --hash=sha256:0b406f2387dbaf301996b7b2cf41519c1fbba7d5c9626406dd56f72075a60a00 \ - --hash=sha256:0bae3caf386d418e83b62e8c1c4cec1b13348fac43e530b9894d6c7c02d921b5 \ - --hash=sha256:12c345585b1da70cd27a298b0b9a81aa18da7a690672f771b427db59c632d8aa \ - --hash=sha256:176b39547950ff3520728bd1eadd0fa02c68492a1fabca636bab7883dd390905 \ - --hash=sha256:189e9f074f2a77f7cf54634797b29be28116ee564ece421c7653030a2cef48f0 \ - --hash=sha256:1a3bca8cfb66614e23a65aa5d6b87190876ec6f3247094939f9db877db55319c \ - --hash=sha256:1c4ca7cc5a02f909789dad259dffe61be4f38ffb26dc5e26ab2dca2c7d7c87de \ - --hash=sha256:1e0e543e0e81c55e68552bd3c081282721c710a6379a2a78e1ec793853479b25 \ - --hash=sha256:1e541e4c8983b118a584c306070878e7f9670b7781e04184b6e05f9fc92e8a0e \ - --hash=sha256:20979614e4d7266f15018c154255d35dfb9fc828fdf6b4924166b6728fed359f \ - --hash=sha256:23b13edb4df2d4e5d6dc747d83e6b244e267a6615ede90f18ef13dfb2b6feb87 \ - --hash=sha256:2752c98237057f27594a8393d498edd9db37e06abcfb99176d9cb6fb989dc883 \ - --hash=sha256:2786c74cbcb0263fd541e4a075aa8c932bdcaa91e5bbb8649c65304799acdd64 \ - --hash=sha256:281b5ab9514eb241e347a46367a2374cb60cf8f420c4283948aa188f05e7810c \ - --hash=sha256:288365a33049dae3065cdb2c2dd4b48df4b64839c565761c4f3f0c360460a561 \ - --hash=sha256:2a418d596536a470f6f8e94cbb1fde66fe65e03d68c403eee0f2198b129e139a \ - --hash=sha256:3c12e6c1331ee8833fcb565c033f7eb4cb5642af37cef81211c222b617b170df \ - --hash=sha256:3e4be641fed120790241ae15fde27374a62cadaadcc0bd2b4ce35790bd284fb6 \ - --hash=sha256:3f1a697262e28682222f18fae70eb0800dfa50c6eb96b0561c6beb83d6cf78ca \ - --hash=sha256:3fb3d9e3940ea15b30404200e768e6111c3ee2956c60ceb001cae057961ab058 \ - --hash=sha256:445a53bce8344e62df4ed9a22fdd1f06cad8e404ead64b2a1f19bd826c8dad1b \ - --hash=sha256:4875d1c3ab3d1d9a9d8485dc1f4c2aaa63947824af03301911ea58d1e881e096 \ - --hash=sha256:4c06f014fd8fa3827e5fd03ec012945e2139901f261fcc401e0622476cad9c5c \ - --hash=sha256:4eae86193fd667667f35367d292b912685cb22c3f9f1dd6deaa3fdd713ab5976 \ - --hash=sha256:56ec8098dcc47817c8aee8037165f0fe30fec8efe543c66e0924781a4bfcbdfd \ - --hash=sha256:5a5b76b47b62de16d26439d362b18d71394ca4376eb2c8838352be64b27ba8af \ - --hash=sha256:5ade11f4939b885303d28b53d512e96e1a8ea8fbebedd6fef3e2e1afe633cc2a \ - --hash=sha256:5f86250ee98f6098479936b7d596418b6e4c919dfa156508e9d6ac5f8bfbe764 \ - --hash=sha256:61b60c2a07b6d25f7ce8cc0101d55fb0f1af388bec1eddfe0181085c2206e7b0 \ - --hash=sha256:633bbda2d30bc695900f6a07de4e5d92a4e8e8d0d8a536bb3c2051bee4dc3856 \ - --hash=sha256:678990bc5a1e4fa36e18d340d439079a21e6b8d249848b7066cad1a6cbd34b82 \ - --hash=sha256:6cff048a155024a580fee9f9a66b0ad9fc82683f6470c26eb76dd9280e6f459e \ - --hash=sha256:6f2e7710f3c468519f9d5b01a291c407f809f8f831e5a204b238e02447046d78 \ - --hash=sha256:6fad8f03dc976e710db785abf9deb76eb259312fb54d77b568c73f0162cef96e \ - --hash=sha256:7078dd0eac3a1dccf2c6f474004dbe8a4e936dbd19d37bbfb6efa70c923ae04e \ - --hash=sha256:715b238c1772ed28b98af8830df41c5d68941729e22384fe1433db495b1d5438 \ - --hash=sha256:72fe11675685412917363481b79c56e68175e62352f84ca4788ac264f9ea6ed0 \ - --hash=sha256:77697c303b874daf1c76d4e167cd5d6871c26964bc189e4bdb40427067d53a86 \ - --hash=sha256:79e2494047826a56f2951b2ada9dc139d2c3aff63122e86953cafe64ac0fde75 \ - --hash=sha256:7cf000319db10a0cb5c7ce91bfd2a8699086b5cc0b5c5b83b92eec22a0448b2f \ - --hash=sha256:7d66eeab61956e231f35659e6d5b66dc04a3d51e65f2b8f71862dc6a8ba710d1 \ - --hash=sha256:7ed4111f305770e35070e49fbb9fbf757a9b6c9a31bb86d352eb4031d4aa976f \ - --hash=sha256:7fd212e7022c70b4f8246dee4449dde30ff50c7e8e1d61ac87b7879579badd03 \ - --hash=sha256:81758da7c76b4e2ddabc4a98a51f3c3aca8585a6d3a8662b5061613303bd5f68 \ - --hash=sha256:86626d560ceb9d846d128b9c7bd2d0f247dbb62fb49c386762d109583140bf48 \ - --hash=sha256:8982909857b09220ee31d9a45699fce26f8e5b94a10efa7fe07004d4f4200a33 \ - --hash=sha256:8eb46ac94d5c131336dc997a568f5579501958b14a507e6aa4840f6d856da980 \ - --hash=sha256:9af48a2f4cc5e2e34cf69969079865100e418c27caa26c1e3369efcc20c81e17 \ - --hash=sha256:9dc5a2726fd16c266d35838db086fa4e621bb049e3bbe498ab9d54ad5068f726 \ - --hash=sha256:a3741f4394ba3d55a64949ee11ffdba19e2a2bdaa1319a96a7ab93bf8bd2b9b2 \ - --hash=sha256:a97c10043bf74d7667be69383312007d54a507fac8fa101be492cc91e279d94d \ - --hash=sha256:a9b8a85d62709a86a9a55d4720502e88968483ee7f365bd852b75935dec04e0d \ - --hash=sha256:b24f7286a5c4e350284623cf708662f0881fe7bc1146c1a1fe7e6a9be01a8d6b \ - --hash=sha256:b639ea88a46f4629645b398c9e7be0366c92e4910203a6314f78469f5e631dc5 \ - --hash=sha256:b886b6d14cd089396155e6beb2935268bf995057bf24c3e5fd609af55c584a03 \ - --hash=sha256:bdaf3b31f8343dcc6c20d068c10eb29325dd70f5dc321ebb5fbeaa280436e70e \ - --hash=sha256:be90aa6dab180fed523c0c10a6729ad16c9ba79067402d01a4d8aa7ce48d4084 \ - --hash=sha256:c4eb304743ab285f8f057344d115259fbe31e42151b9aae7610db83d2a7379b1 \ - --hash=sha256:ca447967131023e98fcb4867f05cf8584adb424b9108180b2414745a6ff41c31 \ - --hash=sha256:cc7dbe53276429b2ca511a04a3979ce27aa2088fdd28c119c6913dccdfd0e909 \ - --hash=sha256:e9ff528498d9e5c543bee388023ca91870678ac50724d675853ba85b4f0a459e \ - --hash=sha256:ee5fb667aec4ae723d40ada9854128df427b35b526c600cd352ca0240aad4dd7 \ - --hash=sha256:f6dd785f7a521189b1233d3c86c0b66fb73d4769a1d253ce5b31081c5946f05f \ - --hash=sha256:f988f141a9be7a74d2e98d446b2f5411038bad14cdab80f9d1644b2329a71b48 \ - --hash=sha256:fb260539dd2b64e93c9f2c59caa70d36d2020fb8e26fa17f62459ad50ebf6c24 +websockets==14.0 # via uvicorn -wheel==0.45.0 \ - --hash=sha256:52f0baa5e6522155090a09c6bd95718cc46956d1b51d537ea5454249edb671c7 \ - --hash=sha256:a57353941a3183b3d5365346b567a260a0602a0f8a635926a7dede41b94c674a +wheel==0.45.0 # via pip-tools -wrapt==1.16.0 \ - --hash=sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc \ - --hash=sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81 \ - --hash=sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09 \ - --hash=sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e \ - --hash=sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca \ - --hash=sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0 \ - --hash=sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb \ - --hash=sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487 \ - --hash=sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40 \ - --hash=sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c \ - --hash=sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060 \ - --hash=sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202 \ - --hash=sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41 \ - --hash=sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9 \ - --hash=sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b \ - --hash=sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664 \ - --hash=sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d \ - --hash=sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362 \ - --hash=sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00 \ - --hash=sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc \ - --hash=sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1 \ - --hash=sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267 \ - --hash=sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956 \ - --hash=sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966 \ - --hash=sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1 \ - --hash=sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228 \ - --hash=sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72 \ - --hash=sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d \ - --hash=sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292 \ - --hash=sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0 \ - --hash=sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0 \ - --hash=sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36 \ - --hash=sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c \ - --hash=sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5 \ - --hash=sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f \ - --hash=sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73 \ - --hash=sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b \ - --hash=sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2 \ - --hash=sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593 \ - --hash=sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39 \ - --hash=sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389 \ - --hash=sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf \ - --hash=sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf \ - --hash=sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89 \ - --hash=sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c \ - --hash=sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c \ - --hash=sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f \ - --hash=sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440 \ - --hash=sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465 \ - --hash=sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136 \ - --hash=sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b \ - --hash=sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8 \ - --hash=sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3 \ - --hash=sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8 \ - --hash=sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6 \ - --hash=sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e \ - --hash=sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f \ - --hash=sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c \ - --hash=sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e \ - --hash=sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8 \ - --hash=sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2 \ - --hash=sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020 \ - --hash=sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35 \ - --hash=sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d \ - --hash=sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3 \ - --hash=sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537 \ - --hash=sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809 \ - --hash=sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d \ - --hash=sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a \ - --hash=sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4 +wrapt==1.16.0 # via # deprecated # opentelemetry-instrumentation @@ -2688,226 +657,15 @@ wrapt==1.16.0 \ # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-urllib3 -xxhash==3.5.0 \ - --hash=sha256:02c2e816896dc6f85922ced60097bcf6f008dedfc5073dcba32f9c8dd786f3c1 \ - --hash=sha256:0691bfcc4f9c656bcb96cc5db94b4d75980b9d5589f2e59de790091028580837 \ - --hash=sha256:07fda5de378626e502b42b311b049848c2ef38784d0d67b6f30bb5008642f8eb \ - --hash=sha256:08424f6648526076e28fae6ea2806c0a7d504b9ef05ae61d196d571e5c879c84 \ - --hash=sha256:0a80ad0ffd78bef9509eee27b4a29e56f5414b87fb01a888353e3d5bda7038bd \ - --hash=sha256:0adfbd36003d9f86c8c97110039f7539b379f28656a04097e7434d3eaf9aa131 \ - --hash=sha256:0ec70a89be933ea49222fafc3999987d7899fc676f688dd12252509434636622 \ - --hash=sha256:1030a39ba01b0c519b1a82f80e8802630d16ab95dc3f2b2386a0b5c8ed5cbb10 \ - --hash=sha256:109b436096d0a2dd039c355fa3414160ec4d843dfecc64a14077332a00aeb7da \ - --hash=sha256:1308fa542bbdbf2fa85e9e66b1077eea3a88bef38ee8a06270b4298a7a62a166 \ - --hash=sha256:1328f6d8cca2b86acb14104e381225a3d7b42c92c4b86ceae814e5c400dbb415 \ - --hash=sha256:13de2b76c1835399b2e419a296d5b38dc4855385d9e96916299170085ef72f57 \ - --hash=sha256:14470ace8bd3b5d51318782cd94e6f94431974f16cb3b8dc15d52f3b69df8e00 \ - --hash=sha256:149b7914451eb154b3dfaa721315117ea1dac2cc55a01bfbd4df7c68c5dd683d \ - --hash=sha256:160e0c19ee500482ddfb5d5570a0415f565d8ae2b3fd69c5dcfce8a58107b1c3 \ - --hash=sha256:2014c5b3ff15e64feecb6b713af12093f75b7926049e26a580e94dcad3c73d8c \ - --hash=sha256:2061188a1ba352fc699c82bff722f4baacb4b4b8b2f0c745d2001e56d0dfb514 \ - --hash=sha256:220f3f896c6b8d0316f63f16c077d52c412619e475f9372333474ee15133a558 \ - --hash=sha256:23241ff6423378a731d84864bf923a41649dc67b144debd1077f02e6249a0d54 \ - --hash=sha256:25b5a51dc3dfb20a10833c8eee25903fd2e14059e9afcd329c9da20609a307b2 \ - --hash=sha256:297595fe6138d4da2c8ce9e72a04d73e58725bb60f3a19048bc96ab2ff31c692 \ - --hash=sha256:2b4154c00eb22e4d543f472cfca430e7962a0f1d0f3778334f2e08a7ba59363c \ - --hash=sha256:2e76e83efc7b443052dd1e585a76201e40b3411fe3da7af4fe434ec51b2f163b \ - --hash=sha256:30eb2efe6503c379b7ab99c81ba4a779748e3830241f032ab46bd182bf5873af \ - --hash=sha256:3171f693dbc2cef6477054a665dc255d996646b4023fe56cb4db80e26f4cc520 \ - --hash=sha256:33513d6cc3ed3b559134fb307aae9bdd94d7e7c02907b37896a6c45ff9ce51bd \ - --hash=sha256:33eac61d0796ca0591f94548dcfe37bb193671e0c9bcf065789b5792f2eda644 \ - --hash=sha256:37889a0d13b0b7d739cfc128b1c902f04e32de17b33d74b637ad42f1c55101f6 \ - --hash=sha256:38c384c434021e4f62b8d9ba0bc9467e14d394893077e2c66d826243025e1f81 \ - --hash=sha256:392f52ebbb932db566973693de48f15ce787cabd15cf6334e855ed22ea0be5b3 \ - --hash=sha256:3dbbd9892c5ebffeca1ed620cf0ade13eb55a0d8c84e0751a6653adc6ac40d0c \ - --hash=sha256:3e5b5e16c5a480fe5f59f56c30abdeba09ffd75da8d13f6b9b6fd224d0b4d0a2 \ - --hash=sha256:3ff2c0a34eae7df88c868be53a8dd56fbdf592109e21d4bfa092a27b0bf4a7bf \ - --hash=sha256:42eca420c8fa072cc1dd62597635d140e78e384a79bb4944f825fbef8bfeeef6 \ - --hash=sha256:4811336f1ce11cac89dcbd18f3a25c527c16311709a89313c3acaf771def2d4b \ - --hash=sha256:4cc2d67fdb4d057730c75a64c5923abfa17775ae234a71b0200346bfb0a7f482 \ - --hash=sha256:4e28503dccc7d32e0b9817aa0cbfc1f45f563b2c995b7a66c4c8a0d232e840c7 \ - --hash=sha256:4e2febf914ace002132aa09169cc572e0d8959d0f305f93d5828c4836f9bc5a6 \ - --hash=sha256:50ac2184ffb1b999e11e27c7e3e70cc1139047e7ebc1aa95ed12f4269abe98d4 \ - --hash=sha256:531af8845aaadcadf951b7e0c1345c6b9c68a990eeb74ff9acd8501a0ad6a1c9 \ - --hash=sha256:53a068fe70301ec30d868ece566ac90d873e3bb059cf83c32e76012c889b8637 \ - --hash=sha256:586886c7e89cb9828bcd8a5686b12e161368e0064d040e225e72607b43858ba2 \ - --hash=sha256:59aa1203de1cb96dbeab595ded0ad0c0056bb2245ae11fac11c0ceea861382b9 \ - --hash=sha256:5a74f23335b9689b66eb6dbe2a931a88fcd7a4c2cc4b1cb0edba8ce381c7a1da \ - --hash=sha256:5d0d307d27099bb0cbeea7260eb39ed4fdb99c5542e21e94bb6fd29e49c57a23 \ - --hash=sha256:5d2a01dcce81789cf4b12d478b5464632204f4c834dc2d064902ee27d2d1f0ee \ - --hash=sha256:5d3a10609c51da2a1c0ea0293fc3968ca0a18bd73838455b5bca3069d7f8e32b \ - --hash=sha256:5ed9ebc46f24cf91034544b26b131241b699edbfc99ec5e7f8f3d02d6eb7fba4 \ - --hash=sha256:6027dcd885e21581e46d3c7f682cfb2b870942feeed58a21c29583512c3f09f8 \ - --hash=sha256:602d339548d35a8579c6b013339fb34aee2df9b4e105f985443d2860e4d7ffaa \ - --hash=sha256:604253b2143e13218ff1ef0b59ce67f18b8bd1c4205d2ffda22b09b426386898 \ - --hash=sha256:61a1ff00674879725b194695e17f23d3248998b843eb5e933007ca743310f793 \ - --hash=sha256:61c722ed8d49ac9bc26c7071eeaa1f6ff24053d553146d5df031802deffd03da \ - --hash=sha256:63107013578c8a730419adc05608756c3fa640bdc6abe806c3123a49fb829f43 \ - --hash=sha256:683b94dbd1ca67557850b86423318a2e323511648f9f3f7b1840408a02b9a48c \ - --hash=sha256:685c4f4e8c59837de103344eb1c8a3851f670309eb5c361f746805c5471b8c88 \ - --hash=sha256:695735deeddfb35da1677dbc16a083445360e37ff46d8ac5c6fcd64917ff9ade \ - --hash=sha256:6e5f70f6dca1d3b09bccb7daf4e087075ff776e3da9ac870f86ca316736bb4aa \ - --hash=sha256:6e93a5ad22f434d7876665444a97e713a8f60b5b1a3521e8df11b98309bff833 \ - --hash=sha256:6fa0b72f2423e2aa53077e54a61c28e181d23effeaafd73fcb9c494e60930c8e \ - --hash=sha256:70dabf941dede727cca579e8c205e61121afc9b28516752fd65724be1355cc90 \ - --hash=sha256:74752ecaa544657d88b1d1c94ae68031e364a4d47005a90288f3bab3da3c970f \ - --hash=sha256:7a46e1d6d2817ba8024de44c4fd79913a90e5f7265434cef97026215b7d30df6 \ - --hash=sha256:7c5d3e570ef46adaf93fc81b44aca6002b5a4d8ca11bd0580c07eac537f36680 \ - --hash=sha256:7cb29a034301e2982df8b1fe6328a84f4b676106a13e9135a0d7e0c3e9f806da \ - --hash=sha256:7ccb800c9418e438b44b060a32adeb8393764da7441eb52aa2aa195448935306 \ - --hash=sha256:7ce379bcaa9fcc00f19affa7773084dd09f5b59947b3fb47a1ceb0179f91aaa1 \ - --hash=sha256:7f85e0108d51092bdda90672476c7d909c04ada6923c14ff9d913c4f7dc8a3bc \ - --hash=sha256:80babcc30e7a1a484eab952d76a4f4673ff601f54d5142c26826502740e70b43 \ - --hash=sha256:82085c2abec437abebf457c1d12fccb30cc8b3774a0814872511f0f0562c768c \ - --hash=sha256:82b833d5563fefd6fceafb1aed2f3f3ebe19f84760fdd289f8b926731c2e6e91 \ - --hash=sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f \ - --hash=sha256:893074d651cf25c1cc14e3bea4fceefd67f2921b1bb8e40fcfeba56820de80c6 \ - --hash=sha256:89997aa1c4b6a5b1e5b588979d1da048a3c6f15e55c11d117a56b75c84531f5a \ - --hash=sha256:89e66ceed67b213dec5a773e2f7a9e8c58f64daeb38c7859d8815d2c89f39ad7 \ - --hash=sha256:8d47ebd9f5d9607fd039c1fbf4994e3b071ea23eff42f4ecef246ab2b7334198 \ - --hash=sha256:924361811732ddad75ff23e90efd9ccfda4f664132feecb90895bade6a1b4623 \ - --hash=sha256:963be41bcd49f53af6d795f65c0da9b4cc518c0dd9c47145c98f61cb464f4839 \ - --hash=sha256:97a662338797c660178e682f3bc180277b9569a59abfb5925e8620fba00b9fc5 \ - --hash=sha256:9bed5144c6923cc902cd14bb8963f2d5e034def4486ab0bbe1f58f03f042f9a9 \ - --hash=sha256:9c770750cc80e8694492244bca7251385188bc5597b6a39d98a9f30e8da984e0 \ - --hash=sha256:9d32a592cac88d18cc09a89172e1c32d7f2a6e516c3dfde1b9adb90ab5df54a6 \ - --hash=sha256:a5bc08f33c4966f4eb6590d6ff3ceae76151ad744576b5fc6c4ba8edd459fdec \ - --hash=sha256:a606c8070ada8aa2a88e181773fa1ef17ba65ce5dd168b9d08038e2a61b33754 \ - --hash=sha256:a6c50017518329ed65a9e4829154626f008916d36295b6a3ba336e2458824c8c \ - --hash=sha256:a7b1d8315d9b5e9f89eb2933b73afae6ec9597a258d52190944437158b49d38e \ - --hash=sha256:a8fb786fb754ef6ff8c120cb96629fb518f8eb5a61a16aac3a979a9dbd40a084 \ - --hash=sha256:a905ad00ad1e1c34fe4e9d7c1d949ab09c6fa90c919860c1534ff479f40fd12d \ - --hash=sha256:a9d360a792cbcce2fe7b66b8d51274ec297c53cbc423401480e53b26161a290d \ - --hash=sha256:b150b8467852e1bd844387459aa6fbe11d7f38b56e901f9f3b3e6aba0d660240 \ - --hash=sha256:b702f806693201ad6c0a05ddbbe4c8f359626d0b3305f766077d51388a6bac58 \ - --hash=sha256:b96d559e0fcddd3343c510a0fe2b127fbff16bf346dd76280b82292567523442 \ - --hash=sha256:bcd51708a633410737111e998ceb3b45d3dbc98c0931f743d9bb0a209033a326 \ - --hash=sha256:bfc8cdd7f33d57f0468b0614ae634cc38ab9202c6957a60e31d285a71ebe0301 \ - --hash=sha256:c0342aafd421795d740e514bc9858ebddfc705a75a8c5046ac56d85fe97bf196 \ - --hash=sha256:c279f0d2b34ef15f922b77966640ade58b4ccdfef1c4d94b20f2a364617a493f \ - --hash=sha256:c28b2fdcee797e1c1961cd3bcd3d545cab22ad202c846235197935e1df2f8ef7 \ - --hash=sha256:c3bc7bf8cb8806f8d1c9bf149c18708cb1c406520097d6b0a73977460ea03602 \ - --hash=sha256:c4dcb4120d0cc3cc448624147dba64e9021b278c63e34a38789b688fd0da9bf3 \ - --hash=sha256:c8aa771ff2c13dd9cda8166d685d7333d389fae30a4d2bb39d63ab5775de8606 \ - --hash=sha256:cc1276d369452040cbb943300dc8abeedab14245ea44056a2943183822513a18 \ - --hash=sha256:cd2fd827b0ba763ac919440042302315c564fdb797294d86e8cdd4578e3bc7f3 \ - --hash=sha256:d30bbc1644f726b825b3278764240f449d75f1a8bdda892e641d4a688b1494ae \ - --hash=sha256:d5e9db7ef3ecbfc0b4733579cea45713a76852b002cf605420b12ef3ef1ec148 \ - --hash=sha256:dbd2ecfbfee70bc1a4acb7461fa6af7748ec2ab08ac0fa298f281c51518f982c \ - --hash=sha256:dd86b8e7f703ec6ff4f351cfdb9f428955859537125904aa8c963604f2e9d3e7 \ - --hash=sha256:dee1316133c9b463aa81aca676bc506d3f80d8f65aeb0bba2b78d0b30c51d7bd \ - --hash=sha256:e0c48b6300cd0b0106bf49169c3e0536408dfbeb1ccb53180068a18b03c662ab \ - --hash=sha256:e5d0ddaca65ecca9c10dcf01730165fd858533d0be84c75c327487c37a906a27 \ - --hash=sha256:e6a4dd644d72ab316b580a1c120b375890e4c52ec392d4aef3c63361ec4d77d1 \ - --hash=sha256:eade977f5c96c677035ff39c56ac74d851b1cca7d607ab3d8f23c6b859379cab \ - --hash=sha256:ec28adb204b759306a3d64358a5e5c07d7b1dd0ccbce04aa76cb9377b7b70296 \ - --hash=sha256:ece616532c499ee9afbb83078b1b952beffef121d989841f7f4b3dc5ac0fd212 \ - --hash=sha256:eefc37f6138f522e771ac6db71a6d4838ec7933939676f3753eafd7d3f4c40bc \ - --hash=sha256:f0b48edbebea1b7421a9c687c304f7b44d0677c46498a046079d445454504737 \ - --hash=sha256:f1abffa122452481a61c3551ab3c89d72238e279e517705b8b03847b1d93d738 \ - --hash=sha256:f2f2c61bee5844d41c3eb015ac652a0229e901074951ae48581d58bfb2ba01be \ - --hash=sha256:f7b58d1fd3551b8c80a971199543379be1cee3d0d409e1f6d8b01c1a2eebf1f8 \ - --hash=sha256:fa0cafd3a2af231b4e113fba24a65d7922af91aeb23774a8b78228e6cd785e3e \ - --hash=sha256:fa9f547bd98f5553d03160967866a71056a60960be00356a15ecc44efb40ba8e \ - --hash=sha256:fab81ef75003eda96239a23eda4e4543cedc22e34c373edcaf744e721a163986 \ - --hash=sha256:fd1b2281d01723f076df3c8188f43f2472248a6b63118b036e641243656b1b0f \ - --hash=sha256:fe1a92cfbaa0a1253e339ccec42dbe6db262615e52df591b68726ab10338003f +xxhash==3.5.0 # via datasets -yarl==1.17.1 \ - --hash=sha256:06157fb3c58f2736a5e47c8fcbe1afc8b5de6fb28b14d25574af9e62150fcaac \ - --hash=sha256:067a63fcfda82da6b198fa73079b1ca40b7c9b7994995b6ee38acda728b64d47 \ - --hash=sha256:0b1794853124e2f663f0ea54efb0340b457f08d40a1cef78edfa086576179c91 \ - --hash=sha256:0bdff5e0995522706c53078f531fb586f56de9c4c81c243865dd5c66c132c3b5 \ - --hash=sha256:117ed8b3732528a1e41af3aa6d4e08483c2f0f2e3d3d7dca7cf538b3516d93df \ - --hash=sha256:14bc88baa44e1f84164a392827b5defb4fa8e56b93fecac3d15315e7c8e5d8b3 \ - --hash=sha256:1654ec814b18be1af2c857aa9000de7a601400bd4c9ca24629b18486c2e35463 \ - --hash=sha256:16bca6678a83657dd48df84b51bd56a6c6bd401853aef6d09dc2506a78484c7b \ - --hash=sha256:1a3b91c44efa29e6c8ef8a9a2b583347998e2ba52c5d8280dbd5919c02dfc3b5 \ - --hash=sha256:1a52a1ffdd824fb1835272e125385c32fd8b17fbdefeedcb4d543cc23b332d74 \ - --hash=sha256:1ce36ded585f45b1e9bb36d0ae94765c6608b43bd2e7f5f88079f7a85c61a4d3 \ - --hash=sha256:299f11b44d8d3a588234adbe01112126010bd96d9139c3ba7b3badd9829261c3 \ - --hash=sha256:2b24ec55fad43e476905eceaf14f41f6478780b870eda5d08b4d6de9a60b65b4 \ - --hash=sha256:2d374d70fdc36f5863b84e54775452f68639bc862918602d028f89310a034ab0 \ - --hash=sha256:2d9f0606baaec5dd54cb99667fcf85183a7477f3766fbddbe3f385e7fc253299 \ - --hash=sha256:2e7ba4c9377e48fb7b20dedbd473cbcbc13e72e1826917c185157a137dac9df2 \ - --hash=sha256:2f0a6423295a0d282d00e8701fe763eeefba8037e984ad5de44aa349002562ac \ - --hash=sha256:327828786da2006085a4d1feb2594de6f6d26f8af48b81eb1ae950c788d97f61 \ - --hash=sha256:380e6c38ef692b8fd5a0f6d1fa8774d81ebc08cfbd624b1bca62a4d4af2f9931 \ - --hash=sha256:3b74ff4767d3ef47ffe0cd1d89379dc4d828d4873e5528976ced3b44fe5b0a21 \ - --hash=sha256:3e844be8d536afa129366d9af76ed7cb8dfefec99f5f1c9e4f8ae542279a6dc3 \ - --hash=sha256:459e81c2fb920b5f5df744262d1498ec2c8081acdcfe18181da44c50f51312f7 \ - --hash=sha256:46ddf6e0b975cd680eb83318aa1d321cb2bf8d288d50f1754526230fcf59ba96 \ - --hash=sha256:482c122b72e3c5ec98f11457aeb436ae4aecca75de19b3d1de7cf88bc40db82f \ - --hash=sha256:561c87fea99545ef7d692403c110b2f99dced6dff93056d6e04384ad3bc46243 \ - --hash=sha256:578d00c9b7fccfa1745a44f4eddfdc99d723d157dad26764538fbdda37209857 \ - --hash=sha256:58c8e9620eb82a189c6c40cb6b59b4e35b2ee68b1f2afa6597732a2b467d7e8f \ - --hash=sha256:5b29beab10211a746f9846baa39275e80034e065460d99eb51e45c9a9495bcca \ - --hash=sha256:5d1d42556b063d579cae59e37a38c61f4402b47d70c29f0ef15cee1acaa64488 \ - --hash=sha256:5f236cb5999ccd23a0ab1bd219cfe0ee3e1c1b65aaf6dd3320e972f7ec3a39da \ - --hash=sha256:62a91aefff3d11bf60e5956d340eb507a983a7ec802b19072bb989ce120cd948 \ - --hash=sha256:64cc6e97f14cf8a275d79c5002281f3040c12e2e4220623b5759ea7f9868d6a5 \ - --hash=sha256:6f4c9156c4d1eb490fe374fb294deeb7bc7eaccda50e23775b2354b6a6739934 \ - --hash=sha256:7294e38f9aa2e9f05f765b28ffdc5d81378508ce6dadbe93f6d464a8c9594473 \ - --hash=sha256:7615058aabad54416ddac99ade09a5510cf77039a3b903e94e8922f25ed203d7 \ - --hash=sha256:7e48cdb8226644e2fbd0bdb0a0f87906a3db07087f4de77a1b1b1ccfd9e93685 \ - --hash=sha256:7f63d176a81555984e91f2c84c2a574a61cab7111cc907e176f0f01538e9ff6e \ - --hash=sha256:7f6595c852ca544aaeeb32d357e62c9c780eac69dcd34e40cae7b55bc4fb1147 \ - --hash=sha256:7fac95714b09da9278a0b52e492466f773cfe37651cf467a83a1b659be24bf71 \ - --hash=sha256:81713b70bea5c1386dc2f32a8f0dab4148a2928c7495c808c541ee0aae614d67 \ - --hash=sha256:846dd2e1243407133d3195d2d7e4ceefcaa5f5bf7278f0a9bda00967e6326b04 \ - --hash=sha256:84c063af19ef5130084db70ada40ce63a84f6c1ef4d3dbc34e5e8c4febb20822 \ - --hash=sha256:881764d610e3269964fc4bb3c19bb6fce55422828e152b885609ec176b41cf11 \ - --hash=sha256:8994b29c462de9a8fce2d591028b986dbbe1b32f3ad600b2d3e1c482c93abad6 \ - --hash=sha256:8c79e9d7e3d8a32d4824250a9c6401194fb4c2ad9a0cec8f6a96e09a582c2cc0 \ - --hash=sha256:8ee427208c675f1b6e344a1f89376a9613fc30b52646a04ac0c1f6587c7e46ec \ - --hash=sha256:949681f68e0e3c25377462be4b658500e85ca24323d9619fdc41f68d46a1ffda \ - --hash=sha256:9e275792097c9f7e80741c36de3b61917aebecc08a67ae62899b074566ff8556 \ - --hash=sha256:9fb815155aac6bfa8d86184079652c9715c812d506b22cfa369196ef4e99d1b4 \ - --hash=sha256:a2a64e62c7a0edd07c1c917b0586655f3362d2c2d37d474db1a509efb96fea1c \ - --hash=sha256:a7ac5b4984c468ce4f4a553df281450df0a34aefae02e58d77a0847be8d1e11f \ - --hash=sha256:aa46dce75078fceaf7cecac5817422febb4355fbdda440db55206e3bd288cfb8 \ - --hash=sha256:ae3476e934b9d714aa8000d2e4c01eb2590eee10b9d8cd03e7983ad65dfbfcba \ - --hash=sha256:b0341e6d9a0c0e3cdc65857ef518bb05b410dbd70d749a0d33ac0f39e81a4258 \ - --hash=sha256:b40d1bf6e6f74f7c0a567a9e5e778bbd4699d1d3d2c0fe46f4b717eef9e96b95 \ - --hash=sha256:b5c4804e4039f487e942c13381e6c27b4b4e66066d94ef1fae3f6ba8b953f383 \ - --hash=sha256:b5d6a6c9602fd4598fa07e0389e19fe199ae96449008d8304bf5d47cb745462e \ - --hash=sha256:b5f1ac7359e17efe0b6e5fec21de34145caef22b260e978336f325d5c84e6938 \ - --hash=sha256:c0167540094838ee9093ef6cc2c69d0074bbf84a432b4995835e8e5a0d984374 \ - --hash=sha256:c180ac742a083e109c1a18151f4dd8675f32679985a1c750d2ff806796165b55 \ - --hash=sha256:c73df5b6e8fabe2ddb74876fb82d9dd44cbace0ca12e8861ce9155ad3c886139 \ - --hash=sha256:c7e177c619342e407415d4f35dec63d2d134d951e24b5166afcdfd1362828e17 \ - --hash=sha256:cbad927ea8ed814622305d842c93412cb47bd39a496ed0f96bfd42b922b4a217 \ - --hash=sha256:cc353841428d56b683a123a813e6a686e07026d6b1c5757970a877195f880c2d \ - --hash=sha256:cc7c92c1baa629cb03ecb0c3d12564f172218fb1739f54bf5f3881844daadc6d \ - --hash=sha256:cc7d768260f4ba4ea01741c1b5fe3d3a6c70eb91c87f4c8761bbcce5181beafe \ - --hash=sha256:d0eea830b591dbc68e030c86a9569826145df485b2b4554874b07fea1275a199 \ - --hash=sha256:d216e5d9b8749563c7f2c6f7a0831057ec844c68b4c11cb10fc62d4fd373c26d \ - --hash=sha256:d401f07261dc5aa36c2e4efc308548f6ae943bfff20fcadb0a07517a26b196d8 \ - --hash=sha256:d6324274b4e0e2fa1b3eccb25997b1c9ed134ff61d296448ab8269f5ac068c4c \ - --hash=sha256:d8a8b74d843c2638f3864a17d97a4acda58e40d3e44b6303b8cc3d3c44ae2d29 \ - --hash=sha256:d9b6b28a57feb51605d6ae5e61a9044a31742db557a3b851a74c13bc61de5172 \ - --hash=sha256:de599af166970d6a61accde358ec9ded821234cbbc8c6413acfec06056b8e860 \ - --hash=sha256:e594b22688d5747b06e957f1ef822060cb5cb35b493066e33ceac0cf882188b7 \ - --hash=sha256:e5b078134f48552c4d9527db2f7da0b5359abd49393cdf9794017baec7506170 \ - --hash=sha256:eb6dce402734575e1a8cc0bb1509afca508a400a57ce13d306ea2c663bad1138 \ - --hash=sha256:f1790a4b1e8e8e028c391175433b9c8122c39b46e1663228158e61e6f915bf06 \ - --hash=sha256:f5efe0661b9fcd6246f27957f6ae1c0eb29bc60552820f01e970b4996e016004 \ - --hash=sha256:f9cbfbc5faca235fbdf531b93aa0f9f005ec7d267d9d738761a4d42b744ea159 \ - --hash=sha256:fbea1751729afe607d84acfd01efd95e3b31db148a181a441984ce9b3d3469da \ - --hash=sha256:fca4b4307ebe9c3ec77a084da3a9d1999d164693d16492ca2b64594340999988 \ - --hash=sha256:ff5c6771c7e3511a06555afa317879b7db8d640137ba55d6ab0d0c50425cab75 +yarl==1.17.1 # via aiohttp -zipp==3.21.0 \ - --hash=sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4 \ - --hash=sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931 +zipp==3.21.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -pip==24.3.1 \ - --hash=sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed \ - --hash=sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99 +pip==24.3.1 # via pip-tools -setuptools==75.4.0 \ - --hash=sha256:1dc484f5cf56fd3fe7216d7b8df820802e7246cfb534a1db2aa64f14fcb9cdcb \ - --hash=sha256:b3c5d862f98500b06ffdf7cc4499b48c46c317d8d56cb30b5c8bce4d88f5c216 +setuptools==75.4.0 # via pip-tools diff --git a/requirements.txt b/requirements.txt index 89ab01dc..03ccb181 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,169 +2,51 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --allow-unsafe --generate-hashes --output-file=requirements.txt pyproject.toml +# pip-compile --allow-unsafe --output-file=requirements.txt pyproject.toml # -aiodns==3.2.0 \ - --hash=sha256:62869b23409349c21b072883ec8998316b234c9a9e36675756e8e317e8768f72 \ - --hash=sha256:e443c0c27b07da3174a109fd9e736d69058d808f144d3c9d56dbd1776964c5f5 +aiodns==3.2.0 # via aiohttp -aiohappyeyeballs==2.4.3 \ - --hash=sha256:75cf88a15106a5002a8eb1dab212525c00d1f4c0fa96e551c9fbe6f09a621586 \ - --hash=sha256:8a7a83727b2756f394ab2895ea0765a0a8c475e3c71e98d43d76f22b4b435572 +aiohappyeyeballs==2.4.3 # via aiohttp -aiohttp[speedups]==3.10.10 \ - --hash=sha256:007ec22fbc573e5eb2fb7dec4198ef8f6bf2fe4ce20020798b2eb5d0abda6138 \ - --hash=sha256:00819de9e45d42584bed046314c40ea7e9aea95411b38971082cad449392b08c \ - --hash=sha256:01948b1d570f83ee7bbf5a60ea2375a89dfb09fd419170e7f5af029510033d24 \ - --hash=sha256:038f514fe39e235e9fef6717fbf944057bfa24f9b3db9ee551a7ecf584b5b480 \ - --hash=sha256:03a42ac7895406220124c88911ebee31ba8b2d24c98507f4a8bf826b2937c7f2 \ - --hash=sha256:05646ebe6b94cc93407b3bf34b9eb26c20722384d068eb7339de802154d61bc5 \ - --hash=sha256:0631dd7c9f0822cc61c88586ca76d5b5ada26538097d0f1df510b082bad3411a \ - --hash=sha256:0b00807e2605f16e1e198f33a53ce3c4523114059b0c09c337209ae55e3823a8 \ - --hash=sha256:0e1b370d8007c4ae31ee6db7f9a2fe801a42b146cec80a86766e7ad5c4a259cf \ - --hash=sha256:15ecd889a709b0080f02721255b3f80bb261c2293d3c748151274dfea93ac871 \ - --hash=sha256:1b66ccafef7336a1e1f0e389901f60c1d920102315a56df85e49552308fc0486 \ - --hash=sha256:1bbb122c557a16fafc10354b9d99ebf2f2808a660d78202f10ba9d50786384b9 \ - --hash=sha256:1eb89d3d29adaf533588f209768a9c02e44e4baf832b08118749c5fad191781d \ - --hash=sha256:258c5dd01afc10015866114e210fb7365f0d02d9d059c3c3415382ab633fcbcb \ - --hash=sha256:2609e9ab08474702cc67b7702dbb8a80e392c54613ebe80db7e8dbdb79837c68 \ - --hash=sha256:274cfa632350225ce3fdeb318c23b4a10ec25c0e2c880eff951a3842cf358ac1 \ - --hash=sha256:28529e08fde6f12eba8677f5a8608500ed33c086f974de68cc65ab218713a59d \ - --hash=sha256:2b606353da03edcc71130b52388d25f9a30a126e04caef1fd637e31683033abd \ - --hash=sha256:30ca7c3b94708a9d7ae76ff281b2f47d8eaf2579cd05971b5dc681db8caac6e1 \ - --hash=sha256:333cf6cf8e65f6a1e06e9eb3e643a0c515bb850d470902274239fea02033e9a8 \ - --hash=sha256:3455522392fb15ff549d92fbf4b73b559d5e43dc522588f7eb3e54c3f38beee7 \ - --hash=sha256:362f641f9071e5f3ee6f8e7d37d5ed0d95aae656adf4ef578313ee585b585959 \ - --hash=sha256:3bcd391d083f636c06a68715e69467963d1f9600f85ef556ea82e9ef25f043f7 \ - --hash=sha256:3dffb610a30d643983aeb185ce134f97f290f8935f0abccdd32c77bed9388b42 \ - --hash=sha256:3fe407bf93533a6fa82dece0e74dbcaaf5d684e5a51862887f9eaebe6372cd79 \ - --hash=sha256:413251f6fcf552a33c981c4709a6bba37b12710982fec8e558ae944bfb2abd38 \ - --hash=sha256:438cd072f75bb6612f2aca29f8bd7cdf6e35e8f160bc312e49fbecab77c99e3a \ - --hash=sha256:4470c73c12cd9109db8277287d11f9dd98f77fc54155fc71a7738a83ffcc8ea8 \ - --hash=sha256:45c3b868724137f713a38376fef8120c166d1eadd50da1855c112fe97954aed8 \ - --hash=sha256:486f7aabfa292719a2753c016cc3a8f8172965cabb3ea2e7f7436c7f5a22a151 \ - --hash=sha256:4f05e9727ce409358baa615dbeb9b969db94324a79b5a5cea45d39bdb01d82e6 \ - --hash=sha256:50aed5155f819873d23520919e16703fc8925e509abbb1a1491b0087d1cd969e \ - --hash=sha256:50edbcad60d8f0e3eccc68da67f37268b5144ecc34d59f27a02f9611c1d4eec7 \ - --hash=sha256:54ca74df1be3c7ca1cf7f4c971c79c2daf48d9aa65dea1a662ae18926f5bc8ce \ - --hash=sha256:578a4b875af3e0daaf1ac6fa983d93e0bbfec3ead753b6d6f33d467100cdc67b \ - --hash=sha256:597a079284b7ee65ee102bc3a6ea226a37d2b96d0418cc9047490f231dc09fe8 \ - --hash=sha256:59bb3c54aa420521dc4ce3cc2c3fe2ad82adf7b09403fa1f48ae45c0cbde6628 \ - --hash=sha256:5c6a5b8c7926ba5d8545c7dd22961a107526562da31a7a32fa2456baf040939f \ - --hash=sha256:64f6c17757251e2b8d885d728b6433d9d970573586a78b78ba8929b0f41d045a \ - --hash=sha256:679abe5d3858b33c2cf74faec299fda60ea9de62916e8b67e625d65bf069a3b7 \ - --hash=sha256:741a46d58677d8c733175d7e5aa618d277cd9d880301a380fd296975a9cdd7bc \ - --hash=sha256:7789050d9e5d0c309c706953e5e8876e38662d57d45f936902e176d19f1c58ab \ - --hash=sha256:77abf6665ae54000b98b3c742bc6ea1d1fb31c394bcabf8b5d2c1ac3ebfe7f3b \ - --hash=sha256:79019094f87c9fb44f8d769e41dbb664d6e8fcfd62f665ccce36762deaa0e911 \ - --hash=sha256:7b06b7843929e41a94ea09eb1ce3927865387e3e23ebe108e0d0d09b08d25be9 \ - --hash=sha256:7e338c0523d024fad378b376a79faff37fafb3c001872a618cde1d322400a572 \ - --hash=sha256:7ea7ffc6d6d6f8a11e6f40091a1040995cdff02cfc9ba4c2f30a516cb2633554 \ - --hash=sha256:8105fd8a890df77b76dd3054cddf01a879fc13e8af576805d667e0fa0224c35d \ - --hash=sha256:84afcdea18eda514c25bc68b9af2a2b1adea7c08899175a51fe7c4fb6d551257 \ - --hash=sha256:9294bbb581f92770e6ed5c19559e1e99255e4ca604a22c5c6397b2f9dd3ee42c \ - --hash=sha256:93429602396f3383a797a2a70e5f1de5df8e35535d7806c9f91df06f297e109b \ - --hash=sha256:9627cc1a10c8c409b5822a92d57a77f383b554463d1884008e051c32ab1b3742 \ - --hash=sha256:998f3bd3cfc95e9424a6acd7840cbdd39e45bc09ef87533c006f94ac47296090 \ - --hash=sha256:9c72109213eb9d3874f7ac8c0c5fa90e072d678e117d9061c06e30c85b4cf0e6 \ - --hash=sha256:9fc1500fd2a952c5c8e3b29aaf7e3cc6e27e9cfc0a8819b3bce48cc1b849e4cc \ - --hash=sha256:a3f00003de6eba42d6e94fabb4125600d6e484846dbf90ea8e48a800430cc142 \ - --hash=sha256:a45d85cf20b5e0d0aa5a8dca27cce8eddef3292bc29d72dcad1641f4ed50aa16 \ - --hash=sha256:a7d8d14fe962153fc681f6366bdec33d4356f98a3e3567782aac1b6e0e40109a \ - --hash=sha256:a8fa23fe62c436ccf23ff930149c047f060c7126eae3ccea005f0483f27b2e28 \ - --hash=sha256:aa6658732517ddabe22c9036479eabce6036655ba87a0224c612e1ae6af2087e \ - --hash=sha256:aafc8ee9b742ce75044ae9a4d3e60e3d918d15a4c2e08a6c3c3e38fa59b92d94 \ - --hash=sha256:ab5a5a0c7a7991d90446a198689c0535be89bbd6b410a1f9a66688f0880ec026 \ - --hash=sha256:acd48d5b80ee80f9432a165c0ac8cbf9253eaddb6113269a5e18699b33958dbb \ - --hash=sha256:ad7593bb24b2ab09e65e8a1d385606f0f47c65b5a2ae6c551db67d6653e78c28 \ - --hash=sha256:baa42524a82f75303f714108fea528ccacf0386af429b69fff141ffef1c534f9 \ - --hash=sha256:bdfcf6443637c148c4e1a20c48c566aa694fa5e288d34b20fcdc58507882fed3 \ - --hash=sha256:be7443669ae9c016b71f402e43208e13ddf00912f47f623ee5994e12fc7d4b3f \ - --hash=sha256:c02a30b904282777d872266b87b20ed8cc0d1501855e27f831320f471d54d983 \ - --hash=sha256:c1277cd707c465cd09572a774559a3cc7c7a28802eb3a2a9472588f062097205 \ - --hash=sha256:c30a0eafc89d28e7f959281b58198a9fa5e99405f716c0289b7892ca345fe45f \ - --hash=sha256:c5ce2ce7c997e1971b7184ee37deb6ea9922ef5163c6ee5aa3c274b05f9e12fa \ - --hash=sha256:c823bc3971c44ab93e611ab1a46b1eafeae474c0c844aff4b7474287b75fe49c \ - --hash=sha256:ce0cdc074d540265bfeb31336e678b4e37316849d13b308607efa527e981f5c2 \ - --hash=sha256:d1720b4f14c78a3089562b8875b53e36b51c97c51adc53325a69b79b4b48ebcb \ - --hash=sha256:d183cf9c797a5291e8301790ed6d053480ed94070637bfaad914dd38b0981f67 \ - --hash=sha256:d9010c31cd6fa59438da4e58a7f19e4753f7f264300cd152e7f90d4602449762 \ - --hash=sha256:d9e5e4a85bdb56d224f412d9c98ae4cbd032cc4f3161818f692cd81766eee65a \ - --hash=sha256:da1dee8948d2137bb51fbb8a53cce6b1bcc86003c6b42565f008438b806cccd8 \ - --hash=sha256:df9270660711670e68803107d55c2b5949c2e0f2e4896da176e1ecfc068b974a \ - --hash=sha256:e00e3505cd80440f6c98c6d69269dcc2a119f86ad0a9fd70bccc59504bebd68a \ - --hash=sha256:e48d5021a84d341bcaf95c8460b152cfbad770d28e5fe14a768988c461b821bc \ - --hash=sha256:e7f8b04d83483577fd9200461b057c9f14ced334dcb053090cea1da9c8321a91 \ - --hash=sha256:edfe3341033a6b53a5c522c802deb2079eee5cbfbb0af032a55064bd65c73a23 \ - --hash=sha256:ef9c33cc5cbca35808f6c74be11eb7f5f6b14d2311be84a15b594bd3e58b5527 \ - --hash=sha256:f2d4324a98062be0525d16f768a03e0bbb3b9fe301ceee99611dc9a7953124e6 \ - --hash=sha256:f3935f82f6f4a3820270842e90456ebad3af15810cf65932bd24da4463bc0a4c \ - --hash=sha256:f614ab0c76397661b90b6851a030004dac502e48260ea10f2441abd2207fbcc7 \ - --hash=sha256:f7db54c7914cc99d901d93a34704833568d86c20925b2762f9fa779f9cd2e70f \ - --hash=sha256:fbc6264158392bad9df19537e872d476f7c57adf718944cc1e4495cbabf38e2a \ - --hash=sha256:fe2fb38c2ed905a2582948e2de560675e9dfbee94c6d5ccdb1301c6d0a5bf092 \ - --hash=sha256:ffe595f10566f8276b76dc3a11ae4bb7eba1aac8ddd75811736a15b0d5311414 +aiohttp[speedups]==3.10.10 # via # aiohttp-retry # call-center-ai (pyproject.toml) + # rtclient # twilio -aiohttp-retry==2.9.1 \ - --hash=sha256:66d2759d1921838256a05a3f80ad7e724936f083e35be5abb5e16eed6be6dc54 \ - --hash=sha256:8eb75e904ed4ee5c2ec242fefe85bf04240f685391c4879d8f541d6028ff01f1 +aiohttp-retry==2.9.1 # via # call-center-ai (pyproject.toml) # twilio -aiosignal==1.3.1 \ - --hash=sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc \ - --hash=sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17 +aiojobs==1.3.0 + # via call-center-ai (pyproject.toml) +aiosignal==1.3.1 # via aiohttp -aiosqlite==0.20.0 \ - --hash=sha256:36a1deaca0cac40ebe32aac9977a6e2bbc7f5189f23f4a54d5908986729e5bd6 \ - --hash=sha256:6d35c8c256637f4672f843c31021464090805bf925385ac39473fb16eaaca3d7 +aiosqlite==0.20.0 # via call-center-ai (pyproject.toml) -annotated-types==0.7.0 \ - --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ - --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 +annotated-types==0.7.0 # via pydantic -anyio==4.6.2.post1 \ - --hash=sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c \ - --hash=sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d +anyio==4.6.2.post1 # via # httpx # openai # starlette # watchfiles -asgiref==3.8.1 \ - --hash=sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47 \ - --hash=sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590 +asgiref==3.8.1 # via opentelemetry-instrumentation-asgi -attrs==24.2.0 \ - --hash=sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346 \ - --hash=sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2 +attrs==24.2.0 # via aiohttp -azure-ai-translation-text==1.0.1 \ - --hash=sha256:2c60d1adcda68809dd9f431ec0b8ac1b1977a69037d10751a39c233bc6bc42d8 \ - --hash=sha256:8fff37f7ea4f82f25ad6328374859d6bad022d2f30fde9b30b5ee4cf1f7c1769 +azure-ai-translation-text==1.0.1 # via call-center-ai (pyproject.toml) -azure-appconfiguration==1.7.1 \ - --hash=sha256:3ebe41e9be3f4ae6ca61e5dbc42c4b7cc007a01054a8506501a26dfc199fd3ec \ - --hash=sha256:6e62b040a0210071be4423aafbdca3b053884c0d412855e3f8eff8e8d0b1a02b +azure-appconfiguration==1.7.1 # via call-center-ai (pyproject.toml) -azure-common==1.1.28 \ - --hash=sha256:4ac0cd3214e36b6a1b6a442686722a5d8cc449603aa833f3f0f40bda836704a3 \ - --hash=sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad +azure-common==1.1.28 # via azure-search-documents -azure-communication-callautomation==1.2.0 \ - --hash=sha256:45efce4c0990e9421b3de755d592c750dabd8b19e90441e03f84e12127896461 \ - --hash=sha256:aa02155878f2540c267729657f1b12e98683bc7e7831e6d576277606ece9e3a7 +azure-communication-callautomation==1.3.0b2 # via call-center-ai (pyproject.toml) -azure-communication-sms==1.1.0 \ - --hash=sha256:3ce901924661a7e9f684c777784cdd09d0c2277489a3b563b025868f74d7a676 \ - --hash=sha256:5eb99e12537cf03f6bea96aa63f3fbfd77c3e12db075751708f2956e627d8074 +azure-communication-sms==1.1.0 # via call-center-ai (pyproject.toml) -azure-core==1.32.0 \ - --hash=sha256:22b3c35d6b2dae14990f6c1be2912bf23ffe50b220e708a28ab1bb92b1c730e5 \ - --hash=sha256:eac191a0efb23bfa83fddf321b27b122b4ec847befa3091fa736a5c32c50d7b4 +azure-core==1.32.0 # via # azure-ai-translation-text # azure-appconfiguration @@ -179,882 +61,129 @@ azure-core==1.32.0 \ # azure-search-documents # azure-storage-queue # msrest -azure-core-tracing-opentelemetry==1.0.0b11 \ - --hash=sha256:016cefcaff2900fb5cdb7a8a7abd03e9c266622c06e26b3fe6dafa54c4b48bf5 \ - --hash=sha256:a230d1555838b5d07b7594221cd639ea7bc24e29c881e5675e311c6067bad4f5 +azure-core-tracing-opentelemetry==1.0.0b11 # via azure-monitor-opentelemetry -azure-cosmos==4.7.0 \ - --hash=sha256:03d8c7740ddc2906fb16e07b136acc0fe6a6a02656db46c5dd6f1b127b58cc96 \ - --hash=sha256:72d714033134656302a2e8957c4b93590673bd288b0ca60cb123e348ae99a241 - # via call-center-ai (pyproject.toml) -azure-eventgrid==4.20.0 \ - --hash=sha256:c1edab90769bc4e7a2fb0a2037cf0455754d50af793674c08b3fec2293248c4c \ - --hash=sha256:e93c87df46bf16f38d427adf7fd1673c47066f293dfa6f3cbc19036e2b3d6af1 +azure-cosmos==4.7.0 # via call-center-ai (pyproject.toml) -azure-identity==1.19.0 \ - --hash=sha256:500144dc18197d7019b81501165d4fa92225f03778f17d7ca8a2a180129a9c83 \ - --hash=sha256:e3f6558c181692d7509f09de10cca527c7dce426776454fb97df512a46527e81 +azure-eventgrid==4.20.0 # via call-center-ai (pyproject.toml) -azure-monitor-opentelemetry==1.6.4 \ - --hash=sha256:014142ffa420bc2b287ff3bd30de6c31d64b2846423d011a8280334d7afcb01a \ - --hash=sha256:9f5ce4c666caf1f9b536f8ab4ee207dff94777d568517c74f26e3327f75c3fc3 +azure-identity==1.19.0 + # via + # call-center-ai (pyproject.toml) + # rtclient +azure-monitor-opentelemetry==1.6.4 # via call-center-ai (pyproject.toml) -azure-monitor-opentelemetry-exporter==1.0.0b32 \ - --hash=sha256:48fe5e2c29e509b65413c9715040a9dc6cc052bb7cc932933535373ca0c54ba7 \ - --hash=sha256:f16d1d5636fa3dd834f3f63972dee78c9f17fd296a39525772e6f281e7f258cd +azure-monitor-opentelemetry-exporter==1.0.0b32 # via azure-monitor-opentelemetry -azure-search-documents==11.6.0b6 \ - --hash=sha256:323dce21b584becc72fe8bc22db015fad1db7b62305a27f63609cfa76bfbd340 \ - --hash=sha256:8e64777f2b98d08ae7f8e64a0312e99a2e904e8b8709aea42dc5f5017c1856fb +azure-search-documents==11.6.0b6 # via call-center-ai (pyproject.toml) -azure-storage-queue==12.12.0 \ - --hash=sha256:9305f724e0df6a93e3645bf075b5a7e3fc0a1eb1ee47c85912c7aff6b6fd490d \ - --hash=sha256:baf2f1bc82b7d4f5291922c3ea4f23ce2243e942dbe7494fca1782290b37f1e4 +azure-storage-queue==12.12.0 # via call-center-ai (pyproject.toml) -beautifulsoup4==4.12.3 \ - --hash=sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051 \ - --hash=sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed +beautifulsoup4==4.12.3 # via django-htmlmin -brotli==1.1.0 \ - --hash=sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208 \ - --hash=sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48 \ - --hash=sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354 \ - --hash=sha256:0737ddb3068957cf1b054899b0883830bb1fec522ec76b1098f9b6e0f02d9419 \ - --hash=sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a \ - --hash=sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128 \ - --hash=sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c \ - --hash=sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088 \ - --hash=sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9 \ - --hash=sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a \ - --hash=sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3 \ - --hash=sha256:1b2c248cd517c222d89e74669a4adfa5577e06ab68771a529060cf5a156e9757 \ - --hash=sha256:1e9a65b5736232e7a7f91ff3d02277f11d339bf34099a56cdab6a8b3410a02b2 \ - --hash=sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438 \ - --hash=sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578 \ - --hash=sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b \ - --hash=sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b \ - --hash=sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68 \ - --hash=sha256:2a24c50840d89ded6c9a8fdc7b6ed3692ed4e86f1c4a4a938e1e92def92933e0 \ - --hash=sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d \ - --hash=sha256:2feb1d960f760a575dbc5ab3b1c00504b24caaf6986e2dc2b01c09c87866a943 \ - --hash=sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd \ - --hash=sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409 \ - --hash=sha256:32d95b80260d79926f5fab3c41701dbb818fde1c9da590e77e571eefd14abe28 \ - --hash=sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da \ - --hash=sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50 \ - --hash=sha256:3c0ef38c7a7014ffac184db9e04debe495d317cc9c6fb10071f7fefd93100a4f \ - --hash=sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0 \ - --hash=sha256:3ee8a80d67a4334482d9712b8e83ca6b1d9bc7e351931252ebef5d8f7335a547 \ - --hash=sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180 \ - --hash=sha256:43395e90523f9c23a3d5bdf004733246fba087f2948f87ab28015f12359ca6a0 \ - --hash=sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d \ - --hash=sha256:4410f84b33374409552ac9b6903507cdb31cd30d2501fc5ca13d18f73548444a \ - --hash=sha256:494994f807ba0b92092a163a0a283961369a65f6cbe01e8891132b7a320e61eb \ - --hash=sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112 \ - --hash=sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc \ - --hash=sha256:4f3607b129417e111e30637af1b56f24f7a49e64763253bbc275c75fa887d4b2 \ - --hash=sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265 \ - --hash=sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327 \ - --hash=sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95 \ - --hash=sha256:58d4b711689366d4a03ac7957ab8c28890415e267f9b6589969e74b6e42225ec \ - --hash=sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd \ - --hash=sha256:5dab0844f2cf82be357a0eb11a9087f70c5430b2c241493fc122bb6f2bb0917c \ - --hash=sha256:5e55da2c8724191e5b557f8e18943b1b4839b8efc3ef60d65985bcf6f587dd38 \ - --hash=sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914 \ - --hash=sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0 \ - --hash=sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a \ - --hash=sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7 \ - --hash=sha256:6967ced6730aed543b8673008b5a391c3b1076d834ca438bbd70635c73775368 \ - --hash=sha256:6974f52a02321b36847cd19d1b8e381bf39939c21efd6ee2fc13a28b0d99348c \ - --hash=sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0 \ - --hash=sha256:6c6e0c425f22c1c719c42670d561ad682f7bfeeef918edea971a79ac5252437f \ - --hash=sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451 \ - --hash=sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f \ - --hash=sha256:7bc37c4d6b87fb1017ea28c9508b36bbcb0c3d18b4260fcdf08b200c74a6aee8 \ - --hash=sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e \ - --hash=sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248 \ - --hash=sha256:7eedaa5d036d9336c95915035fb57422054014ebdeb6f3b42eac809928e40d0c \ - --hash=sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91 \ - --hash=sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724 \ - --hash=sha256:832436e59afb93e1836081a20f324cb185836c617659b07b129141a8426973c7 \ - --hash=sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966 \ - --hash=sha256:87a3044c3a35055527ac75e419dfa9f4f3667a1e887ee80360589eb8c90aabb9 \ - --hash=sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97 \ - --hash=sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d \ - --hash=sha256:8bf32b98b75c13ec7cf774164172683d6e7891088f6316e54425fde1efc276d5 \ - --hash=sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf \ - --hash=sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac \ - --hash=sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b \ - --hash=sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951 \ - --hash=sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74 \ - --hash=sha256:91d7cc2a76b5567591d12c01f019dd7afce6ba8cba6571187e21e2fc418ae648 \ - --hash=sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60 \ - --hash=sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c \ - --hash=sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1 \ - --hash=sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8 \ - --hash=sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d \ - --hash=sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc \ - --hash=sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61 \ - --hash=sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460 \ - --hash=sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751 \ - --hash=sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9 \ - --hash=sha256:a7e53012d2853a07a4a79c00643832161a910674a893d296c9f1259859a289d2 \ - --hash=sha256:a93dde851926f4f2678e704fadeb39e16c35d8baebd5252c9fd94ce8ce68c4a0 \ - --hash=sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1 \ - --hash=sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474 \ - --hash=sha256:aea440a510e14e818e67bfc4027880e2fb500c2ccb20ab21c7a7c8b5b4703d75 \ - --hash=sha256:af6fa6817889314555aede9a919612b23739395ce767fe7fcbea9a80bf140fe5 \ - --hash=sha256:b760c65308ff1e462f65d69c12e4ae085cff3b332d894637f6273a12a482d09f \ - --hash=sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2 \ - --hash=sha256:c247dd99d39e0338a604f8c2b3bc7061d5c2e9e2ac7ba9cc1be5a69cb6cd832f \ - --hash=sha256:c5529b34c1c9d937168297f2c1fde7ebe9ebdd5e121297ff9c043bdb2ae3d6fb \ - --hash=sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6 \ - --hash=sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9 \ - --hash=sha256:ca63e1890ede90b2e4454f9a65135a4d387a4585ff8282bb72964fab893f2111 \ - --hash=sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2 \ - --hash=sha256:cb1dac1770878ade83f2ccdf7d25e494f05c9165f5246b46a621cc849341dc01 \ - --hash=sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467 \ - --hash=sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619 \ - --hash=sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf \ - --hash=sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408 \ - --hash=sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579 \ - --hash=sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84 \ - --hash=sha256:d2b35ca2c7f81d173d2fadc2f4f31e88cc5f7a39ae5b6db5513cf3383b0e0ec7 \ - --hash=sha256:d342778ef319e1026af243ed0a07c97acf3bad33b9f29e7ae6a1f68fd083e90c \ - --hash=sha256:d487f5432bf35b60ed625d7e1b448e2dc855422e87469e3f450aa5552b0eb284 \ - --hash=sha256:d7702622a8b40c49bffb46e1e3ba2e81268d5c04a34f460978c6b5517a34dd52 \ - --hash=sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b \ - --hash=sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59 \ - --hash=sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752 \ - --hash=sha256:e4fe605b917c70283db7dfe5ada75e04561479075761a0b3866c081d035b01c1 \ - --hash=sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80 \ - --hash=sha256:e79e6520141d792237c70bcd7a3b122d00f2613769ae0cb61c52e89fd3443839 \ - --hash=sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0 \ - --hash=sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2 \ - --hash=sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3 \ - --hash=sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64 \ - --hash=sha256:f0db75f47be8b8abc8d9e31bc7aad0547ca26f24a54e6fd10231d623f183d089 \ - --hash=sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643 \ - --hash=sha256:f31859074d57b4639318523d6ffdca586ace54271a73ad23ad021acd807eb14b \ - --hash=sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e \ - --hash=sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985 \ - --hash=sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596 \ - --hash=sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2 \ - --hash=sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064 +brotli==1.1.0 # via aiohttp -certifi==2024.8.30 \ - --hash=sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 \ - --hash=sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9 +certifi==2024.8.30 # via # httpcore # httpx # msrest # requests -cffi==1.17.1 \ - --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \ - --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \ - --hash=sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1 \ - --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \ - --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \ - --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \ - --hash=sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8 \ - --hash=sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36 \ - --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \ - --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \ - --hash=sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc \ - --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \ - --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \ - --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \ - --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \ - --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \ - --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \ - --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \ - --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \ - --hash=sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b \ - --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \ - --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \ - --hash=sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c \ - --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \ - --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \ - --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \ - --hash=sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8 \ - --hash=sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1 \ - --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \ - --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \ - --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \ - --hash=sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595 \ - --hash=sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0 \ - --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \ - --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \ - --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \ - --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \ - --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \ - --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \ - --hash=sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16 \ - --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \ - --hash=sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e \ - --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \ - --hash=sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964 \ - --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \ - --hash=sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576 \ - --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \ - --hash=sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3 \ - --hash=sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662 \ - --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \ - --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \ - --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \ - --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \ - --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \ - --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \ - --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \ - --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \ - --hash=sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9 \ - --hash=sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7 \ - --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \ - --hash=sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a \ - --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \ - --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a \ - --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \ - --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \ - --hash=sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87 \ - --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b +cffi==1.17.1 # via # cryptography # pycares -charset-normalizer==3.4.0 \ - --hash=sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621 \ - --hash=sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6 \ - --hash=sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8 \ - --hash=sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912 \ - --hash=sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c \ - --hash=sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b \ - --hash=sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d \ - --hash=sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d \ - --hash=sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95 \ - --hash=sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e \ - --hash=sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565 \ - --hash=sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64 \ - --hash=sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab \ - --hash=sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be \ - --hash=sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e \ - --hash=sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907 \ - --hash=sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0 \ - --hash=sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2 \ - --hash=sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62 \ - --hash=sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62 \ - --hash=sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23 \ - --hash=sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc \ - --hash=sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284 \ - --hash=sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca \ - --hash=sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455 \ - --hash=sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858 \ - --hash=sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b \ - --hash=sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594 \ - --hash=sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc \ - --hash=sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db \ - --hash=sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b \ - --hash=sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea \ - --hash=sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6 \ - --hash=sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920 \ - --hash=sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749 \ - --hash=sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7 \ - --hash=sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd \ - --hash=sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99 \ - --hash=sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242 \ - --hash=sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee \ - --hash=sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129 \ - --hash=sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2 \ - --hash=sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51 \ - --hash=sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee \ - --hash=sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8 \ - --hash=sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b \ - --hash=sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613 \ - --hash=sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742 \ - --hash=sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe \ - --hash=sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3 \ - --hash=sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5 \ - --hash=sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631 \ - --hash=sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7 \ - --hash=sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15 \ - --hash=sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c \ - --hash=sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea \ - --hash=sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417 \ - --hash=sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250 \ - --hash=sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88 \ - --hash=sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca \ - --hash=sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa \ - --hash=sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99 \ - --hash=sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149 \ - --hash=sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41 \ - --hash=sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574 \ - --hash=sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0 \ - --hash=sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f \ - --hash=sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d \ - --hash=sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654 \ - --hash=sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3 \ - --hash=sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19 \ - --hash=sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90 \ - --hash=sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578 \ - --hash=sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9 \ - --hash=sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1 \ - --hash=sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51 \ - --hash=sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719 \ - --hash=sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236 \ - --hash=sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a \ - --hash=sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c \ - --hash=sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade \ - --hash=sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944 \ - --hash=sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc \ - --hash=sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6 \ - --hash=sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6 \ - --hash=sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27 \ - --hash=sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6 \ - --hash=sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2 \ - --hash=sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12 \ - --hash=sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf \ - --hash=sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114 \ - --hash=sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7 \ - --hash=sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf \ - --hash=sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d \ - --hash=sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b \ - --hash=sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed \ - --hash=sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03 \ - --hash=sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4 \ - --hash=sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67 \ - --hash=sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365 \ - --hash=sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a \ - --hash=sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748 \ - --hash=sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b \ - --hash=sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079 \ - --hash=sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482 +charset-normalizer==3.4.0 # via requests -click==8.1.7 \ - --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ - --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de +click==8.1.7 # via uvicorn -cryptography==43.0.3 \ - --hash=sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362 \ - --hash=sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4 \ - --hash=sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa \ - --hash=sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83 \ - --hash=sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff \ - --hash=sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805 \ - --hash=sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6 \ - --hash=sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664 \ - --hash=sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08 \ - --hash=sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e \ - --hash=sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18 \ - --hash=sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f \ - --hash=sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73 \ - --hash=sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5 \ - --hash=sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984 \ - --hash=sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd \ - --hash=sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3 \ - --hash=sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e \ - --hash=sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405 \ - --hash=sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2 \ - --hash=sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c \ - --hash=sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995 \ - --hash=sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73 \ - --hash=sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16 \ - --hash=sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7 \ - --hash=sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd \ - --hash=sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7 +cryptography==43.0.3 # via # azure-identity # azure-storage-queue # msal # pyjwt -deprecated==1.2.14 \ - --hash=sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c \ - --hash=sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3 +deprecated==1.2.14 # via # opentelemetry-api # opentelemetry-semantic-conventions -distro==1.9.0 \ - --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \ - --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 +distro==1.9.0 # via openai -django-htmlmin==0.11.0 \ - --hash=sha256:e41b2a2157570846645cc636a9bddde8aa3e03f6834a9211e61a17f2ed42b87e +django-htmlmin==0.11.0 # via call-center-ai (pyproject.toml) -dnspython==2.7.0 \ - --hash=sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86 \ - --hash=sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1 +dnspython==2.7.0 # via email-validator -email-validator==2.2.0 \ - --hash=sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631 \ - --hash=sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7 +email-validator==2.2.0 # via pydantic -fastapi==0.115.4 \ - --hash=sha256:0b504a063ffb3cf96a5e27dc1bc32c80ca743a2528574f9cdc77daa2d31b4742 \ - --hash=sha256:db653475586b091cb8b2fec2ac54a680ac6a158e07406e1abae31679e8826349 +fastapi==0.115.4 # via call-center-ai (pyproject.toml) -fixedint==0.1.6 \ - --hash=sha256:41953193f08cbe984f584d8513c38fe5eea5fbd392257433b2210391c8a21ead \ - --hash=sha256:703005d090499d41ce7ce2ee7eae8f7a5589a81acdc6b79f1728a56495f2c799 \ - --hash=sha256:b8cf9f913735d2904deadda7a6daa9f57100599da1de57a7448ea1be75ae8c9c +fixedint==0.1.6 # via azure-monitor-opentelemetry-exporter -frozenlist==1.5.0 \ - --hash=sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e \ - --hash=sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf \ - --hash=sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6 \ - --hash=sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a \ - --hash=sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d \ - --hash=sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f \ - --hash=sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28 \ - --hash=sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b \ - --hash=sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9 \ - --hash=sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2 \ - --hash=sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec \ - --hash=sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2 \ - --hash=sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c \ - --hash=sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336 \ - --hash=sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4 \ - --hash=sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d \ - --hash=sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b \ - --hash=sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c \ - --hash=sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10 \ - --hash=sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08 \ - --hash=sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942 \ - --hash=sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8 \ - --hash=sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f \ - --hash=sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10 \ - --hash=sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5 \ - --hash=sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6 \ - --hash=sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21 \ - --hash=sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c \ - --hash=sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d \ - --hash=sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923 \ - --hash=sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608 \ - --hash=sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de \ - --hash=sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17 \ - --hash=sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0 \ - --hash=sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f \ - --hash=sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641 \ - --hash=sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c \ - --hash=sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a \ - --hash=sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0 \ - --hash=sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9 \ - --hash=sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab \ - --hash=sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f \ - --hash=sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3 \ - --hash=sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a \ - --hash=sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784 \ - --hash=sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604 \ - --hash=sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d \ - --hash=sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5 \ - --hash=sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03 \ - --hash=sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e \ - --hash=sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953 \ - --hash=sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee \ - --hash=sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d \ - --hash=sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817 \ - --hash=sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3 \ - --hash=sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039 \ - --hash=sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f \ - --hash=sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9 \ - --hash=sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf \ - --hash=sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76 \ - --hash=sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba \ - --hash=sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171 \ - --hash=sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb \ - --hash=sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439 \ - --hash=sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631 \ - --hash=sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972 \ - --hash=sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d \ - --hash=sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869 \ - --hash=sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9 \ - --hash=sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411 \ - --hash=sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723 \ - --hash=sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2 \ - --hash=sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b \ - --hash=sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99 \ - --hash=sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e \ - --hash=sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840 \ - --hash=sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3 \ - --hash=sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb \ - --hash=sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3 \ - --hash=sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0 \ - --hash=sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca \ - --hash=sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45 \ - --hash=sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e \ - --hash=sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f \ - --hash=sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5 \ - --hash=sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307 \ - --hash=sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e \ - --hash=sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2 \ - --hash=sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778 \ - --hash=sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a \ - --hash=sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30 \ - --hash=sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a +frozenlist==1.5.0 # via # aiohttp # aiosignal -gunicorn==23.0.0 \ - --hash=sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d \ - --hash=sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec +gunicorn==23.0.0 # via call-center-ai (pyproject.toml) -h11==0.14.0 \ - --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ - --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 +h11==0.14.0 # via # httpcore # uvicorn -html5lib==1.1 \ - --hash=sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d \ - --hash=sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f +html5lib==1.1 # via django-htmlmin -httpcore==1.0.6 \ - --hash=sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f \ - --hash=sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f +httpcore==1.0.6 # via httpx -httptools==0.6.4 \ - --hash=sha256:0614154d5454c21b6410fdf5262b4a3ddb0f53f1e1721cfd59d55f32138c578a \ - --hash=sha256:0e563e54979e97b6d13f1bbc05a96109923e76b901f786a5eae36e99c01237bd \ - --hash=sha256:16e603a3bff50db08cd578d54f07032ca1631450ceb972c2f834c2b860c28ea2 \ - --hash=sha256:288cd628406cc53f9a541cfaf06041b4c71d751856bab45e3702191f931ccd17 \ - --hash=sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8 \ - --hash=sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3 \ - --hash=sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5 \ - --hash=sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da \ - --hash=sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0 \ - --hash=sha256:40a5ec98d3f49904b9fe36827dcf1aadfef3b89e2bd05b0e35e94f97c2b14721 \ - --hash=sha256:40b0f7fe4fd38e6a507bdb751db0379df1e99120c65fbdc8ee6c1d044897a636 \ - --hash=sha256:40dc6a8e399e15ea525305a2ddba998b0af5caa2566bcd79dcbe8948181eeaff \ - --hash=sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0 \ - --hash=sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071 \ - --hash=sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c \ - --hash=sha256:59e724f8b332319e2875efd360e61ac07f33b492889284a3e05e6d13746876f4 \ - --hash=sha256:69422b7f458c5af875922cdb5bd586cc1f1033295aa9ff63ee196a87519ac8e1 \ - --hash=sha256:703c346571fa50d2e9856a37d7cd9435a25e7fd15e236c397bf224afaa355fe9 \ - --hash=sha256:85071a1e8c2d051b507161f6c3e26155b5c790e4e28d7f236422dbacc2a9cc44 \ - --hash=sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083 \ - --hash=sha256:85797e37e8eeaa5439d33e556662cc370e474445d5fab24dcadc65a8ffb04003 \ - --hash=sha256:90d96a385fa941283ebd231464045187a31ad932ebfa541be8edf5b3c2328959 \ - --hash=sha256:94978a49b8f4569ad607cd4946b759d90b285e39c0d4640c6b36ca7a3ddf2efc \ - --hash=sha256:aafe0f1918ed07b67c1e838f950b1c1fabc683030477e60b335649b8020e1076 \ - --hash=sha256:ab9ba8dcf59de5181f6be44a77458e45a578fc99c31510b8c65b7d5acc3cf490 \ - --hash=sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660 \ - --hash=sha256:b799de31416ecc589ad79dd85a0b2657a8fe39327944998dea368c1d4c9e55e6 \ - --hash=sha256:c26f313951f6e26147833fc923f78f95604bbec812a43e5ee37f26dc9e5a686c \ - --hash=sha256:ca80b7485c76f768a3bc83ea58373f8db7b015551117375e4918e2aa77ea9b50 \ - --hash=sha256:d1ffd262a73d7c28424252381a5b854c19d9de5f56f075445d33919a637e3547 \ - --hash=sha256:d3f0d369e7ffbe59c4b6116a44d6a8eb4783aae027f2c0b366cf0aa964185dba \ - --hash=sha256:d54efd20338ac52ba31e7da78e4a72570cf729fac82bc31ff9199bedf1dc7440 \ - --hash=sha256:dacdd3d10ea1b4ca9df97a0a303cbacafc04b5cd375fa98732678151643d4988 \ - --hash=sha256:db353d22843cf1028f43c3651581e4bb49374d85692a85f95f7b9a130e1b2cab \ - --hash=sha256:db78cb9ca56b59b016e64b6031eda5653be0589dba2b1b43453f6e8b405a0970 \ - --hash=sha256:deee0e3343f98ee8047e9f4c5bc7cedbf69f5734454a94c38ee829fb2d5fa3c1 \ - --hash=sha256:df017d6c780287d5c80601dafa31f17bddb170232d85c066604d8558683711a2 \ - --hash=sha256:df959752a0c2748a65ab5387d08287abf6779ae9165916fe053e68ae1fbdc47f \ - --hash=sha256:ec4f178901fa1834d4a060320d2f3abc5c9e39766953d038f1458cb885f47e81 \ - --hash=sha256:f47f8ed67cc0ff862b84a1189831d1d33c963fb3ce1ee0c65d3b0cbe7b711069 \ - --hash=sha256:f8787367fbdfccae38e35abf7641dafc5310310a5987b689f4c32cc8cc3ee975 \ - --hash=sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f \ - --hash=sha256:fc411e1c0a7dcd2f902c7c48cf079947a7e65b5485dea9decb82b9105ca71a43 +httptools==0.6.4 # via uvicorn -httpx==0.27.2 \ - --hash=sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0 \ - --hash=sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2 +httpx==0.27.2 # via openai -idna==3.10 \ - --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ - --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 +idna==3.10 # via # anyio # email-validator # httpx # requests # yarl -importlib-metadata==8.5.0 \ - --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ - --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 +importlib-metadata==8.5.0 # via opentelemetry-api -isodate==0.7.2 \ - --hash=sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15 \ - --hash=sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6 +isodate==0.7.2 # via # azure-ai-translation-text # azure-appconfiguration - # azure-communication-callautomation # azure-eventgrid # azure-search-documents # azure-storage-queue # msrest -jinja2==3.1.4 \ - --hash=sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369 \ - --hash=sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d +jinja2==3.1.4 # via call-center-ai (pyproject.toml) -jiter==0.7.0 \ - --hash=sha256:0cf5d42beb3514236459454e3287db53d9c4d56c4ebaa3e9d0efe81b19495129 \ - --hash=sha256:15cf691ebd8693b70c94627d6b748f01e6d697d9a6e9f2bc310934fcfb7cf25e \ - --hash=sha256:17ecb1a578a56e97a043c72b463776b5ea30343125308f667fb8fce4b3796735 \ - --hash=sha256:189cc4262a92e33c19d4fd24018f5890e4e6da5b2581f0059938877943f8298c \ - --hash=sha256:1d89008fb47043a469f97ad90840b97ba54e7c3d62dc7cbb6cbf938bd0caf71d \ - --hash=sha256:2221d5603c139f6764c54e37e7c6960c469cbcd76928fb10d15023ba5903f94b \ - --hash=sha256:243f38eb4072763c54de95b14ad283610e0cd3bf26393870db04e520f60eebb3 \ - --hash=sha256:24cecd18df540963cd27c08ca5ce1d0179f229ff78066d9eecbe5add29361340 \ - --hash=sha256:2791604acef33da6b72d5ecf885a32384bcaf9aa1e4be32737f3b8b9588eef6a \ - --hash=sha256:2ec05b1615f96cc3e4901678bc863958611584072967d9962f9e571d60711d52 \ - --hash=sha256:3ca7c287da9c1d56dda88da1d08855a787dbb09a7e2bd13c66a2e288700bd7c7 \ - --hash=sha256:41d15ccc53931c822dd7f1aebf09faa3cda2d7b48a76ef304c7dbc19d1302e51 \ - --hash=sha256:43a87a9f586636e1f0dd3651a91f79b491ea0d9fd7cbbf4f5c463eebdc48bda7 \ - --hash=sha256:48592c26ea72d3e71aa4bea0a93454df907d80638c3046bb0705507b6704c0d7 \ - --hash=sha256:4a8e2d866e7eda19f012444e01b55079d8e1c4c30346aaac4b97e80c54e2d6d3 \ - --hash=sha256:571feae3e7c901a8eedde9fd2865b0dfc1432fb15cab8c675a8444f7d11b7c5d \ - --hash=sha256:63ee47a149d698796a87abe445fc8dee21ed880f09469700c76c8d84e0d11efd \ - --hash=sha256:662d5d3cca58ad6af7a3c6226b641c8655de5beebcb686bfde0df0f21421aafa \ - --hash=sha256:6d77449d2738cf74752bb35d75ee431af457e741124d1db5e112890023572c7c \ - --hash=sha256:6e46a63c7f877cf7441ffc821c28287cfb9f533ae6ed707bde15e7d4dfafa7ae \ - --hash=sha256:7417c2b928062c496f381fb0cb50412eee5ad1d8b53dbc0e011ce45bb2de522c \ - --hash=sha256:79fef541199bd91cfe8a74529ecccb8eaf1aca38ad899ea582ebbd4854af1e51 \ - --hash=sha256:7b6045fa0527129218cdcd8a8b839f678219686055f31ebab35f87d354d9c36e \ - --hash=sha256:7ba426fa7ff21cb119fa544b75dd3fbee6a70e55a5829709c0338d07ccd30e6d \ - --hash=sha256:7ea52a8a0ff0229ab2920284079becd2bae0688d432fca94857ece83bb49c541 \ - --hash=sha256:836f03dea312967635233d826f783309b98cfd9ccc76ac776e224cfcef577862 \ - --hash=sha256:897745f230350dcedb8d1ebe53e33568d48ea122c25e6784402b6e4e88169be7 \ - --hash=sha256:8e7a7a00b6f9f18289dd563596f97ecaba6c777501a8ba04bf98e03087bcbc60 \ - --hash=sha256:90443994bbafe134f0b34201dad3ebe1c769f0599004084e046fb249ad912425 \ - --hash=sha256:91cec0ad755bd786c9f769ce8d843af955df6a8e56b17658771b2d5cb34a3ff8 \ - --hash=sha256:979ec4711c2e37ac949561858bd42028884c9799516a923e1ff0b501ef341a4a \ - --hash=sha256:997706c683195eeff192d2e5285ce64d2a610414f37da3a3f2625dcf8517cf90 \ - --hash=sha256:9aaf564094c7db8687f2660605e099f3d3e6ea5e7135498486674fcb78e29165 \ - --hash=sha256:9c62c737b5368e51e74960a08fe1adc807bd270227291daede78db24d5fbf556 \ - --hash=sha256:9dcd54fa422fb66ca398bec296fed5f58e756aa0589496011cfea2abb5be38a5 \ - --hash=sha256:a282e1e8a396dabcea82d64f9d05acf7efcf81ecdd925b967020dcb0e671c103 \ - --hash=sha256:a4d27e09825c1b3c7a667adb500ce8b840e8fc9f630da8454b44cdd4fb0081bb \ - --hash=sha256:a5cb97e35370bde7aa0d232a7f910f5a0fbbc96bc0a7dbaa044fd5cd6bcd7ec3 \ - --hash=sha256:a8203519907a1d81d6cb00902c98e27c2d0bf25ce0323c50ca594d30f5f1fbcf \ - --hash=sha256:a8af4df8a262fa2778b68c2a03b6e9d1cb4d43d02bea6976d46be77a3a331af1 \ - --hash=sha256:a8b16c35c846a323ce9067170d5ab8c31ea3dbcab59c4f7608bbbf20c2c3b43f \ - --hash=sha256:a9d866ec066c3616cacb8535dbda38bb1d470b17b25f0317c4540182bc886ce2 \ - --hash=sha256:abf596f951370c648f37aa9899deab296c42a3829736e598b0dd10b08f77a44d \ - --hash=sha256:ac7930bcaaeb1e229e35c91c04ed2e9f39025b86ee9fc3141706bbf6fff4aeeb \ - --hash=sha256:aca4d950863b1c238e315bf159466e064c98743eef3bd0ff9617e48ff63a4715 \ - --hash=sha256:ae60ec89037a78d60bbf3d8b127f1567769c8fa24886e0abed3f622791dea478 \ - --hash=sha256:b160db0987171365c153e406a45dcab0ee613ae3508a77bfff42515cb4ce4d6e \ - --hash=sha256:b5be919bacd73ca93801c3042bce6e95cb9c555a45ca83617b9b6c89df03b9c2 \ - --hash=sha256:b928c76a422ef3d0c85c5e98c498ce3421b313c5246199541e125b52953e1bc0 \ - --hash=sha256:bd028d4165097a611eb0c7494d8c1f2aebd46f73ca3200f02a175a9c9a6f22f5 \ - --hash=sha256:c061d9738535497b5509f8970584f20de1e900806b239a39a9994fc191dad630 \ - --hash=sha256:c07f55a64912b0c7982377831210836d2ea92b7bd343fca67a32212dd72e38e0 \ - --hash=sha256:c138414839effbf30d185e30475c6dc8a16411a1e3681e5fd4605ab1233ac67a \ - --hash=sha256:c6b487247c7836810091e9455efe56a52ec51bfa3a222237e1587d04d3e04527 \ - --hash=sha256:c9b669ff6f8ba08270dee9ccf858d3b0203b42314a428a1676762f2d390fbb64 \ - --hash=sha256:c9e82daaa1b0a68704f9029b81e664a5a9de3e466c2cbaabcda5875f961702e7 \ - --hash=sha256:cb316dacaf48c8c187cea75d0d7f835f299137e6fdd13f691dff8f92914015c7 \ - --hash=sha256:cc5190ea1113ee6f7252fa8a5fe5a6515422e378356c950a03bbde5cafbdbaab \ - --hash=sha256:cc989951f73f9375b8eacd571baaa057f3d7d11b7ce6f67b9d54642e7475bfad \ - --hash=sha256:d1c8d91e0f0bd78602eaa081332e8ee4f512c000716f5bc54e9a037306d693a7 \ - --hash=sha256:d1ef6bb66041f2514739240568136c81b9dcc64fd14a43691c17ea793b6535c0 \ - --hash=sha256:d41b46236b90b043cca73785674c23d2a67d16f226394079d0953f94e765ed76 \ - --hash=sha256:db19a6d160f093cbc8cd5ea2abad420b686f6c0e5fb4f7b41941ebc6a4f83cda \ - --hash=sha256:db7a8d99fc5f842f7d2852f06ccaed066532292c41723e5dff670c339b649f88 \ - --hash=sha256:e14027f61101b3f5e173095d9ecf95c1cac03ffe45a849279bde1d97e559e314 \ - --hash=sha256:e4640722b1bef0f6e342fe4606aafaae0eb4f4be5c84355bb6867f34400f6688 \ - --hash=sha256:e6d28a92f28814e1a9f2824dc11f4e17e1df1f44dc4fdeb94c5450d34bcb2602 \ - --hash=sha256:ebc30ae2ce4bc4986e1764c404b4ea1924f926abf02ce92516485098f8545374 \ - --hash=sha256:ed27b2c43e1b5f6c7fedc5c11d4d8bfa627de42d1143d87e39e2e83ddefd861a \ - --hash=sha256:f367488c3b9453eab285424c61098faa1cab37bb49425e69c8dca34f2dfe7d69 \ - --hash=sha256:f9abf464f9faac652542ce8360cea8e68fba2b78350e8a170248f9bcc228702a \ - --hash=sha256:feba70a28a27d962e353e978dbb6afd798e711c04cb0b4c5e77e9d3779033a1a \ - --hash=sha256:febf3179b2fabf71fbd2fd52acb8594163bb173348b388649567a548f356dbf6 +jiter==0.7.1 # via openai -json-repair==0.30.1 \ - --hash=sha256:5f075c4e3b098d78fb6cd60c34aec07a4517f14e9d423ad5364214b0e870e218 \ - --hash=sha256:6fa8a05d246e282df2f812fa542bd837d671d7774eaae11191aabaac97d41e33 +json-repair==0.30.1 # via call-center-ai (pyproject.toml) -markupsafe==3.0.2 \ - --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ - --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ - --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ - --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ - --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ - --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ - --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ - --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ - --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ - --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ - --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ - --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ - --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ - --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ - --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ - --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ - --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ - --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ - --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ - --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ - --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ - --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ - --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ - --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ - --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ - --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ - --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ - --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ - --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ - --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ - --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ - --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ - --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ - --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ - --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ - --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ - --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ - --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ - --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ - --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ - --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ - --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ - --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ - --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ - --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ - --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ - --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ - --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ - --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ - --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ - --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ - --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ - --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ - --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ - --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ - --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ - --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ - --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ - --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ - --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ - --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 +markupsafe==3.0.2 # via jinja2 -mistune==3.0.2 \ - --hash=sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205 \ - --hash=sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8 +mistune==3.0.2 # via call-center-ai (pyproject.toml) -msal==1.31.0 \ - --hash=sha256:2c4f189cf9cc8f00c80045f66d39b7c0f3ed45873fd3d1f2af9f22db2e12ff4b \ - --hash=sha256:96bc37cff82ebe4b160d5fc0f1196f6ca8b50e274ecd0ec5bf69c438514086e7 +msal==1.31.0 # via # azure-identity # msal-extensions -msal-extensions==1.2.0 \ - --hash=sha256:6f41b320bfd2933d631a215c91ca0dd3e67d84bd1a2f50ce917d5874ec646bef \ - --hash=sha256:cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d +msal-extensions==1.2.0 # via azure-identity -msrest==0.7.1 \ - --hash=sha256:21120a810e1233e5e6cc7fe40b474eeb4ec6f757a15d7cf86702c369f9567c32 \ - --hash=sha256:6e7661f46f3afd88b75667b7187a92829924446c7ea1d169be8c4bb7eeb788b9 +msrest==0.7.1 # via + # azure-communication-callautomation # azure-communication-sms # azure-monitor-opentelemetry-exporter -multidict==6.1.0 \ - --hash=sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f \ - --hash=sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056 \ - --hash=sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761 \ - --hash=sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3 \ - --hash=sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b \ - --hash=sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6 \ - --hash=sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748 \ - --hash=sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966 \ - --hash=sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f \ - --hash=sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1 \ - --hash=sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6 \ - --hash=sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada \ - --hash=sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305 \ - --hash=sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2 \ - --hash=sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d \ - --hash=sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a \ - --hash=sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef \ - --hash=sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c \ - --hash=sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb \ - --hash=sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60 \ - --hash=sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6 \ - --hash=sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4 \ - --hash=sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478 \ - --hash=sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81 \ - --hash=sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7 \ - --hash=sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56 \ - --hash=sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3 \ - --hash=sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6 \ - --hash=sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30 \ - --hash=sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb \ - --hash=sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506 \ - --hash=sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0 \ - --hash=sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925 \ - --hash=sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c \ - --hash=sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6 \ - --hash=sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e \ - --hash=sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95 \ - --hash=sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2 \ - --hash=sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133 \ - --hash=sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2 \ - --hash=sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa \ - --hash=sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3 \ - --hash=sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3 \ - --hash=sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436 \ - --hash=sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657 \ - --hash=sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581 \ - --hash=sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492 \ - --hash=sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43 \ - --hash=sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2 \ - --hash=sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2 \ - --hash=sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926 \ - --hash=sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057 \ - --hash=sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc \ - --hash=sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80 \ - --hash=sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255 \ - --hash=sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1 \ - --hash=sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972 \ - --hash=sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53 \ - --hash=sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1 \ - --hash=sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423 \ - --hash=sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a \ - --hash=sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160 \ - --hash=sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c \ - --hash=sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd \ - --hash=sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa \ - --hash=sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5 \ - --hash=sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b \ - --hash=sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa \ - --hash=sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef \ - --hash=sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44 \ - --hash=sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4 \ - --hash=sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156 \ - --hash=sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753 \ - --hash=sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28 \ - --hash=sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d \ - --hash=sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a \ - --hash=sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304 \ - --hash=sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008 \ - --hash=sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429 \ - --hash=sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72 \ - --hash=sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399 \ - --hash=sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3 \ - --hash=sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392 \ - --hash=sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167 \ - --hash=sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c \ - --hash=sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774 \ - --hash=sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351 \ - --hash=sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76 \ - --hash=sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875 \ - --hash=sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd \ - --hash=sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28 \ - --hash=sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db +multidict==6.1.0 # via # aiohttp # yarl -oauthlib==3.2.2 \ - --hash=sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca \ - --hash=sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918 +oauthlib==3.2.2 # via requests-oauthlib -openai==1.54.3 \ - --hash=sha256:7511b74eeb894ac0b0253dc71f087a15d2e4d71d22d0088767205143d880cca6 \ - --hash=sha256:f18dbaf09c50d70c4185b892a2a553f80681d1d866323a2da7f7be2f688615d5 +openai==1.54.3 # via call-center-ai (pyproject.toml) -opentelemetry-api==1.28.1 \ - --hash=sha256:6fa7295a12c707f5aebef82da3d9ec5afe6992f3e42bfe7bec0339a44b3518e7 \ - --hash=sha256:bfe86c95576cf19a914497f439fd79c9553a38de0adbdc26f7cfc46b0c00b16c +opentelemetry-api==1.28.1 # via # azure-core-tracing-opentelemetry # azure-monitor-opentelemetry-exporter @@ -1076,9 +205,7 @@ opentelemetry-api==1.28.1 \ # opentelemetry-instrumentation-wsgi # opentelemetry-sdk # opentelemetry-semantic-conventions -opentelemetry-instrumentation==0.49b1 \ - --hash=sha256:0a9d3821736104013693ef3b8a9d29b41f2f3a81ee2d8c9288b52d62bae5747c \ - --hash=sha256:2d0e41181b7957ba061bb436b969ad90545ac3eba65f290830009b4264d2824e +opentelemetry-instrumentation==0.49b1 # via # opentelemetry-instrumentation-aiohttp-client # opentelemetry-instrumentation-asgi @@ -1095,84 +222,48 @@ opentelemetry-instrumentation==0.49b1 \ # opentelemetry-instrumentation-urllib # opentelemetry-instrumentation-urllib3 # opentelemetry-instrumentation-wsgi -opentelemetry-instrumentation-aiohttp-client==0.49b1 \ - --hash=sha256:91692efba6cb1ac532745308bc374dfbeda7f95fcf953cbdc51062b38c49eb04 \ - --hash=sha256:b94c70c109e45fafd4be752f0186d08ede92023fe1352dc043f796347521c672 +opentelemetry-instrumentation-aiohttp-client==0.49b1 # via call-center-ai (pyproject.toml) -opentelemetry-instrumentation-asgi==0.49b1 \ - --hash=sha256:8dcbc438cb138789fcb20ae38b6e7f23088e066d77b54bae205c5744856603c6 \ - --hash=sha256:d1a2b4cb76490be28bcad3c0f562c4b3c84157148c922ca298bb04ed9e36c005 +opentelemetry-instrumentation-asgi==0.49b1 # via opentelemetry-instrumentation-fastapi -opentelemetry-instrumentation-dbapi==0.49b1 \ - --hash=sha256:aa19a0dc96a127b155778b7c3aa58d1db100e3c1b4be2b61cd7aa318af9079cd \ - --hash=sha256:ff4fc87f6b6a8fd40bb383efabcdb94078ff6fc7e8f8bf1c501256fb4e8064ed +opentelemetry-instrumentation-dbapi==0.49b1 # via # opentelemetry-instrumentation-psycopg2 # opentelemetry-instrumentation-sqlite3 -opentelemetry-instrumentation-django==0.49b1 \ - --hash=sha256:4a997d1c18d7e81e28d2b7041223c30dc8a60dbc572ade2a20a048fbdc5bbae9 \ - --hash=sha256:79795c46061a298556ae023a71ae47ea2c8c8f715266b0f1dba9f3d7f7018785 +opentelemetry-instrumentation-django==0.49b1 # via azure-monitor-opentelemetry -opentelemetry-instrumentation-fastapi==0.49b1 \ - --hash=sha256:13d9d4d70b4bb831468b8e40807353731cad7fbfaeedde0070d93bcb2c417b07 \ - --hash=sha256:3398940102c8ef613b9c55fc4f179cc92413de456f6bec6eeb1995270de2b087 +opentelemetry-instrumentation-fastapi==0.49b1 # via azure-monitor-opentelemetry -opentelemetry-instrumentation-flask==0.49b1 \ - --hash=sha256:97a91f1539fb841f774fd3e9545b0f11707e4b7d48083aa51e27fb6d527615dc \ - --hash=sha256:e3abb8aaccb86372bfddaa894fa9b4c6cc8c1ac2e023e0bb64c97f07d9df3d28 +opentelemetry-instrumentation-flask==0.49b1 # via azure-monitor-opentelemetry -opentelemetry-instrumentation-httpx==0.49b1 \ - --hash=sha256:7c620c6dd8e5fecddc5a8bb5f5cc1c4c758a031b13703e75cbb8e5abdd4297de \ - --hash=sha256:82285093b68bf0dc89e424f4c201c9524f0d29b9ba326fb0993721e358617710 +opentelemetry-instrumentation-httpx==0.49b1 # via call-center-ai (pyproject.toml) -opentelemetry-instrumentation-openai==0.33.11 \ - --hash=sha256:9289f8c4e0989fae95549840d45f797a1269899b5d4264bdf0be356b8f7c3f7e \ - --hash=sha256:bacb7fb8facb2c45076437c5b3e526fda486db3b76edbb01b18e4e133b70eed0 +opentelemetry-instrumentation-openai==0.33.11 # via call-center-ai (pyproject.toml) -opentelemetry-instrumentation-psycopg2==0.49b1 \ - --hash=sha256:6472cd8cea96f14c979a3a7b799f8d3cc7ebb615bcd2a725a6f82eeda0b71d55 \ - --hash=sha256:de986a39f98d86a4193ed1b69f744333daae28d9706eeb7408fddebebad836d7 +opentelemetry-instrumentation-psycopg2==0.49b1 # via azure-monitor-opentelemetry -opentelemetry-instrumentation-redis==0.49b1 \ - --hash=sha256:3aa468ac87b15e4877c5d1d241e4b227bfdb61221bcbef20d73659bffb837fac \ - --hash=sha256:99031026a65c86bdfc5498775186b73178246a0c69f5f7189abcddb7b2e71654 +opentelemetry-instrumentation-redis==0.49b1 # via call-center-ai (pyproject.toml) -opentelemetry-instrumentation-requests==0.49b1 \ - --hash=sha256:329726afd607e1078e80bc2fb43741bd73e77c2d36804d9250d965858df8bd36 \ - --hash=sha256:4a7f8321f9cca5b4da3a96b63dde0c7a41775302f4e9e0267a775f9800efac59 +opentelemetry-instrumentation-requests==0.49b1 # via azure-monitor-opentelemetry -opentelemetry-instrumentation-sqlite3==0.49b1 \ - --hash=sha256:635338d78bb83c542e44e8c0a7d0eb5a0f23f047eccd443b14914f2440b181d8 \ - --hash=sha256:7e359dec019bd06cdf0aef3a87689301a961ae04b5bff0f7a4e3eb30b6d184f6 +opentelemetry-instrumentation-sqlite3==0.49b1 # via call-center-ai (pyproject.toml) -opentelemetry-instrumentation-urllib==0.49b1 \ - --hash=sha256:0baf74dc2ca613d6d78751f303cc0855580fca166082610e57eed3dc374ca8fb \ - --hash=sha256:8cba9b9da5071ef4e305a43b12d482dd11d6c9a9807242cfafce31b1aed0d4e8 +opentelemetry-instrumentation-urllib==0.49b1 # via azure-monitor-opentelemetry -opentelemetry-instrumentation-urllib3==0.49b1 \ - --hash=sha256:731b79158e21bf1cf8c88fb1b1acba8776ebec9d86a364f72c889fc83aafc12c \ - --hash=sha256:bdf43b010ee1f2ff4a1db3a31ea4eaff74012f987e2f9ad1ffdbf83888d3a8d7 +opentelemetry-instrumentation-urllib3==0.49b1 # via azure-monitor-opentelemetry -opentelemetry-instrumentation-wsgi==0.49b1 \ - --hash=sha256:6ab07115dc5c38f9c5b368e1ae4d9741cddeeef857ad01b211ee314a72ffdbea \ - --hash=sha256:e1dd9a6e10b0a4baa1afd17c75b0836f9e3fd1d40c3d0d5287e898d49436ac34 +opentelemetry-instrumentation-wsgi==0.49b1 # via # opentelemetry-instrumentation-django # opentelemetry-instrumentation-flask -opentelemetry-resource-detector-azure==0.1.5 \ - --hash=sha256:4dcc5d54ab5c3b11226af39509bc98979a8b9e0f8a24c1b888783755d3bf00eb \ - --hash=sha256:e0ba658a87c69eebc806e75398cd0e9f68a8898ea62de99bc1b7083136403710 +opentelemetry-resource-detector-azure==0.1.5 # via azure-monitor-opentelemetry -opentelemetry-sdk==1.28.1 \ - --hash=sha256:100fa371b2046ffba6a340c18f0b2a0463acad7461e5177e126693b613a6ca57 \ - --hash=sha256:72aad7f5fcbe37113c4ab4899f6cdeb6ac77ed3e62f25a85e3627b12583dad0f +opentelemetry-sdk==1.28.1 # via # azure-monitor-opentelemetry # azure-monitor-opentelemetry-exporter # opentelemetry-resource-detector-azure -opentelemetry-semantic-conventions==0.49b1 \ - --hash=sha256:91817883b159ffb94c2ca9548509c4fe0aafce7c24f437aa6ac3fc613aa9a758 \ - --hash=sha256:dd6f3ac8169d2198c752e1a63f827e5f5e110ae9b0ce33f2aad9a3baf0739743 +opentelemetry-semantic-conventions==0.49b1 # via # call-center-ai (pyproject.toml) # opentelemetry-instrumentation @@ -1190,13 +281,9 @@ opentelemetry-semantic-conventions==0.49b1 \ # opentelemetry-instrumentation-urllib3 # opentelemetry-instrumentation-wsgi # opentelemetry-sdk -opentelemetry-semantic-conventions-ai==0.4.2 \ - --hash=sha256:0a5432aacd441eb7dbdf62e0de3f3d90ed4f69595b687a6dd2ccc4c5b94c5861 \ - --hash=sha256:90b969c7d838e03e30a9150ffe46543d8e58e9d7370c7221fd30d4ce4d7a1b96 +opentelemetry-semantic-conventions-ai==0.4.2 # via opentelemetry-instrumentation-openai -opentelemetry-util-http==0.49b1 \ - --hash=sha256:0290b942f7888b6310df6803e52e12f4043b8f224db0659f62dc7b70059eb94f \ - --hash=sha256:6c2bc6f7e20e286dbdfcccb9d895fa290ec9d7c596cdf2e06bf1d8e434b2edd0 +opentelemetry-util-http==0.49b1 # via # opentelemetry-instrumentation-aiohttp-client # opentelemetry-instrumentation-asgi @@ -1208,486 +295,62 @@ opentelemetry-util-http==0.49b1 \ # opentelemetry-instrumentation-urllib # opentelemetry-instrumentation-urllib3 # opentelemetry-instrumentation-wsgi -packaging==24.2 \ - --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \ - --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f +packaging==24.2 # via # gunicorn # opentelemetry-instrumentation # opentelemetry-instrumentation-flask -phonenumbers==8.13.49 \ - --hash=sha256:e17140955ab3d8f9580727372ea64c5ada5327932d6021ef6fd203c3db8c8139 \ - --hash=sha256:e608ccb61f0bd42e6db1d2c421f7c22186b88f494870bf40aa31d1a2718ab0ae +phonenumbers==8.13.49 # via call-center-ai (pyproject.toml) -portalocker==2.10.1 \ - --hash=sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf \ - --hash=sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f +portalocker==2.10.1 # via msal-extensions -propcache==0.2.0 \ - --hash=sha256:00181262b17e517df2cd85656fcd6b4e70946fe62cd625b9d74ac9977b64d8d9 \ - --hash=sha256:0e53cb83fdd61cbd67202735e6a6687a7b491c8742dfc39c9e01e80354956763 \ - --hash=sha256:1235c01ddaa80da8235741e80815ce381c5267f96cc49b1477fdcf8c047ef325 \ - --hash=sha256:140fbf08ab3588b3468932974a9331aff43c0ab8a2ec2c608b6d7d1756dbb6cb \ - --hash=sha256:191db28dc6dcd29d1a3e063c3be0b40688ed76434622c53a284e5427565bbd9b \ - --hash=sha256:1e41d67757ff4fbc8ef2af99b338bfb955010444b92929e9e55a6d4dcc3c4f09 \ - --hash=sha256:1ec43d76b9677637a89d6ab86e1fef70d739217fefa208c65352ecf0282be957 \ - --hash=sha256:20a617c776f520c3875cf4511e0d1db847a076d720714ae35ffe0df3e440be68 \ - --hash=sha256:218db2a3c297a3768c11a34812e63b3ac1c3234c3a086def9c0fee50d35add1f \ - --hash=sha256:22aa8f2272d81d9317ff5756bb108021a056805ce63dd3630e27d042c8092798 \ - --hash=sha256:25a1f88b471b3bc911d18b935ecb7115dff3a192b6fef46f0bfaf71ff4f12418 \ - --hash=sha256:25c8d773a62ce0451b020c7b29a35cfbc05de8b291163a7a0f3b7904f27253e6 \ - --hash=sha256:2a60ad3e2553a74168d275a0ef35e8c0a965448ffbc3b300ab3a5bb9956c2162 \ - --hash=sha256:2a66df3d4992bc1d725b9aa803e8c5a66c010c65c741ad901e260ece77f58d2f \ - --hash=sha256:2ccc28197af5313706511fab3a8b66dcd6da067a1331372c82ea1cb74285e036 \ - --hash=sha256:2e900bad2a8456d00a113cad8c13343f3b1f327534e3589acc2219729237a2e8 \ - --hash=sha256:2ee7606193fb267be4b2e3b32714f2d58cad27217638db98a60f9efb5efeccc2 \ - --hash=sha256:33ac8f098df0585c0b53009f039dfd913b38c1d2edafed0cedcc0c32a05aa110 \ - --hash=sha256:3444cdba6628accf384e349014084b1cacd866fbb88433cd9d279d90a54e0b23 \ - --hash=sha256:363ea8cd3c5cb6679f1c2f5f1f9669587361c062e4899fce56758efa928728f8 \ - --hash=sha256:375a12d7556d462dc64d70475a9ee5982465fbb3d2b364f16b86ba9135793638 \ - --hash=sha256:388f3217649d6d59292b722d940d4d2e1e6a7003259eb835724092a1cca0203a \ - --hash=sha256:3947483a381259c06921612550867b37d22e1df6d6d7e8361264b6d037595f44 \ - --hash=sha256:39e104da444a34830751715f45ef9fc537475ba21b7f1f5b0f4d71a3b60d7fe2 \ - --hash=sha256:3c997f8c44ec9b9b0bcbf2d422cc00a1d9b9c681f56efa6ca149a941e5560da2 \ - --hash=sha256:3dfafb44f7bb35c0c06eda6b2ab4bfd58f02729e7c4045e179f9a861b07c9850 \ - --hash=sha256:3ebbcf2a07621f29638799828b8d8668c421bfb94c6cb04269130d8de4fb7136 \ - --hash=sha256:3f88a4095e913f98988f5b338c1d4d5d07dbb0b6bad19892fd447484e483ba6b \ - --hash=sha256:439e76255daa0f8151d3cb325f6dd4a3e93043e6403e6491813bcaaaa8733887 \ - --hash=sha256:4569158070180c3855e9c0791c56be3ceeb192defa2cdf6a3f39e54319e56b89 \ - --hash=sha256:466c219deee4536fbc83c08d09115249db301550625c7fef1c5563a584c9bc87 \ - --hash=sha256:4a9d9b4d0a9b38d1c391bb4ad24aa65f306c6f01b512e10a8a34a2dc5675d348 \ - --hash=sha256:4c7dde9e533c0a49d802b4f3f218fa9ad0a1ce21f2c2eb80d5216565202acab4 \ - --hash=sha256:53d1bd3f979ed529f0805dd35ddaca330f80a9a6d90bc0121d2ff398f8ed8861 \ - --hash=sha256:55346705687dbd7ef0d77883ab4f6fabc48232f587925bdaf95219bae072491e \ - --hash=sha256:56295eb1e5f3aecd516d91b00cfd8bf3a13991de5a479df9e27dd569ea23959c \ - --hash=sha256:56bb5c98f058a41bb58eead194b4db8c05b088c93d94d5161728515bd52b052b \ - --hash=sha256:5a5b3bb545ead161be780ee85a2b54fdf7092815995661947812dde94a40f6fb \ - --hash=sha256:5f2564ec89058ee7c7989a7b719115bdfe2a2fb8e7a4543b8d1c0cc4cf6478c1 \ - --hash=sha256:608cce1da6f2672a56b24a015b42db4ac612ee709f3d29f27a00c943d9e851de \ - --hash=sha256:63f13bf09cc3336eb04a837490b8f332e0db41da66995c9fd1ba04552e516354 \ - --hash=sha256:662dd62358bdeaca0aee5761de8727cfd6861432e3bb828dc2a693aa0471a563 \ - --hash=sha256:676135dcf3262c9c5081cc8f19ad55c8a64e3f7282a21266d05544450bffc3a5 \ - --hash=sha256:67aeb72e0f482709991aa91345a831d0b707d16b0257e8ef88a2ad246a7280bf \ - --hash=sha256:67b69535c870670c9f9b14a75d28baa32221d06f6b6fa6f77a0a13c5a7b0a5b9 \ - --hash=sha256:682a7c79a2fbf40f5dbb1eb6bfe2cd865376deeac65acf9beb607505dced9e12 \ - --hash=sha256:6994984550eaf25dd7fc7bd1b700ff45c894149341725bb4edc67f0ffa94efa4 \ - --hash=sha256:69d3a98eebae99a420d4b28756c8ce6ea5a29291baf2dc9ff9414b42676f61d5 \ - --hash=sha256:6e2e54267980349b723cff366d1e29b138b9a60fa376664a157a342689553f71 \ - --hash=sha256:73e4b40ea0eda421b115248d7e79b59214411109a5bc47d0d48e4c73e3b8fcf9 \ - --hash=sha256:74acd6e291f885678631b7ebc85d2d4aec458dd849b8c841b57ef04047833bed \ - --hash=sha256:7665f04d0c7f26ff8bb534e1c65068409bf4687aa2534faf7104d7182debb336 \ - --hash=sha256:7735e82e3498c27bcb2d17cb65d62c14f1100b71723b68362872bca7d0913d90 \ - --hash=sha256:77a86c261679ea5f3896ec060be9dc8e365788248cc1e049632a1be682442063 \ - --hash=sha256:7cf18abf9764746b9c8704774d8b06714bcb0a63641518a3a89c7f85cc02c2ad \ - --hash=sha256:83928404adf8fb3d26793665633ea79b7361efa0287dfbd372a7e74311d51ee6 \ - --hash=sha256:8e40876731f99b6f3c897b66b803c9e1c07a989b366c6b5b475fafd1f7ba3fb8 \ - --hash=sha256:8f188cfcc64fb1266f4684206c9de0e80f54622c3f22a910cbd200478aeae61e \ - --hash=sha256:91997d9cb4a325b60d4e3f20967f8eb08dfcb32b22554d5ef78e6fd1dda743a2 \ - --hash=sha256:91ee8fc02ca52e24bcb77b234f22afc03288e1dafbb1f88fe24db308910c4ac7 \ - --hash=sha256:92fe151145a990c22cbccf9ae15cae8ae9eddabfc949a219c9f667877e40853d \ - --hash=sha256:945db8ee295d3af9dbdbb698cce9bbc5c59b5c3fe328bbc4387f59a8a35f998d \ - --hash=sha256:9517d5e9e0731957468c29dbfd0f976736a0e55afaea843726e887f36fe017df \ - --hash=sha256:952e0d9d07609d9c5be361f33b0d6d650cd2bae393aabb11d9b719364521984b \ - --hash=sha256:97a58a28bcf63284e8b4d7b460cbee1edaab24634e82059c7b8c09e65284f178 \ - --hash=sha256:97e48e8875e6c13909c800fa344cd54cc4b2b0db1d5f911f840458a500fde2c2 \ - --hash=sha256:9e0f07b42d2a50c7dd2d8675d50f7343d998c64008f1da5fef888396b7f84630 \ - --hash=sha256:a3dc1a4b165283bd865e8f8cb5f0c64c05001e0718ed06250d8cac9bec115b48 \ - --hash=sha256:a3ebe9a75be7ab0b7da2464a77bb27febcb4fab46a34f9288f39d74833db7f61 \ - --hash=sha256:a64e32f8bd94c105cc27f42d3b658902b5bcc947ece3c8fe7bc1b05982f60e89 \ - --hash=sha256:a6ed8db0a556343d566a5c124ee483ae113acc9a557a807d439bcecc44e7dfbb \ - --hash=sha256:ad9c9b99b05f163109466638bd30ada1722abb01bbb85c739c50b6dc11f92dc3 \ - --hash=sha256:b33d7a286c0dc1a15f5fc864cc48ae92a846df287ceac2dd499926c3801054a6 \ - --hash=sha256:bc092ba439d91df90aea38168e11f75c655880c12782facf5cf9c00f3d42b562 \ - --hash=sha256:c436130cc779806bdf5d5fae0d848713105472b8566b75ff70048c47d3961c5b \ - --hash=sha256:c5869b8fd70b81835a6f187c5fdbe67917a04d7e52b6e7cc4e5fe39d55c39d58 \ - --hash=sha256:c5ecca8f9bab618340c8e848d340baf68bcd8ad90a8ecd7a4524a81c1764b3db \ - --hash=sha256:cfac69017ef97db2438efb854edf24f5a29fd09a536ff3a992b75990720cdc99 \ - --hash=sha256:d2f0d0f976985f85dfb5f3d685697ef769faa6b71993b46b295cdbbd6be8cc37 \ - --hash=sha256:d5bed7f9805cc29c780f3aee05de3262ee7ce1f47083cfe9f77471e9d6777e83 \ - --hash=sha256:d6a21ef516d36909931a2967621eecb256018aeb11fc48656e3257e73e2e247a \ - --hash=sha256:d9b6ddac6408194e934002a69bcaadbc88c10b5f38fb9307779d1c629181815d \ - --hash=sha256:db47514ffdbd91ccdc7e6f8407aac4ee94cc871b15b577c1c324236b013ddd04 \ - --hash=sha256:df81779732feb9d01e5d513fad0122efb3d53bbc75f61b2a4f29a020bc985e70 \ - --hash=sha256:e4a91d44379f45f5e540971d41e4626dacd7f01004826a18cb048e7da7e96544 \ - --hash=sha256:e63e3e1e0271f374ed489ff5ee73d4b6e7c60710e1f76af5f0e1a6117cd26394 \ - --hash=sha256:e70fac33e8b4ac63dfc4c956fd7d85a0b1139adcfc0d964ce288b7c527537fea \ - --hash=sha256:ecddc221a077a8132cf7c747d5352a15ed763b674c0448d811f408bf803d9ad7 \ - --hash=sha256:f45eec587dafd4b2d41ac189c2156461ebd0c1082d2fe7013571598abb8505d1 \ - --hash=sha256:f52a68c21363c45297aca15561812d542f8fc683c85201df0bebe209e349f793 \ - --hash=sha256:f571aea50ba5623c308aa146eb650eebf7dbe0fd8c5d946e28343cb3b5aad577 \ - --hash=sha256:f60f0ac7005b9f5a6091009b09a419ace1610e163fa5deaba5ce3484341840e7 \ - --hash=sha256:f6475a1b2ecb310c98c28d271a30df74f9dd436ee46d09236a6b750a7599ce57 \ - --hash=sha256:f6d5749fdd33d90e34c2efb174c7e236829147a2713334d708746e94c4bde40d \ - --hash=sha256:f902804113e032e2cdf8c71015651c97af6418363bea8d78dc0911d56c335032 \ - --hash=sha256:fa1076244f54bb76e65e22cb6910365779d5c3d71d1f18b275f1dfc7b0d71b4d \ - --hash=sha256:fc2db02409338bf36590aa985a461b2c96fce91f8e7e0f14c50c5fcc4f229016 \ - --hash=sha256:ffcad6c564fe6b9b8916c1aefbb37a362deebf9394bd2974e9d84232e3e08504 +propcache==0.2.0 # via yarl -psutil==5.9.8 \ - --hash=sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d \ - --hash=sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73 \ - --hash=sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8 \ - --hash=sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2 \ - --hash=sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e \ - --hash=sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36 \ - --hash=sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7 \ - --hash=sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c \ - --hash=sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee \ - --hash=sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421 \ - --hash=sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf \ - --hash=sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81 \ - --hash=sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0 \ - --hash=sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631 \ - --hash=sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4 \ - --hash=sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8 +psutil==5.9.8 # via azure-monitor-opentelemetry-exporter -pycares==4.4.0 \ - --hash=sha256:112a4979c695b1c86f6782163d7dec58d57a3b9510536dcf4826550f9053dd9a \ - --hash=sha256:1168a48a834813aa80f412be2df4abaf630528a58d15c704857448b20b1675c0 \ - --hash=sha256:21a5a0468861ec7df7befa69050f952da13db5427ae41ffe4713bc96291d1d95 \ - --hash=sha256:229a1675eb33bc9afb1fc463e73ee334950ccc485bc83a43f6ae5839fb4d5fa3 \ - --hash=sha256:22c00bf659a9fa44d7b405cf1cd69b68b9d37537899898d8cbe5dffa4016b273 \ - --hash=sha256:23aa3993a352491a47fcf17867f61472f32f874df4adcbb486294bd9fbe8abee \ - --hash=sha256:24da119850841d16996713d9c3374ca28a21deee056d609fbbed29065d17e1f6 \ - --hash=sha256:2eeec144bcf6a7b6f2d74d6e70cbba7886a84dd373c886f06cb137a07de4954c \ - --hash=sha256:34736a2ffaa9c08ca9c707011a2d7b69074bbf82d645d8138bba771479b2362f \ - --hash=sha256:3aebc73e5ad70464f998f77f2da2063aa617cbd8d3e8174dd7c5b4518f967153 \ - --hash=sha256:3eaa6681c0a3e3f3868c77aca14b7760fed35fdfda2fe587e15c701950e7bc69 \ - --hash=sha256:4afc2644423f4eef97857a9fd61be9758ce5e336b4b0bd3d591238bb4b8b03e0 \ - --hash=sha256:52084961262232ec04bd75f5043aed7e5d8d9695e542ff691dfef0110209f2d4 \ - --hash=sha256:56cf3349fa3a2e67ed387a7974c11d233734636fe19facfcda261b411af14d80 \ - --hash=sha256:5ed4e04af4012f875b78219d34434a6d08a67175150ac1b79eb70ab585d4ba8c \ - --hash=sha256:64965dc19c578a683ea73487a215a8897276224e004d50eeb21f0bc7a0b63c88 \ - --hash=sha256:6ef64649eba56448f65e26546d85c860709844d2fc22ef14d324fe0b27f761a9 \ - --hash=sha256:77cf5a2fd5583c670de41a7f4a7b46e5cbabe7180d8029f728571f4d2e864084 \ - --hash=sha256:7bddc6adba8f699728f7fc1c9ce8cef359817ad78e2ed52b9502cb5f8dc7f741 \ - --hash=sha256:813d661cbe2e37d87da2d16b7110a6860e93ddb11735c6919c8a3545c7b9c8d8 \ - --hash=sha256:82bba2ab77eb5addbf9758d514d9bdef3c1bfe7d1649a47bd9a0d55a23ef478b \ - --hash=sha256:8bf2eaa83a5987e48fa63302f0fe7ce3275cfda87b34d40fef9ce703fb3ac002 \ - --hash=sha256:8d186dafccdaa3409194c0f94db93c1a5d191145a275f19da6591f9499b8e7b8 \ - --hash=sha256:8f64cb58729689d4d0e78f0bfb4c25ce2f851d0274c0273ac751795c04b8798a \ - --hash=sha256:902461a92b6a80fd5041a2ec5235680c7cc35e43615639ec2a40e63fca2dfb51 \ - --hash=sha256:917f08f0b5d9324e9a34211e68d27447c552b50ab967044776bbab7e42a553a2 \ - --hash=sha256:94d6962db81541eb0396d2f0dfcbb18cdb8c8b251d165efc2d974ae652c547d4 \ - --hash=sha256:97892cced5794d721fb4ff8765764aa4ea48fe8b2c3820677505b96b83d4ef47 \ - --hash=sha256:9a0303428d013ccf5c51de59c83f9127aba6200adb7fd4be57eddb432a1edd2a \ - --hash=sha256:9dc04c54c6ea615210c1b9e803d0e2d2255f87a3d5d119b6482c8f0dfa15b26b \ - --hash=sha256:a0c5368206057884cde18602580083aeaad9b860e2eac14fd253543158ce1e93 \ - --hash=sha256:ad58e284a658a8a6a84af2e0b62f2f961f303cedfe551854d7bd40c3cbb61912 \ - --hash=sha256:afb91792f1556f97be7f7acb57dc7756d89c5a87bd8b90363a77dbf9ea653817 \ - --hash=sha256:b61579cecf1f4d616e5ea31a6e423a16680ab0d3a24a2ffe7bb1d4ee162477ff \ - --hash=sha256:b7af06968cbf6851566e806bf3e72825b0e6671832a2cbe840be1d2d65350710 \ - --hash=sha256:bce8db2fc6f3174bd39b81405210b9b88d7b607d33e56a970c34a0c190da0490 \ - --hash=sha256:bfb89ca9e3d0a9b5332deeb666b2ede9d3469107742158f4aeda5ce032d003f4 \ - --hash=sha256:c680fef1b502ee680f8f0b95a41af4ec2c234e50e16c0af5bbda31999d3584bd \ - --hash=sha256:c6a8bde63106f162fca736e842a916853cad3c8d9d137e11c9ffa37efa818b02 \ - --hash=sha256:cb49d5805cd347c404f928c5ae7c35e86ba0c58ffa701dbe905365e77ce7d641 \ - --hash=sha256:ceb12974367b0a68a05d52f4162b29f575d241bd53de155efe632bf2c943c7f6 \ - --hash=sha256:d33e2a1120887e89075f7f814ec144f66a6ce06a54f5722ccefc62fbeda83cff \ - --hash=sha256:db24c4e7fea4a052c6e869cbf387dd85d53b9736cfe1ef5d8d568d1ca925e977 \ - --hash=sha256:e3a6f7cfdfd11eb5493d6d632e582408c8f3b429f295f8799c584c108b28db6f \ - --hash=sha256:eb66c30eb11e877976b7ead13632082a8621df648c408b8e15cdb91a452dd502 \ - --hash=sha256:ed2a38e34bec6f2586435f6ff0bc5fe11d14bebd7ed492cf739a424e81681540 \ - --hash=sha256:f36bdc1562142e3695555d2f4ac0cb69af165eddcefa98efc1c79495b533481f \ - --hash=sha256:f47579d508f2f56eddd16ce72045782ad3b1b3b678098699e2b6a1b30733e1c2 \ - --hash=sha256:f5f646eec041db6ffdbcaf3e0756fb92018f7af3266138c756bb09d2b5baadec \ - --hash=sha256:fd644505a8cfd7f6584d33a9066d4e3d47700f050ef1490230c962de5dfb28c6 \ - --hash=sha256:fff16b09042ba077f7b8aa5868d1d22456f0002574d0ba43462b10a009331677 +pycares==4.4.0 # via aiodns -pycparser==2.22 \ - --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ - --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc +pycparser==2.22 # via cffi -pydantic[email]==2.9.2 \ - --hash=sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f \ - --hash=sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12 +pydantic[email]==2.9.2 # via # call-center-ai (pyproject.toml) # fastapi # openai # pydantic-extra-types # pydantic-settings -pydantic-core==2.23.4 \ - --hash=sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36 \ - --hash=sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05 \ - --hash=sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071 \ - --hash=sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327 \ - --hash=sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c \ - --hash=sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36 \ - --hash=sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29 \ - --hash=sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744 \ - --hash=sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d \ - --hash=sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec \ - --hash=sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e \ - --hash=sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e \ - --hash=sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577 \ - --hash=sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232 \ - --hash=sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863 \ - --hash=sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6 \ - --hash=sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368 \ - --hash=sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480 \ - --hash=sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2 \ - --hash=sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2 \ - --hash=sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6 \ - --hash=sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769 \ - --hash=sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d \ - --hash=sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2 \ - --hash=sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84 \ - --hash=sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166 \ - --hash=sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271 \ - --hash=sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5 \ - --hash=sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb \ - --hash=sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13 \ - --hash=sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323 \ - --hash=sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556 \ - --hash=sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665 \ - --hash=sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef \ - --hash=sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb \ - --hash=sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119 \ - --hash=sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126 \ - --hash=sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510 \ - --hash=sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b \ - --hash=sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87 \ - --hash=sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f \ - --hash=sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc \ - --hash=sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8 \ - --hash=sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21 \ - --hash=sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f \ - --hash=sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6 \ - --hash=sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658 \ - --hash=sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b \ - --hash=sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3 \ - --hash=sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb \ - --hash=sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59 \ - --hash=sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24 \ - --hash=sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9 \ - --hash=sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3 \ - --hash=sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd \ - --hash=sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753 \ - --hash=sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55 \ - --hash=sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad \ - --hash=sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a \ - --hash=sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605 \ - --hash=sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e \ - --hash=sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b \ - --hash=sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433 \ - --hash=sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8 \ - --hash=sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07 \ - --hash=sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728 \ - --hash=sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0 \ - --hash=sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327 \ - --hash=sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555 \ - --hash=sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64 \ - --hash=sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6 \ - --hash=sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea \ - --hash=sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b \ - --hash=sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df \ - --hash=sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e \ - --hash=sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd \ - --hash=sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068 \ - --hash=sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3 \ - --hash=sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040 \ - --hash=sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12 \ - --hash=sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916 \ - --hash=sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f \ - --hash=sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f \ - --hash=sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801 \ - --hash=sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231 \ - --hash=sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5 \ - --hash=sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8 \ - --hash=sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee \ - --hash=sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607 + # rtclient +pydantic-core==2.23.4 # via pydantic -pydantic-extra-types==2.10.0 \ - --hash=sha256:552c47dd18fe1d00cfed75d9981162a2f3203cf7e77e55a3d3e70936f59587b9 \ - --hash=sha256:b19943914e6286548254f5079d1da094e9c0583ee91a8e611e9df24bfd07dbcd +pydantic-extra-types==2.10.0 # via call-center-ai (pyproject.toml) -pydantic-settings==2.6.1 \ - --hash=sha256:7fb0637c786a558d3103436278a7c4f1cfd29ba8973238a50c5bb9a55387da87 \ - --hash=sha256:e0f92546d8a9923cb8941689abf85d6601a8c19a23e97a34b2964a2e3f813ca0 +pydantic-settings==2.6.1 # via call-center-ai (pyproject.toml) -pyjwt[crypto]==2.9.0 \ - --hash=sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850 \ - --hash=sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c +pydub==0.25.1 + # via call-center-ai (pyproject.toml) +pyjwt[crypto]==2.9.0 # via # call-center-ai (pyproject.toml) # msal # twilio -python-dotenv==1.0.1 \ - --hash=sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca \ - --hash=sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a +python-dotenv==1.0.1 # via # call-center-ai (pyproject.toml) # pydantic-settings # uvicorn -python-multipart==0.0.17 \ - --hash=sha256:15dc4f487e0a9476cc1201261188ee0940165cffc94429b6fc565c4d3045cb5d \ - --hash=sha256:41330d831cae6e2f22902704ead2826ea038d0419530eadff3ea80175aec5538 +python-multipart==0.0.17 # via call-center-ai (pyproject.toml) -pytz==2024.2 \ - --hash=sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a \ - --hash=sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725 +pytz==2024.2 # via call-center-ai (pyproject.toml) -pyyaml==6.0.2 \ - --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ - --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ - --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ - --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ - --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ - --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ - --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ - --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ - --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ - --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ - --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ - --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ - --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ - --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ - --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ - --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ - --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ - --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ - --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ - --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ - --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ - --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ - --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ - --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ - --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ - --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ - --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ - --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ - --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ - --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ - --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ - --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ - --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ - --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ - --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ - --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ - --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ - --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ - --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ - --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ - --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ - --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ - --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ - --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ - --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ - --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ - --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ - --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ - --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ - --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ - --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ - --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ - --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 +pyyaml==6.0.2 # via # call-center-ai (pyproject.toml) # uvicorn -redis==5.2.0 \ - --hash=sha256:0b1087665a771b1ff2e003aa5bdd354f15a70c9e25d5a7dbf9c722c16528a7b0 \ - --hash=sha256:ae174f2bb3b1bf2b09d54bf3e51fbc1469cf6c10aa03e21141f51969801a7897 +redis==5.2.0 # via call-center-ai (pyproject.toml) -regex==2024.11.6 \ - --hash=sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c \ - --hash=sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60 \ - --hash=sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d \ - --hash=sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d \ - --hash=sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67 \ - --hash=sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773 \ - --hash=sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0 \ - --hash=sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef \ - --hash=sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad \ - --hash=sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe \ - --hash=sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3 \ - --hash=sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114 \ - --hash=sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4 \ - --hash=sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39 \ - --hash=sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e \ - --hash=sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3 \ - --hash=sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7 \ - --hash=sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d \ - --hash=sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e \ - --hash=sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a \ - --hash=sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7 \ - --hash=sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f \ - --hash=sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0 \ - --hash=sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54 \ - --hash=sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b \ - --hash=sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c \ - --hash=sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd \ - --hash=sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57 \ - --hash=sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34 \ - --hash=sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d \ - --hash=sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f \ - --hash=sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b \ - --hash=sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519 \ - --hash=sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4 \ - --hash=sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a \ - --hash=sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638 \ - --hash=sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b \ - --hash=sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839 \ - --hash=sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07 \ - --hash=sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf \ - --hash=sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff \ - --hash=sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0 \ - --hash=sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f \ - --hash=sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95 \ - --hash=sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4 \ - --hash=sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e \ - --hash=sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13 \ - --hash=sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519 \ - --hash=sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2 \ - --hash=sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008 \ - --hash=sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9 \ - --hash=sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc \ - --hash=sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48 \ - --hash=sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20 \ - --hash=sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89 \ - --hash=sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e \ - --hash=sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf \ - --hash=sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b \ - --hash=sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd \ - --hash=sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84 \ - --hash=sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29 \ - --hash=sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b \ - --hash=sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3 \ - --hash=sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45 \ - --hash=sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3 \ - --hash=sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983 \ - --hash=sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e \ - --hash=sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7 \ - --hash=sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4 \ - --hash=sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e \ - --hash=sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467 \ - --hash=sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577 \ - --hash=sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001 \ - --hash=sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0 \ - --hash=sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55 \ - --hash=sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9 \ - --hash=sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf \ - --hash=sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6 \ - --hash=sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e \ - --hash=sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde \ - --hash=sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62 \ - --hash=sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df \ - --hash=sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51 \ - --hash=sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5 \ - --hash=sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86 \ - --hash=sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2 \ - --hash=sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2 \ - --hash=sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0 \ - --hash=sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c \ - --hash=sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f \ - --hash=sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6 \ - --hash=sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2 \ - --hash=sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9 \ - --hash=sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91 +regex==2024.11.6 # via tiktoken -requests==2.32.3 \ - --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ - --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 +requests==2.32.3 # via # azure-core # msal @@ -1695,85 +358,36 @@ requests==2.32.3 \ # requests-oauthlib # tiktoken # twilio -requests-oauthlib==2.0.0 \ - --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ - --hash=sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9 +requests-oauthlib==2.0.0 # via msrest -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +rtclient @ git+https://github.com/Azure-Samples/aoai-realtime-audio-sdk#subdirectory=python + # via call-center-ai (pyproject.toml) +six==1.16.0 # via # azure-core # html5lib -sniffio==1.3.1 \ - --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ - --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc +sniffio==1.3.1 # via # anyio # httpx # openai -soupsieve==2.6 \ - --hash=sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb \ - --hash=sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9 +soupsieve==2.6 # via beautifulsoup4 -starlette==0.41.2 \ - --hash=sha256:9834fd799d1a87fd346deb76158668cfa0b0d56f85caefe8268e2d97c3468b62 \ - --hash=sha256:fbc189474b4731cf30fcef52f18a8d070e3f3b46c6a04c97579e85e6ffca942d +starlette==0.41.2 # via fastapi -structlog==24.4.0 \ - --hash=sha256:597f61e80a91cc0749a9fd2a098ed76715a1c8a01f73e336b746504d1aad7610 \ - --hash=sha256:b27bfecede327a6d2da5fbc96bd859f114ecc398a6389d664f62085ee7ae6fc4 +structlog==24.4.0 # via call-center-ai (pyproject.toml) -tenacity==8.5.0 \ - --hash=sha256:8bc6c0c8a09b31e6cad13c47afbed1a567518250a9a171418582ed8d9c20ca78 \ - --hash=sha256:b594c2a5945830c267ce6b79a166228323ed52718f30302c1359836112346687 +tenacity==8.5.0 # via call-center-ai (pyproject.toml) -tiktoken==0.8.0 \ - --hash=sha256:02be1666096aff7da6cbd7cdaa8e7917bfed3467cd64b38b1f112e96d3b06a24 \ - --hash=sha256:1473cfe584252dc3fa62adceb5b1c763c1874e04511b197da4e6de51d6ce5a02 \ - --hash=sha256:18228d624807d66c87acd8f25fc135665617cab220671eb65b50f5d70fa51f69 \ - --hash=sha256:25e13f37bc4ef2d012731e93e0fef21dc3b7aea5bb9009618de9a4026844e560 \ - --hash=sha256:294440d21a2a51e12d4238e68a5972095534fe9878be57d905c476017bff99fc \ - --hash=sha256:2efaf6199717b4485031b4d6edb94075e4d79177a172f38dd934d911b588d54a \ - --hash=sha256:326624128590def898775b722ccc327e90b073714227175ea8febbc920ac0a99 \ - --hash=sha256:4177faa809bd55f699e88c96d9bb4635d22e3f59d635ba6fd9ffedf7150b9953 \ - --hash=sha256:5376b6f8dc4753cd81ead935c5f518fa0fbe7e133d9e25f648d8c4dabdd4bad7 \ - --hash=sha256:5637e425ce1fc49cf716d88df3092048359a4b3bbb7da762840426e937ada06d \ - --hash=sha256:56edfefe896c8f10aba372ab5706b9e3558e78db39dd497c940b47bf228bc419 \ - --hash=sha256:6adc8323016d7758d6de7313527f755b0fc6c72985b7d9291be5d96d73ecd1e1 \ - --hash=sha256:6b231f5e8982c245ee3065cd84a4712d64692348bc609d84467c57b4b72dcbc5 \ - --hash=sha256:6b2ddbc79a22621ce8b1166afa9f9a888a664a579350dc7c09346a3b5de837d9 \ - --hash=sha256:7e17807445f0cf1f25771c9d86496bd8b5c376f7419912519699f3cc4dc5c12e \ - --hash=sha256:845287b9798e476b4d762c3ebda5102be87ca26e5d2c9854002825d60cdb815d \ - --hash=sha256:881839cfeae051b3628d9823b2e56b5cc93a9e2efb435f4cf15f17dc45f21586 \ - --hash=sha256:886f80bd339578bbdba6ed6d0567a0d5c6cfe198d9e587ba6c447654c65b8edc \ - --hash=sha256:9269348cb650726f44dd3bbb3f9110ac19a8dcc8f54949ad3ef652ca22a38e21 \ - --hash=sha256:9a58deb7075d5b69237a3ff4bb51a726670419db6ea62bdcd8bd80c78497d7ab \ - --hash=sha256:9ccbb2740f24542534369c5635cfd9b2b3c2490754a78ac8831d99f89f94eeb2 \ - --hash=sha256:9fb0e352d1dbe15aba082883058b3cce9e48d33101bdaac1eccf66424feb5b47 \ - --hash=sha256:b07e33283463089c81ef1467180e3e00ab00d46c2c4bbcef0acab5f771d6695e \ - --hash=sha256:b591fb2b30d6a72121a80be24ec7a0e9eb51c5500ddc7e4c2496516dd5e3816b \ - --hash=sha256:c94ff53c5c74b535b2cbf431d907fc13c678bbd009ee633a2aca269a04389f9a \ - --hash=sha256:d2908c0d043a7d03ebd80347266b0e58440bdef5564f84f4d29fb235b5df3b04 \ - --hash=sha256:d622d8011e6d6f239297efa42a2657043aaed06c4f68833550cac9e9bc723ef1 \ - --hash=sha256:d8c2d0e5ba6453a290b86cd65fc51fedf247e1ba170191715b049dac1f628005 \ - --hash=sha256:d8f3192733ac4d77977432947d563d7e1b310b96497acd3c196c9bddb36ed9db \ - --hash=sha256:f13d13c981511331eac0d01a59b5df7c0d4060a8be1e378672822213da51e0a2 \ - --hash=sha256:fe9399bdc3f29d428f16a2f86c3c8ec20be3eac5f53693ce4980371c3245729b +tiktoken==0.8.0 # via # call-center-ai (pyproject.toml) # opentelemetry-instrumentation-openai -tqdm==4.67.0 \ - --hash=sha256:0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be \ - --hash=sha256:fe5a6f95e6fe0b9755e9469b77b9c3cf850048224ecaa8293d7d2d31f97d869a +tqdm==4.67.0 # via openai -twilio==9.3.6 \ - --hash=sha256:c5d7f4cfeb50a7928397b8f819c8f7fb2bb956a1a2cabbda1df1d7a40f9ce1d7 \ - --hash=sha256:d42691f7fe1faaa5ba82942f169bfea4d7f01a0a542a456d82018fb49bd1f5b2 +twilio==9.3.6 # via call-center-ai (pyproject.toml) -typing-extensions==4.12.2 \ - --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ - --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 +typing-extensions==4.12.2 # via # aiosqlite # azure-ai-translation-text @@ -1791,284 +405,19 @@ typing-extensions==4.12.2 \ # pydantic # pydantic-core # pydantic-extra-types -urllib3==2.2.3 \ - --hash=sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac \ - --hash=sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9 +urllib3==2.2.3 # via requests -uvicorn[standard]==0.32.0 \ - --hash=sha256:60b8f3a5ac027dcd31448f411ced12b5ef452c646f76f02f8cc3f25d8d26fd82 \ - --hash=sha256:f78b36b143c16f54ccdb8190d0a26b5f1901fe5a3c777e1ab29f26391af8551e +uvicorn[standard]==0.32.0 # via call-center-ai (pyproject.toml) -uvloop==0.21.0 \ - --hash=sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0 \ - --hash=sha256:10d66943def5fcb6e7b37310eb6b5639fd2ccbc38df1177262b0640c3ca68c1f \ - --hash=sha256:10da8046cc4a8f12c91a1c39d1dd1585c41162a15caaef165c2174db9ef18bdc \ - --hash=sha256:17df489689befc72c39a08359efac29bbee8eee5209650d4b9f34df73d22e414 \ - --hash=sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f \ - --hash=sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d \ - --hash=sha256:221f4f2a1f46032b403bf3be628011caf75428ee3cc204a22addf96f586b19fd \ - --hash=sha256:2d1f581393673ce119355d56da84fe1dd9d2bb8b3d13ce792524e1607139feff \ - --hash=sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c \ - --hash=sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3 \ - --hash=sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d \ - --hash=sha256:460def4412e473896ef179a1671b40c039c7012184b627898eea5072ef6f017a \ - --hash=sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb \ - --hash=sha256:46923b0b5ee7fc0020bef24afe7836cb068f5050ca04caf6b487c513dc1a20b2 \ - --hash=sha256:53e420a3afe22cdcf2a0f4846e377d16e718bc70103d7088a4f7623567ba5fb0 \ - --hash=sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6 \ - --hash=sha256:67dd654b8ca23aed0a8e99010b4c34aca62f4b7fce88f39d452ed7622c94845c \ - --hash=sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af \ - --hash=sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc \ - --hash=sha256:87c43e0f13022b998eb9b973b5e97200c8b90823454d4bc06ab33829e09fb9bb \ - --hash=sha256:88cb67cdbc0e483da00af0b2c3cdad4b7c61ceb1ee0f33fe00e09c81e3a6cb75 \ - --hash=sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb \ - --hash=sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553 \ - --hash=sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e \ - --hash=sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6 \ - --hash=sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d \ - --hash=sha256:bc09f0ff191e61c2d592a752423c767b4ebb2986daa9ed62908e2b1b9a9ae206 \ - --hash=sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc \ - --hash=sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281 \ - --hash=sha256:c097078b8031190c934ed0ebfee8cc5f9ba9642e6eb88322b9958b649750f72b \ - --hash=sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8 \ - --hash=sha256:e678ad6fe52af2c58d2ae3c73dc85524ba8abe637f134bf3564ed07f555c5e79 \ - --hash=sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f \ - --hash=sha256:f0ce1b49560b1d2d8a2977e3ba4afb2414fb46b86a1b64056bc4ab929efdafbe \ - --hash=sha256:f38b2e090258d051d68a5b14d1da7203a3c3677321cf32a95a6f4db4dd8b6f26 \ - --hash=sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816 \ - --hash=sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2 +uvloop==0.21.0 # via uvicorn -watchfiles==0.24.0 \ - --hash=sha256:01550ccf1d0aed6ea375ef259706af76ad009ef5b0203a3a4cce0f6024f9b68a \ - --hash=sha256:01def80eb62bd5db99a798d5e1f5f940ca0a05986dcfae21d833af7a46f7ee22 \ - --hash=sha256:07cdef0c84c03375f4e24642ef8d8178e533596b229d32d2bbd69e5128ede02a \ - --hash=sha256:083dc77dbdeef09fa44bb0f4d1df571d2e12d8a8f985dccde71ac3ac9ac067a0 \ - --hash=sha256:1cf1f6dd7825053f3d98f6d33f6464ebdd9ee95acd74ba2c34e183086900a827 \ - --hash=sha256:21ab23fdc1208086d99ad3f69c231ba265628014d4aed31d4e8746bd59e88cd1 \ - --hash=sha256:2dadf8a8014fde6addfd3c379e6ed1a981c8f0a48292d662e27cabfe4239c83c \ - --hash=sha256:2e28d91ef48eab0afb939fa446d8ebe77e2f7593f5f463fd2bb2b14132f95b6e \ - --hash=sha256:2efec17819b0046dde35d13fb8ac7a3ad877af41ae4640f4109d9154ed30a188 \ - --hash=sha256:30bbd525c3262fd9f4b1865cb8d88e21161366561cd7c9e1194819e0a33ea86b \ - --hash=sha256:316449aefacf40147a9efaf3bd7c9bdd35aaba9ac5d708bd1eb5763c9a02bef5 \ - --hash=sha256:327763da824817b38ad125dcd97595f942d720d32d879f6c4ddf843e3da3fe90 \ - --hash=sha256:32aa53a9a63b7f01ed32e316e354e81e9da0e6267435c7243bf8ae0f10b428ef \ - --hash=sha256:34e19e56d68b0dad5cff62273107cf5d9fbaf9d75c46277aa5d803b3ef8a9e9b \ - --hash=sha256:3770e260b18e7f4e576edca4c0a639f704088602e0bc921c5c2e721e3acb8d15 \ - --hash=sha256:3d2e3ab79a1771c530233cadfd277fcc762656d50836c77abb2e5e72b88e3a48 \ - --hash=sha256:41face41f036fee09eba33a5b53a73e9a43d5cb2c53dad8e61fa6c9f91b5a51e \ - --hash=sha256:43e3e37c15a8b6fe00c1bce2473cfa8eb3484bbeecf3aefbf259227e487a03df \ - --hash=sha256:449f43f49c8ddca87c6b3980c9284cab6bd1f5c9d9a2b00012adaaccd5e7decd \ - --hash=sha256:4933a508d2f78099162da473841c652ad0de892719043d3f07cc83b33dfd9d91 \ - --hash=sha256:49d617df841a63b4445790a254013aea2120357ccacbed00253f9c2b5dc24e2d \ - --hash=sha256:49fb58bcaa343fedc6a9e91f90195b20ccb3135447dc9e4e2570c3a39565853e \ - --hash=sha256:4a7fa2bc0efef3e209a8199fd111b8969fe9db9c711acc46636686331eda7dd4 \ - --hash=sha256:4abf4ad269856618f82dee296ac66b0cd1d71450fc3c98532d93798e73399b7a \ - --hash=sha256:4b8693502d1967b00f2fb82fc1e744df128ba22f530e15b763c8d82baee15370 \ - --hash=sha256:4d28cea3c976499475f5b7a2fec6b3a36208656963c1a856d328aeae056fc5c1 \ - --hash=sha256:5148c2f1ea043db13ce9b0c28456e18ecc8f14f41325aa624314095b6aa2e9ea \ - --hash=sha256:54ca90a9ae6597ae6dc00e7ed0a040ef723f84ec517d3e7ce13e63e4bc82fa04 \ - --hash=sha256:551ec3ee2a3ac9cbcf48a4ec76e42c2ef938a7e905a35b42a1267fa4b1645896 \ - --hash=sha256:5c51749f3e4e269231510da426ce4a44beb98db2dce9097225c338f815b05d4f \ - --hash=sha256:632676574429bee8c26be8af52af20e0c718cc7f5f67f3fb658c71928ccd4f7f \ - --hash=sha256:6509ed3f467b79d95fc62a98229f79b1a60d1b93f101e1c61d10c95a46a84f43 \ - --hash=sha256:6bdcfa3cd6fdbdd1a068a52820f46a815401cbc2cb187dd006cb076675e7b735 \ - --hash=sha256:7138eff8baa883aeaa074359daabb8b6c1e73ffe69d5accdc907d62e50b1c0da \ - --hash=sha256:7211b463695d1e995ca3feb38b69227e46dbd03947172585ecb0588f19b0d87a \ - --hash=sha256:73bde715f940bea845a95247ea3e5eb17769ba1010efdc938ffcb967c634fa61 \ - --hash=sha256:78470906a6be5199524641f538bd2c56bb809cd4bf29a566a75051610bc982c3 \ - --hash=sha256:7ae3e208b31be8ce7f4c2c0034f33406dd24fbce3467f77223d10cd86778471c \ - --hash=sha256:7e4bd963a935aaf40b625c2499f3f4f6bbd0c3776f6d3bc7c853d04824ff1c9f \ - --hash=sha256:82ae557a8c037c42a6ef26c494d0631cacca040934b101d001100ed93d43f361 \ - --hash=sha256:82b2509f08761f29a0fdad35f7e1638b8ab1adfa2666d41b794090361fb8b855 \ - --hash=sha256:8360f7314a070c30e4c976b183d1d8d1585a4a50c5cb603f431cebcbb4f66327 \ - --hash=sha256:85d5f0c7771dcc7a26c7a27145059b6bb0ce06e4e751ed76cdf123d7039b60b5 \ - --hash=sha256:88bcd4d0fe1d8ff43675360a72def210ebad3f3f72cabfeac08d825d2639b4ab \ - --hash=sha256:9301c689051a4857d5b10777da23fafb8e8e921bcf3abe6448a058d27fb67633 \ - --hash=sha256:951088d12d339690a92cef2ec5d3cfd957692834c72ffd570ea76a6790222777 \ - --hash=sha256:95cf3b95ea665ab03f5a54765fa41abf0529dbaf372c3b83d91ad2cfa695779b \ - --hash=sha256:96619302d4374de5e2345b2b622dc481257a99431277662c30f606f3e22f42be \ - --hash=sha256:999928c6434372fde16c8f27143d3e97201160b48a614071261701615a2a156f \ - --hash=sha256:9a60e2bf9dc6afe7f743e7c9b149d1fdd6dbf35153c78fe3a14ae1a9aee3d98b \ - --hash=sha256:9f895d785eb6164678ff4bb5cc60c5996b3ee6df3edb28dcdeba86a13ea0465e \ - --hash=sha256:a2a9891723a735d3e2540651184be6fd5b96880c08ffe1a98bae5017e65b544b \ - --hash=sha256:a974231b4fdd1bb7f62064a0565a6b107d27d21d9acb50c484d2cdba515b9366 \ - --hash=sha256:aa0fd7248cf533c259e59dc593a60973a73e881162b1a2f73360547132742823 \ - --hash=sha256:acbfa31e315a8f14fe33e3542cbcafc55703b8f5dcbb7c1eecd30f141df50db3 \ - --hash=sha256:afb72325b74fa7a428c009c1b8be4b4d7c2afedafb2982827ef2156646df2fe1 \ - --hash=sha256:b3ef2c69c655db63deb96b3c3e587084612f9b1fa983df5e0c3379d41307467f \ - --hash=sha256:b52a65e4ea43c6d149c5f8ddb0bef8d4a1e779b77591a458a893eb416624a418 \ - --hash=sha256:b665caeeda58625c3946ad7308fbd88a086ee51ccb706307e5b1fa91556ac886 \ - --hash=sha256:b74fdffce9dfcf2dc296dec8743e5b0332d15df19ae464f0e249aa871fc1c571 \ - --hash=sha256:b995bfa6bf01a9e09b884077a6d37070464b529d8682d7691c2d3b540d357a0c \ - --hash=sha256:bd82010f8ab451dabe36054a1622870166a67cf3fce894f68895db6f74bbdc94 \ - --hash=sha256:bdcd5538e27f188dd3c804b4a8d5f52a7fc7f87e7fd6b374b8e36a4ca03db428 \ - --hash=sha256:c79d7719d027b7a42817c5d96461a99b6a49979c143839fc37aa5748c322f234 \ - --hash=sha256:cdab9555053399318b953a1fe1f586e945bc8d635ce9d05e617fd9fe3a4687d6 \ - --hash=sha256:ce72dba6a20e39a0c628258b5c308779b8697f7676c254a845715e2a1039b968 \ - --hash=sha256:d337193bbf3e45171c8025e291530fb7548a93c45253897cd764a6a71c937ed9 \ - --hash=sha256:d3dcb774e3568477275cc76554b5a565024b8ba3a0322f77c246bc7111c5bb9c \ - --hash=sha256:d64ba08db72e5dfd5c33be1e1e687d5e4fcce09219e8aee893a4862034081d4e \ - --hash=sha256:d7a2e3b7f5703ffbd500dabdefcbc9eafeff4b9444bbdd5d83d79eedf8428fab \ - --hash=sha256:d831ee0a50946d24a53821819b2327d5751b0c938b12c0653ea5be7dea9c82ec \ - --hash=sha256:d9018153cf57fc302a2a34cb7564870b859ed9a732d16b41a9b5cb2ebed2d444 \ - --hash=sha256:e5171ef898299c657685306d8e1478a45e9303ddcd8ac5fed5bd52ad4ae0b69b \ - --hash=sha256:e94e98c7cb94cfa6e071d401ea3342767f28eb5a06a58fafdc0d2a4974f4f35c \ - --hash=sha256:ec39698c45b11d9694a1b635a70946a5bad066b593af863460a8e600f0dff1ca \ - --hash=sha256:ed9aba6e01ff6f2e8285e5aa4154e2970068fe0fc0998c4380d0e6278222269b \ - --hash=sha256:edf71b01dec9f766fb285b73930f95f730bb0943500ba0566ae234b5c1618c18 \ - --hash=sha256:ee82c98bed9d97cd2f53bdb035e619309a098ea53ce525833e26b93f673bc318 \ - --hash=sha256:f4c96283fca3ee09fb044f02156d9570d156698bc3734252175a38f0e8975f07 \ - --hash=sha256:f7d9b87c4c55e3ea8881dfcbf6d61ea6775fffed1fedffaa60bd047d3c08c430 \ - --hash=sha256:f83df90191d67af5a831da3a33dd7628b02a95450e168785586ed51e6d28943c \ - --hash=sha256:fca9433a45f18b7c779d2bae7beeec4f740d28b788b117a48368d95a3233ed83 \ - --hash=sha256:fd92bbaa2ecdb7864b7600dcdb6f2f1db6e0346ed425fbd01085be04c63f0b05 +watchfiles==0.24.0 # via uvicorn -webencodings==0.5.1 \ - --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ - --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 +webencodings==0.5.1 # via html5lib -websockets==14.0 \ - --hash=sha256:064a72c0602c2d2c2586143561e0f179ef9b98e0825dc4a3d5cdf55a81898ed6 \ - --hash=sha256:08d62f438a591c016c5d4c79eaf9a8f7a85b6c3ea88793d676c00c930a41e775 \ - --hash=sha256:0913596e0072202be8729dab05266398b72ee57c4232f48d52fe2a0370d0b53f \ - --hash=sha256:0ae0e14729038208711d2e2f769280621c22cd253e3dac00f809fa38c6ccb79d \ - --hash=sha256:0b406f2387dbaf301996b7b2cf41519c1fbba7d5c9626406dd56f72075a60a00 \ - --hash=sha256:0bae3caf386d418e83b62e8c1c4cec1b13348fac43e530b9894d6c7c02d921b5 \ - --hash=sha256:12c345585b1da70cd27a298b0b9a81aa18da7a690672f771b427db59c632d8aa \ - --hash=sha256:176b39547950ff3520728bd1eadd0fa02c68492a1fabca636bab7883dd390905 \ - --hash=sha256:189e9f074f2a77f7cf54634797b29be28116ee564ece421c7653030a2cef48f0 \ - --hash=sha256:1a3bca8cfb66614e23a65aa5d6b87190876ec6f3247094939f9db877db55319c \ - --hash=sha256:1c4ca7cc5a02f909789dad259dffe61be4f38ffb26dc5e26ab2dca2c7d7c87de \ - --hash=sha256:1e0e543e0e81c55e68552bd3c081282721c710a6379a2a78e1ec793853479b25 \ - --hash=sha256:1e541e4c8983b118a584c306070878e7f9670b7781e04184b6e05f9fc92e8a0e \ - --hash=sha256:20979614e4d7266f15018c154255d35dfb9fc828fdf6b4924166b6728fed359f \ - --hash=sha256:23b13edb4df2d4e5d6dc747d83e6b244e267a6615ede90f18ef13dfb2b6feb87 \ - --hash=sha256:2752c98237057f27594a8393d498edd9db37e06abcfb99176d9cb6fb989dc883 \ - --hash=sha256:2786c74cbcb0263fd541e4a075aa8c932bdcaa91e5bbb8649c65304799acdd64 \ - --hash=sha256:281b5ab9514eb241e347a46367a2374cb60cf8f420c4283948aa188f05e7810c \ - --hash=sha256:288365a33049dae3065cdb2c2dd4b48df4b64839c565761c4f3f0c360460a561 \ - --hash=sha256:2a418d596536a470f6f8e94cbb1fde66fe65e03d68c403eee0f2198b129e139a \ - --hash=sha256:3c12e6c1331ee8833fcb565c033f7eb4cb5642af37cef81211c222b617b170df \ - --hash=sha256:3e4be641fed120790241ae15fde27374a62cadaadcc0bd2b4ce35790bd284fb6 \ - --hash=sha256:3f1a697262e28682222f18fae70eb0800dfa50c6eb96b0561c6beb83d6cf78ca \ - --hash=sha256:3fb3d9e3940ea15b30404200e768e6111c3ee2956c60ceb001cae057961ab058 \ - --hash=sha256:445a53bce8344e62df4ed9a22fdd1f06cad8e404ead64b2a1f19bd826c8dad1b \ - --hash=sha256:4875d1c3ab3d1d9a9d8485dc1f4c2aaa63947824af03301911ea58d1e881e096 \ - --hash=sha256:4c06f014fd8fa3827e5fd03ec012945e2139901f261fcc401e0622476cad9c5c \ - --hash=sha256:4eae86193fd667667f35367d292b912685cb22c3f9f1dd6deaa3fdd713ab5976 \ - --hash=sha256:56ec8098dcc47817c8aee8037165f0fe30fec8efe543c66e0924781a4bfcbdfd \ - --hash=sha256:5a5b76b47b62de16d26439d362b18d71394ca4376eb2c8838352be64b27ba8af \ - --hash=sha256:5ade11f4939b885303d28b53d512e96e1a8ea8fbebedd6fef3e2e1afe633cc2a \ - --hash=sha256:5f86250ee98f6098479936b7d596418b6e4c919dfa156508e9d6ac5f8bfbe764 \ - --hash=sha256:61b60c2a07b6d25f7ce8cc0101d55fb0f1af388bec1eddfe0181085c2206e7b0 \ - --hash=sha256:633bbda2d30bc695900f6a07de4e5d92a4e8e8d0d8a536bb3c2051bee4dc3856 \ - --hash=sha256:678990bc5a1e4fa36e18d340d439079a21e6b8d249848b7066cad1a6cbd34b82 \ - --hash=sha256:6cff048a155024a580fee9f9a66b0ad9fc82683f6470c26eb76dd9280e6f459e \ - --hash=sha256:6f2e7710f3c468519f9d5b01a291c407f809f8f831e5a204b238e02447046d78 \ - --hash=sha256:6fad8f03dc976e710db785abf9deb76eb259312fb54d77b568c73f0162cef96e \ - --hash=sha256:7078dd0eac3a1dccf2c6f474004dbe8a4e936dbd19d37bbfb6efa70c923ae04e \ - --hash=sha256:715b238c1772ed28b98af8830df41c5d68941729e22384fe1433db495b1d5438 \ - --hash=sha256:72fe11675685412917363481b79c56e68175e62352f84ca4788ac264f9ea6ed0 \ - --hash=sha256:77697c303b874daf1c76d4e167cd5d6871c26964bc189e4bdb40427067d53a86 \ - --hash=sha256:79e2494047826a56f2951b2ada9dc139d2c3aff63122e86953cafe64ac0fde75 \ - --hash=sha256:7cf000319db10a0cb5c7ce91bfd2a8699086b5cc0b5c5b83b92eec22a0448b2f \ - --hash=sha256:7d66eeab61956e231f35659e6d5b66dc04a3d51e65f2b8f71862dc6a8ba710d1 \ - --hash=sha256:7ed4111f305770e35070e49fbb9fbf757a9b6c9a31bb86d352eb4031d4aa976f \ - --hash=sha256:7fd212e7022c70b4f8246dee4449dde30ff50c7e8e1d61ac87b7879579badd03 \ - --hash=sha256:81758da7c76b4e2ddabc4a98a51f3c3aca8585a6d3a8662b5061613303bd5f68 \ - --hash=sha256:86626d560ceb9d846d128b9c7bd2d0f247dbb62fb49c386762d109583140bf48 \ - --hash=sha256:8982909857b09220ee31d9a45699fce26f8e5b94a10efa7fe07004d4f4200a33 \ - --hash=sha256:8eb46ac94d5c131336dc997a568f5579501958b14a507e6aa4840f6d856da980 \ - --hash=sha256:9af48a2f4cc5e2e34cf69969079865100e418c27caa26c1e3369efcc20c81e17 \ - --hash=sha256:9dc5a2726fd16c266d35838db086fa4e621bb049e3bbe498ab9d54ad5068f726 \ - --hash=sha256:a3741f4394ba3d55a64949ee11ffdba19e2a2bdaa1319a96a7ab93bf8bd2b9b2 \ - --hash=sha256:a97c10043bf74d7667be69383312007d54a507fac8fa101be492cc91e279d94d \ - --hash=sha256:a9b8a85d62709a86a9a55d4720502e88968483ee7f365bd852b75935dec04e0d \ - --hash=sha256:b24f7286a5c4e350284623cf708662f0881fe7bc1146c1a1fe7e6a9be01a8d6b \ - --hash=sha256:b639ea88a46f4629645b398c9e7be0366c92e4910203a6314f78469f5e631dc5 \ - --hash=sha256:b886b6d14cd089396155e6beb2935268bf995057bf24c3e5fd609af55c584a03 \ - --hash=sha256:bdaf3b31f8343dcc6c20d068c10eb29325dd70f5dc321ebb5fbeaa280436e70e \ - --hash=sha256:be90aa6dab180fed523c0c10a6729ad16c9ba79067402d01a4d8aa7ce48d4084 \ - --hash=sha256:c4eb304743ab285f8f057344d115259fbe31e42151b9aae7610db83d2a7379b1 \ - --hash=sha256:ca447967131023e98fcb4867f05cf8584adb424b9108180b2414745a6ff41c31 \ - --hash=sha256:cc7dbe53276429b2ca511a04a3979ce27aa2088fdd28c119c6913dccdfd0e909 \ - --hash=sha256:e9ff528498d9e5c543bee388023ca91870678ac50724d675853ba85b4f0a459e \ - --hash=sha256:ee5fb667aec4ae723d40ada9854128df427b35b526c600cd352ca0240aad4dd7 \ - --hash=sha256:f6dd785f7a521189b1233d3c86c0b66fb73d4769a1d253ce5b31081c5946f05f \ - --hash=sha256:f988f141a9be7a74d2e98d446b2f5411038bad14cdab80f9d1644b2329a71b48 \ - --hash=sha256:fb260539dd2b64e93c9f2c59caa70d36d2020fb8e26fa17f62459ad50ebf6c24 +websockets==14.0 # via uvicorn -wrapt==1.16.0 \ - --hash=sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc \ - --hash=sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81 \ - --hash=sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09 \ - --hash=sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e \ - --hash=sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca \ - --hash=sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0 \ - --hash=sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb \ - --hash=sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487 \ - --hash=sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40 \ - --hash=sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c \ - --hash=sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060 \ - --hash=sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202 \ - --hash=sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41 \ - --hash=sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9 \ - --hash=sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b \ - --hash=sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664 \ - --hash=sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d \ - --hash=sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362 \ - --hash=sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00 \ - --hash=sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc \ - --hash=sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1 \ - --hash=sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267 \ - --hash=sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956 \ - --hash=sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966 \ - --hash=sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1 \ - --hash=sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228 \ - --hash=sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72 \ - --hash=sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d \ - --hash=sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292 \ - --hash=sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0 \ - --hash=sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0 \ - --hash=sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36 \ - --hash=sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c \ - --hash=sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5 \ - --hash=sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f \ - --hash=sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73 \ - --hash=sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b \ - --hash=sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2 \ - --hash=sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593 \ - --hash=sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39 \ - --hash=sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389 \ - --hash=sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf \ - --hash=sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf \ - --hash=sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89 \ - --hash=sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c \ - --hash=sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c \ - --hash=sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f \ - --hash=sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440 \ - --hash=sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465 \ - --hash=sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136 \ - --hash=sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b \ - --hash=sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8 \ - --hash=sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3 \ - --hash=sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8 \ - --hash=sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6 \ - --hash=sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e \ - --hash=sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f \ - --hash=sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c \ - --hash=sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e \ - --hash=sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8 \ - --hash=sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2 \ - --hash=sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020 \ - --hash=sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35 \ - --hash=sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d \ - --hash=sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3 \ - --hash=sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537 \ - --hash=sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809 \ - --hash=sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d \ - --hash=sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a \ - --hash=sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4 +wrapt==1.16.0 # via # deprecated # opentelemetry-instrumentation @@ -2077,91 +426,7 @@ wrapt==1.16.0 \ # opentelemetry-instrumentation-httpx # opentelemetry-instrumentation-redis # opentelemetry-instrumentation-urllib3 -yarl==1.17.1 \ - --hash=sha256:06157fb3c58f2736a5e47c8fcbe1afc8b5de6fb28b14d25574af9e62150fcaac \ - --hash=sha256:067a63fcfda82da6b198fa73079b1ca40b7c9b7994995b6ee38acda728b64d47 \ - --hash=sha256:0b1794853124e2f663f0ea54efb0340b457f08d40a1cef78edfa086576179c91 \ - --hash=sha256:0bdff5e0995522706c53078f531fb586f56de9c4c81c243865dd5c66c132c3b5 \ - --hash=sha256:117ed8b3732528a1e41af3aa6d4e08483c2f0f2e3d3d7dca7cf538b3516d93df \ - --hash=sha256:14bc88baa44e1f84164a392827b5defb4fa8e56b93fecac3d15315e7c8e5d8b3 \ - --hash=sha256:1654ec814b18be1af2c857aa9000de7a601400bd4c9ca24629b18486c2e35463 \ - --hash=sha256:16bca6678a83657dd48df84b51bd56a6c6bd401853aef6d09dc2506a78484c7b \ - --hash=sha256:1a3b91c44efa29e6c8ef8a9a2b583347998e2ba52c5d8280dbd5919c02dfc3b5 \ - --hash=sha256:1a52a1ffdd824fb1835272e125385c32fd8b17fbdefeedcb4d543cc23b332d74 \ - --hash=sha256:1ce36ded585f45b1e9bb36d0ae94765c6608b43bd2e7f5f88079f7a85c61a4d3 \ - --hash=sha256:299f11b44d8d3a588234adbe01112126010bd96d9139c3ba7b3badd9829261c3 \ - --hash=sha256:2b24ec55fad43e476905eceaf14f41f6478780b870eda5d08b4d6de9a60b65b4 \ - --hash=sha256:2d374d70fdc36f5863b84e54775452f68639bc862918602d028f89310a034ab0 \ - --hash=sha256:2d9f0606baaec5dd54cb99667fcf85183a7477f3766fbddbe3f385e7fc253299 \ - --hash=sha256:2e7ba4c9377e48fb7b20dedbd473cbcbc13e72e1826917c185157a137dac9df2 \ - --hash=sha256:2f0a6423295a0d282d00e8701fe763eeefba8037e984ad5de44aa349002562ac \ - --hash=sha256:327828786da2006085a4d1feb2594de6f6d26f8af48b81eb1ae950c788d97f61 \ - --hash=sha256:380e6c38ef692b8fd5a0f6d1fa8774d81ebc08cfbd624b1bca62a4d4af2f9931 \ - --hash=sha256:3b74ff4767d3ef47ffe0cd1d89379dc4d828d4873e5528976ced3b44fe5b0a21 \ - --hash=sha256:3e844be8d536afa129366d9af76ed7cb8dfefec99f5f1c9e4f8ae542279a6dc3 \ - --hash=sha256:459e81c2fb920b5f5df744262d1498ec2c8081acdcfe18181da44c50f51312f7 \ - --hash=sha256:46ddf6e0b975cd680eb83318aa1d321cb2bf8d288d50f1754526230fcf59ba96 \ - --hash=sha256:482c122b72e3c5ec98f11457aeb436ae4aecca75de19b3d1de7cf88bc40db82f \ - --hash=sha256:561c87fea99545ef7d692403c110b2f99dced6dff93056d6e04384ad3bc46243 \ - --hash=sha256:578d00c9b7fccfa1745a44f4eddfdc99d723d157dad26764538fbdda37209857 \ - --hash=sha256:58c8e9620eb82a189c6c40cb6b59b4e35b2ee68b1f2afa6597732a2b467d7e8f \ - --hash=sha256:5b29beab10211a746f9846baa39275e80034e065460d99eb51e45c9a9495bcca \ - --hash=sha256:5d1d42556b063d579cae59e37a38c61f4402b47d70c29f0ef15cee1acaa64488 \ - --hash=sha256:5f236cb5999ccd23a0ab1bd219cfe0ee3e1c1b65aaf6dd3320e972f7ec3a39da \ - --hash=sha256:62a91aefff3d11bf60e5956d340eb507a983a7ec802b19072bb989ce120cd948 \ - --hash=sha256:64cc6e97f14cf8a275d79c5002281f3040c12e2e4220623b5759ea7f9868d6a5 \ - --hash=sha256:6f4c9156c4d1eb490fe374fb294deeb7bc7eaccda50e23775b2354b6a6739934 \ - --hash=sha256:7294e38f9aa2e9f05f765b28ffdc5d81378508ce6dadbe93f6d464a8c9594473 \ - --hash=sha256:7615058aabad54416ddac99ade09a5510cf77039a3b903e94e8922f25ed203d7 \ - --hash=sha256:7e48cdb8226644e2fbd0bdb0a0f87906a3db07087f4de77a1b1b1ccfd9e93685 \ - --hash=sha256:7f63d176a81555984e91f2c84c2a574a61cab7111cc907e176f0f01538e9ff6e \ - --hash=sha256:7f6595c852ca544aaeeb32d357e62c9c780eac69dcd34e40cae7b55bc4fb1147 \ - --hash=sha256:7fac95714b09da9278a0b52e492466f773cfe37651cf467a83a1b659be24bf71 \ - --hash=sha256:81713b70bea5c1386dc2f32a8f0dab4148a2928c7495c808c541ee0aae614d67 \ - --hash=sha256:846dd2e1243407133d3195d2d7e4ceefcaa5f5bf7278f0a9bda00967e6326b04 \ - --hash=sha256:84c063af19ef5130084db70ada40ce63a84f6c1ef4d3dbc34e5e8c4febb20822 \ - --hash=sha256:881764d610e3269964fc4bb3c19bb6fce55422828e152b885609ec176b41cf11 \ - --hash=sha256:8994b29c462de9a8fce2d591028b986dbbe1b32f3ad600b2d3e1c482c93abad6 \ - --hash=sha256:8c79e9d7e3d8a32d4824250a9c6401194fb4c2ad9a0cec8f6a96e09a582c2cc0 \ - --hash=sha256:8ee427208c675f1b6e344a1f89376a9613fc30b52646a04ac0c1f6587c7e46ec \ - --hash=sha256:949681f68e0e3c25377462be4b658500e85ca24323d9619fdc41f68d46a1ffda \ - --hash=sha256:9e275792097c9f7e80741c36de3b61917aebecc08a67ae62899b074566ff8556 \ - --hash=sha256:9fb815155aac6bfa8d86184079652c9715c812d506b22cfa369196ef4e99d1b4 \ - --hash=sha256:a2a64e62c7a0edd07c1c917b0586655f3362d2c2d37d474db1a509efb96fea1c \ - --hash=sha256:a7ac5b4984c468ce4f4a553df281450df0a34aefae02e58d77a0847be8d1e11f \ - --hash=sha256:aa46dce75078fceaf7cecac5817422febb4355fbdda440db55206e3bd288cfb8 \ - --hash=sha256:ae3476e934b9d714aa8000d2e4c01eb2590eee10b9d8cd03e7983ad65dfbfcba \ - --hash=sha256:b0341e6d9a0c0e3cdc65857ef518bb05b410dbd70d749a0d33ac0f39e81a4258 \ - --hash=sha256:b40d1bf6e6f74f7c0a567a9e5e778bbd4699d1d3d2c0fe46f4b717eef9e96b95 \ - --hash=sha256:b5c4804e4039f487e942c13381e6c27b4b4e66066d94ef1fae3f6ba8b953f383 \ - --hash=sha256:b5d6a6c9602fd4598fa07e0389e19fe199ae96449008d8304bf5d47cb745462e \ - --hash=sha256:b5f1ac7359e17efe0b6e5fec21de34145caef22b260e978336f325d5c84e6938 \ - --hash=sha256:c0167540094838ee9093ef6cc2c69d0074bbf84a432b4995835e8e5a0d984374 \ - --hash=sha256:c180ac742a083e109c1a18151f4dd8675f32679985a1c750d2ff806796165b55 \ - --hash=sha256:c73df5b6e8fabe2ddb74876fb82d9dd44cbace0ca12e8861ce9155ad3c886139 \ - --hash=sha256:c7e177c619342e407415d4f35dec63d2d134d951e24b5166afcdfd1362828e17 \ - --hash=sha256:cbad927ea8ed814622305d842c93412cb47bd39a496ed0f96bfd42b922b4a217 \ - --hash=sha256:cc353841428d56b683a123a813e6a686e07026d6b1c5757970a877195f880c2d \ - --hash=sha256:cc7c92c1baa629cb03ecb0c3d12564f172218fb1739f54bf5f3881844daadc6d \ - --hash=sha256:cc7d768260f4ba4ea01741c1b5fe3d3a6c70eb91c87f4c8761bbcce5181beafe \ - --hash=sha256:d0eea830b591dbc68e030c86a9569826145df485b2b4554874b07fea1275a199 \ - --hash=sha256:d216e5d9b8749563c7f2c6f7a0831057ec844c68b4c11cb10fc62d4fd373c26d \ - --hash=sha256:d401f07261dc5aa36c2e4efc308548f6ae943bfff20fcadb0a07517a26b196d8 \ - --hash=sha256:d6324274b4e0e2fa1b3eccb25997b1c9ed134ff61d296448ab8269f5ac068c4c \ - --hash=sha256:d8a8b74d843c2638f3864a17d97a4acda58e40d3e44b6303b8cc3d3c44ae2d29 \ - --hash=sha256:d9b6b28a57feb51605d6ae5e61a9044a31742db557a3b851a74c13bc61de5172 \ - --hash=sha256:de599af166970d6a61accde358ec9ded821234cbbc8c6413acfec06056b8e860 \ - --hash=sha256:e594b22688d5747b06e957f1ef822060cb5cb35b493066e33ceac0cf882188b7 \ - --hash=sha256:e5b078134f48552c4d9527db2f7da0b5359abd49393cdf9794017baec7506170 \ - --hash=sha256:eb6dce402734575e1a8cc0bb1509afca508a400a57ce13d306ea2c663bad1138 \ - --hash=sha256:f1790a4b1e8e8e028c391175433b9c8122c39b46e1663228158e61e6f915bf06 \ - --hash=sha256:f5efe0661b9fcd6246f27957f6ae1c0eb29bc60552820f01e970b4996e016004 \ - --hash=sha256:f9cbfbc5faca235fbdf531b93aa0f9f005ec7d267d9d738761a4d42b744ea159 \ - --hash=sha256:fbea1751729afe607d84acfd01efd95e3b31db148a181a441984ce9b3d3469da \ - --hash=sha256:fca4b4307ebe9c3ec77a084da3a9d1999d164693d16492ca2b64594340999988 \ - --hash=sha256:ff5c6771c7e3511a06555afa317879b7db8d640137ba55d6ab0d0c50425cab75 +yarl==1.17.1 # via aiohttp -zipp==3.21.0 \ - --hash=sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4 \ - --hash=sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931 +zipp==3.21.0 # via importlib-metadata diff --git a/tests/conftest.py b/tests/conftest.py index 28cf8665..e94220e7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -133,7 +133,7 @@ def __init__( cache: pytest.Cache, **kwargs, ): - platform = CONFIG.llm.fast.azure_openai + platform = CONFIG.llm.sequential.azure_openai assert platform _langchain_kwargs = { diff --git a/tests/llm.py b/tests/llm.py index 93d52925..25881290 100644 --- a/tests/llm.py +++ b/tests/llm.py @@ -267,16 +267,11 @@ def _play_media_callback(text: str) -> None: async def _post_callback(_call: CallStateModel) -> None: await on_end_call(call=_call) - async def _training_callback(_call: CallStateModel) -> None: - await _call.trainings(cache_only=False) - # Connect call await on_call_connected( call=call, client=automation_client, - post_callback=_post_callback, server_call_id="dummy", - training_callback=_training_callback, ) # First IVR @@ -284,8 +279,6 @@ async def _training_callback(_call: CallStateModel) -> None: call=call, client=automation_client, label=call.lang.short_code, - post_callback=_post_callback, - training_callback=_training_callback, ) # Simulate conversation with speech recognition @@ -296,7 +289,6 @@ async def _training_callback(_call: CallStateModel) -> None: client=automation_client, post_callback=_post_callback, text=speech, - training_callback=_training_callback, ) # Receip await on_play_completed( diff --git a/tests/local.py b/tests/local.py index 29c5502a..01067019 100644 --- a/tests/local.py +++ b/tests/local.py @@ -49,16 +49,11 @@ def _transfer_callback() -> None: async def _post_callback(_call: CallStateModel) -> None: await on_end_call(call=_call) - async def _training_callback(_call: CallStateModel) -> None: - await _call.trainings(cache_only=False) - # Connect call await on_call_connected( call=call, client=automation_client, - post_callback=_post_callback, server_call_id="dummy", - training_callback=_training_callback, ) # First IVR @@ -66,8 +61,6 @@ async def _training_callback(_call: CallStateModel) -> None: call=call, client=automation_client, label=call.lang.short_code, - post_callback=_post_callback, - training_callback=_training_callback, ) # Simulate conversation @@ -81,7 +74,6 @@ async def _training_callback(_call: CallStateModel) -> None: client=automation_client, post_callback=_post_callback, text=message, - training_callback=_training_callback, ) # Receip await on_play_completed(