Class: Assistant::Profiles::Profile

Inherits:
Data
  • Object
show all
Defined in:
app/services/assistant/profiles.rb

Overview

A single profile definition.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key: nil, label: nil, icon: nil, tagline: nil, model: nil, tool_handles: [], required_services: [], system_directive: nil, starters: []) ⇒ Profile

Returns a new instance of Profile.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'app/services/assistant/profiles.rb', line 42

def initialize(
  key: nil, label: nil, icon: nil, tagline: nil, model: nil,
  tool_handles: [], required_services: [], system_directive: nil, starters: []
)
  super(
    key: immutable_value(key),
    label: immutable_value(label),
    icon: immutable_value(icon),
    tagline: immutable_value(tagline),
    model: immutable_value(model),
    tool_handles: immutable_values(tool_handles),
    required_services: immutable_values(required_services),
    system_directive: immutable_value(system_directive),
    starters: immutable_values(starters)
  )
end

Instance Attribute Details

#iconObject (readonly)

Font Awesome icon name (no "fa-" prefix)



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'app/services/assistant/profiles.rb', line 38

Profile = Data.define(
  :key, :label, :icon, :tagline, :model,
  :tool_handles, :required_services, :system_directive, :starters
) do
  def initialize(
    key: nil, label: nil, icon: nil, tagline: nil, model: nil,
    tool_handles: [], required_services: [], system_directive: nil, starters: []
  )
    super(
      key: immutable_value(key),
      label: immutable_value(label),
      icon: immutable_value(icon),
      tagline: immutable_value(tagline),
      model: immutable_value(model),
      tool_handles: immutable_values(tool_handles),
      required_services: immutable_values(required_services),
      system_directive: immutable_value(system_directive),
      starters: immutable_values(starters)
    )
  end

  def to_param = key

  # True when the user's permitted service keys cover this profile's
  # required services (a subset check — every required service must be
  # permitted). Profiles with no requirements are available to everyone.
  def available_to?(permitted_service_keys)
    Array(required_services).all? { |svc| permitted_service_keys.include?(svc) }
  end

  private

  def immutable_values(values)
    Array(values).map { |value| immutable_value(value) }.freeze
  end

  def immutable_value(value)
    value.is_a?(String) ? value.dup.freeze : value
  end
end

#keyObject (readonly)

stable identifier (also used as conversation_type)



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'app/services/assistant/profiles.rb', line 38

Profile = Data.define(
  :key, :label, :icon, :tagline, :model,
  :tool_handles, :required_services, :system_directive, :starters
) do
  def initialize(
    key: nil, label: nil, icon: nil, tagline: nil, model: nil,
    tool_handles: [], required_services: [], system_directive: nil, starters: []
  )
    super(
      key: immutable_value(key),
      label: immutable_value(label),
      icon: immutable_value(icon),
      tagline: immutable_value(tagline),
      model: immutable_value(model),
      tool_handles: immutable_values(tool_handles),
      required_services: immutable_values(required_services),
      system_directive: immutable_value(system_directive),
      starters: immutable_values(starters)
    )
  end

  def to_param = key

  # True when the user's permitted service keys cover this profile's
  # required services (a subset check — every required service must be
  # permitted). Profiles with no requirements are available to everyone.
  def available_to?(permitted_service_keys)
    Array(required_services).all? { |svc| permitted_service_keys.include?(svc) }
  end

  private

  def immutable_values(values)
    Array(values).map { |value| immutable_value(value) }.freeze
  end

  def immutable_value(value)
    value.is_a?(String) ? value.dup.freeze : value
  end
end

#labelObject (readonly)

human label shown on the card



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'app/services/assistant/profiles.rb', line 38

Profile = Data.define(
  :key, :label, :icon, :tagline, :model,
  :tool_handles, :required_services, :system_directive, :starters
) do
  def initialize(
    key: nil, label: nil, icon: nil, tagline: nil, model: nil,
    tool_handles: [], required_services: [], system_directive: nil, starters: []
  )
    super(
      key: immutable_value(key),
      label: immutable_value(label),
      icon: immutable_value(icon),
      tagline: immutable_value(tagline),
      model: immutable_value(model),
      tool_handles: immutable_values(tool_handles),
      required_services: immutable_values(required_services),
      system_directive: immutable_value(system_directive),
      starters: immutable_values(starters)
    )
  end

  def to_param = key

  # True when the user's permitted service keys cover this profile's
  # required services (a subset check — every required service must be
  # permitted). Profiles with no requirements are available to everyone.
  def available_to?(permitted_service_keys)
    Array(required_services).all? { |svc| permitted_service_keys.include?(svc) }
  end

  private

  def immutable_values(values)
    Array(values).map { |value| immutable_value(value) }.freeze
  end

  def immutable_value(value)
    value.is_a?(String) ? value.dup.freeze : value
  end
