Module: SolidAgent::ModelNaming

Defined in:
lib/solid_agent/model_naming.rb

Overview

The one place that knows how a context class name maps to its message and generation class names.

Two callers derive these names — HasContext#infer_class_names at runtime and the context generator when writing files — and they used to implement the rule independently, which is how they drifted.

Constant Summary collapse

CONTEXT_SUFFIXES =

Suffixes a context class may end with. Only the first match is stripped: chaining delete_suffix reduces "SessionContext" to "" and produces a bare "Message"/"Generation" pair that collides across every context.

%w[Context Session].freeze

Class Method Summary collapse

Class Method Details

.base_for(class_name) ⇒ String

The stem a context class name contributes to its siblings.

Examples:

base_for("ChatSession")     #=> "Chat"
base_for("SessionContext")  #=> "Session"
base_for("Conversation")    #=> "Conversation"

Parameters:

  • class_name (String, Symbol, Class)

Returns:

  • (String)


26
27
28
29
30
31
# File 'lib/solid_agent/model_naming.rb', line 26

def base_for(class_name)
  name = class_name.to_s
  suffix = CONTEXT_SUFFIXES.find { |candidate| name.end_with?(candidate) && name != candidate }

  suffix ? name.delete_suffix(suffix) : name
end

.generation_class_for(class_name) ⇒ String

Parameters:

  • class_name (String, Symbol, Class)

Returns:

  • (String)


39
# File 'lib/solid_agent/model_naming.rb', line 39

def generation_class_for(class_name) = "#{base_for(class_name)}Generation"

.message_class_for(class_name) ⇒ String

Parameters:

  • class_name (String, Symbol, Class)

Returns:

  • (String)


35
# File 'lib/solid_agent/model_naming.rb', line 35

def message_class_for(class_name) = "#{base_for(class_name)}Message"