diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/qdrant.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/qdrant.json index c94f781ae07a8..f745e7a7689d4 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/qdrant.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/qdrant.json @@ -28,10 +28,12 @@ "configuration": { "index": 1, "kind": "property", "displayName": "Configuration", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.qdrant.QdrantConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "The configuration;" }, "host": { "index": 2, "kind": "property", "displayName": "Host", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "localhost", "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "The host to connect to." }, "lazyStartProducer": { "index": 3, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, - "port": { "index": 4, "kind": "property", "displayName": "Port", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 6334, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "The port to connect to." }, - "timeout": { "index": 5, "kind": "property", "displayName": "Timeout", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.time.Duration", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Sets a default timeout for all requests" }, - "tls": { "index": 6, "kind": "property", "displayName": "Tls", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Whether the client uses Transport Layer Security (TLS) to secure communications" }, - "autowiredEnabled": { "index": 7, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc." } + "maxResults": { "index": 4, "kind": "property", "displayName": "Max Results", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 3, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Max results for similarity search" }, + "port": { "index": 5, "kind": "property", "displayName": "Port", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 6334, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "The port to connect to." }, + "timeout": { "index": 6, "kind": "property", "displayName": "Timeout", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.time.Duration", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Sets a default timeout for all requests" }, + "tls": { "index": 7, "kind": "property", "displayName": "Tls", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Whether the client uses Transport Layer Security (TLS) to secure communications" }, + "autowiredEnabled": { "index": 8, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc." }, + "filter": { "index": 9, "kind": "property", "displayName": "Filter", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "io.qdrant.client.grpc.Points.Filter", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Filter of type io.qdrant.client.grpc.Points.Points.Filter for similarity search. This is for advanced usage." } }, "headers": { "CamelQdrantAction": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "enum": [ "CREATE_COLLECTION", "DELETE_COLLECTION", "UPSERT", "RETRIEVE", "DELETE", "COLLECTION_INFO" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The action to be performed.", "constantName": "org.apache.camel.component.qdrant.Qdrant$Headers#ACTION" }, @@ -49,9 +51,11 @@ "collection": { "index": 0, "kind": "path", "displayName": "Collection", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The collection Name" }, "apiKey": { "index": 1, "kind": "parameter", "displayName": "Api Key", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Sets the API key to use for authentication" }, "host": { "index": 2, "kind": "parameter", "displayName": "Host", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "localhost", "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "The host to connect to." }, - "port": { "index": 3, "kind": "parameter", "displayName": "Port", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 6334, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "The port to connect to." }, - "timeout": { "index": 4, "kind": "parameter", "displayName": "Timeout", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.time.Duration", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Sets a default timeout for all requests" }, - "tls": { "index": 5, "kind": "parameter", "displayName": "Tls", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Whether the client uses Transport Layer Security (TLS) to secure communications" }, - "lazyStartProducer": { "index": 6, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." } + "maxResults": { "index": 3, "kind": "parameter", "displayName": "Max Results", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 3, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Max results for similarity search" }, + "port": { "index": 4, "kind": "parameter", "displayName": "Port", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 6334, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "The port to connect to." }, + "timeout": { "index": 5, "kind": "parameter", "displayName": "Timeout", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.time.Duration", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Sets a default timeout for all requests" }, + "tls": { "index": 6, "kind": "parameter", "displayName": "Tls", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Whether the client uses Transport Layer Security (TLS) to secure communications" }, + "lazyStartProducer": { "index": 7, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, + "filter": { "index": 8, "kind": "parameter", "displayName": "Filter", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "io.qdrant.client.grpc.Points.Filter", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Filter of type io.qdrant.client.grpc.Points.Points.Filter for similarity search. This is for advanced usage." } } } diff --git a/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantComponentConfigurer.java b/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantComponentConfigurer.java index cf2ec7ae50e2c..48b0a0ca50ad1 100644 --- a/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantComponentConfigurer.java +++ b/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantComponentConfigurer.java @@ -35,9 +35,12 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj case "autowiredenabled": case "autowiredEnabled": target.setAutowiredEnabled(property(camelContext, boolean.class, value)); return true; case "configuration": target.setConfiguration(property(camelContext, org.apache.camel.component.qdrant.QdrantConfiguration.class, value)); return true; + case "filter": getOrCreateConfiguration(target).setFilter(property(camelContext, io.qdrant.client.grpc.Points.Filter.class, value)); return true; case "host": getOrCreateConfiguration(target).setHost(property(camelContext, java.lang.String.class, value)); return true; case "lazystartproducer": case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true; + case "maxresults": + case "maxResults": getOrCreateConfiguration(target).setMaxResults(property(camelContext, int.class, value)); return true; case "port": getOrCreateConfiguration(target).setPort(property(camelContext, int.class, value)); return true; case "timeout": getOrCreateConfiguration(target).setTimeout(property(camelContext, java.time.Duration.class, value)); return true; case "tls": getOrCreateConfiguration(target).setTls(property(camelContext, boolean.class, value)); return true; @@ -45,6 +48,11 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj } } + @Override + public String[] getAutowiredNames() { + return new String[]{"filter"}; + } + @Override public Class getOptionType(String name, boolean ignoreCase) { switch (ignoreCase ? name.toLowerCase() : name) { @@ -53,9 +61,12 @@ public Class getOptionType(String name, boolean ignoreCase) { case "autowiredenabled": case "autowiredEnabled": return boolean.class; case "configuration": return org.apache.camel.component.qdrant.QdrantConfiguration.class; + case "filter": return io.qdrant.client.grpc.Points.Filter.class; case "host": return java.lang.String.class; case "lazystartproducer": case "lazyStartProducer": return boolean.class; + case "maxresults": + case "maxResults": return int.class; case "port": return int.class; case "timeout": return java.time.Duration.class; case "tls": return boolean.class; @@ -72,9 +83,12 @@ public Object getOptionValue(Object obj, String name, boolean ignoreCase) { case "autowiredenabled": case "autowiredEnabled": return target.isAutowiredEnabled(); case "configuration": return target.getConfiguration(); + case "filter": return getOrCreateConfiguration(target).getFilter(); case "host": return getOrCreateConfiguration(target).getHost(); case "lazystartproducer": case "lazyStartProducer": return target.isLazyStartProducer(); + case "maxresults": + case "maxResults": return getOrCreateConfiguration(target).getMaxResults(); case "port": return getOrCreateConfiguration(target).getPort(); case "timeout": return getOrCreateConfiguration(target).getTimeout(); case "tls": return getOrCreateConfiguration(target).isTls(); diff --git a/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantConfigurationConfigurer.java b/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantConfigurationConfigurer.java index b0378fadc87b0..d2340a950b6b1 100644 --- a/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantConfigurationConfigurer.java +++ b/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantConfigurationConfigurer.java @@ -26,7 +26,10 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj case "apikey": case "apiKey": target.setApiKey(property(camelContext, java.lang.String.class, value)); return true; case "client": target.setClient(property(camelContext, io.qdrant.client.QdrantClient.class, value)); return true; + case "filter": target.setFilter(property(camelContext, io.qdrant.client.grpc.Points.Filter.class, value)); return true; case "host": target.setHost(property(camelContext, java.lang.String.class, value)); return true; + case "maxresults": + case "maxResults": target.setMaxResults(property(camelContext, int.class, value)); return true; case "port": target.setPort(property(camelContext, int.class, value)); return true; case "timeout": target.setTimeout(property(camelContext, java.time.Duration.class, value)); return true; case "tls": target.setTls(property(camelContext, boolean.class, value)); return true; @@ -40,7 +43,10 @@ public Class getOptionType(String name, boolean ignoreCase) { case "apikey": case "apiKey": return java.lang.String.class; case "client": return io.qdrant.client.QdrantClient.class; + case "filter": return io.qdrant.client.grpc.Points.Filter.class; case "host": return java.lang.String.class; + case "maxresults": + case "maxResults": return int.class; case "port": return int.class; case "timeout": return java.time.Duration.class; case "tls": return boolean.class; @@ -55,7 +61,10 @@ public Object getOptionValue(Object obj, String name, boolean ignoreCase) { case "apikey": case "apiKey": return target.getApiKey(); case "client": return target.getClient(); + case "filter": return target.getFilter(); case "host": return target.getHost(); + case "maxresults": + case "maxResults": return target.getMaxResults(); case "port": return target.getPort(); case "timeout": return target.getTimeout(); case "tls": return target.isTls(); diff --git a/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantEndpointConfigurer.java b/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantEndpointConfigurer.java index 150fb512e71e1..f4ea5e7deb3fc 100644 --- a/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantEndpointConfigurer.java +++ b/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantEndpointConfigurer.java @@ -25,9 +25,12 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj switch (ignoreCase ? name.toLowerCase() : name) { case "apikey": case "apiKey": target.getConfiguration().setApiKey(property(camelContext, java.lang.String.class, value)); return true; + case "filter": target.getConfiguration().setFilter(property(camelContext, io.qdrant.client.grpc.Points.Filter.class, value)); return true; case "host": target.getConfiguration().setHost(property(camelContext, java.lang.String.class, value)); return true; case "lazystartproducer": case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true; + case "maxresults": + case "maxResults": target.getConfiguration().setMaxResults(property(camelContext, int.class, value)); return true; case "port": target.getConfiguration().setPort(property(camelContext, int.class, value)); return true; case "timeout": target.getConfiguration().setTimeout(property(camelContext, java.time.Duration.class, value)); return true; case "tls": target.getConfiguration().setTls(property(camelContext, boolean.class, value)); return true; @@ -35,14 +38,22 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj } } + @Override + public String[] getAutowiredNames() { + return new String[]{"filter"}; + } + @Override public Class getOptionType(String name, boolean ignoreCase) { switch (ignoreCase ? name.toLowerCase() : name) { case "apikey": case "apiKey": return java.lang.String.class; + case "filter": return io.qdrant.client.grpc.Points.Filter.class; case "host": return java.lang.String.class; case "lazystartproducer": case "lazyStartProducer": return boolean.class; + case "maxresults": + case "maxResults": return int.class; case "port": return int.class; case "timeout": return java.time.Duration.class; case "tls": return boolean.class; @@ -56,9 +67,12 @@ public Object getOptionValue(Object obj, String name, boolean ignoreCase) { switch (ignoreCase ? name.toLowerCase() : name) { case "apikey": case "apiKey": return target.getConfiguration().getApiKey(); + case "filter": return target.getConfiguration().getFilter(); case "host": return target.getConfiguration().getHost(); case "lazystartproducer": case "lazyStartProducer": return target.isLazyStartProducer(); + case "maxresults": + case "maxResults": return target.getConfiguration().getMaxResults(); case "port": return target.getConfiguration().getPort(); case "timeout": return target.getConfiguration().getTimeout(); case "tls": return target.getConfiguration().isTls(); diff --git a/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantEndpointUriFactory.java b/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantEndpointUriFactory.java index 537dd1ba65b41..496c8c5c52e33 100644 --- a/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantEndpointUriFactory.java +++ b/components/camel-ai/camel-qdrant/src/generated/java/org/apache/camel/component/qdrant/QdrantEndpointUriFactory.java @@ -23,11 +23,13 @@ public class QdrantEndpointUriFactory extends org.apache.camel.support.component private static final Set SECRET_PROPERTY_NAMES; private static final Set MULTI_VALUE_PREFIXES; static { - Set props = new HashSet<>(7); + Set props = new HashSet<>(9); props.add("apiKey"); props.add("collection"); + props.add("filter"); props.add("host"); props.add("lazyStartProducer"); + props.add("maxResults"); props.add("port"); props.add("timeout"); props.add("tls"); diff --git a/components/camel-ai/camel-qdrant/src/generated/resources/META-INF/org/apache/camel/component/qdrant/qdrant.json b/components/camel-ai/camel-qdrant/src/generated/resources/META-INF/org/apache/camel/component/qdrant/qdrant.json index c94f781ae07a8..f745e7a7689d4 100644 --- a/components/camel-ai/camel-qdrant/src/generated/resources/META-INF/org/apache/camel/component/qdrant/qdrant.json +++ b/components/camel-ai/camel-qdrant/src/generated/resources/META-INF/org/apache/camel/component/qdrant/qdrant.json @@ -28,10 +28,12 @@ "configuration": { "index": 1, "kind": "property", "displayName": "Configuration", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.qdrant.QdrantConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "The configuration;" }, "host": { "index": 2, "kind": "property", "displayName": "Host", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "localhost", "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "The host to connect to." }, "lazyStartProducer": { "index": 3, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, - "port": { "index": 4, "kind": "property", "displayName": "Port", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 6334, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "The port to connect to." }, - "timeout": { "index": 5, "kind": "property", "displayName": "Timeout", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.time.Duration", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Sets a default timeout for all requests" }, - "tls": { "index": 6, "kind": "property", "displayName": "Tls", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Whether the client uses Transport Layer Security (TLS) to secure communications" }, - "autowiredEnabled": { "index": 7, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc." } + "maxResults": { "index": 4, "kind": "property", "displayName": "Max Results", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 3, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Max results for similarity search" }, + "port": { "index": 5, "kind": "property", "displayName": "Port", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 6334, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "The port to connect to." }, + "timeout": { "index": 6, "kind": "property", "displayName": "Timeout", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.time.Duration", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Sets a default timeout for all requests" }, + "tls": { "index": 7, "kind": "property", "displayName": "Tls", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Whether the client uses Transport Layer Security (TLS) to secure communications" }, + "autowiredEnabled": { "index": 8, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc." }, + "filter": { "index": 9, "kind": "property", "displayName": "Filter", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "io.qdrant.client.grpc.Points.Filter", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Filter of type io.qdrant.client.grpc.Points.Points.Filter for similarity search. This is for advanced usage." } }, "headers": { "CamelQdrantAction": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "enum": [ "CREATE_COLLECTION", "DELETE_COLLECTION", "UPSERT", "RETRIEVE", "DELETE", "COLLECTION_INFO" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The action to be performed.", "constantName": "org.apache.camel.component.qdrant.Qdrant$Headers#ACTION" }, @@ -49,9 +51,11 @@ "collection": { "index": 0, "kind": "path", "displayName": "Collection", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The collection Name" }, "apiKey": { "index": 1, "kind": "parameter", "displayName": "Api Key", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Sets the API key to use for authentication" }, "host": { "index": 2, "kind": "parameter", "displayName": "Host", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "localhost", "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "The host to connect to." }, - "port": { "index": 3, "kind": "parameter", "displayName": "Port", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 6334, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "The port to connect to." }, - "timeout": { "index": 4, "kind": "parameter", "displayName": "Timeout", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.time.Duration", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Sets a default timeout for all requests" }, - "tls": { "index": 5, "kind": "parameter", "displayName": "Tls", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Whether the client uses Transport Layer Security (TLS) to secure communications" }, - "lazyStartProducer": { "index": 6, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." } + "maxResults": { "index": 3, "kind": "parameter", "displayName": "Max Results", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 3, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Max results for similarity search" }, + "port": { "index": 4, "kind": "parameter", "displayName": "Port", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 6334, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "The port to connect to." }, + "timeout": { "index": 5, "kind": "parameter", "displayName": "Timeout", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.time.Duration", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Sets a default timeout for all requests" }, + "tls": { "index": 6, "kind": "parameter", "displayName": "Tls", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Whether the client uses Transport Layer Security (TLS) to secure communications" }, + "lazyStartProducer": { "index": 7, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing." }, + "filter": { "index": 8, "kind": "parameter", "displayName": "Filter", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "io.qdrant.client.grpc.Points.Filter", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.qdrant.QdrantConfiguration", "configurationField": "configuration", "description": "Filter of type io.qdrant.client.grpc.Points.Points.Filter for similarity search. This is for advanced usage." } } } diff --git a/components/camel-ai/camel-qdrant/src/main/java/org/apache/camel/component/qdrant/QdrantAction.java b/components/camel-ai/camel-qdrant/src/main/java/org/apache/camel/component/qdrant/QdrantAction.java index c1b0231c5cda4..16db1de91da72 100644 --- a/components/camel-ai/camel-qdrant/src/main/java/org/apache/camel/component/qdrant/QdrantAction.java +++ b/components/camel-ai/camel-qdrant/src/main/java/org/apache/camel/component/qdrant/QdrantAction.java @@ -23,4 +23,5 @@ public enum QdrantAction { RETRIEVE, DELETE, COLLECTION_INFO, + SIMILARITY_SEARCH } diff --git a/components/camel-ai/camel-qdrant/src/main/java/org/apache/camel/component/qdrant/QdrantConfiguration.java b/components/camel-ai/camel-qdrant/src/main/java/org/apache/camel/component/qdrant/QdrantConfiguration.java index 19ec5059420e2..41e5297dc045c 100644 --- a/components/camel-ai/camel-qdrant/src/main/java/org/apache/camel/component/qdrant/QdrantConfiguration.java +++ b/components/camel-ai/camel-qdrant/src/main/java/org/apache/camel/component/qdrant/QdrantConfiguration.java @@ -19,6 +19,7 @@ import java.time.Duration; import io.qdrant.client.QdrantClient; +import io.qdrant.client.grpc.Points; import org.apache.camel.RuntimeCamelException; import org.apache.camel.spi.Configurer; import org.apache.camel.spi.Metadata; @@ -51,6 +52,13 @@ public class QdrantConfiguration implements Cloneable { @Metadata(autowired = true) private QdrantClient client; + @UriParam(defaultValue = "3") + private int maxResults = 3; + + @UriParam(label = "advanced") + @Metadata(autowired = true) + private Points.Filter filter; + public String getHost() { return host; } @@ -117,6 +125,32 @@ public void setClient(QdrantClient client) { this.client = client; } + public int getMaxResults() { + return maxResults; + } + + /** + * Max results for similarity search + * + * @param maxResults + */ + public void setMaxResults(int maxResults) { + this.maxResults = maxResults; + } + + public Points.Filter getFilter() { + return filter; + } + + /** + * Filter of type io.qdrant.client.grpc.Points.Points.Filter for similarity search. This is for advanced usage. + * + * @param filter + */ + public void setFilter(Points.Filter filter) { + this.filter = filter; + } + // ************************ // // Clone diff --git a/components/camel-ai/camel-qdrant/src/main/java/org/apache/camel/component/qdrant/QdrantProducer.java b/components/camel-ai/camel-qdrant/src/main/java/org/apache/camel/component/qdrant/QdrantProducer.java index cd713303395fd..d44f395bd4f3c 100644 --- a/components/camel-ai/camel-qdrant/src/main/java/org/apache/camel/component/qdrant/QdrantProducer.java +++ b/components/camel-ai/camel-qdrant/src/main/java/org/apache/camel/component/qdrant/QdrantProducer.java @@ -16,6 +16,7 @@ */ package org.apache.camel.component.qdrant; +import java.time.Duration; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; @@ -36,6 +37,9 @@ import org.apache.camel.NoSuchHeaderException; import org.apache.camel.support.DefaultAsyncProducer; +import static io.qdrant.client.QueryFactory.nearest; +import static io.qdrant.client.WithPayloadSelectorFactory.enable; + public class QdrantProducer extends DefaultAsyncProducer { private QdrantClient client; private ExecutorService executor; @@ -80,22 +84,16 @@ public boolean process(Exchange exchange, AsyncCallback callback) { throw new NoSuchHeaderException("The action is a required header", exchange, Qdrant.Headers.ACTION); } - switch (action) { - case CREATE_COLLECTION: - return createCollection(exchange, callback); - case DELETE_COLLECTION: - return deleteCollection(exchange, callback); - case UPSERT: - return upsert(exchange, callback); - case RETRIEVE: - return retrieve(exchange, callback); - case DELETE: - return delete(exchange, callback); - case COLLECTION_INFO: - return collectionInfo(exchange, callback); - default: - throw new UnsupportedOperationException("Unsupported action: " + action.name()); - } + return switch (action) { + case CREATE_COLLECTION -> createCollection(exchange, callback); + case DELETE_COLLECTION -> deleteCollection(exchange, callback); + case UPSERT -> upsert(exchange, callback); + case RETRIEVE -> retrieve(exchange, callback); + case DELETE -> delete(exchange, callback); + case SIMILARITY_SEARCH -> similaritySearch(exchange, callback); + case COLLECTION_INFO -> collectionInfo(exchange, callback); + default -> throw new UnsupportedOperationException("Unsupported action: " + action.name()); + }; } catch (Exception e) { exchange.setException(e); @@ -257,6 +255,48 @@ private boolean deleteCollection(Exchange exchange, AsyncCallback callback) { return false; } + private boolean similaritySearch(Exchange exchange, AsyncCallback callback) throws Exception { + final String collection = getEndpoint().getCollection(); + // Vector List + final Message in = exchange.getMessage(); + final List vectors = in.getMandatoryBody(List.class); + final int maxResults = getEndpoint().getConfiguration().getMaxResults(); + final Points.Filter filter = getEndpoint().getConfiguration().getFilter(); + final Duration timeout = getEndpoint().getConfiguration().getTimeout(); + + var queryRequestBuilder = Points.QueryPoints.newBuilder() + .setCollectionName(collection) + .setQuery(nearest(vectors)) + .setLimit(maxResults) + .setWithVectors(WithVectorsSelectorFactory.enable(in.getHeader( + Qdrant.Headers.INCLUDE_VECTORS, + Qdrant.Headers.DEFAULT_INCLUDE_VECTORS, + boolean.class))) + .setWithPayload(enable(in.getHeader( + Qdrant.Headers.INCLUDE_PAYLOAD, + Qdrant.Headers.DEFAULT_INCLUDE_PAYLOAD, + boolean.class))); + + if (filter != null) { + queryRequestBuilder.setFilter(filter); + } + + call( + this.client.queryAsync(queryRequestBuilder.build(), timeout), + (r, t) -> { + if (t != null) { + exchange.setException(new QdrantActionException(QdrantAction.SIMILARITY_SEARCH, t)); + } else { + in.setBody(new ArrayList<>(r)); + in.setHeader(Qdrant.Headers.SIZE, r.size()); + } + + callback.done(false); + }); + + return false; + } + // *************************************** // // Helpers diff --git a/components/camel-ai/camel-qdrant/src/test/java/org/apache/camel/component/qdrant/it/QdrantComponentIT.java b/components/camel-ai/camel-qdrant/src/test/java/org/apache/camel/component/qdrant/it/QdrantComponentIT.java index 9af813ff2e34e..73f4b9f745d93 100644 --- a/components/camel-ai/camel-qdrant/src/test/java/org/apache/camel/component/qdrant/it/QdrantComponentIT.java +++ b/components/camel-ai/camel-qdrant/src/test/java/org/apache/camel/component/qdrant/it/QdrantComponentIT.java @@ -37,6 +37,8 @@ import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; import static org.assertj.core.api.Assertions.assertThat; @@ -137,8 +139,50 @@ public void retrieve() { }); } - @Test + @ParameterizedTest + @EnumSource(TestData.class) @Order(5) + public void upsertOtherVectors(TestData testData) { + Exchange result = fluentTemplate.to("qdrant:testComponent") + .withHeader(Qdrant.Headers.ACTION, QdrantAction.UPSERT) + .withBody( + Points.PointStruct.newBuilder() + .setId(PointIdFactory.id(testData.getId())) + .setVectors(VectorsFactory.vectors(testData.getVectors())) + .build()) + .request(Exchange.class); + + assertThat(result).isNotNull(); + assertThat(result.getException()).isNull(); + + assertThat(result.getIn().getHeaders()).hasEntrySatisfying(Qdrant.Headers.OPERATION_ID, v -> assertThat(v).isNotNull()); + assertThat(result.getIn().getHeaders()).hasEntrySatisfying(Qdrant.Headers.OPERATION_STATUS, + v -> assertThat(v).isEqualTo(Points.UpdateStatus.Completed.name())); + assertThat(result.getIn().getHeaders()).hasEntrySatisfying(Qdrant.Headers.OPERATION_STATUS_VALUE, + v -> assertThat(v).isEqualTo(Points.UpdateStatus.Completed.getNumber())); + } + + @Test + @Order(6) + public void similaritySeach() { + Exchange result = fluentTemplate.to("qdrant:testComponent") + .withHeader(Qdrant.Headers.ACTION, QdrantAction.SIMILARITY_SEARCH) + .withHeader(Qdrant.Headers.INCLUDE_VECTORS, true) + .withHeader(Qdrant.Headers.INCLUDE_PAYLOAD, true) + .withBody(List.of(0.75f, 0.65f)) + .request(Exchange.class); + + assertThat(result).isNotNull(); + assertThat(result.getException()).isNull(); + + assertThat(result.getIn().getBody()).isInstanceOfSatisfying(Collection.class, c -> { + assertThat(c).hasSize(3); + assertThat(c).hasOnlyElementsOfType(Points.ScoredPoint.class); + }); + } + + @Test + @Order(7) public void delete() { Exchange result = fluentTemplate.to("qdrant:testComponent") .withHeader(Qdrant.Headers.ACTION, QdrantAction.DELETE) @@ -160,7 +204,7 @@ public void delete() { } @Test - @Order(6) + @Order(8) public void retrieveAfterDelete() { Exchange result = fluentTemplate.to("qdrant:testComponent") .withHeader(Qdrant.Headers.ACTION, QdrantAction.RETRIEVE) @@ -175,4 +219,29 @@ public void retrieveAfterDelete() { }); } + // Enum to provide test data + public enum TestData { + VECTOR_1(9, List.of(0.8f, 0.6f)), + VECTOR_2(10, List.of(0.1f, 0.9f)), + VECTOR_3(11, List.of(0.7f, 0.7f)), + VECTOR_4(12, List.of(-0.3f, -0.9f)), + VECTOR_5(13, List.of(1.2f, 0.8f)); + + private final int id; + private final List vectors; + + TestData(int id, List vectors) { + this.id = id; + this.vectors = vectors; + } + + public int getId() { + return id; + } + + public List getVectors() { + return vectors; + } + } + } diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/QdrantComponentBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/QdrantComponentBuilderFactory.java index 44afbae2f2267..629c6b1998a00 100644 --- a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/QdrantComponentBuilderFactory.java +++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/QdrantComponentBuilderFactory.java @@ -124,6 +124,23 @@ default QdrantComponentBuilder lazyStartProducer(boolean lazyStartProducer) { } + /** + * Max results for similarity search. + * + * The option is a: <code>int</code> type. + * + * Default: 3 + * Group: producer + * + * @param maxResults the value to set + * @return the dsl builder + */ + default QdrantComponentBuilder maxResults(int maxResults) { + doSetProperty("maxResults", maxResults); + return this; + } + + /** * The port to connect to. * @@ -194,6 +211,23 @@ default QdrantComponentBuilder autowiredEnabled(boolean autowiredEnabled) { doSetProperty("autowiredEnabled", autowiredEnabled); return this; } + + /** + * Filter of type io.qdrant.client.grpc.Points.Points.Filter for + * similarity search. This is for advanced usage. + * + * The option is a: + * <code>io.qdrant.client.grpc.Points.Filter</code> type. + * + * Group: advanced + * + * @param filter the value to set + * @return the dsl builder + */ + default QdrantComponentBuilder filter(io.qdrant.client.grpc.Points.Filter filter) { + doSetProperty("filter", filter); + return this; + } } class QdrantComponentBuilderImpl @@ -219,10 +253,12 @@ protected boolean setPropertyOnComponent( case "configuration": ((QdrantComponent) component).setConfiguration((org.apache.camel.component.qdrant.QdrantConfiguration) value); return true; case "host": getOrCreateConfiguration((QdrantComponent) component).setHost((java.lang.String) value); return true; case "lazyStartProducer": ((QdrantComponent) component).setLazyStartProducer((boolean) value); return true; + case "maxResults": getOrCreateConfiguration((QdrantComponent) component).setMaxResults((int) value); return true; case "port": getOrCreateConfiguration((QdrantComponent) component).setPort((int) value); return true; case "timeout": getOrCreateConfiguration((QdrantComponent) component).setTimeout((java.time.Duration) value); return true; case "tls": getOrCreateConfiguration((QdrantComponent) component).setTls((boolean) value); return true; case "autowiredEnabled": ((QdrantComponent) component).setAutowiredEnabled((boolean) value); return true; + case "filter": getOrCreateConfiguration((QdrantComponent) component).setFilter((io.qdrant.client.grpc.Points.Filter) value); return true; default: return false; } } diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/QdrantEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/QdrantEndpointBuilderFactory.java index 7f6474e1dd58f..c87a88f790409 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/QdrantEndpointBuilderFactory.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/QdrantEndpointBuilderFactory.java @@ -73,6 +73,36 @@ default QdrantEndpointBuilder host(String host) { doSetProperty("host", host); return this; } + /** + * Max results for similarity search. + * + * The option is a: int type. + * + * Default: 3 + * Group: producer + * + * @param maxResults the value to set + * @return the dsl builder + */ + default QdrantEndpointBuilder maxResults(int maxResults) { + doSetProperty("maxResults", maxResults); + return this; + } + /** + * Max results for similarity search. + * + * The option will be converted to a int type. + * + * Default: 3 + * Group: producer + * + * @param maxResults the value to set + * @return the dsl builder + */ + default QdrantEndpointBuilder maxResults(String maxResults) { + doSetProperty("maxResults", maxResults); + return this; + } /** * The port to connect to. * @@ -222,6 +252,38 @@ default AdvancedQdrantEndpointBuilder lazyStartProducer(String lazyStartProducer doSetProperty("lazyStartProducer", lazyStartProducer); return this; } + /** + * Filter of type io.qdrant.client.grpc.Points.Points.Filter for + * similarity search. This is for advanced usage. + * + * The option is a: io.qdrant.client.grpc.Points.Filter + * type. + * + * Group: advanced + * + * @param filter the value to set + * @return the dsl builder + */ + default AdvancedQdrantEndpointBuilder filter(io.qdrant.client.grpc.Points.Filter filter) { + doSetProperty("filter", filter); + return this; + } + /** + * Filter of type io.qdrant.client.grpc.Points.Points.Filter for + * similarity search. This is for advanced usage. + * + * The option will be converted to a + * io.qdrant.client.grpc.Points.Filter type. + * + * Group: advanced + * + * @param filter the value to set + * @return the dsl builder + */ + default AdvancedQdrantEndpointBuilder filter(String filter) { + doSetProperty("filter", filter); + return this; + } } public interface QdrantBuilders {