Module: AgentHarness::Extensions::Compatibility
- Defined in:
- lib/agent_harness/extensions.rb
Constant Summary collapse
- HARNESS_CAPABILITIES =
{ message_hooks: true, response_hooks: true, system_prompt_additions: true }.freeze
Class Method Summary collapse
- .capability_supported?(provider, capability) ⇒ Boolean
- .check!(provider:, extension:, strict: true) ⇒ Object
- .report(provider:, extension:) ⇒ Object
Class Method Details
.capability_supported?(provider, capability) ⇒ Boolean
157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/agent_harness/extensions.rb', line 157 def capability_supported?(provider, capability) return HARNESS_CAPABILITIES.fetch(capability) if HARNESS_CAPABILITIES.key?(capability) case capability when :chat provider.supports_chat? when :text_mode provider.supports_text_mode? else !!provider.capabilities[capability] end end |
.check!(provider:, extension:, strict: true) ⇒ Object
143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/agent_harness/extensions.rb', line 143 def check!(provider:, extension:, strict: true) compatibility = report(provider: provider, extension: extension) return compatibility if compatibility.compatible? return compatibility unless strict raise ExtensionCompatibilityError.new( "Extension '#{extension.name}' is not compatible with provider '#{provider.class.provider_name}': " \ "missing provider capabilities: #{compatibility.missing_provider_capabilities.inspect}", provider: provider.class.provider_name, extension: extension.name, report: compatibility.to_h ) end |
.report(provider:, extension:) ⇒ Object
130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/agent_harness/extensions.rb', line 130 def report(provider:, extension:) required = Array(extension.required_provider_capabilities).map(&:to_sym) missing = required.reject { |capability| capability_supported?(provider, capability) } unsupported = Array(extension.unsupported_features).map(&:to_sym) CompatibilityReport.new( extension: extension, provider: provider, missing_provider_capabilities: missing, unsupported_features: unsupported ) end |