2022-10-24 21:51:15 +00:00
|
|
|
"""Test LLM Math functionality."""
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
|
|
|
from langchain.chains.llm_math.base import LLMMathChain
|
|
|
|
from langchain.chains.llm_math.prompt import _PROMPT_TEMPLATE
|
|
|
|
from tests.unit_tests.llms.fake_llm import FakeLLM
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
|
|
def fake_llm_math_chain() -> LLMMathChain:
|
|
|
|
"""Fake LLM Math chain for testing."""
|
|
|
|
complex_question = _PROMPT_TEMPLATE.format(question="What is the square root of 2?")
|
|
|
|
queries = {
|
|
|
|
_PROMPT_TEMPLATE.format(question="What is 1 plus 1?"): "Answer: 2",
|
2023-04-16 15:50:32 +00:00
|
|
|
complex_question: "```text\n2**.5\n```",
|
2022-10-24 21:51:15 +00:00
|
|
|
_PROMPT_TEMPLATE.format(question="foo"): "foo",
|
|
|
|
}
|
|
|
|
fake_llm = FakeLLM(queries=queries)
|
|
|
|
return LLMMathChain(llm=fake_llm, input_key="q", output_key="a")
|
|
|
|
|
|
|
|
|
|
|
|
def test_simple_question(fake_llm_math_chain: LLMMathChain) -> None:
|
|
|
|
"""Test simple question that should not need python."""
|
|
|
|
question = "What is 1 plus 1?"
|
|
|
|
output = fake_llm_math_chain.run(question)
|
|
|
|
assert output == "Answer: 2"
|
|
|
|
|
|
|
|
|
|
|
|
def test_complex_question(fake_llm_math_chain: LLMMathChain) -> None:
|
|
|
|
"""Test complex question that should need python."""
|
|
|
|
question = "What is the square root of 2?"
|
|
|
|
output = fake_llm_math_chain.run(question)
|
2023-04-16 15:50:32 +00:00
|
|
|
assert output == f"Answer: {2**.5}"
|
2022-10-24 21:51:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_error(fake_llm_math_chain: LLMMathChain) -> None:
|
|
|
|
"""Test question that raises error."""
|
|
|
|
with pytest.raises(ValueError):
|
|
|
|
fake_llm_math_chain.run("foo")
|