From b58fe07c30e3c2c9049b7a8f6e0c4a01240b7d0d Mon Sep 17 00:00:00 2001 From: Sol Date: Mon, 23 Feb 2026 23:31:34 +0100 Subject: [PATCH] fix(memory): use valid model ID for compaction/extraction (claude-sonnet-4-20250514) --- config/config.exs | 2 +- lib/solum/command_handler.ex | 2 +- lib/solum/context/policy.ex | 4 ++-- lib/solum/memory/extractor.ex | 4 ++-- lib/solum/onboarding/steps/models.ex | 15 +++++++-------- test/solum/context/policy_test.exs | 8 ++++---- 6 files changed, 17 insertions(+), 18 deletions(-) diff --git a/config/config.exs b/config/config.exs index 8b01b5c3..c9a38d3f 100644 --- a/config/config.exs +++ b/config/config.exs @@ -4,7 +4,7 @@ config :solum, # LLM defaults default_model: "claude-sonnet-4-20250514", default_provider: :anthropic, - compaction_model: "claude-3-5-haiku-20241022", + compaction_model: "claude-sonnet-4-20250514", compaction_threshold: 0.75, # Persistence — XDG data dir, overridable via runtime.exs or env diff --git a/lib/solum/command_handler.ex b/lib/solum/command_handler.ex index 94d399b3..b5a14caa 100644 --- a/lib/solum/command_handler.ex +++ b/lib/solum/command_handler.ex @@ -292,7 +292,7 @@ defmodule Solum.CommandHandler do defp format_legacy_models do providers = list_legacy_providers() - builtin = ["claude-sonnet-4-20250514", "claude-opus-4-20250514", "claude-3-5-haiku-20241022"] + builtin = ["claude-sonnet-4-20250514", "claude-opus-4-20250514", "claude-sonnet-4-20250514"] builtin_lines = Enum.map(builtin, &" #{&1}") builtin_section = "Built-in models:\n" <> Enum.join(builtin_lines, "\n") diff --git a/lib/solum/context/policy.ex b/lib/solum/context/policy.ex index 1e410c39..d283e8a9 100644 --- a/lib/solum/context/policy.ex +++ b/lib/solum/context/policy.ex @@ -11,7 +11,7 @@ defmodule Solum.Context.Policy do defstruct raw_retention_minutes: 30, l1_compaction_interval_minutes: 10, l2_compaction_interval_minutes: 60, - compaction_model: "claude-3-5-haiku-20241022", + compaction_model: "claude-sonnet-4-20250514", max_hud_tokens: 8000, recent_events_limit: 1000, pin_retention: :session @@ -46,7 +46,7 @@ defmodule Solum.Context.Policy do raw_retention_minutes: 30, l1_compaction_interval_minutes: 10, l2_compaction_interval_minutes: 60, - compaction_model: "claude-3-5-haiku-20241022", + compaction_model: "claude-sonnet-4-20250514", max_hud_tokens: 8000, recent_events_limit: 1000, pin_retention: :session diff --git a/lib/solum/memory/extractor.ex b/lib/solum/memory/extractor.ex index 35c29af8..9419215e 100644 --- a/lib/solum/memory/extractor.ex +++ b/lib/solum/memory/extractor.ex @@ -146,7 +146,7 @@ defmodule Solum.Memory.Extractor do Extract memories from a batch of conversation messages. Options: - - `:model` - LLM model to use (default: "claude-3-5-haiku-20241022") + - `:model` - LLM model to use (default: "claude-sonnet-4-20250514") - `:min_importance` - Skip memories below this threshold (default: 0.3) """ def extract_from_messages(messages, opts \\ []) when is_list(messages) do @@ -259,7 +259,7 @@ defmodule Solum.Memory.Extractor do defp default_model do config = get_extraction_config() - Keyword.get(config, :model, "claude-3-5-haiku-20241022") + Keyword.get(config, :model, "claude-sonnet-4-20250514") end defp default_min_importance do diff --git a/lib/solum/onboarding/steps/models.ex b/lib/solum/onboarding/steps/models.ex index 35ec8f28..0b512df6 100644 --- a/lib/solum/onboarding/steps/models.ex +++ b/lib/solum/onboarding/steps/models.ex @@ -130,11 +130,11 @@ defmodule Solum.Onboarding.Steps.Models do defp get_default_models("anthropic") do { # Primary: Most capable - "claude-3-5-sonnet-20241022", + "claude-sonnet-4-20250514", # Compaction: Fast and efficient "claude-3-haiku-20240307", # Learning: Same as primary - "claude-3-5-sonnet-20241022" + "claude-sonnet-4-20250514" } end @@ -163,16 +163,15 @@ defmodule Solum.Onboarding.Steps.Models do defp get_default_models(_provider) do # Fallback defaults { - "claude-3-5-sonnet-20241022", + "claude-sonnet-4-20250514", "claude-3-haiku-20240307", - "claude-3-5-sonnet-20241022" + "claude-sonnet-4-20250514" } end defp get_available_models("anthropic") do [ - "claude-3-5-sonnet-20241022", - "claude-3-5-haiku-20241022", + "claude-sonnet-4-20250514", "claude-3-opus-20240229", "claude-3-sonnet-20240229", "claude-3-haiku-20240307" @@ -208,10 +207,10 @@ defmodule Solum.Onboarding.Steps.Models do ["default"] end - defp get_model_description("claude-3-5-sonnet-20241022"), + defp get_model_description("claude-sonnet-4-20250514"), do: "Most capable Claude model, excellent for complex reasoning" - defp get_model_description("claude-3-5-haiku-20241022"), + defp get_model_description("claude-sonnet-4-20250514"), do: "Fast Claude model, good for quick responses" defp get_model_description("claude-3-opus-20240229"), diff --git a/test/solum/context/policy_test.exs b/test/solum/context/policy_test.exs index ad0e6aae..924d1258 100644 --- a/test/solum/context/policy_test.exs +++ b/test/solum/context/policy_test.exs @@ -12,7 +12,7 @@ defmodule Solum.Context.PolicyTest do assert policy.raw_retention_minutes == 30 assert policy.l1_compaction_interval_minutes == 10 assert policy.l2_compaction_interval_minutes == 60 - assert policy.compaction_model == "claude-3-5-haiku-20241022" + assert policy.compaction_model == "claude-sonnet-4-20250514" assert policy.max_hud_tokens == 8000 assert policy.recent_events_limit == 1000 assert policy.pin_retention == :session @@ -26,7 +26,7 @@ defmodule Solum.Context.PolicyTest do assert policy.raw_retention_minutes == 30 assert policy.l1_compaction_interval_minutes == 10 assert policy.l2_compaction_interval_minutes == 60 - assert policy.compaction_model == "claude-3-5-haiku-20241022" + assert policy.compaction_model == "claude-sonnet-4-20250514" assert policy.max_hud_tokens == 8000 assert policy.recent_events_limit == 1000 assert policy.pin_retention == :session @@ -49,7 +49,7 @@ defmodule Solum.Context.PolicyTest do # Default values remain assert policy.raw_retention_minutes == 30 assert policy.l1_compaction_interval_minutes == 10 - assert policy.compaction_model == "claude-3-5-haiku-20241022" + assert policy.compaction_model == "claude-sonnet-4-20250514" end test "ignores unknown keys with warning" do @@ -112,7 +112,7 @@ defmodule Solum.Context.PolicyTest do # Other fields unchanged assert merged.recent_events_limit == 1000 - assert merged.compaction_model == "claude-3-5-haiku-20241022" + assert merged.compaction_model == "claude-sonnet-4-20250514" end) assert log_output =~ "ignoring unknown keys"