honcho/tests/deriver/test_prompts.py

54 lines
1.6 KiB
Python

from unittest.mock import patch
import pytest
from src.deriver.prompts import (
estimate_deriver_prompt_tokens,
estimate_minimal_deriver_prompt_tokens,
minimal_deriver_prompt,
)
def test_minimal_deriver_prompt_includes_custom_instructions_when_present() -> None:
prompt = minimal_deriver_prompt(
peer_id="alice",
messages="alice: hello",
custom_instructions="Prefer concrete timeline facts.",
)
assert "CUSTOM INSTRUCTIONS:" in prompt
assert "Prefer concrete timeline facts." in prompt
def test_minimal_deriver_prompt_omits_custom_instructions_when_absent() -> None:
prompt = minimal_deriver_prompt(
peer_id="alice",
messages="alice: hello",
custom_instructions=None,
)
assert "CUSTOM INSTRUCTIONS:" not in prompt
def test_estimate_deriver_prompt_tokens_increases_with_custom_instructions() -> None:
base_tokens = estimate_minimal_deriver_prompt_tokens()
custom_tokens = estimate_deriver_prompt_tokens(
"Prefer explicit facts with absolute dates and keep the subject precise."
)
assert custom_tokens > base_tokens
def test_estimate_deriver_prompt_tokens_propagates_token_estimation_errors() -> None:
estimate_minimal_deriver_prompt_tokens.cache_clear()
with patch(
"src.deriver.prompts.estimate_tokens",
side_effect=RuntimeError("tokenizer unavailable"),
):
with pytest.raises(RuntimeError, match="tokenizer unavailable"):
estimate_deriver_prompt_tokens(None)
with pytest.raises(RuntimeError, match="tokenizer unavailable"):
estimate_deriver_prompt_tokens("Prefer concrete facts.")