end

#modelObject (readonly)

ChatService::MODELS key to pin (model_preference)



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'app/services/assistant/profiles.rb', line 38

Profile = Data.define(
  :key, :label, :icon, :tagline, :model,
  :tool_handles, :required_services, :system_directive, :starters
) do
  def initialize(
    key: nil, label: nil, icon: nil, tagline: nil, model: nil,
    tool_handles: [], required_services: [], system_directive: nil, starters: []
  )
    super(
      key: immutable_value(key),
      label: immutable_value(label),
      icon: immutable_value(icon),
      tagline: immutable_value(tagline),
      model: immutable_value(model),
      tool_handles: immutable_values(tool_handles),
      required_services: immutable_values(required_services),
      system_directive: immutable_value(system_directive),
      starters: immutable_values(starters)
    )
  end

  def to_param = key

  # True when the user's permitted service keys cover this profile's
  # required services (a subset check — every required service must be
  # permitted). Profiles with no requirements are available to everyone.
  def available_to?(permitted_service_keys)
    Array(required_services).all? { |svc| permitted_service_keys.include?(svc) }
  end

  private

  def immutable_values(values)
    Array(values).map { |value| immutable_value(value) }.freeze
  end

  def immutable_value(value)
    value.is_a?(String) ? value.dup.freeze : value
  end
end

#required_servicesObject (readonly)

service keys the user MUST have
permission for, or the profile is hidden from them



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'app/services/assistant/profiles.rb', line 38

Profile = Data.define(
  :key, :label, :icon, :tagline, :model,
  :tool_handles, :required_services, :system_directive, :starters
) do
  def initialize(
    key: nil, label: nil, icon: nil, tagline: nil, model: nil,
    tool_handles: [], required_services: [], system_directive: nil, starters: []
  )
    super(
      key: immutable_value(key),
      label: immutable_value(label),
      icon: immutable_value(icon),
      tagline: immutable_value(tagline),
      model: immutable_value(model),
      tool_handles: immutable_values(tool_handles),
      required_services: immutable_values(required_services),
      system_directive: immutable_value(system_directive),
      starters: immutable_values(starters)
    )
  end

  def to_param = key

  # True when the user's permitted service keys cover this profile's
  # required services (a subset check — every required service must be
  # permitted). Profiles with no requirements are available to everyone.
  def available_to?(permitted_service_keys)
    Array(required_services).all? { |svc| permitted_service_keys.include?(svc) }
  end

  private

  def immutable_values(values)
    Array(values).map { |value| immutable_value(value) }.freeze
  end

  def immutable_value(value)
    value.is_a?(String) ? value.dup.freeze : value
  end
end

#startersObject (readonly)

suggested opening prompts



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'app/services/assistant/profiles.rb', line 38

Profile = Data.define(
  :key, :label, :icon, :tagline, :model,
  :tool_handles, :required_services, :system_directive, :starters
) do
  def initialize(
    key: nil, label: nil, icon: nil, tagline: nil, model: nil,
    tool_handles: [], required_services: [], system_directive: nil, starters: []
  )
    super(
      key: immutable_value(key),
      label: immutable_value(label),
      icon: immutable_value(icon),
      tagline: immutable_value(tagline),
      model: immutable_value(model),
      tool_handles: immutable_values(tool_handles),
      required_services: immutable_values(required_services),
      system_directive: immutable_value(system_directive),
      starters: immutable_values(starters)
    )
  end

  def to_param = key

  # True when the user's permitted service keys cover this profile's
  # required services (a subset check — every required service must be
  # permitted). Profiles with no requirements are available to everyone.
  def available_to?(permitted_service_keys)
    Array(required_services).all? { |svc| permitted_service_keys.include?(svc) }
  end

  private

  def immutable_values(values)
    Array(values).map { |value| immutable_value(value) }.freeze
  end

  def immutable_value(value)
    value.is_a?(String) ? value.dup.freeze : value
  end
end

#system_directiveObject (readonly)

