Spaces:
Configuration error
Configuration error
import sys | |
import os | |
import traceback | |
from dotenv import load_dotenv | |
from fastapi import Request | |
from datetime import datetime | |
sys.path.insert( | |
0, os.path.abspath("../..") | |
) # Adds the parent directory to the system path | |
from litellm import Router | |
import pytest | |
import litellm | |
from unittest.mock import patch, MagicMock, AsyncMock | |
import json | |
from io import BytesIO | |
from typing import Dict, List | |
from litellm.router_utils.batch_utils import ( | |
replace_model_in_jsonl, | |
_get_router_metadata_variable_name, | |
) | |
# Fixtures | |
def sample_jsonl_data() -> List[Dict]: | |
"""Fixture providing sample JSONL data""" | |
return [ | |
{ | |
"body": { | |
"model": "gpt-3.5-turbo", | |
"messages": [{"role": "user", "content": "Hello"}], | |
} | |
}, | |
{"body": {"model": "gpt-4", "messages": [{"role": "user", "content": "Hi"}]}}, | |
] | |
def sample_jsonl_bytes(sample_jsonl_data) -> bytes: | |
"""Fixture providing sample JSONL as bytes""" | |
jsonl_str = "\n".join(json.dumps(line) for line in sample_jsonl_data) | |
return jsonl_str.encode("utf-8") | |
def sample_file_like(sample_jsonl_bytes): | |
"""Fixture providing a file-like object""" | |
return BytesIO(sample_jsonl_bytes) | |
# Test cases | |
def test_bytes_input(sample_jsonl_bytes): | |
"""Test with bytes input""" | |
new_model = "claude-3" | |
result = replace_model_in_jsonl(sample_jsonl_bytes, new_model) | |
assert result is not None | |
def test_tuple_input(sample_jsonl_bytes): | |
"""Test with tuple input""" | |
new_model = "claude-3" | |
test_tuple = ("test.jsonl", sample_jsonl_bytes, "application/json") | |
result = replace_model_in_jsonl(test_tuple, new_model) | |
assert result is not None | |
def test_file_like_object(sample_file_like): | |
"""Test with file-like object input""" | |
new_model = "claude-3" | |
result = replace_model_in_jsonl(sample_file_like, new_model) | |
assert result is not None | |
def test_router_metadata_variable_name(): | |
"""Test that the variable name is correct""" | |
assert _get_router_metadata_variable_name(function_name="completion") == "metadata" | |
assert ( | |
_get_router_metadata_variable_name(function_name="batch") == "litellm_metadata" | |
) | |
assert ( | |
_get_router_metadata_variable_name(function_name="acreate_file") == "litellm_metadata" | |
) | |
assert ( | |
_get_router_metadata_variable_name(function_name="aget_file") == "litellm_metadata" | |
) | |
def test_non_json_input(): | |
"""Test that replace_model_in_jsonl returns original content for non-JSON input""" | |
from litellm.router_utils.batch_utils import replace_model_in_jsonl | |
# Test with non-JSON string | |
non_json_str = "This is not a JSON string" | |
result = replace_model_in_jsonl(non_json_str, "gpt-4") | |
assert result == non_json_str | |
# Test with non-JSON bytes | |
non_json_bytes = b"This is not JSON bytes" | |
result = replace_model_in_jsonl(non_json_bytes, "gpt-4") | |
assert result == non_json_bytes | |
# Test with non-JSON file-like object | |
from io import BytesIO | |
non_json_file = BytesIO(b"This is not JSON in a file") | |
result = replace_model_in_jsonl(non_json_file, "gpt-4") | |
assert result == non_json_file | |
def test_should_replace_model_in_jsonl(): | |
"""Test that should_replace_model_in_jsonl returns the correct value""" | |
from litellm.router_utils.batch_utils import should_replace_model_in_jsonl | |
assert should_replace_model_in_jsonl(purpose="batch") == True | |
assert should_replace_model_in_jsonl(purpose="test") == False | |
assert should_replace_model_in_jsonl(purpose="user_data") == False | |