kotaemon/tests/test_prompt.py
Nguyen Trung Duc (john) 693ed39de4 Move prompts into LLMs module (#70)
Since the only usage of prompt is within LLMs, it is reasonable to keep it within the LLM module. This way, it would be easier to discover module, and make the code base less complicated.

Changes:

* Move prompt components into llms
* Bump version 0.3.1
* Make pip install dependencies in eager mode

---------

Co-authored-by: ian <ian@cinnamon.is>
2023-11-14 16:00:10 +07:00

64 lines
2.2 KiB
Python

import pytest
from kotaemon.base import Document
from kotaemon.llms import BasePromptComponent, PromptTemplate
from kotaemon.post_processing.extractor import RegexExtractor
def test_set_attributes():
template = PromptTemplate("str = {s}, int = {i}, doc = {doc}, comp = {comp}")
doc = Document(text="Helloo, Alice!")
comp = RegexExtractor(
pattern=r"\d+", output_map={"1": "One", "2": "Two", "3": "Three"}
)
comp.set_run(kwargs={"text": "This is a test. 1 2 3"}, temp=True)
prompt = BasePromptComponent(template=template, s="Alice", i=30, doc=doc, comp=comp)
assert prompt.s == "Alice"
assert prompt.i == 30
assert prompt.doc == doc
assert prompt.comp == comp
def test_check_redundant_kwargs():
template = PromptTemplate("Hello, {name}!")
prompt = BasePromptComponent(template, name="Alice")
with pytest.warns(UserWarning, match="Keys provided but not in template: age"):
prompt._BasePromptComponent__check_redundant_kwargs(name="Alice", age=30)
def test_check_unset_placeholders():
template = PromptTemplate("Hello, {name}! I'm {age} years old.")
prompt = BasePromptComponent(template, name="Alice")
with pytest.raises(ValueError):
prompt._BasePromptComponent__check_unset_placeholders()
def test_validate_value_type():
template = PromptTemplate("Hello, {name}!")
prompt = BasePromptComponent(template)
with pytest.raises(ValueError):
prompt._BasePromptComponent__validate_value_type(name={})
def test_run():
template = PromptTemplate("str = {s}, int = {i}, doc = {doc}, comp = {comp}")
doc = Document(text="Helloo, Alice!")
comp = RegexExtractor(
pattern=r"\d+", output_map={"1": "One", "2": "Two", "3": "Three"}
)
comp.set_run(kwargs={"text": "This is a test. 1 2 3"}, temp=True)
prompt = BasePromptComponent(template=template, s="Alice", i=30, doc=doc, comp=comp)
result = prompt()
assert result.text == "str = Alice, int = 30, doc = Helloo, Alice!, comp = ['One']"
def test_set_method():
template = PromptTemplate("Hello, {name}!")
prompt = BasePromptComponent(template)
prompt.set(name="Alice")
assert prompt.name == "Alice"