Module: Insika::Harvest::MinerFactory
- Defined in:
- lib/insika/harvest.rb
Overview
Resolves WHICH model mines, and builds the ask. Profile -> platform
utility_model -> nil (D12 — nil means "feature inert", never a guess).
ask_factory/llm injectable (specs).
Class Method Summary collapse
-
.build(config, utility_model: nil, ask_factory: nil, llm: nil) ⇒ Object
config: the agent's
harvesthash. -
.ruby_llm_ask(model, provider, llm: nil) ⇒ Object
Temperature 0: a rejected skill must be re-proposable deterministically.
-
.split_ref(ref) ⇒ Object
"provider/model" -> [provider, model]; "model" -> [nil, model] — the ProposerFactory reading, one syntax for "which model" across features.
Class Method Details
.build(config, utility_model: nil, ask_factory: nil, llm: nil) ⇒ Object
config: the agent's harvest hash. -> Miner | nil
212 213 214 215 216 217 218 219 |
# File 'lib/insika/harvest.rb', line 212 def build(config, utility_model: nil, ask_factory: nil, llm: nil) ref = Coercion.presence(config && config.dig("miner", "model")) || Coercion.presence(utility_model) return nil if ref.nil? provider, model = split_ref(ref) factory = ask_factory || ->(m, p) { ruby_llm_ask(m, p, llm: llm) } Miner.new(ask: factory.call(model, provider), model: ref) end |
.ruby_llm_ask(model, provider, llm: nil) ⇒ Object
Temperature 0: a rejected skill must be re-proposable deterministically.
ruby_llm is required lazily so nothing loads a provider gem until a
miner is actually configured (load_guard stays green).
231 232 233 234 235 236 237 238 |
# File 'lib/insika/harvest.rb', line 231 def ruby_llm_ask(model, provider, llm: nil) require "ruby_llm" llm ||= RubyLLM lambda do |prompt| llm.chat(model: model, provider: provider, assume_model_exists: true) .with_temperature(0).ask(prompt) end end |
.split_ref(ref) ⇒ Object
"provider/model" -> [provider, model]; "model" -> [nil, model] — the ProposerFactory reading, one syntax for "which model" across features.
223 224 225 226 |
# File 'lib/insika/harvest.rb', line 223 def split_ref(ref) prov, name = ref.to_s.split("/", 2) name ? [prov, name] : [nil, prov] end |