Spaces:
Paused
Paused
| 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}, | |
| } | |
| ) | |
| 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() | |
| 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 | |