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/link.ex
defmodule Nous.KnowledgeBase.Link do
@moduledoc """
A directed edge in the wiki graph between two entries.
Links represent relationships like backlinks, cross-references,
concept connections, and parent-child hierarchies.
"""
@type link_type :: :backlink | :cross_reference | :concept | :see_also | :parent_child
@type t :: %__MODULE__{
id: String.t(),
from_entry_id: String.t(),
to_entry_id: String.t(),
link_type: link_type(),
label: String.t() | nil,
weight: float(),
kb_id: String.t() | nil,
created_at: DateTime.t()
}
defstruct [
:id,
:from_entry_id,
:to_entry_id,
:label,
:kb_id,
link_type: :cross_reference,
weight: 1.0,
created_at: nil
]
@doc """
Creates a new Link from attributes.
Requires `:from_entry_id` and `:to_entry_id`.
"""
def new(attrs) when is_map(attrs) do
%__MODULE__{
id: Map.get(attrs, :id) || generate_id(),
from_entry_id: Map.fetch!(attrs, :from_entry_id),
to_entry_id: Map.fetch!(attrs, :to_entry_id),
link_type: Map.get(attrs, :link_type, :cross_reference),
label: Map.get(attrs, :label),
weight: Map.get(attrs, :weight, 1.0),
kb_id: Map.get(attrs, :kb_id),
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