Class: SmartBrain::Adapters::SmartRag::HttpClient

Inherits:
Object
  • Object
show all
Includes:
ScopeFilter
Defined in:
lib/smart_brain/adapters/smart_rag/http_client.rb

Instance Method Summary collapse

Constructor Details

#initialize(transport:, timeout_seconds: 2, scope_mapper: nil, fail_closed: true) ⇒ HttpClient

Returns a new instance of HttpClient.



11
12
13
14
15
16
# File 'lib/smart_brain/adapters/smart_rag/http_client.rb', line 11

def initialize(transport:, timeout_seconds: 2, scope_mapper: nil, fail_closed: true)
  @transport = transport
  @timeout_seconds = timeout_seconds
  @scope_mapper = scope_mapper
  @fail_closed = fail_closed
end

Instance Method Details

#retrieve(plan) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/smart_brain/adapters/smart_rag/http_client.rb', line 18

def retrieve(plan)
  started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC)
  scoped_plan, required, ignored, warnings = prepare_scoped_plan(plan)
  return scope_failure_pack(plan, ignored, warnings, prefix: 'scope-blocked') unless scoped_plan

  raw = transport.call(scoped_plan, timeout_seconds: timeout_seconds)
  pack = build_pack(raw: raw, request_id: plan[:request_id], took_ms: elapsed_ms(started_at))
  enforce_scope_confirmation(pack, required: required, ignored: ignored, warnings: warnings)
rescue Timeout::Error
  {
    version: '0.1',
    request_id: plan[:request_id],
    plan_id: "timeout-#{plan[:request_id]}",
    generated_at: Time.now.utc.iso8601,
    evidences: [],
    stats: { candidates: 0, returned: 0, took_ms: elapsed_ms(started_at) },
    explain: { ignored_fields: [] },
    warnings: ['smart_rag timeout; fallback to memory-only evidence']
  }
end