Этап 1: трей, окно чата и текстовый диалог с LLM

- PySide6: значок в трее с индикацией состояния, окно чата со стримингом и markdown
- Единый OpenAI-совместимый клиент (Ollama, LM Studio, OpenRouter)
- config.yaml с автосозданием, слиянием с умолчаниями и подстановкой ${ENV}
- Тесты конфига и сборки сообщений

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mrleo1nid
2026-09-17 03:04:21 +03:00
co-authored by Claude Opus 5
parent 26a01aa210
commit 7933613234
19 changed files with 1574 additions and 0 deletions
+19
View File
@@ -0,0 +1,19 @@
from agr_assistent.core.assistant import build_messages
def _history(count: int) -> list[dict[str, str]]:
return [{"role": "user", "content": str(i)} for i in range(count)]
def test_build_messages_adds_system_prompt_and_trims_history() -> None:
messages = build_messages(" be nice ", _history(5), max_history_messages=2)
assert messages == [
{"role": "system", "content": "be nice"},
{"role": "user", "content": "3"},
{"role": "user", "content": "4"},
]
def test_build_messages_without_limit_or_prompt() -> None:
assert build_messages("", _history(3), max_history_messages=0) == _history(3)