lib/vnext_genai/nodes/setting.ex

defmodule GenAI.Setting do
  @moduledoc """
  A module representing a setting node in a graph structure.
  This module defines the structure and behavior of a setting node,
  including its identifier, setting, and value.
  """
  @vsn 1.0

  # import GenAI.Records.Session, only: [scope: 1, scope: 2]
  # require GenAI.Records.Session
  require GenAI.Records.Directive
  import GenAI.Records.Directive

  use GenAI.Graph.NodeBehaviour
  @derive GenAI.Graph.NodeProtocol
  # @derive GenAI.Thread.SessionProtocol
  defnodestruct(setting: nil, value: nil)
  defnodetype(setting: term, value: term)

  def apply_node_directives(this, graph_link, graph_container, session, context, options)

  def apply_node_directives(this, _, _, session, context, options) do
    entry = setting_entry(setting: this.setting)
    directive = GenAI.Session.State.Directive.static(entry, this.value, {:node, this.id})
    GenAI.Thread.Session.append_directive(session, directive, context, options)
  end
  
  def inspect_custom_details(subject, opts) do
    [
      "setting:", Inspect.Algebra.to_doc(subject.setting, opts), ", ",
      "value:", Inspect.Algebra.to_doc(subject.value, opts), ", ",
    ]
  end
  
end