Class: Assistant::Profiles::Profile
- Inherits:
-
Data
- Object
- Data
- Assistant::Profiles::Profile
- Defined in:
- app/services/assistant/profiles.rb
Overview
A single profile definition.
Instance Attribute Summary collapse
-
#icon ⇒ Object
readonly
Font Awesome icon name (no "fa-" prefix).
-
#key ⇒ Object
readonly
stable identifier (also used as conversation_type).
-
#label ⇒ Object
readonly
human label shown on the card.
-
#model ⇒ Object
readonly
ChatService::MODELS key to pin (model_preference).
-
#required_services ⇒ Object
readonly
service keys the user MUST have permission for, or the profile is hidden from them.
-
#starters ⇒ Object
readonly
suggested opening prompts.
-
#system_directive ⇒ Object
readonly
short tone/intent line appended to the system prompt while this profile is active.
-
#tagline ⇒ Object
readonly
one-line description shown on the card.
-
#tool_handles ⇒ Object
readonly
kebab tool handles (resolved to services).
Instance Method Summary collapse
-
#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).
-
#initialize(key: nil, label: nil, icon: nil, tagline: nil, model: nil, tool_handles: [], required_services: [], system_directive: nil, starters: []) ⇒ Profile
constructor
A new instance of Profile.
- #to_param ⇒ Object
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
#icon ⇒ Object (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 |
#key ⇒ Object (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 |
#label ⇒ Object (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 |
#model ⇒ Object (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_services ⇒ Object (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 |
#starters ⇒ Object (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_directive ⇒ Object (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 |
#tagline ⇒ Object (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_handles ⇒ Object (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.
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_param ⇒ Object
59 |
# File 'app/services/assistant/profiles.rb', line 59 def to_param = key |