- LLMProvider: complete(messages, schema) -> LLMResult (текст, разобранный JSON, токены) - openai_compat: /chat/completions, structured output через response_format json_schema, JSON из ```-обёртки тоже разбирается; ретраи на 429/5xx и сетевые ошибки, 4xx — сразу ошибка - mock: детерминированные правила для тестов и демо без сети - LLMSettings (LLM_PROVIDER/BASE_URL/MODEL/API_KEY…), CLI python -m app.llm.cli Refs #17 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
22 lines
571 B
Python
22 lines
571 B
Python
import sys
|
|
|
|
import pytest
|
|
|
|
from app.llm import cli
|
|
|
|
|
|
def test_cli_asks_configured_provider(monkeypatch: pytest.MonkeyPatch, capsys: pytest.CaptureFixture[str]) -> None:
|
|
monkeypatch.setenv("LLM_PROVIDER", "mock")
|
|
monkeypatch.setattr(sys, "argv", ["cli", "привет", "мир"])
|
|
|
|
cli.main()
|
|
|
|
out = capsys.readouterr().out
|
|
assert "[mock -]" in out and "mock: привет мир" in out
|
|
|
|
|
|
def test_cli_usage(monkeypatch: pytest.MonkeyPatch) -> None:
|
|
monkeypatch.setattr(sys, "argv", ["cli"])
|
|
with pytest.raises(SystemExit):
|
|
cli.main()
|