short tone/intent line appended to the
system prompt while this profile is active



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'app/services/assistant/profiles.rb', line 38

Profile = Data.define(
  :key, :label, :icon, :tagline, :model,
  :tool_handles, :required_services, :system_directive, :starters
) do
  def initialize(
    key: nil, label: nil, icon: nil, tagline: nil, model: nil,
    tool_handles: [], required_services: [], system_directive: nil, starters: []
  )
    super(
      key: immutable_value(key),
      label: immutable_value(label),
      icon: immutable_value(icon),
      tagline: immutable_value(tagline),
      model: immutable_value(model),
      tool_handles: immutable_values(tool_handles),
      required_services: immutable_values(required_services),
      system_directive: immutable_value(system_directive),
      starters: immutable_values(starters)
    )
  end

  def to_param = key

  # True when the user's permitted service keys cover this profile's
  # required services (a subset check — every required service must be
  # permitted). Profiles with no requirements are available to everyone.
  def available_to?(permitted_service_keys)
    Array(required_services).all? { |svc| permitted_service_keys.include?(svc) }
  end

  private

  def immutable_values(values)
    Array(values).map { |value| immutable_value(value) }.freeze
  end

  def immutable_value(value)
    value.is_a?(String) ? value.dup.freeze : value
  end
end

#taglineObject (readonly)

one-line description shown on the card



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'app/services/assistant/profiles.rb', line 38

Profile = Data.define(
  :key, :label, :icon, :tagline, :model,
  :tool_handles, :required_services, :system_directive, :starters
) do
  def initialize(
    key: nil, label: nil, icon: nil, tagline: nil, model: nil,
    tool_handles: [], required_services: [], system_directive: nil, starters: []
  )
    super(
      key: immutable_value(key),
      label: immutable_value(label),
      icon: immutable_value(icon),
      tagline: immutable_value(tagline),
      model: immutable_value(model),
      tool_handles: immutable_values(tool_handles),
      required_services: immutable_values(required_services),
      system_directive: immutable_value(system_directive),
      starters: immutable_values(starters)
    )
  end

  def to_param = key

  # True when the user's permitted service keys cover this profile's
  # required services (a subset check — every required service must be
  # permitted). Profiles with no requirements are available to everyone.
  def available_to?(permitted_service_keys)
    Array(required_services).all? { |svc| permitted_service_keys.include?(svc) }
  end

  private

  def immutable_values(values)
    Array(values).map { |value| immutable_value(value) }.freeze
  end

  def immutable_value(value)
    value.is_a?(String) ? value.dup.freeze : value
  end
end

#tool_handlesObject (readonly)

kebab tool handles (resolved to services)



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'app/services/assistant/profiles.rb', line 38

Profile = Data.define(
  :key, :label, :icon, :tagline, :model,
  :tool_handles, :required_services, :system_directive, :starters
) do
  def initialize(
    key: nil, label: nil, icon: nil, tagline: nil, model: nil,
    tool_handles: [], required_services: [], system_directive: nil, starters: []
  )
    super(
      key: immutable_value(key),
      label: immutable_value(label),
      icon: immutable_value(icon),
      tagline: immutable_value(tagline),
      model: immutable_value(model),
      tool_handles: immutable_values(tool_handles),
      required_services: immutable_values(required_services),
      system_directive: immutable_value(system_directive),
      starters: immutable_values(starters)
    )
  end

  def to_param = key

  # True when the user's permitted service keys cover this profile's
  # required services (a subset check — every required service must be
  # permitted). Profiles with no requirements are available to everyone.
  def available_to?(permitted_service_keys)
    Array(required_services).all? { |svc| permitted_service_keys.include?(svc) }
  end

  private

  def immutable_values(values)
    Array(values).map { |value| immutable_value(value) }.freeze
  end

  def immutable_value(value)
    value.is_a?(String) ? value.dup.freeze : value
  end
end

Instance Method Details

#available_to?(permitted_service_keys) ⇒ Boolean

True when the user's permitted service keys cover this profile's
required services (a subset check — every required service must be
permitted). Profiles with no requirements are available to everyone.

Returns:

  • (Boolean)


64
65
66
# File 'app/services/assistant/profiles.rb', line 64

def available_to?(permitted_service_keys)
  Array(required_services).all? { |svc| permitted_service_keys.include?(svc) }
end

#to_paramObject



59
# File 'app/services/assistant/profiles.rb', line 59

def to_param = key