doctrinops / libs /kotaemon /tests /test_llms_chat_models.py
guyeux's picture
Upload folder using huggingface_hub
2e1d3df verified
Raw
History Blame Contribute Delete
2.91 kB
from pathlib import Path
from unittest.mock import patch
import pytest
from kotaemon.base.schema import AIMessage, HumanMessage, LLMInterface, SystemMessage
from kotaemon.llms import AzureChatOpenAI, LlamaCppChat
try:
pass
except ImportError:
pass
from openai.types.chat.chat_completion import ChatCompletion
from .conftest import skip_llama_cpp_not_installed
_openai_chat_completion_response = ChatCompletion.parse_obj(
{
"id": "chatcmpl-7qyuw6Q1CFCpcKsMdFkmUPUa7JP2x",
"object": "chat.completion",
"created": 1692338378,
"model": "gpt-35-turbo",
"system_fingerprint": None,
"choices": [
{
"index": 0,
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": "Hello! How can I assist you today?",
"function_call": None,
"tool_calls": None,
},
"logprobs": None,
}
],
"usage": {"completion_tokens": 9, "prompt_tokens": 10, "total_tokens": 19},
}
)
@patch(
"openai.resources.chat.completions.Completions.create",
side_effect=lambda *args, **kwargs: _openai_chat_completion_response,
)
def test_azureopenai_model(openai_completion):
model = AzureChatOpenAI(
api_key="dummy",
api_version="2024-05-01-preview",
azure_deployment="gpt-4o",
azure_endpoint="https://test.openai.azure.com/",
)
# test for str input - stream mode
output = model("hello world")
assert isinstance(
output, LLMInterface
), "Output for single text is not LLMInterface"
openai_completion.assert_called()
# test for list[message] input - stream mode
messages = [
SystemMessage(content="You are a philosohper"),
HumanMessage(content="What is the meaning of life"),
AIMessage(content="42"),
HumanMessage(content="What is the meaning of 42"),
]
output = model(messages)
assert isinstance(
output, LLMInterface
), "Output for single text is not LLMInterface"
openai_completion.assert_called()
@skip_llama_cpp_not_installed
def test_llamacpp_chat():
from llama_cpp import Llama
dir_path = Path(__file__).parent / "resources" / "ggml-vocab-llama.gguf"
# test initialization
model = LlamaCppChat(model_path=str(dir_path), chat_format="llama", vocab_only=True)
assert isinstance(model.client_object, Llama), "Error initializing llama_cpp.Llama"
# test error if model_path is omitted
with pytest.raises(ValueError):
model = LlamaCppChat(chat_format="llama", vocab_only=True)
model.client_object
# test error if chat_format is omitted
with pytest.raises(ValueError):
model = LlamaCppChat(model_path=str(dir_path), vocab_only=True)
model.client_object