Module: Legion::Extensions::Knowledge::Runners::Query
- Included in:
- Client
- Defined in:
- lib/legion/extensions/knowledge/runners/query.rb
Overview
rubocop:disable Legion/Extension/RunnerIncludeHelpers
Class Method Summary collapse
- .query(question:, top_k: nil, synthesize: true) ⇒ Object
- .record_feedback(question:, chunk_ids:, retrieval_score:, synthesized: true, rating: nil) ⇒ Object
- .retrieve(question:, top_k: nil) ⇒ Object
Class Method Details
.query(question:, top_k: nil, synthesize: true) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/legion/extensions/knowledge/runners/query.rb', line 12 def query(question:, top_k: nil, synthesize: true) started = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC) resolved_k = top_k || settings_top_k || 5 chunks = retrieve_chunks(question, resolved_k) answer = (synthesize_answer(question, chunks) if synthesize && llm_available?) latency_ms = ((::Process.clock_gettime(::Process::CLOCK_MONOTONIC) - started) * 1000).round score = average_score(chunks) unless chunks.empty? record_feedback( question: question, chunk_ids: chunks.filter_map { |c| c[:id] }, retrieval_score: score.to_f, synthesized: synthesize && llm_available? ) end { success: true, answer: answer, sources: chunks.map { |c| format_source(c) }, metadata: (chunks, score, latency_ms) } rescue StandardError => e { success: false, error: e. } end |
.record_feedback(question:, chunk_ids:, retrieval_score:, synthesized: true, rating: nil) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/legion/extensions/knowledge/runners/query.rb', line 55 def record_feedback(question:, chunk_ids:, retrieval_score:, synthesized: true, rating: nil) question_hash = ::Digest::SHA256.hexdigest(question.to_s)[0, 16] emit_feedback_event( question_hash: question_hash, chunk_ids: chunk_ids, retrieval_score: retrieval_score, synthesized: synthesized, rating: ) { success: true, question_hash: question_hash, rating: } rescue StandardError => e { success: false, error: e. } end |
.retrieve(question:, top_k: nil) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/legion/extensions/knowledge/runners/query.rb', line 42 def retrieve(question:, top_k: nil) resolved_k = top_k || settings_top_k || 5 chunks = retrieve_chunks(question, resolved_k) { success: true, sources: chunks.map { |c| format_source(c) }, metadata: (chunks, average_score(chunks)) } rescue StandardError => e { success: false, error: e. } end |