From 29f5ef0c48b03f6fae1f4d4e76d57f3c3bab380f Mon Sep 17 00:00:00 2001 From: Augustas Date: Mon, 8 Sep 2025 13:06:49 +0300 Subject: [PATCH] allow passing additional filters to query agent --- src/query/collection.ts | 10 +++++++++- src/query/filter.ts | 24 ++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/query/filter.ts diff --git a/src/query/collection.ts b/src/query/collection.ts index e1c4ffe..3a2984f 100644 --- a/src/query/collection.ts +++ b/src/query/collection.ts @@ -1,3 +1,6 @@ +import { FilterValue } from "weaviate-client"; +import { mapFilter } from "./filter.js"; + export const mapCollections = ( collections: (string | QueryAgentCollectionConfig)[], ) => @@ -6,9 +9,12 @@ export const mapCollections = ( ? collection : { name: collection.name, + tenant: collection.tenant, view_properties: collection.viewProperties, target_vector: collection.targetVector, - tenant: collection.tenant, + additional_filters: collection.additionalFilters + ? mapFilter(collection.additionalFilters) + : undefined, }, ); @@ -24,4 +30,6 @@ export type QueryAgentCollectionConfig = { viewProperties?: string[]; /** Target vector for the query if a collection uses named vector. */ targetVector?: string | string[]; + /** Filters to apply to apply when query is executed, in addition to filters selected by the Query Agent. */ + additionalFilters?: FilterValue; }; diff --git a/src/query/filter.ts b/src/query/filter.ts new file mode 100644 index 0000000..2c58616 --- /dev/null +++ b/src/query/filter.ts @@ -0,0 +1,24 @@ +import { FilterValue, Operator } from "weaviate-client"; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const mapFilter = (filters: FilterValue): any => + filters.filters + ? { + combine: mapFilterCombineOperator(filters.operator), + filters: filters.filters.map(mapFilter), + } + : { + ...filters, + target: filters.target?.property ?? filters.target, + }; + +const mapFilterCombineOperator = (operator: Operator) => { + switch (operator) { + case "And": + return "and"; + case "Or": + return "or"; + default: + return operator; + } +};