Module: HTM::LongTermMemory::VectorSearch
- Included in:
- HTM::LongTermMemory
- Defined in:
- lib/htm/long_term_memory/vector_search.rb
Overview
Vector similarity search using pgvector
Performs semantic search by:
-
Generating query embedding client-side
-
Using pgvector cosine distance for similarity ranking
-
Supporting timeframe and metadata filtering
Results are cached for performance.
Security: All queries use parameterized placeholders to prevent SQL injection.
Constant Summary collapse
- MAX_VECTOR_LIMIT =
Maximum results to prevent DoS via unbounded queries
1000
Instance Method Summary collapse
-
#search(timeframe:, query:, limit:, embedding_service:, metadata: {}) ⇒ Array<Hash>
Vector similarity search.
Instance Method Details
#search(timeframe:, query:, limit:, embedding_service:, metadata: {}) ⇒ Array<Hash>
Vector similarity search
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/htm/long_term_memory/vector_search.rb', line 29 def search(timeframe:, query:, limit:, embedding_service:, metadata: {}) # Enforce limit to prevent DoS safe_limit = limit.to_i.clamp(1, MAX_VECTOR_LIMIT) start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) result = @cache.fetch(:search, timeframe, query, safe_limit, ) do search_uncached( timeframe: timeframe, query: query, limit: safe_limit, embedding_service: , metadata: ) end elapsed_ms = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time) * 1000).round HTM::Telemetry.search_latency.record(elapsed_ms, attributes: { 'strategy' => 'vector' }) result end |