fix(insights): add logging to diagnose why AI network observations never persist

The parse function silently returned {:ok, []} on any decode failure or
observation rejection. Log warnings for both cases so we can see what the
LLM is actually returning.
This commit is contained in:
Graham McIntire 2026-05-11 09:18:09 -05:00
parent 78f7745c3c
commit a05907b76d

View file

@ -10,6 +10,8 @@ defmodule Towerops.LLM.NetworkInsightPrompt do
comments on findings the rule-based workers already produced. comments on findings the rule-based workers already produced.
""" """
require Logger
@valid_urgencies ~w(critical warning info) @valid_urgencies ~w(critical warning info)
@system """ @system """
@ -71,12 +73,21 @@ defmodule Towerops.LLM.NetworkInsightPrompt do
observations = observations =
case decode(cleaned) do case decode(cleaned) do
{:ok, %{"observations" => list}} when is_list(list) -> {:ok, %{"observations" => list}} when is_list(list) ->
list raw_count = length(list)
|> Enum.map(&normalize_observation/1) normalized = list |> Enum.map(&normalize_observation/1) |> Enum.reject(&is_nil/1)
|> Enum.reject(&is_nil/1) rejected = raw_count - length(normalized)
|> Enum.take(@max_observations)
if rejected > 0 do
Logger.warning("AI network insight: #{rejected}/#{raw_count} observations rejected by normalize_observation")
end
Enum.take(normalized, @max_observations)
_ -> _ ->
Logger.warning(
"AI network insight: could not decode LLM response, content preview: #{String.slice(cleaned, 0, 200)}"
)
[] []
end end