From e22b199d8fd4e1fc45eb49a9f5e74572aa146cd7 Mon Sep 17 00:00:00 2001 From: Kevin Guevara Date: Thu, 6 Feb 2025 12:27:16 -0500 Subject: [PATCH 1/5] fix: fix examples to use real api --- examples/anthropic/README.md | 10 +- examples/anthropic/anthropic-chat.py | 2 +- examples/cohere/README.md | 20 +- examples/cohere/cohere-async-chat.py | 12 +- examples/cohere/cohere-async-stream-chat.py | 13 +- examples/cohere/cohere-chat.py | 10 +- examples/cohere/cohere-stream-chat.py | 3 +- examples/cohere/cohere_v2-async-chat.py | 11 +- .../cohere/cohere_v2-async-stream-chat.py | 8 +- examples/cohere/cohere_v2-chat.py | 11 +- examples/cohere/cohere_v2-stream-chat.py | 7 +- examples/hugging-face/README.md | 26 +- examples/litellm/README.md | 16 +- examples/litellm/litellm-aimage-generation.py | 5 +- scope3ai/tracers/litellm/chat.py | 81 ++-- .../test_litellm_async_stream_chat.yaml | 328 ++++++++-------- tests/cassettes/test_litellm_chat.yaml | 102 +++-- tests/cassettes/test_litellm_stream_chat.yaml | 368 ++++++++++++------ tests/test_litellm_tracer_use_default.py | 14 +- 19 files changed, 629 insertions(+), 418 deletions(-) diff --git a/examples/anthropic/README.md b/examples/anthropic/README.md index 325c8cd..1631f16 100644 --- a/examples/anthropic/README.md +++ b/examples/anthropic/README.md @@ -15,14 +15,14 @@ This directory contains examples of using Anthropic's Claude API with environmen ```bash # Basic Chat -python anthropic-chat.py --model "claude-3-sonnet-latest" --message "What is machine learning?" --max-tokens 100 +uv run python -m examples.anthropic.anthropic-chat --model "claude-3-opus-latest" --message "What is machine learning?" --max-tokens 100 -# With custom API key -python anthropic-chat.py --message "Explain neural networks" --api-key "your-api-key" +# Async Chat +uv run python -m examples.anthropic.anthropic-async-chat --model "claude-3-opus-latest" --message "What is machine learning?" --max-tokens 100 # Streaming Chat -python anthropic-stream-chat.py --message "Write a story about AI" --model "claude-3-opus-latest" +uv run python -m examples.anthropic.anthropic-stream-chat --model "claude-3-opus-latest" --message "Write a story about AI" # Async streaming -python anthropic-async-stream-chat.py --message "Explain quantum mechanics" --max-tokens 200 +uv run python -m examples.anthropic.anthropic-async-stream-chat --model "claude-3-opus-latest" --message "Explain quantum mechanics" --max-tokens 200 ``` \ No newline at end of file diff --git a/examples/anthropic/anthropic-chat.py b/examples/anthropic/anthropic-chat.py index b883dbf..1fa0e98 100644 --- a/examples/anthropic/anthropic-chat.py +++ b/examples/anthropic/anthropic-chat.py @@ -31,7 +31,7 @@ def main(model: str, message: str, max_tokens: int, api_key: str | None = None): parser.add_argument( "--model", type=str, - default="claude-3-5-sonnet-latest", + default="claude-3-5-sonnet-20241022", help="Model to use for chat completion", ) parser.add_argument( diff --git a/examples/cohere/README.md b/examples/cohere/README.md index 1fd8454..0e0734a 100644 --- a/examples/cohere/README.md +++ b/examples/cohere/README.md @@ -20,14 +20,22 @@ This directory contains examples of using Cohere's API with environmental impact ### Basic Chat (v1) ```bash -python cohere-chat.py --message "What is machine learning?" --max-tokens 100 +uv run python -m examples.cohere.cohere-chat --message "What is machine learning?" --max-tokens 100 -# With custom API key -python cohere-chat.py --message "Explain neural networks" --api-key "your-api-key" +uv run python -m examples.cohere.cohere-async-chat --message "Explain neural networks" --max-tokens 200 +uv run python -m examples.cohere.cohere-stream-chat --message "Write a story about AI" -python cohere_v2-stream-chat.py --model "command-r-plus-08-2024" --message "Write a story about AI" +uv run python -m examples.cohere.cohere-async-stream-chat --message "Explain quantum mechanics" --max-tokens 200 +``` -# Async streaming -python cohere_v2-async-stream-chat.py --message "Explain quantum mechanics" --max-tokens 200 +### Basic Chat (v2) +```bash +uv run python -m examples.cohere.cohere_v2-chat --message "What is machine learning?" --max-tokens 100 + +uv run python -m examples.cohere.cohere_v2-async-chat --message "Explain neural networks" --max-tokens 200 + +uv run python -m examples.cohere.cohere_v2-stream-chat --message "Write a story about AI" + +uv run python -m examples.cohere.cohere_v2-async-stream-chat --message "Explain quantum mechanics" --max-tokens 200 ``` \ No newline at end of file diff --git a/examples/cohere/cohere-async-chat.py b/examples/cohere/cohere-async-chat.py index 93049a7..bc395ee 100644 --- a/examples/cohere/cohere-async-chat.py +++ b/examples/cohere/cohere-async-chat.py @@ -3,12 +3,12 @@ from scope3ai import Scope3AI -async def main(message: str, max_tokens: int, api_key: str | None = None): +async def main(message: str, model: str, max_tokens: int, api_key: str | None = None): scope3 = Scope3AI.init() - co = cohere.Client(api_key=api_key) if api_key else cohere.Client() + co = cohere.AsyncClient(api_key=api_key) if api_key else cohere.AsyncClient() with scope3.trace() as tracer: - response = await co.chat(message=message, max_tokens=max_tokens) + response = await co.chat(message=message, model=model, max_tokens=max_tokens) print(response) impact = tracer.impact() @@ -35,6 +35,12 @@ async def main(message: str, max_tokens: int, api_key: str | None = None): default=100, help="Maximum number of tokens in the response", ) + parser.add_argument( + "--model", + type=str, + default="command-r", + help="Model to use for the chat", + ) parser.add_argument( "--api-key", type=str, diff --git a/examples/cohere/cohere-async-stream-chat.py b/examples/cohere/cohere-async-stream-chat.py index 7bd8f65..bc840bf 100644 --- a/examples/cohere/cohere-async-stream-chat.py +++ b/examples/cohere/cohere-async-stream-chat.py @@ -5,14 +5,15 @@ from scope3ai import Scope3AI -async def main(message: str, max_tokens: int, api_key: str | None = None): +async def main(message: str, model: str, max_tokens: int, api_key: str | None = None): scope3 = Scope3AI.init() co = cohere.AsyncClient(api_key=api_key) if api_key else cohere.AsyncClient() with scope3.trace() as tracer: - stream = co.chat_stream(message=message, max_tokens=max_tokens) + stream = co.chat_stream(message=message, model=model, max_tokens=max_tokens) async for event in stream: - print(event) + if event.event_type == "text-generation": + print(event.text, end="", flush=True) impact = await tracer.aimpact() print(f"Total Energy Wh: {impact.total_energy_wh}") @@ -38,6 +39,12 @@ async def main(message: str, max_tokens: int, api_key: str | None = None): default=100, help="Maximum number of tokens in the response", ) + parser.add_argument( + "--model", + type=str, + default="command-r", + help="Model to use for the chat", + ) parser.add_argument( "--api-key", type=str, diff --git a/examples/cohere/cohere-chat.py b/examples/cohere/cohere-chat.py index df19a37..9412a04 100644 --- a/examples/cohere/cohere-chat.py +++ b/examples/cohere/cohere-chat.py @@ -2,12 +2,12 @@ from scope3ai import Scope3AI -def main(message: str, max_tokens: int, api_key: str | None = None): +def main(message: str, model: str, max_tokens: int, api_key: str | None = None): scope3 = Scope3AI.init() co = cohere.Client(api_key=api_key) if api_key else cohere.Client() with scope3.trace() as tracer: - response = co.chat(message=message, max_tokens=max_tokens) + response = co.chat(message=message, model=model, max_tokens=max_tokens) print(response) impact = tracer.impact() @@ -28,6 +28,12 @@ def main(message: str, max_tokens: int, api_key: str | None = None): default="Hello!", help="Message to send to the chat model", ) + parser.add_argument( + "--model", + type=str, + default="command-r", + help="Model to use for the chat", + ) parser.add_argument( "--max-tokens", type=int, diff --git a/examples/cohere/cohere-stream-chat.py b/examples/cohere/cohere-stream-chat.py index bc1589d..bd350dc 100644 --- a/examples/cohere/cohere-stream-chat.py +++ b/examples/cohere/cohere-stream-chat.py @@ -9,7 +9,8 @@ def main(message: str, max_tokens: int, api_key: str | None = None): with scope3.trace() as tracer: stream = co.chat_stream(message=message, max_tokens=max_tokens) for event in stream: - print(event) + if event.event_type == "text-generation": + print(event.text, end="", flush=True) impact = tracer.impact() print(f"Total Energy Wh: {impact.total_energy_wh}") diff --git a/examples/cohere/cohere_v2-async-chat.py b/examples/cohere/cohere_v2-async-chat.py index fa55fb2..2bbe072 100644 --- a/examples/cohere/cohere_v2-async-chat.py +++ b/examples/cohere/cohere_v2-async-chat.py @@ -5,7 +5,9 @@ from scope3ai import Scope3AI -async def main(model: str, message: str, role: str, api_key: str | None = None): +async def main( + model: str, message: str, role: str, max_tokens: int, api_key: str | None = None +): scope3 = Scope3AI.init() co = cohere.AsyncClientV2(api_key=api_key) if api_key else cohere.AsyncClientV2() @@ -13,6 +15,7 @@ async def main(model: str, message: str, role: str, api_key: str | None = None): response = await co.chat( model=model, messages=[{"role": role, "content": message}], + max_tokens=max_tokens, ) print(response) @@ -40,6 +43,12 @@ async def main(model: str, message: str, role: str, api_key: str | None = None): default="Hello world!", help="Message to send to the chat model", ) + parser.add_argument( + "--max-tokens", + type=int, + default=100, + help="Maximum number of tokens in the response", + ) parser.add_argument("--role", type=str, default="user", help="Role for the message") parser.add_argument( "--api-key", diff --git a/examples/cohere/cohere_v2-async-stream-chat.py b/examples/cohere/cohere_v2-async-stream-chat.py index 325e228..94d9de8 100644 --- a/examples/cohere/cohere_v2-async-stream-chat.py +++ b/examples/cohere/cohere_v2-async-stream-chat.py @@ -17,8 +17,14 @@ async def main( messages=[{"role": role, "content": message}], max_tokens=max_tokens, ) + async for event in stream: - print(event) + if ( + hasattr(event, "delta") + and hasattr(event.delta, "message") + and event.delta.message.content + ): + print(event.delta.message.content.text, end="", flush=True) impact = await tracer.aimpact() print(f"Total Energy Wh: {impact.total_energy_wh}") diff --git a/examples/cohere/cohere_v2-chat.py b/examples/cohere/cohere_v2-chat.py index ae51827..247262a 100644 --- a/examples/cohere/cohere_v2-chat.py +++ b/examples/cohere/cohere_v2-chat.py @@ -2,7 +2,9 @@ from scope3ai import Scope3AI -def main(model: str, message: str, role: str, api_key: str | None = None): +def main( + model: str, message: str, role: str, max_tokens: int, api_key: str | None = None +): scope3 = Scope3AI.init() co = cohere.ClientV2(api_key=api_key) if api_key else cohere.ClientV2() @@ -10,6 +12,7 @@ def main(model: str, message: str, role: str, api_key: str | None = None): response = co.chat( model=model, messages=[{"role": role, "content": message}], + max_tokens=max_tokens, ) print(response) @@ -31,6 +34,12 @@ def main(model: str, message: str, role: str, api_key: str | None = None): default="command-r-plus-08-2024", help="Model to use for chat completion", ) + parser.add_argument( + "--max-tokens", + type=int, + default=100, + help="Maximum number of tokens in the response", + ) parser.add_argument( "--message", type=str, diff --git a/examples/cohere/cohere_v2-stream-chat.py b/examples/cohere/cohere_v2-stream-chat.py index 27975ab..73e75dc 100644 --- a/examples/cohere/cohere_v2-stream-chat.py +++ b/examples/cohere/cohere_v2-stream-chat.py @@ -16,7 +16,12 @@ def main( max_tokens=max_tokens, ) for event in stream: - print(event) + if ( + hasattr(event, "delta") + and hasattr(event.delta, "message") + and event.delta.message.content + ): + print(event.delta.message.content.text, end="", flush=True) impact = tracer.impact() print(f"Total Energy Wh: {impact.total_energy_wh}") diff --git a/examples/hugging-face/README.md b/examples/hugging-face/README.md index 590c098..8d718c7 100644 --- a/examples/hugging-face/README.md +++ b/examples/hugging-face/README.md @@ -28,17 +28,31 @@ This directory contains examples of using HuggingFace's Inference API with envir ```bash # chat -python chat.py --message "Explain the theory of relativity" --max-tokens 100 +uv run python -m examples.hugging-face.chat --message "Explain the theory of relativity" --max-tokens 100 # chat async -python chat-async.py --message "What is quantum computing?" +uv run python -m examples.hugging-face.chat-async --message "What is quantum computing?" # speech & Audio -python speech-to-text.py --audio-path "recording.wav" +uv run python -m examples.hugging-face.speech-to-text --audio-path "recording.wav" # speech & Audio async -python text-to-speech.py --text "Hello world!" +uv run python -m examples.hugging-face.text-to-speech --text "Hello world!" # translation -python translation.py --text "Hello, how are you?" --target-language "es" -``` +uv run python -m examples.hugging-face.translation --text "Hello, how are you?" --target-language "es" + +# text to image +uv run python -m examples.hugging-face.text-to-image --prompt "A beautiful sunset over mountains" --model "dall-e-2" --size "1024x1024" + +# text to image async +uv run python -m examples.hugging-face.text-to-image-async --prompt "A futuristic city" --model "dall-e-2" --size "1024x1024" + +# image to image +uv run python -m examples.hugging-face.image-to-image --image-path "image.png" --prompt "A beautiful sunset over mountains" --model "dall-e-2" --size "1024x1024" + +# image to image async +uv run python -m examples.hugging-face.image-to-image-async --image-path "image.png" --prompt "A futuristic city" --model "dall-e-2" --size "1024x1024" + + +``` \ No newline at end of file diff --git a/examples/litellm/README.md b/examples/litellm/README.md index a79d400..ddebf7f 100644 --- a/examples/litellm/README.md +++ b/examples/litellm/README.md @@ -22,13 +22,19 @@ This directory contains examples of using LiteLLM with environmental impact trac ### Completion ```bash -python litellm-completion.py --model "gpt-4" --message "What is artificial intelligence?" +uv run python -m examples.litellm.litellm-completion --model "gpt-4" --message "What is artificial intelligence?" -python litellm-acompletion.py --message "Explain quantum computing" --max-tokens 200 +uv run python -m examples.litellm.litellm-acompletion --model "gpt-4" --message "Explain quantum computing" --max-tokens 200 -python litellm-image-generation.py --prompt "A beautiful sunset" --size "1024x1024" +uv run python -m examples.litellm.litellm-image-generation --prompt "A beautiful sunset" --size "1024x1024" -python litellm-speech.py --text "Hello world" --voice "alloy" +uv run python -m examples.litellm.litellm-aimage-generation --prompt "A beautiful sunset" --size "1024x1024" -python litellm-transcription.py --audio-path "recording.wav" --model "whisper-1" +uv run python -m examples.litellm.litellm-speech --text "Hello world" --voice "alloy" + +uv run python -m examples.litellm.litellm-aspeech --text "Hello world" --voice "alloy" + +uv run python -m examples.litellm.litellm-transcription --audio-path "recording.wav" --model "whisper-1" + +uv run python -m examples.litellm.litellm-atranscription --audio-path "recording.wav" --model "whisper-1" ``` \ No newline at end of file diff --git a/examples/litellm/litellm-aimage-generation.py b/examples/litellm/litellm-aimage-generation.py index 022ee6b..195fbbb 100644 --- a/examples/litellm/litellm-aimage-generation.py +++ b/examples/litellm/litellm-aimage-generation.py @@ -1,13 +1,16 @@ import asyncio +from os import getenv from litellm import aimage_generation from scope3ai import Scope3AI +import os async def main(model: str, prompt: str, size: str, api_key: str | None = None): scope3 = Scope3AI.init() - + print(os.environ) + print(getenv("SCOPE3AI_API_KEY"), "aca") with scope3.trace() as tracer: response = await aimage_generation( model=model, prompt=prompt, size=size, api_key=api_key diff --git a/scope3ai/tracers/litellm/chat.py b/scope3ai/tracers/litellm/chat.py index 8efc4d7..705bc25 100644 --- a/scope3ai/tracers/litellm/chat.py +++ b/scope3ai/tracers/litellm/chat.py @@ -5,6 +5,7 @@ from litellm import AsyncCompletions, Completions from litellm.types.utils import ModelResponse from litellm.utils import CustomStreamWrapper +import tiktoken from scope3ai import Scope3AI from scope3ai.api.types import Scope3AIContext, ImpactRow @@ -43,25 +44,29 @@ def litellm_chat_wrapper_stream( # type: ignore[misc] timer_start = time.perf_counter() stream = wrapped(*args, **kwargs) token_count = 0 + print(enumerate(stream)) for i, chunk in enumerate(stream): - if i > 0 and chunk.choices[0].finish_reason is None: + if i > 0: token_count += 1 - request_latency = time.perf_counter() - timer_start - - model = chunk.model - if model is not None: - scope3_row = ImpactRow( - model_id=model, - output_tokens=token_count, - request_duration_ms=float(request_latency) * 1000, - ) - scope3ai_ctx = Scope3AI.get_instance().submit_impact(scope3_row) - if scope3ai_ctx is not None: - yield ChatCompletionChunk(**chunk.model_dump(), scope3ai=scope3ai_ctx) - else: - yield chunk - else: + if chunk.choices[0].finish_reason is None: yield chunk + continue + request_latency = time.perf_counter() - timer_start + model = args[0] if len(args) > 0 else kwargs.get("model") + messages = args[1] if len(args) > 1 else kwargs.get("messages") + prompt = " ".join([message.get("content") for message in messages]) + encoder = tiktoken.get_encoding("cl100k_base") + input_tokens = len(encoder.encode(prompt)) + if model is None: + model = chunk.model + scope3_row = ImpactRow( + model_id=model, + input_tokens=input_tokens, + output_tokens=token_count, + request_duration_ms=float(request_latency) * 1000, + ) + scope3ai_ctx = Scope3AI.get_instance().submit_impact(scope3_row) + yield ChatCompletionChunk(**chunk.model_dump(), scope3ai=scope3ai_ctx) def litellm_chat_wrapper_non_stream( @@ -79,9 +84,9 @@ def litellm_chat_wrapper_non_stream( setattr(response, "scope3ai", tracer.traces[0]) return response request_latency = time.perf_counter() - timer_start - model = response.model + model = args[0] if len(args) > 0 else kwargs.get("model") if model is None: - return response + model = response.model scope3_row = ImpactRow( model_id=model, input_tokens=response.usage.prompt_tokens, @@ -131,9 +136,9 @@ async def litellm_async_chat_wrapper_base( setattr(response, "scope3ai", tracer.traces[0]) return response request_latency = time.perf_counter() - timer_start - model = response.model + model = args[0] if len(args) > 0 else kwargs.get("model") if model is None: - return response + model = response.model scope3_row = ImpactRow( model_id=model, input_tokens=response.usage.prompt_tokens, @@ -170,21 +175,25 @@ async def litellm_async_chat_wrapper_stream( # type: ignore[misc] i = 0 token_count = 0 async for chunk in stream: - if i > 0 and chunk.choices[0].finish_reason is None: + if i > 0: token_count += 1 - request_latency = time.perf_counter() - timer_start - model = chunk.model - if model is not None: - scope3_row = ImpactRow( - model_id=model, - output_tokens=token_count, - request_duration_ms=float(request_latency) * 1000, - ) - scope3ai_ctx = await Scope3AI.get_instance().asubmit_impact(scope3_row) - if scope3ai_ctx is not None: - yield ChatCompletionChunk(**chunk.model_dump(), scope3ai=scope3ai_ctx) - else: - yield chunk - else: + if chunk.choices[0].finish_reason is None: + i += 1 yield chunk - i += 1 + continue + request_latency = time.perf_counter() - timer_start + model = args[0] if len(args) > 0 else kwargs.get("model") + messages = args[1] if len(args) > 1 else kwargs.get("messages") + prompt = " ".join([message.get("content") for message in messages]) + encoder = tiktoken.get_encoding("cl100k_base") + input_tokens = len(encoder.encode(prompt)) + if model is None: + model = chunk.model + scope3_row = ImpactRow( + model_id=model, + input_tokens=input_tokens, + output_tokens=token_count, + request_duration_ms=float(request_latency) * 1000, + ) + scope3ai_ctx = await Scope3AI.get_instance().asubmit_impact(scope3_row) + yield ChatCompletionChunk(**chunk.model_dump(), scope3ai=scope3ai_ctx) diff --git a/tests/cassettes/test_litellm_async_stream_chat.yaml b/tests/cassettes/test_litellm_async_stream_chat.yaml index c8cb241..d34353b 100644 --- a/tests/cassettes/test_litellm_async_stream_chat.yaml +++ b/tests/cassettes/test_litellm_async_stream_chat.yaml @@ -1,4 +1,160 @@ interactions: +- request: + body: '{"model": "command-r", "chat_history": [], "stream": true, "use_always_litellm_tracer": + false, "message": "Hello World!"}' + headers: + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '121' + Request-Source: + - unspecified:litellm + User-Agent: + - python-requests/2.32.3 + accept: + - application/json + authorization: + - DUMMY + content-type: + - application/json + method: POST + uri: https://api.cohere.ai/v1/chat + response: + body: + string: "{\"is_finished\":false,\"event_type\":\"stream-start\",\"generation_id\":\"10214030-c717-4fc1-ba4b-5074515e408b\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"Hello\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + How\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'s\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + it\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + going\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"?\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + I\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + hope\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + you\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'re\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + having\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + a\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + fantastic\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + day\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + \U0001F60A\"}\n{\"is_finished\":true,\"event_type\":\"stream-end\",\"response\":{\"response_id\":\"c48da366-0c8d-4d42-a3cf-1812386af038\",\"text\":\"Hello! + How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"10214030-c717-4fc1-ba4b-5074515e408b\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello + World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope + you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}},\"finish_reason\":\"COMPLETE\"}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Transfer-Encoding: + - chunked + Via: + - 1.1 google + access-control-expose-headers: + - X-Debug-Trace-ID + cache-control: + - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 + content-type: + - application/stream+json + date: + - Thu, 06 Feb 2025 16:07:55 GMT + expires: + - Thu, 01 Jan 1970 00:00:00 UTC + pragma: + - no-cache + server: + - envoy + vary: + - Origin + x-accel-expires: + - '0' + x-debug-trace-id: + - 0918ceb5cc60c554ad596e43a8816b39 + x-endpoint-monthly-call-limit: + - '1000' + x-envoy-upstream-service-time: + - '71' + x-trial-endpoint-call-limit: + - '40' + x-trial-endpoint-call-remaining: + - '39' + status: + code: 200 + message: OK +- request: + body: '{"model": "command-r", "chat_history": [], "stream": true, "use_always_litellm_tracer": + false, "message": "Hello World!"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + authorization: + - DUMMY + connection: + - keep-alive + content-length: + - '121' + content-type: + - application/json + host: + - api.cohere.ai + request-source: + - unspecified:litellm + user-agent: + - litellm/1.53.3 + method: POST + uri: https://api.cohere.ai/v1/chat + response: + body: + string: "{\"is_finished\":false,\"event_type\":\"stream-start\",\"generation_id\":\"7df9a850-f541-4bd4-a9a4-325b142582a6\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"Hello\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + How\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'s\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + it\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + going\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"?\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + I\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + hope\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + you\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'re\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + having\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + a\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + fantastic\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + day\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + \U0001F60A\"}\n{\"is_finished\":true,\"event_type\":\"stream-end\",\"response\":{\"response_id\":\"6d23b5cb-19a8-40d1-8017-ed4db91460fb\",\"text\":\"Hello! + How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"7df9a850-f541-4bd4-a9a4-325b142582a6\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello + World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope + you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}},\"finish_reason\":\"COMPLETE\"}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Transfer-Encoding: + - chunked + Via: + - 1.1 google + access-control-expose-headers: + - X-Debug-Trace-ID + cache-control: + - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 + content-type: + - application/stream+json + date: + - Thu, 06 Feb 2025 16:07:56 GMT + expires: + - Thu, 01 Jan 1970 00:00:00 UTC + pragma: + - no-cache + server: + - envoy + vary: + - Origin + x-accel-expires: + - '0' + x-debug-trace-id: + - b7e5ae0102a441537a6186466663f12c + x-endpoint-monthly-call-limit: + - '1000' + x-envoy-upstream-service-time: + - '68' + x-trial-endpoint-call-limit: + - '40' + x-trial-endpoint-call-remaining: + - '38' + status: + code: 200 + message: OK - request: body: null headers: @@ -9,11 +165,11 @@ interactions: Connection: - keep-alive X-Amzn-Trace-Id: - - 919dccf9-50b1-463b-86a7-51bcf6374cdc + - aa2e4ac3-8856-4af6-b6bd-3982c420cfd4 user-agent: - - unknown/None; hf_hub/0.22.2; python/3.11.8 + - unknown/None; hf_hub/0.26.5; python/3.12.8 method: HEAD - uri: https://huggingface.co/claude-3-5-sonnet-20240620/resolve/main/tokenizer.json + uri: https://huggingface.co/command-r/resolve/main/tokenizer.json response: body: string: '' @@ -21,7 +177,7 @@ interactions: Access-Control-Allow-Origin: - https://huggingface.co Access-Control-Expose-Headers: - - X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range + - X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Xet-Access-Token,X-Xet-Token-Expiration,X-Xet-Refresh-Route,X-Xet-Cas-Url,X-Xet-Hash Connection: - keep-alive Content-Length: @@ -29,7 +185,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 05 Sep 2024 15:16:04 GMT + - Thu, 06 Feb 2025 16:07:56 GMT ETag: - W/"1d-DMkJvg8tpLoaQbsiq9Mz7l2CJyI" Referrer-Policy: @@ -37,13 +193,13 @@ interactions: Vary: - Origin Via: - - 1.1 47b02788927e4a826aab9351e0c1b010.cloudfront.net (CloudFront) + - 1.1 bd8c6bfe710f91c12ac92a052545fb5e.cloudfront.net (CloudFront) WWW-Authenticate: - Bearer realm="Authentication required", charset="UTF-8" X-Amz-Cf-Id: - - esA3Lsz5S4PosGwthwT5XeOvzz7V1Mb5kae5uvS2mMgU2DOl_Gsy9Q== + - huDRWk8G9DUT-XpSjdCV3FB4298OXJ2TVzF6nUlkOp1LPjz8qbogiQ== X-Amz-Cf-Pop: - - BRU50-P1 + - BOG50-C1 X-Cache: - Error from cloudfront X-Error-Message: @@ -51,164 +207,10 @@ interactions: X-Powered-By: - huggingface-moon X-Request-Id: - - Root=1-66d9cb34-31be3f7e505a144d1f5c48b0;919dccf9-50b1-463b-86a7-51bcf6374cdc + - Root=1-67a4de5c-1a8874ef225174b800e0d4bd;aa2e4ac3-8856-4af6-b6bd-3982c420cfd4 cross-origin-opener-policy: - same-origin status: code: 401 message: Unauthorized -- request: - body: '{"messages": [{"role": "user", "content": [{"type": "text", "text": "Hello - World!"}]}], "max_tokens": 4096, "model": "claude-3-5-sonnet-20240620", "stream": - true}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate - anthropic-version: - - '2023-06-01' - connection: - - keep-alive - content-length: - - '162' - content-type: - - application/json - host: - - api.anthropic.com - user-agent: - - litellm/1.41.23 - method: POST - uri: https://api.anthropic.com/v1/messages - response: - body: - string: 'event: message_start - - data: {"type":"message_start","message":{"id":"msg_013E68RoxptyPCc1kxArQ1Ne","type":"message","role":"assistant","model":"claude-3-5-sonnet-20240620","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":10,"output_tokens":5}} } - - - event: content_block_start - - data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""} } - - - event: ping - - data: {"type": "ping"} - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello! - It''s nice"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - to meet you. How"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - can"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - I assist you today?"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - Is"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - there anything specific"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - you''d like to"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - talk"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - about or any questions"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - you have?"} } - - - event: content_block_stop - - data: {"type":"content_block_stop","index":0 } - - - event: message_delta - - data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":35} } - - - event: message_stop - - data: {"type":"message_stop" } - - - ' - headers: - CF-Cache-Status: - - DYNAMIC - CF-RAY: - - 8be72da808002e1a-BRU - Cache-Control: - - no-cache - Connection: - - keep-alive - Content-Type: - - text/event-stream; charset=utf-8 - Date: - - Thu, 05 Sep 2024 15:16:05 GMT - Server: - - cloudflare - Transfer-Encoding: - - chunked - X-Robots-Tag: - - none - anthropic-ratelimit-requests-limit: - - '5' - anthropic-ratelimit-requests-remaining: - - '2' - anthropic-ratelimit-requests-reset: - - '2024-09-05T15:16:43Z' - anthropic-ratelimit-tokens-limit: - - '20000' - anthropic-ratelimit-tokens-remaining: - - '16000' - anthropic-ratelimit-tokens-reset: - - '2024-09-05T15:16:16Z' - request-id: - - req_01Y5WYxkzR42ZiuMUddXZyHx - via: - - 1.1 google - status: - code: 200 - message: OK version: 1 diff --git a/tests/cassettes/test_litellm_chat.yaml b/tests/cassettes/test_litellm_chat.yaml index 20423cc..cfb10ed 100644 --- a/tests/cassettes/test_litellm_chat.yaml +++ b/tests/cassettes/test_litellm_chat.yaml @@ -1,80 +1,70 @@ interactions: - request: - body: '{"inputs": "<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\nHello - World!<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n", "parameters": - {"details": true, "return_full_text": false}, "stream": false}' + body: '{"model": "command-r", "chat_history": [], "message": "Hello World!"}' headers: - Accept: - - '*/*' Accept-Encoding: - gzip, deflate Connection: - keep-alive Content-Length: - - '223' + - '69' + Request-Source: + - unspecified:litellm User-Agent: - python-requests/2.32.3 + accept: + - application/json authorization: - DUMMY content-type: - application/json method: POST - uri: https://api-inference.huggingface.co/models/meta-llama/Meta-Llama-3-8B-Instruct + uri: https://api.cohere.ai/v1/chat response: body: - string: '[{"generated_text":"Hello World! It''s nice to meet you! Is there something - I can help you with or would you like to chat?","details":{"finish_reason":"eos_token","generated_tokens":26,"seed":null,"prefill":[],"tokens":[{"id":9906,"text":"Hello","logprob":-0.0009560585,"special":false},{"id":4435,"text":" - World","logprob":-0.7558594,"special":false},{"id":0,"text":"!","logprob":-0.0005221367,"special":false},{"id":1102,"text":" - It","logprob":-0.23486328,"special":false},{"id":596,"text":"''s","logprob":-0.00017082691,"special":false},{"id":6555,"text":" - nice","logprob":-0.19726562,"special":false},{"id":311,"text":" to","logprob":-0.0000030994415,"special":false},{"id":3449,"text":" - meet","logprob":-0.00020265579,"special":false},{"id":499,"text":" you","logprob":-0.0000010728836,"special":false},{"id":0,"text":"!","logprob":-0.08087158,"special":false},{"id":2209,"text":" - Is","logprob":-0.016540527,"special":false},{"id":1070,"text":" there","logprob":-0.0000166893,"special":false},{"id":2555,"text":" - something","logprob":-0.0016059875,"special":false},{"id":358,"text":" I","logprob":-0.015335083,"special":false},{"id":649,"text":" - can","logprob":-3.5762787e-7,"special":false},{"id":1520,"text":" help","logprob":-0.0012950897,"special":false},{"id":499,"text":" - you","logprob":-0.0008840561,"special":false},{"id":449,"text":" with","logprob":-0.000014305115,"special":false},{"id":477,"text":" - or","logprob":-0.6582031,"special":false},{"id":1053,"text":" would","logprob":-0.0008378029,"special":false},{"id":499,"text":" - you","logprob":-0.0000013113022,"special":false},{"id":1093,"text":" like","logprob":-0.00037932396,"special":false},{"id":311,"text":" - to","logprob":-0.0000047683716,"special":false},{"id":6369,"text":" chat","logprob":-0.005405426,"special":false},{"id":30,"text":"?","logprob":-0.056884766,"special":false},{"id":128009,"text":"<|eot_id|>","logprob":-0.0006275177,"special":true}]}}]' + string: "{\"response_id\":\"b81153fc-b376-4249-a36b-adfa53e60e74\",\"text\":\"Hello! + How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"6836678e-9982-48fc-956b-abdab234e1e4\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello + World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope + you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}}" headers: - Connection: - - keep-alive - Content-Type: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Content-Length: + - '506' + Via: + - 1.1 google + access-control-expose-headers: + - X-Debug-Trace-ID + cache-control: + - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 + content-type: - application/json - Date: - - Fri, 27 Dec 2024 18:09:38 GMT - Transfer-Encoding: - - chunked - access-control-allow-credentials: - - 'true' - access-control-allow-origin: - - '*' + date: + - Thu, 06 Feb 2025 15:24:42 GMT + expires: + - Thu, 01 Jan 1970 00:00:00 UTC + num_chars: + - '432' + num_tokens: + - '21' + pragma: + - no-cache + server: + - envoy vary: - - origin, access-control-request-method, access-control-request-headers, Origin, - Access-Control-Request-Method, Access-Control-Request-Headers - x-compute-characters: - - '128' - x-compute-time: - - '0.524935096' - x-compute-type: - - 2-a10-g - x-generated-tokens: - - '26' - x-inference-time: - - '524' - x-prompt-tokens: - - '14' - x-queue-time: - - '0' - x-request-id: - - hZ4W55TpV8NIXDdDvwnG5 - x-sha: - - 5f0b02c75b57c5855da9ae460ce51323ea669d8a - x-time-per-token: - - '20' - x-total-time: - - '524' - x-validation-time: + - Origin + x-accel-expires: - '0' + x-debug-trace-id: + - 69a7683d02576d94c359837c12c99c5b + x-endpoint-monthly-call-limit: + - '1000' + x-envoy-upstream-service-time: + - '256' + x-trial-endpoint-call-limit: + - '40' + x-trial-endpoint-call-remaining: + - '39' status: code: 200 message: OK diff --git a/tests/cassettes/test_litellm_stream_chat.yaml b/tests/cassettes/test_litellm_stream_chat.yaml index b1f912b..a729ef4 100644 --- a/tests/cassettes/test_litellm_stream_chat.yaml +++ b/tests/cassettes/test_litellm_stream_chat.yaml @@ -1,148 +1,274 @@ interactions: - request: - body: '{"messages": [{"role": "user", "content": [{"type": "text", "text": "Hello - World!"}]}], "max_tokens": 4096, "model": "claude-3-5-sonnet-20240620", "stream": - true}' + body: '{"model": "command-r", "chat_history": [], "stream": true, "use_always_litellm_tracer": + false, "message": "Hello World!"}' headers: Accept-Encoding: - gzip, deflate Connection: - keep-alive Content-Length: - - '162' + - '121' + Request-Source: + - unspecified:litellm User-Agent: - python-requests/2.32.3 accept: - application/json - anthropic-version: - - '2023-06-01' + authorization: + - DUMMY content-type: - application/json method: POST - uri: https://api.anthropic.com/v1/messages + uri: https://api.cohere.ai/v1/chat response: body: - string: 'event: message_start - - data: {"type":"message_start","message":{"id":"msg_01K8R7oa2MDmHMxNTXRdYwH1","type":"message","role":"assistant","model":"claude-3-5-sonnet-20240620","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":10,"output_tokens":5}} } - - - event: content_block_start - - data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""} } - - - event: ping - - data: {"type": "ping"} - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello! - It''s great"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - to meet you. How"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - can"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - I assist you today?"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - Feel"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - free to ask me anything"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - you"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"''d - like help"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - with."} } - - - event: content_block_stop - - data: {"type":"content_block_stop","index":0 } - - - event: message_delta - - data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":31} } - - - event: message_stop - - data: {"type":"message_stop" } - - - ' + string: "{\"is_finished\":false,\"event_type\":\"stream-start\",\"generation_id\":\"768e2f94-cd41-400a-a1b7-a6df2be89e35\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"Hello\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + How\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'s\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + it\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + going\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"?\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + I\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + hope\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + you\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'re\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + having\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + a\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + fantastic\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + day\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + \U0001F60A\"}\n{\"is_finished\":true,\"event_type\":\"stream-end\",\"response\":{\"response_id\":\"01ef3da7-c084-4bb1-8d22-3b47182a4e13\",\"text\":\"Hello! + How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"768e2f94-cd41-400a-a1b7-a6df2be89e35\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello + World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope + you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}},\"finish_reason\":\"COMPLETE\"}\n" headers: - CF-Cache-Status: - - DYNAMIC - CF-RAY: - - 8be72d9dabb2b733-BRU - Cache-Control: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Transfer-Encoding: + - chunked + Via: + - 1.1 google + access-control-expose-headers: + - X-Debug-Trace-ID + cache-control: + - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 + content-type: + - application/stream+json + date: + - Thu, 06 Feb 2025 16:03:58 GMT + expires: + - Thu, 01 Jan 1970 00:00:00 UTC + pragma: - no-cache - Connection: + server: + - envoy + vary: + - Origin + x-accel-expires: + - '0' + x-debug-trace-id: + - 9c06fc0a408b2c8aca97a2d263e1de34 + x-endpoint-monthly-call-limit: + - '1000' + x-envoy-upstream-service-time: + - '81' + x-trial-endpoint-call-limit: + - '40' + x-trial-endpoint-call-remaining: + - '39' + status: + code: 200 + message: OK +- request: + body: '{"model": "command-r", "chat_history": [], "stream": true, "use_always_litellm_tracer": + false, "message": "Hello World!"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + authorization: + - DUMMY + connection: - keep-alive - Content-Type: - - text/event-stream; charset=utf-8 - Date: - - Thu, 05 Sep 2024 15:16:03 GMT - Server: - - cloudflare + content-length: + - '121' + content-type: + - application/json + host: + - api.cohere.ai + request-source: + - unspecified:litellm + user-agent: + - litellm/1.53.3 + method: POST + uri: https://api.cohere.ai/v1/chat + response: + body: + string: "{\"is_finished\":false,\"event_type\":\"stream-start\",\"generation_id\":\"8701496c-9bb0-477d-bd80-819b6f07e342\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"Hello\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + How\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'s\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + it\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + going\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"?\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + I\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + hope\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + you\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'re\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + having\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + a\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + fantastic\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + day\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + \U0001F60A\"}\n{\"is_finished\":true,\"event_type\":\"stream-end\",\"response\":{\"response_id\":\"e7bfbb80-1f37-46ae-af35-c64f96beacf4\",\"text\":\"Hello! + How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"8701496c-9bb0-477d-bd80-819b6f07e342\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello + World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope + you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}},\"finish_reason\":\"COMPLETE\"}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Transfer-Encoding: - chunked - X-Robots-Tag: - - none - anthropic-ratelimit-requests-limit: - - '5' - anthropic-ratelimit-requests-remaining: - - '3' - anthropic-ratelimit-requests-reset: - - '2024-09-05T15:16:43Z' - anthropic-ratelimit-tokens-limit: - - '20000' - anthropic-ratelimit-tokens-remaining: - - '16000' - anthropic-ratelimit-tokens-reset: - - '2024-09-05T15:16:15Z' - request-id: - - req_0126Z9CVAxnRKbK2ee7AVsYT - via: + Via: - 1.1 google + access-control-expose-headers: + - X-Debug-Trace-ID + cache-control: + - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 + content-type: + - application/stream+json + date: + - Thu, 06 Feb 2025 16:03:58 GMT + expires: + - Thu, 01 Jan 1970 00:00:00 UTC + pragma: + - no-cache + server: + - envoy + vary: + - Origin + x-accel-expires: + - '0' + x-debug-trace-id: + - 1c9181b671c6c141e70b0b7bca7be11c + x-endpoint-monthly-call-limit: + - '1000' + x-envoy-upstream-service-time: + - '83' + x-trial-endpoint-call-limit: + - '40' + x-trial-endpoint-call-remaining: + - '38' status: code: 200 message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - identity + Connection: + - keep-alive + X-Amzn-Trace-Id: + - 23ff336f-e625-4eab-b5fa-19e69f06dc0e + user-agent: + - unknown/None; hf_hub/0.26.5; python/3.12.8 + method: HEAD + uri: https://huggingface.co/command-r/resolve/main/tokenizer.json + response: + body: + string: '' + headers: + Access-Control-Allow-Origin: + - https://huggingface.co + Access-Control-Expose-Headers: + - X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Xet-Access-Token,X-Xet-Token-Expiration,X-Xet-Refresh-Route,X-Xet-Cas-Url,X-Xet-Hash + Connection: + - keep-alive + Content-Length: + - '29' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Thu, 06 Feb 2025 16:03:58 GMT + ETag: + - W/"1d-DMkJvg8tpLoaQbsiq9Mz7l2CJyI" + Referrer-Policy: + - strict-origin-when-cross-origin + Vary: + - Origin + Via: + - 1.1 55fac76ddad4056139456fd010801a3a.cloudfront.net (CloudFront) + WWW-Authenticate: + - Bearer realm="Authentication required", charset="UTF-8" + X-Amz-Cf-Id: + - hQCeWUlSq388HOEKPQ3C42CDGTMZnUclxSRFJ1upnpf-tMTv5Nevlw== + X-Amz-Cf-Pop: + - BOG50-C1 + X-Cache: + - Error from cloudfront + X-Error-Message: + - Invalid username or password. + X-Powered-By: + - huggingface-moon + X-Request-Id: + - Root=1-67a4dd6e-4c7235e40fcd20e234b8be0d;23ff336f-e625-4eab-b5fa-19e69f06dc0e + cross-origin-opener-policy: + - same-origin + status: + code: 401 + message: Unauthorized +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - identity + Connection: + - keep-alive + X-Amzn-Trace-Id: + - 1767f55f-0570-4a8c-8b1b-2d06b7a14559 + user-agent: + - unknown/None; hf_hub/0.26.5; python/3.12.8 + method: HEAD + uri: https://huggingface.co/command-r/resolve/main/tokenizer.json + response: + body: + string: '' + headers: + Access-Control-Allow-Origin: + - https://huggingface.co + Access-Control-Expose-Headers: + - X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Xet-Access-Token,X-Xet-Token-Expiration,X-Xet-Refresh-Route,X-Xet-Cas-Url,X-Xet-Hash + Connection: + - keep-alive + Content-Length: + - '29' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Thu, 06 Feb 2025 16:03:58 GMT + ETag: + - W/"1d-DMkJvg8tpLoaQbsiq9Mz7l2CJyI" + Referrer-Policy: + - strict-origin-when-cross-origin + Vary: + - Origin + Via: + - 1.1 2fe3b10bc3da6ef618e3ab1598c2020c.cloudfront.net (CloudFront) + WWW-Authenticate: + - Bearer realm="Authentication required", charset="UTF-8" + X-Amz-Cf-Id: + - 2WUEY6QVBCS1-GRhH-F6jfHrY2EK1shdDcAJnqH2UUZr7romUtnVhg== + X-Amz-Cf-Pop: + - BOG50-C1 + X-Cache: + - Error from cloudfront + X-Error-Message: + - Invalid username or password. + X-Powered-By: + - huggingface-moon + X-Request-Id: + - Root=1-67a4dd6e-00a4794f6423a90b75068f3c;1767f55f-0570-4a8c-8b1b-2d06b7a14559 + cross-origin-opener-policy: + - same-origin + status: + code: 401 + message: Unauthorized version: 1 diff --git a/tests/test_litellm_tracer_use_default.py b/tests/test_litellm_tracer_use_default.py index a480102..cf93580 100644 --- a/tests/test_litellm_tracer_use_default.py +++ b/tests/test_litellm_tracer_use_default.py @@ -11,7 +11,7 @@ @pytest.mark.vcr def test_litellm_chat(tracer_with_sync_init): response = litellm.completion( - model="huggingface/meta-llama/Meta-Llama-3-8B-Instruct", + model="command-r", messages=[{"role": "user", "content": "Hello World!"}], use_always_litellm_tracer=USE_ALWAYS_LITELLM_TRACER, ) @@ -19,8 +19,8 @@ def test_litellm_chat(tracer_with_sync_init): assert getattr(response, "scope3ai") is not None # TODO: Add this assert when AiApi support it # assert response.scope3ai.request.managed_service_id == PROVIDERS.LITELLM.value - assert response.scope3ai.request.input_tokens == 44 - assert response.scope3ai.request.output_tokens == 69 + assert response.scope3ai.request.input_tokens == 3 + assert response.scope3ai.request.output_tokens == 21 assert response.scope3ai.impact is not None assert response.scope3ai.impact.total_impact is not None assert response.scope3ai.impact.total_impact.usage_energy_wh > 0 @@ -56,11 +56,13 @@ async def test_litellm_async_chat(tracer_with_sync_init): def test_litellm_stream_chat(tracer_with_sync_init): stream = litellm.completion( messages=[{"role": "user", "content": "Hello World!"}], - model="claude-3-5-sonnet-20240620", + model="command-r", stream=True, use_always_litellm_tracer=USE_ALWAYS_LITELLM_TRACER, ) for chunk in stream: + if chunk.choices[0].finish_reason is None: + continue assert getattr(chunk, "scope3ai") is not None assert chunk.scope3ai.impact is not None assert chunk.scope3ai.impact.total_impact is not None @@ -76,11 +78,13 @@ def test_litellm_stream_chat(tracer_with_sync_init): async def test_litellm_async_stream_chat(tracer_with_sync_init): stream = await litellm.acompletion( messages=[{"role": "user", "content": "Hello World!"}], - model="claude-3-5-sonnet-20240620", + model="command-r", stream=True, use_always_litellm_tracer=USE_ALWAYS_LITELLM_TRACER, ) async for chunk in stream: + if chunk.choices[0].finish_reason is None: + continue assert getattr(chunk, "scope3ai") is not None assert chunk.scope3ai.impact is not None assert chunk.scope3ai.impact.total_impact is not None From b3d9c483a0679b27929701de7d33cbc294b226af Mon Sep 17 00:00:00 2001 From: Kevin Guevara Date: Thu, 6 Feb 2025 13:00:01 -0500 Subject: [PATCH 2/5] fix: fix litellm --- examples/anthropic/anthropic-chat.py | 1 + scope3ai/tracers/litellm/chat.py | 9 +- .../test_litellm_async_stream_chat.yaml | 305 ++++++--------- tests/cassettes/test_litellm_stream_chat.yaml | 356 ++++++------------ tests/test_litellm_tracer.py | 4 + 5 files changed, 234 insertions(+), 441 deletions(-) diff --git a/examples/anthropic/anthropic-chat.py b/examples/anthropic/anthropic-chat.py index 1fa0e98..c3f15f9 100644 --- a/examples/anthropic/anthropic-chat.py +++ b/examples/anthropic/anthropic-chat.py @@ -13,6 +13,7 @@ def main(model: str, message: str, max_tokens: int, api_key: str | None = None): messages=[{"role": "user", "content": message}], max_tokens=max_tokens, ) + print(response.scope3ai) print(response.content[0].text.strip()) impact = tracer.impact() diff --git a/scope3ai/tracers/litellm/chat.py b/scope3ai/tracers/litellm/chat.py index 705bc25..542df54 100644 --- a/scope3ai/tracers/litellm/chat.py +++ b/scope3ai/tracers/litellm/chat.py @@ -42,9 +42,10 @@ def litellm_chat_wrapper_stream( # type: ignore[misc] kwargs: Any, ) -> CustomStreamWrapper: timer_start = time.perf_counter() - stream = wrapped(*args, **kwargs) token_count = 0 - print(enumerate(stream)) + keep_traces = not kwargs.pop("use_always_litellm_tracer", False) + with Scope3AI.get_instance().trace(keep_traces=keep_traces): + stream = wrapped(*args, **kwargs) for i, chunk in enumerate(stream): if i > 0: token_count += 1 @@ -171,7 +172,9 @@ async def litellm_async_chat_wrapper_stream( # type: ignore[misc] kwargs: Any, ) -> CustomStreamWrapper: timer_start = time.perf_counter() - stream = await wrapped(*args, **kwargs) + keep_traces = not kwargs.pop("use_always_litellm_tracer", False) + with Scope3AI.get_instance().trace(keep_traces=keep_traces): + stream = await wrapped(*args, **kwargs) i = 0 token_count = 0 async for chunk in stream: diff --git a/tests/cassettes/test_litellm_async_stream_chat.yaml b/tests/cassettes/test_litellm_async_stream_chat.yaml index d34353b..5939399 100644 --- a/tests/cassettes/test_litellm_async_stream_chat.yaml +++ b/tests/cassettes/test_litellm_async_stream_chat.yaml @@ -1,216 +1,141 @@ interactions: - request: - body: '{"model": "command-r", "chat_history": [], "stream": true, "use_always_litellm_tracer": - false, "message": "Hello World!"}' - headers: - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '121' - Request-Source: - - unspecified:litellm - User-Agent: - - python-requests/2.32.3 - accept: - - application/json - authorization: - - DUMMY - content-type: - - application/json - method: POST - uri: https://api.cohere.ai/v1/chat - response: - body: - string: "{\"is_finished\":false,\"event_type\":\"stream-start\",\"generation_id\":\"10214030-c717-4fc1-ba4b-5074515e408b\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"Hello\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - How\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'s\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - it\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - going\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"?\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - I\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - hope\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - you\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'re\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - having\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - a\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - fantastic\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - day\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - \U0001F60A\"}\n{\"is_finished\":true,\"event_type\":\"stream-end\",\"response\":{\"response_id\":\"c48da366-0c8d-4d42-a3cf-1812386af038\",\"text\":\"Hello! - How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"10214030-c717-4fc1-ba4b-5074515e408b\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello - World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope - you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}},\"finish_reason\":\"COMPLETE\"}\n" - headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Transfer-Encoding: - - chunked - Via: - - 1.1 google - access-control-expose-headers: - - X-Debug-Trace-ID - cache-control: - - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 - content-type: - - application/stream+json - date: - - Thu, 06 Feb 2025 16:07:55 GMT - expires: - - Thu, 01 Jan 1970 00:00:00 UTC - pragma: - - no-cache - server: - - envoy - vary: - - Origin - x-accel-expires: - - '0' - x-debug-trace-id: - - 0918ceb5cc60c554ad596e43a8816b39 - x-endpoint-monthly-call-limit: - - '1000' - x-envoy-upstream-service-time: - - '71' - x-trial-endpoint-call-limit: - - '40' - x-trial-endpoint-call-remaining: - - '39' - status: - code: 200 - message: OK -- request: - body: '{"model": "command-r", "chat_history": [], "stream": true, "use_always_litellm_tracer": - false, "message": "Hello World!"}' + body: '{"messages": [{"role": "user", "content": [{"type": "text", "text": "Hello + World!"}]}], "max_tokens": 4096, "model": "claude-3-5-sonnet-20240620", "stream": + true}' headers: accept: - application/json accept-encoding: - gzip, deflate - authorization: - - DUMMY + anthropic-version: + - '2023-06-01' connection: - keep-alive content-length: - - '121' + - '162' content-type: - application/json host: - - api.cohere.ai - request-source: - - unspecified:litellm + - api.anthropic.com user-agent: - litellm/1.53.3 + x-api-key: + - DUMMY method: POST - uri: https://api.cohere.ai/v1/chat + uri: https://api.anthropic.com/v1/messages response: body: - string: "{\"is_finished\":false,\"event_type\":\"stream-start\",\"generation_id\":\"7df9a850-f541-4bd4-a9a4-325b142582a6\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"Hello\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - How\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'s\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - it\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - going\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"?\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - I\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - hope\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - you\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'re\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - having\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - a\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - fantastic\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - day\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - \U0001F60A\"}\n{\"is_finished\":true,\"event_type\":\"stream-end\",\"response\":{\"response_id\":\"6d23b5cb-19a8-40d1-8017-ed4db91460fb\",\"text\":\"Hello! - How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"7df9a850-f541-4bd4-a9a4-325b142582a6\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello - World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope - you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}},\"finish_reason\":\"COMPLETE\"}\n" + string: 'event: message_start + + data: {"type":"message_start","message":{"id":"msg_01YF7UQ9VUY1xiTXENQm13x9","type":"message","role":"assistant","model":"claude-3-5-sonnet-20240620","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":10,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":3}} } + + + event: content_block_start + + data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""} } + + + event: ping + + data: {"type": "ping"} + + + event: content_block_delta + + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello! + It"} } + + + event: content_block_delta + + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"''s + great to meet you. How can I assist"}} + + + event: content_block_delta + + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" + you today? Feel free to ask me any questions"} } + + + event: content_block_delta + + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" + or let me know if you''d like help"} } + + + event: content_block_delta + + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" + with something specific."} } + + + event: content_block_stop + + data: {"type":"content_block_stop","index":0 } + + + event: message_delta + + data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":39} + } + + + event: message_stop + + data: {"type":"message_stop" } + + + ' headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Transfer-Encoding: - - chunked - Via: - - 1.1 google - access-control-expose-headers: - - X-Debug-Trace-ID - cache-control: - - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 - content-type: - - application/stream+json - date: - - Thu, 06 Feb 2025 16:07:56 GMT - expires: - - Thu, 01 Jan 1970 00:00:00 UTC - pragma: + CF-RAY: + - 90dce90428c1497c-MIA + Cache-Control: - no-cache - server: - - envoy - vary: - - Origin - x-accel-expires: - - '0' - x-debug-trace-id: - - b7e5ae0102a441537a6186466663f12c - x-endpoint-monthly-call-limit: - - '1000' - x-envoy-upstream-service-time: - - '68' - x-trial-endpoint-call-limit: - - '40' - x-trial-endpoint-call-remaining: - - '38' - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - identity Connection: - keep-alive - X-Amzn-Trace-Id: - - aa2e4ac3-8856-4af6-b6bd-3982c420cfd4 - user-agent: - - unknown/None; hf_hub/0.26.5; python/3.12.8 - method: HEAD - uri: https://huggingface.co/command-r/resolve/main/tokenizer.json - response: - body: - string: '' - headers: - Access-Control-Allow-Origin: - - https://huggingface.co - Access-Control-Expose-Headers: - - X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Xet-Access-Token,X-Xet-Token-Expiration,X-Xet-Refresh-Route,X-Xet-Cas-Url,X-Xet-Hash - Connection: - - keep-alive - Content-Length: - - '29' Content-Type: - - text/plain; charset=utf-8 + - text/event-stream; charset=utf-8 Date: - - Thu, 06 Feb 2025 16:07:56 GMT - ETag: - - W/"1d-DMkJvg8tpLoaQbsiq9Mz7l2CJyI" - Referrer-Policy: - - strict-origin-when-cross-origin - Vary: - - Origin - Via: - - 1.1 bd8c6bfe710f91c12ac92a052545fb5e.cloudfront.net (CloudFront) - WWW-Authenticate: - - Bearer realm="Authentication required", charset="UTF-8" - X-Amz-Cf-Id: - - huDRWk8G9DUT-XpSjdCV3FB4298OXJ2TVzF6nUlkOp1LPjz8qbogiQ== - X-Amz-Cf-Pop: - - BOG50-C1 - X-Cache: - - Error from cloudfront - X-Error-Message: - - Invalid username or password. - X-Powered-By: - - huggingface-moon - X-Request-Id: - - Root=1-67a4de5c-1a8874ef225174b800e0d4bd;aa2e4ac3-8856-4af6-b6bd-3982c420cfd4 - cross-origin-opener-policy: - - same-origin + - Thu, 06 Feb 2025 17:37:49 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Robots-Tag: + - none + anthropic-ratelimit-input-tokens-limit: + - '20000' + anthropic-ratelimit-input-tokens-remaining: + - '20000' + anthropic-ratelimit-input-tokens-reset: + - '2025-02-06T17:37:48Z' + anthropic-ratelimit-output-tokens-limit: + - '4000' + anthropic-ratelimit-output-tokens-remaining: + - '2000' + anthropic-ratelimit-output-tokens-reset: + - '2025-02-06T17:38:18Z' + anthropic-ratelimit-requests-limit: + - '5' + anthropic-ratelimit-requests-remaining: + - '4' + anthropic-ratelimit-requests-reset: + - '2025-02-06T17:38:00Z' + anthropic-ratelimit-tokens-limit: + - '24000' + anthropic-ratelimit-tokens-remaining: + - '22000' + anthropic-ratelimit-tokens-reset: + - '2025-02-06T17:37:48Z' + cf-cache-status: + - DYNAMIC + request-id: + - req_01W3vhFHXXhvFecsAdtzJ2Us + via: + - 1.1 google status: - code: 401 - message: Unauthorized + code: 200 + message: OK version: 1 diff --git a/tests/cassettes/test_litellm_stream_chat.yaml b/tests/cassettes/test_litellm_stream_chat.yaml index a729ef4..b546b22 100644 --- a/tests/cassettes/test_litellm_stream_chat.yaml +++ b/tests/cassettes/test_litellm_stream_chat.yaml @@ -1,274 +1,134 @@ interactions: - request: - body: '{"model": "command-r", "chat_history": [], "stream": true, "use_always_litellm_tracer": - false, "message": "Hello World!"}' - headers: - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '121' - Request-Source: - - unspecified:litellm - User-Agent: - - python-requests/2.32.3 - accept: - - application/json - authorization: - - DUMMY - content-type: - - application/json - method: POST - uri: https://api.cohere.ai/v1/chat - response: - body: - string: "{\"is_finished\":false,\"event_type\":\"stream-start\",\"generation_id\":\"768e2f94-cd41-400a-a1b7-a6df2be89e35\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"Hello\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - How\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'s\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - it\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - going\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"?\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - I\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - hope\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - you\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'re\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - having\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - a\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - fantastic\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - day\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - \U0001F60A\"}\n{\"is_finished\":true,\"event_type\":\"stream-end\",\"response\":{\"response_id\":\"01ef3da7-c084-4bb1-8d22-3b47182a4e13\",\"text\":\"Hello! - How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"768e2f94-cd41-400a-a1b7-a6df2be89e35\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello - World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope - you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}},\"finish_reason\":\"COMPLETE\"}\n" - headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Transfer-Encoding: - - chunked - Via: - - 1.1 google - access-control-expose-headers: - - X-Debug-Trace-ID - cache-control: - - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 - content-type: - - application/stream+json - date: - - Thu, 06 Feb 2025 16:03:58 GMT - expires: - - Thu, 01 Jan 1970 00:00:00 UTC - pragma: - - no-cache - server: - - envoy - vary: - - Origin - x-accel-expires: - - '0' - x-debug-trace-id: - - 9c06fc0a408b2c8aca97a2d263e1de34 - x-endpoint-monthly-call-limit: - - '1000' - x-envoy-upstream-service-time: - - '81' - x-trial-endpoint-call-limit: - - '40' - x-trial-endpoint-call-remaining: - - '39' - status: - code: 200 - message: OK -- request: - body: '{"model": "command-r", "chat_history": [], "stream": true, "use_always_litellm_tracer": - false, "message": "Hello World!"}' + body: '{"messages": [{"role": "user", "content": [{"type": "text", "text": "Hello + World!"}]}], "max_tokens": 4096, "model": "claude-3-5-sonnet-20240620", "stream": + true}' headers: accept: - application/json accept-encoding: - gzip, deflate - authorization: - - DUMMY + anthropic-version: + - '2023-06-01' connection: - keep-alive content-length: - - '121' + - '162' content-type: - application/json host: - - api.cohere.ai - request-source: - - unspecified:litellm + - api.anthropic.com user-agent: - litellm/1.53.3 + x-api-key: + - DUMMY method: POST - uri: https://api.cohere.ai/v1/chat + uri: https://api.anthropic.com/v1/messages response: body: - string: "{\"is_finished\":false,\"event_type\":\"stream-start\",\"generation_id\":\"8701496c-9bb0-477d-bd80-819b6f07e342\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"Hello\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - How\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'s\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - it\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - going\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"?\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - I\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - hope\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - you\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'re\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - having\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - a\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - fantastic\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - day\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" - \U0001F60A\"}\n{\"is_finished\":true,\"event_type\":\"stream-end\",\"response\":{\"response_id\":\"e7bfbb80-1f37-46ae-af35-c64f96beacf4\",\"text\":\"Hello! - How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"8701496c-9bb0-477d-bd80-819b6f07e342\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello - World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope - you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}},\"finish_reason\":\"COMPLETE\"}\n" + string: 'event: message_start + + data: {"type":"message_start","message":{"id":"msg_014WEmdKMTwdumnRxDhyqNqn","type":"message","role":"assistant","model":"claude-3-5-sonnet-20240620","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":10,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":5}} } + + + event: content_block_start + + data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""} } + + + event: ping + + data: {"type": "ping"} + + + event: content_block_delta + + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello! + It''s nice"} } + + + event: content_block_delta + + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" + to meet you. How can I assist you today"} } + + + event: content_block_delta + + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"? + Feel free to ask me anything you''d like help"} } + + + event: content_block_delta + + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" + with."} } + + + event: content_block_stop + + data: {"type":"content_block_stop","index":0 } + + + event: message_delta + + data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":31} } + + + event: message_stop + + data: {"type":"message_stop" } + + + ' headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Transfer-Encoding: - - chunked - Via: - - 1.1 google - access-control-expose-headers: - - X-Debug-Trace-ID - cache-control: - - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 - content-type: - - application/stream+json - date: - - Thu, 06 Feb 2025 16:03:58 GMT - expires: - - Thu, 01 Jan 1970 00:00:00 UTC - pragma: + CF-RAY: + - 90dcf138ae59cc76-TPA + Cache-Control: - no-cache - server: - - envoy - vary: - - Origin - x-accel-expires: - - '0' - x-debug-trace-id: - - 1c9181b671c6c141e70b0b7bca7be11c - x-endpoint-monthly-call-limit: - - '1000' - x-envoy-upstream-service-time: - - '83' - x-trial-endpoint-call-limit: - - '40' - x-trial-endpoint-call-remaining: - - '38' - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - identity - Connection: - - keep-alive - X-Amzn-Trace-Id: - - 23ff336f-e625-4eab-b5fa-19e69f06dc0e - user-agent: - - unknown/None; hf_hub/0.26.5; python/3.12.8 - method: HEAD - uri: https://huggingface.co/command-r/resolve/main/tokenizer.json - response: - body: - string: '' - headers: - Access-Control-Allow-Origin: - - https://huggingface.co - Access-Control-Expose-Headers: - - X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Xet-Access-Token,X-Xet-Token-Expiration,X-Xet-Refresh-Route,X-Xet-Cas-Url,X-Xet-Hash - Connection: - - keep-alive - Content-Length: - - '29' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 06 Feb 2025 16:03:58 GMT - ETag: - - W/"1d-DMkJvg8tpLoaQbsiq9Mz7l2CJyI" - Referrer-Policy: - - strict-origin-when-cross-origin - Vary: - - Origin - Via: - - 1.1 55fac76ddad4056139456fd010801a3a.cloudfront.net (CloudFront) - WWW-Authenticate: - - Bearer realm="Authentication required", charset="UTF-8" - X-Amz-Cf-Id: - - hQCeWUlSq388HOEKPQ3C42CDGTMZnUclxSRFJ1upnpf-tMTv5Nevlw== - X-Amz-Cf-Pop: - - BOG50-C1 - X-Cache: - - Error from cloudfront - X-Error-Message: - - Invalid username or password. - X-Powered-By: - - huggingface-moon - X-Request-Id: - - Root=1-67a4dd6e-4c7235e40fcd20e234b8be0d;23ff336f-e625-4eab-b5fa-19e69f06dc0e - cross-origin-opener-policy: - - same-origin - status: - code: 401 - message: Unauthorized -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - identity - Connection: - - keep-alive - X-Amzn-Trace-Id: - - 1767f55f-0570-4a8c-8b1b-2d06b7a14559 - user-agent: - - unknown/None; hf_hub/0.26.5; python/3.12.8 - method: HEAD - uri: https://huggingface.co/command-r/resolve/main/tokenizer.json - response: - body: - string: '' - headers: - Access-Control-Allow-Origin: - - https://huggingface.co - Access-Control-Expose-Headers: - - X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Xet-Access-Token,X-Xet-Token-Expiration,X-Xet-Refresh-Route,X-Xet-Cas-Url,X-Xet-Hash Connection: - keep-alive - Content-Length: - - '29' Content-Type: - - text/plain; charset=utf-8 + - text/event-stream; charset=utf-8 Date: - - Thu, 06 Feb 2025 16:03:58 GMT - ETag: - - W/"1d-DMkJvg8tpLoaQbsiq9Mz7l2CJyI" - Referrer-Policy: - - strict-origin-when-cross-origin - Vary: - - Origin - Via: - - 1.1 2fe3b10bc3da6ef618e3ab1598c2020c.cloudfront.net (CloudFront) - WWW-Authenticate: - - Bearer realm="Authentication required", charset="UTF-8" - X-Amz-Cf-Id: - - 2WUEY6QVBCS1-GRhH-F6jfHrY2EK1shdDcAJnqH2UUZr7romUtnVhg== - X-Amz-Cf-Pop: - - BOG50-C1 - X-Cache: - - Error from cloudfront - X-Error-Message: - - Invalid username or password. - X-Powered-By: - - huggingface-moon - X-Request-Id: - - Root=1-67a4dd6e-00a4794f6423a90b75068f3c;1767f55f-0570-4a8c-8b1b-2d06b7a14559 - cross-origin-opener-policy: - - same-origin + - Thu, 06 Feb 2025 17:43:25 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Robots-Tag: + - none + anthropic-ratelimit-input-tokens-limit: + - '20000' + anthropic-ratelimit-input-tokens-remaining: + - '20000' + anthropic-ratelimit-input-tokens-reset: + - '2025-02-06T17:43:24Z' + anthropic-ratelimit-output-tokens-limit: + - '4000' + anthropic-ratelimit-output-tokens-remaining: + - '2000' + anthropic-ratelimit-output-tokens-reset: + - '2025-02-06T17:43:55Z' + anthropic-ratelimit-requests-limit: + - '5' + anthropic-ratelimit-requests-remaining: + - '4' + anthropic-ratelimit-requests-reset: + - '2025-02-06T17:43:36Z' + anthropic-ratelimit-tokens-limit: + - '24000' + anthropic-ratelimit-tokens-remaining: + - '22000' + anthropic-ratelimit-tokens-reset: + - '2025-02-06T17:43:24Z' + cf-cache-status: + - DYNAMIC + request-id: + - req_01LXm7EY6CGPogN2v8YQ5CWU + via: + - 1.1 google status: - code: 401 - message: Unauthorized + code: 200 + message: OK version: 1 diff --git a/tests/test_litellm_tracer.py b/tests/test_litellm_tracer.py index 2090fa2..2abdb19 100644 --- a/tests/test_litellm_tracer.py +++ b/tests/test_litellm_tracer.py @@ -57,6 +57,8 @@ def test_litellm_stream_chat(tracer_with_sync_init): use_always_litellm_tracer=USE_ALWAYS_LITELLM_TRACER, ) for chunk in stream: + if chunk.choices[0].finish_reason is None: + continue assert getattr(chunk, "scope3ai") is not None assert chunk.scope3ai.impact is not None assert chunk.scope3ai.impact.total_impact is not None @@ -77,6 +79,8 @@ async def test_litellm_async_stream_chat(tracer_with_sync_init): use_always_litellm_tracer=USE_ALWAYS_LITELLM_TRACER, ) async for chunk in stream: + if chunk.choices[0].finish_reason is None: + continue assert getattr(chunk, "scope3ai") is not None assert chunk.scope3ai.impact is not None assert chunk.scope3ai.impact.total_impact is not None From 53e92ce1a95d73f9c6165efcf18421f57249c74a Mon Sep 17 00:00:00 2001 From: Kevin Guevara Date: Thu, 6 Feb 2025 13:17:43 -0500 Subject: [PATCH 3/5] fix: fixing duplicated cassetes --- .../test_litellm_async_chat_default.yaml | 71 + ...itellm_async_image_generation_default.yaml | 101 ++ ..._litellm_async_speech_to_text_default.yaml | 239 ++++ .../test_litellm_async_stream_chat.yaml | 37 +- ...est_litellm_async_stream_chat_default.yaml | 158 +++ ..._litellm_async_text_to_speech_default.yaml | 1098 +++++++++++++++ tests/cassettes/test_litellm_chat.yaml | 109 +- .../cassettes/test_litellm_chat_default.yaml | 71 + ...test_litellm_image_generation_default.yaml | 99 ++ .../test_litellm_speech_to_text_default.yaml | 239 ++++ .../test_litellm_stream_chat_default.yaml | 158 +++ .../test_litellm_text_to_speech_default.yaml | 1249 +++++++++++++++++ tests/test_litellm_tracer_use_default.py | 20 +- 13 files changed, 3569 insertions(+), 80 deletions(-) create mode 100644 tests/cassettes/test_litellm_async_chat_default.yaml create mode 100644 tests/cassettes/test_litellm_async_image_generation_default.yaml create mode 100644 tests/cassettes/test_litellm_async_speech_to_text_default.yaml create mode 100644 tests/cassettes/test_litellm_async_stream_chat_default.yaml create mode 100644 tests/cassettes/test_litellm_async_text_to_speech_default.yaml create mode 100644 tests/cassettes/test_litellm_chat_default.yaml create mode 100644 tests/cassettes/test_litellm_image_generation_default.yaml create mode 100644 tests/cassettes/test_litellm_speech_to_text_default.yaml create mode 100644 tests/cassettes/test_litellm_stream_chat_default.yaml create mode 100644 tests/cassettes/test_litellm_text_to_speech_default.yaml diff --git a/tests/cassettes/test_litellm_async_chat_default.yaml b/tests/cassettes/test_litellm_async_chat_default.yaml new file mode 100644 index 0000000..a5486ba --- /dev/null +++ b/tests/cassettes/test_litellm_async_chat_default.yaml @@ -0,0 +1,71 @@ +interactions: +- request: + body: '{"model": "command-r", "chat_history": [], "message": "Hello World!"}' + headers: + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '69' + Request-Source: + - unspecified:litellm + User-Agent: + - python-requests/2.32.3 + accept: + - application/json + authorization: + - DUMMY + content-type: + - application/json + method: POST + uri: https://api.cohere.ai/v1/chat + response: + body: + string: "{\"response_id\":\"9c6d4f87-29e4-4b2d-bd83-af5aa2349747\",\"text\":\"Hello! + How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"bc03286a-44a8-404a-8e51-fff9882f468e\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello + World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope + you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}}" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Content-Length: + - '506' + Via: + - 1.1 google + access-control-expose-headers: + - X-Debug-Trace-ID + cache-control: + - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 + content-type: + - application/json + date: + - Thu, 06 Feb 2025 18:07:26 GMT + expires: + - Thu, 01 Jan 1970 00:00:00 UTC + num_chars: + - '432' + num_tokens: + - '21' + pragma: + - no-cache + server: + - envoy + vary: + - Origin + x-accel-expires: + - '0' + x-debug-trace-id: + - 7705da10a6c1899e63c5f19bccb89efc + x-endpoint-monthly-call-limit: + - '1000' + x-envoy-upstream-service-time: + - '241' + x-trial-endpoint-call-limit: + - '40' + x-trial-endpoint-call-remaining: + - '38' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_litellm_async_image_generation_default.yaml b/tests/cassettes/test_litellm_async_image_generation_default.yaml new file mode 100644 index 0000000..d4718e5 --- /dev/null +++ b/tests/cassettes/test_litellm_async_image_generation_default.yaml @@ -0,0 +1,101 @@ +interactions: +- request: + body: '{"prompt": "A futuristic cityscape at night", "model": "dall-e-3"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + authorization: + - DUMMY + connection: + - keep-alive + content-length: + - '66' + content-type: + - application/json + cookie: + - _cfuvid=nYBpz7R2yWYQ4.zgnTYQWvItEw5OvZ6NJYRrhpNwgM0-1737481181414-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - AsyncOpenAI/Python 1.57.1 + x-stainless-arch: + - x64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - Linux + x-stainless-package-version: + - 1.57.1 + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.8 + method: POST + uri: https://api.openai.com/v1/images/generations + response: + body: + string: !!binary | + H4sIAAAAAAAAAwAAAP//ZFJdb9tGEHz3r1gIsJ5EiZIokTYgFKo/mjhNi/ijcVwUxfJuRa5F3RG3 + S8p2kP9ekLKBGH053GF252Zm9/sRwMAEQiU7OIVpOs+y5WKWpqMOsKg4OIW/jwAAvvcnwCBQy0L2 + 3zr4Xa2DUxhcuJaFvQN0QE81OuGWRsBV1ezYddxgWJ/FYE0gpMAOtCTYNNoEGsPnplKOlCmQhbzh + yrIrBNTvKbArAHPfEvjQUUEe2BYkI2icpVCxwp61hICW0SmUDQn4DTjyDvKqe6GzULPbyggCbSoy + Cv4gYMch+BBVvCWQJmzQHJo7TJoQfOM6KZB7ywdkj0phDDc1GjIBNyqAgUAMqvbyX62x2z6DbJ9H + UBG2PQeV7CyIBsJtz1VxUSqgdA3PYAKLmOBFICfdEzmQkne7PoIRsFMKxjtHpstTts9iAtYUZAy3 + b1myKBvAYEpWMl24wAL7gHV9kFZhKAgsF6xYgXDhsKAR1ME/ktFOZst5QKcj2PleNu+wIBnDGgpy + WhEUFb7QW0g7793BRt04ow0q9Xb6eR8G89omXLUUoOSi7BtkBAal/7LbGi0pEFZQVH4PWqLCY/Ok + WHt5JWRn0FkSQ04P7Aea8WD0tphNqLptLFVrOZ1MPLLFqiKsuQ7eimlknFc+HxsfaLxnZ/1exo50 + UgduUWniQxHN5K8v7dcyef509XRWnNzr7dny4ebqbtIIhejbn7F7Wa8/bq9mv15f1efXycP85veL + rxPeFdEfl7O7IuYvHz42Qb8FO1NdXF/Ydly74hfR1SyeLaJ4FsXL22l6PF/H3bFIH4ZC77CTd1i9 + CkNpu4IkirMoToYSVvkwiLErdhU76u666gc1qV0xlK1nu7KLeLFcpjaySzONEowxytGk0cJkCWZp + ujjZZEPZKtsVJpkxuFhGtLQYJVlCEWbTJDoxWXKyXMxyk8+70p9VxvHxfD2dH8/X8+xhKNufLKT/ + A2WVD2X73gQXq3Q+qS9mH3/78Hh/f3M3vX9059n00/Lycjf5/JImN9OivD1rp+X91BzPzwf9nH8c + Afxz9OPoPwAAAP//AwBVr3KqugQAAA== + headers: + CF-RAY: + - 90dd14b79f1f3ecd-BOG + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Thu, 06 Feb 2025 18:07:57 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=F_QSDH96u6kZYYc_.unUigRE2uHpF5e9ABYWom5ndGU-1738865277-1.0.1.1-QOq91IROsomUMI5wWWvRXLtgSuJSKjrdWI7yZLxsignR40g3rnV88A4G3X7Dh6Tx4q7Vnak0n.b6LO4m44LzOg; + path=/; expires=Thu, 06-Feb-25 18:37:57 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=d.RMaxqfkUUsIR8HCwQcp3xqTC1WdFhwYG0.2m21lcY-1738865277656-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-allow-origin: + - '*' + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - monadical-5pahzt + openai-processing-ms: + - '19192' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-request-id: + - req_418b551ce85b94353476dbfc11f6bf18 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_litellm_async_speech_to_text_default.yaml b/tests/cassettes/test_litellm_async_speech_to_text_default.yaml new file mode 100644 index 0000000..ff3f196 --- /dev/null +++ b/tests/cassettes/test_litellm_async_speech_to_text_default.yaml @@ -0,0 +1,239 @@ +interactions: +- request: + body: "--3985904f8e819ec1c1a2f121ec8a506f\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwhisper-1\r\n--3985904f8e819ec1c1a2f121ec8a506f\r\nContent-Disposition: + form-data; name=\"file\"; filename=\"hello_there.mp3\"\r\nContent-Type: audio/mpeg\r\n\r\nd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\0\0\0\0\0 \0\0\0\0\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x1C\x12\020-FX@VX_1j'\x19\\rR\x01U\x1Ef\x11qF8\x0E'BZ;\r\n\f\aJ\x17P&d\nHjD\x16\x1Ca1a\x19\x04j>\x10;\u0160&\\k\x11f\x01vp@b#( + \x16-+8%\x04&Y c\x015w\x04\v*\x0E{\x10\x02\a^\n_c\"\x18\r\0\fh\v*js\"/0/\u0533Q\x03<\x10\x05*\x14\r1Xh@\f\x1C\x18\x15\x05\x1C\0FQ + bDAR` \x11 0\v4B\x11\n\x04\x01\t\x1A-\x0F<\x03CH0\u0320L\bt5J)\0\t\0@@C`\x04\x03\0B\x10G\u018DL|\x14\x110\0 + M\a\x14P\\\x02pcfxo\x05!bLP\x06\e\x03\0#\09.\x06w\u03BE6fbd&bZs1\t;-\u0747&[b'ed\f\b\0\x01 + \0\b\x01 \x10\0$\0\x01)@Fg|\x14*\x05w\x1300R%\x1Csjr{\x130r\x0Ed\x038\x1DLt81<\x14p\a\t7Hg\u03E78\x1F\f{0H\f\x01Pe@\v3\0%QB`*$b\x19Qlv!\n'\b\x1Ez\x11X0`\e\x05d\x01QreQQH@\0)\fz\f\e\r\x02\x1CM\x1E\x06N;\x1EN1\x1FMD@Lh\x029g\x03I`A\x04@:\x06\b\x7FM\x01\x17L\x1E\fOL%B4L#\x05\v(=d\bf\x01\u064E\aYgqA\u0142I\u0277!,A\u05C7%A\a\x04!'\u064D\x11Yq\0E/\x02\f\a\0.\x1DSp:\f\a>\x7Fg\x0F>^$zI + H)7|\f\rUA$\x1C\x04${:|\b5\bT\x12FMTB\x18p\0(p\x10\xE40040\x0E)N\u06A3VT\uA76As\b%Ji!\bH\b3\t\"841VI\x0Fm.ZG\x19\x043I\x06v*Il$i\tJF\x1E\u069C\u049C\x7F+\u045Aj+\x19\x04p{\xA7>FaCN\x18JS\x03\u09C3x\x01\x03\x04 + <\a\0`> \x01\x10\x06\0\f\x01>!\x01\0\x06\a\x06\x030\0,\x03r \uF0C1@0 qH#\x10B78ho\x1C\x1F\a\x11D\u0724\x029*$c\x1A}\r\x1A}\e\x0E)X\u01C3 + \u07C3\r\u072CF1NG\x0E\"|'iH\x04,\f1\x7F\x1A\x06\x03F\x0E;`0CD\x14f\x0E\bp4cG2\x0E\u03C3=\x1CE\x13O)>\x01\a|dj2'J0t*j\0\x03p.+7s;+\vf!B\f\x06\x10M\x128e\u04E5\x051\x1A\x7F7K0x\u062CRb\0 + \\\u064D(\x14\x1D\x03!&\x10dg\x11@\x10\u044Ca\x1C\e$?\x02Y3>@\x01\\w\0~+Zd7\xE4|\x15/A\x1C)\n~\x18\x1F.bH\x18i\U000EC44CGcT,T\x017\x14c8\rc\rt@\x16\x037\nX~$fW\t*4\x06\x17\x04\vH\x03a\a\x04`A\xF6eW_Q5GH&\x010\a#\x02\x10TD\x1F\t;!\bQ<7sMg\x10A\x06\0SJ\x06\x19Q6 + D\x11`xc\x10Y3\b2?\x043y\x19\x18'\x05G\tA)1\x12!/\x1F(\x01L\tl\et oT{q=a\uC69AIvHg~S\x16L.g:O\u017CF\x120c\x1Cy\x1Af?\xCD\vgW4.?J\aBO:5\u0211-h\x10`CS!\x12@PC)~\r]^\"\x190f>3\n\u01C3\x1Cr\x7FtX1\x1C\x7FV\x1ElcT\xC0\x03\x1D5m_\x19\a\0EN\x01Y93\x03\x05\x13M;V\u05DD\x04C\x1E\x1C\x03GG\u0396\u05DC\x03J'xcfg_\x16\x13Gf\x19\f\x12H\x108}K)Q`c\x04[m\x02\x18O\\!\x0E\e\x02XD\x14}z@xN\x03{\"0F\u01988IC\x033\vm\x06\x02h!l\u07E1v\x1CM\x03:,Ef\"x\x0E:\x1C\x1Fg\0\x11\u6060MM\x03Cy4yFi4ht\x19\r64\x1C?\x13 + gL6L@iSIM63\x06L&*o\u03F6kD\rg\x01d\x02m\x061\x18\x03\x14\x1C\u0157_\u0775:8;v\u0460MtL4\x1D4i\u0661\x7Fi6M\x1Ai@)g\tiM?L4kS\x06`M&4\u0667\u05FF^^_\x7FiC\x171\x0FC?ht1\fh_\u4765\aF@L\x0Exkt\x03b!\x04\x18\x04zjt! + \n\u0402\x10]$bQ\x05\x06$/\x03QbG?\x05\v.?\b..Au\x1C/25<\x03A@d1 #c\x1A\x0E1 + \x0E\x0510\x15\x1800\x04#\aPo05\x01`@-tx84\0Zb\x0E-f&Z`h\x05\x14$\x16\x14&\x14\nk\u024A/i\x12&,\x184dK\f\ts?\x1C\f(XW+e\x7F\u456A\x1C\x14!U`-X\x1A\e\x06\x1A6VX\v24\u039D+\x1AKMX\u07089N?\x16E\u0434\vD|_\v@\x17\x01\r\x03+V\0\03\b + \0V_ .,j3\x18\u050E\aa#d.\tXZ3\x0F\u8303\x1F/\x174ES\x0Ex\"\bW\a\r\x03\0!#\x13 + jc\v$\x1D\x01\x1C\u04D7&*\nq\b\ne\x1Ck\x01`\x1EbhF`\x04\x10g0Jdxiqd\\dhd^X\x0EK\x04XJa(rdhVw]c@cAV-\x18J\x12^-)U\x15y\x19q\x12$\x16\v\x0489+94C89,\x1CYY\u01C2m=VHdB/Y!Y)`\x11|ALx\nL\x14\x10\be\a&P``P\ng%&\bi\x06rJV\b`p\bi\x1Ci,\x12\x7F(\x12y`s\u0314I\x1F1\x01\x0F1\x133\x02\x039\x11,\b\x16\x0EK\a&\"#\x1F\0\x0F6vN1!1Mj1\u0387*2f\"0Z00D1HAD0\x050\x02+\x12\x02\"h\a\xEA\a@l1Y\b\b\x03\b\a'R\x14\u0578\u01D4\x04\u0372\u0262L2\u02A13\xA8\u0192S,R\x12\x06B!\x1E\b\u0121,\u0121u\x11DDC8\x13C(g\"\x7F~!\u0740/m)\x1Fq + \ \\!\x16\a\x01c\aF\e\x01s\x058X\x05l@%0%0%,\x04V\x12\x15a(a(HX\x12K,MB\nc\x05b,X\x05b\\\v,\x17yi\r%,`\x16fRc%M3#J`\f$4Sdi\"\x12r#ey`re\x05\x13(_0<\x05+\niB\x16\x02\x12\x12@X\t\x10\b\x05\x06K\\flJ&>A`\x1D&\x05ARa*\x03&\x18 + D9\x06b`$\b\x06\x06\x01!\x02\x030/0A\x043\x04X0\x15\a\t0\a\0s\x10e1rQ\0\x11\x18\x12\x10\x18h\bL<8h\x1A\x1A`\x11`\x18\x03\x0E1.\t6r.1\x13\r&1(\vc\b\x150 + \x18po0M\x01\b0)0\x122K\x0E\x04!)\x18\x03Qh\x16\tP\x05\x01BA\x01>T\x04\r,)01\x19.X`z\tK\0 + \0a\\E\u0601&_E\u0657a}\x0E\x055D\b6v\u023B+e\x12\x14]\e2\x04\t\x02dCj6\u0355\u033B[;d\x10TNu\vH\x10BQ:\aM\r\0X\x17VY-\bJBbb.b\fA\x058\u014CP\" + \x05\x17@Gb,pbn\x17B\v\v]q\tG\x1F\n\".?]G\x10\x7F/9\a\x18\u01441\x17\x15\x0F-\x04\ta\t< + \x18[(DL9\x04\x04\x1CJ\xD8\nAA\x02a\x12+(R`R\x05\x05k&R@b$L\x12Pe\x02e\x04\x10TDd*\x0FU\u06CBK\x17{\x1E\x1C=V\x0Fno2\x01\x02@B/\u02D4|bebI\n$,L\x05.P + LI* KKcd,}K\u065B;d,\x06A~b__x\0\b\x19h&*G\x03\r\x06\r!b\x13@O0\t!\x18]\x04\fx\x19\x1A@\x06d2X2\x03\x18\x01\x06@fP + iKLZc2\x1933#i\x18-8\x18\e\x06\0\t\x17/a0:lh0\x0F$\f\a\f6\x18`p]xD0aauZ\"E1\x16*\"\x14a\0\x03\x03\x1EcI1\x131#\x16\xD0q\x14a\u021E`2axr\x06\x1C\x01d/0\f%\a\0\x11\x06c9F8\x13\ai4\x1D\u02C3\x1Eh9>\x13=d&cCkp{t>\x18G\x14N\r._P0>\x0E7& + !=\x0E\x1CK'2&H\x1F3\x1Au(f6tQP]\x17\0\fB\x0FBqZ/\x02vE#\x06\x10a|+\x06\x13@*rl{\u062F\u072Cz\x0FA\x1E{\t@,\x1EW90b+3L\"0\"3\v01\x053\x1D!\x1212\n3\f1\x03\x10Y\e\x19\x18y1I\b\0\u0251\a\a\x12H\u0308H8R\x02Pc\x02\x030!#\x02\x02\u055A\b8S\x16\0\u06A00\x10\x1D\"a\u2CC6P\v\x10\e\x83\f\x17@\rTV?\v\x1C\x18\vE\u0402\x14b\x7F.\x17 + %S%|sd)%IL\x18\x02\x0EmM,Lj\x15B\x02\f$X;EL$mvc\buIfPPj+Rf\x04Ff!l\x06\x061xR\"\")U@\b\u0163\v\e\x18BL\x19\u0421\u0400`\u01A5\x11n,HJ+*\"\a\"tZC\x04\x11B\x102\x06D\x01v\x14j*D@\x18\"\x053K\v\x14\x10D\x11e\x18k,;\u448EVR:\nrF_:\x14.\u98BA+\"agS%dj\x7F\x12@J\x03\x1F+$\x7F>NW\eR\x8A7\x1A|dm\x19D\v}\u0196~\\\e\x13\x18\x0Ek0)Acq/\x1A\x1D'\x01\x18Z\r\t,\x18+{\x16\r,0W\n901\x061C\x1A0WGD2\0\x038\x18(\0\x03$\x0E-`1@(\0\0\x06\t\x11B\f\x14\x01\x11C\x06\x05 + `t\x064iRxD\x1CPp2\"\\\x18[\x06SxZ\x035\u0720ca\x11\xA3.\b\b3ts1&\x03\x03ERP1\x10(C(\x1C2\x10Tnk\0T\x19\x11\x10,\b\x01\x117\f\u062952\u0230v\a`\u0218\xA5H\u038C\x12 + 2\x10b\x11\x0E\x06#\n@#Y\x13usq\x02\x16r\x15\x10 !\x15R\x12e\x10\x12mJ\x1F\aF#15\u03A87\x81gI|eJ\x05\fk\x12YNcn\x19g?_\x18g>>\x11::7RF#\x14\x11?*\x1A?;\"9\x13 + u4qkP1\a7=='2+\x19P0u1\x06+\x197=\x10`t0t\x1940t\x10s\x10`t\x0E\x13O\x10\x11\v\x01`psA7\x06[v\x06Z\0O/{0k\bcc\x06\fl60h%#\"\n\f6}2@$S\"\r0|7kM\x12p\x02\x06\eSha\0\tji\x16H\x02l0iX\b@kle6MSIZ6h1J\x04La_\x1A1w\u016E\x11\x13c\x180\x05\"#k\x04l\x04hH\x04\v + \"\x1AY\x12\x17\u042Cb\x04\v_\uBF736\x7Fl={\u67BCg\x16m(r\x1Eu1\f-?4\x12\x048!'hh^^\x7F\x0FUGh\u05CF\x060'\x1Ez\x1Dz\x1E&ln??Hf\x18FzTk1&^V4\n@a\nF\x18Aa\n`a\x11\x7FbP4\x7F\x1C + \x7FW\x06R\x03\x12\x04R\x1CDz\e\x14\u011D\u011A~dD\v|dh\u02E6\x7F\f\x1CU\x13\x18\x0E\u06C1P\ri\x06?F\x02i92i#\e`\x14\rT\fBtfRjAnqF\x1A6V#\r+\x1A/\x026$6a(D1a,3E/\tI\x03\f0F\x18#7+\f1q\x19I}\u0106L4IL\x04e\x05cE\x01\x1A\x16\x064\u07306\x01)\x01\fJ\x04\fM\x144\u0184\x04@C%/\u05F6OlGq\x1D\x12\0\t\x1F\x11\u0D49\x01\"\x02\0$8\x11DG#b43\f:\u07CEH.3\u0766?@:\0\xCB\x06*\\H#\fF6\x0F4A;\x14a\x04L\0\x1AA\x01_N\x7F\x7F\x7F\x06$iR\x04R\x7F\x12a$2AuC4J\x03)4Q\v\x03+BL2T4T4$\x03j1)\x0Ep0\x0Es\x1E,\x1C\u9328\x19\x0FQ + i\x0FY\a\x05IFK%\x19V\x16,\bLB]0\b\0?0\0p8+\x1Ci\x1C\a%ssr72D)\x13H9\x03\x1CLr9,\x0E\n\x069Hc\u0279&H\x15\n\x069\x1CK\t\x0F+\x1C\x16\a&9\x1C\a\x05G\x05|%(,apao+\v\x7F\0\a\x05`\x0F+\0\x15<\0\x02\x01`\x02V\0\x0F\0\x02X\0J\x1EV\x010\0\x01=`9\0h0\x1Ei\x06Ad\x1F\x060d\x1F_K\roY[J\x163Li=1\x10i9\x1E\u032DD\x05\fuL\x17\x0F0L\x14\x0FL\x06\x0FL\x03\x04\f\x01\0\x04\n\x10\x15\x06F\x11\x11.8^QtPY1)\x1EI-.?\x1C:Y,\x14)N\x13\x03\bf#\x10&\x1D\x06\x06\x10;\nI)2\"\x14\x03\\\x1D\x03BZ\nf\x14FS\x14)\x010\x05&\"&\r\x06\ev} + $X$d\bD\xC5{\0\\lW\x10\0,1\f\x19\x01!\x04\\\x03>\0\0S3D\f2*M050\u0626204d3\f\x1A\x12\rLn)a>Cy\b1L3^4,n1+\rCq\x01I\x03cq``\e3|a2,\e04(\x11\x03@\04\b3@\f\0&)\r\x10\x02 + 0\x1A\x01\0nX800\f\x03@1X\x04#\x03De#\n\x04&\x01\n\v\u065B!`\e]D\x06\x18\r\x17\u0573\0\t\t\x03-7/\0\f]5\x02\"A~wl + h\0\x06Q \u0283`;\"\x02R\tey16Xn)\eq9I\x190y\u013D\u0464r+\x19\x1E)I\x11p)\x17X_>`\x03sa\b\x7F\x1F\0\0\0\0\r\\Cc8@\x01h\ttX\x04,3+\x16#\x1DT\x1D3\x02<1c'\x19\x03\x05\x14\fH\x16\0\x1D\b\x04\x03\x14\x17 + @\x14\x13r\x19\x10c\x18xH\a^F\"\u02C1!AAm\u5048@80@\x0F0T(J\f`8L\x1F\x03\e\x04\bG\r221}[\x03)52{Or\x1A7EsWb\"0\x04`\x150a\x024$\x18\x02\x10\x05\n\x15\x18\x01\x01\t+b + ;:k\x0E@\"\x03\0\x02pw\a\x0F\"\x06 \x12Q\x02@\0r\u0323P\0\u0405\\D[f+f{Sj$d\nxLD\x7F\0L\u01C04\0)1\x14Y\x01\u0232\x03<\0\x1C(ls@5\x06E\x066p\x13)b\x0E&8va\0Ni\x06`\tF&lia8}\x11R\0\x10\x0E\x1DL\x1C\x0E\v\x11B10`(a3\x01,c\x1E`\x12a\x0E\x06.F0\x1F\x02\u0E43\08\x04=0l\x051\bo4\x11A0(8\x03i\0\x01\0t\r[X\xE61\na0\x9B\na\x9A@\u0488L'M<\x13'H3.\\\u05D5\x18\x06(8d\0\n\x0FK\u0196{\0b\0\0')1\x18\x19\x01#\a8\0G\a\x06(A\b\x1AC\x7F\0\x7FG\x06H\x7F\x19 + \f)\x7FJpaH\u03C9\u0358\u024D8\u0378\u04CA8\u0338X8\u32188\u074981\f<\x18\x14\f<$SL0\"\bB\t\x15F1\fF\x17Hf\x17P` + 3\x14\u0251@DB\x14\x011<\u01B0D\u01B0@\0D\u01E4H\u06B3\x18\u06A3\x18ux|c\x19yh`/,\x05\x05f+\u054FEcXc\x18g\x11g\x10X\x18( + d\f R\x05\x01\0`\x183+\x06P,0\b4\x182\f2\f4TQ5\x7Fj!\0\0\x11@`\x1A\x0E\x01\x01#\0%KU\a\0Yj<\x13\x0E\x01\x1Ap\b\x1AX\x04\x03F`\x18\x04\x03TY@/IQ{U\x02@\f\u04AA3K*\x03PWM2\b\u0102Bj\x1F\x12(c\x05g\x1F\b\x04-B:$`\x0E\b@\x01P\x16\x05D\x1EBp;\x179\x160\t#QY*++-*\v@#\u0204Q#1D!1\t1;K0dI#0 + 3'\v346\u031D1\b\x04 ,\v\x14b\x10UO3\x0FF3\x01n#\x01\x16#\x05.#\x0FN#\x17>3\x162i\x19\x13\v0\x19\x03rD\"0\"\x01\0\x111\x12\x15\az0\x11#\x16\"c0\x06#\x0601L+c+u,\x15[\x16\n(SJ0SLSV,\bL1\b\f\f}8j\0\\c\"2&2#\"av2\x05awVnb\x06\"en)V\a\x02\0x`\x13&\x02\x01`z\rE\x11,\x03\x11`8\xC8\x18\x1E\x1C\"F\x0F`_\x05^X\x02\x05T\x04`\x04\x1C\f\0`$L\0\f\x04\v\0!\x100\x11\x03\x01\x10\x110\x11\x01\x03\x01\0\x11+\x01\x12\x110\x10\x01\x1F-*lid\x05\x01\x013\x02\0\x18\fL\x05\x01\vMM\x01\x18@d\f4K\x06\x7F\0aYB(\0.1\x1C\x19\0\x01 + !\x03= \0(\f\bX\b\x7F\b\0\b\0D\x04K\0x`\x06\x02F\x02@\x06!\0%H\u06B3U-*\x05Yi?\0\0\x11\0\x013f@\x13clM14_S\x1A4(,7\x12\u0601?@\e\x01p6\0\x16\t`Q\x0F\x03\0\x18\0\x02\b\x12;\x14:.\bw\x0E\x17c0\x06\u041CPC\x0FGM\x04i\u04C62.at2&2\x06d\u04E6at2\x06V\x0Ek\x14V\vBvdV4\\d\\\x02&[Tf\uA045i4\x19\x13JS)1\x1A$3(1_\aX1M\x14\x0F00j\x06\x061c\x16\"b0\x0E#\x1E0c\x18\a\x19\x18\x19\x181\x18]\t\x18\u020C\x19[\x15\t[\n\u062Dx\u014C\u01CCxX\xCC\xC8\x18@dLd\x02M\x062\x01whBelVV\x98en)X\x01\x03\x01\x10\x110\x01\x03\x06<0k\x030\x10\x01\x02\b\b\x1E5\b\bX\x1E\x18L\x03Y5\b\x01\u1000\b*FT\0j\0JZd\v-2l&\u0240\fX\bX\b\x15i6?NZB\x16\x02\x06\x02 + \ X\x01\x12\by\by`\x04L\x04\0D\v\v\v\x05`_\x05^V\x05\x14?\x1C\0`\a\x0F\0@\x04|\x04\f\x06ML\r0DM\x11M\x04LMLi\x16`\\00\u035C0\f(\x02\\\x06\x1Cv + 7;\x10\\] Ao\x147DAQu/]\fU1\x0F2lV2'I11\x02\x111\x06n2\x10++(\x0FLL@>\x01`8\x12f\x03V!&\v + 8X\x01\u04B0X0E\nE+\n\x04PD1\v\x04BD+\x10D+\x04C\x04@ED0\x05\0O+\0R\x02\x02Q(\x02\x18\x02)`\a\x7F\0:V\x03\v\08`\x03`;\x03:`:\x03`:X\x01\x01\x1C0Y\x05\x1C0\x1D\x01\x0E\x0E\0X\x0E\x0E\0X\"\"\x02)`\x11\f\x11\x01\x14\b\bX\n\x04@D0E\x04S\x04PE+\x04_0E\x04RE\"\x01\x14\x11L\x01\0\x10,\n\f\x01@\x13`\x16L\x16@pp\aJ\u031B&g:q2\x06bs# + lf@s](\x17\a\u0273#6\x05D?\"Dt+\nP_\x11\x06\x119go\x17E,*yih-3\x1E\u5943-\x1Et\x17\u03C0\x01\x06\x16c0+\u0106e\"Q\x19b7&fP\x18\u6067b&+\u604CaQ{0-\x01B1\x05\x141C1C\x1F#L\x1D1`A\x03cj^.4\x05+\x14\x18\x14bY\u0141AIeA/\x17g\u0135G_c\e\x18q69G\x13=\x05zcJq(zc^gyeeb\x17Fc]N\f\x16\x19\u04E6\x19:\x05\f`0h\x16`aC\b\x14X\fVT\u0295\x18\f\x05\x159X\x0F\x17`0\x11X\x0F\u06A2T\uA430\x02|\x01 + tLAg)\"O* \u03BF\x04\x02\0\0\0\0\0\x0E\0\0\x0E\f\x04\x8A\u030C(,(\u030C(\u0320L,\f)C\n\n+\n + \f\"\vh\x18\x0E\x1C8^\x19PN\x1C/\x18\n\x06\x02\x13`p\x12\u03D2*J\x12_r_B_\"\u016FW!\u0121q\0A(Q@\u024D\x03IQG\u04471QCYI\x02q`30d+\x0FL=1\fc + V8,\x0ELp\x1C\x0E\x15j\u055F\t\u0628+XTPWWGI\x13Wi\x17w0\"\t + 1C\t!\b0V3<1N-1c\vS\x02o1}\e\x10\t1&\x01\u04120\x1C\f\x17\u04791C\x05\x143\x188@p\ff$\u0332\x1C40i3\x0EJ\x06\x1D,\f\x1C+I\x1AHXf\x18ui:\x19\a\x19e$e\v%K\x06\x1C,`8e\x06\x1D,MdFb\x03\u071Bo\t0m\\#\x1E/v\xDE8Y6`pee\x0E\f\x1C,$\x05`\xE1,$$\x1C00LI$$\x1C,\a=F@\r1\0 + \x14\x06\x06\v\0T\b\r(+\x16\x01r\x1F\x03\x05ctn\x06\a\x14\x10>\f.\x06R%\f\x06\x10\f\x06\x10\v\x18\x100X\x16\x17@eF\x16p\x01t_<\\\x14w\x05!\t\x18(X\n2\x18#^Mt\x19-B\x1D\x02@\x03\ahZE{\x16\x1Ev~\x03\x05@+\x06@+`\x02\x01H\x05\xC1f\f\0,\x01Pt8\x1D\x0E\x03\00\x1C\x0Es~\f\x03 + t9\0\x0E\aC`;P;B\x0E\b\x17\u031AXL $$\x10\x16L\x16\n\fE\bH\x16L\x16\x04$\u0288n\f3\x034P$\u06C5\bH\u0149d0tdI\x18,\x15\x05dX:`$`b&b:b\u0232fa&brq`h@:b\u0232b&VI\x19$\x0E\x19$\x0E\x0E&,\x03\x0E\x12F,Et1`\f\u0141`+\a\v\0\uF543\x0E\x06\x0E\x0E\x06I\x0E&\x0E\x19\x0E\x0E\x0E,\x03r\f8\x06rD\x19\xF8\x19\u04E0\xE0g\x0E\b\x11h!\x10aBB!~\x11\b\f\b\x11\b\x06,o\n\0\x01\x03\x05\n\fn\n\f2\e7\x06\\-\fl,\fdn[8X\x0F6U=M\nA3\x0F\x03s@\x03&\x13\0\x05=\u04B0\x04\x0FOK`\x02X\x04\x03\x06\x03\x04\x16\u0264\x0E\x10<\x12\v\0X\0\x1Fp\"\x03\x10`\x11B$\"\x03\01\x03\x1CJ\x15DJ\x14\x15\x7F1?\f>\f\x02'@c\0\03\aq0\x1C\x05S\vA\x03\x19\x18\x14'V<\0at!f\t2V\x03\x06\x06a>b\x14\x10\x06@a3Lt\xF9\u04C7g\u039D\u02C7\u03DF>|z\x18O + \f\x05pt$\x03D\nNZX2\bIDK!2_\x0E\x10D\x1A P\x06T\eb\vn \u0280A0\nK\x06\x06\x0E\x18e\x7Fn + n\x10\a\b\e\x1C n\x10A|8a\rBn\x10n\x1F\x06\fL!B\x13\"a.\x13b\x16F5rav\x10\x02A\x06a\nF\x06@F`\0F\x06cZ`\x03\x06\x03 + dat\x10!`2a\b\x06G\tvpFd0m#\x06fZT\v,\f\x14`e\x02JZr\u0498\u024C\f<\r:\x06+\x19@\x02\f\x15\x16\x06K\x03%\x03\x19&\x14\f`Zd\v@@1\x05&lyi)\x02\fdZc\x19\x19@@\u0496\x02J\"\x1A5pE`\x19\\U\nF\rY\x15A`V\x03V\x01\u0439\x0EEL~\u0639$$~!?\x7Fs\u04F3|.,e\u012D|\u02FCv\u0201V\x7FFd\u01E8\e\u0160\x10\x1D<\xF7\a\u0276DBl\0\x04\r<\"\x04P`\f|]eC\x1C + __]bwW\x7F0\x173\x02\x190H3 AO\f\n\x13\nL3;\x18c\x11\v\x10U(\0`\x01J\x18\x14\x18>K\x06LD\f\x16\x0Ea\x06WS\u0140`x,\x1C\a+08b\f\x1C\xC60\x10,\x18,\x191\x14\\:Ld\v+5J0zSyN\a&*c\x15\u024C\x17\f&.`31H0f0\x19\x06s\x06*P\x19\x13@?\u0128M\x04\u05C6+\b\x18p\u012A\x18&V&\x01\x04\x05\x02\x14\x04J]BE7LbEq1Q:\x1Cd\x0FUe\x03\u069BpY\x17\x10\x7F\x16\x1Ciq\x1E\x0Ff\x13`Apy/\x18\x0F1a\x0EKT + \x02\x16\0\f((\x82n~N,,\u0596+QWwp\x03\x04)\x05\brd\x0E\x14\f\0a/F\n``6\x0F\rV\x01\x01P`l\x14\x06\x1A_c\x05 + \f\x12\x01\0\x14lH\"\x04d\x03[1}P$\"\0[9~#\x11\x1A\04F\"3K&\e3d\x114\b]r\x16@%]\x13@u\uBC72\x16M\x02(\x10\u064B#0M/dl\uD472 + A\x17\u5CE0Ad]\u035D]lw6b6u\u0781$\t\x17 Mv\x7FO\x06\b( /,bx\u0108(1\x7FgyOsA\"%qP4S@\x13!dT$\x158OcJ\x048\x02.\t\x111\x0Er08\t\x12\x1C\x18H\t + 8\x1C\x1EVznt?BLAME3.1002&f,\x0EYBg)f\x1C\x01&)\x01\x06\x10\x05A~\n\" \x0E\f9\bL\t\x01-\x02L + \x03\f!\x03L\f\r@ \b0\b+\b\x12<%\x17,*iYpSJS8\e3\f+0\u03445\x15\x18SETUS\e,Bf\x8Ap\x18qST\x15F]NQQFT5\x15\xA6)T\u0406QUNTm\x15=N\x14i\x15]F\x15_m\x15\x7FkX!\x02A\x04X\x0F\x02\x0FB\0%\aE\vHZv\bax^\x17x\x10\x17\x7F)\x06}\x1AA?' + \bn}$`|O\x02j =\u01B3b8#\"cR\0\x040\x17o94v\x1192A>2A3\\J0\x10\x05,\0_wM\0\tF\x10He.\x06\a`\x15F\x0ETV\vF\x15\x01aU7`\tf\x16\x03da\x02\x0F`.\x1C\x02\x96c|.\x05 + ,\x02\u0642\x05\x19\x18RXQa\u0492]d\u028F`\x03lp^a0\x7F\x18#\x16\x0Fnt\tAP,\u014CH\f\x04Bg%\u3001:20\v\v0/,\x05\x18`\\X\x174rs\x17K,>RYa(\x8C\u030B\x06Eaea\x7F\x14X\n3#3[\v4c\x17K+}1gJ\x161w\vQ`XX\\.\f-.\f-0\"\\\x18\\\f`p2e%%a`apapappaxD0\f.\x1C0n0n\x10\u0286P\e\n\x19\\8`?RWC,9O\x13\x1D@y*]OQS\x14g))\x12\x13+A\x10aCAZ\x18c`\v1q5@\\\f^\f]s>\\=JLAME3.100\0L-\x04\bK\x01 + dFh`\tF\x06gL\x12`X\x02S\x043\x0F\t\0J0)\x02\x060\x06\x020J\x02\x06)1A\rs\rp\x050J\x06Q,,(,(=R\b\x17\n\n\x155!\nyaIRje\x1Ea\x140<\x04\n\x10\x040\v\n\x0EZ(0\x0ET\n\x10)XRa|HR)r\x16\x02\x18U\aQPXRa\x02\x18@\x14'Pa\"(\x17\x0E\x17\x0E\"/(\"\b\x1A\"aB!\0\x05\x03\n\x17\x03\b\x14\"\x16\f\vaBB8\b.\x14E(\"\x17E,Y-o-\x16\x17PTDs\x06ACPQ\x14\x13\bT`\x06\u04D8XN\e\x16dKcSRs\x04\x13R\f\x050\x14\f + \f|I/P0\x177oL\u064C\x1APiL/@\x14I^+\x16I9 \x1E\u0324_ 1\v@1Mn\r,\x13\fT\x1CjuKt\f\f`d1A\x0F\x13O\x11_,\x01q0==\x14yA\x189X=\x16>}T`\"c\u0409\t\fdDbG\u06A4`n\"\x7F8#%\x1A\x0Frq~\x06\\e\x18\x03\x06\x18\fFF.\x17b=&z,\v\x02\x17/\x17\\.1pz+\x17\x16\x05cV{,\vX\x17^.3\u063C\x17\\.1pc=\x1E.+=\e\x1CV.+=\x16\x05\u044Bbq`^\r\x180ua\x0E\r\x108@\x19\x18\x1C`\a\b\x03#\x06D#\0A!!\x18u\x0F\f03!u\f06\x0E\x17_\x15K\x04ZYYh\u06B2p\x1D%\n\x14$\x0E`\t\x03\\Q1.'$\a0\x1C\x10=z`\x17L\x1FI\x14\fEH4\b(t.L\0\0\x04\x04\x12?LAME3.1002(\a\u04B0},\x03\\\x15\aU\x18:\f\u025Al6\x18\x01y20\x18%\u9030r\x18\a)8X\x18>!\v\x15a\x15\x03\u0318g\b\x1F\x18(Q0\x03\x1D`_\u0492\a\x06ppr\a&prr2&ppV,VoE`X\u0145\x02\u0143`rg\a\x05b\x12\x0FyY`\"g\x12&rsrrg\a\x0598,\x1C\x7F`=`?\u02C36\x0Fr\u0408\f\x01E`\x06!\x14\x18\x03\x10cE\00!\x01Y\x01\n.p\x0F\x05\x1F)\ty<|%x|CNc\x1F8QN2m,c;\x13kzcW\nQsR\x197\x12C3vsZm4!\x16\x160E\x04C)Ql0D#3#4 + 1l\x1D\x12\x18\")\\K\x7Fw`&!cX\x04\tc\0p\u04C8\x03L'> + i\x19% \x14F5\x19\aYFbEc\x10\x0F\u039A\u045E\b\x1A5OLAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\0\03\x04A0\x18\x04\x043$\v\x011A\x19\x13C + 0\x17s0u1v\x15\x17`0N\x17c\x061\n\x01\vZ\x02)\x19\x18O\x04 ]\u044B4\v\x1Aq\x01\x1A\0\u0326dfXO\u0481L`FLdd\b0m)c\x13NO41\x10\ffZs\x183+\x181*qi\0\0X@1\x1Cp\x19`\u0306@\0c\x14\v+\x19-!\fc$\v\x03\x19F@ + A+\x191\n\x03\x196\v\x03%@-\x7F-`Z\x02'qX\x13\x13\\V\x15`V\x04*r\tG\bF0\x19qFL\x14G|\v\x0E/\x17M(J\0\e3eN\x051`A2\fs\x05[\x1C\u04CF[\x0E\f\u0520z\x13\rs\x0E\x0F\u034Fq\x1FO~ + 0\0\f\b\x1F\tf\x7Fy\f\x18\v\09\x04\tw\a9q\x19':$\x19 s \a1X\x0FY\x1C\x18%\u024B\x18>\x05L\x18\x12\x01L\x19\x01`$L\x0E\x04$\nd\u07CEc\u0253l`UaG\0\x7FP%\x11\x1E\x0Fn\x01B\x1CAm\0`\x05\x12\\X9\f\x12(\x05|$\nNC$K\a\apX,H\x0EJN@pX889,\x1C\x16$K\x12'#\"W + g\a'\"rX83\u03D5\u0219`Lpg\a\x06.,b.bEbb.XJ1ac\x16\x171qbX@\x1F \0\x02(\x03\x154\fR&V\x11\x0E&h%p\x18\x1C%x\t\"\x1A%A\v\\d!\x04A!r\x14!A\x10as\rr\x7F;twN,j#B\x1Ak + :\0,h\x18i-D\x1A\ae(%/\x1AC1!RI>\x1AAaK$\x7F\u03E2?\u06F5\0\0\0Tk3\x11\x10vN3JF\x19.22|\fO4\"\x10d#!\u0304c0HE + (\x10\a$\x16\x1E\x06\f\u031CV,\x13\f\f\0@i\x10,2 a\x06O\x19\x18\bc \u0261\x03\0a>ZB\x01\x03>\x06ZB + S&`\x19\x1C0ZS0c-6@\u030A\x01&\x10iM0)6c0d\b\b`\x19\x026F\0@J\u0301LAow\x7FW\u02D0A\\\x18NC\x0ED\x1CnB9j6\x02R\x15U\vXH\u028B\x05K?I-_\x01aty\"\x1D\x18i;\x03aZl\ng>bt0vg\x06ra:\uCC1F4'mC\u03CC4\"x\u0193'\f\x80\u0413\x19\x13\b:\x05\0\u0193Ov\x193H\u0230\x18\x03\x19\n\b\x16\x063\x18d0ZR\x01&h\x19\x18\u021Ca\x18d\x03\x06\x19\fP\x18dd\x0Fc\vnD + vl!\x1C\x0Ef\x02-Q\x10Zc\f| V\0\u0641\x03d\x06\r\x05&l\x16l+d\x156IZ@6\0ld\ra\x01\x020\x06\x05Yi/6\x7FNZC\u0252\u04A6i/,,2@V\rJZr\u04C1Y\x02E@\v\x06\r\\$.\x14ER\0DS,\x11H\u0238%\x16H\x16\"\u0142,Y-\x16%(Z2\x11@\x025'(&\fW\x064\x17f$SB8\u01A0\x17Gj+f\x19\x10@\x1A|c4!\x03&\x10d\0\x0FZ6\x0F\0C\0fL\x030`.a\x18\f86\x0F\f1\x17,\x0F\x1C0\xC5\x06u\x05\0f + \nf\x17X0l\x1A\x18puu04\e\a3 \x06\x1C\e\ap\0L%,0\x03P\f&1J$c\x14-Cu:s[?\x124K\x010U\x01#[M\x13E\x04?6z$h\u012C&bBeb\t\n\fR)0A\x04\n\fA3H\n\x03,\x1C\x01K\x13 + H\x03\tLP(\x04\x01\"*R\u038A\r:A\x14(m\x17,%Q\x0F.B\u0488(%4Q\x04.ArmDK\t\0iD\v3e6r&\u0464&r\v\n!2\x17 + 5\x10\x05N\v@\x158! BI\bh!\x0F\x044\x11A\x10\x11@\tPD8\\/\u02C5(\uD71C.\x17Gq<\x144iI1uZ\x13,6i0\x13\x03U5^<\x108<\u04CC4\x102\x06E40\x0E*\\;s~\x1Fl#~<\x06%+\0?\u02A3G\u02B0\u02A3$01,\x04eY(0\bD\x0FPb_\x14\u011Fi\x12\x12i\x12C(#\x1C#D#\x10#\x183\x14#(#<3\x0433H!\x01d\x11$dF\x1C\x19&\x19\x18)!\x18dQ\x19D\t\x19F!\0`\x04`\x04a\x10\x06`f!\b\x03\0d|gH\vn@\b\x17{\\!5\x1C\x0E\x19\x02\x1E + AR\b\x12\0 \x19A\x19a\x11DA\x10\x02\x0E\t\x03V\x02\f\u06A1`\x031HC%L\x1CcB\x10MR5ELTc\x10\f8!c\x10b\x11\x18Xb\x01\bf!\x129A?\0\u06B9`ecj_\u06AFo\x043,L8P@#\x180f1\bfXjP<\x19\b&X\x13WT\x11\x04qX\x15V*WF\r]_O\x1E\x1F/O\u72E5/\x18\u259Bt[\x1A/\r\x15&D.1\x14%[\x16$\x05 + D\x130L(1\0p3\x122\u06201`9$+9G086\x01@\x13\0A\x15 d\x01P\a\x04D7\0p)\0A\x06\0`pR\x1C02\f2\x19_pC(\r\x1C0p2t5C0^1(\f1\u04321}\x04,\x0E\x1DQ:YI&9b@a\0\x1Aafbcd\x02izn\0a\ta\t\x10\x19\x12\x10F\x06\0P!\n\x01\x10\x04!Q,\u0202$P*\x17N\x06\0Ah\r\n\f\n\b2\x15@hF\x06a\x18cF\x01A\x06\\((5NK\x03=\x15\x02|(\"\x12\x04\x1A,\f,\f1Lk@\x01Am\fh\u04B4\x060b\u028D+`a\x1Ac\x10\x1A\taD\x05r\0\u0403AAFr\x1A\x01\x10\fb\x03\x18\x15|\bA8\n\n\x06`\\0\\EDPEB\x04X.\x14#-K\x12*9,JAy-%%rX\u0419\x13:|\x064\x0E\v?\x10cx\0\u0434@(I].\n\x190(@2u6}6\x7F?X\x17$6\x19\x03`\b\x16ZT\v\x03a-)\x05\x166}6\x10+`\v`Zc\x05\v\0X\0\x0Fo\x02\x16\x03Zd\v`\x01X\x02\u046Bn9IXj\x01II\t\\&H\x14D@\td\x0FXe@\x03\u0705rhsM>,-s\x06\x0Fwk;0_\x01\x10`\0J\x048\"\x12pE\x04<\x11\x01\x10\x10C\x1A\bpD\"\x11\x7FD@'\fMh\f&\x06dd$\x1Af( + f2(#\x7F\x165\x0F\x13K0A:6O2\x11Z2}5\x188a[2>Ev132\x102\x143\u011E3T20dO2\x192\x1432|O3P\x18\x03<\0@\x12\x10XdPl\u0182\x14\u01835h\b4\x19>Of]\"vacHffbxd(d\x064\x15(\x14\x04N\x02\x1Ay\x18\nVf\x06f1@1\f\x01\fd\bdXi8DhN3!&\u0259S\x17Fd\x042+\x19M\v\x02\u0259\x16\u0306\vNc\x06@c\x14\v\x7Fl\x19\u03B0\u025Cm\u06E5iZVl%i\x13K\u047A\"(\x18#9]\baI\n\x15%d\u034B\b\x06\x15\u02A0# + \b!\x19\0\x1F5\x06l\e\0m\"\x03P(`\0\ee\fl\fp8\x03\x1C!\x11\x1A@s\fxFC\x06H\x7FbQ'DI\f\x7F'O\x18u0,1B\\1\x1El0S\x04z1\x021*A{1\x13M1yI2#\t2f20\x042PF29\\1*C\x110!1\u02021*\x030@<00\02\u0128+\x054\x06\x03\x14\x88\0@\tp{\b\b\b\f\x03k\b\tp\n\x050\xD8\v\r\u0129\r\0@\u01B87Px\u0243\x10\u01A5BdDx'T.7W>7T4{\x11:\"/53j4|3k+%&\f\x1A\x1A\x1EL=\x04Lu\f<\x1A\x031\f^&Lj\x04Lk\x04\f=\x04\fk1\f=S\f\x0FK\x01`k0d\x0F*b>\f8 + wtT!\u074D\x18\x0Ejs`\x01Q\x18<0@\x10,\x02\x06\be@\0D\0D\0DDQD\x10+\x04\f=\x1A\x03\x0FC\x04\x01\x03\x04\x01\x03\x04C1C1\x0F#\x04LC\x1A\x04\x03\x0F\fS\x0FA\x03\x0FA\x03SC1A\x03\x04A\x12f+Lf(\"cY0g`##\bF\x10@\0d\0\x10\r\x121\x01yfcAQ{Qhc\u0645Yq\e\u047D\x15yq`^Wek\u05C3\x17a\x12\0 + d\b\x04^\b\x04W\u05EF!\v1x\x1A\x1AW\x04}\\\x11^\x11^\f]Ep\x1A@k\x18\x18\f_]pu\u0389\x0E1T\x03\a\x1DT$3\n0R\x147\x02\u03280)@\u04A6C\x14\x1An5\x03O\0F5\x18,,\x03g-2QWj8(5\"\x03\x16\x17\x0F\x02\v2\r\x10\x10(\x13@\\\x05\a\x15\x1C.iI\x13&9m\r\tt(&\x16PpJHpX\x06*\x0E\x02aM\x0F&1\u5319 + pLx\n=*P0\n&X4\x03wB2\u0765n\\\u063B\t]-?$\"\0b\u04A9\x17S\x11 \vF9w\x03\0+AT5\x13@\f!y(0\0e\0\x02\x14\x0F\x14#\x1CXhj\x1D`(Ds\u01CE\x1D!0O\x1D\x1FV=\x18c\x15D\u06A3\x1EsU\U000D06B3}\u06A3j'\x121{\x1Cby_\x17\\b1`g9\x13\"\x18\rrb\rz5\u05EEW\x03\x17\x7F\x18WW+\u05EE\x06/\"w\x15\rz\x185\u05EE@\08>r\u065Cm\x1A&gv\t\x03#^BI\u6DC0\x1D-\0c8L\x141|\x14@\x0631De\xC9\r + i@\x10Yd!?cF3tPss\x0E!\x11\x17.dW\x17\x1EAQhCZdJr\n\x10Q\t>&\x18U`\x14\eh\x0F\"\x06\fnP&QBO\x01E.V\x17ab\"z0ac\n$kR@3K\x1D\x19)1 + \x1E\0\x1A3[S\x1CFeL\u0360dfd\0J\x0F!\x19\vj$m,U'\x10rQ\0F\t\x15\x05 \0\b\x06\x12\x01\x02e\x02\x01\x1C\\\x17D\x05\x1AH\\\bh\x13.\x1C.\x7FR\\R,Jdi)%$.|l\x062s2dz=>z&tc\x1A\u041EXN1)\x19\x18!i\fd\u02340Zp\u07C5\f\0\f8\x02`07\\0/au\x18|.\x11ODPE-\x7F\u5BD6Kb\x12\rG\x12ln#i\x069\x1A,($3bT\u0309\x13<\fT0b\x1C`3;\frF2\t\u02E0c\x14\0\x10\x03\x1E2\u0665#\"\"I*\0b\x03\x10\x05\x02@&8/0\x18G344.\x0FpvZT%\x19\x05Y\x03*\x1A\\W\x1D]\x01\x12\x02\x02NIfQbA\f\b\x06\x116c\v)%B\x11\"hVK*KY\v\u02A5/%h\v\x1C\x10\x14|VN\0\x11l{l\\\x04\x04r\b.\u0717$D\b(\x17)X\x19f)@,%\f\x11\x19\x15\x144_o\x06?0\b8\x14\x04p + @@P~\x02llF\\AX\x063&11\x0E#&!c1b\x0E#\x063c1.3&1063. c+q\x1FV3\x15V2\x11E~#q80G\x01\x19an3\x17q\x04q\x04q\b\x06b\x03\u01C8\x19 + 8\x1E<`^\a\x17\x11\x19\x11\u01C31\x7F\x06Dbf,\x19 \0\x01\x198Hc(8XH\x04$\x1ATfeF>\x10\u02CCDY\r\x02\x02\x02\x01@I'\x02\x1A\x17)\a\u0546W\x10$y/\\\x10Q\x15\x19Z\xA2f%/bs1D\x1C\x18\u024A/\u076B?vn^$$-j\u07ACkkVj\x0ECK6\u0213\u0162\aFh\u0458\x19\as\x03#\x19\x0EFhHFhf(\u0410=3\x0F0P\x0E\x06ha#$$4f&H\xE3$HF\"b\x19#\x14H\u0411\a(\x19!\x19\u03184)C14R\fP\u0325\x0EL\x19#1FQJ$hRbLL&P\u0410L\x19#1\e&=0\u062D\x0EL;$F@D\b4M3@L\u0660L\x06i6Mfi7&g\ti\x06hrl4IH@&\x7F&M.M\x1AIg)D@\x02\x06\u079AL~L?i6hsI2LG&w&?L\r\x1E\u0661fdM&+yi)\u0462he4M&S&a2\u6261o_S_khto)Mt\u0262M&S\x1D5\x06o\0\x06\u0487 + \u0622P\x06\u0620\r&\bFE\x19l\r%\x12\"z\u858F%tk$z_\x04\x05\x0FP\x18\u01E98XgOHS\x198U,\u0289}\x11!QMOqJ>I~,DSNn\x1D\u015A\u0451S\u0193\e\u0509<\u03E7'%<\x7F$%gy'|U1jg}\nhbY|RI4/NjW\x16]\x05\x7FrB`?\x04L5_II!r\x1A4M\x1F$\u0264i4.Li3sKd\x1F\0\x02g.{LaAN\x16f^\u0274RLw)a2h]0i&)MM\x04e7d4SF4iisH4\u0260h`\f\u027EM&\x7FkC4h\nc\x10M\x7F\u9398MLM\x14\u64644)2&a2LG\x13i0h\x13)I0i\x0E\x1AVEP\05v*`^*El\x13T\x13|^5\x13_\u0633\x13bv}~N>O>\0Z\uB4D3>\x0FrNN\t1|>>I9>:>}ru9'_N\x7F>:>\u03E2u>O|NBR|s\uC704>\x7F\x1F\\:>\x0F}\u03C0\x16:>\t|\0NI|G'<>\u03EE|~|\x13>\tN\u03E0pdF\a_\x19g\x19O\x1DDdf + \"B0G\b\x10\x11!\x12\x11?\b\x12\x11\x01\x11Fq\x13\b\b\x12\x117\a(9\x01\x0EQ\x0Eaca6hIL:o_d\x1F\aN\u03E2tNI9>Ot|`\vAN\x0F(\x7F\x0F\x03\n\\\n@\x05\xC0\u01C3 + p:\f\x10\x06\x01`:\x01P\v\x03!t\x02\x16\x06@(\x1D\01\x0EAi\x03@`\x7FapB\x1D4A0\x1A\f\x05\x01PT\x18\rT\x14\x05>\x1C\x03\"\x1Fo0\0\x1E\x1A\x1AG\x111il4)2L}4L&S\x06h4M#E24\"\fh&\f7\bp\x19^\x1C + pL\x19X7\bp(\r\x1C?\x7F!\bQ~~\x1F\x14\\\x1FI\n.Qs\x0F!E?HULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\r\0\x01\0\b\x01\x10\0<\0\x01\0 + \x02\0\x03\0\0 \x04\0@\0`\0\x04\t 3\x01\x10SQL\u02CCL\f\x15UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\r\n--3985904f8e819ec1c1a2f121ec8a506f--\r\n" + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + authorization: + - DUMMY + connection: + - keep-alive + content-length: + - '43739' + content-type: + - multipart/form-data; boundary=3985904f8e819ec1c1a2f121ec8a506f + cookie: + - _cfuvid=8u4IgF9tBVF8PRiXTvROLruSXPp1UfrW2aKOwodLqqA-1737481552480-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - AsyncOpenAI/Python 1.57.1 + x-stainless-arch: + - x64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - Linux + x-stainless-package-version: + - 1.57.1 + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.8 + method: POST + uri: https://api.openai.com/v1/audio/transcriptions + response: + body: + string: '{"text":"Hello there"}' + headers: + CF-RAY: + - 90dd153e0f703ecd-BOG + Connection: + - keep-alive + Content-Length: + - '22' + Content-Type: + - application/json + Date: + - Thu, 06 Feb 2025 18:08:00 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=HOrSCETl3hwZtnzadSio4uCWFfS5Blfwc3scbHeFZRY-1738865280-1.0.1.1-yslYwpmYbUgQcfjStee4i3NNqQJDk_xHM68xF1b0.UaSaVdKy8DdZFJbwdgY8CNvjH6vEKSodpyhx4VhOvnR3Q; + path=/; expires=Thu, 06-Feb-25 18:38:00 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=lqc93.ZXJu7xfnf7nvs_gq2T.4yJEyFTQdshckE.euE-1738865280708-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - monadical-5pahzt + openai-processing-ms: + - '580' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + via: + - envoy-router-666bc8466f-nh4zj + x-envoy-upstream-service-time: + - '472' + x-ratelimit-limit-requests: + - '7500' + x-ratelimit-remaining-requests: + - '7499' + x-ratelimit-reset-requests: + - 8ms + x-request-id: + - req_210d0719be408b1fd79cec834549b10f + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_litellm_async_stream_chat.yaml b/tests/cassettes/test_litellm_async_stream_chat.yaml index 5939399..67b2375 100644 --- a/tests/cassettes/test_litellm_async_stream_chat.yaml +++ b/tests/cassettes/test_litellm_async_stream_chat.yaml @@ -28,7 +28,7 @@ interactions: body: string: 'event: message_start - data: {"type":"message_start","message":{"id":"msg_01YF7UQ9VUY1xiTXENQm13x9","type":"message","role":"assistant","model":"claude-3-5-sonnet-20240620","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":10,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":3}} } + data: {"type":"message_start","message":{"id":"msg_01DRCD5qwVWHXGk2ZuM2NncD","type":"message","role":"assistant","model":"claude-3-5-sonnet-20240620","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":10,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":5}} } event: content_block_start @@ -44,53 +44,46 @@ interactions: event: content_block_delta data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello! - It"} } - - - event: content_block_delta - - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"''s - great to meet you. How can I assist"}} + It''s great"} } event: content_block_delta data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - you today? Feel free to ask me any questions"} } + to meet you. How can I assist"} } event: content_block_delta data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - or let me know if you''d like help"} } + you today? Is there anything in particular you''d like to"} } event: content_block_delta data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" - with something specific."} } + chat about or any questions you have?"} } event: content_block_stop - data: {"type":"content_block_stop","index":0 } + data: {"type":"content_block_stop","index":0 } event: message_delta - data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":39} - } + data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":36} } event: message_stop - data: {"type":"message_stop" } + data: {"type":"message_stop" } ' headers: CF-RAY: - - 90dce90428c1497c-MIA + - 90dd1e440b1acc74-TPA Cache-Control: - no-cache Connection: @@ -98,7 +91,7 @@ interactions: Content-Type: - text/event-stream; charset=utf-8 Date: - - Thu, 06 Feb 2025 17:37:49 GMT + - Thu, 06 Feb 2025 18:14:10 GMT Server: - cloudflare Transfer-Encoding: @@ -110,29 +103,29 @@ interactions: anthropic-ratelimit-input-tokens-remaining: - '20000' anthropic-ratelimit-input-tokens-reset: - - '2025-02-06T17:37:48Z' + - '2025-02-06T18:14:09Z' anthropic-ratelimit-output-tokens-limit: - '4000' anthropic-ratelimit-output-tokens-remaining: - '2000' anthropic-ratelimit-output-tokens-reset: - - '2025-02-06T17:38:18Z' + - '2025-02-06T18:14:40Z' anthropic-ratelimit-requests-limit: - '5' anthropic-ratelimit-requests-remaining: - '4' anthropic-ratelimit-requests-reset: - - '2025-02-06T17:38:00Z' + - '2025-02-06T18:14:21Z' anthropic-ratelimit-tokens-limit: - '24000' anthropic-ratelimit-tokens-remaining: - '22000' anthropic-ratelimit-tokens-reset: - - '2025-02-06T17:37:48Z' + - '2025-02-06T18:14:09Z' cf-cache-status: - DYNAMIC request-id: - - req_01W3vhFHXXhvFecsAdtzJ2Us + - req_01GQdpAbGJJybWqPPZyGeM9o via: - 1.1 google status: diff --git a/tests/cassettes/test_litellm_async_stream_chat_default.yaml b/tests/cassettes/test_litellm_async_stream_chat_default.yaml new file mode 100644 index 0000000..b2ebc46 --- /dev/null +++ b/tests/cassettes/test_litellm_async_stream_chat_default.yaml @@ -0,0 +1,158 @@ +interactions: +- request: + body: '{"model": "command-r", "chat_history": [], "stream": true, "message": "Hello + World!"}' + headers: + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '85' + Request-Source: + - unspecified:litellm + User-Agent: + - python-requests/2.32.3 + accept: + - application/json + authorization: + - DUMMY + content-type: + - application/json + method: POST + uri: https://api.cohere.ai/v1/chat + response: + body: + string: "{\"is_finished\":false,\"event_type\":\"stream-start\",\"generation_id\":\"71b805cb-1470-40c6-bb19-9d7fa1d5742f\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"Hello\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + How\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'s\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + it\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + going\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"?\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + I\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + hope\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + you\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'re\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + having\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + a\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + fantastic\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + day\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + \U0001F60A\"}\n{\"is_finished\":true,\"event_type\":\"stream-end\",\"response\":{\"response_id\":\"c1d3cf83-2832-4638-91f9-34094522f9c7\",\"text\":\"Hello! + How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"71b805cb-1470-40c6-bb19-9d7fa1d5742f\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello + World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope + you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}},\"finish_reason\":\"COMPLETE\"}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Transfer-Encoding: + - chunked + Via: + - 1.1 google + access-control-expose-headers: + - X-Debug-Trace-ID + cache-control: + - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 + content-type: + - application/stream+json + date: + - Thu, 06 Feb 2025 18:07:27 GMT + expires: + - Thu, 01 Jan 1970 00:00:00 UTC + pragma: + - no-cache + server: + - envoy + vary: + - Origin + x-accel-expires: + - '0' + x-debug-trace-id: + - a49977f260ad8617e56766a87be11669 + x-endpoint-monthly-call-limit: + - '1000' + x-envoy-upstream-service-time: + - '65' + x-trial-endpoint-call-limit: + - '40' + x-trial-endpoint-call-remaining: + - '35' + status: + code: 200 + message: OK +- request: + body: '{"model": "command-r", "chat_history": [], "stream": true, "message": "Hello + World!"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + authorization: + - DUMMY + connection: + - keep-alive + content-length: + - '85' + content-type: + - application/json + host: + - api.cohere.ai + request-source: + - unspecified:litellm + user-agent: + - litellm/1.53.3 + method: POST + uri: https://api.cohere.ai/v1/chat + response: + body: + string: "{\"is_finished\":false,\"event_type\":\"stream-start\",\"generation_id\":\"888e9e3b-7e60-473c-8066-314790fd01ea\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"Hello\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + How\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'s\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + it\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + going\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"?\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + I\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + hope\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + you\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'re\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + having\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + a\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + fantastic\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + day\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + \U0001F60A\"}\n{\"is_finished\":true,\"event_type\":\"stream-end\",\"response\":{\"response_id\":\"c502e4a3-3a80-4631-bfcf-26df7c99ed7b\",\"text\":\"Hello! + How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"888e9e3b-7e60-473c-8066-314790fd01ea\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello + World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope + you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}},\"finish_reason\":\"COMPLETE\"}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Transfer-Encoding: + - chunked + Via: + - 1.1 google + access-control-expose-headers: + - X-Debug-Trace-ID + cache-control: + - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 + content-type: + - application/stream+json + date: + - Thu, 06 Feb 2025 18:07:28 GMT + expires: + - Thu, 01 Jan 1970 00:00:00 UTC + pragma: + - no-cache + server: + - envoy + vary: + - Origin + x-accel-expires: + - '0' + x-debug-trace-id: + - 9da5a0626c75252098b6f8f0462c2b21 + x-endpoint-monthly-call-limit: + - '1000' + x-envoy-upstream-service-time: + - '78' + x-trial-endpoint-call-limit: + - '40' + x-trial-endpoint-call-remaining: + - '34' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_litellm_async_text_to_speech_default.yaml b/tests/cassettes/test_litellm_async_text_to_speech_default.yaml new file mode 100644 index 0000000..e544e80 --- /dev/null +++ b/tests/cassettes/test_litellm_async_text_to_speech_default.yaml @@ -0,0 +1,1098 @@ +interactions: +- request: + body: '{"input": "Hello, this is a test of the speech synthesis system.", "model": + "tts-1", "voice": "alloy"}' + headers: + accept: + - application/octet-stream + accept-encoding: + - gzip, deflate + authorization: + - DUMMY + connection: + - keep-alive + content-length: + - '102' + content-type: + - application/json + cookie: + - _cfuvid=emqeqolLySQS3BdAp8vqwFvQeMH3syQG.HgesIfxybo-1737481187492-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - AsyncOpenAI/Python 1.57.1 + x-stainless-arch: + - x64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - Linux + x-stainless-package-version: + - 1.57.1 + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.8 + method: POST + uri: https://api.openai.com/v1/audio/speech + response: + body: + string: !!binary | + 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 + IPFLjICRkQsCjgQyGSEBZExnTHgMKUGzDE4W6Mnc3pjzNPMY5ozPsBF5LcF7TAqMWkATDsQgdBrg + UfHXhV8CNGeaDvDiJNlwxowrIWJQtEAXzCcMFkVPJBhgUZEJBxwQ//PkxLhi/Di0NMZfbEIZbQaP + AyRhEg0oYNKhQqSFhgqOCwE4I2QIgI9ijJ4S8hgcoXwfokQp4ugwx6B/lcXEvxdSBEbHYQceApIa + oR0WYTkUwRcRwXMx0axN7yPElYjmL6bx2pJJohFqRsa2JhXS5XDGyOLMwtzW2N7Y1qVTKVTJFMJN + EHeeqKRJ3Hqeh/oQbY4hbRhDtGkMsdg5xyFUUJMiYlUVZPC5kQEZBtBAQxhBQ2AtYVAk5b0Mb25t + aobgji5FtJ8YJnGGXQn5uJBfXS5Xl2pFesKFDk6kkykEWiEmTEFNRTMuMTAwqqqqqqqqqqqqqqqq + qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq + qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq + qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq + qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq + qqqqqqqq + headers: + CF-RAY: + - 90dd15551cde3edc-BOG + Connection: + - keep-alive + Content-Type: + - audio/mpeg + Date: + - Thu, 06 Feb 2025 18:08:04 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=pdtTQVhtqyEE_4oewJI2q5h8CvSqrsvRzcAKvsKCWhc-1738865284-1.0.1.1-A0n_I9Wc3.LRkkm9iMK4qM0359a0X6qoqvPEkntfivzy6lqzPwYIuBOxLLAQrvwbP90H1Zpv88HqUk0zVyxT6A; + path=/; expires=Thu, 06-Feb-25 18:38:04 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=SkuNjMb9NMY4MxabeDP0YKpDxZA.y2TnfOWbNinJhpk-1738865284677-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - monadical-5pahzt + openai-processing-ms: + - '761' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + via: + - envoy-router-856f87f767-b9lv5 + x-envoy-upstream-service-time: + - '749' + x-ratelimit-limit-requests: + - '7500' + x-ratelimit-remaining-requests: + - '7499' + x-ratelimit-reset-requests: + - 8ms + x-request-id: + - req_032ead557989e31d957f75218fc7a108 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_litellm_chat.yaml b/tests/cassettes/test_litellm_chat.yaml index cfb10ed..1003b04 100644 --- a/tests/cassettes/test_litellm_chat.yaml +++ b/tests/cassettes/test_litellm_chat.yaml @@ -1,70 +1,83 @@ interactions: - request: - body: '{"model": "command-r", "chat_history": [], "message": "Hello World!"}' + body: '{"inputs": "<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\nHello + World!<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n", "parameters": + {"details": true, "return_full_text": false}, "stream": false}' headers: + Accept: + - '*/*' Accept-Encoding: - gzip, deflate Connection: - keep-alive Content-Length: - - '69' - Request-Source: - - unspecified:litellm + - '223' User-Agent: - python-requests/2.32.3 - accept: - - application/json - authorization: - - DUMMY content-type: - application/json method: POST - uri: https://api.cohere.ai/v1/chat + uri: https://api-inference.huggingface.co/models/meta-llama/Meta-Llama-3-8B-Instruct response: body: - string: "{\"response_id\":\"b81153fc-b376-4249-a36b-adfa53e60e74\",\"text\":\"Hello! - How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"6836678e-9982-48fc-956b-abdab234e1e4\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello - World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope - you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}}" + string: '[{"generated_text":"Hello World! It''s nice to meet you! Is there something + I can help you with or would you like to chat?","details":{"finish_reason":"eos_token","generated_tokens":26,"seed":null,"prefill":[],"tokens":[{"id":9906,"text":"Hello","logprob":-0.00096035004,"special":false},{"id":4435,"text":" + World","logprob":-0.76416016,"special":false},{"id":0,"text":"!","logprob":-0.0005226135,"special":false},{"id":1102,"text":" + It","logprob":-0.23828125,"special":false},{"id":596,"text":"''s","logprob":-0.000172019,"special":false},{"id":6555,"text":" + nice","logprob":-0.19726562,"special":false},{"id":311,"text":" to","logprob":-0.0000030994415,"special":false},{"id":3449,"text":" + meet","logprob":-0.00020253658,"special":false},{"id":499,"text":" you","logprob":-0.0000010728836,"special":false},{"id":0,"text":"!","logprob":-0.082092285,"special":false},{"id":2209,"text":" + Is","logprob":-0.016296387,"special":false},{"id":1070,"text":" there","logprob":-0.0000166893,"special":false},{"id":2555,"text":" + something","logprob":-0.0016317368,"special":false},{"id":358,"text":" I","logprob":-0.015335083,"special":false},{"id":649,"text":" + can","logprob":-3.5762787e-7,"special":false},{"id":1520,"text":" help","logprob":-0.0013160706,"special":false},{"id":499,"text":" + you","logprob":-0.0008840561,"special":false},{"id":449,"text":" with","logprob":-0.000014305115,"special":false},{"id":477,"text":" + or","logprob":-0.6582031,"special":false},{"id":1053,"text":" would","logprob":-0.0008363724,"special":false},{"id":499,"text":" + you","logprob":-0.0000013113022,"special":false},{"id":1093,"text":" like","logprob":-0.0003736019,"special":false},{"id":311,"text":" + to","logprob":-0.0000047683716,"special":false},{"id":6369,"text":" chat","logprob":-0.0053977966,"special":false},{"id":30,"text":"?","logprob":-0.056274414,"special":false},{"id":128009,"text":"<|eot_id|>","logprob":-0.0006275177,"special":true}]}}]' headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Content-Length: - - '506' - Via: - - 1.1 google - access-control-expose-headers: - - X-Debug-Trace-ID - cache-control: - - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 - content-type: + Connection: + - keep-alive + Content-Type: - application/json - date: - - Thu, 06 Feb 2025 15:24:42 GMT - expires: - - Thu, 01 Jan 1970 00:00:00 UTC - num_chars: - - '432' - num_tokens: - - '21' - pragma: - - no-cache - server: - - envoy + Date: + - Thu, 06 Feb 2025 18:14:08 GMT + Transfer-Encoding: + - chunked + access-control-allow-credentials: + - 'true' + access-control-allow-origin: + - '*' vary: - - Origin - x-accel-expires: + - origin, access-control-request-method, access-control-request-headers, Origin, + Access-Control-Request-Method, Access-Control-Request-Headers + - origin, access-control-request-method, access-control-request-headers + x-compute-characters: + - '128' + x-compute-time: + - '0.555443295' + x-compute-type: + - 2-a10-g + x-generated-tokens: + - '26' + x-inference-time: + - '551' + x-prompt-tokens: + - '14' + x-proxied-host: + - internal.api-inference.huggingface.co + x-proxied-path: + - / + x-queue-time: + - '4' + x-request-id: + - KL9UFz + x-sha: + - 5f0b02c75b57c5855da9ae460ce51323ea669d8a + x-time-per-token: + - '21' + x-total-time: + - '555' + x-validation-time: - '0' - x-debug-trace-id: - - 69a7683d02576d94c359837c12c99c5b - x-endpoint-monthly-call-limit: - - '1000' - x-envoy-upstream-service-time: - - '256' - x-trial-endpoint-call-limit: - - '40' - x-trial-endpoint-call-remaining: - - '39' status: code: 200 message: OK diff --git a/tests/cassettes/test_litellm_chat_default.yaml b/tests/cassettes/test_litellm_chat_default.yaml new file mode 100644 index 0000000..e32d242 --- /dev/null +++ b/tests/cassettes/test_litellm_chat_default.yaml @@ -0,0 +1,71 @@ +interactions: +- request: + body: '{"model": "command-r", "chat_history": [], "message": "Hello World!"}' + headers: + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '69' + Request-Source: + - unspecified:litellm + User-Agent: + - python-requests/2.32.3 + accept: + - application/json + authorization: + - DUMMY + content-type: + - application/json + method: POST + uri: https://api.cohere.ai/v1/chat + response: + body: + string: "{\"response_id\":\"72c4fe31-0ab4-47b3-96dd-9e23b485a62d\",\"text\":\"Hello! + How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"b2d41b16-082e-44c2-ac84-45da5deb10c9\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello + World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope + you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}}" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Content-Length: + - '506' + Via: + - 1.1 google + access-control-expose-headers: + - X-Debug-Trace-ID + cache-control: + - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 + content-type: + - application/json + date: + - Thu, 06 Feb 2025 18:07:26 GMT + expires: + - Thu, 01 Jan 1970 00:00:00 UTC + num_chars: + - '432' + num_tokens: + - '21' + pragma: + - no-cache + server: + - envoy + vary: + - Origin + x-accel-expires: + - '0' + x-debug-trace-id: + - d7b7ae1595ca91dc5acebe7f3ef28e22 + x-endpoint-monthly-call-limit: + - '1000' + x-envoy-upstream-service-time: + - '231' + x-trial-endpoint-call-limit: + - '40' + x-trial-endpoint-call-remaining: + - '39' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_litellm_image_generation_default.yaml b/tests/cassettes/test_litellm_image_generation_default.yaml new file mode 100644 index 0000000..cffaea6 --- /dev/null +++ b/tests/cassettes/test_litellm_image_generation_default.yaml @@ -0,0 +1,99 @@ +interactions: +- request: + body: '{"prompt": "A serene landscape with mountains and a lake", "model": "dall-e-3"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + authorization: + - DUMMY + connection: + - keep-alive + content-length: + - '79' + content-type: + - application/json + cookie: + - _cfuvid=hkxfes4WJdBPiNxcc7Xj0kLNDj3TI9cGY0N1Wnz1rho-1737481167073-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.57.1 + x-stainless-arch: + - x64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - Linux + x-stainless-package-version: + - 1.57.1 + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.8 + method: POST + uri: https://api.openai.com/v1/images/generations + response: + body: + string: !!binary | + H4sIAAAAAAAAA2RRXYsaSxB991cUwvrk6Kjz5YJcNtnLJe5CstldTbyEUNNdjh17uiddNRoT8t/D + KIEseSm6OXXqnDr1owfQV4FQSPevYZLPiiJLp2k+7ACNgv1r+L8HAPDjXAH6gQ6GSX9ugq8b6V9D + f2W4RWu+EyBIQPe1NRZYkSMgp3zdILNxFaAD+ibkNGkI6CoCvwXrt3KC2rdO0DiGo5EdhLaqSIOy + ZrvlIbBCEQqkL6i0W+GOWwUiBweqSFCMd0NonaYACMoSBihtS8D70wjeOJAdwcEo44ychqCwkTZ0 + jlmMtWBxT5fpRhhqE4Lv9LgNW1QEgbaWlHRbdHNq/EIsRv3hG50+Q2e5px2BNdVOOpcITCK243Lr + gNtS7AmMtW1tHArxmUdOTKBLbJ09PotZ37F2qP3xIlESiz+e04TK+uM5Bm81OThiqGUH3om/TLRU + k7sk1f0tOs0KGxr1h7+P2QbbXXAn0vD1eOzRaLSWsDFN8JpVy6PS+nKkfKDR0bjOx8iRjJtgDig0 + 9qGKprx6OKx3yelu+e11Nf8gT6+zzePyedwyhejj29h9v7l5s19OX71fNrfvk83s8f7f9djUVXSK + 00mjCm4+rO7S+Jnv8Mv9/P64HjWu+odlMY2naRRPozh7muRXs5u4K7N8M2B6gc1fYM0iDPjQNSRR + XERxMuCwKAeBlV4YZ42j7i0LU2NF48ZVA957oxc6jdMsy3WkMzWJEowxKlHlUaqKBIs8T+fbYsB7 + MXqBSaEUpllEmcYoKRKKsJgk0VwVyTxLp6UqZ13rC5fZ1ewmLTqr882A93+skP8F8qIc8P7lEqZa + JK82S1M//PcOx6vMZ1SdaJrcPt+vT/Pd4+HdQ/o8ydebj/NVxlez2/75zj97AJ96P3u/AAAA//8D + ALKFBYvuAwAA + headers: + CF-RAY: + - 90dd147daf5bf7a0-BOG + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Thu, 06 Feb 2025 18:07:37 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=ciTIMYhWE546ufoL2qCcmL9Vp31GUHba_DQUv6.Bn_I-1738865257-1.0.1.1-Rn0VI0AEah8TB4O0l0gKLITTzJSr3K2EENW6su1tvClC1.HUb.ud4V9ekGsJJ49ixIzor7lOhKbl9vu6sal.jg; + path=/; expires=Thu, 06-Feb-25 18:37:37 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=mClzvWr6ivinictDkj8R_eN8xwL8HBbVbOQlnfAJ6JY-1738865257931-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-allow-origin: + - '*' + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - monadical-5pahzt + openai-processing-ms: + - '8741' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-request-id: + - req_7426ecca14f974e6e0fb0e27effbec6b + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_litellm_speech_to_text_default.yaml b/tests/cassettes/test_litellm_speech_to_text_default.yaml new file mode 100644 index 0000000..d71fb32 --- /dev/null +++ b/tests/cassettes/test_litellm_speech_to_text_default.yaml @@ -0,0 +1,239 @@ +interactions: +- request: + body: "--281d5bcf6d8efdfa0b22944d901b8947\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwhisper-1\r\n--281d5bcf6d8efdfa0b22944d901b8947\r\nContent-Disposition: + form-data; name=\"file\"; filename=\"hello_there.mp3\"\r\nContent-Type: audio/mpeg\r\n\r\nd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\0\0\0\0\0 \0\0\0\0\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x1C\x12\020-FX@VX_1j'\x19\\rR\x01U\x1Ef\x11qF8\x0E'BZ;\r\n\f\aJ\x17P&d\nHjD\x16\x1Ca1a\x19\x04j>\x10;\u0160&\\k\x11f\x01vp@b#( + \x16-+8%\x04&Y c\x015w\x04\v*\x0E{\x10\x02\a^\n_c\"\x18\r\0\fh\v*js\"/0/\u0533Q\x03<\x10\x05*\x14\r1Xh@\f\x1C\x18\x15\x05\x1C\0FQ + bDAR` \x11 0\v4B\x11\n\x04\x01\t\x1A-\x0F<\x03CH0\u0320L\bt5J)\0\t\0@@C`\x04\x03\0B\x10G\u018DL|\x14\x110\0 + M\a\x14P\\\x02pcfxo\x05!bLP\x06\e\x03\0#\09.\x06w\u03BE6fbd&bZs1\t;-\u0747&[b'ed\f\b\0\x01 + \0\b\x01 \x10\0$\0\x01)@Fg|\x14*\x05w\x1300R%\x1Csjr{\x130r\x0Ed\x038\x1DLt81<\x14p\a\t7Hg\u03E78\x1F\f{0H\f\x01Pe@\v3\0%QB`*$b\x19Qlv!\n'\b\x1Ez\x11X0`\e\x05d\x01QreQQH@\0)\fz\f\e\r\x02\x1CM\x1E\x06N;\x1EN1\x1FMD@Lh\x029g\x03I`A\x04@:\x06\b\x7FM\x01\x17L\x1E\fOL%B4L#\x05\v(=d\bf\x01\u064E\aYgqA\u0142I\u0277!,A\u05C7%A\a\x04!'\u064D\x11Yq\0E/\x02\f\a\0.\x1DSp:\f\a>\x7Fg\x0F>^$zI + H)7|\f\rUA$\x1C\x04${:|\b5\bT\x12FMTB\x18p\0(p\x10\xE40040\x0E)N\u06A3VT\uA76As\b%Ji!\bH\b3\t\"841VI\x0Fm.ZG\x19\x043I\x06v*Il$i\tJF\x1E\u069C\u049C\x7F+\u045Aj+\x19\x04p{\xA7>FaCN\x18JS\x03\u09C3x\x01\x03\x04 + <\a\0`> \x01\x10\x06\0\f\x01>!\x01\0\x06\a\x06\x030\0,\x03r \uF0C1@0 qH#\x10B78ho\x1C\x1F\a\x11D\u0724\x029*$c\x1A}\r\x1A}\e\x0E)X\u01C3 + \u07C3\r\u072CF1NG\x0E\"|'iH\x04,\f1\x7F\x1A\x06\x03F\x0E;`0CD\x14f\x0E\bp4cG2\x0E\u03C3=\x1CE\x13O)>\x01\a|dj2'J0t*j\0\x03p.+7s;+\vf!B\f\x06\x10M\x128e\u04E5\x051\x1A\x7F7K0x\u062CRb\0 + \\\u064D(\x14\x1D\x03!&\x10dg\x11@\x10\u044Ca\x1C\e$?\x02Y3>@\x01\\w\0~+Zd7\xE4|\x15/A\x1C)\n~\x18\x1F.bH\x18i\U000EC44CGcT,T\x017\x14c8\rc\rt@\x16\x037\nX~$fW\t*4\x06\x17\x04\vH\x03a\a\x04`A\xF6eW_Q5GH&\x010\a#\x02\x10TD\x1F\t;!\bQ<7sMg\x10A\x06\0SJ\x06\x19Q6 + D\x11`xc\x10Y3\b2?\x043y\x19\x18'\x05G\tA)1\x12!/\x1F(\x01L\tl\et oT{q=a\uC69AIvHg~S\x16L.g:O\u017CF\x120c\x1Cy\x1Af?\xCD\vgW4.?J\aBO:5\u0211-h\x10`CS!\x12@PC)~\r]^\"\x190f>3\n\u01C3\x1Cr\x7FtX1\x1C\x7FV\x1ElcT\xC0\x03\x1D5m_\x19\a\0EN\x01Y93\x03\x05\x13M;V\u05DD\x04C\x1E\x1C\x03GG\u0396\u05DC\x03J'xcfg_\x16\x13Gf\x19\f\x12H\x108}K)Q`c\x04[m\x02\x18O\\!\x0E\e\x02XD\x14}z@xN\x03{\"0F\u01988IC\x033\vm\x06\x02h!l\u07E1v\x1CM\x03:,Ef\"x\x0E:\x1C\x1Fg\0\x11\u6060MM\x03Cy4yFi4ht\x19\r64\x1C?\x13 + gL6L@iSIM63\x06L&*o\u03F6kD\rg\x01d\x02m\x061\x18\x03\x14\x1C\u0157_\u0775:8;v\u0460MtL4\x1D4i\u0661\x7Fi6M\x1Ai@)g\tiM?L4kS\x06`M&4\u0667\u05FF^^_\x7FiC\x171\x0FC?ht1\fh_\u4765\aF@L\x0Exkt\x03b!\x04\x18\x04zjt! + \n\u0402\x10]$bQ\x05\x06$/\x03QbG?\x05\v.?\b..Au\x1C/25<\x03A@d1 #c\x1A\x0E1 + \x0E\x0510\x15\x1800\x04#\aPo05\x01`@-tx84\0Zb\x0E-f&Z`h\x05\x14$\x16\x14&\x14\nk\u024A/i\x12&,\x184dK\f\ts?\x1C\f(XW+e\x7F\u456A\x1C\x14!U`-X\x1A\e\x06\x1A6VX\v24\u039D+\x1AKMX\u07089N?\x16E\u0434\vD|_\v@\x17\x01\r\x03+V\0\03\b + \0V_ .,j3\x18\u050E\aa#d.\tXZ3\x0F\u8303\x1F/\x174ES\x0Ex\"\bW\a\r\x03\0!#\x13 + jc\v$\x1D\x01\x1C\u04D7&*\nq\b\ne\x1Ck\x01`\x1EbhF`\x04\x10g0Jdxiqd\\dhd^X\x0EK\x04XJa(rdhVw]c@cAV-\x18J\x12^-)U\x15y\x19q\x12$\x16\v\x0489+94C89,\x1CYY\u01C2m=VHdB/Y!Y)`\x11|ALx\nL\x14\x10\be\a&P``P\ng%&\bi\x06rJV\b`p\bi\x1Ci,\x12\x7F(\x12y`s\u0314I\x1F1\x01\x0F1\x133\x02\x039\x11,\b\x16\x0EK\a&\"#\x1F\0\x0F6vN1!1Mj1\u0387*2f\"0Z00D1HAD0\x050\x02+\x12\x02\"h\a\xEA\a@l1Y\b\b\x03\b\a'R\x14\u0578\u01D4\x04\u0372\u0262L2\u02A13\xA8\u0192S,R\x12\x06B!\x1E\b\u0121,\u0121u\x11DDC8\x13C(g\"\x7F~!\u0740/m)\x1Fq + \ \\!\x16\a\x01c\aF\e\x01s\x058X\x05l@%0%0%,\x04V\x12\x15a(a(HX\x12K,MB\nc\x05b,X\x05b\\\v,\x17yi\r%,`\x16fRc%M3#J`\f$4Sdi\"\x12r#ey`re\x05\x13(_0<\x05+\niB\x16\x02\x12\x12@X\t\x10\b\x05\x06K\\flJ&>A`\x1D&\x05ARa*\x03&\x18 + D9\x06b`$\b\x06\x06\x01!\x02\x030/0A\x043\x04X0\x15\a\t0\a\0s\x10e1rQ\0\x11\x18\x12\x10\x18h\bL<8h\x1A\x1A`\x11`\x18\x03\x0E1.\t6r.1\x13\r&1(\vc\b\x150 + \x18po0M\x01\b0)0\x122K\x0E\x04!)\x18\x03Qh\x16\tP\x05\x01BA\x01>T\x04\r,)01\x19.X`z\tK\0 + \0a\\E\u0601&_E\u0657a}\x0E\x055D\b6v\u023B+e\x12\x14]\e2\x04\t\x02dCj6\u0355\u033B[;d\x10TNu\vH\x10BQ:\aM\r\0X\x17VY-\bJBbb.b\fA\x058\u014CP\" + \x05\x17@Gb,pbn\x17B\v\v]q\tG\x1F\n\".?]G\x10\x7F/9\a\x18\u01441\x17\x15\x0F-\x04\ta\t< + \x18[(DL9\x04\x04\x1CJ\xD8\nAA\x02a\x12+(R`R\x05\x05k&R@b$L\x12Pe\x02e\x04\x10TDd*\x0FU\u06CBK\x17{\x1E\x1C=V\x0Fno2\x01\x02@B/\u02D4|bebI\n$,L\x05.P + LI* KKcd,}K\u065B;d,\x06A~b__x\0\b\x19h&*G\x03\r\x06\r!b\x13@O0\t!\x18]\x04\fx\x19\x1A@\x06d2X2\x03\x18\x01\x06@fP + iKLZc2\x1933#i\x18-8\x18\e\x06\0\t\x17/a0:lh0\x0F$\f\a\f6\x18`p]xD0aauZ\"E1\x16*\"\x14a\0\x03\x03\x1EcI1\x131#\x16\xD0q\x14a\u021E`2axr\x06\x1C\x01d/0\f%\a\0\x11\x06c9F8\x13\ai4\x1D\u02C3\x1Eh9>\x13=d&cCkp{t>\x18G\x14N\r._P0>\x0E7& + !=\x0E\x1CK'2&H\x1F3\x1Au(f6tQP]\x17\0\fB\x0FBqZ/\x02vE#\x06\x10a|+\x06\x13@*rl{\u062F\u072Cz\x0FA\x1E{\t@,\x1EW90b+3L\"0\"3\v01\x053\x1D!\x1212\n3\f1\x03\x10Y\e\x19\x18y1I\b\0\u0251\a\a\x12H\u0308H8R\x02Pc\x02\x030!#\x02\x02\u055A\b8S\x16\0\u06A00\x10\x1D\"a\u2CC6P\v\x10\e\x83\f\x17@\rTV?\v\x1C\x18\vE\u0402\x14b\x7F.\x17 + %S%|sd)%IL\x18\x02\x0EmM,Lj\x15B\x02\f$X;EL$mvc\buIfPPj+Rf\x04Ff!l\x06\x061xR\"\")U@\b\u0163\v\e\x18BL\x19\u0421\u0400`\u01A5\x11n,HJ+*\"\a\"tZC\x04\x11B\x102\x06D\x01v\x14j*D@\x18\"\x053K\v\x14\x10D\x11e\x18k,;\u448EVR:\nrF_:\x14.\u98BA+\"agS%dj\x7F\x12@J\x03\x1F+$\x7F>NW\eR\x8A7\x1A|dm\x19D\v}\u0196~\\\e\x13\x18\x0Ek0)Acq/\x1A\x1D'\x01\x18Z\r\t,\x18+{\x16\r,0W\n901\x061C\x1A0WGD2\0\x038\x18(\0\x03$\x0E-`1@(\0\0\x06\t\x11B\f\x14\x01\x11C\x06\x05 + `t\x064iRxD\x1CPp2\"\\\x18[\x06SxZ\x035\u0720ca\x11\xA3.\b\b3ts1&\x03\x03ERP1\x10(C(\x1C2\x10Tnk\0T\x19\x11\x10,\b\x01\x117\f\u062952\u0230v\a`\u0218\xA5H\u038C\x12 + 2\x10b\x11\x0E\x06#\n@#Y\x13usq\x02\x16r\x15\x10 !\x15R\x12e\x10\x12mJ\x1F\aF#15\u03A87\x81gI|eJ\x05\fk\x12YNcn\x19g?_\x18g>>\x11::7RF#\x14\x11?*\x1A?;\"9\x13 + u4qkP1\a7=='2+\x19P0u1\x06+\x197=\x10`t0t\x1940t\x10s\x10`t\x0E\x13O\x10\x11\v\x01`psA7\x06[v\x06Z\0O/{0k\bcc\x06\fl60h%#\"\n\f6}2@$S\"\r0|7kM\x12p\x02\x06\eSha\0\tji\x16H\x02l0iX\b@kle6MSIZ6h1J\x04La_\x1A1w\u016E\x11\x13c\x180\x05\"#k\x04l\x04hH\x04\v + \"\x1AY\x12\x17\u042Cb\x04\v_\uBF736\x7Fl={\u67BCg\x16m(r\x1Eu1\f-?4\x12\x048!'hh^^\x7F\x0FUGh\u05CF\x060'\x1Ez\x1Dz\x1E&ln??Hf\x18FzTk1&^V4\n@a\nF\x18Aa\n`a\x11\x7FbP4\x7F\x1C + \x7FW\x06R\x03\x12\x04R\x1CDz\e\x14\u011D\u011A~dD\v|dh\u02E6\x7F\f\x1CU\x13\x18\x0E\u06C1P\ri\x06?F\x02i92i#\e`\x14\rT\fBtfRjAnqF\x1A6V#\r+\x1A/\x026$6a(D1a,3E/\tI\x03\f0F\x18#7+\f1q\x19I}\u0106L4IL\x04e\x05cE\x01\x1A\x16\x064\u07306\x01)\x01\fJ\x04\fM\x144\u0184\x04@C%/\u05F6OlGq\x1D\x12\0\t\x1F\x11\u0D49\x01\"\x02\0$8\x11DG#b43\f:\u07CEH.3\u0766?@:\0\xCB\x06*\\H#\fF6\x0F4A;\x14a\x04L\0\x1AA\x01_N\x7F\x7F\x7F\x06$iR\x04R\x7F\x12a$2AuC4J\x03)4Q\v\x03+BL2T4T4$\x03j1)\x0Ep0\x0Es\x1E,\x1C\u9328\x19\x0FQ + i\x0FY\a\x05IFK%\x19V\x16,\bLB]0\b\0?0\0p8+\x1Ci\x1C\a%ssr72D)\x13H9\x03\x1CLr9,\x0E\n\x069Hc\u0279&H\x15\n\x069\x1CK\t\x0F+\x1C\x16\a&9\x1C\a\x05G\x05|%(,apao+\v\x7F\0\a\x05`\x0F+\0\x15<\0\x02\x01`\x02V\0\x0F\0\x02X\0J\x1EV\x010\0\x01=`9\0h0\x1Ei\x06Ad\x1F\x060d\x1F_K\roY[J\x163Li=1\x10i9\x1E\u032DD\x05\fuL\x17\x0F0L\x14\x0FL\x06\x0FL\x03\x04\f\x01\0\x04\n\x10\x15\x06F\x11\x11.8^QtPY1)\x1EI-.?\x1C:Y,\x14)N\x13\x03\bf#\x10&\x1D\x06\x06\x10;\nI)2\"\x14\x03\\\x1D\x03BZ\nf\x14FS\x14)\x010\x05&\"&\r\x06\ev} + $X$d\bD\xC5{\0\\lW\x10\0,1\f\x19\x01!\x04\\\x03>\0\0S3D\f2*M050\u0626204d3\f\x1A\x12\rLn)a>Cy\b1L3^4,n1+\rCq\x01I\x03cq``\e3|a2,\e04(\x11\x03@\04\b3@\f\0&)\r\x10\x02 + 0\x1A\x01\0nX800\f\x03@1X\x04#\x03De#\n\x04&\x01\n\v\u065B!`\e]D\x06\x18\r\x17\u0573\0\t\t\x03-7/\0\f]5\x02\"A~wl + h\0\x06Q \u0283`;\"\x02R\tey16Xn)\eq9I\x190y\u013D\u0464r+\x19\x1E)I\x11p)\x17X_>`\x03sa\b\x7F\x1F\0\0\0\0\r\\Cc8@\x01h\ttX\x04,3+\x16#\x1DT\x1D3\x02<1c'\x19\x03\x05\x14\fH\x16\0\x1D\b\x04\x03\x14\x17 + @\x14\x13r\x19\x10c\x18xH\a^F\"\u02C1!AAm\u5048@80@\x0F0T(J\f`8L\x1F\x03\e\x04\bG\r221}[\x03)52{Or\x1A7EsWb\"0\x04`\x150a\x024$\x18\x02\x10\x05\n\x15\x18\x01\x01\t+b + ;:k\x0E@\"\x03\0\x02pw\a\x0F\"\x06 \x12Q\x02@\0r\u0323P\0\u0405\\D[f+f{Sj$d\nxLD\x7F\0L\u01C04\0)1\x14Y\x01\u0232\x03<\0\x1C(ls@5\x06E\x066p\x13)b\x0E&8va\0Ni\x06`\tF&lia8}\x11R\0\x10\x0E\x1DL\x1C\x0E\v\x11B10`(a3\x01,c\x1E`\x12a\x0E\x06.F0\x1F\x02\u0E43\08\x04=0l\x051\bo4\x11A0(8\x03i\0\x01\0t\r[X\xE61\na0\x9B\na\x9A@\u0488L'M<\x13'H3.\\\u05D5\x18\x06(8d\0\n\x0FK\u0196{\0b\0\0')1\x18\x19\x01#\a8\0G\a\x06(A\b\x1AC\x7F\0\x7FG\x06H\x7F\x19 + \f)\x7FJpaH\u03C9\u0358\u024D8\u0378\u04CA8\u0338X8\u32188\u074981\f<\x18\x14\f<$SL0\"\bB\t\x15F1\fF\x17Hf\x17P` + 3\x14\u0251@DB\x14\x011<\u01B0D\u01B0@\0D\u01E4H\u06B3\x18\u06A3\x18ux|c\x19yh`/,\x05\x05f+\u054FEcXc\x18g\x11g\x10X\x18( + d\f R\x05\x01\0`\x183+\x06P,0\b4\x182\f2\f4TQ5\x7Fj!\0\0\x11@`\x1A\x0E\x01\x01#\0%KU\a\0Yj<\x13\x0E\x01\x1Ap\b\x1AX\x04\x03F`\x18\x04\x03TY@/IQ{U\x02@\f\u04AA3K*\x03PWM2\b\u0102Bj\x1F\x12(c\x05g\x1F\b\x04-B:$`\x0E\b@\x01P\x16\x05D\x1EBp;\x179\x160\t#QY*++-*\v@#\u0204Q#1D!1\t1;K0dI#0 + 3'\v346\u031D1\b\x04 ,\v\x14b\x10UO3\x0FF3\x01n#\x01\x16#\x05.#\x0FN#\x17>3\x162i\x19\x13\v0\x19\x03rD\"0\"\x01\0\x111\x12\x15\az0\x11#\x16\"c0\x06#\x0601L+c+u,\x15[\x16\n(SJ0SLSV,\bL1\b\f\f}8j\0\\c\"2&2#\"av2\x05awVnb\x06\"en)V\a\x02\0x`\x13&\x02\x01`z\rE\x11,\x03\x11`8\xC8\x18\x1E\x1C\"F\x0F`_\x05^X\x02\x05T\x04`\x04\x1C\f\0`$L\0\f\x04\v\0!\x100\x11\x03\x01\x10\x110\x11\x01\x03\x01\0\x11+\x01\x12\x110\x10\x01\x1F-*lid\x05\x01\x013\x02\0\x18\fL\x05\x01\vMM\x01\x18@d\f4K\x06\x7F\0aYB(\0.1\x1C\x19\0\x01 + !\x03= \0(\f\bX\b\x7F\b\0\b\0D\x04K\0x`\x06\x02F\x02@\x06!\0%H\u06B3U-*\x05Yi?\0\0\x11\0\x013f@\x13clM14_S\x1A4(,7\x12\u0601?@\e\x01p6\0\x16\t`Q\x0F\x03\0\x18\0\x02\b\x12;\x14:.\bw\x0E\x17c0\x06\u041CPC\x0FGM\x04i\u04C62.at2&2\x06d\u04E6at2\x06V\x0Ek\x14V\vBvdV4\\d\\\x02&[Tf\uA045i4\x19\x13JS)1\x1A$3(1_\aX1M\x14\x0F00j\x06\x061c\x16\"b0\x0E#\x1E0c\x18\a\x19\x18\x19\x181\x18]\t\x18\u020C\x19[\x15\t[\n\u062Dx\u014C\u01CCxX\xCC\xC8\x18@dLd\x02M\x062\x01whBelVV\x98en)X\x01\x03\x01\x10\x110\x01\x03\x06<0k\x030\x10\x01\x02\b\b\x1E5\b\bX\x1E\x18L\x03Y5\b\x01\u1000\b*FT\0j\0JZd\v-2l&\u0240\fX\bX\b\x15i6?NZB\x16\x02\x06\x02 + \ X\x01\x12\by\by`\x04L\x04\0D\v\v\v\x05`_\x05^V\x05\x14?\x1C\0`\a\x0F\0@\x04|\x04\f\x06ML\r0DM\x11M\x04LMLi\x16`\\00\u035C0\f(\x02\\\x06\x1Cv + 7;\x10\\] Ao\x147DAQu/]\fU1\x0F2lV2'I11\x02\x111\x06n2\x10++(\x0FLL@>\x01`8\x12f\x03V!&\v + 8X\x01\u04B0X0E\nE+\n\x04PD1\v\x04BD+\x10D+\x04C\x04@ED0\x05\0O+\0R\x02\x02Q(\x02\x18\x02)`\a\x7F\0:V\x03\v\08`\x03`;\x03:`:\x03`:X\x01\x01\x1C0Y\x05\x1C0\x1D\x01\x0E\x0E\0X\x0E\x0E\0X\"\"\x02)`\x11\f\x11\x01\x14\b\bX\n\x04@D0E\x04S\x04PE+\x04_0E\x04RE\"\x01\x14\x11L\x01\0\x10,\n\f\x01@\x13`\x16L\x16@pp\aJ\u031B&g:q2\x06bs# + lf@s](\x17\a\u0273#6\x05D?\"Dt+\nP_\x11\x06\x119go\x17E,*yih-3\x1E\u5943-\x1Et\x17\u03C0\x01\x06\x16c0+\u0106e\"Q\x19b7&fP\x18\u6067b&+\u604CaQ{0-\x01B1\x05\x141C1C\x1F#L\x1D1`A\x03cj^.4\x05+\x14\x18\x14bY\u0141AIeA/\x17g\u0135G_c\e\x18q69G\x13=\x05zcJq(zc^gyeeb\x17Fc]N\f\x16\x19\u04E6\x19:\x05\f`0h\x16`aC\b\x14X\fVT\u0295\x18\f\x05\x159X\x0F\x17`0\x11X\x0F\u06A2T\uA430\x02|\x01 + tLAg)\"O* \u03BF\x04\x02\0\0\0\0\0\x0E\0\0\x0E\f\x04\x8A\u030C(,(\u030C(\u0320L,\f)C\n\n+\n + \f\"\vh\x18\x0E\x1C8^\x19PN\x1C/\x18\n\x06\x02\x13`p\x12\u03D2*J\x12_r_B_\"\u016FW!\u0121q\0A(Q@\u024D\x03IQG\u04471QCYI\x02q`30d+\x0FL=1\fc + V8,\x0ELp\x1C\x0E\x15j\u055F\t\u0628+XTPWWGI\x13Wi\x17w0\"\t + 1C\t!\b0V3<1N-1c\vS\x02o1}\e\x10\t1&\x01\u04120\x1C\f\x17\u04791C\x05\x143\x188@p\ff$\u0332\x1C40i3\x0EJ\x06\x1D,\f\x1C+I\x1AHXf\x18ui:\x19\a\x19e$e\v%K\x06\x1C,`8e\x06\x1D,MdFb\x03\u071Bo\t0m\\#\x1E/v\xDE8Y6`pee\x0E\f\x1C,$\x05`\xE1,$$\x1C00LI$$\x1C,\a=F@\r1\0 + \x14\x06\x06\v\0T\b\r(+\x16\x01r\x1F\x03\x05ctn\x06\a\x14\x10>\f.\x06R%\f\x06\x10\f\x06\x10\v\x18\x100X\x16\x17@eF\x16p\x01t_<\\\x14w\x05!\t\x18(X\n2\x18#^Mt\x19-B\x1D\x02@\x03\ahZE{\x16\x1Ev~\x03\x05@+\x06@+`\x02\x01H\x05\xC1f\f\0,\x01Pt8\x1D\x0E\x03\00\x1C\x0Es~\f\x03 + t9\0\x0E\aC`;P;B\x0E\b\x17\u031AXL $$\x10\x16L\x16\n\fE\bH\x16L\x16\x04$\u0288n\f3\x034P$\u06C5\bH\u0149d0tdI\x18,\x15\x05dX:`$`b&b:b\u0232fa&brq`h@:b\u0232b&VI\x19$\x0E\x19$\x0E\x0E&,\x03\x0E\x12F,Et1`\f\u0141`+\a\v\0\uF543\x0E\x06\x0E\x0E\x06I\x0E&\x0E\x19\x0E\x0E\x0E,\x03r\f8\x06rD\x19\xF8\x19\u04E0\xE0g\x0E\b\x11h!\x10aBB!~\x11\b\f\b\x11\b\x06,o\n\0\x01\x03\x05\n\fn\n\f2\e7\x06\\-\fl,\fdn[8X\x0F6U=M\nA3\x0F\x03s@\x03&\x13\0\x05=\u04B0\x04\x0FOK`\x02X\x04\x03\x06\x03\x04\x16\u0264\x0E\x10<\x12\v\0X\0\x1Fp\"\x03\x10`\x11B$\"\x03\01\x03\x1CJ\x15DJ\x14\x15\x7F1?\f>\f\x02'@c\0\03\aq0\x1C\x05S\vA\x03\x19\x18\x14'V<\0at!f\t2V\x03\x06\x06a>b\x14\x10\x06@a3Lt\xF9\u04C7g\u039D\u02C7\u03DF>|z\x18O + \f\x05pt$\x03D\nNZX2\bIDK!2_\x0E\x10D\x1A P\x06T\eb\vn \u0280A0\nK\x06\x06\x0E\x18e\x7Fn + n\x10\a\b\e\x1C n\x10A|8a\rBn\x10n\x1F\x06\fL!B\x13\"a.\x13b\x16F5rav\x10\x02A\x06a\nF\x06@F`\0F\x06cZ`\x03\x06\x03 + dat\x10!`2a\b\x06G\tvpFd0m#\x06fZT\v,\f\x14`e\x02JZr\u0498\u024C\f<\r:\x06+\x19@\x02\f\x15\x16\x06K\x03%\x03\x19&\x14\f`Zd\v@@1\x05&lyi)\x02\fdZc\x19\x19@@\u0496\x02J\"\x1A5pE`\x19\\U\nF\rY\x15A`V\x03V\x01\u0439\x0EEL~\u0639$$~!?\x7Fs\u04F3|.,e\u012D|\u02FCv\u0201V\x7FFd\u01E8\e\u0160\x10\x1D<\xF7\a\u0276DBl\0\x04\r<\"\x04P`\f|]eC\x1C + __]bwW\x7F0\x173\x02\x190H3 AO\f\n\x13\nL3;\x18c\x11\v\x10U(\0`\x01J\x18\x14\x18>K\x06LD\f\x16\x0Ea\x06WS\u0140`x,\x1C\a+08b\f\x1C\xC60\x10,\x18,\x191\x14\\:Ld\v+5J0zSyN\a&*c\x15\u024C\x17\f&.`31H0f0\x19\x06s\x06*P\x19\x13@?\u0128M\x04\u05C6+\b\x18p\u012A\x18&V&\x01\x04\x05\x02\x14\x04J]BE7LbEq1Q:\x1Cd\x0FUe\x03\u069BpY\x17\x10\x7F\x16\x1Ciq\x1E\x0Ff\x13`Apy/\x18\x0F1a\x0EKT + \x02\x16\0\f((\x82n~N,,\u0596+QWwp\x03\x04)\x05\brd\x0E\x14\f\0a/F\n``6\x0F\rV\x01\x01P`l\x14\x06\x1A_c\x05 + \f\x12\x01\0\x14lH\"\x04d\x03[1}P$\"\0[9~#\x11\x1A\04F\"3K&\e3d\x114\b]r\x16@%]\x13@u\uBC72\x16M\x02(\x10\u064B#0M/dl\uD472 + A\x17\u5CE0Ad]\u035D]lw6b6u\u0781$\t\x17 Mv\x7FO\x06\b( /,bx\u0108(1\x7FgyOsA\"%qP4S@\x13!dT$\x158OcJ\x048\x02.\t\x111\x0Er08\t\x12\x1C\x18H\t + 8\x1C\x1EVznt?BLAME3.1002&f,\x0EYBg)f\x1C\x01&)\x01\x06\x10\x05A~\n\" \x0E\f9\bL\t\x01-\x02L + \x03\f!\x03L\f\r@ \b0\b+\b\x12<%\x17,*iYpSJS8\e3\f+0\u03445\x15\x18SETUS\e,Bf\x8Ap\x18qST\x15F]NQQFT5\x15\xA6)T\u0406QUNTm\x15=N\x14i\x15]F\x15_m\x15\x7FkX!\x02A\x04X\x0F\x02\x0FB\0%\aE\vHZv\bax^\x17x\x10\x17\x7F)\x06}\x1AA?' + \bn}$`|O\x02j =\u01B3b8#\"cR\0\x040\x17o94v\x1192A>2A3\\J0\x10\x05,\0_wM\0\tF\x10He.\x06\a`\x15F\x0ETV\vF\x15\x01aU7`\tf\x16\x03da\x02\x0F`.\x1C\x02\x96c|.\x05 + ,\x02\u0642\x05\x19\x18RXQa\u0492]d\u028F`\x03lp^a0\x7F\x18#\x16\x0Fnt\tAP,\u014CH\f\x04Bg%\u3001:20\v\v0/,\x05\x18`\\X\x174rs\x17K,>RYa(\x8C\u030B\x06Eaea\x7F\x14X\n3#3[\v4c\x17K+}1gJ\x161w\vQ`XX\\.\f-.\f-0\"\\\x18\\\f`p2e%%a`apapappaxD0\f.\x1C0n0n\x10\u0286P\e\n\x19\\8`?RWC,9O\x13\x1D@y*]OQS\x14g))\x12\x13+A\x10aCAZ\x18c`\v1q5@\\\f^\f]s>\\=JLAME3.100\0L-\x04\bK\x01 + dFh`\tF\x06gL\x12`X\x02S\x043\x0F\t\0J0)\x02\x060\x06\x020J\x02\x06)1A\rs\rp\x050J\x06Q,,(,(=R\b\x17\n\n\x155!\nyaIRje\x1Ea\x140<\x04\n\x10\x040\v\n\x0EZ(0\x0ET\n\x10)XRa|HR)r\x16\x02\x18U\aQPXRa\x02\x18@\x14'Pa\"(\x17\x0E\x17\x0E\"/(\"\b\x1A\"aB!\0\x05\x03\n\x17\x03\b\x14\"\x16\f\vaBB8\b.\x14E(\"\x17E,Y-o-\x16\x17PTDs\x06ACPQ\x14\x13\bT`\x06\u04D8XN\e\x16dKcSRs\x04\x13R\f\x050\x14\f + \f|I/P0\x177oL\u064C\x1APiL/@\x14I^+\x16I9 \x1E\u0324_ 1\v@1Mn\r,\x13\fT\x1CjuKt\f\f`d1A\x0F\x13O\x11_,\x01q0==\x14yA\x189X=\x16>}T`\"c\u0409\t\fdDbG\u06A4`n\"\x7F8#%\x1A\x0Frq~\x06\\e\x18\x03\x06\x18\fFF.\x17b=&z,\v\x02\x17/\x17\\.1pz+\x17\x16\x05cV{,\vX\x17^.3\u063C\x17\\.1pc=\x1E.+=\e\x1CV.+=\x16\x05\u044Bbq`^\r\x180ua\x0E\r\x108@\x19\x18\x1C`\a\b\x03#\x06D#\0A!!\x18u\x0F\f03!u\f06\x0E\x17_\x15K\x04ZYYh\u06B2p\x1D%\n\x14$\x0E`\t\x03\\Q1.'$\a0\x1C\x10=z`\x17L\x1FI\x14\fEH4\b(t.L\0\0\x04\x04\x12?LAME3.1002(\a\u04B0},\x03\\\x15\aU\x18:\f\u025Al6\x18\x01y20\x18%\u9030r\x18\a)8X\x18>!\v\x15a\x15\x03\u0318g\b\x1F\x18(Q0\x03\x1D`_\u0492\a\x06ppr\a&prr2&ppV,VoE`X\u0145\x02\u0143`rg\a\x05b\x12\x0FyY`\"g\x12&rsrrg\a\x0598,\x1C\x7F`=`?\u02C36\x0Fr\u0408\f\x01E`\x06!\x14\x18\x03\x10cE\00!\x01Y\x01\n.p\x0F\x05\x1F)\ty<|%x|CNc\x1F8QN2m,c;\x13kzcW\nQsR\x197\x12C3vsZm4!\x16\x160E\x04C)Ql0D#3#4 + 1l\x1D\x12\x18\")\\K\x7Fw`&!cX\x04\tc\0p\u04C8\x03L'> + i\x19% \x14F5\x19\aYFbEc\x10\x0F\u039A\u045E\b\x1A5OLAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\0\03\x04A0\x18\x04\x043$\v\x011A\x19\x13C + 0\x17s0u1v\x15\x17`0N\x17c\x061\n\x01\vZ\x02)\x19\x18O\x04 ]\u044B4\v\x1Aq\x01\x1A\0\u0326dfXO\u0481L`FLdd\b0m)c\x13NO41\x10\ffZs\x183+\x181*qi\0\0X@1\x1Cp\x19`\u0306@\0c\x14\v+\x19-!\fc$\v\x03\x19F@ + A+\x191\n\x03\x196\v\x03%@-\x7F-`Z\x02'qX\x13\x13\\V\x15`V\x04*r\tG\bF0\x19qFL\x14G|\v\x0E/\x17M(J\0\e3eN\x051`A2\fs\x05[\x1C\u04CF[\x0E\f\u0520z\x13\rs\x0E\x0F\u034Fq\x1FO~ + 0\0\f\b\x1F\tf\x7Fy\f\x18\v\09\x04\tw\a9q\x19':$\x19 s \a1X\x0FY\x1C\x18%\u024B\x18>\x05L\x18\x12\x01L\x19\x01`$L\x0E\x04$\nd\u07CEc\u0253l`UaG\0\x7FP%\x11\x1E\x0Fn\x01B\x1CAm\0`\x05\x12\\X9\f\x12(\x05|$\nNC$K\a\apX,H\x0EJN@pX889,\x1C\x16$K\x12'#\"W + g\a'\"rX83\u03D5\u0219`Lpg\a\x06.,b.bEbb.XJ1ac\x16\x171qbX@\x1F \0\x02(\x03\x154\fR&V\x11\x0E&h%p\x18\x1C%x\t\"\x1A%A\v\\d!\x04A!r\x14!A\x10as\rr\x7F;twN,j#B\x1Ak + :\0,h\x18i-D\x1A\ae(%/\x1AC1!RI>\x1AAaK$\x7F\u03E2?\u06F5\0\0\0Tk3\x11\x10vN3JF\x19.22|\fO4\"\x10d#!\u0304c0HE + (\x10\a$\x16\x1E\x06\f\u031CV,\x13\f\f\0@i\x10,2 a\x06O\x19\x18\bc \u0261\x03\0a>ZB\x01\x03>\x06ZB + S&`\x19\x1C0ZS0c-6@\u030A\x01&\x10iM0)6c0d\b\b`\x19\x026F\0@J\u0301LAow\x7FW\u02D0A\\\x18NC\x0ED\x1CnB9j6\x02R\x15U\vXH\u028B\x05K?I-_\x01aty\"\x1D\x18i;\x03aZl\ng>bt0vg\x06ra:\uCC1F4'mC\u03CC4\"x\u0193'\f\x80\u0413\x19\x13\b:\x05\0\u0193Ov\x193H\u0230\x18\x03\x19\n\b\x16\x063\x18d0ZR\x01&h\x19\x18\u021Ca\x18d\x03\x06\x19\fP\x18dd\x0Fc\vnD + vl!\x1C\x0Ef\x02-Q\x10Zc\f| V\0\u0641\x03d\x06\r\x05&l\x16l+d\x156IZ@6\0ld\ra\x01\x020\x06\x05Yi/6\x7FNZC\u0252\u04A6i/,,2@V\rJZr\u04C1Y\x02E@\v\x06\r\\$.\x14ER\0DS,\x11H\u0238%\x16H\x16\"\u0142,Y-\x16%(Z2\x11@\x025'(&\fW\x064\x17f$SB8\u01A0\x17Gj+f\x19\x10@\x1A|c4!\x03&\x10d\0\x0FZ6\x0F\0C\0fL\x030`.a\x18\f86\x0F\f1\x17,\x0F\x1C0\xC5\x06u\x05\0f + \nf\x17X0l\x1A\x18puu04\e\a3 \x06\x1C\e\ap\0L%,0\x03P\f&1J$c\x14-Cu:s[?\x124K\x010U\x01#[M\x13E\x04?6z$h\u012C&bBeb\t\n\fR)0A\x04\n\fA3H\n\x03,\x1C\x01K\x13 + H\x03\tLP(\x04\x01\"*R\u038A\r:A\x14(m\x17,%Q\x0F.B\u0488(%4Q\x04.ArmDK\t\0iD\v3e6r&\u0464&r\v\n!2\x17 + 5\x10\x05N\v@\x158! BI\bh!\x0F\x044\x11A\x10\x11@\tPD8\\/\u02C5(\uD71C.\x17Gq<\x144iI1uZ\x13,6i0\x13\x03U5^<\x108<\u04CC4\x102\x06E40\x0E*\\;s~\x1Fl#~<\x06%+\0?\u02A3G\u02B0\u02A3$01,\x04eY(0\bD\x0FPb_\x14\u011Fi\x12\x12i\x12C(#\x1C#D#\x10#\x183\x14#(#<3\x0433H!\x01d\x11$dF\x1C\x19&\x19\x18)!\x18dQ\x19D\t\x19F!\0`\x04`\x04a\x10\x06`f!\b\x03\0d|gH\vn@\b\x17{\\!5\x1C\x0E\x19\x02\x1E + AR\b\x12\0 \x19A\x19a\x11DA\x10\x02\x0E\t\x03V\x02\f\u06A1`\x031HC%L\x1CcB\x10MR5ELTc\x10\f8!c\x10b\x11\x18Xb\x01\bf!\x129A?\0\u06B9`ecj_\u06AFo\x043,L8P@#\x180f1\bfXjP<\x19\b&X\x13WT\x11\x04qX\x15V*WF\r]_O\x1E\x1F/O\u72E5/\x18\u259Bt[\x1A/\r\x15&D.1\x14%[\x16$\x05 + D\x130L(1\0p3\x122\u06201`9$+9G086\x01@\x13\0A\x15 d\x01P\a\x04D7\0p)\0A\x06\0`pR\x1C02\f2\x19_pC(\r\x1C0p2t5C0^1(\f1\u04321}\x04,\x0E\x1DQ:YI&9b@a\0\x1Aafbcd\x02izn\0a\ta\t\x10\x19\x12\x10F\x06\0P!\n\x01\x10\x04!Q,\u0202$P*\x17N\x06\0Ah\r\n\f\n\b2\x15@hF\x06a\x18cF\x01A\x06\\((5NK\x03=\x15\x02|(\"\x12\x04\x1A,\f,\f1Lk@\x01Am\fh\u04B4\x060b\u028D+`a\x1Ac\x10\x1A\taD\x05r\0\u0403AAFr\x1A\x01\x10\fb\x03\x18\x15|\bA8\n\n\x06`\\0\\EDPEB\x04X.\x14#-K\x12*9,JAy-%%rX\u0419\x13:|\x064\x0E\v?\x10cx\0\u0434@(I].\n\x190(@2u6}6\x7F?X\x17$6\x19\x03`\b\x16ZT\v\x03a-)\x05\x166}6\x10+`\v`Zc\x05\v\0X\0\x0Fo\x02\x16\x03Zd\v`\x01X\x02\u046Bn9IXj\x01II\t\\&H\x14D@\td\x0FXe@\x03\u0705rhsM>,-s\x06\x0Fwk;0_\x01\x10`\0J\x048\"\x12pE\x04<\x11\x01\x10\x10C\x1A\bpD\"\x11\x7FD@'\fMh\f&\x06dd$\x1Af( + f2(#\x7F\x165\x0F\x13K0A:6O2\x11Z2}5\x188a[2>Ev132\x102\x143\u011E3T20dO2\x192\x1432|O3P\x18\x03<\0@\x12\x10XdPl\u0182\x14\u01835h\b4\x19>Of]\"vacHffbxd(d\x064\x15(\x14\x04N\x02\x1Ay\x18\nVf\x06f1@1\f\x01\fd\bdXi8DhN3!&\u0259S\x17Fd\x042+\x19M\v\x02\u0259\x16\u0306\vNc\x06@c\x14\v\x7Fl\x19\u03B0\u025Cm\u06E5iZVl%i\x13K\u047A\"(\x18#9]\baI\n\x15%d\u034B\b\x06\x15\u02A0# + \b!\x19\0\x1F5\x06l\e\0m\"\x03P(`\0\ee\fl\fp8\x03\x1C!\x11\x1A@s\fxFC\x06H\x7FbQ'DI\f\x7F'O\x18u0,1B\\1\x1El0S\x04z1\x021*A{1\x13M1yI2#\t2f20\x042PF29\\1*C\x110!1\u02021*\x030@<00\02\u0128+\x054\x06\x03\x14\x88\0@\tp{\b\b\b\f\x03k\b\tp\n\x050\xD8\v\r\u0129\r\0@\u01B87Px\u0243\x10\u01A5BdDx'T.7W>7T4{\x11:\"/53j4|3k+%&\f\x1A\x1A\x1EL=\x04Lu\f<\x1A\x031\f^&Lj\x04Lk\x04\f=\x04\fk1\f=S\f\x0FK\x01`k0d\x0F*b>\f8 + wtT!\u074D\x18\x0Ejs`\x01Q\x18<0@\x10,\x02\x06\be@\0D\0D\0DDQD\x10+\x04\f=\x1A\x03\x0FC\x04\x01\x03\x04\x01\x03\x04C1C1\x0F#\x04LC\x1A\x04\x03\x0F\fS\x0FA\x03\x0FA\x03SC1A\x03\x04A\x12f+Lf(\"cY0g`##\bF\x10@\0d\0\x10\r\x121\x01yfcAQ{Qhc\u0645Yq\e\u047D\x15yq`^Wek\u05C3\x17a\x12\0 + d\b\x04^\b\x04W\u05EF!\v1x\x1A\x1AW\x04}\\\x11^\x11^\f]Ep\x1A@k\x18\x18\f_]pu\u0389\x0E1T\x03\a\x1DT$3\n0R\x147\x02\u03280)@\u04A6C\x14\x1An5\x03O\0F5\x18,,\x03g-2QWj8(5\"\x03\x16\x17\x0F\x02\v2\r\x10\x10(\x13@\\\x05\a\x15\x1C.iI\x13&9m\r\tt(&\x16PpJHpX\x06*\x0E\x02aM\x0F&1\u5319 + pLx\n=*P0\n&X4\x03wB2\u0765n\\\u063B\t]-?$\"\0b\u04A9\x17S\x11 \vF9w\x03\0+AT5\x13@\f!y(0\0e\0\x02\x14\x0F\x14#\x1CXhj\x1D`(Ds\u01CE\x1D!0O\x1D\x1FV=\x18c\x15D\u06A3\x1EsU\U000D06B3}\u06A3j'\x121{\x1Cby_\x17\\b1`g9\x13\"\x18\rrb\rz5\u05EEW\x03\x17\x7F\x18WW+\u05EE\x06/\"w\x15\rz\x185\u05EE@\08>r\u065Cm\x1A&gv\t\x03#^BI\u6DC0\x1D-\0c8L\x141|\x14@\x0631De\xC9\r + i@\x10Yd!?cF3tPss\x0E!\x11\x17.dW\x17\x1EAQhCZdJr\n\x10Q\t>&\x18U`\x14\eh\x0F\"\x06\fnP&QBO\x01E.V\x17ab\"z0ac\n$kR@3K\x1D\x19)1 + \x1E\0\x1A3[S\x1CFeL\u0360dfd\0J\x0F!\x19\vj$m,U'\x10rQ\0F\t\x15\x05 \0\b\x06\x12\x01\x02e\x02\x01\x1C\\\x17D\x05\x1AH\\\bh\x13.\x1C.\x7FR\\R,Jdi)%$.|l\x062s2dz=>z&tc\x1A\u041EXN1)\x19\x18!i\fd\u02340Zp\u07C5\f\0\f8\x02`07\\0/au\x18|.\x11ODPE-\x7F\u5BD6Kb\x12\rG\x12ln#i\x069\x1A,($3bT\u0309\x13<\fT0b\x1C`3;\frF2\t\u02E0c\x14\0\x10\x03\x1E2\u0665#\"\"I*\0b\x03\x10\x05\x02@&8/0\x18G344.\x0FpvZT%\x19\x05Y\x03*\x1A\\W\x1D]\x01\x12\x02\x02NIfQbA\f\b\x06\x116c\v)%B\x11\"hVK*KY\v\u02A5/%h\v\x1C\x10\x14|VN\0\x11l{l\\\x04\x04r\b.\u0717$D\b(\x17)X\x19f)@,%\f\x11\x19\x15\x144_o\x06?0\b8\x14\x04p + @@P~\x02llF\\AX\x063&11\x0E#&!c1b\x0E#\x063c1.3&1063. c+q\x1FV3\x15V2\x11E~#q80G\x01\x19an3\x17q\x04q\x04q\b\x06b\x03\u01C8\x19 + 8\x1E<`^\a\x17\x11\x19\x11\u01C31\x7F\x06Dbf,\x19 \0\x01\x198Hc(8XH\x04$\x1ATfeF>\x10\u02CCDY\r\x02\x02\x02\x01@I'\x02\x1A\x17)\a\u0546W\x10$y/\\\x10Q\x15\x19Z\xA2f%/bs1D\x1C\x18\u024A/\u076B?vn^$$-j\u07ACkkVj\x0ECK6\u0213\u0162\aFh\u0458\x19\as\x03#\x19\x0EFhHFhf(\u0410=3\x0F0P\x0E\x06ha#$$4f&H\xE3$HF\"b\x19#\x14H\u0411\a(\x19!\x19\u03184)C14R\fP\u0325\x0EL\x19#1FQJ$hRbLL&P\u0410L\x19#1\e&=0\u062D\x0EL;$F@D\b4M3@L\u0660L\x06i6Mfi7&g\ti\x06hrl4IH@&\x7F&M.M\x1AIg)D@\x02\x06\u079AL~L?i6hsI2LG&w&?L\r\x1E\u0661fdM&+yi)\u0462he4M&S&a2\u6261o_S_khto)Mt\u0262M&S\x1D5\x06o\0\x06\u0487 + \u0622P\x06\u0620\r&\bFE\x19l\r%\x12\"z\u858F%tk$z_\x04\x05\x0FP\x18\u01E98XgOHS\x198U,\u0289}\x11!QMOqJ>I~,DSNn\x1D\u015A\u0451S\u0193\e\u0509<\u03E7'%<\x7F$%gy'|U1jg}\nhbY|RI4/NjW\x16]\x05\x7FrB`?\x04L5_II!r\x1A4M\x1F$\u0264i4.Li3sKd\x1F\0\x02g.{LaAN\x16f^\u0274RLw)a2h]0i&)MM\x04e7d4SF4iisH4\u0260h`\f\u027EM&\x7FkC4h\nc\x10M\x7F\u9398MLM\x14\u64644)2&a2LG\x13i0h\x13)I0i\x0E\x1AVEP\05v*`^*El\x13T\x13|^5\x13_\u0633\x13bv}~N>O>\0Z\uB4D3>\x0FrNN\t1|>>I9>:>}ru9'_N\x7F>:>\u03E2u>O|NBR|s\uC704>\x7F\x1F\\:>\x0F}\u03C0\x16:>\t|\0NI|G'<>\u03EE|~|\x13>\tN\u03E0pdF\a_\x19g\x19O\x1DDdf + \"B0G\b\x10\x11!\x12\x11?\b\x12\x11\x01\x11Fq\x13\b\b\x12\x117\a(9\x01\x0EQ\x0Eaca6hIL:o_d\x1F\aN\u03E2tNI9>Ot|`\vAN\x0F(\x7F\x0F\x03\n\\\n@\x05\xC0\u01C3 + p:\f\x10\x06\x01`:\x01P\v\x03!t\x02\x16\x06@(\x1D\01\x0EAi\x03@`\x7FapB\x1D4A0\x1A\f\x05\x01PT\x18\rT\x14\x05>\x1C\x03\"\x1Fo0\0\x1E\x1A\x1AG\x111il4)2L}4L&S\x06h4M#E24\"\fh&\f7\bp\x19^\x1C + pL\x19X7\bp(\r\x1C?\x7F!\bQ~~\x1F\x14\\\x1FI\n.Qs\x0F!E?HULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\r\0\x01\0\b\x01\x10\0<\0\x01\0 + \x02\0\x03\0\0 \x04\0@\0`\0\x04\t 3\x01\x10SQL\u02CCL\f\x15UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUd\0\x0F\0\0i\0\0\0\b\0\0\r + \0\0\x01\0\0\x01\0\0\0 \0\04\0\0\x04LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\r\n--281d5bcf6d8efdfa0b22944d901b8947--\r\n" + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + authorization: + - DUMMY + connection: + - keep-alive + content-length: + - '43739' + content-type: + - multipart/form-data; boundary=281d5bcf6d8efdfa0b22944d901b8947 + cookie: + - _cfuvid=F.s1D.S47AtDJ3Y5z7xblGNKM6V4GjH6vs_GCsbeihU-1737481550176-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.57.1 + x-stainless-arch: + - x64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - Linux + x-stainless-package-version: + - 1.57.1 + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.8 + method: POST + uri: https://api.openai.com/v1/audio/transcriptions + response: + body: + string: '{"text":"Hello there"}' + headers: + CF-RAY: + - 90dd1533382d3efa-BOG + Connection: + - keep-alive + Content-Length: + - '22' + Content-Type: + - application/json + Date: + - Thu, 06 Feb 2025 18:07:59 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=ki4JWWUuE8TFJoXTUPMG69VDUGs5FYpRSrmC39aQWBQ-1738865279-1.0.1.1-1_ii4Pj6uK5r_RMO230s.h3F7ap9e.qaO4N876V3ix0KwYCrtcIpphvmpeAi9RTqdp83LwdGIcCMvPuUnu0QFA; + path=/; expires=Thu, 06-Feb-25 18:37:59 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=UxuZW2FK46t2S6h7JkBCJLuTOjpvxiMgZRunAUeSHKY-1738865279552-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - monadical-5pahzt + openai-processing-ms: + - '1032' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + via: + - envoy-router-849d967b58-tkxvt + x-envoy-upstream-service-time: + - '825' + x-ratelimit-limit-requests: + - '7500' + x-ratelimit-remaining-requests: + - '7499' + x-ratelimit-reset-requests: + - 8ms + x-request-id: + - req_32abfd32f519b7d94cc53127435357d3 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_litellm_stream_chat_default.yaml b/tests/cassettes/test_litellm_stream_chat_default.yaml new file mode 100644 index 0000000..736e046 --- /dev/null +++ b/tests/cassettes/test_litellm_stream_chat_default.yaml @@ -0,0 +1,158 @@ +interactions: +- request: + body: '{"model": "command-r", "chat_history": [], "stream": true, "message": "Hello + World!"}' + headers: + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '85' + Request-Source: + - unspecified:litellm + User-Agent: + - python-requests/2.32.3 + accept: + - application/json + authorization: + - DUMMY + content-type: + - application/json + method: POST + uri: https://api.cohere.ai/v1/chat + response: + body: + string: "{\"is_finished\":false,\"event_type\":\"stream-start\",\"generation_id\":\"46af7532-c83b-41d5-bedf-ea75623ceade\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"Hello\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + How\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'s\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + it\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + going\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"?\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + I\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + hope\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + you\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'re\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + having\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + a\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + fantastic\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + day\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + \U0001F60A\"}\n{\"is_finished\":true,\"event_type\":\"stream-end\",\"response\":{\"response_id\":\"870646d3-4baf-4f00-964e-7f057cf21689\",\"text\":\"Hello! + How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"46af7532-c83b-41d5-bedf-ea75623ceade\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello + World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope + you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}},\"finish_reason\":\"COMPLETE\"}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Transfer-Encoding: + - chunked + Via: + - 1.1 google + access-control-expose-headers: + - X-Debug-Trace-ID + cache-control: + - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 + content-type: + - application/stream+json + date: + - Thu, 06 Feb 2025 18:07:26 GMT + expires: + - Thu, 01 Jan 1970 00:00:00 UTC + pragma: + - no-cache + server: + - envoy + vary: + - Origin + x-accel-expires: + - '0' + x-debug-trace-id: + - 1f264c0a7700545c5e05821151fbc802 + x-endpoint-monthly-call-limit: + - '1000' + x-envoy-upstream-service-time: + - '61' + x-trial-endpoint-call-limit: + - '40' + x-trial-endpoint-call-remaining: + - '37' + status: + code: 200 + message: OK +- request: + body: '{"model": "command-r", "chat_history": [], "stream": true, "message": "Hello + World!"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + authorization: + - DUMMY + connection: + - keep-alive + content-length: + - '85' + content-type: + - application/json + host: + - api.cohere.ai + request-source: + - unspecified:litellm + user-agent: + - litellm/1.53.3 + method: POST + uri: https://api.cohere.ai/v1/chat + response: + body: + string: "{\"is_finished\":false,\"event_type\":\"stream-start\",\"generation_id\":\"8612d227-abc9-4347-864e-95fc3cb2cb94\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"Hello\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + How\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'s\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + it\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + going\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"?\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + I\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + hope\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + you\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"'re\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + having\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + a\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + fantastic\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + day\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\"!\"}\n{\"is_finished\":false,\"event_type\":\"text-generation\",\"text\":\" + \U0001F60A\"}\n{\"is_finished\":true,\"event_type\":\"stream-end\",\"response\":{\"response_id\":\"72e71b60-80d2-46a4-a77d-cdfbd68fc121\",\"text\":\"Hello! + How's it going? I hope you're having a fantastic day! \U0001F60A\",\"generation_id\":\"8612d227-abc9-4347-864e-95fc3cb2cb94\",\"chat_history\":[{\"role\":\"USER\",\"message\":\"Hello + World!\"},{\"role\":\"CHATBOT\",\"message\":\"Hello! How's it going? I hope + you're having a fantastic day! \U0001F60A\"}],\"finish_reason\":\"COMPLETE\",\"meta\":{\"api_version\":{\"version\":\"1\"},\"billed_units\":{\"input_tokens\":3,\"output_tokens\":18},\"tokens\":{\"input_tokens\":69,\"output_tokens\":18}}},\"finish_reason\":\"COMPLETE\"}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Transfer-Encoding: + - chunked + Via: + - 1.1 google + access-control-expose-headers: + - X-Debug-Trace-ID + cache-control: + - no-cache, no-store, no-transform, must-revalidate, private, max-age=0 + content-type: + - application/stream+json + date: + - Thu, 06 Feb 2025 18:07:27 GMT + expires: + - Thu, 01 Jan 1970 00:00:00 UTC + pragma: + - no-cache + server: + - envoy + vary: + - Origin + x-accel-expires: + - '0' + x-debug-trace-id: + - 0beb523988b4f496b837efa79b447000 + x-endpoint-monthly-call-limit: + - '1000' + x-envoy-upstream-service-time: + - '84' + x-trial-endpoint-call-limit: + - '40' + x-trial-endpoint-call-remaining: + - '36' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_litellm_text_to_speech_default.yaml b/tests/cassettes/test_litellm_text_to_speech_default.yaml new file mode 100644 index 0000000..c4feca1 --- /dev/null +++ b/tests/cassettes/test_litellm_text_to_speech_default.yaml @@ -0,0 +1,1249 @@ +interactions: +- request: + body: '{"input": "Hello, this is a test of the speech synthesis system.", "model": + "tts-1", "voice": "alloy"}' + headers: + accept: + - application/octet-stream + accept-encoding: + - gzip, deflate + authorization: + - DUMMY + connection: + - keep-alive + content-length: + - '102' + content-type: + - application/json + cookie: + - _cfuvid=M_vZxw1d46Tbe4NsYGT0O5DWOhgoGdGTlg07y9NIChE-1737481183396-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.57.1 + x-stainless-arch: + - x64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - Linux + x-stainless-package-version: + - 1.57.1 + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.8 + method: POST + uri: https://api.openai.com/v1/audio/speech + response: + body: + string: !!binary | + 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 + iqmpkypuqBWTMW2MZnC0Y0Q8OIFUWz0Go0ly1piRDXgqEQeHSIo2POIOcVN5VMEC//PkxJ143Dnc + AZvQADZgTSnAik9ogBiQ8QizDDTNjWVqRVWBgERkCYkAShhJJsOBwlJzWQtdOlfMvoM3rMuQMMJA + gIx44LhRIQDRoqCC5VtggOXxcFVUQAFiuQpN0TnJzCiAIQMIBMMEFmpl2QCPgUwEEhCREJQSAFok + RgYDYC4rR1H1FwABSGZ+g86koBAN/FVWuwhfKCQHB2TCokwxQ0wMRhmlpkAIuAlJklZVSGTQjJUe + yGtBGtlGLelwTAhE3G5JsvujypmmYXCTwIQcoIAKm6UjWUjWTL9akFQBKFRgVtsl4UTXAViZEW+N + 0MNUfMSQEZcwRUyAYzIExpAwQ8KBGFAQmIgQEAoJhCNVlaSW/LXDokKBC+TTFro/P6hkhagBaW26 + ZcuYwpCD03E/0iC3K/q75omryjrK4Pyb1BElOvFaarEtXidt2GxL/UATpdpl1RGTPJ2WufNxnlUZ + tRKYamG7yR09YdPLGkDphZ8aqrGjlQCBzIDU0BFNAOzMCcHCQoAmDAqtAJCDDw4FCS+zAAkskXiL + vIBkiljLDKBJjO7DKtoEDMYkyBS6L6F7i4JZEsihq3AEjGewcMhywCwoJIMsJY5iImsuZwbDAKMW + RR9fQEjGegZ4yY5mPnNO//PkxIx0hDl8CdvIAA5YLDmciZg5b2HFzKmWGS9RVSJXTRPsw5QJTaAE + EwBAAwSP0XXKu1TFHpB5vkbTADBQKwBjqG20BjVEjFKM9I0zgEkxMAFmcmBhmvgwUzEzWXNIdQQy + 2jhiMwFVAxSjNOM8oDFNfBAZkFlml7R1TEu6W1QdUFb1NEwAy6KjRilGaMn2Yi5vPhBwgDMgcDCp + 0sNLmmMeaB6ogYGYgK3UbgEEhs2UtSXeRWSKXVL3BXa4sMu070fUxRVb0QgGasbLQCNawhKLxJhQ + ppKJqAVY0HsBLUmACW9aQBRjLMLQu4XuMMYyRggJD0znTghASybZiEmUWYwaSKIRkoGqkGAo7GOc + aaRolIXAhE5Mz21AUwUNNZk1C0DU9jBEMcYxQFNY4u5xptyX5jzjN2QlLWZ6XdTVGQDRcOOAINEI + hmmGSEjk9Zf0siWZTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV + VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV + VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV + headers: + CF-RAY: + - 90dd15455ec2f7a0-BOG + Connection: + - keep-alive + Content-Type: + - audio/mpeg + Date: + - Thu, 06 Feb 2025 18:08:02 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=XRY3TY_EC.nzlFDxMpoaSHajtoC8ATlU6g04NAJ7v68-1738865282-1.0.1.1-GA73DyfL8IVePlcB8y.fg4Y0Jew3oQ80UC5_OPJWeSBx8G2ZFgvd.3EcIqP_TFQSmvgCp_7Dan_5PZKqpEeuUw; + path=/; expires=Thu, 06-Feb-25 18:38:02 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=6RhIhU1Chx3xuuKTygU_KSeLfc4R23M_3.BxQEfqkTE-1738865282784-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - monadical-5pahzt + openai-processing-ms: + - '1638' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + via: + - envoy-router-75d4f46977-gspxk + x-envoy-upstream-service-time: + - '1573' + x-ratelimit-limit-requests: + - '7500' + x-ratelimit-remaining-requests: + - '7499' + x-ratelimit-reset-requests: + - 8ms + x-request-id: + - req_c1dd76f6be42726a7bd1af5ef3745e1b + status: + code: 200 + message: OK +version: 1 diff --git a/tests/test_litellm_tracer_use_default.py b/tests/test_litellm_tracer_use_default.py index cf93580..3d879fd 100644 --- a/tests/test_litellm_tracer_use_default.py +++ b/tests/test_litellm_tracer_use_default.py @@ -9,7 +9,7 @@ # @pytest.mark.vcr -def test_litellm_chat(tracer_with_sync_init): +def test_litellm_chat_default(tracer_with_sync_init): response = litellm.completion( model="command-r", messages=[{"role": "user", "content": "Hello World!"}], @@ -32,7 +32,7 @@ def test_litellm_chat(tracer_with_sync_init): @pytest.mark.vcr @pytest.mark.asyncio -async def test_litellm_async_chat(tracer_with_sync_init): +async def test_litellm_async_chat_default(tracer_with_sync_init): response = await litellm.acompletion( messages=[{"role": "user", "content": "Hello World!"}], model="command-r", @@ -53,7 +53,7 @@ async def test_litellm_async_chat(tracer_with_sync_init): @pytest.mark.vcr -def test_litellm_stream_chat(tracer_with_sync_init): +def test_litellm_stream_chat_default(tracer_with_sync_init): stream = litellm.completion( messages=[{"role": "user", "content": "Hello World!"}], model="command-r", @@ -75,7 +75,7 @@ def test_litellm_stream_chat(tracer_with_sync_init): @pytest.mark.vcr @pytest.mark.asyncio -async def test_litellm_async_stream_chat(tracer_with_sync_init): +async def test_litellm_async_stream_chat_default(tracer_with_sync_init): stream = await litellm.acompletion( messages=[{"role": "user", "content": "Hello World!"}], model="command-r", @@ -96,7 +96,7 @@ async def test_litellm_async_stream_chat(tracer_with_sync_init): @pytest.mark.vcr -def test_litellm_image_generation(tracer_with_sync_init): +def test_litellm_image_generation_default(tracer_with_sync_init): response = litellm.image_generation( prompt="A serene landscape with mountains and a lake", model="dall-e-3", @@ -121,7 +121,7 @@ def test_litellm_image_generation(tracer_with_sync_init): @pytest.mark.vcr @pytest.mark.asyncio -async def test_litellm_async_image_generation(tracer_with_sync_init): +async def test_litellm_async_image_generation_default(tracer_with_sync_init): response = await litellm.aimage_generation( prompt="A futuristic cityscape at night", model="dall-e-3", @@ -145,7 +145,7 @@ async def test_litellm_async_image_generation(tracer_with_sync_init): @pytest.mark.vcr -def test_litellm_speech_to_text(tracer_with_sync_init): +def test_litellm_speech_to_text_default(tracer_with_sync_init): datadir = Path(__file__).parent / "data" hello_there_audio = open((datadir / "hello_there.mp3").as_posix(), "rb") @@ -176,7 +176,7 @@ def test_litellm_speech_to_text(tracer_with_sync_init): @pytest.mark.vcr @pytest.mark.asyncio -async def test_litellm_async_speech_to_text(tracer_with_sync_init): +async def test_litellm_async_speech_to_text_default(tracer_with_sync_init): datadir = Path(__file__).parent / "data" hello_there_audio = open((datadir / "hello_there.mp3").as_posix(), "rb") response = await litellm.atranscription( @@ -204,7 +204,7 @@ async def test_litellm_async_speech_to_text(tracer_with_sync_init): @pytest.mark.vcr -def test_litellm_text_to_speech(tracer_with_sync_init): +def test_litellm_text_to_speech_default(tracer_with_sync_init): response = litellm.speech( model="tts-1", input="Hello, this is a test of the speech synthesis system.", @@ -233,7 +233,7 @@ def test_litellm_text_to_speech(tracer_with_sync_init): @pytest.mark.vcr @pytest.mark.asyncio -async def test_litellm_async_text_to_speech(tracer_with_sync_init): +async def test_litellm_async_text_to_speech_default(tracer_with_sync_init): response = await litellm.aspeech( model="tts-1", input="Hello, this is a test of the speech synthesis system.", From 06ae12bc894b53bc38265f3cf3d6af27d960428c Mon Sep 17 00:00:00 2001 From: Kevin Guevara Date: Thu, 6 Feb 2025 13:19:04 -0500 Subject: [PATCH 4/5] fix: remove print --- examples/anthropic/anthropic-chat.py | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/anthropic/anthropic-chat.py b/examples/anthropic/anthropic-chat.py index c3f15f9..1fa0e98 100644 --- a/examples/anthropic/anthropic-chat.py +++ b/examples/anthropic/anthropic-chat.py @@ -13,7 +13,6 @@ def main(model: str, message: str, max_tokens: int, api_key: str | None = None): messages=[{"role": "user", "content": message}], max_tokens=max_tokens, ) - print(response.scope3ai) print(response.content[0].text.strip()) impact = tracer.impact() From 44e65dc27b6b1445e713ae9d80093b256fc70a66 Mon Sep 17 00:00:00 2001 From: Kevin Guevara Date: Thu, 6 Feb 2025 13:22:55 -0500 Subject: [PATCH 5/5] fix: remove print --- examples/litellm/litellm-aimage-generation.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/examples/litellm/litellm-aimage-generation.py b/examples/litellm/litellm-aimage-generation.py index 195fbbb..ce0b27a 100644 --- a/examples/litellm/litellm-aimage-generation.py +++ b/examples/litellm/litellm-aimage-generation.py @@ -1,16 +1,12 @@ import asyncio -from os import getenv from litellm import aimage_generation from scope3ai import Scope3AI -import os async def main(model: str, prompt: str, size: str, api_key: str | None = None): scope3 = Scope3AI.init() - print(os.environ) - print(getenv("SCOPE3AI_API_KEY"), "aca") with scope3.trace() as tracer: response = await aimage_generation( model=model, prompt=prompt, size=size, api_key=api_key