refactor(ipuaro): simplify LLM integration with pure XML tool format

Refactor OllamaClient to use pure XML format for tool calls as
designed in CONCEPT.md. Removes dual system (Ollama native tools +
XML parser) in favor of single source of truth (ResponseParser).

Changes:
- Remove tools parameter from ILLMClient.chat() interface
- Remove convertTools(), convertParameters(), extractToolCalls()
- Add XML format instructions to system prompt with examples
- Add CDATA support in ResponseParser for multiline content
- Add tool name validation with helpful error messages
- Move ToolDef/ToolParameter to shared/types/tool-definitions.ts

Benefits:
- Simplified architecture (single source of truth)
- CONCEPT.md compliance (pure XML as designed)
- Better validation (early detection of invalid tools)
- Reduced complexity (fewer format conversions)

Tests: 1444 passed (+4 new tests)
Coverage: 97.83% lines, 91.98% branches, 99.16% functions
This commit is contained in:
imfozilbek
2025-12-01 21:03:55 +05:00
parent 902d1db831
commit 0433ef102c
13 changed files with 290 additions and 212 deletions

View File

@@ -1328,10 +1328,10 @@ class ErrorHandler {
---
## Version 0.19.0 - XML Tool Format Refactor 🔄
## Version 0.19.0 - XML Tool Format Refactor 🔄
**Priority:** HIGH
**Status:** Pending
**Status:** Complete (v0.19.0 released)
Рефакторинг: переход на чистый XML формат для tool calls (как в CONCEPT.md).
@@ -1356,10 +1356,10 @@ OllamaClient использует Ollama native tool calling (JSON Schema), а R
```
**Изменения:**
- [ ] Удалить `convertTools()` метод
- [ ] Удалить `extractToolCalls()` метод
- [ ] Убрать передачу `tools` в `client.chat()`
- [ ] Возвращать только `content` без `toolCalls`
- [x] Удалить `convertTools()` метод
- [x] Удалить `extractToolCalls()` метод
- [x] Убрать передачу `tools` в `client.chat()`
- [x] Возвращать только `content` без `toolCalls`
### 0.19.2 - System Prompt Update
@@ -1398,9 +1398,9 @@ Always wait for tool results before making conclusions.
```
**Изменения:**
- [ ] Добавить `TOOL_FORMAT_INSTRUCTIONS` в prompts.ts
- [ ] Включить в `SYSTEM_PROMPT`
- [ ] Добавить примеры для всех 18 tools
- [x] Добавить `TOOL_FORMAT_INSTRUCTIONS` в prompts.ts
- [x] Включить в `SYSTEM_PROMPT`
- [x] Добавить примеры для всех 18 tools
### 0.19.3 - HandleMessage Simplification
@@ -1417,9 +1417,9 @@ Always wait for tool results before making conclusions.
```
**Изменения:**
- [ ] Убрать передачу tool definitions в `llm.chat()`
- [ ] ResponseParser — единственный источник tool calls
- [ ] Упростить логику обработки
- [x] Убрать передачу tool definitions в `llm.chat()`
- [x] ResponseParser — единственный источник tool calls
- [x] Упростить логику обработки
### 0.19.4 - ILLMClient Interface Update
@@ -1439,9 +1439,9 @@ interface ILLMClient {
```
**Изменения:**
- [ ] Убрать `tools` параметр из `chat()`
- [ ] Убрать `toolCalls` из `LLMResponse` (парсятся из content)
- [ ] Обновить все реализации
- [x] Убрать `tools` параметр из `chat()`
- [x] Убрать `toolCalls` из `LLMResponse` (парсятся из content)
- [x] Обновить все реализации
### 0.19.5 - ResponseParser Enhancements
@@ -1455,15 +1455,15 @@ interface ILLMClient {
```
**Изменения:**
- [ ] Добавить поддержку `<![CDATA[...]]>` для content
- [ ] Валидация: tool name должен быть из известного списка
- [ ] Улучшить сообщения об ошибках парсинга
- [x] Добавить поддержку `<![CDATA[...]]>` для content
- [x] Валидация: tool name должен быть из известного списка
- [x] Улучшить сообщения об ошибках парсинга
**Tests:**
- [ ] Обновить тесты OllamaClient
- [ ] Обновить тесты HandleMessage
- [ ] Добавить тесты ResponseParser для edge cases
- [ ] E2E тест полного flow с XML
- [x] Обновить тесты OllamaClient
- [x] Обновить тесты HandleMessage
- [x] Добавить тесты ResponseParser для edge cases
- [ ] E2E тест полного flow с XML (опционально, может быть в 0.20.0)
---