Mark native Anthropic adapter deprecated (kept as reference for Phase-2 Gemini adapter); record real DeepSeek cache-hit confirmation

This commit is contained in:
Claude (backend session) 2026-07-04 17:07:38 +03:00
parent 56c2f5a61c
commit c504cfeb14
3 changed files with 16 additions and 5 deletions

View file

@ -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

View file

@ -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 == "" {

View file

@ -163,6 +163,9 @@ per-chunk skip+flag вместо падения; структурный запр
- **Usage реальный**, не мок: `prompt/completion_tokens` ненулевые в request_log; GLM латентность штатная (58 с,
без ×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 знаков (`(453384)·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 из стека убран,
проверять больше нечего на этом контуре.