Мини-набор асинхронных проверок для функций obsidian_rag_api.llm:
check_relevanceshould_extend_context
Поскольку для корректной работы системы критично оценивать правильность вызовов инструментов (tools), добавлено тестирование двух ключевых точек работы агента, которые опираются на вызовы LLM и от которых зависит выбор tools и поведение агента в целом: check_relevance и should_extend_context. Эти тесты помогают убедиться, что LLM возвращает значения, на основании которых агент принимает корректные решения о вызовах внешних инструментов.
uv run python -m obsidian_rag_tests.run_testsПосле запуска в каждой папке с тестом будет создано два файла:
test_results.json— JSON с ключомresults, список объектов вида{id, relevant/needs_extension, expected_value/expected, complexity}.test_stats.txt— текстовый отчёт по уровням сложности: количество пройденных, проваленных и неизвестных случаев.
Оба файла сохраняются рядом с исходными test_cases.json в соответствующей папке теста (например src/test_check_relevance/).
В папке src/test_check_relevance/ содержится набор кейсов для проверки функции check_relevance. Каждый кейс имеет поля:
id— идентификатор кейсаquery— запрос пользователяnote— заметка с полямиtitleиcontent, по которой проверяется релевантностьexpected_value— ожидаемое логическое значение (true = релевантно)complexity— уровень сложности (easy,medium,hard)
Краткая статистика по test_check_relevance (15 кейсов):
- сложности: easy — 5, medium — 4, hard — 6
В папке src/test_should_extend_context/ находятся кейсы для should_extend_context. Поля кейсов:
id,query,context— массив заметок (каждая сtitleиcontent),expected_value,complexity.
Краткая статистика по test_should_extend_context (14 кейсов):
- сложности: easy — 5, medium — 4, hard — 5
Примеры кейсов:
check_relevanceid=1:query«Что такое волна?» и заметка «Механические волны» — ожидаетсяtrue.check_relevanceid=2:queryпро гепардов и заметка «Скорость звука» — ожидаетсяfalse.should_extend_contextid=2: запрос про ингредиенты для пасты, контекст содержит заметку про звуковые волны — ожидаетсяtrue(контекст не релевантен, нужно расширить).should_extend_contextid=6:query«Как волновое число связано с длиной волны?», контекст содержит заметку «Волновые свойства» — ожидаетсяfalse(контекст достаточен, расширять не нужно).