Packages
nous
0.14.2
0.17.0
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.17
0.12.16
0.12.15
0.12.14
0.12.13
0.12.12
0.12.11
0.12.9
0.12.7
0.12.6
0.12.5
0.12.3
0.12.2
0.12.0
0.11.3
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.5.0
AI agent framework for Elixir with multi-provider LLM support
Current section
Files
Jump to
Current section
Files
lib/nous/knowledge_base/health_report.ex
defmodule Nous.KnowledgeBase.HealthReport do
@moduledoc """
Result of a health check audit on the knowledge base.
Contains statistics, scores, and identified issues for maintenance.
"""
@type issue_type :: :stale | :inconsistent | :orphan | :gap | :low_confidence | :duplicate
@type severity :: :low | :medium | :high
@type issue :: %{
type: issue_type(),
entry_id: String.t() | nil,
description: String.t(),
severity: severity(),
suggested_action: String.t()
}
@type t :: %__MODULE__{
id: String.t(),
kb_id: String.t() | nil,
total_entries: non_neg_integer(),
total_links: non_neg_integer(),
total_documents: non_neg_integer(),
issues: [issue()],
coverage_score: float(),
freshness_score: float(),
coherence_score: float(),
created_at: DateTime.t()
}
defstruct [
:id,
:kb_id,
total_entries: 0,
total_links: 0,
total_documents: 0,
issues: [],
coverage_score: 0.0,
freshness_score: 0.0,
coherence_score: 0.0,
created_at: nil
]
@doc """
Creates a new HealthReport from attributes.
"""
def new(attrs) when is_map(attrs) do
%__MODULE__{
id: Map.get(attrs, :id) || generate_id(),
kb_id: Map.get(attrs, :kb_id),
total_entries: Map.get(attrs, :total_entries, 0),
total_links: Map.get(attrs, :total_links, 0),
total_documents: Map.get(attrs, :total_documents, 0),
issues: Map.get(attrs, :issues, []),
coverage_score: Map.get(attrs, :coverage_score, 0.0),
freshness_score: Map.get(attrs, :freshness_score, 0.0),
coherence_score: Map.get(attrs, :coherence_score, 0.0),
created_at: Map.get(attrs, :created_at, DateTime.utc_now())
}
end
defp generate_id do
:crypto.strong_rand_bytes(16) |> Base.encode16(case: :lower)
end
end