mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-25 18:54:30 +00:00
174 lines
5.2 KiB
Python
174 lines
5.2 KiB
Python
import sys, os, time
|
|
import traceback, asyncio
|
|
import pytest
|
|
|
|
sys.path.insert(
|
|
0, os.path.abspath("../..")
|
|
) # Adds the parent directory to the system path
|
|
from litellm import completion, stream_chunk_builder
|
|
import litellm
|
|
import os, dotenv
|
|
from openai import OpenAI
|
|
import pytest
|
|
|
|
dotenv.load_dotenv()
|
|
|
|
user_message = "What is the current weather in Boston?"
|
|
messages = [{"content": user_message, "role": "user"}]
|
|
|
|
function_schema = {
|
|
"name": "get_weather",
|
|
"description": "gets the current weather",
|
|
"parameters": {
|
|
"type": "object",
|
|
"properties": {
|
|
"location": {
|
|
"type": "string",
|
|
"description": "The city and state, e.g. San Francisco, CA",
|
|
},
|
|
},
|
|
"required": ["location"],
|
|
},
|
|
}
|
|
|
|
|
|
tools_schema = [
|
|
{
|
|
"type": "function",
|
|
"function": {
|
|
"name": "get_current_weather",
|
|
"description": "Get the current weather in a given location",
|
|
"parameters": {
|
|
"type": "object",
|
|
"properties": {
|
|
"location": {
|
|
"type": "string",
|
|
"description": "The city and state, e.g. San Francisco, CA",
|
|
},
|
|
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
|
|
},
|
|
"required": ["location"],
|
|
},
|
|
},
|
|
}
|
|
]
|
|
|
|
# def test_stream_chunk_builder_tools():
|
|
# try:
|
|
# litellm.set_verbose = False
|
|
# response = client.chat.completions.create(
|
|
# model="gpt-3.5-turbo",
|
|
# messages=messages,
|
|
# tools=tools_schema,
|
|
# # stream=True,
|
|
# # complete_response=True # runs stream_chunk_builder under-the-hood
|
|
# )
|
|
|
|
# print(f"response: {response}")
|
|
# print(f"response usage: {response.usage}")
|
|
# except Exception as e:
|
|
# pytest.fail(f"An exception occurred - {str(e)}")
|
|
|
|
# test_stream_chunk_builder_tools()
|
|
|
|
|
|
def test_stream_chunk_builder_litellm_function_call():
|
|
try:
|
|
litellm.set_verbose = False
|
|
response = litellm.completion(
|
|
model="gpt-3.5-turbo",
|
|
messages=messages,
|
|
functions=[function_schema],
|
|
# stream=True,
|
|
# complete_response=True # runs stream_chunk_builder under-the-hood
|
|
)
|
|
|
|
print(f"response: {response}")
|
|
except Exception as e:
|
|
pytest.fail(f"An exception occurred - {str(e)}")
|
|
|
|
|
|
# test_stream_chunk_builder_litellm_function_call()
|
|
|
|
|
|
def test_stream_chunk_builder_litellm_tool_call():
|
|
try:
|
|
litellm.set_verbose = False
|
|
response = litellm.completion(
|
|
model="azure/gpt-4-nov-release",
|
|
messages=messages,
|
|
tools=tools_schema,
|
|
stream=True,
|
|
api_key="os.environ/AZURE_FRANCE_API_KEY",
|
|
api_base="https://openai-france-1234.openai.azure.com",
|
|
complete_response=True,
|
|
)
|
|
|
|
print(f"complete response: {response}")
|
|
print(f"complete response usage: {response.usage}")
|
|
assert response.system_fingerprint is not None
|
|
except Exception as e:
|
|
pytest.fail(f"An exception occurred - {str(e)}")
|
|
|
|
|
|
# test_stream_chunk_builder_litellm_tool_call()
|
|
|
|
|
|
def test_stream_chunk_builder_litellm_tool_call_regular_message():
|
|
try:
|
|
messages = [{"role": "user", "content": "Hey, how's it going?"}]
|
|
litellm.set_verbose = False
|
|
response = litellm.completion(
|
|
model="azure/gpt-4-nov-release",
|
|
messages=messages,
|
|
tools=tools_schema,
|
|
stream=True,
|
|
api_key="os.environ/AZURE_FRANCE_API_KEY",
|
|
api_base="https://openai-france-1234.openai.azure.com",
|
|
complete_response=True,
|
|
)
|
|
|
|
print(f"complete response: {response}")
|
|
print(f"complete response usage: {response.usage}")
|
|
assert response.system_fingerprint is not None
|
|
except Exception as e:
|
|
pytest.fail(f"An exception occurred - {str(e)}")
|
|
|
|
|
|
# test_stream_chunk_builder_litellm_tool_call_regular_message()
|
|
|
|
|
|
def test_stream_chunk_builder_count_prompt_tokens():
|
|
# test the prompt tokens for streamed responses == prompt tokens for non-streamed
|
|
# test the model for streamed responses == model for non-streamed
|
|
try:
|
|
messages = [{"role": "user", "content": "Hey, how's it going?"}]
|
|
litellm.set_verbose = False
|
|
response = litellm.completion(
|
|
model="azure/chatgpt-v-2",
|
|
messages=messages,
|
|
stream=True,
|
|
max_tokens=1,
|
|
complete_response=True,
|
|
)
|
|
print(f"Stream Assembled response: {response}")
|
|
|
|
stream_prompt_tokens = response.usage.prompt_tokens
|
|
stream_model = response.model
|
|
|
|
response = litellm.completion(
|
|
model="azure/chatgpt-v-2", messages=messages, max_tokens=1
|
|
)
|
|
print(f"\nNon Stream Response: {response}")
|
|
|
|
non_stream_prompt_tokens = response.usage.prompt_tokens
|
|
non_stream_model = response.model
|
|
|
|
assert stream_model == non_stream_model
|
|
assert stream_prompt_tokens == non_stream_prompt_tokens
|
|
|
|
except Exception as e:
|
|
pytest.fail(f"An exception occurred - {str(e)}")
|
|
|
|
|
|
# test_stream_chunk_builder_count_prompt_tokens()
|