From c504cfeb1445cc390d4a2229639238f1009203b2 Mon Sep 17 00:00:00 2001 From: "Claude (backend session)" Date: Sat, 4 Jul 2026 17:07:38 +0300 Subject: [PATCH] Mark native Anthropic adapter deprecated (kept as reference for Phase-2 Gemini adapter); record real DeepSeek cache-hit confirmation --- backend/configs/models.yaml | 5 +++-- backend/internal/llm/provider_anthropic.go | 9 +++++++++ docs/PROGRESS.md | 7 ++++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/backend/configs/models.yaml b/backend/configs/models.yaml index fc6dfbc..e68328d 100644 --- a/backend/configs/models.yaml +++ b/backend/configs/models.yaml @@ -38,8 +38,9 @@ providers: # Anthropic убран из стека по решению владельца (04.07): дорого, в RU-контуре # экономически недоступен (Р5), в eval не валидирован. Судья Р4 — Gemini - # (нативный адаптер, Фаза 2). Нативный Anthropic-адаптер в коде оставлен, но - # не подключён (можно удалить). Эскалация — не-Anthropic (Kimi/GLM). + # (нативный адаптер, Фаза 2). Нативный Anthropic-адаптер в коде помечен + # DEPRECATED, но НЕ удалён — оставлен как референс нативного адаптера под + # Gemini Фазы 2 (см. provider_anthropic.go). Эскалация — не-Anthropic (Kimi/GLM). local: # ollama/llama-server на стенде (боевой env — memory textmachine-local-stand) kind: local diff --git a/backend/internal/llm/provider_anthropic.go b/backend/internal/llm/provider_anthropic.go index 43c10d7..d85cafb 100644 --- a/backend/internal/llm/provider_anthropic.go +++ b/backend/internal/llm/provider_anthropic.go @@ -58,6 +58,15 @@ type anthropicClient struct { } // NewAnthropicClient builds the native Messages API adapter. +// +// Deprecated: Anthropic убран из модельного стека по решению владельца (04.07): +// дорого, в RU-контуре экономически недоступен (Р5), в eval не валидирован. Ни +// один provider с kind:"anthropic" в models.yaml сейчас не объявлен, поэтому +// BuildClient его не строит. Адаптер намеренно ОСТАВЛЕН как рабочий референс +// нативного (не-OpenAI-compat) адаптера — паттерн для нативного Gemini-адаптера +// Фазы 2 (§3.9): явные cache_control-брейкпоинты, инвариант суммы usage, +// маппинг stop_reason, единый транспорт retryLoop. Не удалять без замены этого +// референса; при возврате Anthropic — снять депрекейт и вернуть провайдера в конфиг. func NewAnthropicClient(cfg AnthropicConfig, logger *slog.Logger) LLMClient { base := cfg.BaseURL if base == "" { diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index de26b89..e134b01 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -163,6 +163,9 @@ per-chunk skip+flag вместо падения; структурный запр - **Usage реальный**, не мок: `prompt/completion_tokens` ненулевые в request_log; GLM латентность штатная (5–8 с, без ×3) → `extra_body thinking:{type:disabled}` фактически применён. - **Resume**: второй прогон — обе стадии из чекпоинтов за **$0**, ledger неизменен (нет двойной оплаты). +- **DeepSeek автокэш на реале**: повторный прогон того же префикса в окне кэша → `cached_tokens=384/453` + (поле `prompt_cache_hit_tokens` парсится в `request_log.cached_tokens`), billed по $0.0028/M; `CostUSD` + сошёлся до 7 знаков (`(453−384)·0.14 + 384·0.0028 + 1074·0.28 = $0.0003115`). Кэш-путь подтверждён живым провайдером. - **Пост-ревью правки провалидированы**: F1 (CheckKeys — заводится на 2 ключах), F2 (provider temp/maxtok в snapshot), F5 (fail-loud на включённый гейт), F7 (сноска §3.4) — все на месте; Anthropic вычищен из конфигов, висячих ссылок нет (в `BuildClient` ветка `case "anthropic"` осталась, но `kind: anthropic` в models.yaml нет). @@ -173,9 +176,7 @@ per-chunk skip+flag вместо падения; структурный запр read-пути `report`. Фикс: строки материализуются под таймаутом и возвращаются срезом `[]RequestLogView`; регрессионный тест `TestRequestLogRowsMaterializes`. `go test ./... -race` зелёные. -**Не покрыто реальным прогоном (честно):** (а) DeepSeek cache-hit парсинг — resume короткозамыкает вызов, так что -реального повторного prefix-хита не было; закрыт только unit-тестом `TestDeepSeekCacheFieldsVariant` (форсить -реальный хит = лишние траты, не гнал); (б) kill-9 посреди реального провайдерского вызова — инвариант +**Не покрыто реальным прогоном (честно):** (б) kill-9 посреди реального провайдерского вызова — инвариант `committed==SUM(checkpoints)` доказан unit-тестом `kill9_test.go` (настоящий SIGKILL на SQLite), на реале не воспроизводил (деньги/один-чанк дисциплина). (в) Anthropic cache_control/usage-сумма — Anthropic из стека убран, проверять больше нечего на этом контуре.