Class: Woods::Evaluation::QuerySet
- Inherits:
-
Object
- Object
- Woods::Evaluation::QuerySet
- Defined in:
- lib/woods/evaluation/query_set.rb
Overview
Manages a set of evaluation queries with expected results.
Each query has a natural language question, a list of expected unit identifiers (ground truth), an intent classification, scope, and tags for filtering. QuerySets can be loaded from and saved to JSON files.
Defined Under Namespace
Classes: Query
Constant Summary collapse
- VALID_INTENTS =
%i[lookup trace explain compare].freeze
- VALID_SCOPES =
%i[specific bounded broad].freeze
Instance Attribute Summary collapse
-
#queries ⇒ Array<Query>
readonly
The queries in this set.
Class Method Summary collapse
-
.load(path) ⇒ QuerySet
Load a QuerySet from a JSON file.
Instance Method Summary collapse
-
#add(query) ⇒ void
Add a query to this set.
-
#filter(intent: nil, scope: nil, tags: nil) ⇒ Array<Query>
Filter queries by intent, scope, or tags.
-
#initialize(queries: []) ⇒ QuerySet
constructor
Initialize a QuerySet with an array of queries.
-
#save(path) ⇒ void
Save this QuerySet to a JSON file.
-
#size ⇒ Integer
Number of queries in this set.
Constructor Details
#initialize(queries: []) ⇒ QuerySet
Initialize a QuerySet with an array of queries.
40 41 42 |
# File 'lib/woods/evaluation/query_set.rb', line 40 def initialize(queries: []) @queries = queries end |
Instance Attribute Details
#queries ⇒ Array<Query> (readonly)
Returns The queries in this set.
35 36 37 |
# File 'lib/woods/evaluation/query_set.rb', line 35 def queries @queries end |
Class Method Details
.load(path) ⇒ QuerySet
Load a QuerySet from a JSON file.
49 50 51 52 53 54 55 56 57 |
# File 'lib/woods/evaluation/query_set.rb', line 49 def self.load(path) data = JSON.parse(File.read(path)) queries = data.fetch('queries', []).map { |q| parse_query(q) } new(queries: queries) rescue JSON::ParserError => e raise Woods::Error, "Invalid JSON in query set: #{e.}" rescue Errno::ENOENT => e raise Woods::Error, "Query set file not found: #{e.}" end |
Instance Method Details
#add(query) ⇒ void
This method returns an undefined value.
Add a query to this set.
89 90 91 92 |
# File 'lib/woods/evaluation/query_set.rb', line 89 def add(query) validate_query!(query) @queries << query end |
#filter(intent: nil, scope: nil, tags: nil) ⇒ Array<Query>
Filter queries by intent, scope, or tags.
76 77 78 79 80 81 82 |
# File 'lib/woods/evaluation/query_set.rb', line 76 def filter(intent: nil, scope: nil, tags: nil) result = queries result = result.select { |q| q.intent == intent } if intent result = result.select { |q| q.scope == scope } if scope result = result.select { |q| (q. & ).any? } if result end |
#save(path) ⇒ void
This method returns an undefined value.
Save this QuerySet to a JSON file.
63 64 65 66 67 68 |
# File 'lib/woods/evaluation/query_set.rb', line 63 def save(path) data = { 'queries' => queries.map { |q| serialize_query(q) } } File.write(path, JSON.pretty_generate(data)) end |
#size ⇒ Integer
Number of queries in this set.
97 98 99 |
# File 'lib/woods/evaluation/query_set.rb', line 97 def size @queries.size end |