diff --git a/.flake8 b/.flake8 index 762939f82..2208e5a09 100644 --- a/.flake8 +++ b/.flake8 @@ -14,6 +14,7 @@ exclude = weaviate/collections/classes/orm.py, weaviate/proto/**/*.py, build/ + tools/stubs.py, ignore = D100, D101, D102, D103, D104, D105, D107, E203, E266, E501, E704, E731, W503, DOC301 per-file-ignores = weaviate/cluster/types.py: A005 @@ -21,6 +22,7 @@ per-file-ignores = weaviate/collections/collections/__init__.py: A005 weaviate/collections/__init__.py: A005 weaviate/debug/types.py: A005 + weaviate/collections/tenants/types.py: A005 weaviate/types.py: A005 weaviate/warnings.py: A005 test/*: D100, D101, D102, D103, D104, D105, D107, PYD001 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 74d909b29..5d37d5f4a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,10 +1,17 @@ exclude: ^proto/ repos: -- repo: https://github.com/psf/black-pre-commit-mirror - rev: 24.10.0 - hooks: - - id: black - language_version: python3.12 +- repo: local + hooks: + - id: stubs-autogen + name: stubs-autogen + language: system + entry: ./tools/stubs_regen.sh + +- repo: https://github.com/psf/black-pre-commit-mirror + rev: 24.10.0 + hooks: + - id: black + language_version: python3.12 - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.6.0 diff --git a/tools/__init__.py b/tools/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tools/stubs.py b/tools/stubs.py new file mode 100644 index 000000000..a6bc197bf --- /dev/null +++ b/tools/stubs.py @@ -0,0 +1,179 @@ +import ast +import importlib +import inspect +import os +import textwrap +from collections import defaultdict +from typing import Literal, cast + + +class ExecutorTransformer(ast.NodeTransformer): + def __init__(self, colour: Literal["async", "sync"]): + self.colour = colour + self.executor_names = [] + + def visit_ClassDef(self, node): + self.executor_names.append(node.name) + node.bases = self.__parse_generics(node) + node.body = self.__parse_body(node) + node.name = node.name.replace( + "Executor", "" if self.colour == "sync" else self.colour.capitalize() + ) + self.generic_visit(node) + return node + + def __is_overload(self, fn: ast.FunctionDef): + return any(isinstance(d, ast.Name) and d.id == "overload" for d in fn.decorator_list) + + def __parse_body(self, node: ast.ClassDef): + funcs_by_name = defaultdict(list) + for stmt in node.body: + if isinstance(stmt, (ast.FunctionDef, ast.AsyncFunctionDef)): + funcs_by_name[stmt.name].append(stmt) + + new_body: list[ast.stmt] = [] + for stmt in node.body: + if isinstance(stmt, ast.FunctionDef) and stmt.name.startswith("__"): + continue # Skip all dunder methods + if isinstance(stmt, ast.FunctionDef): + overloads = funcs_by_name[stmt.name] + if any(self.__is_overload(f) for f in overloads): + if not self.__is_overload(stmt): + continue # skip the impl + new_body.append(stmt) + return new_body + + def __parse_generics(self, node: ast.ClassDef): + new_bases: list[ast.expr] = [] + for base in node.bases: + if not isinstance(base, ast.Subscript): + continue + if isinstance(base.value, ast.Name) and base.value.id == "Generic": + # This is a generic class + # We need to extract the type arguments + if isinstance(base.slice, ast.Tuple): + # This is a tuple of types + # must remove `ConnectionType` if there + generics = [ + arg.id + for arg in base.slice.elts + if isinstance(arg, ast.Name) + if arg.id != "ConnectionType" + ] + new_bases.append( + ast.Subscript( + value=base.value, + slice=ast.Tuple( + elts=[ast.Name(id=arg) for arg in generics], ctx=ast.Load() + ), + ctx=ast.Load(), + ) + ) + elif isinstance(base.slice, ast.Name): + # This is a single type + if base.slice.id == "ConnectionType": + # We don't want to include ConnectionType + continue + new_bases.append(base) + connection_type = ast.Name(id=self.__which_connection_type(), ctx=ast.Load()) + if len(new_bases) == 0: + # no generics, we need to add the ConnectionType + slice = connection_type + else: + elts: list[ast.expr] = [] + for base in new_bases: + assert isinstance(base, ast.Subscript) + slice = base.slice + assert isinstance(slice, ast.Tuple) + elts.extend(slice.elts) + slice = ast.Tuple(elts=[connection_type, *elts], ctx=ast.Load()) + new_bases.append( + ast.Subscript( + value=ast.Name(id=node.name, ctx=ast.Load()), + slice=slice, + ctx=ast.Load(), + ) + ) + return new_bases + + def __which_connection_type(self): + return "ConnectionAsync" if self.colour == "async" else "ConnectionSync" + + def __extract_inner_return_type(self, node: ast.expr | None) -> ast.expr | None: + # Looking for executor.Result[T] + if ( + isinstance(node, ast.Subscript) + and isinstance(node.value, ast.Attribute) + and isinstance(node.value.value, ast.Name) + and node.value.value.id == "executor" + and node.value.attr == "Result" + ): + # This is executor.Result[...] + return node.slice # Return T + return node # fallback, return original if not matching + + def visit_FunctionDef(self, node): + func_def = ast.AsyncFunctionDef if self.colour == "async" else ast.FunctionDef + new_node = func_def( + name=node.name, + args=node.args, + body=[ast.Expr(value=ast.Constant(value=Ellipsis))], + decorator_list=node.decorator_list, + returns=self.__extract_inner_return_type(node.returns), + type_comment=node.type_comment, + ) + return ast.copy_location(new_node, node) + + +for subdir, dirs, files in os.walk("./weaviate"): + for file in files: + if file != "executor.py": + continue + if "connect" in subdir: + # ignore weaviate/connect/executor.py file + continue + if "collections/collections" in subdir: + # ignore weaviate/collections/collections directory + continue + + mod = os.path.join(subdir, file) + mod = mod[2:] # remove the leading dot and slash + mod = mod[:-3] # remove the .py + mod = mod.replace("/", ".") # convert into pythonic import + + module = importlib.import_module(mod) + source = textwrap.dedent(inspect.getsource(module)) + + colours: list[Literal["sync", "async"]] = ["sync", "async"] + for colour in colours: + tree = ast.parse(source, mode="exec", type_comments=True) + + transformer = ExecutorTransformer(colour) + stubbed = transformer.visit(tree) + + imports = [ + node for node in stubbed.body if isinstance(node, (ast.Import, ast.ImportFrom)) + ] + [ + ast.ImportFrom( + module="weaviate.connect.v4", + names=[ast.alias(name=f"Connection{colour.capitalize()}", asname=None)], + level=0, + ), + ast.ImportFrom( + module=".executor", + names=[ + ast.alias(name=name, asname=None) for name in transformer.executor_names + ], + level=0, + ), + ] + stubbed.body = imports + [ + node for node in stubbed.body if isinstance(node, ast.ClassDef) + ] + ast.fix_missing_locations(stubbed) + + dir = cast(str, module.__package__).replace(".", "/") + file = f"{dir}/{colour}.pyi" if colour == "sync" else f"{dir}/{colour}_.pyi" + with open(file, "w") as f: + print(f"Writing {file}") + f.write(ast.unparse(stubbed)) diff --git a/tools/stubs_regen.sh b/tools/stubs_regen.sh new file mode 100755 index 000000000..65e01c2f4 --- /dev/null +++ b/tools/stubs_regen.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +echo "Regenerating stubs..." + +python3 -m tools.stubs +black ./weaviate + +echo "done" \ No newline at end of file diff --git a/weaviate/backup/async_.pyi b/weaviate/backup/async_.pyi index 4ccdbe879..4cf7bd05e 100644 --- a/weaviate/backup/async_.pyi +++ b/weaviate/backup/async_.pyi @@ -1,32 +1,37 @@ -from typing import Optional, Union, List - -from weaviate.backup.base import _BackupBase -from weaviate.backup.executor import ( +import asyncio +import time +from typing import Generic, Optional, Union, List, Tuple, Dict +from httpx import Response +from weaviate.backup.backup import ( BackupStorage, BackupReturn, BackupStatusReturn, + STORAGE_NAMES, BackupConfigCreate, + BackupStatus, BackupConfigRestore, - _BackupExecutor, ) from weaviate.backup.backup_location import BackupLocationType +from weaviate.connect import executor +from weaviate.connect.v4 import _ExpectedStatusCodes, Connection, ConnectionAsync, ConnectionType +from weaviate.exceptions import ( + WeaviateInvalidInputError, + WeaviateUnsupportedFeatureError, + BackupFailedException, + EmptyResponseException, + BackupCanceledError, +) +from weaviate.util import _capitalize_first_letter, _decode_json_response_dict from weaviate.connect.v4 import ConnectionAsync +from .executor import _BackupExecutor class _BackupAsync(_BackupExecutor[ConnectionAsync]): - """Backup class used to schedule and/or check the status of a backup process of Weaviate objects.""" - - async def cancel( - self, - backup_id: str, - backend: BackupStorage, - backup_location: Optional[BackupLocationType] = None, - ) -> bool: ... async def create( self, backup_id: str, backend: BackupStorage, - include_collections: Optional[Union[List[str], str]] = None, - exclude_collections: Optional[Union[List[str], str]] = None, + include_collections: Union[List[str], str, None] = None, + exclude_collections: Union[List[str], str, None] = None, wait_for_completion: bool = False, config: Optional[BackupConfigCreate] = None, backup_location: Optional[BackupLocationType] = None, @@ -53,3 +58,9 @@ class _BackupAsync(_BackupExecutor[ConnectionAsync]): backend: BackupStorage, backup_location: Optional[BackupLocationType] = None, ) -> BackupStatusReturn: ... + async def cancel( + self, + backup_id: str, + backend: BackupStorage, + backup_location: Optional[BackupLocationType] = None, + ) -> bool: ... diff --git a/weaviate/backup/sync.pyi b/weaviate/backup/sync.pyi index 9571fedcb..d8e704f45 100644 --- a/weaviate/backup/sync.pyi +++ b/weaviate/backup/sync.pyi @@ -1,32 +1,37 @@ -from typing import Optional, Union, List - -from weaviate.backup.base import _BackupBase -from weaviate.backup.executor import ( +import asyncio +import time +from typing import Generic, Optional, Union, List, Tuple, Dict +from httpx import Response +from weaviate.backup.backup import ( BackupStorage, BackupReturn, BackupStatusReturn, + STORAGE_NAMES, BackupConfigCreate, + BackupStatus, BackupConfigRestore, - _BackupExecutor, ) from weaviate.backup.backup_location import BackupLocationType +from weaviate.connect import executor +from weaviate.connect.v4 import _ExpectedStatusCodes, Connection, ConnectionAsync, ConnectionType +from weaviate.exceptions import ( + WeaviateInvalidInputError, + WeaviateUnsupportedFeatureError, + BackupFailedException, + EmptyResponseException, + BackupCanceledError, +) +from weaviate.util import _capitalize_first_letter, _decode_json_response_dict from weaviate.connect.v4 import ConnectionSync +from .executor import _BackupExecutor class _Backup(_BackupExecutor[ConnectionSync]): - """Backup class used to schedule and/or check the status of a backup process of Weaviate objects.""" - - def cancel( - self, - backup_id: str, - backend: BackupStorage, - backup_location: Optional[BackupLocationType] = None, - ) -> bool: ... def create( self, backup_id: str, backend: BackupStorage, - include_collections: Optional[Union[List[str], str]] = None, - exclude_collections: Optional[Union[List[str], str]] = None, + include_collections: Union[List[str], str, None] = None, + exclude_collections: Union[List[str], str, None] = None, wait_for_completion: bool = False, config: Optional[BackupConfigCreate] = None, backup_location: Optional[BackupLocationType] = None, @@ -53,3 +58,9 @@ class _Backup(_BackupExecutor[ConnectionSync]): backend: BackupStorage, backup_location: Optional[BackupLocationType] = None, ) -> BackupStatusReturn: ... + def cancel( + self, + backup_id: str, + backend: BackupStorage, + backup_location: Optional[BackupLocationType] = None, + ) -> bool: ... diff --git a/weaviate/collections/aggregations/executor.py b/weaviate/collections/aggregations/base_executor.py similarity index 100% rename from weaviate/collections/aggregations/executor.py rename to weaviate/collections/aggregations/base_executor.py diff --git a/weaviate/collections/aggregations/hybrid/__init__.py b/weaviate/collections/aggregations/hybrid/__init__.py index 8a93c2ba0..62fdcd833 100644 --- a/weaviate/collections/aggregations/hybrid/__init__.py +++ b/weaviate/collections/aggregations/hybrid/__init__.py @@ -1,3 +1,4 @@ -from .aggregate import _Hybrid, _HybridAsync +from .async_ import _HybridAsync +from .sync import _Hybrid __all__ = ["_Hybrid", "_HybridAsync"] diff --git a/weaviate/collections/aggregations/hybrid/aggregate.pyi b/weaviate/collections/aggregations/hybrid/aggregate.pyi deleted file mode 100644 index 816ae5309..000000000 --- a/weaviate/collections/aggregations/hybrid/aggregate.pyi +++ /dev/null @@ -1,112 +0,0 @@ -from typing import List, Literal, Optional, Union, overload - -from weaviate.collections.aggregations.hybrid.executor import _HybridExecutor -from weaviate.collections.classes.aggregate import ( - PropertiesMetrics, - AggregateReturn, - AggregateGroupByReturn, - GroupByAggregate, -) -from weaviate.collections.classes.filters import _Filters -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import NUMBER - -class _HybridAsync(_HybridExecutor[ConnectionAsync]): - @overload - async def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[List[float]] = None, - query_properties: Optional[List[str]] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - target_vector: Optional[str] = None, - max_vector_distance: Optional[float] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateReturn: ... - @overload - async def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[List[float]] = None, - query_properties: Optional[List[str]] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Union[str, GroupByAggregate], - target_vector: Optional[str] = None, - max_vector_distance: Optional[float] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateGroupByReturn: ... - @overload - async def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[List[float]] = None, - query_properties: Optional[List[str]] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[Union[str, GroupByAggregate]] = None, - target_vector: Optional[str] = None, - max_vector_distance: Optional[float] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... - -class _Hybrid(_HybridExecutor[ConnectionSync]): - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[List[float]] = None, - query_properties: Optional[List[str]] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - target_vector: Optional[str] = None, - max_vector_distance: Optional[float] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateReturn: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[List[float]] = None, - query_properties: Optional[List[str]] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Union[str, GroupByAggregate], - target_vector: Optional[str] = None, - max_vector_distance: Optional[float] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateGroupByReturn: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[List[float]] = None, - query_properties: Optional[List[str]] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[Union[str, GroupByAggregate]] = None, - target_vector: Optional[str] = None, - max_vector_distance: Optional[float] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/hybrid/aggregate.py b/weaviate/collections/aggregations/hybrid/async_.py similarity index 58% rename from weaviate/collections/aggregations/hybrid/aggregate.py rename to weaviate/collections/aggregations/hybrid/async_.py index f5aeb95b4..84dab723b 100644 --- a/weaviate/collections/aggregations/hybrid/aggregate.py +++ b/weaviate/collections/aggregations/hybrid/async_.py @@ -1,13 +1,8 @@ from weaviate.connect import executor from weaviate.collections.aggregations.hybrid.executor import _HybridExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.connect.v4 import ConnectionAsync @executor.wrap("async") class _HybridAsync(_HybridExecutor[ConnectionAsync]): pass - - -@executor.wrap("sync") -class _Hybrid(_HybridExecutor[ConnectionSync]): - pass diff --git a/weaviate/collections/aggregations/hybrid/async_.pyi b/weaviate/collections/aggregations/hybrid/async_.pyi new file mode 100644 index 000000000..920bcbc30 --- /dev/null +++ b/weaviate/collections/aggregations/hybrid/async_.pyi @@ -0,0 +1,66 @@ +from typing import Generic, List, Literal, Optional, Union, overload +from weaviate.collections.aggregations.base_executor import _BaseExecutor +from weaviate.collections.classes.aggregate import ( + PropertiesMetrics, + AggregateReturn, + AggregateGroupByReturn, + GroupByAggregate, +) +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.filters import _FilterToGRPC +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.types import NUMBER +from weaviate.connect.v4 import ConnectionAsync +from .executor import _HybridExecutor + +class _HybridAsync(_HybridExecutor[ConnectionAsync]): + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[List[float]] = None, + query_properties: Optional[List[str]] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[str] = None, + max_vector_distance: Optional[float] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateReturn: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[List[float]] = None, + query_properties: Optional[List[str]] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[str] = None, + max_vector_distance: Optional[float] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateGroupByReturn: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[List[float]] = None, + query_properties: Optional[List[str]] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[str] = None, + max_vector_distance: Optional[float] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/hybrid/executor.py b/weaviate/collections/aggregations/hybrid/executor.py index 6f4ed25ef..46ebda205 100644 --- a/weaviate/collections/aggregations/hybrid/executor.py +++ b/weaviate/collections/aggregations/hybrid/executor.py @@ -1,6 +1,6 @@ -from typing import Generic, List, Optional, Union +from typing import Generic, List, Literal, Optional, Union, overload -from weaviate.collections.aggregations.executor import _BaseExecutor +from weaviate.collections.aggregations.base_executor import _BaseExecutor from weaviate.collections.classes.aggregate import ( PropertiesMetrics, AggregateReturn, @@ -16,6 +16,57 @@ class _HybridExecutor(Generic[ConnectionType], _BaseExecutor[ConnectionType]): + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[List[float]] = None, + query_properties: Optional[List[str]] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[str] = None, + max_vector_distance: Optional[float] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[AggregateReturn]: ... + + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[List[float]] = None, + query_properties: Optional[List[str]] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[str] = None, + max_vector_distance: Optional[float] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[AggregateGroupByReturn]: ... + + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[List[float]] = None, + query_properties: Optional[List[str]] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[str] = None, + max_vector_distance: Optional[float] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[Union[AggregateReturn, AggregateGroupByReturn]]: ... + def hybrid( self, query: Optional[str], diff --git a/weaviate/collections/aggregations/hybrid/sync.py b/weaviate/collections/aggregations/hybrid/sync.py new file mode 100644 index 000000000..e5e573e4a --- /dev/null +++ b/weaviate/collections/aggregations/hybrid/sync.py @@ -0,0 +1,8 @@ +from weaviate.connect import executor +from weaviate.collections.aggregations.hybrid.executor import _HybridExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _Hybrid(_HybridExecutor[ConnectionSync]): + pass diff --git a/weaviate/collections/aggregations/hybrid/sync.pyi b/weaviate/collections/aggregations/hybrid/sync.pyi new file mode 100644 index 000000000..6ebcfbb1b --- /dev/null +++ b/weaviate/collections/aggregations/hybrid/sync.pyi @@ -0,0 +1,66 @@ +from typing import Generic, List, Literal, Optional, Union, overload +from weaviate.collections.aggregations.base_executor import _BaseExecutor +from weaviate.collections.classes.aggregate import ( + PropertiesMetrics, + AggregateReturn, + AggregateGroupByReturn, + GroupByAggregate, +) +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.filters import _FilterToGRPC +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.types import NUMBER +from weaviate.connect.v4 import ConnectionSync +from .executor import _HybridExecutor + +class _Hybrid(_HybridExecutor[ConnectionSync]): + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[List[float]] = None, + query_properties: Optional[List[str]] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[str] = None, + max_vector_distance: Optional[float] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateReturn: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[List[float]] = None, + query_properties: Optional[List[str]] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[str] = None, + max_vector_distance: Optional[float] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateGroupByReturn: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[List[float]] = None, + query_properties: Optional[List[str]] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[str] = None, + max_vector_distance: Optional[float] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/near_image/__init__.py b/weaviate/collections/aggregations/near_image/__init__.py index 2b598c1b4..60e8d53ec 100644 --- a/weaviate/collections/aggregations/near_image/__init__.py +++ b/weaviate/collections/aggregations/near_image/__init__.py @@ -1,3 +1,4 @@ -from .aggregate import _NearImage, _NearImageAsync +from .async_ import _NearImageAsync +from .sync import _NearImage __all__ = ["_NearImage", "_NearImageAsync"] diff --git a/weaviate/collections/aggregations/near_image/aggregate.pyi b/weaviate/collections/aggregations/near_image/aggregate.pyi deleted file mode 100644 index 2fdcc478d..000000000 --- a/weaviate/collections/aggregations/near_image/aggregate.pyi +++ /dev/null @@ -1,103 +0,0 @@ -from io import BufferedReader -from pathlib import Path -from typing import Literal, Optional, Union, overload - -from weaviate.collections.aggregations.near_image.executor import _NearImageExecutor -from weaviate.collections.classes.aggregate import ( - PropertiesMetrics, - AggregateReturn, - AggregateGroupByReturn, - GroupByAggregate, -) -from weaviate.collections.classes.filters import _Filters -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import NUMBER -from weaviate.util import BLOB_INPUT - -class _NearImageAsync(_NearImageExecutor[ConnectionAsync]): - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateReturn: ... - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Union[str, GroupByAggregate], - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateGroupByReturn: ... - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[Union[str, GroupByAggregate]] = None, - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... - -class _NearImage(_NearImageExecutor[ConnectionSync]): - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateReturn: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Union[str, GroupByAggregate], - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateGroupByReturn: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[Union[str, GroupByAggregate]] = None, - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/near_image/aggregate.py b/weaviate/collections/aggregations/near_image/async_.py similarity index 58% rename from weaviate/collections/aggregations/near_image/aggregate.py rename to weaviate/collections/aggregations/near_image/async_.py index a3d5a867d..cdc2bb481 100644 --- a/weaviate/collections/aggregations/near_image/aggregate.py +++ b/weaviate/collections/aggregations/near_image/async_.py @@ -1,13 +1,8 @@ from weaviate.connect import executor from weaviate.collections.aggregations.near_image.executor import _NearImageExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.connect.v4 import ConnectionAsync @executor.wrap("async") class _NearImageAsync(_NearImageExecutor[ConnectionAsync]): pass - - -@executor.wrap("sync") -class _NearImage(_NearImageExecutor[ConnectionSync]): - pass diff --git a/weaviate/collections/aggregations/near_image/async_.pyi b/weaviate/collections/aggregations/near_image/async_.pyi new file mode 100644 index 000000000..8cfa4fbe7 --- /dev/null +++ b/weaviate/collections/aggregations/near_image/async_.pyi @@ -0,0 +1,60 @@ +from typing import Generic, Literal, Optional, Union, overload +from weaviate.collections.aggregations.base_executor import _BaseExecutor +from weaviate.collections.classes.aggregate import ( + PropertiesMetrics, + AggregateReturn, + AggregateGroupByReturn, + GroupByAggregate, +) +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.filters import _FilterToGRPC +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.types import BLOB_INPUT, NUMBER +from weaviate.util import parse_blob +from weaviate.connect.v4 import ConnectionAsync +from .executor import _NearImageExecutor + +class _NearImageAsync(_NearImageExecutor[ConnectionAsync]): + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateReturn: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateGroupByReturn: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/near_image/executor.py b/weaviate/collections/aggregations/near_image/executor.py index fe9b9e9e6..5f58da84e 100644 --- a/weaviate/collections/aggregations/near_image/executor.py +++ b/weaviate/collections/aggregations/near_image/executor.py @@ -1,6 +1,6 @@ -from typing import Generic, Optional, Union +from typing import Generic, Literal, Optional, Union, overload -from weaviate.collections.aggregations.executor import _BaseExecutor +from weaviate.collections.aggregations.base_executor import _BaseExecutor from weaviate.collections.classes.aggregate import ( PropertiesMetrics, AggregateReturn, @@ -16,6 +16,51 @@ class _NearImageExecutor(Generic[ConnectionType], _BaseExecutor[ConnectionType]): + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[AggregateReturn]: ... + + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[AggregateGroupByReturn]: ... + + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[Union[AggregateReturn, AggregateGroupByReturn]]: ... + def near_image( self, near_image: BLOB_INPUT, diff --git a/weaviate/collections/aggregations/near_image/sync.py b/weaviate/collections/aggregations/near_image/sync.py new file mode 100644 index 000000000..58d76f850 --- /dev/null +++ b/weaviate/collections/aggregations/near_image/sync.py @@ -0,0 +1,8 @@ +from weaviate.connect import executor +from weaviate.collections.aggregations.near_image.executor import _NearImageExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _NearImage(_NearImageExecutor[ConnectionSync]): + pass diff --git a/weaviate/collections/aggregations/near_image/sync.pyi b/weaviate/collections/aggregations/near_image/sync.pyi new file mode 100644 index 000000000..3488f7703 --- /dev/null +++ b/weaviate/collections/aggregations/near_image/sync.pyi @@ -0,0 +1,60 @@ +from typing import Generic, Literal, Optional, Union, overload +from weaviate.collections.aggregations.base_executor import _BaseExecutor +from weaviate.collections.classes.aggregate import ( + PropertiesMetrics, + AggregateReturn, + AggregateGroupByReturn, + GroupByAggregate, +) +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.filters import _FilterToGRPC +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.types import BLOB_INPUT, NUMBER +from weaviate.util import parse_blob +from weaviate.connect.v4 import ConnectionSync +from .executor import _NearImageExecutor + +class _NearImage(_NearImageExecutor[ConnectionSync]): + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateReturn: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateGroupByReturn: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/near_object/__init__.py b/weaviate/collections/aggregations/near_object/__init__.py index 657469f56..60bee8afb 100644 --- a/weaviate/collections/aggregations/near_object/__init__.py +++ b/weaviate/collections/aggregations/near_object/__init__.py @@ -1,3 +1,4 @@ -from .aggregate import _NearObject, _NearObjectAsync +from .async_ import _NearObjectAsync +from .sync import _NearObject __all__ = ["_NearObject", "_NearObjectAsync"] diff --git a/weaviate/collections/aggregations/near_object/aggregate.pyi b/weaviate/collections/aggregations/near_object/aggregate.pyi deleted file mode 100644 index a15c68037..000000000 --- a/weaviate/collections/aggregations/near_object/aggregate.pyi +++ /dev/null @@ -1,100 +0,0 @@ -from typing import Literal, Optional, Union, overload - -from weaviate.collections.aggregations.near_object.executor import _NearObjectExecutor -from weaviate.collections.classes.aggregate import ( - PropertiesMetrics, - AggregateReturn, - AggregateGroupByReturn, - GroupByAggregate, -) -from weaviate.collections.classes.filters import _Filters -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import NUMBER, UUID - -class _NearObjectAsync(_NearObjectExecutor[ConnectionAsync]): - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateReturn: ... - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Union[str, GroupByAggregate], - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateGroupByReturn: ... - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[Union[str, GroupByAggregate]] = None, - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... - -class _NearObject(_NearObjectExecutor[ConnectionSync]): - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateReturn: ... - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Union[str, GroupByAggregate], - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateGroupByReturn: ... - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[Union[str, GroupByAggregate]] = None, - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/near_object/aggregate.py b/weaviate/collections/aggregations/near_object/async_.py similarity index 59% rename from weaviate/collections/aggregations/near_object/aggregate.py rename to weaviate/collections/aggregations/near_object/async_.py index e268fc07d..3369bff19 100644 --- a/weaviate/collections/aggregations/near_object/aggregate.py +++ b/weaviate/collections/aggregations/near_object/async_.py @@ -1,13 +1,8 @@ from weaviate.connect import executor from weaviate.collections.aggregations.near_object.executor import _NearObjectExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.connect.v4 import ConnectionAsync @executor.wrap("async") class _NearObjectAsync(_NearObjectExecutor[ConnectionAsync]): pass - - -@executor.wrap("sync") -class _NearObject(_NearObjectExecutor[ConnectionSync]): - pass diff --git a/weaviate/collections/aggregations/near_object/async_.pyi b/weaviate/collections/aggregations/near_object/async_.pyi new file mode 100644 index 000000000..610d69120 --- /dev/null +++ b/weaviate/collections/aggregations/near_object/async_.pyi @@ -0,0 +1,59 @@ +from typing import Generic, Literal, Optional, Union, overload +from weaviate.collections.aggregations.base_executor import _BaseExecutor +from weaviate.collections.classes.aggregate import ( + PropertiesMetrics, + AggregateReturn, + AggregateGroupByReturn, + GroupByAggregate, +) +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.filters import _FilterToGRPC +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.types import NUMBER, UUID +from weaviate.connect.v4 import ConnectionAsync +from .executor import _NearObjectExecutor + +class _NearObjectAsync(_NearObjectExecutor[ConnectionAsync]): + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateReturn: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateGroupByReturn: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/near_object/executor.py b/weaviate/collections/aggregations/near_object/executor.py index 3b1c3b15c..72239c61d 100644 --- a/weaviate/collections/aggregations/near_object/executor.py +++ b/weaviate/collections/aggregations/near_object/executor.py @@ -1,6 +1,6 @@ -from typing import Generic, Optional, Union +from typing import Generic, Literal, Optional, Union, overload -from weaviate.collections.aggregations.executor import _BaseExecutor +from weaviate.collections.aggregations.base_executor import _BaseExecutor from weaviate.collections.classes.aggregate import ( PropertiesMetrics, AggregateReturn, @@ -15,6 +15,51 @@ class _NearObjectExecutor(Generic[ConnectionType], _BaseExecutor[ConnectionType]): + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[AggregateReturn]: ... + + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[AggregateGroupByReturn]: ... + + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[Union[AggregateReturn, AggregateGroupByReturn]]: ... + def near_object( self, near_object: UUID, diff --git a/weaviate/collections/aggregations/near_object/sync.py b/weaviate/collections/aggregations/near_object/sync.py new file mode 100644 index 000000000..4ee9c9ce5 --- /dev/null +++ b/weaviate/collections/aggregations/near_object/sync.py @@ -0,0 +1,8 @@ +from weaviate.connect import executor +from weaviate.collections.aggregations.near_object.executor import _NearObjectExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _NearObject(_NearObjectExecutor[ConnectionSync]): + pass diff --git a/weaviate/collections/aggregations/near_object/sync.pyi b/weaviate/collections/aggregations/near_object/sync.pyi new file mode 100644 index 000000000..4d6f05527 --- /dev/null +++ b/weaviate/collections/aggregations/near_object/sync.pyi @@ -0,0 +1,59 @@ +from typing import Generic, Literal, Optional, Union, overload +from weaviate.collections.aggregations.base_executor import _BaseExecutor +from weaviate.collections.classes.aggregate import ( + PropertiesMetrics, + AggregateReturn, + AggregateGroupByReturn, + GroupByAggregate, +) +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.filters import _FilterToGRPC +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.types import NUMBER, UUID +from weaviate.connect.v4 import ConnectionSync +from .executor import _NearObjectExecutor + +class _NearObject(_NearObjectExecutor[ConnectionSync]): + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateReturn: ... + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateGroupByReturn: ... + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/near_text/__init__.py b/weaviate/collections/aggregations/near_text/__init__.py index 29eb9cd56..be15ef061 100644 --- a/weaviate/collections/aggregations/near_text/__init__.py +++ b/weaviate/collections/aggregations/near_text/__init__.py @@ -1,3 +1,4 @@ -from .aggregate import _NearText, _NearTextAsync +from .async_ import _NearTextAsync +from .sync import _NearText __all__ = ["_NearText", "_NearTextAsync"] diff --git a/weaviate/collections/aggregations/near_text/aggregate.pyi b/weaviate/collections/aggregations/near_text/aggregate.pyi deleted file mode 100644 index 7f20f5de9..000000000 --- a/weaviate/collections/aggregations/near_text/aggregate.pyi +++ /dev/null @@ -1,113 +0,0 @@ -from typing import List, Literal, Optional, Union, overload - -from weaviate.collections.aggregations.near_text.executor import _NearTextExecutor -from weaviate.collections.classes.aggregate import ( - PropertiesMetrics, - AggregateReturn, - AggregateGroupByReturn, - GroupByAggregate, -) -from weaviate.collections.classes.filters import _Filters -from weaviate.collections.classes.grpc import Move -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import NUMBER - -class _NearTextAsync(_NearTextExecutor[ConnectionAsync]): - @overload - async def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateReturn: ... - @overload - async def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Union[str, GroupByAggregate], - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateGroupByReturn: ... - @overload - async def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[Union[str, GroupByAggregate]] = None, - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... - -class _NearText(_NearTextExecutor[ConnectionSync]): - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateReturn: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Union[str, GroupByAggregate], - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateGroupByReturn: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[Union[str, GroupByAggregate]] = None, - target_vector: Optional[str] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/near_text/aggregate.py b/weaviate/collections/aggregations/near_text/async_.py similarity index 58% rename from weaviate/collections/aggregations/near_text/aggregate.py rename to weaviate/collections/aggregations/near_text/async_.py index 4a7f716f8..7172c6325 100644 --- a/weaviate/collections/aggregations/near_text/aggregate.py +++ b/weaviate/collections/aggregations/near_text/async_.py @@ -1,13 +1,8 @@ from weaviate.connect import executor from weaviate.collections.aggregations.near_text.executor import _NearTextExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.connect.v4 import ConnectionAsync @executor.wrap("async") class _NearTextAsync(_NearTextExecutor[ConnectionAsync]): pass - - -@executor.wrap("sync") -class _NearText(_NearTextExecutor[ConnectionSync]): - pass diff --git a/weaviate/collections/aggregations/near_text/async_.pyi b/weaviate/collections/aggregations/near_text/async_.pyi new file mode 100644 index 000000000..57996dcc1 --- /dev/null +++ b/weaviate/collections/aggregations/near_text/async_.pyi @@ -0,0 +1,66 @@ +from typing import Generic, List, Literal, Optional, Union, overload +from weaviate.collections.aggregations.base_executor import _BaseExecutor +from weaviate.collections.classes.aggregate import ( + PropertiesMetrics, + AggregateReturn, + AggregateGroupByReturn, + GroupByAggregate, +) +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import Move +from weaviate.collections.filters import _FilterToGRPC +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.types import NUMBER +from weaviate.connect.v4 import ConnectionAsync +from .executor import _NearTextExecutor + +class _NearTextAsync(_NearTextExecutor[ConnectionAsync]): + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateReturn: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateGroupByReturn: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/near_text/executor.py b/weaviate/collections/aggregations/near_text/executor.py index 2cffbc289..b6b22e46b 100644 --- a/weaviate/collections/aggregations/near_text/executor.py +++ b/weaviate/collections/aggregations/near_text/executor.py @@ -1,6 +1,6 @@ -from typing import Generic, List, Optional, Union +from typing import Generic, List, Literal, Optional, Union, overload -from weaviate.collections.aggregations.executor import _BaseExecutor +from weaviate.collections.aggregations.base_executor import _BaseExecutor from weaviate.collections.classes.aggregate import ( PropertiesMetrics, AggregateReturn, @@ -16,6 +16,57 @@ class _NearTextExecutor(Generic[ConnectionType], _BaseExecutor[ConnectionType]): + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[AggregateReturn]: ... + + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[AggregateGroupByReturn]: ... + + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[Union[AggregateReturn, AggregateGroupByReturn]]: ... + def near_text( self, query: Union[List[str], str], diff --git a/weaviate/collections/aggregations/near_text/sync.py b/weaviate/collections/aggregations/near_text/sync.py new file mode 100644 index 000000000..ff878f1eb --- /dev/null +++ b/weaviate/collections/aggregations/near_text/sync.py @@ -0,0 +1,8 @@ +from weaviate.connect import executor +from weaviate.collections.aggregations.near_text.executor import _NearTextExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _NearText(_NearTextExecutor[ConnectionSync]): + pass diff --git a/weaviate/collections/aggregations/near_text/sync.pyi b/weaviate/collections/aggregations/near_text/sync.pyi new file mode 100644 index 000000000..975dc0334 --- /dev/null +++ b/weaviate/collections/aggregations/near_text/sync.pyi @@ -0,0 +1,66 @@ +from typing import Generic, List, Literal, Optional, Union, overload +from weaviate.collections.aggregations.base_executor import _BaseExecutor +from weaviate.collections.classes.aggregate import ( + PropertiesMetrics, + AggregateReturn, + AggregateGroupByReturn, + GroupByAggregate, +) +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import Move +from weaviate.collections.filters import _FilterToGRPC +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.types import NUMBER +from weaviate.connect.v4 import ConnectionSync +from .executor import _NearTextExecutor + +class _NearText(_NearTextExecutor[ConnectionSync]): + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateReturn: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateGroupByReturn: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[str] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/near_vector/__init__.py b/weaviate/collections/aggregations/near_vector/__init__.py index 5de3f8105..4a12a5211 100644 --- a/weaviate/collections/aggregations/near_vector/__init__.py +++ b/weaviate/collections/aggregations/near_vector/__init__.py @@ -1,3 +1,4 @@ -from .aggregate import _NearVector, _NearVectorAsync +from .async_ import _NearVectorAsync +from .sync import _NearVector __all__ = ["_NearVector", "_NearVectorAsync"] diff --git a/weaviate/collections/aggregations/near_vector/aggregate.pyi b/weaviate/collections/aggregations/near_vector/aggregate.pyi deleted file mode 100644 index 0fe7d13dc..000000000 --- a/weaviate/collections/aggregations/near_vector/aggregate.pyi +++ /dev/null @@ -1,104 +0,0 @@ -from typing import List, Literal, Optional, Union, overload - -from weaviate.collections.aggregations.near_vector.executor import _NearVectorExecutor -from weaviate.collections.classes.aggregate import ( - PropertiesMetrics, - AggregateReturn, - AggregateGroupByReturn, - GroupByAggregate, -) -from weaviate.collections.classes.grpc import ( - TargetVectorJoinType, - NearVectorInputType, -) -from weaviate.collections.classes.filters import _Filters -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import NUMBER - -class _NearVectorAsync(_NearVectorExecutor[ConnectionAsync]): - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - target_vector: Optional[TargetVectorJoinType] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateReturn: ... - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Union[str, GroupByAggregate], - target_vector: Optional[TargetVectorJoinType] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateGroupByReturn: ... - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[Union[str, GroupByAggregate]] = None, - target_vector: Optional[TargetVectorJoinType] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... - -class _NearVector(_NearVectorExecutor[ConnectionSync]): - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - target_vector: Optional[TargetVectorJoinType] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateReturn: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Union[str, GroupByAggregate], - target_vector: Optional[TargetVectorJoinType] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateGroupByReturn: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - object_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[Union[str, GroupByAggregate]] = None, - target_vector: Optional[TargetVectorJoinType] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/near_vector/aggregate.py b/weaviate/collections/aggregations/near_vector/async_.py similarity index 59% rename from weaviate/collections/aggregations/near_vector/aggregate.py rename to weaviate/collections/aggregations/near_vector/async_.py index 72903dbf4..578bf763c 100644 --- a/weaviate/collections/aggregations/near_vector/aggregate.py +++ b/weaviate/collections/aggregations/near_vector/async_.py @@ -1,13 +1,8 @@ from weaviate.collections.aggregations.near_vector.executor import _NearVectorExecutor from weaviate.connect import executor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.connect.v4 import ConnectionAsync @executor.wrap("async") class _NearVectorAsync(_NearVectorExecutor[ConnectionAsync]): pass - - -@executor.wrap("sync") -class _NearVector(_NearVectorExecutor[ConnectionSync]): - pass diff --git a/weaviate/collections/aggregations/near_vector/async_.pyi b/weaviate/collections/aggregations/near_vector/async_.pyi new file mode 100644 index 000000000..4f07a8aef --- /dev/null +++ b/weaviate/collections/aggregations/near_vector/async_.pyi @@ -0,0 +1,61 @@ +from typing import Generic, List, Literal, Optional, Union, cast, overload +from weaviate.collections.aggregations.base_executor import _BaseExecutor +from weaviate.collections.classes.aggregate import ( + PropertiesMetrics, + AggregateReturn, + AggregateGroupByReturn, + GroupByAggregate, +) +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import TargetVectorJoinType, NearVectorInputType +from weaviate.collections.filters import _FilterToGRPC +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateInvalidInputError +from weaviate.types import NUMBER +from weaviate.connect.v4 import ConnectionAsync +from .executor import _NearVectorExecutor + +class _NearVectorAsync(_NearVectorExecutor[ConnectionAsync]): + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[TargetVectorJoinType] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateReturn: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[TargetVectorJoinType] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateGroupByReturn: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[TargetVectorJoinType] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/near_vector/executor.py b/weaviate/collections/aggregations/near_vector/executor.py index ad23323bf..959e92c36 100644 --- a/weaviate/collections/aggregations/near_vector/executor.py +++ b/weaviate/collections/aggregations/near_vector/executor.py @@ -1,6 +1,6 @@ -from typing import Generic, List, Optional, Union, cast +from typing import Generic, List, Literal, Optional, Union, cast, overload -from weaviate.collections.aggregations.executor import _BaseExecutor +from weaviate.collections.aggregations.base_executor import _BaseExecutor from weaviate.collections.classes.aggregate import ( PropertiesMetrics, AggregateReturn, @@ -20,6 +20,51 @@ class _NearVectorExecutor(Generic[ConnectionType], _BaseExecutor[ConnectionType]): + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[TargetVectorJoinType] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[AggregateReturn]: ... + + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[TargetVectorJoinType] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[AggregateGroupByReturn]: ... + + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[TargetVectorJoinType] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[Union[AggregateReturn, AggregateGroupByReturn]]: ... + def near_vector( self, near_vector: NearVectorInputType, diff --git a/weaviate/collections/aggregations/near_vector/sync.py b/weaviate/collections/aggregations/near_vector/sync.py new file mode 100644 index 000000000..5ae671ca5 --- /dev/null +++ b/weaviate/collections/aggregations/near_vector/sync.py @@ -0,0 +1,8 @@ +from weaviate.collections.aggregations.near_vector.executor import _NearVectorExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _NearVector(_NearVectorExecutor[ConnectionSync]): + pass diff --git a/weaviate/collections/aggregations/near_vector/sync.pyi b/weaviate/collections/aggregations/near_vector/sync.pyi new file mode 100644 index 000000000..fb2988736 --- /dev/null +++ b/weaviate/collections/aggregations/near_vector/sync.pyi @@ -0,0 +1,61 @@ +from typing import Generic, List, Literal, Optional, Union, cast, overload +from weaviate.collections.aggregations.base_executor import _BaseExecutor +from weaviate.collections.classes.aggregate import ( + PropertiesMetrics, + AggregateReturn, + AggregateGroupByReturn, + GroupByAggregate, +) +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import TargetVectorJoinType, NearVectorInputType +from weaviate.collections.filters import _FilterToGRPC +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateInvalidInputError +from weaviate.types import NUMBER +from weaviate.connect.v4 import ConnectionSync +from .executor import _NearVectorExecutor + +class _NearVector(_NearVectorExecutor[ConnectionSync]): + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + target_vector: Optional[TargetVectorJoinType] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateReturn: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + target_vector: Optional[TargetVectorJoinType] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateGroupByReturn: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + object_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + target_vector: Optional[TargetVectorJoinType] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/over_all/__init__.py b/weaviate/collections/aggregations/over_all/__init__.py index 38e38fbe4..ac750bd63 100644 --- a/weaviate/collections/aggregations/over_all/__init__.py +++ b/weaviate/collections/aggregations/over_all/__init__.py @@ -1,3 +1,4 @@ -from .aggregate import _OverAll, _OverAllAsync +from .async_ import _OverAllAsync +from .sync import _OverAll __all__ = ["_OverAll", "_OverAllAsync"] diff --git a/weaviate/collections/aggregations/over_all/aggregate.pyi b/weaviate/collections/aggregations/over_all/aggregate.pyi deleted file mode 100644 index ed4cb66d1..000000000 --- a/weaviate/collections/aggregations/over_all/aggregate.pyi +++ /dev/null @@ -1,69 +0,0 @@ -from typing import Literal, Optional, Union, overload - -from weaviate.collections.aggregations.over_all.executor import _OverAllExecutor -from weaviate.collections.classes.aggregate import ( - PropertiesMetrics, - AggregateReturn, - AggregateGroupByReturn, - GroupByAggregate, -) -from weaviate.collections.classes.filters import _Filters -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - -class _OverAllAsync(_OverAllExecutor[ConnectionAsync]): - @overload - async def over_all( - self, - *, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateReturn: ... - @overload - async def over_all( - self, - *, - filters: Optional[_Filters] = None, - group_by: Union[str, GroupByAggregate], - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateGroupByReturn: ... - @overload - async def over_all( - self, - *, - filters: Optional[_Filters] = None, - group_by: Optional[Union[str, GroupByAggregate]] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... - -class _OverAll(_OverAllExecutor[ConnectionSync]): - @overload - def over_all( - self, - *, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateReturn: ... - @overload - def over_all( - self, - *, - filters: Optional[_Filters] = None, - group_by: Union[str, GroupByAggregate], - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> AggregateGroupByReturn: ... - @overload - def over_all( - self, - *, - filters: Optional[_Filters] = None, - group_by: Optional[Union[str, GroupByAggregate]] = None, - total_count: bool = True, - return_metrics: Optional[PropertiesMetrics] = None, - ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/over_all/aggregate.py b/weaviate/collections/aggregations/over_all/async_.py similarity index 58% rename from weaviate/collections/aggregations/over_all/aggregate.py rename to weaviate/collections/aggregations/over_all/async_.py index 553e3e0fe..50bd72e49 100644 --- a/weaviate/collections/aggregations/over_all/aggregate.py +++ b/weaviate/collections/aggregations/over_all/async_.py @@ -1,13 +1,8 @@ from weaviate.connect import executor from weaviate.collections.aggregations.over_all.executor import _OverAllExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.connect.v4 import ConnectionAsync @executor.wrap("async") class _OverAllAsync(_OverAllExecutor[ConnectionAsync]): pass - - -@executor.wrap("sync") -class _OverAll(_OverAllExecutor[ConnectionSync]): - pass diff --git a/weaviate/collections/aggregations/over_all/async_.pyi b/weaviate/collections/aggregations/over_all/async_.pyi new file mode 100644 index 000000000..316c40b2f --- /dev/null +++ b/weaviate/collections/aggregations/over_all/async_.pyi @@ -0,0 +1,43 @@ +from typing import Generic, Literal, Optional, Union, overload +from weaviate.collections.aggregations.base_executor import _BaseExecutor +from weaviate.collections.classes.aggregate import ( + PropertiesMetrics, + AggregateReturn, + AggregateGroupByReturn, + GroupByAggregate, +) +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.filters import _FilterToGRPC +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.connect.v4 import ConnectionAsync +from .executor import _OverAllExecutor + +class _OverAllAsync(_OverAllExecutor[ConnectionAsync]): + @overload + async def over_all( + self, + *, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateReturn: ... + @overload + async def over_all( + self, + *, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateGroupByReturn: ... + @overload + async def over_all( + self, + *, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/aggregations/over_all/executor.py b/weaviate/collections/aggregations/over_all/executor.py index 2c88a49e9..8213c3c7e 100644 --- a/weaviate/collections/aggregations/over_all/executor.py +++ b/weaviate/collections/aggregations/over_all/executor.py @@ -1,6 +1,6 @@ -from typing import Generic, Optional, Union +from typing import Generic, Literal, Optional, Union, overload -from weaviate.collections.aggregations.executor import _BaseExecutor +from weaviate.collections.aggregations.base_executor import _BaseExecutor from weaviate.collections.classes.aggregate import ( PropertiesMetrics, AggregateReturn, @@ -14,6 +14,36 @@ class _OverAllExecutor(Generic[ConnectionType], _BaseExecutor[ConnectionType]): + @overload + def over_all( + self, + *, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[AggregateReturn]: ... + + @overload + def over_all( + self, + *, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[AggregateGroupByReturn]: ... + + @overload + def over_all( + self, + *, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None, + ) -> executor.Result[Union[AggregateReturn, AggregateGroupByReturn]]: ... + def over_all( self, *, diff --git a/weaviate/collections/aggregations/over_all/sync.py b/weaviate/collections/aggregations/over_all/sync.py new file mode 100644 index 000000000..b163dda0c --- /dev/null +++ b/weaviate/collections/aggregations/over_all/sync.py @@ -0,0 +1,8 @@ +from weaviate.connect import executor +from weaviate.collections.aggregations.over_all.executor import _OverAllExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _OverAll(_OverAllExecutor[ConnectionSync]): + pass diff --git a/weaviate/collections/aggregations/over_all/sync.pyi b/weaviate/collections/aggregations/over_all/sync.pyi new file mode 100644 index 000000000..f001a1747 --- /dev/null +++ b/weaviate/collections/aggregations/over_all/sync.pyi @@ -0,0 +1,43 @@ +from typing import Generic, Literal, Optional, Union, overload +from weaviate.collections.aggregations.base_executor import _BaseExecutor +from weaviate.collections.classes.aggregate import ( + PropertiesMetrics, + AggregateReturn, + AggregateGroupByReturn, + GroupByAggregate, +) +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.filters import _FilterToGRPC +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.connect.v4 import ConnectionSync +from .executor import _OverAllExecutor + +class _OverAll(_OverAllExecutor[ConnectionSync]): + @overload + def over_all( + self, + *, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateReturn: ... + @overload + def over_all( + self, + *, + filters: Optional[_Filters] = None, + group_by: Union[str, GroupByAggregate], + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> AggregateGroupByReturn: ... + @overload + def over_all( + self, + *, + filters: Optional[_Filters] = None, + group_by: Optional[Union[str, GroupByAggregate]] = None, + total_count: bool = True, + return_metrics: Optional[PropertiesMetrics] = None + ) -> Union[AggregateReturn, AggregateGroupByReturn]: ... diff --git a/weaviate/collections/backups/async_.pyi b/weaviate/collections/backups/async_.pyi index 7ee19ea04..1f40815f9 100644 --- a/weaviate/collections/backups/async_.pyi +++ b/weaviate/collections/backups/async_.pyi @@ -1,13 +1,17 @@ -from typing import Optional +from typing import Generic, Optional from weaviate.backup.executor import ( BackupConfigCreate, BackupConfigRestore, + BackupReturn, BackupStatusReturn, BackupStorage, - BackupLocationType, + _BackupExecutor, ) -from weaviate.collections.backups.executor import _CollectionBackupExecutor +from weaviate.backup.backup_location import BackupLocationType +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType from weaviate.connect.v4 import ConnectionAsync +from .executor import _CollectionBackupExecutor class _CollectionBackupAsync(_CollectionBackupExecutor[ConnectionAsync]): async def create( diff --git a/weaviate/collections/backups/sync.pyi b/weaviate/collections/backups/sync.pyi index 07874d934..06f329436 100644 --- a/weaviate/collections/backups/sync.pyi +++ b/weaviate/collections/backups/sync.pyi @@ -1,13 +1,17 @@ -from typing import Optional +from typing import Generic, Optional from weaviate.backup.executor import ( BackupConfigCreate, BackupConfigRestore, + BackupReturn, BackupStatusReturn, BackupStorage, - BackupLocationType, + _BackupExecutor, ) -from weaviate.collections.backups.executor import _CollectionBackupExecutor +from weaviate.backup.backup_location import BackupLocationType +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType from weaviate.connect.v4 import ConnectionSync +from .executor import _CollectionBackupExecutor class _CollectionBackup(_CollectionBackupExecutor[ConnectionSync]): def create( diff --git a/weaviate/collections/cluster/async_.pyi b/weaviate/collections/cluster/async_.pyi index be8bc8c23..26e3c6217 100644 --- a/weaviate/collections/cluster/async_.pyi +++ b/weaviate/collections/cluster/async_.pyi @@ -1,36 +1,28 @@ -from typing import List, Literal, Optional, Union, overload - -from weaviate.collections.classes.cluster import Node, Shards, Stats -from weaviate.collections.cluster.executor import _ClusterExecutor +from typing import Generic, List, Literal, Optional, Union, overload +from httpx import Response +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType from weaviate.cluster.types import Verbosity +from weaviate.collections.classes.cluster import Node, Shards, _ConvertFromREST, Stats +from weaviate.exceptions import EmptyResponseError +from weaviate.util import _capitalize_first_letter, _decode_json_response_dict from weaviate.connect.v4 import ConnectionAsync +from .executor import _ClusterExecutor class _ClusterAsync(_ClusterExecutor[ConnectionAsync]): @overload async def nodes( - self, - collection: Optional[str] = None, - *, - output: Literal[None] = None, + self, collection: Optional[str] = None, *, output: Literal[None] = None ) -> List[Node[None, None]]: ... @overload async def nodes( - self, - collection: Optional[str] = None, - *, - output: Literal["minimal"], + self, collection: Optional[str] = None, *, output: Literal["minimal"] ) -> List[Node[None, None]]: ... @overload async def nodes( - self, - collection: Optional[str] = None, - *, - output: Literal["verbose"], + self, collection: Optional[str] = None, *, output: Literal["verbose"] ) -> List[Node[Shards, Stats]]: ... @overload async def nodes( - self, - collection: Optional[str] = None, - *, - output: Optional[Verbosity] = None, + self, collection: Optional[str] = None, *, output: Optional[Verbosity] = None ) -> Union[List[Node[None, None]], List[Node[Shards, Stats]]]: ... diff --git a/weaviate/collections/cluster/executor.py b/weaviate/collections/cluster/executor.py index bb2985a65..43cd275f4 100644 --- a/weaviate/collections/cluster/executor.py +++ b/weaviate/collections/cluster/executor.py @@ -1,4 +1,4 @@ -from typing import Generic, List, Optional, Union +from typing import Generic, List, Literal, Optional, Union, overload from httpx import Response from weaviate.connect import executor @@ -17,6 +17,38 @@ class _ClusterExecutor(Generic[ConnectionType]): def __init__(self, connection: ConnectionType): self._connection = connection + @overload + async def nodes( + self, + collection: Optional[str] = None, + *, + output: Literal[None] = None, + ) -> List[Node[None, None]]: ... + + @overload + async def nodes( + self, + collection: Optional[str] = None, + *, + output: Literal["minimal"], + ) -> List[Node[None, None]]: ... + + @overload + async def nodes( + self, + collection: Optional[str] = None, + *, + output: Literal["verbose"], + ) -> List[Node[Shards, Stats]]: ... + + @overload + async def nodes( + self, + collection: Optional[str] = None, + *, + output: Optional[Verbosity] = None, + ) -> Union[List[Node[None, None]], List[Node[Shards, Stats]]]: ... + def nodes( self, collection: Optional[str] = None, diff --git a/weaviate/collections/cluster/sync.pyi b/weaviate/collections/cluster/sync.pyi index 7c6090764..bcc89193d 100644 --- a/weaviate/collections/cluster/sync.pyi +++ b/weaviate/collections/cluster/sync.pyi @@ -1,36 +1,28 @@ -from typing import List, Literal, Optional, Union, overload - -from weaviate.collections.classes.cluster import Node, Shards, Stats -from weaviate.collections.cluster.executor import _ClusterExecutor +from typing import Generic, List, Literal, Optional, Union, overload +from httpx import Response +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType from weaviate.cluster.types import Verbosity +from weaviate.collections.classes.cluster import Node, Shards, _ConvertFromREST, Stats +from weaviate.exceptions import EmptyResponseError +from weaviate.util import _capitalize_first_letter, _decode_json_response_dict from weaviate.connect.v4 import ConnectionSync +from .executor import _ClusterExecutor class _Cluster(_ClusterExecutor[ConnectionSync]): @overload async def nodes( - self, - collection: Optional[str] = None, - *, - output: Literal[None] = None, + self, collection: Optional[str] = None, *, output: Literal[None] = None ) -> List[Node[None, None]]: ... @overload async def nodes( - self, - collection: Optional[str] = None, - *, - output: Literal["minimal"], + self, collection: Optional[str] = None, *, output: Literal["minimal"] ) -> List[Node[None, None]]: ... @overload async def nodes( - self, - collection: Optional[str] = None, - *, - output: Literal["verbose"], + self, collection: Optional[str] = None, *, output: Literal["verbose"] ) -> List[Node[Shards, Stats]]: ... @overload async def nodes( - self, - collection: Optional[str] = None, - *, - output: Optional[Verbosity] = None, + self, collection: Optional[str] = None, *, output: Optional[Verbosity] = None ) -> Union[List[Node[None, None]], List[Node[Shards, Stats]]]: ... diff --git a/weaviate/collections/config/async_.py b/weaviate/collections/config/async_.py index 48f3e3f2b..1f8eba861 100644 --- a/weaviate/collections/config/async_.py +++ b/weaviate/collections/config/async_.py @@ -1,8 +1,8 @@ from weaviate.connect import executor from weaviate.connect.v4 import ConnectionAsync -from weaviate.collections.config.executor import _ConfigExecutor +from weaviate.collections.config.executor import _ConfigCollectionExecutor @executor.wrap("async") -class _ConfigCollectionAsync(_ConfigExecutor[ConnectionAsync]): +class _ConfigCollectionAsync(_ConfigCollectionExecutor[ConnectionAsync]): pass diff --git a/weaviate/collections/config/async_.pyi b/weaviate/collections/config/async_.pyi index d64a1da0e..ad6698a06 100644 --- a/weaviate/collections/config/async_.pyi +++ b/weaviate/collections/config/async_.pyi @@ -1,9 +1,13 @@ -from typing import Dict, List, Literal, Optional, Union, overload - +import asyncio +from typing import Any, Dict, Generic, List, Literal, Optional, Tuple, Union, cast +from httpx import Response +from pydantic_core import ValidationError from weaviate.collections.classes.config import ( + _CollectionConfigUpdate, _InvertedIndexConfigUpdate, _ReplicationConfigUpdate, _VectorIndexConfigFlatUpdate, + PropertyType, Property, ReferenceProperty, _ReferencePropertyMultiTarget, @@ -11,23 +15,31 @@ from weaviate.collections.classes.config import ( CollectionConfig, CollectionConfigSimple, ShardStatus, + _ShardStatus, ShardTypes, _NamedVectorConfigUpdate, _MultiTenancyConfigUpdate, _GenerativeProvider, _RerankerProvider, ) +from weaviate.collections.classes.config_methods import ( + _collection_config_from_json, + _collection_config_simple_from_json, +) from weaviate.collections.classes.config_vector_index import _VectorIndexConfigDynamicUpdate -from weaviate.collections.config.executor import _ConfigExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import _ExpectedStatusCodes, ConnectionAsync, ConnectionType +from weaviate.exceptions import WeaviateInvalidInputError +from weaviate.util import _decode_json_response_dict, _decode_json_response_list +from weaviate.validator import _validate_input, _ValidateArgument +from weaviate.warnings import _Warnings from weaviate.connect.v4 import ConnectionAsync +from .executor import _ConfigCollectionExecutor -class _ConfigCollectionAsync(_ConfigExecutor[ConnectionAsync]): - @overload - async def get(self, simple: Literal[False] = ...) -> CollectionConfig: ... - @overload - async def get(self, simple: Literal[True]) -> CollectionConfigSimple: ... - @overload - async def get(self, simple: bool = ...) -> Union[CollectionConfig, CollectionConfigSimple]: ... +class _ConfigCollectionAsync(_ConfigCollectionExecutor[ConnectionAsync]): + async def get( + self, simple: bool = False + ) -> Union[CollectionConfig, CollectionConfigSimple]: ... async def update( self, *, @@ -37,10 +49,7 @@ class _ConfigCollectionAsync(_ConfigExecutor[ConnectionAsync]): multi_tenancy_config: Optional[_MultiTenancyConfigUpdate] = None, replication_config: Optional[_ReplicationConfigUpdate] = None, vector_index_config: Optional[ - Union[ - _VectorIndexConfigHNSWUpdate, - _VectorIndexConfigFlatUpdate, - ] + Union[_VectorIndexConfigHNSWUpdate, _VectorIndexConfigFlatUpdate] ] = None, vectorizer_config: Optional[ Union[ @@ -51,7 +60,7 @@ class _ConfigCollectionAsync(_ConfigExecutor[ConnectionAsync]): ] ] = None, generative_config: Optional[_GenerativeProvider] = None, - reranker_config: Optional[_RerankerProvider] = None, + reranker_config: Optional[_RerankerProvider] = None ) -> None: ... async def get_shards(self) -> List[ShardStatus]: ... async def update_shards( diff --git a/weaviate/collections/config/executor.py b/weaviate/collections/config/executor.py index f51fc805b..95ebc56ed 100644 --- a/weaviate/collections/config/executor.py +++ b/weaviate/collections/config/executor.py @@ -39,7 +39,7 @@ from weaviate.warnings import _Warnings -class _ConfigExecutor(Generic[ConnectionType]): +class _ConfigCollectionExecutor(Generic[ConnectionType]): def __init__( self, connection: ConnectionType, diff --git a/weaviate/collections/config/sync.py b/weaviate/collections/config/sync.py index 86f5f9597..b334e2d85 100644 --- a/weaviate/collections/config/sync.py +++ b/weaviate/collections/config/sync.py @@ -1,8 +1,8 @@ from weaviate.connect import executor from weaviate.connect.v4 import ConnectionSync -from weaviate.collections.config.executor import _ConfigExecutor +from weaviate.collections.config.executor import _ConfigCollectionExecutor @executor.wrap("sync") -class _ConfigCollection(_ConfigExecutor[ConnectionSync]): +class _ConfigCollection(_ConfigCollectionExecutor[ConnectionSync]): pass diff --git a/weaviate/collections/config/sync.pyi b/weaviate/collections/config/sync.pyi index 986f33c29..5f6bde159 100644 --- a/weaviate/collections/config/sync.pyi +++ b/weaviate/collections/config/sync.pyi @@ -1,9 +1,13 @@ -from typing import Dict, List, Literal, Optional, Union, overload - +import asyncio +from typing import Any, Dict, Generic, List, Literal, Optional, Tuple, Union, cast +from httpx import Response +from pydantic_core import ValidationError from weaviate.collections.classes.config import ( + _CollectionConfigUpdate, _InvertedIndexConfigUpdate, _ReplicationConfigUpdate, _VectorIndexConfigFlatUpdate, + PropertyType, Property, ReferenceProperty, _ReferencePropertyMultiTarget, @@ -11,23 +15,29 @@ from weaviate.collections.classes.config import ( CollectionConfig, CollectionConfigSimple, ShardStatus, + _ShardStatus, ShardTypes, _NamedVectorConfigUpdate, _MultiTenancyConfigUpdate, _GenerativeProvider, _RerankerProvider, ) +from weaviate.collections.classes.config_methods import ( + _collection_config_from_json, + _collection_config_simple_from_json, +) from weaviate.collections.classes.config_vector_index import _VectorIndexConfigDynamicUpdate -from weaviate.collections.config.executor import _ConfigExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import _ExpectedStatusCodes, ConnectionAsync, ConnectionType +from weaviate.exceptions import WeaviateInvalidInputError +from weaviate.util import _decode_json_response_dict, _decode_json_response_list +from weaviate.validator import _validate_input, _ValidateArgument +from weaviate.warnings import _Warnings from weaviate.connect.v4 import ConnectionSync +from .executor import _ConfigCollectionExecutor -class _ConfigCollection(_ConfigExecutor[ConnectionSync]): - @overload - def get(self, simple: Literal[False] = ...) -> CollectionConfig: ... - @overload - def get(self, simple: Literal[True]) -> CollectionConfigSimple: ... - @overload - def get(self, simple: bool = ...) -> Union[CollectionConfig, CollectionConfigSimple]: ... +class _ConfigCollection(_ConfigCollectionExecutor[ConnectionSync]): + def get(self, simple: bool = False) -> Union[CollectionConfig, CollectionConfigSimple]: ... def update( self, *, @@ -37,10 +47,7 @@ class _ConfigCollection(_ConfigExecutor[ConnectionSync]): multi_tenancy_config: Optional[_MultiTenancyConfigUpdate] = None, replication_config: Optional[_ReplicationConfigUpdate] = None, vector_index_config: Optional[ - Union[ - _VectorIndexConfigHNSWUpdate, - _VectorIndexConfigFlatUpdate, - ] + Union[_VectorIndexConfigHNSWUpdate, _VectorIndexConfigFlatUpdate] ] = None, vectorizer_config: Optional[ Union[ @@ -51,7 +58,7 @@ class _ConfigCollection(_ConfigExecutor[ConnectionSync]): ] ] = None, generative_config: Optional[_GenerativeProvider] = None, - reranker_config: Optional[_RerankerProvider] = None, + reranker_config: Optional[_RerankerProvider] = None ) -> None: ... def get_shards(self) -> List[ShardStatus]: ... def update_shards( diff --git a/weaviate/collections/data/async_.py b/weaviate/collections/data/async_.py index 1dc6c0c16..e0540b71b 100644 --- a/weaviate/collections/data/async_.py +++ b/weaviate/collections/data/async_.py @@ -1,13 +1,13 @@ from typing import Generic, Type from weaviate.connect import executor from weaviate.collections.classes.internal import Properties, TProperties -from weaviate.collections.data.executor import _DataExecutor +from weaviate.collections.data.executor import _DataCollectionExecutor from weaviate.connect.v4 import ConnectionAsync from weaviate.collections.classes.types import _check_properties_generic @executor.wrap("async") -class _DataCollectionAsync(Generic[Properties], _DataExecutor[ConnectionAsync]): +class _DataCollectionAsync(Generic[Properties], _DataCollectionExecutor[ConnectionAsync]): def with_data_model(self, data_model: Type[TProperties]) -> "_DataCollectionAsync[TProperties]": _check_properties_generic(data_model) return _DataCollectionAsync[TProperties]( diff --git a/weaviate/collections/data/async_.pyi b/weaviate/collections/data/async_.pyi index bf6a2e471..ff91261aa 100644 --- a/weaviate/collections/data/async_.pyi +++ b/weaviate/collections/data/async_.pyi @@ -1,40 +1,63 @@ +import asyncio +import datetime import uuid as uuid_package from typing import ( + Any, + Dict, + Generic, Optional, List, Literal, + Mapping, Sequence, - Generic, + Tuple, Type, Union, + cast, overload, ) - +from httpx import Response from weaviate.collections.classes.batch import ( DeleteManyObject, + _BatchObject, + _BatchReference, BatchObjectReturn, BatchReferenceReturn, DeleteManyReturn, ) +from weaviate.collections.classes.config import ConsistencyLevel from weaviate.collections.classes.data import DataObject, DataReferences from weaviate.collections.classes.filters import _Filters from weaviate.collections.classes.internal import ( + _Reference, + ReferenceToMulti, SingleReferenceInput, ReferenceInput, ReferenceInputs, - TProperties, ) from weaviate.collections.classes.types import ( + GeoCoordinate, + PhoneNumber, + _PhoneNumber, Properties, + WeaviateField, ) -from weaviate.collections.data.executor import _DataExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import _ExpectedStatusCodes, ConnectionAsync, ConnectionType +from weaviate.logger import logger +from weaviate.types import BEACON, UUID, VECTORS +from weaviate.util import _datetime_to_string, _get_vector_v4 +from weaviate.validator import _validate_input, _ValidateArgument +from weaviate.collections.batch.grpc_batch_objects import _BatchGRPC +from weaviate.collections.batch.grpc_batch_delete import _BatchDeleteGRPC +from weaviate.collections.batch.rest import _BatchREST +from weaviate.exceptions import WeaviateInvalidInputError from weaviate.connect.v4 import ConnectionAsync -from weaviate.types import UUID, VECTORS +from .executor import _DataCollectionExecutor -class _DataCollectionAsync(Generic[Properties], _DataExecutor[ConnectionAsync]): - def with_data_model( - self, data_model: Type[TProperties] - ) -> "_DataCollectionAsync[TProperties]": ... +class _DataCollectionAsync( + Generic[Properties,], _DataCollectionExecutor[ConnectionAsync, Properties] +): async def insert( self, properties: Properties, @@ -46,6 +69,7 @@ class _DataCollectionAsync(Generic[Properties], _DataExecutor[ConnectionAsync]): self, objects: Sequence[Union[Properties, DataObject[Properties, Optional[ReferenceInputs]]]], ) -> BatchObjectReturn: ... + async def exists(self, uuid: UUID) -> bool: ... async def replace( self, uuid: UUID, @@ -70,7 +94,6 @@ class _DataCollectionAsync(Generic[Properties], _DataExecutor[ConnectionAsync]): async def reference_replace( self, from_uuid: UUID, from_property: str, to: ReferenceInput ) -> None: ... - async def exists(self, uuid: UUID) -> bool: ... async def delete_by_id(self, uuid: UUID) -> bool: ... @overload async def delete_many( diff --git a/weaviate/collections/data/executor.py b/weaviate/collections/data/executor.py index 40ac730e8..306d44f5a 100644 --- a/weaviate/collections/data/executor.py +++ b/weaviate/collections/data/executor.py @@ -1,19 +1,20 @@ import asyncio import datetime import uuid as uuid_package -from dataclasses import dataclass from typing import ( Any, Dict, Generic, Optional, List, + Literal, Mapping, Sequence, Tuple, Type, Union, cast, + overload, ) from httpx import Response @@ -54,21 +55,9 @@ from weaviate.collections.batch.grpc_batch_delete import _BatchDeleteGRPC from weaviate.collections.batch.rest import _BatchREST from weaviate.exceptions import WeaviateInvalidInputError -from weaviate.util import _ServerVersion -@dataclass -class _ExecutorOptions: - weaviate_version: _ServerVersion - name: str - consistency_level: Optional[ConsistencyLevel] - tenant: Optional[str] - validate_arguments: bool - batch_grpc: _BatchGRPC - batch_rest: _BatchREST - - -class _DataExecutor(Generic[ConnectionType]): +class _DataCollectionExecutor(Generic[ConnectionType, Properties]): def __init__( self, connection: ConnectionType, @@ -602,6 +591,23 @@ def resp(res: Response) -> bool: status_codes=_ExpectedStatusCodes(ok_in=[204, 404], error="delete object"), ) + @overload + def delete_many( + self, where: _Filters, *, verbose: Literal[False] = False, dry_run: bool = False + ) -> executor.Result[DeleteManyReturn[None]]: ... + + @overload + def delete_many( + self, where: _Filters, *, verbose: Literal[True], dry_run: bool = False + ) -> executor.Result[DeleteManyReturn[List[DeleteManyObject]]]: ... + + @overload + def delete_many( + self, where: _Filters, *, verbose: bool = False, dry_run: bool = False + ) -> executor.Result[ + Union[DeleteManyReturn[List[DeleteManyObject]], DeleteManyReturn[None]] + ]: ... + def delete_many( self, where: _Filters, *, verbose: bool = False, dry_run: bool = False ) -> executor.Result[Union[DeleteManyReturn[List[DeleteManyObject]], DeleteManyReturn[None]]]: @@ -629,7 +635,6 @@ def delete_many( ) def __apply_context(self, params: Dict[str, Any]) -> Dict[str, Any]: - if self._tenant is not None: params["tenant"] = self._tenant if self._consistency_level is not None: diff --git a/weaviate/collections/data/sync.py b/weaviate/collections/data/sync.py index 50decfeb7..87100551a 100644 --- a/weaviate/collections/data/sync.py +++ b/weaviate/collections/data/sync.py @@ -2,12 +2,12 @@ from weaviate.connect import executor from weaviate.collections.classes.internal import Properties, TProperties from weaviate.collections.classes.types import _check_properties_generic -from weaviate.collections.data.executor import _DataExecutor +from weaviate.collections.data.executor import _DataCollectionExecutor from weaviate.connect.v4 import ConnectionSync @executor.wrap("sync") -class _DataCollection(Generic[Properties], _DataExecutor[ConnectionSync]): +class _DataCollection(Generic[Properties], _DataCollectionExecutor[ConnectionSync]): def with_data_model(self, data_model: Type[TProperties]) -> "_DataCollection[TProperties]": _check_properties_generic(data_model) return _DataCollection[TProperties]( diff --git a/weaviate/collections/data/sync.pyi b/weaviate/collections/data/sync.pyi index 6e7c2fee1..738c3ba8c 100644 --- a/weaviate/collections/data/sync.pyi +++ b/weaviate/collections/data/sync.pyi @@ -1,38 +1,61 @@ +import asyncio +import datetime import uuid as uuid_package from typing import ( + Any, + Dict, + Generic, Optional, List, Literal, + Mapping, Sequence, - Generic, + Tuple, Type, Union, + cast, overload, ) - +from httpx import Response from weaviate.collections.classes.batch import ( DeleteManyObject, + _BatchObject, + _BatchReference, BatchObjectReturn, BatchReferenceReturn, DeleteManyReturn, ) +from weaviate.collections.classes.config import ConsistencyLevel from weaviate.collections.classes.data import DataObject, DataReferences from weaviate.collections.classes.filters import _Filters from weaviate.collections.classes.internal import ( + _Reference, + ReferenceToMulti, SingleReferenceInput, ReferenceInput, ReferenceInputs, - TProperties, ) from weaviate.collections.classes.types import ( + GeoCoordinate, + PhoneNumber, + _PhoneNumber, Properties, + WeaviateField, ) -from weaviate.collections.data.executor import _DataExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import _ExpectedStatusCodes, ConnectionAsync, ConnectionType +from weaviate.logger import logger +from weaviate.types import BEACON, UUID, VECTORS +from weaviate.util import _datetime_to_string, _get_vector_v4 +from weaviate.validator import _validate_input, _ValidateArgument +from weaviate.collections.batch.grpc_batch_objects import _BatchGRPC +from weaviate.collections.batch.grpc_batch_delete import _BatchDeleteGRPC +from weaviate.collections.batch.rest import _BatchREST +from weaviate.exceptions import WeaviateInvalidInputError from weaviate.connect.v4 import ConnectionSync -from weaviate.types import UUID, VECTORS +from .executor import _DataCollectionExecutor -class _DataCollection(Generic[Properties], _DataExecutor[ConnectionSync]): - def with_data_model(self, data_model: Type[TProperties]) -> "_DataCollection[TProperties]": ... +class _DataCollection(Generic[Properties,], _DataCollectionExecutor[ConnectionSync, Properties]): def insert( self, properties: Properties, @@ -44,6 +67,7 @@ class _DataCollection(Generic[Properties], _DataExecutor[ConnectionSync]): self, objects: Sequence[Union[Properties, DataObject[Properties, Optional[ReferenceInputs]]]], ) -> BatchObjectReturn: ... + def exists(self, uuid: UUID) -> bool: ... def replace( self, uuid: UUID, @@ -68,7 +92,6 @@ class _DataCollection(Generic[Properties], _DataExecutor[ConnectionSync]): def reference_replace( self, from_uuid: UUID, from_property: str, to: ReferenceInput ) -> None: ... - def exists(self, uuid: UUID) -> bool: ... def delete_by_id(self, uuid: UUID) -> bool: ... @overload def delete_many( diff --git a/weaviate/collections/queries/executor.py b/weaviate/collections/queries/base_executor.py similarity index 100% rename from weaviate/collections/queries/executor.py rename to weaviate/collections/queries/base_executor.py diff --git a/weaviate/collections/queries/bm25/executors.py b/weaviate/collections/queries/bm25/executors.py deleted file mode 100644 index 6ba42faaa..000000000 --- a/weaviate/collections/queries/bm25/executors.py +++ /dev/null @@ -1,223 +0,0 @@ -from typing import Any, Generic, List, Optional, Union, cast - -from weaviate.collections.classes.filters import _Filters -from weaviate.collections.classes.grpc import GroupBy, Rerank, METADATA -from weaviate.collections.classes.internal import ( - QuerySearchReturnType, - GenerativeSearchReturnType, - ReturnProperties, - ReturnReferences, - _QueryOptions, - _Generative, - _GroupBy, - _GenerativeConfigRuntime, - _SinglePrompt, - _GroupedTask, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.executor import _BaseExecutor -from weaviate.connect import executor -from weaviate.connect.v4 import ConnectionType -from weaviate.exceptions import WeaviateUnsupportedFeatureError -from weaviate.proto.v1.search_get_pb2 import SearchReply -from weaviate.types import INCLUDE_VECTOR - - -class _BM25GenerateExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[ - GenerativeSearchReturnType[Properties, References, TProperties, TReferences] - ]: - """Perform retrieval-augmented generation (RaG) on the results of a keyword-based BM25 search of objects in this collection. - - See the [docs](https://weaviate.io/developers/weaviate/search/bm25) for a more detailed explanation. - - Args: - query: The keyword-based query to search for, REQUIRED. If None, a normal search will be performed. - single_prompt: The prompt to use for RaG on each object individually. - grouped_task: The prompt to use for RaG on the entire result set. - grouped_properties: The properties to use in the RaG on the entire result set. - query_properties: The properties to search in. If not specified, all properties are searched. - limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. - auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. - filters: The filters to apply to the search. - group_by: How the results should be grouped by a specific property. - rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - return_references: The references to return for each object. - - NOTE: - If `return_properties` is not provided then all non-reference properties are returned including nested properties. - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - If `return_references` is not provided then no references are provided. - - Returns: - A `GenerativeReturn` or `GenerativeGroupByReturn` object that includes the searched objects. - If `group_by` is provided then a `GenerativeGroupByReturn` object is returned, otherwise a `GenerativeReturn` object is returned. - - Raises: - weaviate.exceptions.WeaviateQueryError: If the network connection to Weaviate fails. - weaviate.exceptions.WeaviateUnsupportedFeatureError: If a group by is provided and the Weaviate server version is lower than 1.25.0. - """ - if group_by is not None and not self._connection.supports_groupby_in_bm25_and_hybrid(): - raise WeaviateUnsupportedFeatureError( - "BM25 group by", self._connection.server_version, "1.25.0" - ) - - def resp( - res: SearchReply, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_generative_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - rerank, - group_by, - ), - ), - ) - - request = self._query.bm25( - query=query, - properties=query_properties, - limit=limit, - offset=offset, - autocut=auto_limit, - filters=filters, - group_by=_GroupBy.from_input(group_by), - rerank=rerank, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - generative=_Generative( - single=single_prompt, - grouped=grouped_task, - grouped_properties=grouped_properties, - generative_provider=generative_provider, - ), - ) - return executor.execute( - response_callback=resp, method=self._connection.grpc_search, request=request - ) - - -class _BM25QueryExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[QuerySearchReturnType[Properties, References, TProperties, TReferences]]: - """Search for objects in this collection using the keyword-based BM25 algorithm. - - See the [docs](https://weaviate.io/developers/weaviate/search/bm25) for a more detailed explanation. - - Args: - query: The keyword-based query to search for, REQUIRED. If None, a normal search will be performed. - query_properties: The properties to search in. If not specified, all properties are searched. - limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. - auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. - filters: The filters to apply to the search. - group_by: How the results should be grouped by a specific property. - rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - - NOTE: - If `return_properties` is not provided then all non-reference properties are returned including nested properties. - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - If `return_references` is not provided then no references are provided. - - Returns: - A `QueryReturn` or `GroupByReturn` object that includes the searched objects. - If `group_by` is provided then a `GroupByReturn` object is returned, otherwise a `QueryReturn` object is returned. - - Raises: - weaviate.exceptions.WeaviateQueryError: If the network connection to Weaviate fails. - weaviate.exceptions.WeaviateNotImplementedError: If a group by is provided and the Weaviate server version is lower than 1.25.0. - """ - if group_by is not None and not self._connection.supports_groupby_in_bm25_and_hybrid(): - raise WeaviateUnsupportedFeatureError( - "BM25 group by", self._connection.server_version, "1.25.0" - ) - - def resp( - res: SearchReply, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_query_or_groupby_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - rerank, - group_by, - ), - ), - ) - - request = self._query.bm25( - query=query, - properties=query_properties, - limit=limit, - offset=offset, - autocut=auto_limit, - filters=filters, - group_by=_GroupBy.from_input(group_by), - rerank=rerank, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(cast(Any, return_references)), - ) - return executor.execute( - response_callback=resp, - method=self._connection.grpc_search, - request=request, - ) diff --git a/weaviate/collections/queries/bm25/generate.pyi b/weaviate/collections/queries/bm25/generate.pyi deleted file mode 100644 index d1ae6cd74..000000000 --- a/weaviate/collections/queries/bm25/generate.pyi +++ /dev/null @@ -1,589 +0,0 @@ -from typing import Generic, List, Literal, Optional, Type, Union, overload - -from weaviate.collections.classes.filters import ( - _Filters, -) -from weaviate.collections.classes.generative import ( - _GenerativeConfigRuntime, - _GroupedTask, - _SinglePrompt, -) -from weaviate.collections.classes.grpc import GroupBy, Rerank, METADATA, PROPERTIES, REFERENCES -from weaviate.collections.classes.internal import ( - GenerativeReturn, - GenerativeGroupByReturn, - CrossReferences, - ReturnProperties, - ReturnReferences, - GenerativeSearchReturnType, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.bm25.executors import _BM25GenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import INCLUDE_VECTOR - -class _BM25GenerateAsync( - Generic[Properties, References], _BM25GenerateExecutor[ConnectionAsync, Properties, References] -): - @overload - async def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeReturn[Properties, References]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeReturn[Properties, CrossReferences]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeReturn[Properties, TReferences]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeReturn[TProperties, References]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeReturn[TProperties, CrossReferences]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeReturn[TProperties, TReferences]: ... - - ###### GROUP BY ###### - - @overload - async def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[Properties, References]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[Properties, TReferences]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[TProperties, References]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... - -class _BM25Generate( - Generic[Properties, References], _BM25GenerateExecutor[ConnectionSync, Properties, References] -): - @overload - def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeReturn[Properties, References]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeReturn[Properties, CrossReferences]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeReturn[Properties, TReferences]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeReturn[TProperties, References]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeReturn[TProperties, CrossReferences]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeReturn[TProperties, TReferences]: ... - - ##### GROUP BY ##### - - @overload - def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[str] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[Properties, References]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[str] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[str] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[Properties, TReferences]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[str] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[TProperties, References]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[str] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[str] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/bm25/generate/__init__.py b/weaviate/collections/queries/bm25/generate/__init__.py new file mode 100644 index 000000000..3396d3701 --- /dev/null +++ b/weaviate/collections/queries/bm25/generate/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _BM25GenerateAsync +from .sync import _BM25Generate + +__all__ = [ + "_BM25GenerateAsync", + "_BM25Generate", +] diff --git a/weaviate/collections/queries/bm25/generate.py b/weaviate/collections/queries/bm25/generate/async_.py similarity index 50% rename from weaviate/collections/queries/bm25/generate.py rename to weaviate/collections/queries/bm25/generate/async_.py index 1f346055b..140b28dda 100644 --- a/weaviate/collections/queries/bm25/generate.py +++ b/weaviate/collections/queries/bm25/generate/async_.py @@ -2,8 +2,8 @@ from weaviate.connect import executor from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.bm25.executors import _BM25GenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.collections.queries.bm25.generate.executor import _BM25GenerateExecutor +from weaviate.connect.v4 import ConnectionAsync @executor.wrap("async") @@ -11,10 +11,3 @@ class _BM25GenerateAsync( Generic[Properties, References], _BM25GenerateExecutor[ConnectionAsync, Properties, References] ): pass - - -@executor.wrap("sync") -class _BM25Generate( - Generic[Properties, References], _BM25GenerateExecutor[ConnectionSync, Properties, References] -): - pass diff --git a/weaviate/collections/queries/fetch_objects_by_ids/generate.pyi b/weaviate/collections/queries/bm25/generate/async_.pyi similarity index 62% rename from weaviate/collections/queries/fetch_objects_by_ids/generate.pyi rename to weaviate/collections/queries/bm25/generate/async_.pyi index b7397a35a..1ef40bed3 100644 --- a/weaviate/collections/queries/fetch_objects_by_ids/generate.pyi +++ b/weaviate/collections/queries/bm25/generate/async_.pyi @@ -1,288 +1,304 @@ -from typing import Generic, Iterable, List, Literal, Optional, Type, Union, overload - -from weaviate.collections.classes.generative import ( - _GenerativeConfigRuntime, - _GroupedTask, - _SinglePrompt, -) -from weaviate.collections.classes.grpc import ( - METADATA, - PROPERTIES, - REFERENCES, - Sorting, -) +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import GroupBy, Rerank, METADATA from weaviate.collections.classes.internal import ( GenerativeReturn, + GenerativeGroupByReturn, CrossReferences, + GenerativeSearchReturnType, ReturnProperties, ReturnReferences, - GenerativeReturnType, + _QueryOptions, + _Generative, + _GroupBy, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, ) +from weaviate.collections.classes.grpc import PROPERTIES, REFERENCES from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.fetch_objects_by_ids.executors import ( - _FetchObjectsByIdsGenerateExecutor, -) -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import UUID, INCLUDE_VECTOR +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionAsync +from .executor import _BM25GenerateExecutor -class _FetchObjectsByIDsGenerateAsync( - Generic[Properties, References], - _FetchObjectsByIdsGenerateExecutor[ConnectionAsync, Properties, References], +class _BM25GenerateAsync( + Generic[Properties, References], _BM25GenerateExecutor[ConnectionAsync, Properties, References] ): @overload - async def fetch_objects_by_ids( + async def bm25( self, - ids: Iterable[UUID], + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None ) -> GenerativeReturn[Properties, References]: ... @overload - async def fetch_objects_by_ids( + async def bm25( self, - ids: Iterable[UUID], + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES ) -> GenerativeReturn[Properties, CrossReferences]: ... @overload - async def fetch_objects_by_ids( + async def bm25( self, - ids: Iterable[UUID], + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences] ) -> GenerativeReturn[Properties, TReferences]: ... @overload - async def fetch_objects_by_ids( + async def bm25( self, - ids: Iterable[UUID], + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None ) -> GenerativeReturn[TProperties, References]: ... @overload - async def fetch_objects_by_ids( + async def bm25( self, - ids: Iterable[UUID], + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES ) -> GenerativeReturn[TProperties, CrossReferences]: ... @overload - async def fetch_objects_by_ids( + async def bm25( self, - ids: Iterable[UUID], + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences] ) -> GenerativeReturn[TProperties, TReferences]: ... @overload - async def fetch_objects_by_ids( + async def bm25( self, - ids: Iterable[UUID], + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None - ) -> GenerativeReturnType[Properties, References, TProperties, TReferences]: ... - -class _FetchObjectsByIDsGenerate( - Generic[Properties, References], - _FetchObjectsByIdsGenerateExecutor[ConnectionSync, Properties, References], -): - @overload - def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None - ) -> GenerativeReturn[Properties, References]: ... + ) -> GenerativeGroupByReturn[Properties, References]: ... @overload - def fetch_objects_by_ids( + async def bm25( self, - ids: Iterable[UUID], + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES - ) -> GenerativeReturn[Properties, CrossReferences]: ... + ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... @overload - def fetch_objects_by_ids( + async def bm25( self, - ids: Iterable[UUID], + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences] - ) -> GenerativeReturn[Properties, TReferences]: ... + ) -> GenerativeGroupByReturn[Properties, TReferences]: ... @overload - def fetch_objects_by_ids( + async def bm25( self, - ids: Iterable[UUID], + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None - ) -> GenerativeReturn[TProperties, References]: ... + ) -> GenerativeGroupByReturn[TProperties, References]: ... @overload - def fetch_objects_by_ids( + async def bm25( self, - ids: Iterable[UUID], + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES - ) -> GenerativeReturn[TProperties, CrossReferences]: ... + ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... @overload - def fetch_objects_by_ids( + async def bm25( self, - ids: Iterable[UUID], + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences] - ) -> GenerativeReturn[TProperties, TReferences]: ... + ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... @overload - def fetch_objects_by_ids( + async def bm25( self, - ids: Iterable[UUID], + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None - ) -> GenerativeReturnType[Properties, References, TProperties, TReferences]: ... + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/bm25/generate/executor.py b/weaviate/collections/queries/bm25/generate/executor.py new file mode 100644 index 000000000..a2ebc85fc --- /dev/null +++ b/weaviate/collections/queries/bm25/generate/executor.py @@ -0,0 +1,423 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload + +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import GroupBy, Rerank, METADATA +from weaviate.collections.classes.internal import ( + GenerativeReturn, + GenerativeGroupByReturn, + CrossReferences, + GenerativeSearchReturnType, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _Generative, + _GroupBy, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.grpc import PROPERTIES, REFERENCES +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import INCLUDE_VECTOR + + +class _BM25GenerateExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] +): + @overload + def bm25( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None, + ) -> executor.Result[GenerativeReturn[Properties, References]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES, + ) -> executor.Result[GenerativeReturn[Properties, CrossReferences]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences], + ) -> executor.Result[GenerativeReturn[Properties, TReferences]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None, + ) -> executor.Result[GenerativeReturn[TProperties, References]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES, + ) -> executor.Result[GenerativeReturn[TProperties, CrossReferences]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences], + ) -> executor.Result[GenerativeReturn[TProperties, TReferences]]: ... + + ##### GROUP BY ##### + + @overload + def bm25( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None, + ) -> executor.Result[GenerativeGroupByReturn[Properties, References]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES, + ) -> executor.Result[GenerativeGroupByReturn[Properties, CrossReferences]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences], + ) -> executor.Result[GenerativeGroupByReturn[Properties, TReferences]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None, + ) -> executor.Result[GenerativeGroupByReturn[TProperties, References]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES, + ) -> executor.Result[GenerativeGroupByReturn[TProperties, CrossReferences]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences], + ) -> executor.Result[GenerativeGroupByReturn[TProperties, TReferences]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None, + ) -> executor.Result[ + GenerativeSearchReturnType[Properties, References, TProperties, TReferences] + ]: ... + + def bm25( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None, + ) -> executor.Result[ + GenerativeSearchReturnType[Properties, References, TProperties, TReferences] + ]: + """Perform retrieval-augmented generation (RaG) on the results of a keyword-based BM25 search of objects in this collection. + + See the [docs](https://weaviate.io/developers/weaviate/search/bm25) for a more detailed explanation. + + Args: + query: The keyword-based query to search for, REQUIRED. If None, a normal search will be performed. + single_prompt: The prompt to use for RaG on each object individually. + grouped_task: The prompt to use for RaG on the entire result set. + grouped_properties: The properties to use in the RaG on the entire result set. + query_properties: The properties to search in. If not specified, all properties are searched. + limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. + auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. + filters: The filters to apply to the search. + group_by: How the results should be grouped by a specific property. + rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + return_references: The references to return for each object. + + NOTE: + If `return_properties` is not provided then all non-reference properties are returned including nested properties. + If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + If `return_references` is not provided then no references are provided. + + Returns: + A `GenerativeReturn` or `GenerativeGroupByReturn` object that includes the searched objects. + If `group_by` is provided then a `GenerativeGroupByReturn` object is returned, otherwise a `GenerativeReturn` object is returned. + + Raises: + weaviate.exceptions.WeaviateQueryError: If the network connection to Weaviate fails. + weaviate.exceptions.WeaviateUnsupportedFeatureError: If a group by is provided and the Weaviate server version is lower than 1.25.0. + """ + if group_by is not None and not self._connection.supports_groupby_in_bm25_and_hybrid(): + raise WeaviateUnsupportedFeatureError( + "BM25 group by", self._connection.server_version, "1.25.0" + ) + + def resp( + res: SearchReply, + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_generative_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + rerank, + group_by, + ), + ), + ) + + request = self._query.bm25( + query=query, + properties=query_properties, + limit=limit, + offset=offset, + autocut=auto_limit, + filters=filters, + group_by=_GroupBy.from_input(group_by), + rerank=rerank, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + generative=_Generative( + single=single_prompt, + grouped=grouped_task, + grouped_properties=grouped_properties, + generative_provider=generative_provider, + ), + ) + return executor.execute( + response_callback=resp, method=self._connection.grpc_search, request=request + ) diff --git a/weaviate/collections/queries/bm25/generate/sync.py b/weaviate/collections/queries/bm25/generate/sync.py new file mode 100644 index 000000000..b995dd61c --- /dev/null +++ b/weaviate/collections/queries/bm25/generate/sync.py @@ -0,0 +1,13 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.bm25.generate.executor import _BM25GenerateExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _BM25Generate( + Generic[Properties, References], _BM25GenerateExecutor[ConnectionSync, Properties, References] +): + pass diff --git a/weaviate/collections/queries/fetch_objects/generate.pyi b/weaviate/collections/queries/bm25/generate/sync.pyi similarity index 67% rename from weaviate/collections/queries/fetch_objects/generate.pyi rename to weaviate/collections/queries/bm25/generate/sync.pyi index bb69faad6..1991abb3d 100644 --- a/weaviate/collections/queries/fetch_objects/generate.pyi +++ b/weaviate/collections/queries/bm25/generate/sync.pyi @@ -1,287 +1,304 @@ -from typing import Generic, List, Literal, Optional, Union, Type, overload - +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload from weaviate.collections.classes.filters import _Filters -from weaviate.collections.classes.generative import ( - _GenerativeConfigRuntime, - _GroupedTask, - _SinglePrompt, -) -from weaviate.collections.classes.grpc import ( - METADATA, - PROPERTIES, - REFERENCES, - Sorting, -) +from weaviate.collections.classes.grpc import GroupBy, Rerank, METADATA from weaviate.collections.classes.internal import ( GenerativeReturn, + GenerativeGroupByReturn, CrossReferences, + GenerativeSearchReturnType, ReturnProperties, ReturnReferences, - GenerativeReturnType, + _QueryOptions, + _Generative, + _GroupBy, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, ) +from weaviate.collections.classes.grpc import PROPERTIES, REFERENCES from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.fetch_objects.executors import _FetchObjectsGenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import UUID, INCLUDE_VECTOR +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionSync +from .executor import _BM25GenerateExecutor -class _FetchObjectsGenerateAsync( - Generic[Properties, References], - _FetchObjectsGenerateExecutor[ConnectionAsync, Properties, References], +class _BM25Generate( + Generic[Properties, References], _BM25GenerateExecutor[ConnectionSync, Properties, References] ): @overload - async def fetch_objects( + def bm25( self, + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None ) -> GenerativeReturn[Properties, References]: ... @overload - async def fetch_objects( + def bm25( self, + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES ) -> GenerativeReturn[Properties, CrossReferences]: ... @overload - async def fetch_objects( + def bm25( self, + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences] ) -> GenerativeReturn[Properties, TReferences]: ... @overload - async def fetch_objects( + def bm25( self, + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None ) -> GenerativeReturn[TProperties, References]: ... @overload - async def fetch_objects( + def bm25( self, + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES ) -> GenerativeReturn[TProperties, CrossReferences]: ... @overload - async def fetch_objects( + def bm25( self, + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences] ) -> GenerativeReturn[TProperties, TReferences]: ... @overload - async def fetch_objects( + def bm25( self, + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None - ) -> GenerativeReturnType[Properties, References, TProperties, TReferences]: ... - -class _FetchObjectsGenerate( - Generic[Properties, References], - _FetchObjectsGenerateExecutor[ConnectionSync, Properties, References], -): - @overload - def fetch_objects( - self, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None - ) -> GenerativeReturn[Properties, References]: ... + ) -> GenerativeGroupByReturn[Properties, References]: ... @overload - def fetch_objects( + def bm25( self, + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES - ) -> GenerativeReturn[Properties, CrossReferences]: ... + ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... @overload - def fetch_objects( + def bm25( self, + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences] - ) -> GenerativeReturn[Properties, TReferences]: ... + ) -> GenerativeGroupByReturn[Properties, TReferences]: ... @overload - def fetch_objects( + def bm25( self, + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None - ) -> GenerativeReturn[TProperties, References]: ... + ) -> GenerativeGroupByReturn[TProperties, References]: ... @overload - def fetch_objects( + def bm25( self, + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES - ) -> GenerativeReturn[TProperties, CrossReferences]: ... + ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... @overload - def fetch_objects( + def bm25( self, + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences] - ) -> GenerativeReturn[TProperties, TReferences]: ... + ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... @overload - def fetch_objects( + def bm25( self, + query: Optional[str], *, single_prompt: Union[str, _SinglePrompt, None] = None, grouped_task: Union[str, _GroupedTask, None] = None, grouped_properties: Optional[List[str]] = None, generative_provider: Optional[_GenerativeConfigRuntime] = None, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None - ) -> GenerativeReturnType[Properties, References, TProperties, TReferences]: ... + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/bm25/query.pyi b/weaviate/collections/queries/bm25/query.pyi deleted file mode 100644 index 51c14575c..000000000 --- a/weaviate/collections/queries/bm25/query.pyi +++ /dev/null @@ -1,480 +0,0 @@ -from typing import Generic, List, Literal, Optional, Type, Union, overload - -from weaviate.collections.classes.filters import ( - _Filters, -) -from weaviate.collections.classes.grpc import GroupBy, Rerank, METADATA, PROPERTIES, REFERENCES -from weaviate.collections.classes.internal import ( - QueryReturn, - GroupByReturn, - CrossReferences, - ReturnProperties, - ReturnReferences, - QuerySearchReturnType, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.bm25.executors import _BM25QueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import INCLUDE_VECTOR - -class _BM25QueryAsync( - Generic[Properties, References], _BM25QueryExecutor[ConnectionAsync, Properties, References] -): - @overload - async def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> QueryReturn[Properties, References]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> QueryReturn[Properties, TReferences]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> QueryReturn[TProperties, References]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> QueryReturn[TProperties, CrossReferences]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> QueryReturn[TProperties, TReferences]: ... - - ###### GROUP BY ###### - - @overload - async def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GroupByReturn[Properties, References]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GroupByReturn[Properties, CrossReferences]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GroupByReturn[Properties, TReferences]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GroupByReturn[TProperties, References]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GroupByReturn[TProperties, CrossReferences]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GroupByReturn[TProperties, TReferences]: ... - @overload - async def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... - -class _BM25Query( - Generic[Properties, References], _BM25QueryExecutor[ConnectionSync, Properties, References] -): - @overload - def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> QueryReturn[Properties, References]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> QueryReturn[Properties, TReferences]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> QueryReturn[TProperties, References]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> QueryReturn[TProperties, CrossReferences]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> QueryReturn[TProperties, TReferences]: ... - - ###### GROUP BY ###### - - @overload - def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[str] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GroupByReturn[Properties, References]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[str] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GroupByReturn[Properties, CrossReferences]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[str] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GroupByReturn[Properties, TReferences]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[str] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GroupByReturn[TProperties, References]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[str] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GroupByReturn[TProperties, CrossReferences]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[str] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GroupByReturn[TProperties, TReferences]: ... - @overload - def bm25( - self, - query: Optional[str], - *, - query_properties: Optional[List[str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/bm25/query/__init__.py b/weaviate/collections/queries/bm25/query/__init__.py new file mode 100644 index 000000000..1c6a64aa4 --- /dev/null +++ b/weaviate/collections/queries/bm25/query/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _BM25QueryAsync +from .sync import _BM25Query + +__all__ = [ + "_BM25Query", + "_BM25QueryAsync", +] diff --git a/weaviate/collections/queries/bm25/query.py b/weaviate/collections/queries/bm25/query/async_.py similarity index 50% rename from weaviate/collections/queries/bm25/query.py rename to weaviate/collections/queries/bm25/query/async_.py index 1969350a3..da63fcc48 100644 --- a/weaviate/collections/queries/bm25/query.py +++ b/weaviate/collections/queries/bm25/query/async_.py @@ -2,8 +2,8 @@ from weaviate.connect import executor from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.bm25.executors import _BM25QueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.collections.queries.bm25.query.executor import _BM25QueryExecutor +from weaviate.connect.v4 import ConnectionAsync @executor.wrap("async") @@ -11,10 +11,3 @@ class _BM25QueryAsync( Generic[Properties, References], _BM25QueryExecutor[ConnectionAsync, Properties, References] ): pass - - -@executor.wrap("sync") -class _BM25Query( - Generic[Properties, References], _BM25QueryExecutor[ConnectionSync, Properties, References] -): - pass diff --git a/weaviate/collections/queries/bm25/query/async_.pyi b/weaviate/collections/queries/bm25/query/async_.pyi new file mode 100644 index 000000000..484f826ef --- /dev/null +++ b/weaviate/collections/queries/bm25/query/async_.pyi @@ -0,0 +1,231 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import GroupBy, Rerank, METADATA +from weaviate.collections.classes.internal import ( + QuerySearchReturnType, + QueryReturn, + CrossReferences, + GroupByReturn, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _GroupBy, +) +from weaviate.collections.classes.grpc import PROPERTIES, REFERENCES +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionAsync +from .executor import _BM25QueryExecutor + +class _BM25QueryAsync( + Generic[Properties, References], _BM25QueryExecutor[ConnectionAsync, Properties, References] +): + @overload + async def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + async def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + async def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + async def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + async def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + async def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + async def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GroupByReturn[Properties, References]: ... + @overload + async def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GroupByReturn[Properties, CrossReferences]: ... + @overload + async def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GroupByReturn[Properties, TReferences]: ... + @overload + async def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GroupByReturn[TProperties, References]: ... + @overload + async def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GroupByReturn[TProperties, CrossReferences]: ... + @overload + async def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GroupByReturn[TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/bm25/query/executor.py b/weaviate/collections/queries/bm25/query/executor.py new file mode 100644 index 000000000..45bfb6867 --- /dev/null +++ b/weaviate/collections/queries/bm25/query/executor.py @@ -0,0 +1,333 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload + +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import GroupBy, Rerank, METADATA +from weaviate.collections.classes.internal import ( + QuerySearchReturnType, + QueryReturn, + CrossReferences, + GroupByReturn, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _GroupBy, +) +from weaviate.collections.classes.grpc import PROPERTIES, REFERENCES +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import INCLUDE_VECTOR + + +class _BM25QueryExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] +): + @overload + def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None, + ) -> executor.Result[QueryReturn[Properties, References]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES, + ) -> executor.Result[QueryReturn[Properties, CrossReferences]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences], + ) -> executor.Result[QueryReturn[Properties, TReferences]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None, + ) -> executor.Result[QueryReturn[TProperties, References]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES, + ) -> executor.Result[QueryReturn[TProperties, CrossReferences]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences], + ) -> executor.Result[QueryReturn[TProperties, TReferences]]: ... + + ###### GROUP BY ###### + + @overload + def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None, + ) -> executor.Result[GroupByReturn[Properties, References]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES, + ) -> executor.Result[GroupByReturn[Properties, CrossReferences]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences], + ) -> executor.Result[GroupByReturn[Properties, TReferences]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None, + ) -> executor.Result[GroupByReturn[TProperties, References]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES, + ) -> executor.Result[GroupByReturn[TProperties, CrossReferences]]: ... + + @overload + def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences], + ) -> executor.Result[GroupByReturn[TProperties, TReferences]]: ... + + def bm25( + self, + query: Optional[str], + *, + query_properties: Optional[List[str]] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None, + ) -> executor.Result[QuerySearchReturnType[Properties, References, TProperties, TReferences]]: + """Search for objects in this collection using the keyword-based BM25 algorithm. + + See the [docs](https://weaviate.io/developers/weaviate/search/bm25) for a more detailed explanation. + + Args: + query: The keyword-based query to search for, REQUIRED. If None, a normal search will be performed. + query_properties: The properties to search in. If not specified, all properties are searched. + limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. + auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. + filters: The filters to apply to the search. + group_by: How the results should be grouped by a specific property. + rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + + NOTE: + If `return_properties` is not provided then all non-reference properties are returned including nested properties. + If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + If `return_references` is not provided then no references are provided. + + Returns: + A `QueryReturn` or `GroupByReturn` object that includes the searched objects. + If `group_by` is provided then a `GroupByReturn` object is returned, otherwise a `QueryReturn` object is returned. + + Raises: + weaviate.exceptions.WeaviateQueryError: If the network connection to Weaviate fails. + weaviate.exceptions.WeaviateNotImplementedError: If a group by is provided and the Weaviate server version is lower than 1.25.0. + """ + if group_by is not None and not self._connection.supports_groupby_in_bm25_and_hybrid(): + raise WeaviateUnsupportedFeatureError( + "BM25 group by", self._connection.server_version, "1.25.0" + ) + + def resp( + res: SearchReply, + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_query_or_groupby_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + rerank, + group_by, + ), + ), + ) + + request = self._query.bm25( + query=query, + properties=query_properties, + limit=limit, + offset=offset, + autocut=auto_limit, + filters=filters, + group_by=_GroupBy.from_input(group_by), + rerank=rerank, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(cast(Any, return_references)), + ) + return executor.execute( + response_callback=resp, + method=self._connection.grpc_search, + request=request, + ) diff --git a/weaviate/collections/queries/bm25/query/sync.py b/weaviate/collections/queries/bm25/query/sync.py new file mode 100644 index 000000000..9d93c459b --- /dev/null +++ b/weaviate/collections/queries/bm25/query/sync.py @@ -0,0 +1,13 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.bm25.query.executor import _BM25QueryExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _BM25Query( + Generic[Properties, References], _BM25QueryExecutor[ConnectionSync, Properties, References] +): + pass diff --git a/weaviate/collections/queries/fetch_objects/query.pyi b/weaviate/collections/queries/bm25/query/sync.pyi similarity index 56% rename from weaviate/collections/queries/fetch_objects/query.pyi rename to weaviate/collections/queries/bm25/query/sync.pyi index b282ad6d4..388981cae 100644 --- a/weaviate/collections/queries/fetch_objects/query.pyi +++ b/weaviate/collections/queries/bm25/query/sync.pyi @@ -1,221 +1,231 @@ -from typing import Generic, Literal, Optional, Union, Type, overload - +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload from weaviate.collections.classes.filters import _Filters -from weaviate.collections.classes.grpc import METADATA, PROPERTIES, REFERENCES, Sorting +from weaviate.collections.classes.grpc import GroupBy, Rerank, METADATA from weaviate.collections.classes.internal import ( + QuerySearchReturnType, QueryReturn, CrossReferences, + GroupByReturn, ReturnProperties, ReturnReferences, - QueryReturnType, + _QueryOptions, + _GroupBy, ) +from weaviate.collections.classes.grpc import PROPERTIES, REFERENCES from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.collections.queries.fetch_objects.executors import _FetchObjectsQueryExecutor -from weaviate.types import UUID, INCLUDE_VECTOR +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionSync +from .executor import _BM25QueryExecutor -class _FetchObjectsQueryAsync( - Generic[Properties, References], - _FetchObjectsQueryExecutor[ConnectionAsync, Properties, References], +class _BM25Query( + Generic[Properties, References], _BM25QueryExecutor[ConnectionSync, Properties, References] ): @overload - async def fetch_objects( + def bm25( self, + query: Optional[str], *, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None ) -> QueryReturn[Properties, References]: ... @overload - async def fetch_objects( + def bm25( self, + query: Optional[str], *, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES ) -> QueryReturn[Properties, CrossReferences]: ... @overload - async def fetch_objects( + def bm25( self, + query: Optional[str], *, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences] ) -> QueryReturn[Properties, TReferences]: ... @overload - async def fetch_objects( + def bm25( self, + query: Optional[str], *, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None ) -> QueryReturn[TProperties, References]: ... @overload - async def fetch_objects( + def bm25( self, + query: Optional[str], *, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES ) -> QueryReturn[TProperties, CrossReferences]: ... @overload - async def fetch_objects( + def bm25( self, + query: Optional[str], *, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences] ) -> QueryReturn[TProperties, TReferences]: ... @overload - async def fetch_objects( + def bm25( self, + query: Optional[str], *, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None - ) -> QueryReturnType[Properties, References, TProperties, TReferences]: ... - -class _FetchObjectsQuery( - Generic[Properties, References], - _FetchObjectsQueryExecutor[ConnectionSync, Properties, References], -): - @overload - def fetch_objects( - self, - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None - ) -> QueryReturn[Properties, References]: ... + ) -> GroupByReturn[Properties, References]: ... @overload - def fetch_objects( + def bm25( self, + query: Optional[str], *, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES - ) -> QueryReturn[Properties, CrossReferences]: ... + ) -> GroupByReturn[Properties, CrossReferences]: ... @overload - def fetch_objects( + def bm25( self, + query: Optional[str], *, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences] - ) -> QueryReturn[Properties, TReferences]: ... + ) -> GroupByReturn[Properties, TReferences]: ... @overload - def fetch_objects( + def bm25( self, + query: Optional[str], *, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None - ) -> QueryReturn[TProperties, References]: ... + ) -> GroupByReturn[TProperties, References]: ... @overload - def fetch_objects( + def bm25( self, + query: Optional[str], *, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES - ) -> QueryReturn[TProperties, CrossReferences]: ... + ) -> GroupByReturn[TProperties, CrossReferences]: ... @overload - def fetch_objects( + def bm25( self, + query: Optional[str], *, + query_properties: Optional[List[str]] = None, limit: Optional[int] = None, offset: Optional[int] = None, - after: Optional[UUID] = None, + auto_limit: Optional[int] = None, filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences] - ) -> QueryReturn[TProperties, TReferences]: ... - @overload - def fetch_objects( - self, - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - filters: Optional[_Filters] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None - ) -> QueryReturnType[Properties, References, TProperties, TReferences]: ... + ) -> GroupByReturn[TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/fetch_object_by_id/__init__.py b/weaviate/collections/queries/fetch_object_by_id/__init__.py index 8177c4c5f..5c5874ea9 100644 --- a/weaviate/collections/queries/fetch_object_by_id/__init__.py +++ b/weaviate/collections/queries/fetch_object_by_id/__init__.py @@ -1,4 +1,5 @@ -from .query import _FetchObjectByIDQueryAsync, _FetchObjectByIDQuery +from .async_ import _FetchObjectByIDQueryAsync +from .sync import _FetchObjectByIDQuery __all__ = [ "_FetchObjectByIDQuery", diff --git a/weaviate/collections/queries/fetch_object_by_id/async_.py b/weaviate/collections/queries/fetch_object_by_id/async_.py new file mode 100644 index 000000000..45922be99 --- /dev/null +++ b/weaviate/collections/queries/fetch_object_by_id/async_.py @@ -0,0 +1,16 @@ +from typing import ( + Generic, +) + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.fetch_object_by_id.executor import _FetchObjectByIDQueryExecutor +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _FetchObjectByIDQueryAsync( + Generic[Properties, References], + _FetchObjectByIDQueryExecutor[ConnectionAsync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/fetch_object_by_id/async_.pyi b/weaviate/collections/queries/fetch_object_by_id/async_.pyi new file mode 100644 index 000000000..67e5fbc3d --- /dev/null +++ b/weaviate/collections/queries/fetch_object_by_id/async_.pyi @@ -0,0 +1,88 @@ +from typing import Generic, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import Filter +from weaviate.collections.classes.grpc import MetadataQuery, PROPERTIES, REFERENCES +from weaviate.collections.classes.internal import ( + ObjectSingleReturn, + CrossReferences, + MetadataSingleObjectReturn, + QuerySingleReturn, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import INCLUDE_VECTOR, UUID +from weaviate.connect.v4 import ConnectionAsync +from .executor import _FetchObjectByIDQueryExecutor + +class _FetchObjectByIDQueryAsync( + Generic[Properties, References], + _FetchObjectByIDQueryExecutor[ConnectionAsync, Properties, References], +): + @overload + async def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> ObjectSingleReturn[Properties, References]: ... + @overload + async def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> ObjectSingleReturn[Properties, CrossReferences]: ... + @overload + async def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> ObjectSingleReturn[Properties, TReferences]: ... + @overload + async def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> ObjectSingleReturn[TProperties, References]: ... + @overload + async def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> ObjectSingleReturn[TProperties, CrossReferences]: ... + @overload + async def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> ObjectSingleReturn[TProperties, TReferences]: ... + @overload + async def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QuerySingleReturn[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/fetch_object_by_id/executor.py b/weaviate/collections/queries/fetch_object_by_id/executor.py index 9c9390f38..de08d699f 100644 --- a/weaviate/collections/queries/fetch_object_by_id/executor.py +++ b/weaviate/collections/queries/fetch_object_by_id/executor.py @@ -1,15 +1,12 @@ -from typing import ( - Generic, - Optional, - cast, -) +from typing import Generic, Literal, Optional, Type, Union, cast, overload from weaviate.collections.classes.filters import ( Filter, ) -from weaviate.collections.classes.grpc import MetadataQuery +from weaviate.collections.classes.grpc import MetadataQuery, PROPERTIES, REFERENCES from weaviate.collections.classes.internal import ( ObjectSingleReturn, + CrossReferences, MetadataSingleObjectReturn, QuerySingleReturn, ReturnProperties, @@ -17,16 +14,86 @@ _QueryOptions, ) from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.executor import _BaseExecutor +from weaviate.collections.queries.base_executor import _BaseExecutor from weaviate.connect import executor from weaviate.connect.v4 import ConnectionType from weaviate.proto.v1.search_get_pb2 import SearchReply from weaviate.types import INCLUDE_VECTOR, UUID -class _FetchObjectsByIdQueryExecutor( +class _FetchObjectByIDQueryExecutor( Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] ): + @overload + def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None, + ) -> executor.Result[ObjectSingleReturn[Properties, References]]: ... + + @overload + def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES, + ) -> executor.Result[ObjectSingleReturn[Properties, CrossReferences]]: ... + + @overload + def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences], + ) -> executor.Result[ObjectSingleReturn[Properties, TReferences]]: ... + + @overload + def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Type[TProperties], + return_references: Literal[None] = None, + ) -> executor.Result[ObjectSingleReturn[TProperties, References]]: ... + + @overload + def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Type[TProperties], + return_references: REFERENCES, + ) -> executor.Result[ObjectSingleReturn[TProperties, CrossReferences]]: ... + + @overload + def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Type[TProperties], + return_references: Type[TReferences], + ) -> executor.Result[ObjectSingleReturn[TProperties, TReferences]]: ... + + @overload + def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None, + ) -> executor.Result[QuerySingleReturn[Properties, References, TProperties, TReferences]]: ... + def fetch_object_by_id( self, uuid: UUID, @@ -34,7 +101,7 @@ def fetch_object_by_id( *, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[QuerySingleReturn[Properties, References, TProperties, TReferences]]: + ): """Retrieve an object from the server by its UUID. Args: diff --git a/weaviate/collections/queries/fetch_object_by_id/query.py b/weaviate/collections/queries/fetch_object_by_id/query.py deleted file mode 100644 index c8a0326dc..000000000 --- a/weaviate/collections/queries/fetch_object_by_id/query.py +++ /dev/null @@ -1,24 +0,0 @@ -from typing import ( - Generic, -) - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.fetch_object_by_id.executor import _FetchObjectsByIdQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _FetchObjectByIDQueryAsync( - Generic[Properties, References], - _FetchObjectsByIdQueryExecutor[ConnectionAsync, Properties, References], -): - pass - - -@executor.wrap("sync") -class _FetchObjectByIDQuery( - Generic[Properties, References], - _FetchObjectsByIdQueryExecutor[ConnectionSync, Properties, References], -): - pass diff --git a/weaviate/collections/queries/fetch_object_by_id/query.pyi b/weaviate/collections/queries/fetch_object_by_id/query.pyi deleted file mode 100644 index a07c123cf..000000000 --- a/weaviate/collections/queries/fetch_object_by_id/query.pyi +++ /dev/null @@ -1,157 +0,0 @@ -from typing import ( - Generic, - Literal, - Optional, - Type, - Union, - overload, -) - -from weaviate.collections.classes.grpc import PROPERTIES, REFERENCES -from weaviate.collections.classes.internal import ( - ObjectSingleReturn, - CrossReferences, - ReturnProperties, - ReturnReferences, - QuerySingleReturn, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.fetch_object_by_id.executor import _FetchObjectsByIdQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import INCLUDE_VECTOR, UUID - -class _FetchObjectByIDQueryAsync( - Generic[Properties, References], - _FetchObjectsByIdQueryExecutor[ConnectionAsync, Properties, References], -): - @overload - async def fetch_object_by_id( - self, - uuid: UUID, - include_vector: INCLUDE_VECTOR = False, - *, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> ObjectSingleReturn[Properties, References]: ... - @overload - async def fetch_object_by_id( - self, - uuid: UUID, - include_vector: INCLUDE_VECTOR = False, - *, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> ObjectSingleReturn[Properties, CrossReferences]: ... - @overload - async def fetch_object_by_id( - self, - uuid: UUID, - include_vector: INCLUDE_VECTOR = False, - *, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> ObjectSingleReturn[Properties, TReferences]: ... - @overload - async def fetch_object_by_id( - self, - uuid: UUID, - include_vector: INCLUDE_VECTOR = False, - *, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> ObjectSingleReturn[TProperties, References]: ... - @overload - async def fetch_object_by_id( - self, - uuid: UUID, - include_vector: INCLUDE_VECTOR = False, - *, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> Optional[ObjectSingleReturn[TProperties, CrossReferences]]: ... - @overload - async def fetch_object_by_id( - self, - uuid: UUID, - include_vector: INCLUDE_VECTOR = False, - *, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> ObjectSingleReturn[TProperties, TReferences]: ... - @overload - async def fetch_object_by_id( - self, - uuid: UUID, - include_vector: INCLUDE_VECTOR = False, - *, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySingleReturn[Properties, References, TProperties, TReferences]: ... - -class _FetchObjectByIDQuery( - Generic[Properties, References], - _FetchObjectsByIdQueryExecutor[ConnectionSync, Properties, References], -): - @overload - def fetch_object_by_id( - self, - uuid: UUID, - include_vector: INCLUDE_VECTOR = False, - *, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> ObjectSingleReturn[Properties, References]: ... - @overload - def fetch_object_by_id( - self, - uuid: UUID, - include_vector: INCLUDE_VECTOR = False, - *, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> ObjectSingleReturn[Properties, CrossReferences]: ... - @overload - def fetch_object_by_id( - self, - uuid: UUID, - include_vector: INCLUDE_VECTOR = False, - *, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> ObjectSingleReturn[Properties, TReferences]: ... - @overload - def fetch_object_by_id( - self, - uuid: UUID, - include_vector: INCLUDE_VECTOR = False, - *, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> ObjectSingleReturn[TProperties, References]: ... - @overload - def fetch_object_by_id( - self, - uuid: UUID, - include_vector: INCLUDE_VECTOR = False, - *, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> ObjectSingleReturn[TProperties, CrossReferences]: ... - @overload - def fetch_object_by_id( - self, - uuid: UUID, - include_vector: INCLUDE_VECTOR = False, - *, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> ObjectSingleReturn[TProperties, TReferences]: ... - @overload - def fetch_object_by_id( - self, - uuid: UUID, - include_vector: INCLUDE_VECTOR = False, - *, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySingleReturn[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/fetch_object_by_id/sync.py b/weaviate/collections/queries/fetch_object_by_id/sync.py new file mode 100644 index 000000000..c403cbff0 --- /dev/null +++ b/weaviate/collections/queries/fetch_object_by_id/sync.py @@ -0,0 +1,16 @@ +from typing import ( + Generic, +) + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.fetch_object_by_id.executor import _FetchObjectByIDQueryExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _FetchObjectByIDQuery( + Generic[Properties, References], + _FetchObjectByIDQueryExecutor[ConnectionSync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/fetch_object_by_id/sync.pyi b/weaviate/collections/queries/fetch_object_by_id/sync.pyi new file mode 100644 index 000000000..ebcdb84ff --- /dev/null +++ b/weaviate/collections/queries/fetch_object_by_id/sync.pyi @@ -0,0 +1,88 @@ +from typing import Generic, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import Filter +from weaviate.collections.classes.grpc import MetadataQuery, PROPERTIES, REFERENCES +from weaviate.collections.classes.internal import ( + ObjectSingleReturn, + CrossReferences, + MetadataSingleObjectReturn, + QuerySingleReturn, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import INCLUDE_VECTOR, UUID +from weaviate.connect.v4 import ConnectionSync +from .executor import _FetchObjectByIDQueryExecutor + +class _FetchObjectByIDQuery( + Generic[Properties, References], + _FetchObjectByIDQueryExecutor[ConnectionSync, Properties, References], +): + @overload + def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> ObjectSingleReturn[Properties, References]: ... + @overload + def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> ObjectSingleReturn[Properties, CrossReferences]: ... + @overload + def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> ObjectSingleReturn[Properties, TReferences]: ... + @overload + def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> ObjectSingleReturn[TProperties, References]: ... + @overload + def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> ObjectSingleReturn[TProperties, CrossReferences]: ... + @overload + def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> ObjectSingleReturn[TProperties, TReferences]: ... + @overload + def fetch_object_by_id( + self, + uuid: UUID, + include_vector: INCLUDE_VECTOR = False, + *, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QuerySingleReturn[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/fetch_objects/generate.py b/weaviate/collections/queries/fetch_objects/generate.py deleted file mode 100644 index 0af07e187..000000000 --- a/weaviate/collections/queries/fetch_objects/generate.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Generic - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.fetch_objects.executors import _FetchObjectsGenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _FetchObjectsGenerateAsync( - Generic[Properties, References], - _FetchObjectsGenerateExecutor[ConnectionAsync, Properties, References], -): - pass - - -@executor.wrap("sync") -class _FetchObjectsGenerate( - Generic[Properties, References], - _FetchObjectsGenerateExecutor[ConnectionSync, Properties, References], -): - pass diff --git a/weaviate/collections/queries/fetch_objects/generate/__init__.py b/weaviate/collections/queries/fetch_objects/generate/__init__.py new file mode 100644 index 000000000..88b92220c --- /dev/null +++ b/weaviate/collections/queries/fetch_objects/generate/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _FetchObjectsGenerateAsync +from .sync import _FetchObjectsGenerate + +__all__ = [ + "_FetchObjectsGenerate", + "_FetchObjectsGenerateAsync", +] diff --git a/weaviate/collections/queries/fetch_objects/generate/async_.py b/weaviate/collections/queries/fetch_objects/generate/async_.py new file mode 100644 index 000000000..89ba9bd46 --- /dev/null +++ b/weaviate/collections/queries/fetch_objects/generate/async_.py @@ -0,0 +1,16 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.fetch_objects.generate.executor import ( + _FetchObjectsGenerateExecutor, +) +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _FetchObjectsGenerateAsync( + Generic[Properties, References], + _FetchObjectsGenerateExecutor[ConnectionAsync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/fetch_objects/generate/async_.pyi b/weaviate/collections/queries/fetch_objects/generate/async_.pyi new file mode 100644 index 000000000..1a34cdc3b --- /dev/null +++ b/weaviate/collections/queries/fetch_objects/generate/async_.pyi @@ -0,0 +1,155 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import METADATA, Sorting +from weaviate.collections.classes.internal import ( + GenerativeReturnType, + GenerativeReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _Generative, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.grpc import PROPERTIES, REFERENCES +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect.v4 import ConnectionType +from weaviate.connect import executor +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import UUID, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionAsync +from .executor import _FetchObjectsGenerateExecutor + +class _FetchObjectsGenerateAsync( + Generic[Properties, References], + _FetchObjectsGenerateExecutor[ConnectionAsync, Properties, References], +): + @overload + async def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + async def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + async def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + async def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + async def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + async def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + async def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/fetch_objects/generate/executor.py b/weaviate/collections/queries/fetch_objects/generate/executor.py new file mode 100644 index 000000000..9ca71e314 --- /dev/null +++ b/weaviate/collections/queries/fetch_objects/generate/executor.py @@ -0,0 +1,246 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload + +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import METADATA, Sorting +from weaviate.collections.classes.internal import ( + GenerativeReturnType, + GenerativeReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _Generative, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.grpc import PROPERTIES, REFERENCES +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect.v4 import ConnectionType +from weaviate.connect import executor +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import UUID, INCLUDE_VECTOR + + +class _FetchObjectsGenerateExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] +): + @overload + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> executor.Result[GenerativeReturn[Properties, References]]: ... + + @overload + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> executor.Result[GenerativeReturn[Properties, CrossReferences]]: ... + + @overload + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> executor.Result[GenerativeReturn[Properties, TReferences]]: ... + + @overload + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> executor.Result[GenerativeReturn[TProperties, References]]: ... + + @overload + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> executor.Result[GenerativeReturn[TProperties, CrossReferences]]: ... + + @overload + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> executor.Result[GenerativeReturn[TProperties, TReferences]]: ... + + @overload + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> executor.Result[ + GenerativeReturnType[Properties, References, TProperties, TReferences] + ]: ... + + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> executor.Result[GenerativeReturnType[Properties, References, TProperties, TReferences]]: + """Perform retrieval-augmented generation (RaG) on the results of a simple get query of objects in this collection. + + Args: + single_prompt: The prompt to use for RaG on each object individually. + grouped_task: The prompt to use for RaG on the entire result set. + grouped_properties: The properties to use in the RaG on the entire result set. + limit: The maximum number of results to return. If not specified, the default limit specified by Weaviate is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in Weaviate. + after: The UUID of the object to start from. If not specified, the retrieval begins from the first object in Weaviate. + filters: The filters to apply to the retrieval. + sort: The sorting to apply to the retrieval. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + return_references: The references to return for each object. + + NOTE: + - If `return_properties` is not provided then all properties are returned except for blob properties. + - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + - If `return_references` is not provided then no references are provided. + + Returns: + A `_GenerativeNearMediaReturn` object that includes the searched objects with per-object generated results and group generated results. + + Raises: + weaviate.exceptions.WeaviateGRPCQueryError: If the network connection to Weaviate fails. + """ + + def resp( + res: SearchReply, + ) -> GenerativeReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_generative_query_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + ), + ), + ) + + request = self._query.get( + limit=limit, + offset=offset, + after=after, + filters=filters, + sort=sort, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + generative=_Generative( + single=single_prompt, + grouped=grouped_task, + grouped_properties=grouped_properties, + generative_provider=generative_provider, + ), + ) + return executor.execute( + response_callback=resp, + method=self._connection.grpc_search, + request=request, + ) diff --git a/weaviate/collections/queries/fetch_objects/generate/sync.py b/weaviate/collections/queries/fetch_objects/generate/sync.py new file mode 100644 index 000000000..e824e65d9 --- /dev/null +++ b/weaviate/collections/queries/fetch_objects/generate/sync.py @@ -0,0 +1,16 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.fetch_objects.generate.executor import ( + _FetchObjectsGenerateExecutor, +) +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _FetchObjectsGenerate( + Generic[Properties, References], + _FetchObjectsGenerateExecutor[ConnectionSync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/fetch_objects/generate/sync.pyi b/weaviate/collections/queries/fetch_objects/generate/sync.pyi new file mode 100644 index 000000000..f63cdc321 --- /dev/null +++ b/weaviate/collections/queries/fetch_objects/generate/sync.pyi @@ -0,0 +1,155 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import METADATA, Sorting +from weaviate.collections.classes.internal import ( + GenerativeReturnType, + GenerativeReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _Generative, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.grpc import PROPERTIES, REFERENCES +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect.v4 import ConnectionType +from weaviate.connect import executor +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import UUID, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionSync +from .executor import _FetchObjectsGenerateExecutor + +class _FetchObjectsGenerate( + Generic[Properties, References], + _FetchObjectsGenerateExecutor[ConnectionSync, Properties, References], +): + @overload + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + def fetch_objects( + self, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/fetch_objects/query.py b/weaviate/collections/queries/fetch_objects/query.py deleted file mode 100644 index 6c41466a0..000000000 --- a/weaviate/collections/queries/fetch_objects/query.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Generic - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.fetch_objects.executors import _FetchObjectsQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _FetchObjectsQueryAsync( - Generic[Properties, References], - _FetchObjectsQueryExecutor[ConnectionAsync, Properties, References], -): - pass - - -@executor.wrap("sync") -class _FetchObjectsQuery( - Generic[Properties, References], - _FetchObjectsQueryExecutor[ConnectionSync, Properties, References], -): - pass diff --git a/weaviate/collections/queries/fetch_objects/query/__init__.py b/weaviate/collections/queries/fetch_objects/query/__init__.py new file mode 100644 index 000000000..f07af322c --- /dev/null +++ b/weaviate/collections/queries/fetch_objects/query/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _FetchObjectsQueryAsync +from .sync import _FetchObjectsQuery + +__all__ = [ + "_FetchObjectsQuery", + "_FetchObjectsQueryAsync", +] diff --git a/weaviate/collections/queries/fetch_objects/query/async_.py b/weaviate/collections/queries/fetch_objects/query/async_.py new file mode 100644 index 000000000..110968086 --- /dev/null +++ b/weaviate/collections/queries/fetch_objects/query/async_.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.fetch_objects.query.executor import _FetchObjectsQueryExecutor +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _FetchObjectsQueryAsync( + Generic[Properties, References], + _FetchObjectsQueryExecutor[ConnectionAsync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/fetch_objects/query/async_.pyi b/weaviate/collections/queries/fetch_objects/query/async_.pyi new file mode 100644 index 000000000..4b06790f5 --- /dev/null +++ b/weaviate/collections/queries/fetch_objects/query/async_.pyi @@ -0,0 +1,123 @@ +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import METADATA, Sorting +from weaviate.collections.classes.internal import ( + QueryReturnType, + QueryReturn, + ReturnProperties, + ReturnReferences, + CrossReferences, + _QueryOptions, +) +from weaviate.collections.classes.grpc import PROPERTIES, REFERENCES +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect.v4 import ConnectionType +from weaviate.connect import executor +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import UUID, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionAsync +from .executor import _FetchObjectsQueryExecutor + +class _FetchObjectsQueryAsync( + Generic[Properties, References], + _FetchObjectsQueryExecutor[ConnectionAsync, Properties, References], +): + @overload + async def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + async def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + async def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + async def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + async def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + async def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + async def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QueryReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/fetch_objects/executors.py b/weaviate/collections/queries/fetch_objects/query/executor.py similarity index 52% rename from weaviate/collections/queries/fetch_objects/executors.py rename to weaviate/collections/queries/fetch_objects/query/executor.py index 7500904b8..be12b753e 100644 --- a/weaviate/collections/queries/fetch_objects/executors.py +++ b/weaviate/collections/queries/fetch_objects/query/executor.py @@ -1,36 +1,31 @@ -from typing import Any, Generic, List, Optional, Union, cast +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload from weaviate.collections.classes.filters import _Filters from weaviate.collections.classes.grpc import METADATA, Sorting from weaviate.collections.classes.internal import ( QueryReturnType, - GenerativeReturnType, + QueryReturn, ReturnProperties, ReturnReferences, + CrossReferences, _QueryOptions, - _Generative, - _GenerativeConfigRuntime, - _SinglePrompt, - _GroupedTask, ) +from weaviate.collections.classes.grpc import PROPERTIES, REFERENCES from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.executor import _BaseExecutor +from weaviate.collections.queries.base_executor import _BaseExecutor from weaviate.connect.v4 import ConnectionType from weaviate.connect import executor from weaviate.proto.v1.search_get_pb2 import SearchReply from weaviate.types import UUID, INCLUDE_VECTOR -class _FetchObjectsGenerateExecutor( +class _FetchObjectsQueryExecutor( Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] ): + @overload def fetch_objects( self, *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, limit: Optional[int] = None, offset: Optional[int] = None, after: Optional[UUID] = None, @@ -38,80 +33,100 @@ def fetch_objects( sort: Optional[Sorting] = None, include_vector: INCLUDE_VECTOR = False, return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None - ) -> executor.Result[GenerativeReturnType[Properties, References, TProperties, TReferences]]: - """Perform retrieval-augmented generation (RaG) on the results of a simple get query of objects in this collection. - - Args: - single_prompt: The prompt to use for RaG on each object individually. - grouped_task: The prompt to use for RaG on the entire result set. - grouped_properties: The properties to use in the RaG on the entire result set. - limit: The maximum number of results to return. If not specified, the default limit specified by Weaviate is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in Weaviate. - after: The UUID of the object to start from. If not specified, the retrieval begins from the first object in Weaviate. - filters: The filters to apply to the retrieval. - sort: The sorting to apply to the retrieval. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - return_references: The references to return for each object. + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> executor.Result[QueryReturn[Properties, References]]: ... - NOTE: - - If `return_properties` is not provided then all properties are returned except for blob properties. - - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - - If `return_references` is not provided then no references are provided. + @overload + def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> executor.Result[QueryReturn[Properties, CrossReferences]]: ... - Returns: - A `_GenerativeNearMediaReturn` object that includes the searched objects with per-object generated results and group generated results. + @overload + def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> executor.Result[QueryReturn[Properties, TReferences]]: ... - Raises: - weaviate.exceptions.WeaviateGRPCQueryError: If the network connection to Weaviate fails. - """ + @overload + def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> executor.Result[QueryReturn[TProperties, References]]: ... - def resp( - res: SearchReply, - ) -> GenerativeReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_generative_query_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - ), - ), - ) + @overload + def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> executor.Result[QueryReturn[TProperties, CrossReferences]]: ... - request = self._query.get( - limit=limit, - offset=offset, - after=after, - filters=filters, - sort=sort, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - generative=_Generative( - single=single_prompt, - grouped=grouped_task, - grouped_properties=grouped_properties, - generative_provider=generative_provider, - ), - ) - return executor.execute( - response_callback=resp, - method=self._connection.grpc_search, - request=request, - ) + @overload + def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> executor.Result[QueryReturn[TProperties, TReferences]]: ... + @overload + def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> executor.Result[QueryReturnType[Properties, References, TProperties, TReferences]]: ... -class _FetchObjectsQueryExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): def fetch_objects( self, *, diff --git a/weaviate/collections/queries/fetch_objects/query/sync.py b/weaviate/collections/queries/fetch_objects/query/sync.py new file mode 100644 index 000000000..a0fcf513f --- /dev/null +++ b/weaviate/collections/queries/fetch_objects/query/sync.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.fetch_objects.query.executor import _FetchObjectsQueryExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _FetchObjectsQuery( + Generic[Properties, References], + _FetchObjectsQueryExecutor[ConnectionSync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/fetch_objects/query/sync.pyi b/weaviate/collections/queries/fetch_objects/query/sync.pyi new file mode 100644 index 000000000..8f9efc23e --- /dev/null +++ b/weaviate/collections/queries/fetch_objects/query/sync.pyi @@ -0,0 +1,123 @@ +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import METADATA, Sorting +from weaviate.collections.classes.internal import ( + QueryReturnType, + QueryReturn, + ReturnProperties, + ReturnReferences, + CrossReferences, + _QueryOptions, +) +from weaviate.collections.classes.grpc import PROPERTIES, REFERENCES +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect.v4 import ConnectionType +from weaviate.connect import executor +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import UUID, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionSync +from .executor import _FetchObjectsQueryExecutor + +class _FetchObjectsQuery( + Generic[Properties, References], + _FetchObjectsQueryExecutor[ConnectionSync, Properties, References], +): + @overload + def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + def fetch_objects( + self, + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + filters: Optional[_Filters] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QueryReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/fetch_objects_by_ids/executors.py b/weaviate/collections/queries/fetch_objects_by_ids/executors.py deleted file mode 100644 index b86b1471a..000000000 --- a/weaviate/collections/queries/fetch_objects_by_ids/executors.py +++ /dev/null @@ -1,164 +0,0 @@ -from typing import Any, Generic, List, Iterable, Optional, Union, cast - -from weaviate.collections.classes.filters import Filter -from weaviate.collections.classes.grpc import METADATA, Sorting -from weaviate.collections.classes.internal import ( - QueryReturnType, - GenerativeReturnType, - ReturnProperties, - ReturnReferences, - _QueryOptions, - _Generative, - _GenerativeConfigRuntime, - _SinglePrompt, - _GroupedTask, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.executor import _BaseExecutor -from weaviate.connect import executor -from weaviate.connect.v4 import ConnectionAsync, ConnectionType - -from weaviate.proto.v1.search_get_pb2 import SearchReply -from weaviate.types import UUID, INCLUDE_VECTOR - - -class _FetchObjectsByIdsGenerateExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime], - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None - ) -> executor.Result[GenerativeReturnType[Properties, References, TProperties, TReferences]]: - """Perform retrieval-augmented generation (RAG) on the results of a simple get query of objects matching the provided IDs in this collection. - - See the docstring of `fetch_objects` for more information on the arguments. - """ - - def resp( - res: SearchReply, - ) -> GenerativeReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_generative_query_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - ), - ), - ) - - if not ids: - if isinstance(self._connection, ConnectionAsync): - - async def _execute() -> ( - GenerativeReturnType[Properties, References, TProperties, TReferences] - ): - return resp(SearchReply()) - - return _execute() - return resp(SearchReply()) - - request = self._query.get( - limit=limit, - offset=offset, - after=after, - filters=Filter.any_of([Filter.by_id().equal(uuid) for uuid in ids]), - sort=sort, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - generative=_Generative( - single=single_prompt, - grouped=grouped_task, - grouped_properties=grouped_properties, - generative_provider=generative_provider, - ), - ) - return executor.execute( - response_callback=resp, - method=self._connection.grpc_search, - request=request, - ) - - -class _FetchObjectsByIdsQueryExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None - ) -> executor.Result[QueryReturnType[Properties, References, TProperties, TReferences]]: - """Perform a special case of fetch_objects based on filters on uuid. - - See the docstring of `fetch_objects` for more information on the arguments. - """ - - def resp( - res: SearchReply, - ) -> QueryReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_query_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - ), - ), - ) - - if not ids: - if isinstance(self._connection, ConnectionAsync): - - async def _execute() -> ( - QueryReturnType[Properties, References, TProperties, TReferences] - ): - return resp(SearchReply()) - - return _execute() - return resp(SearchReply()) - - request = self._query.get( - limit=limit, - offset=offset, - after=after, - filters=Filter.any_of([Filter.by_id().equal(uuid) for uuid in ids]), - sort=sort, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(cast(Any, return_references)), - ) - return executor.execute( - response_callback=resp, - method=self._connection.grpc_search, - request=request, - ) diff --git a/weaviate/collections/queries/fetch_objects_by_ids/generate.py b/weaviate/collections/queries/fetch_objects_by_ids/generate.py deleted file mode 100644 index d7397699c..000000000 --- a/weaviate/collections/queries/fetch_objects_by_ids/generate.py +++ /dev/null @@ -1,24 +0,0 @@ -from typing import Generic - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.fetch_objects_by_ids.executors import ( - _FetchObjectsByIdsGenerateExecutor, -) -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _FetchObjectsByIDsGenerateAsync( - Generic[Properties, References], - _FetchObjectsByIdsGenerateExecutor[ConnectionAsync, Properties, References], -): - pass - - -@executor.wrap("sync") -class _FetchObjectsByIDsGenerate( - Generic[Properties, References], - _FetchObjectsByIdsGenerateExecutor[ConnectionSync, Properties, References], -): - pass diff --git a/weaviate/collections/queries/fetch_objects_by_ids/generate/__init__.py b/weaviate/collections/queries/fetch_objects_by_ids/generate/__init__.py new file mode 100644 index 000000000..5335457d3 --- /dev/null +++ b/weaviate/collections/queries/fetch_objects_by_ids/generate/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _FetchObjectsByIDsGenerateAsync +from .sync import _FetchObjectsByIDsGenerate + +__all__ = [ + "_FetchObjectsByIDsGenerate", + "_FetchObjectsByIDsGenerateAsync", +] diff --git a/weaviate/collections/queries/fetch_objects_by_ids/generate/async_.py b/weaviate/collections/queries/fetch_objects_by_ids/generate/async_.py new file mode 100644 index 000000000..8fed6f2fa --- /dev/null +++ b/weaviate/collections/queries/fetch_objects_by_ids/generate/async_.py @@ -0,0 +1,16 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.fetch_objects_by_ids.generate.executor import ( + _FetchObjectsByIDsGenerateExecutor, +) +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _FetchObjectsByIDsGenerateAsync( + Generic[Properties, References], + _FetchObjectsByIDsGenerateExecutor[ConnectionAsync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/fetch_objects_by_ids/generate/async_.pyi b/weaviate/collections/queries/fetch_objects_by_ids/generate/async_.pyi new file mode 100644 index 000000000..03decb013 --- /dev/null +++ b/weaviate/collections/queries/fetch_objects_by_ids/generate/async_.pyi @@ -0,0 +1,154 @@ +from typing import Any, Generic, List, Literal, Iterable, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import Filter +from weaviate.collections.classes.grpc import METADATA, Sorting, PROPERTIES, REFERENCES +from weaviate.collections.classes.internal import ( + GenerativeReturnType, + GenerativeReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _Generative, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionAsync, ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import UUID, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionAsync +from .executor import _FetchObjectsByIDsGenerateExecutor + +class _FetchObjectsByIDsGenerateAsync( + Generic[Properties, References], + _FetchObjectsByIDsGenerateExecutor[ConnectionAsync, Properties, References], +): + @overload + async def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + async def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + async def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + async def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + async def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + async def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + async def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/fetch_objects_by_ids/generate/executor.py b/weaviate/collections/queries/fetch_objects_by_ids/generate/executor.py new file mode 100644 index 000000000..b003780f0 --- /dev/null +++ b/weaviate/collections/queries/fetch_objects_by_ids/generate/executor.py @@ -0,0 +1,234 @@ +from typing import Any, Generic, List, Literal, Iterable, Optional, Type, Union, cast, overload + +from weaviate.collections.classes.filters import Filter +from weaviate.collections.classes.grpc import METADATA, Sorting, PROPERTIES, REFERENCES +from weaviate.collections.classes.internal import ( + GenerativeReturnType, + GenerativeReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _Generative, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionAsync, ConnectionType + +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import UUID, INCLUDE_VECTOR + + +class _FetchObjectsByIDsGenerateExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] +): + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> executor.Result[GenerativeReturn[Properties, References]]: ... + + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> executor.Result[GenerativeReturn[Properties, CrossReferences]]: ... + + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> executor.Result[GenerativeReturn[Properties, TReferences]]: ... + + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> executor.Result[GenerativeReturn[TProperties, References]]: ... + + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> executor.Result[GenerativeReturn[TProperties, CrossReferences]]: ... + + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> executor.Result[GenerativeReturn[TProperties, TReferences]]: ... + + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> executor.Result[ + GenerativeReturnType[Properties, References, TProperties, TReferences] + ]: ... + + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> executor.Result[GenerativeReturnType[Properties, References, TProperties, TReferences]]: + """Perform retrieval-augmented generation (RAG) on the results of a simple get query of objects matching the provided IDs in this collection. + + See the docstring of `fetch_objects` for more information on the arguments. + """ + + def resp( + res: SearchReply, + ) -> GenerativeReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_generative_query_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + ), + ), + ) + + if not ids: + if isinstance(self._connection, ConnectionAsync): + + async def _execute() -> ( + GenerativeReturnType[Properties, References, TProperties, TReferences] + ): + return resp(SearchReply()) + + return _execute() + return resp(SearchReply()) + + request = self._query.get( + limit=limit, + offset=offset, + after=after, + filters=Filter.any_of([Filter.by_id().equal(uuid) for uuid in ids]), + sort=sort, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + generative=_Generative( + single=single_prompt, + grouped=grouped_task, + grouped_properties=grouped_properties, + generative_provider=generative_provider, + ), + ) + return executor.execute( + response_callback=resp, + method=self._connection.grpc_search, + request=request, + ) diff --git a/weaviate/collections/queries/fetch_objects_by_ids/generate/sync.py b/weaviate/collections/queries/fetch_objects_by_ids/generate/sync.py new file mode 100644 index 000000000..3e927639e --- /dev/null +++ b/weaviate/collections/queries/fetch_objects_by_ids/generate/sync.py @@ -0,0 +1,16 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.fetch_objects_by_ids.generate.executor import ( + _FetchObjectsByIDsGenerateExecutor, +) +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _FetchObjectsByIDsGenerate( + Generic[Properties, References], + _FetchObjectsByIDsGenerateExecutor[ConnectionSync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/fetch_objects_by_ids/generate/sync.pyi b/weaviate/collections/queries/fetch_objects_by_ids/generate/sync.pyi new file mode 100644 index 000000000..96f3a3877 --- /dev/null +++ b/weaviate/collections/queries/fetch_objects_by_ids/generate/sync.pyi @@ -0,0 +1,154 @@ +from typing import Any, Generic, List, Literal, Iterable, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import Filter +from weaviate.collections.classes.grpc import METADATA, Sorting, PROPERTIES, REFERENCES +from weaviate.collections.classes.internal import ( + GenerativeReturnType, + GenerativeReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _Generative, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionAsync, ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import UUID, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionSync +from .executor import _FetchObjectsByIDsGenerateExecutor + +class _FetchObjectsByIDsGenerate( + Generic[Properties, References], + _FetchObjectsByIDsGenerateExecutor[ConnectionSync, Properties, References], +): + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/fetch_objects_by_ids/query.py b/weaviate/collections/queries/fetch_objects_by_ids/query.py deleted file mode 100644 index 333fde8fe..000000000 --- a/weaviate/collections/queries/fetch_objects_by_ids/query.py +++ /dev/null @@ -1,24 +0,0 @@ -from typing import Generic - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.fetch_objects_by_ids.executors import ( - _FetchObjectsByIdsQueryExecutor, -) -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _FetchObjectsByIDsQueryAsync( - Generic[Properties, References], - _FetchObjectsByIdsQueryExecutor[ConnectionAsync, Properties, References], -): - pass - - -@executor.wrap("sync") -class _FetchObjectsByIDsQuery( - Generic[Properties, References], - _FetchObjectsByIdsQueryExecutor[ConnectionSync, Properties, References], -): - pass diff --git a/weaviate/collections/queries/fetch_objects_by_ids/query.pyi b/weaviate/collections/queries/fetch_objects_by_ids/query.pyi deleted file mode 100644 index 73785bf92..000000000 --- a/weaviate/collections/queries/fetch_objects_by_ids/query.pyi +++ /dev/null @@ -1,222 +0,0 @@ -from typing import Generic, Iterable, Literal, Optional, Type, Union, overload - -from weaviate.collections.classes.grpc import METADATA, PROPERTIES, REFERENCES, Sorting -from weaviate.collections.classes.internal import ( - QueryReturn, - CrossReferences, - ReturnProperties, - ReturnReferences, - QueryReturnType, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.fetch_objects_by_ids.executors import ( - _FetchObjectsByIdsQueryExecutor, -) -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import UUID, INCLUDE_VECTOR - -class _FetchObjectsByIDsQueryAsync( - Generic[Properties, References], - _FetchObjectsByIdsQueryExecutor[ConnectionAsync, Properties, References], -): - @overload - async def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None - ) -> QueryReturn[Properties, References]: ... - @overload - async def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - async def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences] - ) -> QueryReturn[Properties, TReferences]: ... - @overload - async def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None - ) -> QueryReturn[TProperties, References]: ... - @overload - async def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES - ) -> QueryReturn[TProperties, CrossReferences]: ... - @overload - async def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences] - ) -> QueryReturn[TProperties, TReferences]: ... - @overload - async def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None - ) -> QueryReturnType[Properties, References, TProperties, TReferences]: ... - -class _FetchObjectsByIDsQuery( - Generic[Properties, References], - _FetchObjectsByIdsQueryExecutor[ConnectionSync, Properties, References], -): - @overload - def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None - ) -> QueryReturn[Properties, References]: ... - @overload - def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences] - ) -> QueryReturn[Properties, TReferences]: ... - @overload - def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None - ) -> QueryReturn[TProperties, References]: ... - @overload - def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES - ) -> QueryReturn[TProperties, CrossReferences]: ... - @overload - def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences] - ) -> QueryReturn[TProperties, TReferences]: ... - @overload - def fetch_objects_by_ids( - self, - ids: Iterable[UUID], - *, - limit: Optional[int] = None, - offset: Optional[int] = None, - after: Optional[UUID] = None, - sort: Optional[Sorting] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None - ) -> QueryReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/fetch_objects_by_ids/query/__init__.py b/weaviate/collections/queries/fetch_objects_by_ids/query/__init__.py new file mode 100644 index 000000000..5023f55ba --- /dev/null +++ b/weaviate/collections/queries/fetch_objects_by_ids/query/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _FetchObjectsByIDsQueryAsync +from .sync import _FetchObjectsByIDsQuery + +__all__ = [ + "_FetchObjectsByIDsQuery", + "_FetchObjectsByIDsQueryAsync", +] diff --git a/weaviate/collections/queries/fetch_objects_by_ids/query/async_.py b/weaviate/collections/queries/fetch_objects_by_ids/query/async_.py new file mode 100644 index 000000000..3fcd18e22 --- /dev/null +++ b/weaviate/collections/queries/fetch_objects_by_ids/query/async_.py @@ -0,0 +1,16 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.fetch_objects_by_ids.query.executor import ( + _FetchObjectsByIDsQueryExecutor, +) +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _FetchObjectsByIDsQueryAsync( + Generic[Properties, References], + _FetchObjectsByIDsQueryExecutor[ConnectionAsync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/fetch_objects_by_ids/query/async_.pyi b/weaviate/collections/queries/fetch_objects_by_ids/query/async_.pyi new file mode 100644 index 000000000..3914eacbc --- /dev/null +++ b/weaviate/collections/queries/fetch_objects_by_ids/query/async_.pyi @@ -0,0 +1,122 @@ +from typing import Any, Generic, Literal, Iterable, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import Filter +from weaviate.collections.classes.grpc import METADATA, Sorting, PROPERTIES, REFERENCES +from weaviate.collections.classes.internal import ( + QueryReturnType, + QueryReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionAsync, ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import UUID, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionAsync +from .executor import _FetchObjectsByIDsQueryExecutor + +class _FetchObjectsByIDsQueryAsync( + Generic[Properties, References], + _FetchObjectsByIDsQueryExecutor[ConnectionAsync, Properties, References], +): + @overload + async def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + async def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + async def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + async def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + async def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + async def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + async def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QueryReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/fetch_objects_by_ids/query/executor.py b/weaviate/collections/queries/fetch_objects_by_ids/query/executor.py new file mode 100644 index 000000000..7cbf44650 --- /dev/null +++ b/weaviate/collections/queries/fetch_objects_by_ids/query/executor.py @@ -0,0 +1,190 @@ +from typing import Any, Generic, Literal, Iterable, Optional, Type, Union, cast, overload + +from weaviate.collections.classes.filters import Filter +from weaviate.collections.classes.grpc import METADATA, Sorting, PROPERTIES, REFERENCES +from weaviate.collections.classes.internal import ( + QueryReturnType, + QueryReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionAsync, ConnectionType + +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import UUID, INCLUDE_VECTOR + + +class _FetchObjectsByIDsQueryExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] +): + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> executor.Result[QueryReturn[Properties, References]]: ... + + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> executor.Result[QueryReturn[Properties, CrossReferences]]: ... + + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> executor.Result[QueryReturn[Properties, TReferences]]: ... + + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> executor.Result[QueryReturn[TProperties, References]]: ... + + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> executor.Result[QueryReturn[TProperties, CrossReferences]]: ... + + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> executor.Result[QueryReturn[TProperties, TReferences]]: ... + + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> executor.Result[QueryReturnType[Properties, References, TProperties, TReferences]]: ... + + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> executor.Result[QueryReturnType[Properties, References, TProperties, TReferences]]: + """Perform a special case of fetch_objects based on filters on uuid. + + See the docstring of `fetch_objects` for more information on the arguments. + """ + + def resp( + res: SearchReply, + ) -> QueryReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_query_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + ), + ), + ) + + if not ids: + if isinstance(self._connection, ConnectionAsync): + + async def _execute() -> ( + QueryReturnType[Properties, References, TProperties, TReferences] + ): + return resp(SearchReply()) + + return _execute() + return resp(SearchReply()) + + request = self._query.get( + limit=limit, + offset=offset, + after=after, + filters=Filter.any_of([Filter.by_id().equal(uuid) for uuid in ids]), + sort=sort, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(cast(Any, return_references)), + ) + return executor.execute( + response_callback=resp, + method=self._connection.grpc_search, + request=request, + ) diff --git a/weaviate/collections/queries/fetch_objects_by_ids/query/sync.py b/weaviate/collections/queries/fetch_objects_by_ids/query/sync.py new file mode 100644 index 000000000..2b9a3176f --- /dev/null +++ b/weaviate/collections/queries/fetch_objects_by_ids/query/sync.py @@ -0,0 +1,16 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.fetch_objects_by_ids.query.executor import ( + _FetchObjectsByIDsQueryExecutor, +) +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _FetchObjectsByIDsQuery( + Generic[Properties, References], + _FetchObjectsByIDsQueryExecutor[ConnectionSync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/fetch_objects_by_ids/query/sync.pyi b/weaviate/collections/queries/fetch_objects_by_ids/query/sync.pyi new file mode 100644 index 000000000..45109690a --- /dev/null +++ b/weaviate/collections/queries/fetch_objects_by_ids/query/sync.pyi @@ -0,0 +1,122 @@ +from typing import Any, Generic, Literal, Iterable, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import Filter +from weaviate.collections.classes.grpc import METADATA, Sorting, PROPERTIES, REFERENCES +from weaviate.collections.classes.internal import ( + QueryReturnType, + QueryReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionAsync, ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import UUID, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionSync +from .executor import _FetchObjectsByIDsQueryExecutor + +class _FetchObjectsByIDsQuery( + Generic[Properties, References], + _FetchObjectsByIDsQueryExecutor[ConnectionSync, Properties, References], +): + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + def fetch_objects_by_ids( + self, + ids: Iterable[UUID], + *, + limit: Optional[int] = None, + offset: Optional[int] = None, + after: Optional[UUID] = None, + sort: Optional[Sorting] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QueryReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/hybrid/executors.py b/weaviate/collections/queries/hybrid/executors.py deleted file mode 100644 index 3de5d828f..000000000 --- a/weaviate/collections/queries/hybrid/executors.py +++ /dev/null @@ -1,263 +0,0 @@ -from typing import Any, Generic, List, Optional, Union, cast - -from weaviate.collections.classes.filters import ( - _Filters, -) -from weaviate.collections.classes.grpc import ( - METADATA, - GroupBy, - HybridFusion, - Rerank, - HybridVectorType, - TargetVectorJoinType, -) -from weaviate.collections.classes.internal import ( - GenerativeSearchReturnType, - QuerySearchReturnType, - _Generative, - ReturnProperties, - ReturnReferences, - _QueryOptions, - _GroupBy, - _GenerativeConfigRuntime, - _SinglePrompt, - _GroupedTask, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.executor import _BaseExecutor -from weaviate.connect import executor -from weaviate.connect.v4 import ConnectionType -from weaviate.exceptions import WeaviateUnsupportedFeatureError -from weaviate.proto.v1.search_get_pb2 import SearchReply -from weaviate.types import NUMBER, INCLUDE_VECTOR - - -class _HybridGenerateExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def hybrid( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[ - GenerativeSearchReturnType[Properties, References, TProperties, TReferences] - ]: - """Perform retrieval-augmented generation (RaG) on the results of an object search in this collection using the hybrid algorithm blending keyword-based BM25 and vector-based similarity. - - See the [docs](https://weaviate.io/developers/weaviate/search/hybrid) for a more detailed explanation. - - Args: - query: The keyword-based query to search for, REQUIRED. If query and vector are both None, a normal search will be performed. - single_prompt: The prompt to use for RaG on each object individually. - grouped_task: The prompt to use for RaG on the entire result set. - grouped_properties: The properties to use in the RaG on the entire result set. - alpha: The weight of the BM25 score. If not specified, the default weight specified by the server is used. - vector: The specific vector to search for. If not specified, the query is vectorized and used in the similarity search. - query_properties: The properties to search in. If not specified, all properties are searched. - fusion_type: The type of fusion to apply. If not specified, the default fusion type specified by the server is used. - limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. - auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. - filters: The filters to apply to the search. - group_by: How the results should be grouped by a specific property. - rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. - target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - return_references: The references to return for each object. - - NOTE: - - If `return_properties` is not provided then all properties are returned except for blob properties. - - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - - If `return_references` is not provided then no references are provided. - - Returns: - A `GenerativeReturn` or `GenerativeGroupByReturn` object that includes the searched objects. - If `group_by` is provided then a `GenerativeGroupByReturn` object is returned, otherwise a `GenerativeReturn` object is returned. - - Raises: - weaviate.exceptions.WeaviateQueryError: If the network connection to Weaviate fails. - weaviate.exceptions.WeaviateNotImplementedError: If a group by is provided and the Weaviate server version is lower than 1.25.0. - """ - if group_by is not None and not self._connection.supports_groupby_in_bm25_and_hybrid(): - raise WeaviateUnsupportedFeatureError( - "Hybrid group by", self._connection.server_version, "1.25.0" - ) - - def resp( - res: SearchReply, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_generative_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - rerank, - group_by, - ), - ), - ) - - request = self._query.hybrid( - query=query, - alpha=alpha, - vector=vector, - properties=query_properties, - fusion_type=fusion_type, - limit=limit, - offset=offset, - distance=max_vector_distance, - autocut=auto_limit, - filters=filters, - group_by=_GroupBy.from_input(group_by), - rerank=rerank, - target_vector=target_vector, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - generative=_Generative( - single=single_prompt, - grouped=grouped_task, - grouped_properties=grouped_properties, - generative_provider=generative_provider, - ), - ) - return executor.execute( - response_callback=resp, - method=self._connection.grpc_search, - request=request, - ) - - -class _HybridQueryExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[QuerySearchReturnType[Properties, References, TProperties, TReferences]]: - """Search for objects in this collection using the hybrid algorithm blending keyword-based BM25 and vector-based similarity. - - See the [docs](https://weaviate.io/developers/weaviate/search/hybrid) for a more detailed explanation. - - Args: - query: The keyword-based query to search for, REQUIRED. If query and vector are both None, a normal search will be performed. - alpha: The weight of the BM25 score. If not specified, the default weight specified by the server is used. - vector: The specific vector to search for. If not specified, the query is vectorized and used in the similarity search. - query_properties: The properties to search in. If not specified, all properties are searched. - fusion_type: The type of fusion to apply. If not specified, the default fusion type specified by the server is used. - limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. - auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. - filters: The filters to apply to the search. - group_by: How the results should be grouped by a specific property. - rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. - target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - return_references: The references to return for each object. - - NOTE: - - If `return_properties` is not provided then all properties are returned except for blob properties. - - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - - If `return_references` is not provided then no references are provided. - - Returns: - A `QueryReturn` or `GroupByReturn` object that includes the searched objects. - If `group_by` is provided then a `GroupByReturn` object is returned, otherwise a `QueryReturn` object is returned. - - Raises: - weaviate.exceptions.WeaviateQueryError: If the network connection to Weaviate fails. - weaviate.exceptions.WeaviateNotImplementedError: If a group by is provided and the Weaviate server version is lower than 1.25.0. - """ - if group_by is not None and not self._connection.supports_groupby_in_bm25_and_hybrid(): - raise WeaviateUnsupportedFeatureError( - "Hybrid group by", self._connection.server_version, "1.25.0" - ) - - def resp( - res: SearchReply, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_query_or_groupby_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - rerank, - group_by, - ), - ), - ) - - request = self._query.hybrid( - query=query, - alpha=alpha, - vector=vector, - properties=query_properties, - fusion_type=fusion_type, - limit=limit, - offset=offset, - distance=max_vector_distance, - autocut=auto_limit, - filters=filters, - group_by=_GroupBy.from_input(group_by), - rerank=rerank, - target_vector=target_vector, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - ) - return executor.execute( - response_callback=resp, - method=self._connection.grpc_search, - request=request, - ) diff --git a/weaviate/collections/queries/hybrid/generate/__init__.py b/weaviate/collections/queries/hybrid/generate/__init__.py new file mode 100644 index 000000000..1d599ba67 --- /dev/null +++ b/weaviate/collections/queries/hybrid/generate/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _HybridGenerateAsync +from .sync import _HybridGenerate + +__all__ = [ + "_HybridGenerate", + "_HybridGenerateAsync", +] diff --git a/weaviate/collections/queries/hybrid/generate.py b/weaviate/collections/queries/hybrid/generate/async_.py similarity index 50% rename from weaviate/collections/queries/hybrid/generate.py rename to weaviate/collections/queries/hybrid/generate/async_.py index 3fb6de0bf..b864b345b 100644 --- a/weaviate/collections/queries/hybrid/generate.py +++ b/weaviate/collections/queries/hybrid/generate/async_.py @@ -2,8 +2,8 @@ from weaviate.connect import executor from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.hybrid.executors import _HybridGenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.collections.queries.hybrid.generate.executor import _HybridGenerateExecutor +from weaviate.connect.v4 import ConnectionAsync @executor.wrap("async") @@ -12,10 +12,3 @@ class _HybridGenerateAsync( _HybridGenerateExecutor[ConnectionAsync, Properties, References], ): pass - - -@executor.wrap("sync") -class _HybridGenerate( - Generic[Properties, References], _HybridGenerateExecutor[ConnectionSync, Properties, References] -): - pass diff --git a/weaviate/collections/queries/hybrid/generate/async_.pyi b/weaviate/collections/queries/hybrid/generate/async_.pyi new file mode 100644 index 000000000..31fe581e9 --- /dev/null +++ b/weaviate/collections/queries/hybrid/generate/async_.pyi @@ -0,0 +1,378 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + GroupBy, + HybridFusion, + Rerank, + HybridVectorType, + TargetVectorJoinType, + PROPERTIES, + REFERENCES, +) +from weaviate.collections.classes.internal import ( + GenerativeSearchReturnType, + GenerativeReturn, + GenerativeGroupByReturn, + CrossReferences, + _Generative, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _GroupBy, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionAsync +from .executor import _HybridGenerateExecutor + +class _HybridGenerateAsync( + Generic[Properties, References], + _HybridGenerateExecutor[ConnectionAsync, Properties, References], +): + @overload + async def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[Properties, References]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[TProperties, References]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/hybrid/generate.pyi b/weaviate/collections/queries/hybrid/generate/executor.py similarity index 51% rename from weaviate/collections/queries/hybrid/generate.pyi rename to weaviate/collections/queries/hybrid/generate/executor.py index 51142f6ad..7136894ea 100644 --- a/weaviate/collections/queries/hybrid/generate.pyi +++ b/weaviate/collections/queries/hybrid/generate/executor.py @@ -1,42 +1,46 @@ -from typing import Generic, List, Literal, Optional, Type, Union, overload +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload from weaviate.collections.classes.filters import ( _Filters, ) -from weaviate.collections.classes.generative import ( - _GenerativeConfigRuntime, - _GroupedTask, - _SinglePrompt, -) from weaviate.collections.classes.grpc import ( METADATA, - PROPERTIES, - REFERENCES, GroupBy, HybridFusion, - HybridVectorType, Rerank, + HybridVectorType, TargetVectorJoinType, + PROPERTIES, + REFERENCES, ) from weaviate.collections.classes.internal import ( + GenerativeSearchReturnType, GenerativeReturn, GenerativeGroupByReturn, CrossReferences, + _Generative, ReturnProperties, ReturnReferences, - GenerativeSearchReturnType, + _QueryOptions, + _GroupBy, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, ) from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.hybrid.executors import _HybridGenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.proto.v1.search_get_pb2 import SearchReply from weaviate.types import NUMBER, INCLUDE_VECTOR -class _HybridGenerateAsync( - Generic[Properties, References], - _HybridGenerateExecutor[ConnectionAsync, Properties, References], + +class _HybridGenerateExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] ): @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -60,9 +64,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> GenerativeReturn[Properties, References]: ... + ) -> executor.Result[GenerativeReturn[Properties, References]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -86,9 +91,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> GenerativeReturn[Properties, CrossReferences]: ... + ) -> executor.Result[GenerativeReturn[Properties, CrossReferences]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -112,9 +118,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> GenerativeReturn[Properties, TReferences]: ... + ) -> executor.Result[GenerativeReturn[Properties, TReferences]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -138,9 +145,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> GenerativeReturn[TProperties, References]: ... + ) -> executor.Result[GenerativeReturn[TProperties, References]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -164,9 +172,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> GenerativeReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[GenerativeReturn[TProperties, CrossReferences]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -190,12 +199,12 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> GenerativeReturn[TProperties, TReferences]: ... + ) -> executor.Result[GenerativeReturn[TProperties, TReferences]]: ... ##### GROUP BY ##### @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -219,9 +228,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[Properties, References]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, References]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -245,9 +255,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, CrossReferences]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -271,9 +282,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, TReferences]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -297,9 +309,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[TProperties, References]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, References]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -323,9 +336,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, CrossReferences]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -349,9 +363,11 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, TReferences]]: ... + + ### DEFAULT ### @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -375,328 +391,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... - -class _HybridGenerate( - Generic[Properties, References], _HybridGenerateExecutor[ConnectionSync, Properties, References] -): - @overload - def hybrid( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeReturn[Properties, References]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeReturn[Properties, CrossReferences]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeReturn[Properties, TReferences]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeReturn[TProperties, References]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeReturn[TProperties, CrossReferences]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeReturn[TProperties, TReferences]: ... - - ##### GROUP BY ##### + ) -> executor.Result[ + GenerativeSearchReturnType[Properties, References, TProperties, TReferences] + ]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[Properties, References]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[Properties, TReferences]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[TProperties, References]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... - ### DEFAULT ### - @overload def hybrid( self, query: Optional[str], @@ -721,4 +419,97 @@ def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... + ) -> executor.Result[ + GenerativeSearchReturnType[Properties, References, TProperties, TReferences] + ]: + """Perform retrieval-augmented generation (RaG) on the results of an object search in this collection using the hybrid algorithm blending keyword-based BM25 and vector-based similarity. + + See the [docs](https://weaviate.io/developers/weaviate/search/hybrid) for a more detailed explanation. + + Args: + query: The keyword-based query to search for, REQUIRED. If query and vector are both None, a normal search will be performed. + single_prompt: The prompt to use for RaG on each object individually. + grouped_task: The prompt to use for RaG on the entire result set. + grouped_properties: The properties to use in the RaG on the entire result set. + alpha: The weight of the BM25 score. If not specified, the default weight specified by the server is used. + vector: The specific vector to search for. If not specified, the query is vectorized and used in the similarity search. + query_properties: The properties to search in. If not specified, all properties are searched. + fusion_type: The type of fusion to apply. If not specified, the default fusion type specified by the server is used. + limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. + auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. + filters: The filters to apply to the search. + group_by: How the results should be grouped by a specific property. + rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. + target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + return_references: The references to return for each object. + + NOTE: + - If `return_properties` is not provided then all properties are returned except for blob properties. + - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + - If `return_references` is not provided then no references are provided. + + Returns: + A `GenerativeReturn` or `GenerativeGroupByReturn` object that includes the searched objects. + If `group_by` is provided then a `GenerativeGroupByReturn` object is returned, otherwise a `GenerativeReturn` object is returned. + + Raises: + weaviate.exceptions.WeaviateQueryError: If the network connection to Weaviate fails. + weaviate.exceptions.WeaviateNotImplementedError: If a group by is provided and the Weaviate server version is lower than 1.25.0. + """ + if group_by is not None and not self._connection.supports_groupby_in_bm25_and_hybrid(): + raise WeaviateUnsupportedFeatureError( + "Hybrid group by", self._connection.server_version, "1.25.0" + ) + + def resp( + res: SearchReply, + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_generative_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + rerank, + group_by, + ), + ), + ) + + request = self._query.hybrid( + query=query, + alpha=alpha, + vector=vector, + properties=query_properties, + fusion_type=fusion_type, + limit=limit, + offset=offset, + distance=max_vector_distance, + autocut=auto_limit, + filters=filters, + group_by=_GroupBy.from_input(group_by), + rerank=rerank, + target_vector=target_vector, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + generative=_Generative( + single=single_prompt, + grouped=grouped_task, + grouped_properties=grouped_properties, + generative_provider=generative_provider, + ), + ) + return executor.execute( + response_callback=resp, + method=self._connection.grpc_search, + request=request, + ) diff --git a/weaviate/collections/queries/hybrid/generate/sync.py b/weaviate/collections/queries/hybrid/generate/sync.py new file mode 100644 index 000000000..25d8831ce --- /dev/null +++ b/weaviate/collections/queries/hybrid/generate/sync.py @@ -0,0 +1,13 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.hybrid.generate.executor import _HybridGenerateExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _HybridGenerate( + Generic[Properties, References], _HybridGenerateExecutor[ConnectionSync, Properties, References] +): + pass diff --git a/weaviate/collections/queries/hybrid/generate/sync.pyi b/weaviate/collections/queries/hybrid/generate/sync.pyi new file mode 100644 index 000000000..762041a56 --- /dev/null +++ b/weaviate/collections/queries/hybrid/generate/sync.pyi @@ -0,0 +1,377 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + GroupBy, + HybridFusion, + Rerank, + HybridVectorType, + TargetVectorJoinType, + PROPERTIES, + REFERENCES, +) +from weaviate.collections.classes.internal import ( + GenerativeSearchReturnType, + GenerativeReturn, + GenerativeGroupByReturn, + CrossReferences, + _Generative, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _GroupBy, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionSync +from .executor import _HybridGenerateExecutor + +class _HybridGenerate( + Generic[Properties, References], _HybridGenerateExecutor[ConnectionSync, Properties, References] +): + @overload + def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[Properties, References]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[TProperties, References]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/hybrid/query/__init__.py b/weaviate/collections/queries/hybrid/query/__init__.py new file mode 100644 index 000000000..65cd9ddfa --- /dev/null +++ b/weaviate/collections/queries/hybrid/query/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _HybridQueryAsync +from .sync import _HybridQuery + +__all__ = [ + "_HybridQuery", + "_HybridQueryAsync", +] diff --git a/weaviate/collections/queries/hybrid/query.py b/weaviate/collections/queries/hybrid/query/async_.py similarity index 50% rename from weaviate/collections/queries/hybrid/query.py rename to weaviate/collections/queries/hybrid/query/async_.py index 4faf30dd0..ad398b3f9 100644 --- a/weaviate/collections/queries/hybrid/query.py +++ b/weaviate/collections/queries/hybrid/query/async_.py @@ -2,8 +2,8 @@ from weaviate.connect import executor from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.hybrid.executors import _HybridQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.collections.queries.hybrid.query.executor import _HybridQueryExecutor +from weaviate.connect.v4 import ConnectionAsync @executor.wrap("async") @@ -11,10 +11,3 @@ class _HybridQueryAsync( Generic[Properties, References], _HybridQueryExecutor[ConnectionAsync, Properties, References] ): pass - - -@executor.wrap("sync") -class _HybridQuery( - Generic[Properties, References], _HybridQueryExecutor[ConnectionSync, Properties, References] -): - pass diff --git a/weaviate/collections/queries/hybrid/query/async_.pyi b/weaviate/collections/queries/hybrid/query/async_.pyi new file mode 100644 index 000000000..a6dbf267a --- /dev/null +++ b/weaviate/collections/queries/hybrid/query/async_.pyi @@ -0,0 +1,321 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + HybridFusion, + Rerank, + HybridVectorType, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + QuerySearchReturnType, + QueryReturn, + GroupByReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _GroupBy, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionAsync +from .executor import _HybridQueryExecutor + +class _HybridQueryAsync( + Generic[Properties, References], _HybridQueryExecutor[ConnectionAsync, Properties, References] +): + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GroupByReturn[Properties, References]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GroupByReturn[Properties, CrossReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GroupByReturn[Properties, TReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GroupByReturn[TProperties, References]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GroupByReturn[TProperties, CrossReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GroupByReturn[TProperties, TReferences]: ... + @overload + async def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/hybrid/query.pyi b/weaviate/collections/queries/hybrid/query/executor.py similarity index 50% rename from weaviate/collections/queries/hybrid/query.pyi rename to weaviate/collections/queries/hybrid/query/executor.py index 53ed09940..b44b242e2 100644 --- a/weaviate/collections/queries/hybrid/query.pyi +++ b/weaviate/collections/queries/hybrid/query/executor.py @@ -1,4 +1,4 @@ -from typing import Generic, List, Literal, Optional, Type, Union, overload +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload from weaviate.collections.classes.filters import ( _Filters, @@ -9,28 +9,34 @@ REFERENCES, GroupBy, HybridFusion, - HybridVectorType, Rerank, + HybridVectorType, TargetVectorJoinType, ) from weaviate.collections.classes.internal import ( - GroupByReturn, + QuerySearchReturnType, QueryReturn, + GroupByReturn, CrossReferences, ReturnProperties, ReturnReferences, - QuerySearchReturnType, + _QueryOptions, + _GroupBy, ) from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.hybrid.executors import _HybridQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.proto.v1.search_get_pb2 import SearchReply from weaviate.types import NUMBER, INCLUDE_VECTOR -class _HybridQueryAsync( - Generic[Properties, References], _HybridQueryExecutor[ConnectionAsync, Properties, References] + +class _HybridQueryExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] ): @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -50,9 +56,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> QueryReturn[Properties, References]: ... + ) -> executor.Result[QueryReturn[Properties, References]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -72,9 +79,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... + ) -> executor.Result[QueryReturn[Properties, CrossReferences]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -94,9 +102,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> QueryReturn[Properties, TReferences]: ... + ) -> executor.Result[QueryReturn[Properties, TReferences]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -116,9 +125,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> QueryReturn[TProperties, References]: ... + ) -> executor.Result[QueryReturn[TProperties, References]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -138,9 +148,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> QueryReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[QueryReturn[TProperties, CrossReferences]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -160,12 +171,12 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> QueryReturn[TProperties, TReferences]: ... + ) -> executor.Result[QueryReturn[TProperties, TReferences]]: ... ##### GROUP BY ##### @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -185,9 +196,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> GroupByReturn[Properties, References]: ... + ) -> executor.Result[GroupByReturn[Properties, References]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -207,9 +219,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> GroupByReturn[Properties, CrossReferences]: ... + ) -> executor.Result[GroupByReturn[Properties, CrossReferences]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -229,9 +242,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> GroupByReturn[Properties, TReferences]: ... + ) -> executor.Result[GroupByReturn[Properties, TReferences]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -251,9 +265,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> GroupByReturn[TProperties, References]: ... + ) -> executor.Result[GroupByReturn[TProperties, References]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -273,9 +288,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> GroupByReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[GroupByReturn[TProperties, CrossReferences]]: ... + @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -295,10 +311,11 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> GroupByReturn[TProperties, TReferences]: ... + ) -> executor.Result[GroupByReturn[TProperties, TReferences]]: ... + ### DEFAULT ### @overload - async def hybrid( + def hybrid( self, query: Optional[str], *, @@ -318,280 +335,10 @@ async def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... - -class _HybridQuery( - Generic[Properties, References], _HybridQueryExecutor[ConnectionSync, Properties, References] -): - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> QueryReturn[Properties, References]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> QueryReturn[Properties, TReferences]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> QueryReturn[TProperties, References]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> QueryReturn[TProperties, CrossReferences]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> QueryReturn[TProperties, TReferences]: ... - - ##### GROUP BY ##### + ) -> executor.Result[ + QuerySearchReturnType[Properties, References, TProperties, TReferences] + ]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GroupByReturn[Properties, References]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GroupByReturn[Properties, CrossReferences]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GroupByReturn[Properties, TReferences]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GroupByReturn[TProperties, References]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GroupByReturn[TProperties, CrossReferences]: ... - @overload - def hybrid( - self, - query: Optional[str], - *, - alpha: NUMBER = 0.7, - vector: Optional[HybridVectorType] = None, - query_properties: Optional[List[str]] = None, - fusion_type: Optional[HybridFusion] = None, - max_vector_distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GroupByReturn[TProperties, TReferences]: ... - ### DEFAULT ### - @overload def hybrid( self, query: Optional[str], @@ -612,4 +359,86 @@ def hybrid( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... + ) -> executor.Result[QuerySearchReturnType[Properties, References, TProperties, TReferences]]: + """Search for objects in this collection using the hybrid algorithm blending keyword-based BM25 and vector-based similarity. + + See the [docs](https://weaviate.io/developers/weaviate/search/hybrid) for a more detailed explanation. + + Args: + query: The keyword-based query to search for, REQUIRED. If query and vector are both None, a normal search will be performed. + alpha: The weight of the BM25 score. If not specified, the default weight specified by the server is used. + vector: The specific vector to search for. If not specified, the query is vectorized and used in the similarity search. + query_properties: The properties to search in. If not specified, all properties are searched. + fusion_type: The type of fusion to apply. If not specified, the default fusion type specified by the server is used. + limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. + auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. + filters: The filters to apply to the search. + group_by: How the results should be grouped by a specific property. + rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. + target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + return_references: The references to return for each object. + + NOTE: + - If `return_properties` is not provided then all properties are returned except for blob properties. + - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + - If `return_references` is not provided then no references are provided. + + Returns: + A `QueryReturn` or `GroupByReturn` object that includes the searched objects. + If `group_by` is provided then a `GroupByReturn` object is returned, otherwise a `QueryReturn` object is returned. + + Raises: + weaviate.exceptions.WeaviateQueryError: If the network connection to Weaviate fails. + weaviate.exceptions.WeaviateNotImplementedError: If a group by is provided and the Weaviate server version is lower than 1.25.0. + """ + if group_by is not None and not self._connection.supports_groupby_in_bm25_and_hybrid(): + raise WeaviateUnsupportedFeatureError( + "Hybrid group by", self._connection.server_version, "1.25.0" + ) + + def resp( + res: SearchReply, + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_query_or_groupby_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + rerank, + group_by, + ), + ), + ) + + request = self._query.hybrid( + query=query, + alpha=alpha, + vector=vector, + properties=query_properties, + fusion_type=fusion_type, + limit=limit, + offset=offset, + distance=max_vector_distance, + autocut=auto_limit, + filters=filters, + group_by=_GroupBy.from_input(group_by), + rerank=rerank, + target_vector=target_vector, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + ) + return executor.execute( + response_callback=resp, + method=self._connection.grpc_search, + request=request, + ) diff --git a/weaviate/collections/queries/hybrid/query/sync.py b/weaviate/collections/queries/hybrid/query/sync.py new file mode 100644 index 000000000..00a7eb448 --- /dev/null +++ b/weaviate/collections/queries/hybrid/query/sync.py @@ -0,0 +1,13 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.hybrid.query.executor import _HybridQueryExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _HybridQuery( + Generic[Properties, References], _HybridQueryExecutor[ConnectionSync, Properties, References] +): + pass diff --git a/weaviate/collections/queries/hybrid/query/sync.pyi b/weaviate/collections/queries/hybrid/query/sync.pyi new file mode 100644 index 000000000..ba330d802 --- /dev/null +++ b/weaviate/collections/queries/hybrid/query/sync.pyi @@ -0,0 +1,321 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + HybridFusion, + Rerank, + HybridVectorType, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + QuerySearchReturnType, + QueryReturn, + GroupByReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _GroupBy, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.exceptions import WeaviateUnsupportedFeatureError +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionSync +from .executor import _HybridQueryExecutor + +class _HybridQuery( + Generic[Properties, References], _HybridQueryExecutor[ConnectionSync, Properties, References] +): + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GroupByReturn[Properties, References]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GroupByReturn[Properties, CrossReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GroupByReturn[Properties, TReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GroupByReturn[TProperties, References]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GroupByReturn[TProperties, CrossReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GroupByReturn[TProperties, TReferences]: ... + @overload + def hybrid( + self, + query: Optional[str], + *, + alpha: NUMBER = 0.7, + vector: Optional[HybridVectorType] = None, + query_properties: Optional[List[str]] = None, + fusion_type: Optional[HybridFusion] = None, + max_vector_distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_image/executors.py b/weaviate/collections/queries/near_image/executors.py deleted file mode 100644 index 130d1a56d..000000000 --- a/weaviate/collections/queries/near_image/executors.py +++ /dev/null @@ -1,241 +0,0 @@ -from typing import Any, Generic, List, Optional, Union, cast - -from weaviate.collections.classes.filters import ( - _Filters, -) -from weaviate.collections.classes.grpc import ( - METADATA, - GroupBy, - Rerank, - NearMediaType, - TargetVectorJoinType, -) -from weaviate.collections.classes.internal import ( - _Generative, - _GroupBy, - GenerativeSearchReturnType, - QuerySearchReturnType, - ReturnProperties, - ReturnReferences, - _QueryOptions, - _GenerativeConfigRuntime, - _SinglePrompt, - _GroupedTask, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.executor import _BaseExecutor -from weaviate.connect import executor -from weaviate.connect.v4 import ConnectionType -from weaviate.proto.v1.search_get_pb2 import SearchReply -from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR -from weaviate.util import parse_blob - - -class _NearImageGenerateExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def near_image( - self, - near_image: BLOB_INPUT, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime], - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[ - GenerativeSearchReturnType[Properties, References, TProperties, TReferences] - ]: - """Perform retrieval-augmented generation (RaG) on the results of a by-image object search in this collection using an image-capable vectorization module and vector-based similarity search. - - See the [docs](https://weaviate.io/developers/weaviate/search/image) for a more detailed explanation. - - NOTE: - You must have an image-capable vectorization module installed in order to use this method, e.g. `img2vec-neural`, `multi2vec-clip`, or `multi2vec-bind. - - Args: - near_image: The image file to search on, REQUIRED. This can be a base64 encoded string of the binary, a path to the file, or a file-like object. - certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. - distance: The maximum distance to search. If not specified, the default distance specified by the server is used. - limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. - auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. - filters: The filters to apply to the search. - group_by: How the results should be grouped by a specific property. - rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. - target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - return_references: The references to return for each object. - - NOTE: - - If `return_properties` is not provided then all properties are returned except for blob properties. - - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - - If `return_references` is not provided then no references are provided. - - Returns: - A `GenerativeReturn` or `GenerativeGroupByReturn` object that includes the searched objects. - If `group_by` is provided then a `GenerativeGroupByReturn` object is returned, otherwise a `GenerativeReturn` object is returned. - - Raises: - weaviate.exceptions.WeaviateQueryError: If the request to the Weaviate server fails. - """ - - def resp( - res: SearchReply, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_generative_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - rerank, - group_by, - ), - ), - ) - - request = self._query.near_media( - media=parse_blob(near_image), - type_=NearMediaType.IMAGE.value, - certainty=certainty, - distance=distance, - filters=filters, - group_by=_GroupBy.from_input(group_by), - rerank=rerank, - target_vector=target_vector, - generative=_Generative( - single=single_prompt, - grouped=grouped_task, - grouped_properties=grouped_properties, - generative_provider=generative_provider, - ), - limit=limit, - offset=offset, - autocut=auto_limit, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - ) - return executor.execute( - response_callback=resp, - method=self._connection.grpc_search, - request=request, - ) - - -class _NearImageQueryExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[QuerySearchReturnType[Properties, References, TProperties, TReferences]]: - """Search for objects by image in this collection using an image-capable vectorization module and vector-based similarity search. - - See the [docs](https://weaviate.io/developers/weaviate/search/image) for a more detailed explanation. - - NOTE: - You must have an image-capable vectorization module installed in order to use this method, e.g. `img2vec-neural`, `multi2vec-clip`, or `multi2vec-bind. - - Args: - near_image: The image file to search on, REQUIRED. This can be a base64 encoded string of the binary, a path to the file, or a file-like object. - certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. - distance: The maximum distance to search. If not specified, the default distance specified by the server is used. - limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. - auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. - filters: The filters to apply to the search. - group_by: How the results should be grouped by a specific property. - rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. - target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - return_references: The references to return for each object. - - NOTE: - - If `return_properties` is not provided then all properties are returned except for blob properties. - - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - - If `return_references` is not provided then no references are provided. - - Returns: - A `QueryReturn` or `GroupByReturn` object that includes the searched objects. - If `group_by` is provided then a `GroupByReturn` object is returned, otherwise a `QueryReturn` object is returned. - - Raises: - weaviate.exceptions.WeaviateQueryError: If the request to the Weaviate server fails. - """ - - def resp( - res: SearchReply, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_query_or_groupby_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - rerank, - group_by, - ), - ), - ) - - request = self._query.near_media( - media=parse_blob(near_image), - type_=NearMediaType.IMAGE.value, - certainty=certainty, - distance=distance, - filters=filters, - group_by=_GroupBy.from_input(group_by), - rerank=rerank, - target_vector=target_vector, - limit=limit, - offset=offset, - autocut=auto_limit, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - ) - return executor.execute( - response_callback=resp, - method=self._connection.grpc_search, - request=request, - ) diff --git a/weaviate/collections/queries/near_image/generate.py b/weaviate/collections/queries/near_image/generate.py deleted file mode 100644 index e2d81bfb3..000000000 --- a/weaviate/collections/queries/near_image/generate.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Generic - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.near_image.executors import _NearImageGenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _NearImageGenerateAsync( - Generic[Properties, References], - _NearImageGenerateExecutor[ConnectionAsync, Properties, References], -): - pass - - -@executor.wrap("sync") -class _NearImageGenerate( - Generic[Properties, References], - _NearImageGenerateExecutor[ConnectionSync, Properties, References], -): - pass diff --git a/weaviate/collections/queries/near_image/generate/__init__.py b/weaviate/collections/queries/near_image/generate/__init__.py new file mode 100644 index 000000000..7df9ec09e --- /dev/null +++ b/weaviate/collections/queries/near_image/generate/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _NearImageGenerateAsync +from .sync import _NearImageGenerate + +__all__ = [ + "_NearImageGenerate", + "_NearImageGenerateAsync", +] diff --git a/weaviate/collections/queries/near_image/generate/async_.py b/weaviate/collections/queries/near_image/generate/async_.py new file mode 100644 index 000000000..3f4a93e64 --- /dev/null +++ b/weaviate/collections/queries/near_image/generate/async_.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_image.generate.executor import _NearImageGenerateExecutor +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _NearImageGenerateAsync( + Generic[Properties, References], + _NearImageGenerateExecutor[ConnectionAsync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_image/generate/async_.pyi b/weaviate/collections/queries/near_image/generate/async_.pyi new file mode 100644 index 000000000..9b2516060 --- /dev/null +++ b/weaviate/collections/queries/near_image/generate/async_.pyi @@ -0,0 +1,338 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + NearMediaType, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _Generative, + _GroupBy, + GenerativeSearchReturnType, + GenerativeReturn, + GenerativeGroupByReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR +from weaviate.util import parse_blob +from weaviate.connect.v4 import ConnectionAsync +from .executor import _NearImageGenerateExecutor + +class _NearImageGenerateAsync( + Generic[Properties, References], + _NearImageGenerateExecutor[ConnectionAsync, Properties, References], +): + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[Properties, References]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[TProperties, References]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_image/generate.pyi b/weaviate/collections/queries/near_image/generate/executor.py similarity index 50% rename from weaviate/collections/queries/near_image/generate.pyi rename to weaviate/collections/queries/near_image/generate/executor.py index 7f1260c2b..890be77fa 100644 --- a/weaviate/collections/queries/near_image/generate.pyi +++ b/weaviate/collections/queries/near_image/generate/executor.py @@ -1,40 +1,45 @@ -from typing import Generic, List, Literal, Optional, Type, Union, overload +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload from weaviate.collections.classes.filters import ( _Filters, ) -from weaviate.collections.classes.generative import ( - _GenerativeConfigRuntime, - _GroupedTask, - _SinglePrompt, -) from weaviate.collections.classes.grpc import ( METADATA, PROPERTIES, REFERENCES, GroupBy, Rerank, + NearMediaType, TargetVectorJoinType, ) from weaviate.collections.classes.internal import ( + _Generative, + _GroupBy, + GenerativeSearchReturnType, GenerativeReturn, GenerativeGroupByReturn, CrossReferences, ReturnProperties, ReturnReferences, - GenerativeSearchReturnType, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, ) from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.near_image.executors import _NearImageGenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR +from weaviate.util import parse_blob + -class _NearImageGenerateAsync( - Generic[Properties, References], - _NearImageGenerateExecutor[ConnectionAsync, Properties, References], +class _NearImageGenerateExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] ): @overload - async def near_image( + def near_image( self, near_image: BLOB_INPUT, *, @@ -55,9 +60,10 @@ async def near_image( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> GenerativeReturn[Properties, References]: ... + ) -> executor.Result[GenerativeReturn[Properties, References]]: ... + @overload - async def near_image( + def near_image( self, near_image: BLOB_INPUT, *, @@ -78,9 +84,10 @@ async def near_image( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> GenerativeReturn[Properties, CrossReferences]: ... + ) -> executor.Result[GenerativeReturn[Properties, CrossReferences]]: ... + @overload - async def near_image( + def near_image( self, near_image: BLOB_INPUT, *, @@ -101,9 +108,10 @@ async def near_image( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> GenerativeReturn[Properties, TReferences]: ... + ) -> executor.Result[GenerativeReturn[Properties, TReferences]]: ... + @overload - async def near_image( + def near_image( self, near_image: BLOB_INPUT, *, @@ -124,9 +132,10 @@ async def near_image( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> GenerativeReturn[TProperties, References]: ... + ) -> executor.Result[GenerativeReturn[TProperties, References]]: ... + @overload - async def near_image( + def near_image( self, near_image: BLOB_INPUT, *, @@ -147,9 +156,10 @@ async def near_image( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> GenerativeReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[GenerativeReturn[TProperties, CrossReferences]]: ... + @overload - async def near_image( + def near_image( self, near_image: BLOB_INPUT, *, @@ -170,10 +180,11 @@ async def near_image( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> GenerativeReturn[TProperties, TReferences]: ... + ) -> executor.Result[GenerativeReturn[TProperties, TReferences]]: ... + ### GroupBy ### @overload - async def near_image( + def near_image( self, near_image: BLOB_INPUT, *, @@ -194,9 +205,10 @@ async def near_image( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[Properties, References]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, References]]: ... + @overload - async def near_image( + def near_image( self, near_image: BLOB_INPUT, *, @@ -217,9 +229,10 @@ async def near_image( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, CrossReferences]]: ... + @overload - async def near_image( + def near_image( self, near_image: BLOB_INPUT, *, @@ -240,9 +253,10 @@ async def near_image( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, TReferences]]: ... + @overload - async def near_image( + def near_image( self, near_image: BLOB_INPUT, *, @@ -263,9 +277,10 @@ async def near_image( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[TProperties, References]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, References]]: ... + @overload - async def near_image( + def near_image( self, near_image: BLOB_INPUT, *, @@ -286,9 +301,10 @@ async def near_image( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, CrossReferences]]: ... + @overload - async def near_image( + def near_image( self, near_image: BLOB_INPUT, *, @@ -309,11 +325,11 @@ async def near_image( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, TReferences]]: ... ### DEFAULT ### @overload - async def near_image( + def near_image( self, near_image: BLOB_INPUT, *, @@ -334,291 +350,10 @@ async def near_image( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... + ) -> executor.Result[ + GenerativeSearchReturnType[Properties, References, TProperties, TReferences] + ]: ... -class _NearImageGenerate( - Generic[Properties, References], - _NearImageGenerateExecutor[ConnectionSync, Properties, References], -): - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeReturn[Properties, References]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeReturn[Properties, CrossReferences]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeReturn[Properties, TReferences]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeReturn[TProperties, References]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeReturn[TProperties, CrossReferences]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeReturn[TProperties, TReferences]: ... - ### GroupBy ### - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[Properties, References]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[Properties, TReferences]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[TProperties, References]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... - ### DEFAULT ### - @overload def near_image( self, near_image: BLOB_INPUT, @@ -640,4 +375,88 @@ def near_image( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... + ) -> executor.Result[ + GenerativeSearchReturnType[Properties, References, TProperties, TReferences] + ]: + """Perform retrieval-augmented generation (RaG) on the results of a by-image object search in this collection using an image-capable vectorization module and vector-based similarity search. + + See the [docs](https://weaviate.io/developers/weaviate/search/image) for a more detailed explanation. + + NOTE: + You must have an image-capable vectorization module installed in order to use this method, e.g. `img2vec-neural`, `multi2vec-clip`, or `multi2vec-bind. + + Args: + near_image: The image file to search on, REQUIRED. This can be a base64 encoded string of the binary, a path to the file, or a file-like object. + certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. + distance: The maximum distance to search. If not specified, the default distance specified by the server is used. + limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. + auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. + filters: The filters to apply to the search. + group_by: How the results should be grouped by a specific property. + rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. + target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + return_references: The references to return for each object. + + NOTE: + - If `return_properties` is not provided then all properties are returned except for blob properties. + - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + - If `return_references` is not provided then no references are provided. + + Returns: + A `GenerativeReturn` or `GenerativeGroupByReturn` object that includes the searched objects. + If `group_by` is provided then a `GenerativeGroupByReturn` object is returned, otherwise a `GenerativeReturn` object is returned. + + Raises: + weaviate.exceptions.WeaviateQueryError: If the request to the Weaviate server fails. + """ + + def resp( + res: SearchReply, + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_generative_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + rerank, + group_by, + ), + ), + ) + + request = self._query.near_media( + media=parse_blob(near_image), + type_=NearMediaType.IMAGE.value, + certainty=certainty, + distance=distance, + filters=filters, + group_by=_GroupBy.from_input(group_by), + rerank=rerank, + target_vector=target_vector, + generative=_Generative( + single=single_prompt, + grouped=grouped_task, + grouped_properties=grouped_properties, + generative_provider=generative_provider, + ), + limit=limit, + offset=offset, + autocut=auto_limit, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + ) + return executor.execute( + response_callback=resp, + method=self._connection.grpc_search, + request=request, + ) diff --git a/weaviate/collections/queries/near_image/generate/sync.py b/weaviate/collections/queries/near_image/generate/sync.py new file mode 100644 index 000000000..ea2751ff9 --- /dev/null +++ b/weaviate/collections/queries/near_image/generate/sync.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_image.generate.executor import _NearImageGenerateExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _NearImageGenerate( + Generic[Properties, References], + _NearImageGenerateExecutor[ConnectionSync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_image/generate/sync.pyi b/weaviate/collections/queries/near_image/generate/sync.pyi new file mode 100644 index 000000000..52891a12d --- /dev/null +++ b/weaviate/collections/queries/near_image/generate/sync.pyi @@ -0,0 +1,338 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + NearMediaType, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _Generative, + _GroupBy, + GenerativeSearchReturnType, + GenerativeReturn, + GenerativeGroupByReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR +from weaviate.util import parse_blob +from weaviate.connect.v4 import ConnectionSync +from .executor import _NearImageGenerateExecutor + +class _NearImageGenerate( + Generic[Properties, References], + _NearImageGenerateExecutor[ConnectionSync, Properties, References], +): + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[Properties, References]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[TProperties, References]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_image/query.py b/weaviate/collections/queries/near_image/query.py deleted file mode 100644 index 3dfc0cedf..000000000 --- a/weaviate/collections/queries/near_image/query.py +++ /dev/null @@ -1,21 +0,0 @@ -from typing import Generic - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.near_image.executors import _NearImageQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _NearImageQueryAsync( - Generic[Properties, References], - _NearImageQueryExecutor[ConnectionAsync, Properties, References], -): - pass - - -@executor.wrap("sync") -class _NearImageQuery( - Generic[Properties, References], _NearImageQueryExecutor[ConnectionSync, Properties, References] -): - pass diff --git a/weaviate/collections/queries/near_image/query.pyi b/weaviate/collections/queries/near_image/query.pyi deleted file mode 100644 index 014baaba1..000000000 --- a/weaviate/collections/queries/near_image/query.pyi +++ /dev/null @@ -1,536 +0,0 @@ -from typing import Generic, Literal, Optional, Type, Union, overload - -from weaviate.collections.classes.filters import ( - _Filters, -) -from weaviate.collections.classes.grpc import ( - METADATA, - PROPERTIES, - REFERENCES, - GroupBy, - Rerank, - TargetVectorJoinType, -) -from weaviate.collections.classes.internal import ( - GroupByReturn, - QueryReturn, - CrossReferences, - ReturnProperties, - ReturnReferences, - QuerySearchReturnType, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.near_image.executors import _NearImageQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR - -class _NearImageQueryAsync( - Generic[Properties, References], - _NearImageQueryExecutor[ConnectionAsync, Properties, References], -): - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> QueryReturn[Properties, References]: ... - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> QueryReturn[Properties, TReferences]: ... - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> QueryReturn[TProperties, References]: ... - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> QueryReturn[TProperties, CrossReferences]: ... - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> QueryReturn[TProperties, TReferences]: ... - - ### GroupBy ### - - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GroupByReturn[Properties, References]: ... - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GroupByReturn[Properties, CrossReferences]: ... - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GroupByReturn[Properties, TReferences]: ... - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GroupByReturn[TProperties, References]: ... - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GroupByReturn[TProperties, CrossReferences]: ... - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GroupByReturn[TProperties, TReferences]: ... - ### DEFAULT ### - @overload - async def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... - -class _NearImageQuery( - Generic[Properties, References], _NearImageQueryExecutor[ConnectionSync, Properties, References] -): - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> QueryReturn[Properties, References]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> QueryReturn[Properties, TReferences]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> QueryReturn[TProperties, References]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> QueryReturn[TProperties, CrossReferences]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> QueryReturn[TProperties, TReferences]: ... - - ### GroupBy ### - - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GroupByReturn[Properties, References]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GroupByReturn[Properties, CrossReferences]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GroupByReturn[Properties, TReferences]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GroupByReturn[TProperties, References]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GroupByReturn[TProperties, CrossReferences]: ... - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GroupByReturn[TProperties, TReferences]: ... - ### DEFAULT ### - @overload - def near_image( - self, - near_image: BLOB_INPUT, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_image/query/__init__.py b/weaviate/collections/queries/near_image/query/__init__.py new file mode 100644 index 000000000..d52a0d3a9 --- /dev/null +++ b/weaviate/collections/queries/near_image/query/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _NearImageQueryAsync +from .sync import _NearImageQuery + +__all__ = [ + "_NearImageQuery", + "_NearImageQueryAsync", +] diff --git a/weaviate/collections/queries/near_image/query/async_.py b/weaviate/collections/queries/near_image/query/async_.py new file mode 100644 index 000000000..6c7855d79 --- /dev/null +++ b/weaviate/collections/queries/near_image/query/async_.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_image.query.executor import _NearImageQueryExecutor +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _NearImageQueryAsync( + Generic[Properties, References], + _NearImageQueryExecutor[ConnectionAsync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_image/query/async_.pyi b/weaviate/collections/queries/near_image/query/async_.pyi new file mode 100644 index 000000000..6ad8a2ec9 --- /dev/null +++ b/weaviate/collections/queries/near_image/query/async_.pyi @@ -0,0 +1,282 @@ +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + NearMediaType, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _GroupBy, + QueryReturn, + GroupByReturn, + CrossReferences, + QuerySearchReturnType, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR +from weaviate.util import parse_blob +from weaviate.connect.v4 import ConnectionAsync +from .executor import _NearImageQueryExecutor + +class _NearImageQueryAsync( + Generic[Properties, References], + _NearImageQueryExecutor[ConnectionAsync, Properties, References], +): + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GroupByReturn[Properties, References]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GroupByReturn[Properties, CrossReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GroupByReturn[Properties, TReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GroupByReturn[TProperties, References]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GroupByReturn[TProperties, CrossReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GroupByReturn[TProperties, TReferences]: ... + @overload + async def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_image/query/executor.py b/weaviate/collections/queries/near_image/query/executor.py new file mode 100644 index 000000000..ca0a4b9d6 --- /dev/null +++ b/weaviate/collections/queries/near_image/query/executor.py @@ -0,0 +1,395 @@ +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload + +from weaviate.collections.classes.filters import ( + _Filters, +) +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + NearMediaType, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _GroupBy, + QueryReturn, + GroupByReturn, + CrossReferences, + QuerySearchReturnType, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR +from weaviate.util import parse_blob + + +class _NearImageQueryExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] +): + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None, + ) -> executor.Result[QueryReturn[Properties, References]]: ... + + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES, + ) -> executor.Result[QueryReturn[Properties, CrossReferences]]: ... + + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences], + ) -> executor.Result[QueryReturn[Properties, TReferences]]: ... + + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None, + ) -> executor.Result[QueryReturn[TProperties, References]]: ... + + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES, + ) -> executor.Result[QueryReturn[TProperties, CrossReferences]]: ... + + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences], + ) -> executor.Result[QueryReturn[TProperties, TReferences]]: ... + + ### GroupBy ### + + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None, + ) -> executor.Result[GroupByReturn[Properties, References]]: ... + + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES, + ) -> executor.Result[GroupByReturn[Properties, CrossReferences]]: ... + + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences], + ) -> executor.Result[GroupByReturn[Properties, TReferences]]: ... + + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None, + ) -> executor.Result[GroupByReturn[TProperties, References]]: ... + + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES, + ) -> executor.Result[GroupByReturn[TProperties, CrossReferences]]: ... + + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences], + ) -> executor.Result[GroupByReturn[TProperties, TReferences]]: ... + + ### DEFAULT ### + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None, + ) -> executor.Result[ + QuerySearchReturnType[Properties, References, TProperties, TReferences] + ]: ... + + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None, + ) -> executor.Result[QuerySearchReturnType[Properties, References, TProperties, TReferences]]: + """Search for objects by image in this collection using an image-capable vectorization module and vector-based similarity search. + + See the [docs](https://weaviate.io/developers/weaviate/search/image) for a more detailed explanation. + + NOTE: + You must have an image-capable vectorization module installed in order to use this method, e.g. `img2vec-neural`, `multi2vec-clip`, or `multi2vec-bind. + + Args: + near_image: The image file to search on, REQUIRED. This can be a base64 encoded string of the binary, a path to the file, or a file-like object. + certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. + distance: The maximum distance to search. If not specified, the default distance specified by the server is used. + limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. + auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. + filters: The filters to apply to the search. + group_by: How the results should be grouped by a specific property. + rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. + target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + return_references: The references to return for each object. + + NOTE: + - If `return_properties` is not provided then all properties are returned except for blob properties. + - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + - If `return_references` is not provided then no references are provided. + + Returns: + A `QueryReturn` or `GroupByReturn` object that includes the searched objects. + If `group_by` is provided then a `GroupByReturn` object is returned, otherwise a `QueryReturn` object is returned. + + Raises: + weaviate.exceptions.WeaviateQueryError: If the request to the Weaviate server fails. + """ + + def resp( + res: SearchReply, + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_query_or_groupby_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + rerank, + group_by, + ), + ), + ) + + request = self._query.near_media( + media=parse_blob(near_image), + type_=NearMediaType.IMAGE.value, + certainty=certainty, + distance=distance, + filters=filters, + group_by=_GroupBy.from_input(group_by), + rerank=rerank, + target_vector=target_vector, + limit=limit, + offset=offset, + autocut=auto_limit, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + ) + return executor.execute( + response_callback=resp, + method=self._connection.grpc_search, + request=request, + ) diff --git a/weaviate/collections/queries/near_image/query/sync.py b/weaviate/collections/queries/near_image/query/sync.py new file mode 100644 index 000000000..729a9148f --- /dev/null +++ b/weaviate/collections/queries/near_image/query/sync.py @@ -0,0 +1,13 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_image.query.executor import _NearImageQueryExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _NearImageQuery( + Generic[Properties, References], _NearImageQueryExecutor[ConnectionSync, Properties, References] +): + pass diff --git a/weaviate/collections/queries/near_image/query/sync.pyi b/weaviate/collections/queries/near_image/query/sync.pyi new file mode 100644 index 000000000..a73e7fdaf --- /dev/null +++ b/weaviate/collections/queries/near_image/query/sync.pyi @@ -0,0 +1,281 @@ +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + NearMediaType, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _GroupBy, + QueryReturn, + GroupByReturn, + CrossReferences, + QuerySearchReturnType, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR +from weaviate.util import parse_blob +from weaviate.connect.v4 import ConnectionSync +from .executor import _NearImageQueryExecutor + +class _NearImageQuery( + Generic[Properties, References], _NearImageQueryExecutor[ConnectionSync, Properties, References] +): + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GroupByReturn[Properties, References]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GroupByReturn[Properties, CrossReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GroupByReturn[Properties, TReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GroupByReturn[TProperties, References]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GroupByReturn[TProperties, CrossReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GroupByReturn[TProperties, TReferences]: ... + @overload + def near_image( + self, + near_image: BLOB_INPUT, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_media/executors.py b/weaviate/collections/queries/near_media/executors.py deleted file mode 100644 index 46f55ee0f..000000000 --- a/weaviate/collections/queries/near_media/executors.py +++ /dev/null @@ -1,245 +0,0 @@ -from typing import Any, Generic, List, Optional, Union, cast - -from weaviate.collections.classes.filters import ( - _Filters, -) -from weaviate.collections.classes.grpc import ( - METADATA, - GroupBy, - Rerank, - NearMediaType, - TargetVectorJoinType, -) -from weaviate.collections.classes.internal import ( - _Generative, - _GroupBy, - GenerativeSearchReturnType, - QuerySearchReturnType, - ReturnProperties, - ReturnReferences, - _QueryOptions, - _GenerativeConfigRuntime, - _SinglePrompt, - _GroupedTask, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.executor import _BaseExecutor -from weaviate.connect import executor -from weaviate.connect.v4 import ConnectionType -from weaviate.proto.v1.search_get_pb2 import SearchReply -from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR -from weaviate.util import parse_blob - - -class _NearMediaGenerateExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime], - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[ - GenerativeSearchReturnType[Properties, References, TProperties, TReferences] - ]: - """Perform retrieval-augmented generation (RaG) on the results of a by-audio object search in this collection using an audio-capable vectorization module and vector-based similarity search. - - See the [docs](https://weaviate.io/developers/weaviate/modules/retriever-vectorizer-modules/multi2vec-bind) for a more detailed explanation. - - NOTE: - You must have a multi-media-capable vectorization module installed in order to use this method, e.g. `multi2vec-bind`. - - Args: - near_media: The media file to search on, REQUIRED. This can be a base64 encoded string of the binary, a path to the file, or a file-like object. - media_type: The type of the provided media file, REQUIRED. - certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. - distance: The maximum distance to search. If not specified, the default distance specified by the server is used. - limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. - auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. - filters: The filters to apply to the search. - group_by: How the results should be grouped by a specific property. - rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. - target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - return_references: The references to return for each object. - - NOTE: - - If `return_properties` is not provided then all properties are returned except for blob properties. - - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - - If `return_references` is not provided then no references are provided. - - Returns: - A `GenerativeReturn` or `GenerativeGroupByReturn` object that includes the searched objects. - If `group_by` is provided then a `GenerativeGroupByReturn` object is returned, otherwise a `GenerativeReturn` object is returned. - - Raises: - weaviate.exceptions.WeaviateQueryError: If the request to the Weaviate server fails. - """ - - def resp( - res: SearchReply, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_generative_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - rerank, - group_by, - ), - ), - ) - - request = self._query.near_media( - media=parse_blob(media), - type_=media_type.value, - certainty=certainty, - distance=distance, - filters=filters, - group_by=_GroupBy.from_input(group_by), - rerank=rerank, - target_vector=target_vector, - generative=_Generative( - single=single_prompt, - grouped=grouped_task, - grouped_properties=grouped_properties, - generative_provider=generative_provider, - ), - limit=limit, - offset=offset, - autocut=auto_limit, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - ) - return executor.execute( - response_callback=resp, - method=self._connection.grpc_search, - request=request, - ) - - -class _NearMediaQueryExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[QuerySearchReturnType[Properties, References, TProperties, TReferences]]: - """Search for objects by audio in this collection using an audio-capable vectorization module and vector-based similarity search. - - See the [docs](https://weaviate.io/developers/weaviate/modules/retriever-vectorizer-modules/multi2vec-bind) for a more detailed explanation. - - NOTE: - You must have a multi-media-capable vectorization module installed in order to use this method, e.g. `multi2vec-bind`. - - Args: - media: The media file to search on, REQUIRED. This can be a base64 encoded string of the binary, a path to the file, or a file-like object. - media_type: The type of the provided media file, REQUIRED. - certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. - distance: The maximum distance to search. If not specified, the default distance specified by the server is used. - limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. - auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. - filters: The filters to apply to the search. - group_by: How the results should be grouped by a specific property. - rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. - target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - return_references: The references to return for each object. - - NOTE: - - If `return_properties` is not provided then all properties are returned except for blob properties. - - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - - If `return_references` is not provided then no references are provided. - - Returns: - A `QueryReturn` or `GroupByReturn` object that includes the searched objects. - If `group_by` is provided then a `GroupByReturn` object is returned, otherwise a `QueryReturn` object is returned. - - Raises: - weaviate.exceptions.WeaviateQueryError: If the request to the Weaviate server fails. - """ - - def resp( - res: SearchReply, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_query_or_groupby_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - rerank, - group_by, - ), - ), - ) - - request = self._query.near_media( - media=parse_blob(media), - type_=media_type.value, - certainty=certainty, - distance=distance, - filters=filters, - group_by=_GroupBy.from_input(group_by), - rerank=rerank, - target_vector=target_vector, - limit=limit, - offset=offset, - autocut=auto_limit, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - ) - return executor.execute( - response_callback=resp, - method=self._connection.grpc_search, - request=request, - ) diff --git a/weaviate/collections/queries/near_media/generate.py b/weaviate/collections/queries/near_media/generate.py deleted file mode 100644 index f618cb6ba..000000000 --- a/weaviate/collections/queries/near_media/generate.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Generic - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.near_media.executors import _NearMediaGenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _NearMediaGenerateAsync( - Generic[Properties, References], - _NearMediaGenerateExecutor[ConnectionAsync, Properties, References], -): - pass - - -@executor.wrap("sync") -class _NearMediaGenerate( - Generic[Properties, References], - _NearMediaGenerateExecutor[ConnectionSync, Properties, References], -): - pass diff --git a/weaviate/collections/queries/near_media/generate/__init__.py b/weaviate/collections/queries/near_media/generate/__init__.py new file mode 100644 index 000000000..22f3147fb --- /dev/null +++ b/weaviate/collections/queries/near_media/generate/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _NearMediaGenerateAsync +from .sync import _NearMediaGenerate + +__all__ = [ + "_NearMediaGenerate", + "_NearMediaGenerateAsync", +] diff --git a/weaviate/collections/queries/near_media/generate/async_.py b/weaviate/collections/queries/near_media/generate/async_.py new file mode 100644 index 000000000..fd3911199 --- /dev/null +++ b/weaviate/collections/queries/near_media/generate/async_.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_media.generate.executor import _NearMediaGenerateExecutor +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _NearMediaGenerateAsync( + Generic[Properties, References], + _NearMediaGenerateExecutor[ConnectionAsync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_media/generate/async_.pyi b/weaviate/collections/queries/near_media/generate/async_.pyi new file mode 100644 index 000000000..f596e4e2d --- /dev/null +++ b/weaviate/collections/queries/near_media/generate/async_.pyi @@ -0,0 +1,351 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + NearMediaType, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _Generative, + _GroupBy, + GenerativeSearchReturnType, + GenerativeReturn, + GenerativeGroupByReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR +from weaviate.util import parse_blob +from weaviate.connect.v4 import ConnectionAsync +from .executor import _NearMediaGenerateExecutor + +class _NearMediaGenerateAsync( + Generic[Properties, References], + _NearMediaGenerateExecutor[ConnectionAsync, Properties, References], +): + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[Properties, References]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[TProperties, References]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_media/generate.pyi b/weaviate/collections/queries/near_media/generate/executor.py similarity index 50% rename from weaviate/collections/queries/near_media/generate.pyi rename to weaviate/collections/queries/near_media/generate/executor.py index 805b5d06d..aa29f6390 100644 --- a/weaviate/collections/queries/near_media/generate.pyi +++ b/weaviate/collections/queries/near_media/generate/executor.py @@ -1,41 +1,45 @@ -from typing import Generic, List, Literal, Optional, Type, Union, overload +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload from weaviate.collections.classes.filters import ( _Filters, ) -from weaviate.collections.classes.generative import ( - _GenerativeConfigRuntime, - _GroupedTask, - _SinglePrompt, -) from weaviate.collections.classes.grpc import ( METADATA, PROPERTIES, REFERENCES, GroupBy, - NearMediaType, Rerank, + NearMediaType, TargetVectorJoinType, ) from weaviate.collections.classes.internal import ( + _Generative, + _GroupBy, + GenerativeSearchReturnType, GenerativeReturn, GenerativeGroupByReturn, CrossReferences, ReturnProperties, ReturnReferences, - GenerativeSearchReturnType, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, ) from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.near_media.executors import _NearMediaGenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR +from weaviate.util import parse_blob -class _NearMediaGenerateAsync( - Generic[Properties, References], - _NearMediaGenerateExecutor[ConnectionAsync, Properties, References], + +class _NearMediaGenerateExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] ): @overload - async def near_media( + def near_media( self, media: BLOB_INPUT, media_type: NearMediaType, @@ -57,9 +61,10 @@ async def near_media( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> GenerativeReturn[Properties, References]: ... + ) -> executor.Result[GenerativeReturn[Properties, References]]: ... + @overload - async def near_media( + def near_media( self, media: BLOB_INPUT, media_type: NearMediaType, @@ -81,9 +86,10 @@ async def near_media( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> GenerativeReturn[Properties, CrossReferences]: ... + ) -> executor.Result[GenerativeReturn[Properties, CrossReferences]]: ... + @overload - async def near_media( + def near_media( self, media: BLOB_INPUT, media_type: NearMediaType, @@ -105,9 +111,10 @@ async def near_media( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> GenerativeReturn[Properties, TReferences]: ... + ) -> executor.Result[GenerativeReturn[Properties, TReferences]]: ... + @overload - async def near_media( + def near_media( self, media: BLOB_INPUT, media_type: NearMediaType, @@ -129,9 +136,10 @@ async def near_media( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> GenerativeReturn[TProperties, References]: ... + ) -> executor.Result[GenerativeReturn[TProperties, References]]: ... + @overload - async def near_media( + def near_media( self, media: BLOB_INPUT, media_type: NearMediaType, @@ -153,9 +161,10 @@ async def near_media( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> GenerativeReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[GenerativeReturn[TProperties, CrossReferences]]: ... + @overload - async def near_media( + def near_media( self, media: BLOB_INPUT, media_type: NearMediaType, @@ -177,10 +186,11 @@ async def near_media( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> GenerativeReturn[TProperties, TReferences]: ... + ) -> executor.Result[GenerativeReturn[TProperties, TReferences]]: ... + ### GroupBy ### @overload - async def near_media( + def near_media( self, media: BLOB_INPUT, media_type: NearMediaType, @@ -202,9 +212,10 @@ async def near_media( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[Properties, References]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, References]]: ... + @overload - async def near_media( + def near_media( self, media: BLOB_INPUT, media_type: NearMediaType, @@ -226,9 +237,10 @@ async def near_media( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, CrossReferences]]: ... + @overload - async def near_media( + def near_media( self, media: BLOB_INPUT, media_type: NearMediaType, @@ -250,9 +262,10 @@ async def near_media( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, TReferences]]: ... + @overload - async def near_media( + def near_media( self, media: BLOB_INPUT, media_type: NearMediaType, @@ -274,9 +287,10 @@ async def near_media( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[TProperties, References]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, References]]: ... + @overload - async def near_media( + def near_media( self, media: BLOB_INPUT, media_type: NearMediaType, @@ -298,9 +312,10 @@ async def near_media( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, CrossReferences]]: ... + @overload - async def near_media( + def near_media( self, media: BLOB_INPUT, media_type: NearMediaType, @@ -322,11 +337,11 @@ async def near_media( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, TReferences]]: ... ### DEFAULT ### @overload - async def near_media( + def near_media( self, media: BLOB_INPUT, media_type: NearMediaType, @@ -348,304 +363,10 @@ async def near_media( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... + ) -> executor.Result[ + GenerativeSearchReturnType[Properties, References, TProperties, TReferences] + ]: ... -class _NearMediaGenerate( - Generic[Properties, References], - _NearMediaGenerateExecutor[ConnectionSync, Properties, References], -): - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeReturn[Properties, References]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeReturn[Properties, CrossReferences]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeReturn[Properties, TReferences]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeReturn[TProperties, References]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeReturn[TProperties, CrossReferences]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeReturn[TProperties, TReferences]: ... - ### GroupBy ### - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[Properties, References]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[Properties, TReferences]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[TProperties, References]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... - - ### DEFAULT ### - @overload def near_media( self, media: BLOB_INPUT, @@ -668,4 +389,89 @@ def near_media( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... + ) -> executor.Result[ + GenerativeSearchReturnType[Properties, References, TProperties, TReferences] + ]: + """Perform retrieval-augmented generation (RaG) on the results of a by-audio object search in this collection using an audio-capable vectorization module and vector-based similarity search. + + See the [docs](https://weaviate.io/developers/weaviate/modules/retriever-vectorizer-modules/multi2vec-bind) for a more detailed explanation. + + NOTE: + You must have a multi-media-capable vectorization module installed in order to use this method, e.g. `multi2vec-bind`. + + Args: + near_media: The media file to search on, REQUIRED. This can be a base64 encoded string of the binary, a path to the file, or a file-like object. + media_type: The type of the provided media file, REQUIRED. + certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. + distance: The maximum distance to search. If not specified, the default distance specified by the server is used. + limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. + auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. + filters: The filters to apply to the search. + group_by: How the results should be grouped by a specific property. + rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. + target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + return_references: The references to return for each object. + + NOTE: + - If `return_properties` is not provided then all properties are returned except for blob properties. + - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + - If `return_references` is not provided then no references are provided. + + Returns: + A `GenerativeReturn` or `GenerativeGroupByReturn` object that includes the searched objects. + If `group_by` is provided then a `GenerativeGroupByReturn` object is returned, otherwise a `GenerativeReturn` object is returned. + + Raises: + weaviate.exceptions.WeaviateQueryError: If the request to the Weaviate server fails. + """ + + def resp( + res: SearchReply, + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_generative_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + rerank, + group_by, + ), + ), + ) + + request = self._query.near_media( + media=parse_blob(media), + type_=media_type.value, + certainty=certainty, + distance=distance, + filters=filters, + group_by=_GroupBy.from_input(group_by), + rerank=rerank, + target_vector=target_vector, + generative=_Generative( + single=single_prompt, + grouped=grouped_task, + grouped_properties=grouped_properties, + generative_provider=generative_provider, + ), + limit=limit, + offset=offset, + autocut=auto_limit, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + ) + return executor.execute( + response_callback=resp, + method=self._connection.grpc_search, + request=request, + ) diff --git a/weaviate/collections/queries/near_media/generate/sync.py b/weaviate/collections/queries/near_media/generate/sync.py new file mode 100644 index 000000000..3dcdb5131 --- /dev/null +++ b/weaviate/collections/queries/near_media/generate/sync.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_media.generate.executor import _NearMediaGenerateExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _NearMediaGenerate( + Generic[Properties, References], + _NearMediaGenerateExecutor[ConnectionSync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_media/generate/sync.pyi b/weaviate/collections/queries/near_media/generate/sync.pyi new file mode 100644 index 000000000..302dccd76 --- /dev/null +++ b/weaviate/collections/queries/near_media/generate/sync.pyi @@ -0,0 +1,351 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + NearMediaType, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _Generative, + _GroupBy, + GenerativeSearchReturnType, + GenerativeReturn, + GenerativeGroupByReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR +from weaviate.util import parse_blob +from weaviate.connect.v4 import ConnectionSync +from .executor import _NearMediaGenerateExecutor + +class _NearMediaGenerate( + Generic[Properties, References], + _NearMediaGenerateExecutor[ConnectionSync, Properties, References], +): + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[Properties, References]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[TProperties, References]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_media/query.py b/weaviate/collections/queries/near_media/query.py deleted file mode 100644 index 028507912..000000000 --- a/weaviate/collections/queries/near_media/query.py +++ /dev/null @@ -1,21 +0,0 @@ -from typing import Generic - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.near_media.executors import _NearMediaQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _NearMediaQueryAsync( - Generic[Properties, References], - _NearMediaQueryExecutor[ConnectionAsync, Properties, References], -): - pass - - -@executor.wrap("sync") -class _NearMediaQuery( - Generic[Properties, References], _NearMediaQueryExecutor[ConnectionSync, Properties, References] -): - pass diff --git a/weaviate/collections/queries/near_media/query.pyi b/weaviate/collections/queries/near_media/query.pyi deleted file mode 100644 index 85b0e23c3..000000000 --- a/weaviate/collections/queries/near_media/query.pyi +++ /dev/null @@ -1,567 +0,0 @@ -from io import BufferedReader -from pathlib import Path -from typing import Generic, Literal, Optional, Type, Union, overload - -from weaviate.collections.classes.filters import ( - _Filters, -) -from weaviate.collections.classes.grpc import ( - GroupBy, - METADATA, - PROPERTIES, - REFERENCES, - NearMediaType, - Rerank, - TargetVectorJoinType, -) -from weaviate.collections.classes.internal import ( - GroupByReturn, - QueryReturn, - CrossReferences, - ReturnProperties, - ReturnReferences, - QuerySearchReturnType, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.near_media.executors import _NearMediaQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR - -class _NearMediaQueryAsync( - Generic[Properties, References], - _NearMediaQueryExecutor[ConnectionAsync, Properties, References], -): - @overload - async def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> QueryReturn[Properties, References]: ... - @overload - async def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - async def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> QueryReturn[Properties, TReferences]: ... - @overload - async def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> QueryReturn[TProperties, References]: ... - @overload - async def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> QueryReturn[TProperties, CrossReferences]: ... - @overload - async def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> QueryReturn[TProperties, TReferences]: ... - - ### GroupBy ### - - @overload - async def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GroupByReturn[Properties, References]: ... - @overload - async def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GroupByReturn[Properties, CrossReferences]: ... - @overload - async def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GroupByReturn[Properties, TReferences]: ... - @overload - async def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GroupByReturn[TProperties, References]: ... - @overload - async def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GroupByReturn[TProperties, CrossReferences]: ... - @overload - async def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GroupByReturn[TProperties, TReferences]: ... - - ### DEFAULT ### - @overload - async def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... - -class _NearMediaQuery( - Generic[Properties, References], _NearMediaQueryExecutor[ConnectionSync, Properties, References] -): - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> QueryReturn[Properties, References]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> QueryReturn[Properties, TReferences]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> QueryReturn[TProperties, References]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> QueryReturn[TProperties, CrossReferences]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> QueryReturn[TProperties, TReferences]: ... - - ### GroupBy ### - - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GroupByReturn[Properties, References]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GroupByReturn[Properties, CrossReferences]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GroupByReturn[Properties, TReferences]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GroupByReturn[TProperties, References]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GroupByReturn[TProperties, CrossReferences]: ... - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GroupByReturn[TProperties, TReferences]: ... - - ### DEFAULT ### - @overload - def near_media( - self, - media: BLOB_INPUT, - media_type: NearMediaType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_media/query/__init__.py b/weaviate/collections/queries/near_media/query/__init__.py new file mode 100644 index 000000000..41227a07c --- /dev/null +++ b/weaviate/collections/queries/near_media/query/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _NearMediaQueryAsync +from .sync import _NearMediaQuery + +__all__ = [ + "_NearMediaQuery", + "_NearMediaQueryAsync", +] diff --git a/weaviate/collections/queries/near_media/query/async_.py b/weaviate/collections/queries/near_media/query/async_.py new file mode 100644 index 000000000..014468dcc --- /dev/null +++ b/weaviate/collections/queries/near_media/query/async_.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_media.query.executor import _NearMediaQueryExecutor +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _NearMediaQueryAsync( + Generic[Properties, References], + _NearMediaQueryExecutor[ConnectionAsync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_media/query/async_.pyi b/weaviate/collections/queries/near_media/query/async_.pyi new file mode 100644 index 000000000..d56cbff3d --- /dev/null +++ b/weaviate/collections/queries/near_media/query/async_.pyi @@ -0,0 +1,295 @@ +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + NearMediaType, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _GroupBy, + QueryReturn, + GroupByReturn, + CrossReferences, + QuerySearchReturnType, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR +from weaviate.util import parse_blob +from weaviate.connect.v4 import ConnectionAsync +from .executor import _NearMediaQueryExecutor + +class _NearMediaQueryAsync( + Generic[Properties, References], + _NearMediaQueryExecutor[ConnectionAsync, Properties, References], +): + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GroupByReturn[Properties, References]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GroupByReturn[Properties, CrossReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GroupByReturn[Properties, TReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GroupByReturn[TProperties, References]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GroupByReturn[TProperties, CrossReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GroupByReturn[TProperties, TReferences]: ... + @overload + async def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_media/query/executor.py b/weaviate/collections/queries/near_media/query/executor.py new file mode 100644 index 000000000..cbc39c42d --- /dev/null +++ b/weaviate/collections/queries/near_media/query/executor.py @@ -0,0 +1,410 @@ +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload + +from weaviate.collections.classes.filters import ( + _Filters, +) +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + NearMediaType, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _GroupBy, + QueryReturn, + GroupByReturn, + CrossReferences, + QuerySearchReturnType, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR +from weaviate.util import parse_blob + + +class _NearMediaQueryExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] +): + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None, + ) -> executor.Result[QueryReturn[Properties, References]]: ... + + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES, + ) -> executor.Result[QueryReturn[Properties, CrossReferences]]: ... + + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences], + ) -> executor.Result[QueryReturn[Properties, TReferences]]: ... + + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None, + ) -> executor.Result[QueryReturn[TProperties, References]]: ... + + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES, + ) -> executor.Result[QueryReturn[TProperties, CrossReferences]]: ... + + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences], + ) -> executor.Result[QueryReturn[TProperties, TReferences]]: ... + + ### GroupBy ### + + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None, + ) -> executor.Result[GroupByReturn[Properties, References]]: ... + + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES, + ) -> executor.Result[GroupByReturn[Properties, CrossReferences]]: ... + + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences], + ) -> executor.Result[GroupByReturn[Properties, TReferences]]: ... + + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None, + ) -> executor.Result[GroupByReturn[TProperties, References]]: ... + + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES, + ) -> executor.Result[GroupByReturn[TProperties, CrossReferences]]: ... + + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences], + ) -> executor.Result[GroupByReturn[TProperties, TReferences]]: ... + + ### DEFAULT ### + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None, + ) -> executor.Result[ + QuerySearchReturnType[Properties, References, TProperties, TReferences] + ]: ... + + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None, + ) -> executor.Result[QuerySearchReturnType[Properties, References, TProperties, TReferences]]: + """Search for objects by audio in this collection using an audio-capable vectorization module and vector-based similarity search. + + See the [docs](https://weaviate.io/developers/weaviate/modules/retriever-vectorizer-modules/multi2vec-bind) for a more detailed explanation. + + NOTE: + You must have a multi-media-capable vectorization module installed in order to use this method, e.g. `multi2vec-bind`. + + Args: + media: The media file to search on, REQUIRED. This can be a base64 encoded string of the binary, a path to the file, or a file-like object. + media_type: The type of the provided media file, REQUIRED. + certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. + distance: The maximum distance to search. If not specified, the default distance specified by the server is used. + limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. + auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. + filters: The filters to apply to the search. + group_by: How the results should be grouped by a specific property. + rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. + target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + return_references: The references to return for each object. + + NOTE: + - If `return_properties` is not provided then all properties are returned except for blob properties. + - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + - If `return_references` is not provided then no references are provided. + + Returns: + A `QueryReturn` or `GroupByReturn` object that includes the searched objects. + If `group_by` is provided then a `GroupByReturn` object is returned, otherwise a `QueryReturn` object is returned. + + Raises: + weaviate.exceptions.WeaviateQueryError: If the request to the Weaviate server fails. + """ + + def resp( + res: SearchReply, + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_query_or_groupby_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + rerank, + group_by, + ), + ), + ) + + request = self._query.near_media( + media=parse_blob(media), + type_=media_type.value, + certainty=certainty, + distance=distance, + filters=filters, + group_by=_GroupBy.from_input(group_by), + rerank=rerank, + target_vector=target_vector, + limit=limit, + offset=offset, + autocut=auto_limit, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + ) + return executor.execute( + response_callback=resp, + method=self._connection.grpc_search, + request=request, + ) diff --git a/weaviate/collections/queries/near_media/query/sync.py b/weaviate/collections/queries/near_media/query/sync.py new file mode 100644 index 000000000..36627956e --- /dev/null +++ b/weaviate/collections/queries/near_media/query/sync.py @@ -0,0 +1,13 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_media.query.executor import _NearMediaQueryExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _NearMediaQuery( + Generic[Properties, References], _NearMediaQueryExecutor[ConnectionSync, Properties, References] +): + pass diff --git a/weaviate/collections/queries/near_media/query/sync.pyi b/weaviate/collections/queries/near_media/query/sync.pyi new file mode 100644 index 000000000..fc56fbf9b --- /dev/null +++ b/weaviate/collections/queries/near_media/query/sync.pyi @@ -0,0 +1,294 @@ +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + NearMediaType, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _GroupBy, + QueryReturn, + GroupByReturn, + CrossReferences, + QuerySearchReturnType, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import BLOB_INPUT, NUMBER, INCLUDE_VECTOR +from weaviate.util import parse_blob +from weaviate.connect.v4 import ConnectionSync +from .executor import _NearMediaQueryExecutor + +class _NearMediaQuery( + Generic[Properties, References], _NearMediaQueryExecutor[ConnectionSync, Properties, References] +): + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GroupByReturn[Properties, References]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GroupByReturn[Properties, CrossReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GroupByReturn[Properties, TReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GroupByReturn[TProperties, References]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GroupByReturn[TProperties, CrossReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GroupByReturn[TProperties, TReferences]: ... + @overload + def near_media( + self, + media: BLOB_INPUT, + media_type: NearMediaType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_object/executors.py b/weaviate/collections/queries/near_object/executors.py deleted file mode 100644 index ac28f5274..000000000 --- a/weaviate/collections/queries/near_object/executors.py +++ /dev/null @@ -1,224 +0,0 @@ -from typing import Any, Generic, List, Optional, Union, cast - -from weaviate.collections.classes.filters import ( - _Filters, -) -from weaviate.collections.classes.grpc import METADATA, GroupBy, Rerank, TargetVectorJoinType -from weaviate.collections.classes.internal import ( - _Generative, - _GroupBy, - GenerativeSearchReturnType, - QueryNearMediaReturnType, - ReturnProperties, - ReturnReferences, - _QueryOptions, - _GenerativeConfigRuntime, - _SinglePrompt, - _GroupedTask, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.executor import _BaseExecutor -from weaviate.connect import executor -from weaviate.connect.v4 import ConnectionType -from weaviate.proto.v1.search_get_pb2 import SearchReply -from weaviate.types import NUMBER, INCLUDE_VECTOR, UUID - - -class _NearObjectGenerateExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def near_object( - self, - near_object: UUID, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime], - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[ - GenerativeSearchReturnType[Properties, References, TProperties, TReferences] - ]: - """Perform retrieval-augmented generation (RaG) on the results of a by-object object search in this collection using a vector-based similarity search. - - See the [docs](https://weaviate.io/developers/weaviate/api/graphql/search-operators#nearobject) for a more detailed explanation. - - Args: - near_object: The UUID of the object to search on, REQUIRED. - certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. - distance: The maximum distance to search. If not specified, the default distance specified by the server is used. - limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. - auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. - filters: The filters to apply to the search. - group_by: How the results should be grouped by a specific property. - rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. - target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - return_references: The references to return for each object. - - NOTE: - - If `return_properties` is not provided then all properties are returned except for blob properties. - - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - - If `return_references` is not provided then no references are provided. - - Returns: - A `GenerativeReturn` or `GenerativeGroupByReturn` object that includes the searched objects. - If `group_by` is provided then a `GenerativeGroupByReturn` object is returned, otherwise a `GenerativeReturn` object is returned. - - Raises: - weaviate.exceptions.WeaviateGRPCQueryError: If the request to the Weaviate server fails. - """ - - def resp( - res: SearchReply, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_generative_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - rerank, - group_by, - ), - ), - ) - - request = self._query.near_object( - near_object=near_object, - certainty=certainty, - distance=distance, - limit=limit, - offset=offset, - autocut=auto_limit, - filters=filters, - group_by=_GroupBy.from_input(group_by), - rerank=rerank, - target_vector=target_vector, - generative=_Generative( - single=single_prompt, - grouped=grouped_task, - grouped_properties=grouped_properties, - generative_provider=generative_provider, - ), - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - ) - return executor.execute( - response_callback=resp, method=self._connection.grpc_search, request=request - ) - - -class _NearObjectQueryExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[ - QueryNearMediaReturnType[Properties, References, TProperties, TReferences] - ]: - """Search for objects in this collection by another object using a vector-based similarity search. - - See the [docs](https://weaviate.io/developers/weaviate/api/graphql/search-operators#nearobject) for a more detailed explanation. - - Args: - near_object: The UUID of the object to search on, REQUIRED. - certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. - distance: The maximum distance to search. If not specified, the default distance specified by the server is used. - limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. - auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. - filters: The filters to apply to the search. - group_by: How the results should be grouped by a specific property. - rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. - target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - return_references: The references to return for each object. - - NOTE: - - If `return_properties` is not provided then all properties are returned except for blob properties. - - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - - If `return_references` is not provided then no references are provided. - - Returns: - A `QueryReturn` or `GroupByReturn` object that includes the searched objects. - If `group_by` is provided then a `GroupByReturn` object is returned, otherwise a `QueryReturn` object is returned. - - Raises: - weaviate.exceptions.WeaviateGRPCQueryError: If the request to the Weaviate server fails. - """ - - def resp( - res: SearchReply, - ) -> QueryNearMediaReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_query_or_groupby_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - rerank, - group_by, - ), - ), - ) - - request = self._query.near_object( - near_object=near_object, - certainty=certainty, - distance=distance, - limit=limit, - offset=offset, - autocut=auto_limit, - filters=filters, - group_by=_GroupBy.from_input(group_by), - rerank=rerank, - target_vector=target_vector, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - ) - return executor.execute( - response_callback=resp, method=self._connection.grpc_search, request=request - ) diff --git a/weaviate/collections/queries/near_object/generate.py b/weaviate/collections/queries/near_object/generate.py deleted file mode 100644 index e542173b1..000000000 --- a/weaviate/collections/queries/near_object/generate.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Generic - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.near_object.executors import _NearObjectGenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _NearObjectGenerateAsync( - Generic[Properties, References], - _NearObjectGenerateExecutor[ConnectionAsync, Properties, References], -): - pass - - -@executor.wrap("sync") -class _NearObjectGenerate( - Generic[Properties, References], - _NearObjectGenerateExecutor[ConnectionSync, Properties, References], -): - pass diff --git a/weaviate/collections/queries/near_object/generate/__init__.py b/weaviate/collections/queries/near_object/generate/__init__.py new file mode 100644 index 000000000..a09eb5735 --- /dev/null +++ b/weaviate/collections/queries/near_object/generate/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _NearObjectGenerateAsync +from .sync import _NearObjectGenerate + +__all__ = [ + "_NearObjectGenerate", + "_NearObjectGenerateAsync", +] diff --git a/weaviate/collections/queries/near_object/generate/async_.py b/weaviate/collections/queries/near_object/generate/async_.py new file mode 100644 index 000000000..2fb4e7818 --- /dev/null +++ b/weaviate/collections/queries/near_object/generate/async_.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_object.generate.executor import _NearObjectGenerateExecutor +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _NearObjectGenerateAsync( + Generic[Properties, References], + _NearObjectGenerateExecutor[ConnectionAsync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_object/generate/async_.pyi b/weaviate/collections/queries/near_object/generate/async_.pyi new file mode 100644 index 000000000..99c868c3c --- /dev/null +++ b/weaviate/collections/queries/near_object/generate/async_.pyi @@ -0,0 +1,336 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _Generative, + _GroupBy, + GenerativeSearchReturnType, + GenerativeReturn, + GenerativeGroupByReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR, UUID +from weaviate.connect.v4 import ConnectionAsync +from .executor import _NearObjectGenerateExecutor + +class _NearObjectGenerateAsync( + Generic[Properties, References], + _NearObjectGenerateExecutor[ConnectionAsync, Properties, References], +): + @overload + async def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[Properties, References]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[TProperties, References]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_object/generate.pyi b/weaviate/collections/queries/near_object/generate/executor.py similarity index 50% rename from weaviate/collections/queries/near_object/generate.pyi rename to weaviate/collections/queries/near_object/generate/executor.py index 28350ace9..dd2928e3c 100644 --- a/weaviate/collections/queries/near_object/generate.pyi +++ b/weaviate/collections/queries/near_object/generate/executor.py @@ -1,13 +1,8 @@ -from typing import Generic, List, Literal, Optional, Type, Union, overload +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload from weaviate.collections.classes.filters import ( _Filters, ) -from weaviate.collections.classes.generative import ( - _GenerativeConfigRuntime, - _GroupedTask, - _SinglePrompt, -) from weaviate.collections.classes.grpc import ( METADATA, PROPERTIES, @@ -17,24 +12,32 @@ TargetVectorJoinType, ) from weaviate.collections.classes.internal import ( + _Generative, + _GroupBy, + GenerativeSearchReturnType, GenerativeReturn, GenerativeGroupByReturn, CrossReferences, ReturnProperties, ReturnReferences, - GenerativeSearchReturnType, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, ) from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.near_object.executors import _NearObjectGenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply from weaviate.types import NUMBER, INCLUDE_VECTOR, UUID -class _NearObjectGenerateAsync( - Generic[Properties, References], - _NearObjectGenerateExecutor[ConnectionAsync, Properties, References], + +class _NearObjectGenerateExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] ): @overload - async def near_object( + def near_object( self, near_object: UUID, *, @@ -55,9 +58,10 @@ async def near_object( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> GenerativeReturn[Properties, References]: ... + ) -> executor.Result[GenerativeReturn[Properties, References]]: ... + @overload - async def near_object( + def near_object( self, near_object: UUID, *, @@ -78,9 +82,10 @@ async def near_object( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> GenerativeReturn[Properties, CrossReferences]: ... + ) -> executor.Result[GenerativeReturn[Properties, CrossReferences]]: ... + @overload - async def near_object( + def near_object( self, near_object: UUID, *, @@ -101,9 +106,10 @@ async def near_object( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> GenerativeReturn[Properties, TReferences]: ... + ) -> executor.Result[GenerativeReturn[Properties, TReferences]]: ... + @overload - async def near_object( + def near_object( self, near_object: UUID, *, @@ -124,9 +130,10 @@ async def near_object( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> GenerativeReturn[TProperties, References]: ... + ) -> executor.Result[GenerativeReturn[TProperties, References]]: ... + @overload - async def near_object( + def near_object( self, near_object: UUID, *, @@ -147,9 +154,10 @@ async def near_object( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> GenerativeReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[GenerativeReturn[TProperties, CrossReferences]]: ... + @overload - async def near_object( + def near_object( self, near_object: UUID, *, @@ -170,10 +178,11 @@ async def near_object( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> GenerativeReturn[TProperties, TReferences]: ... + ) -> executor.Result[GenerativeReturn[TProperties, TReferences]]: ... + ### GroupBy ### @overload - async def near_object( + def near_object( self, near_object: UUID, *, @@ -194,9 +203,10 @@ async def near_object( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[Properties, References]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, References]]: ... + @overload - async def near_object( + def near_object( self, near_object: UUID, *, @@ -217,9 +227,10 @@ async def near_object( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, CrossReferences]]: ... + @overload - async def near_object( + def near_object( self, near_object: UUID, *, @@ -240,9 +251,10 @@ async def near_object( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, TReferences]]: ... + @overload - async def near_object( + def near_object( self, near_object: UUID, *, @@ -263,9 +275,10 @@ async def near_object( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[TProperties, References]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, References]]: ... + @overload - async def near_object( + def near_object( self, near_object: UUID, *, @@ -286,9 +299,10 @@ async def near_object( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, CrossReferences]]: ... + @overload - async def near_object( + def near_object( self, near_object: UUID, *, @@ -309,11 +323,12 @@ async def near_object( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, TReferences]]: ... + + ### Default ### - ### DEFAULT ### @overload - async def near_object( + def near_object( self, near_object: UUID, *, @@ -334,292 +349,10 @@ async def near_object( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... - -class _NearObjectGenerate( - Generic[Properties, References], - _NearObjectGenerateExecutor[ConnectionSync, Properties, References], -): - @overload - def near_object( - self, - near_object: UUID, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeReturn[Properties, References]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeReturn[Properties, CrossReferences]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeReturn[Properties, TReferences]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeReturn[TProperties, References]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeReturn[TProperties, CrossReferences]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeReturn[TProperties, TReferences]: ... - ### GroupBy ### - @overload - def near_object( - self, - near_object: UUID, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[Properties, References]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[Properties, TReferences]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[TProperties, References]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + ) -> executor.Result[ + GenerativeSearchReturnType[Properties, References, TProperties, TReferences] + ]: ... - ### DEFAULT ### - @overload def near_object( self, near_object: UUID, @@ -641,4 +374,82 @@ def near_object( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... + ) -> executor.Result[ + GenerativeSearchReturnType[Properties, References, TProperties, TReferences] + ]: + """Perform retrieval-augmented generation (RaG) on the results of a by-object object search in this collection using a vector-based similarity search. + + See the [docs](https://weaviate.io/developers/weaviate/api/graphql/search-operators#nearobject) for a more detailed explanation. + + Args: + near_object: The UUID of the object to search on, REQUIRED. + certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. + distance: The maximum distance to search. If not specified, the default distance specified by the server is used. + limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. + auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. + filters: The filters to apply to the search. + group_by: How the results should be grouped by a specific property. + rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. + target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + return_references: The references to return for each object. + + NOTE: + - If `return_properties` is not provided then all properties are returned except for blob properties. + - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + - If `return_references` is not provided then no references are provided. + + Returns: + A `GenerativeReturn` or `GenerativeGroupByReturn` object that includes the searched objects. + If `group_by` is provided then a `GenerativeGroupByReturn` object is returned, otherwise a `GenerativeReturn` object is returned. + + Raises: + weaviate.exceptions.WeaviateGRPCQueryError: If the request to the Weaviate server fails. + """ + + def resp( + res: SearchReply, + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_generative_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + rerank, + group_by, + ), + ), + ) + + request = self._query.near_object( + near_object=near_object, + certainty=certainty, + distance=distance, + limit=limit, + offset=offset, + autocut=auto_limit, + filters=filters, + group_by=_GroupBy.from_input(group_by), + rerank=rerank, + target_vector=target_vector, + generative=_Generative( + single=single_prompt, + grouped=grouped_task, + grouped_properties=grouped_properties, + generative_provider=generative_provider, + ), + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + ) + return executor.execute( + response_callback=resp, method=self._connection.grpc_search, request=request + ) diff --git a/weaviate/collections/queries/near_object/generate/sync.py b/weaviate/collections/queries/near_object/generate/sync.py new file mode 100644 index 000000000..a0041f583 --- /dev/null +++ b/weaviate/collections/queries/near_object/generate/sync.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_object.generate.executor import _NearObjectGenerateExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _NearObjectGenerate( + Generic[Properties, References], + _NearObjectGenerateExecutor[ConnectionSync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_object/generate/sync.pyi b/weaviate/collections/queries/near_object/generate/sync.pyi new file mode 100644 index 000000000..37fb8c2ba --- /dev/null +++ b/weaviate/collections/queries/near_object/generate/sync.pyi @@ -0,0 +1,336 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _Generative, + _GroupBy, + GenerativeSearchReturnType, + GenerativeReturn, + GenerativeGroupByReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR, UUID +from weaviate.connect.v4 import ConnectionSync +from .executor import _NearObjectGenerateExecutor + +class _NearObjectGenerate( + Generic[Properties, References], + _NearObjectGenerateExecutor[ConnectionSync, Properties, References], +): + @overload + def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[Properties, References]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[TProperties, References]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_object/query.py b/weaviate/collections/queries/near_object/query.py deleted file mode 100644 index 5d2b85160..000000000 --- a/weaviate/collections/queries/near_object/query.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Generic - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.near_object.executors import _NearObjectQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _NearObjectQueryAsync( - Generic[Properties, References], - _NearObjectQueryExecutor[ConnectionAsync, Properties, References], -): - pass - - -@executor.wrap("sync") -class _NearObjectQuery( - Generic[Properties, References], - _NearObjectQueryExecutor[ConnectionSync, Properties, References], -): - pass diff --git a/weaviate/collections/queries/near_object/query.pyi b/weaviate/collections/queries/near_object/query.pyi deleted file mode 100644 index b23d72b8e..000000000 --- a/weaviate/collections/queries/near_object/query.pyi +++ /dev/null @@ -1,539 +0,0 @@ -from typing import Generic, Literal, Optional, Type, Union, overload - -from weaviate.collections.classes.filters import ( - _Filters, -) -from weaviate.collections.classes.grpc import ( - METADATA, - PROPERTIES, - REFERENCES, - GroupBy, - Rerank, - TargetVectorJoinType, -) -from weaviate.collections.classes.internal import ( - GroupByReturn, - QueryReturn, - CrossReferences, - ReturnProperties, - ReturnReferences, - QuerySearchReturnType, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.near_object.executors import _NearObjectQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import NUMBER, INCLUDE_VECTOR, UUID - -class _NearObjectQueryAsync( - Generic[Properties, References], - _NearObjectQueryExecutor[ConnectionAsync, Properties, References], -): - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> QueryReturn[Properties, References]: ... - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> QueryReturn[Properties, TReferences]: ... - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> QueryReturn[TProperties, References]: ... - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> QueryReturn[TProperties, CrossReferences]: ... - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> QueryReturn[TProperties, TReferences]: ... - - ### GroupBy ### - - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GroupByReturn[Properties, References]: ... - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GroupByReturn[Properties, CrossReferences]: ... - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GroupByReturn[Properties, TReferences]: ... - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GroupByReturn[TProperties, References]: ... - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GroupByReturn[TProperties, CrossReferences]: ... - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GroupByReturn[TProperties, TReferences]: ... - - ### DEFAULT ### - @overload - async def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... - -class _NearObjectQuery( - Generic[Properties, References], - _NearObjectQueryExecutor[ConnectionSync, Properties, References], -): - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> QueryReturn[Properties, References]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> QueryReturn[Properties, TReferences]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> QueryReturn[TProperties, References]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> QueryReturn[TProperties, CrossReferences]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> QueryReturn[TProperties, TReferences]: ... - - ### GroupBy ### - - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GroupByReturn[Properties, References]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GroupByReturn[Properties, CrossReferences]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GroupByReturn[Properties, TReferences]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GroupByReturn[TProperties, References]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GroupByReturn[TProperties, CrossReferences]: ... - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GroupByReturn[TProperties, TReferences]: ... - - ### DEFAULT ### - @overload - def near_object( - self, - near_object: UUID, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_object/query/__init__.py b/weaviate/collections/queries/near_object/query/__init__.py new file mode 100644 index 000000000..55292df77 --- /dev/null +++ b/weaviate/collections/queries/near_object/query/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _NearObjectQueryAsync +from .sync import _NearObjectQuery + +__all__ = [ + "_NearObjectQuery", + "_NearObjectQueryAsync", +] diff --git a/weaviate/collections/queries/near_object/query/async_.py b/weaviate/collections/queries/near_object/query/async_.py new file mode 100644 index 000000000..1ca83c567 --- /dev/null +++ b/weaviate/collections/queries/near_object/query/async_.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_object.query.executor import _NearObjectQueryExecutor +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _NearObjectQueryAsync( + Generic[Properties, References], + _NearObjectQueryExecutor[ConnectionAsync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_object/query/async_.pyi b/weaviate/collections/queries/near_object/query/async_.pyi new file mode 100644 index 000000000..31ac81b39 --- /dev/null +++ b/weaviate/collections/queries/near_object/query/async_.pyi @@ -0,0 +1,281 @@ +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _GroupBy, + QuerySearchReturnType, + QueryNearMediaReturnType, + QueryReturn, + GroupByReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR, UUID +from weaviate.connect.v4 import ConnectionAsync +from .executor import _NearObjectQueryExecutor + +class _NearObjectQueryAsync( + Generic[Properties, References], + _NearObjectQueryExecutor[ConnectionAsync, Properties, References], +): + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GroupByReturn[Properties, References]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GroupByReturn[Properties, CrossReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GroupByReturn[Properties, TReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GroupByReturn[TProperties, References]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GroupByReturn[TProperties, CrossReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GroupByReturn[TProperties, TReferences]: ... + @overload + async def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_object/query/executor.py b/weaviate/collections/queries/near_object/query/executor.py new file mode 100644 index 000000000..b69e1178c --- /dev/null +++ b/weaviate/collections/queries/near_object/query/executor.py @@ -0,0 +1,391 @@ +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload + +from weaviate.collections.classes.filters import ( + _Filters, +) +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _GroupBy, + QuerySearchReturnType, + QueryNearMediaReturnType, + QueryReturn, + GroupByReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR, UUID + + +class _NearObjectQueryExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] +): + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None, + ) -> executor.Result[QueryReturn[Properties, References]]: ... + + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES, + ) -> executor.Result[QueryReturn[Properties, CrossReferences]]: ... + + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences], + ) -> executor.Result[QueryReturn[Properties, TReferences]]: ... + + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None, + ) -> executor.Result[QueryReturn[TProperties, References]]: ... + + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES, + ) -> executor.Result[QueryReturn[TProperties, CrossReferences]]: ... + + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences], + ) -> executor.Result[QueryReturn[TProperties, TReferences]]: ... + + ### GroupBy ### + + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None, + ) -> executor.Result[GroupByReturn[Properties, References]]: ... + + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES, + ) -> executor.Result[GroupByReturn[Properties, CrossReferences]]: ... + + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences], + ) -> executor.Result[GroupByReturn[Properties, TReferences]]: ... + + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None, + ) -> executor.Result[GroupByReturn[TProperties, References]]: ... + + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES, + ) -> executor.Result[GroupByReturn[TProperties, CrossReferences]]: ... + + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences], + ) -> executor.Result[GroupByReturn[TProperties, TReferences]]: ... + + ### Default ### + + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None, + ) -> executor.Result[ + QuerySearchReturnType[Properties, References, TProperties, TReferences] + ]: ... + + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None, + ) -> executor.Result[ + QueryNearMediaReturnType[Properties, References, TProperties, TReferences] + ]: + """Search for objects in this collection by another object using a vector-based similarity search. + + See the [docs](https://weaviate.io/developers/weaviate/api/graphql/search-operators#nearobject) for a more detailed explanation. + + Args: + near_object: The UUID of the object to search on, REQUIRED. + certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. + distance: The maximum distance to search. If not specified, the default distance specified by the server is used. + limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. + auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. + filters: The filters to apply to the search. + group_by: How the results should be grouped by a specific property. + rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. + target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + return_references: The references to return for each object. + + NOTE: + - If `return_properties` is not provided then all properties are returned except for blob properties. + - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + - If `return_references` is not provided then no references are provided. + + Returns: + A `QueryReturn` or `GroupByReturn` object that includes the searched objects. + If `group_by` is provided then a `GroupByReturn` object is returned, otherwise a `QueryReturn` object is returned. + + Raises: + weaviate.exceptions.WeaviateGRPCQueryError: If the request to the Weaviate server fails. + """ + + def resp( + res: SearchReply, + ) -> QueryNearMediaReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_query_or_groupby_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + rerank, + group_by, + ), + ), + ) + + request = self._query.near_object( + near_object=near_object, + certainty=certainty, + distance=distance, + limit=limit, + offset=offset, + autocut=auto_limit, + filters=filters, + group_by=_GroupBy.from_input(group_by), + rerank=rerank, + target_vector=target_vector, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + ) + return executor.execute( + response_callback=resp, method=self._connection.grpc_search, request=request + ) diff --git a/weaviate/collections/queries/near_object/query/sync.py b/weaviate/collections/queries/near_object/query/sync.py new file mode 100644 index 000000000..7ddf203fc --- /dev/null +++ b/weaviate/collections/queries/near_object/query/sync.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_object.query.executor import _NearObjectQueryExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _NearObjectQuery( + Generic[Properties, References], + _NearObjectQueryExecutor[ConnectionSync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_object/query/sync.pyi b/weaviate/collections/queries/near_object/query/sync.pyi new file mode 100644 index 000000000..9d315f90e --- /dev/null +++ b/weaviate/collections/queries/near_object/query/sync.pyi @@ -0,0 +1,281 @@ +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _GroupBy, + QuerySearchReturnType, + QueryNearMediaReturnType, + QueryReturn, + GroupByReturn, + CrossReferences, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR, UUID +from weaviate.connect.v4 import ConnectionSync +from .executor import _NearObjectQueryExecutor + +class _NearObjectQuery( + Generic[Properties, References], + _NearObjectQueryExecutor[ConnectionSync, Properties, References], +): + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GroupByReturn[Properties, References]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GroupByReturn[Properties, CrossReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GroupByReturn[Properties, TReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GroupByReturn[TProperties, References]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GroupByReturn[TProperties, CrossReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GroupByReturn[TProperties, TReferences]: ... + @overload + def near_object( + self, + near_object: UUID, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_text/executors.py b/weaviate/collections/queries/near_text/executors.py deleted file mode 100644 index fe6163771..000000000 --- a/weaviate/collections/queries/near_text/executors.py +++ /dev/null @@ -1,246 +0,0 @@ -from typing import Any, Generic, List, Optional, Union, cast - -from weaviate.collections.classes.filters import ( - _Filters, -) -from weaviate.collections.classes.grpc import ( - METADATA, - GroupBy, - Move, - Rerank, - TargetVectorJoinType, -) -from weaviate.collections.classes.internal import ( - _Generative, - _GroupBy, - GenerativeSearchReturnType, - QuerySearchReturnType, - ReturnProperties, - ReturnReferences, - _QueryOptions, - _GenerativeConfigRuntime, - _SinglePrompt, - _GroupedTask, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.executor import _BaseExecutor -from weaviate.connect import executor -from weaviate.connect.v4 import ConnectionType -from weaviate.proto.v1.search_get_pb2 import SearchReply -from weaviate.types import NUMBER, INCLUDE_VECTOR - - -class _NearTextGenerateExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def near_text( - self, - query: Union[List[str], str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[ - GenerativeSearchReturnType[Properties, References, TProperties, TReferences] - ]: - """Perform retrieval-augmented generation (RaG) on the results of a by-image object search in this collection using the image-capable vectorization module and vector-based similarity search. - - See the [docs](https://weaviate.io/developers/weaviate/api/graphql/search-operators#neartext) for a more detailed explanation. - - NOTE: - You must have a text-capable vectorization module installed in order to use this method, e.g. any of the `text2vec-` and `multi2vec-` modules. - - Args: - query: The text or texts to search on, REQUIRED. - certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. - distance: The maximum distance to search. If not specified, the default distance specified by the server is used. - limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. - auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. - filters: The filters to apply to the search. - group_by: How the results should be grouped by a specific property. - rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. - target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - return_references: The references to return for each object. - - NOTE: - - If `return_properties` is not provided then all properties are returned except for blob properties. - - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - - If `return_references` is not provided then no references are provided. - - Returns: - A `GenerativeReturn` or `GenerativeGroupByReturn` object that includes the searched objects. - If `group_by` is provided then a `GenerativeGroupByReturn` object is returned, otherwise a `GenerativeReturn` object is returned. - - Raises: - weaviate.exceptions.WeaviateGRPCQueryError: If the request to the Weaviate server fails. - """ - - def resp( - res: SearchReply, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_generative_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - rerank, - group_by, - ), - ), - ) - - request = self._query.near_text( - near_text=query, - certainty=certainty, - distance=distance, - move_to=move_to, - move_away=move_away, - limit=limit, - offset=offset, - autocut=auto_limit, - filters=filters, - group_by=_GroupBy.from_input(group_by), - rerank=rerank, - target_vector=target_vector, - generative=_Generative( - single=single_prompt, - grouped=grouped_task, - grouped_properties=grouped_properties, - generative_provider=generative_provider, - ), - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - ) - return executor.execute( - response_callback=resp, - method=self._connection.grpc_search, - request=request, - ) - - -class _NearTextQueryExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[QuerySearchReturnType[Properties, References, TProperties, TReferences]]: - """Search for objects in this collection by text using text-capable vectorization module and vector-based similarity search. - - See the [docs](https://weaviate.io/developers/weaviate/api/graphql/search-operators#neartext) for a more detailed explanation. - - NOTE: - You must have a text-capable vectorization module installed in order to use this method, e.g. any of the `text2vec-` and `multi2vec-` modules. - - Args: - query: The text or texts to search on, REQUIRED. - certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. - distance: The maximum distance to search. If not specified, the default distance specified by the server is used. - limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. - auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. - filters: The filters to apply to the search. - group_by: How the results should be grouped by a specific property. - rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. - target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - return_references: The references to return for each object. - - NOTE: - If `return_properties` is not provided then all properties are returned except for any cross reference properties. - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - If `return_references` is not provided then no references are provided. - - Returns: - A `QueryReturn` or `GroupByReturn` object that includes the searched objects. - If `group_by` is provided then a `GroupByReturn` object is returned, otherwise a `QueryReturn` object is returned. - - Raises: - weaviate.exceptions.WeaviateGRPCQueryError: If the request to the Weaviate server fails. - """ - - def resp( - res: SearchReply, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_query_or_groupby_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - rerank, - group_by, - ), - ), - ) - - request = self._query.near_text( - near_text=query, - certainty=certainty, - distance=distance, - move_to=move_to, - move_away=move_away, - limit=limit, - offset=offset, - autocut=auto_limit, - filters=filters, - group_by=_GroupBy.from_input(group_by), - rerank=rerank, - target_vector=target_vector, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - ) - return executor.execute( - response_callback=resp, - method=self._connection.grpc_search, - request=request, - ) diff --git a/weaviate/collections/queries/near_text/generate.py b/weaviate/collections/queries/near_text/generate.py deleted file mode 100644 index 8c4d2b6c9..000000000 --- a/weaviate/collections/queries/near_text/generate.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Generic - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.near_text.executors import _NearTextGenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _NearTextGenerateAsync( - Generic[Properties, References], - _NearTextGenerateExecutor[ConnectionAsync, Properties, References], -): - pass - - -@executor.wrap("sync") -class _NearTextGenerate( - Generic[Properties, References], - _NearTextGenerateExecutor[ConnectionSync, Properties, References], -): - pass diff --git a/weaviate/collections/queries/near_text/generate/__init__.py b/weaviate/collections/queries/near_text/generate/__init__.py new file mode 100644 index 000000000..a9806f074 --- /dev/null +++ b/weaviate/collections/queries/near_text/generate/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _NearTextGenerateAsync +from .sync import _NearTextGenerate + +__all__ = [ + "_NearTextGenerate", + "_NearTextGenerateAsync", +] diff --git a/weaviate/collections/queries/near_text/generate/async_.py b/weaviate/collections/queries/near_text/generate/async_.py new file mode 100644 index 000000000..ba7c06494 --- /dev/null +++ b/weaviate/collections/queries/near_text/generate/async_.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_text.generate.executor import _NearTextGenerateExecutor +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _NearTextGenerateAsync( + Generic[Properties, References], + _NearTextGenerateExecutor[ConnectionAsync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_text/generate/async_.pyi b/weaviate/collections/queries/near_text/generate/async_.pyi new file mode 100644 index 000000000..d2120c4da --- /dev/null +++ b/weaviate/collections/queries/near_text/generate/async_.pyi @@ -0,0 +1,363 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Move, + Rerank, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _Generative, + _GroupBy, + GenerativeSearchReturnType, + GenerativeReturn, + GenerativeGroupByReturn, + ReturnProperties, + ReturnReferences, + CrossReferences, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionAsync +from .executor import _NearTextGenerateExecutor + +class _NearTextGenerateAsync( + Generic[Properties, References], + _NearTextGenerateExecutor[ConnectionAsync, Properties, References], +): + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[Properties, References]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[TProperties, References]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_text/generate.pyi b/weaviate/collections/queries/near_text/generate/executor.py similarity index 50% rename from weaviate/collections/queries/near_text/generate.pyi rename to weaviate/collections/queries/near_text/generate/executor.py index 6c98501c0..4b09e0955 100644 --- a/weaviate/collections/queries/near_text/generate.pyi +++ b/weaviate/collections/queries/near_text/generate/executor.py @@ -1,13 +1,8 @@ -from typing import Generic, List, Literal, Optional, Type, Union, overload +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload from weaviate.collections.classes.filters import ( _Filters, ) -from weaviate.collections.classes.generative import ( - _GenerativeConfigRuntime, - _GroupedTask, - _SinglePrompt, -) from weaviate.collections.classes.grpc import ( METADATA, PROPERTIES, @@ -18,24 +13,32 @@ TargetVectorJoinType, ) from weaviate.collections.classes.internal import ( + _Generative, + _GroupBy, + GenerativeSearchReturnType, GenerativeReturn, GenerativeGroupByReturn, - CrossReferences, ReturnProperties, ReturnReferences, - GenerativeSearchReturnType, + CrossReferences, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, ) from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.near_text.executors import _NearTextGenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply from weaviate.types import NUMBER, INCLUDE_VECTOR -class _NearTextGenerateAsync( - Generic[Properties, References], - _NearTextGenerateExecutor[ConnectionAsync, Properties, References], + +class _NearTextGenerateExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] ): @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -58,9 +61,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> GenerativeReturn[Properties, References]: ... + ) -> executor.Result[GenerativeReturn[Properties, References]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -83,9 +87,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> GenerativeReturn[Properties, CrossReferences]: ... + ) -> executor.Result[GenerativeReturn[Properties, CrossReferences]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -108,9 +113,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> GenerativeReturn[Properties, TReferences]: ... + ) -> executor.Result[GenerativeReturn[Properties, TReferences]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -133,9 +139,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> GenerativeReturn[TProperties, References]: ... + ) -> executor.Result[GenerativeReturn[TProperties, References]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -158,9 +165,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> GenerativeReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[GenerativeReturn[TProperties, CrossReferences]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -183,10 +191,11 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> GenerativeReturn[TProperties, TReferences]: ... + ) -> executor.Result[GenerativeReturn[TProperties, TReferences]]: ... + ### GroupBy ### @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -209,9 +218,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[Properties, References]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, References]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -234,9 +244,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, CrossReferences]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -259,9 +270,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, TReferences]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -284,9 +296,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[TProperties, References]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, References]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -309,9 +322,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, CrossReferences]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -334,11 +348,11 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, TReferences]]: ... ### DEFAULT ### @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -361,316 +375,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... + ) -> executor.Result[ + GenerativeSearchReturnType[Properties, References, TProperties, TReferences] + ]: ... -class _NearTextGenerate( - Generic[Properties, References], - _NearTextGenerateExecutor[ConnectionSync, Properties, References], -): - @overload - def near_text( - self, - query: Union[List[str], str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeReturn[Properties, References]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeReturn[Properties, CrossReferences]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeReturn[Properties, TReferences]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeReturn[TProperties, References]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeReturn[TProperties, CrossReferences]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeReturn[TProperties, TReferences]: ... - ### GroupBy ### - @overload - def near_text( - self, - query: Union[List[str], str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[Properties, References]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[Properties, TReferences]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[TProperties, References]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... - - ### DEFAULT ### - @overload def near_text( self, query: Union[List[str], str], @@ -694,4 +402,89 @@ def near_text( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... + ) -> executor.Result[ + GenerativeSearchReturnType[Properties, References, TProperties, TReferences] + ]: + """Perform retrieval-augmented generation (RaG) on the results of a by-image object search in this collection using the image-capable vectorization module and vector-based similarity search. + + See the [docs](https://weaviate.io/developers/weaviate/api/graphql/search-operators#neartext) for a more detailed explanation. + + NOTE: + You must have a text-capable vectorization module installed in order to use this method, e.g. any of the `text2vec-` and `multi2vec-` modules. + + Args: + query: The text or texts to search on, REQUIRED. + certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. + distance: The maximum distance to search. If not specified, the default distance specified by the server is used. + limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. + auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. + filters: The filters to apply to the search. + group_by: How the results should be grouped by a specific property. + rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. + target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + return_references: The references to return for each object. + + NOTE: + - If `return_properties` is not provided then all properties are returned except for blob properties. + - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + - If `return_references` is not provided then no references are provided. + + Returns: + A `GenerativeReturn` or `GenerativeGroupByReturn` object that includes the searched objects. + If `group_by` is provided then a `GenerativeGroupByReturn` object is returned, otherwise a `GenerativeReturn` object is returned. + + Raises: + weaviate.exceptions.WeaviateGRPCQueryError: If the request to the Weaviate server fails. + """ + + def resp( + res: SearchReply, + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_generative_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + rerank, + group_by, + ), + ), + ) + + request = self._query.near_text( + near_text=query, + certainty=certainty, + distance=distance, + move_to=move_to, + move_away=move_away, + limit=limit, + offset=offset, + autocut=auto_limit, + filters=filters, + group_by=_GroupBy.from_input(group_by), + rerank=rerank, + target_vector=target_vector, + generative=_Generative( + single=single_prompt, + grouped=grouped_task, + grouped_properties=grouped_properties, + generative_provider=generative_provider, + ), + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + ) + return executor.execute( + response_callback=resp, + method=self._connection.grpc_search, + request=request, + ) diff --git a/weaviate/collections/queries/near_text/generate/sync.py b/weaviate/collections/queries/near_text/generate/sync.py new file mode 100644 index 000000000..741453cbd --- /dev/null +++ b/weaviate/collections/queries/near_text/generate/sync.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_text.generate.executor import _NearTextGenerateExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _NearTextGenerate( + Generic[Properties, References], + _NearTextGenerateExecutor[ConnectionSync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_text/generate/sync.pyi b/weaviate/collections/queries/near_text/generate/sync.pyi new file mode 100644 index 000000000..60dd7fe2c --- /dev/null +++ b/weaviate/collections/queries/near_text/generate/sync.pyi @@ -0,0 +1,363 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Move, + Rerank, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _Generative, + _GroupBy, + GenerativeSearchReturnType, + GenerativeReturn, + GenerativeGroupByReturn, + ReturnProperties, + ReturnReferences, + CrossReferences, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionSync +from .executor import _NearTextGenerateExecutor + +class _NearTextGenerate( + Generic[Properties, References], + _NearTextGenerateExecutor[ConnectionSync, Properties, References], +): + @overload + def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[Properties, References]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[TProperties, References]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_text/query.py b/weaviate/collections/queries/near_text/query.py deleted file mode 100644 index abbfc2083..000000000 --- a/weaviate/collections/queries/near_text/query.py +++ /dev/null @@ -1,20 +0,0 @@ -from typing import Generic - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.near_text.executors import _NearTextQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _NearTextQueryAsync( - Generic[Properties, References], _NearTextQueryExecutor[ConnectionAsync, Properties, References] -): - pass - - -@executor.wrap("sync") -class _NearTextQuery( - Generic[Properties, References], _NearTextQueryExecutor[ConnectionSync, Properties, References] -): - pass diff --git a/weaviate/collections/queries/near_text/query/__init__.py b/weaviate/collections/queries/near_text/query/__init__.py new file mode 100644 index 000000000..fae44d5ed --- /dev/null +++ b/weaviate/collections/queries/near_text/query/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _NearTextQueryAsync +from .sync import _NearTextQuery + +__all__ = [ + "_NearTextQuery", + "_NearTextQueryAsync", +] diff --git a/weaviate/collections/queries/near_text/query/async_.py b/weaviate/collections/queries/near_text/query/async_.py new file mode 100644 index 000000000..bcdafe09b --- /dev/null +++ b/weaviate/collections/queries/near_text/query/async_.py @@ -0,0 +1,13 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_text.query.executor import _NearTextQueryExecutor +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _NearTextQueryAsync( + Generic[Properties, References], _NearTextQueryExecutor[ConnectionAsync, Properties, References] +): + pass diff --git a/weaviate/collections/queries/near_text/query/async_.pyi b/weaviate/collections/queries/near_text/query/async_.pyi new file mode 100644 index 000000000..be6b0df70 --- /dev/null +++ b/weaviate/collections/queries/near_text/query/async_.pyi @@ -0,0 +1,306 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Move, + Rerank, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _GroupBy, + QueryReturn, + GroupByReturn, + CrossReferences, + QuerySearchReturnType, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionAsync +from .executor import _NearTextQueryExecutor + +class _NearTextQueryAsync( + Generic[Properties, References], _NearTextQueryExecutor[ConnectionAsync, Properties, References] +): + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GroupByReturn[Properties, References]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GroupByReturn[Properties, TReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GroupByReturn[TProperties, References]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GroupByReturn[TProperties, CrossReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GroupByReturn[TProperties, TReferences]: ... + @overload + async def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_text/query.pyi b/weaviate/collections/queries/near_text/query/executor.py similarity index 50% rename from weaviate/collections/queries/near_text/query.pyi rename to weaviate/collections/queries/near_text/query/executor.py index 83ac39464..cd2553040 100644 --- a/weaviate/collections/queries/near_text/query.pyi +++ b/weaviate/collections/queries/near_text/query/executor.py @@ -1,4 +1,4 @@ -from typing import Generic, List, Literal, Optional, Type, Union, overload +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload from weaviate.collections.classes.filters import ( _Filters, @@ -13,23 +13,28 @@ TargetVectorJoinType, ) from weaviate.collections.classes.internal import ( - GroupByReturn, + _GroupBy, QueryReturn, + GroupByReturn, CrossReferences, + QuerySearchReturnType, ReturnProperties, ReturnReferences, - QuerySearchReturnType, + _QueryOptions, ) from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.near_text.executors import _NearTextQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply from weaviate.types import NUMBER, INCLUDE_VECTOR -class _NearTextQueryAsync( - Generic[Properties, References], _NearTextQueryExecutor[ConnectionAsync, Properties, References] + +class _NearTextQueryExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] ): @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -48,9 +53,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> QueryReturn[Properties, References]: ... + ) -> executor.Result[QueryReturn[Properties, References]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -69,9 +75,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... + ) -> executor.Result[QueryReturn[Properties, CrossReferences]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -90,9 +97,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> QueryReturn[Properties, TReferences]: ... + ) -> executor.Result[QueryReturn[Properties, TReferences]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -111,9 +119,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> QueryReturn[TProperties, References]: ... + ) -> executor.Result[QueryReturn[TProperties, References]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -132,9 +141,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> QueryReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[QueryReturn[TProperties, CrossReferences]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -153,12 +163,12 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> QueryReturn[TProperties, TReferences]: ... + ) -> executor.Result[QueryReturn[TProperties, TReferences]]: ... ### GroupBy ### @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -177,9 +187,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> GroupByReturn[Properties, References]: ... + ) -> executor.Result[GroupByReturn[Properties, References]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -198,9 +209,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... + ) -> executor.Result[QueryReturn[Properties, CrossReferences]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -219,9 +231,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> GroupByReturn[Properties, TReferences]: ... + ) -> executor.Result[GroupByReturn[Properties, TReferences]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -240,9 +253,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> GroupByReturn[TProperties, References]: ... + ) -> executor.Result[GroupByReturn[TProperties, References]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -261,9 +275,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> GroupByReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[GroupByReturn[TProperties, CrossReferences]]: ... + @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -282,11 +297,11 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> GroupByReturn[TProperties, TReferences]: ... + ) -> executor.Result[GroupByReturn[TProperties, TReferences]]: ... ### DEFAULT ### @overload - async def near_text( + def near_text( self, query: Union[List[str], str], *, @@ -305,269 +320,10 @@ async def near_text( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... + ) -> executor.Result[ + QuerySearchReturnType[Properties, References, TProperties, TReferences] + ]: ... -class _NearTextQuery( - Generic[Properties, References], _NearTextQueryExecutor[ConnectionSync, Properties, References] -): - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> QueryReturn[Properties, References]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> QueryReturn[Properties, TReferences]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> QueryReturn[TProperties, References]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> QueryReturn[TProperties, CrossReferences]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> QueryReturn[TProperties, TReferences]: ... - - ### GroupBy ### - - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GroupByReturn[Properties, References]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GroupByReturn[Properties, TReferences]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GroupByReturn[TProperties, References]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GroupByReturn[TProperties, CrossReferences]: ... - @overload - def near_text( - self, - query: Union[List[str], str], - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - move_to: Optional[Move] = None, - move_away: Optional[Move] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GroupByReturn[TProperties, TReferences]: ... - - ### DEFAULT ### - @overload def near_text( self, query: Union[List[str], str], @@ -587,4 +343,81 @@ def near_text( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... + ) -> executor.Result[QuerySearchReturnType[Properties, References, TProperties, TReferences]]: + """Search for objects in this collection by text using text-capable vectorization module and vector-based similarity search. + + See the [docs](https://weaviate.io/developers/weaviate/api/graphql/search-operators#neartext) for a more detailed explanation. + + NOTE: + You must have a text-capable vectorization module installed in order to use this method, e.g. any of the `text2vec-` and `multi2vec-` modules. + + Args: + query: The text or texts to search on, REQUIRED. + certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. + distance: The maximum distance to search. If not specified, the default distance specified by the server is used. + limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. + auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. + filters: The filters to apply to the search. + group_by: How the results should be grouped by a specific property. + rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. + target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + return_references: The references to return for each object. + + NOTE: + If `return_properties` is not provided then all properties are returned except for any cross reference properties. + If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + If `return_references` is not provided then no references are provided. + + Returns: + A `QueryReturn` or `GroupByReturn` object that includes the searched objects. + If `group_by` is provided then a `GroupByReturn` object is returned, otherwise a `QueryReturn` object is returned. + + Raises: + weaviate.exceptions.WeaviateGRPCQueryError: If the request to the Weaviate server fails. + """ + + def resp( + res: SearchReply, + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_query_or_groupby_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + rerank, + group_by, + ), + ), + ) + + request = self._query.near_text( + near_text=query, + certainty=certainty, + distance=distance, + move_to=move_to, + move_away=move_away, + limit=limit, + offset=offset, + autocut=auto_limit, + filters=filters, + group_by=_GroupBy.from_input(group_by), + rerank=rerank, + target_vector=target_vector, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + ) + return executor.execute( + response_callback=resp, + method=self._connection.grpc_search, + request=request, + ) diff --git a/weaviate/collections/queries/near_text/query/sync.py b/weaviate/collections/queries/near_text/query/sync.py new file mode 100644 index 000000000..065909f2e --- /dev/null +++ b/weaviate/collections/queries/near_text/query/sync.py @@ -0,0 +1,13 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_text.query.executor import _NearTextQueryExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _NearTextQuery( + Generic[Properties, References], _NearTextQueryExecutor[ConnectionSync, Properties, References] +): + pass diff --git a/weaviate/collections/queries/near_text/query/sync.pyi b/weaviate/collections/queries/near_text/query/sync.pyi new file mode 100644 index 000000000..53fa8fc41 --- /dev/null +++ b/weaviate/collections/queries/near_text/query/sync.pyi @@ -0,0 +1,306 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Move, + Rerank, + TargetVectorJoinType, +) +from weaviate.collections.classes.internal import ( + _GroupBy, + QueryReturn, + GroupByReturn, + CrossReferences, + QuerySearchReturnType, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionSync +from .executor import _NearTextQueryExecutor + +class _NearTextQuery( + Generic[Properties, References], _NearTextQueryExecutor[ConnectionSync, Properties, References] +): + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GroupByReturn[Properties, References]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GroupByReturn[Properties, TReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GroupByReturn[TProperties, References]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GroupByReturn[TProperties, CrossReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GroupByReturn[TProperties, TReferences]: ... + @overload + def near_text( + self, + query: Union[List[str], str], + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + move_to: Optional[Move] = None, + move_away: Optional[Move] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_vector/executors.py b/weaviate/collections/queries/near_vector/executors.py deleted file mode 100644 index fcb7ec7d5..000000000 --- a/weaviate/collections/queries/near_vector/executors.py +++ /dev/null @@ -1,232 +0,0 @@ -from typing import Any, Generic, List, Optional, Union, cast - -from weaviate.collections.classes.filters import ( - _Filters, -) -from weaviate.collections.classes.grpc import ( - METADATA, - GroupBy, - Rerank, - TargetVectorJoinType, - NearVectorInputType, -) -from weaviate.collections.classes.internal import ( - _Generative, - GenerativeSearchReturnType, - QuerySearchReturnType, - _GroupBy, - ReturnProperties, - ReturnReferences, - _QueryOptions, - _GenerativeConfigRuntime, - _SinglePrompt, - _GroupedTask, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.executor import _BaseExecutor -from weaviate.connect import executor -from weaviate.connect.v4 import ConnectionType -from weaviate.proto.v1.search_get_pb2 import SearchReply -from weaviate.types import NUMBER, INCLUDE_VECTOR - - -class _NearVectorGenerateExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def near_vector( - self, - near_vector: NearVectorInputType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime], - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[ - GenerativeSearchReturnType[Properties, References, TProperties, TReferences] - ]: - """Perform retrieval-augmented generation (RaG) on the results of a by-vector object search in this collection using vector-based similarity search. - - See the [docs](https://weaviate.io/developers/weaviate/search/similarity) for a more detailed explanation. - - Args: - near_vector: The vector to search on, REQUIRED. This can be a base64 encoded string of the binary, a path to the file, or a file-like object. - certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. - distance: The maximum distance to search. If not specified, the default distance specified by the server is used. - limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. - auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. - filters: The filters to apply to the search. - group_by: How the results should be grouped by a specific property. - rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. - target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - return_references: The references to return for each object. - - NOTE: - - If `return_properties` is not provided then all properties are returned except for blob properties. - - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - - If `return_references` is not provided then no references are provided. - - Returns: - A `GenerativeReturn` or `GenerativeGroupByReturn` object that includes the searched objects. - If `group_by` is provided then a `GenerativeGroupByReturn` object is returned, otherwise a `GenerativeReturn` object is returned. - - Raises: - weaviate.exceptions.WeaviateGRPCQueryError: If the request to the Weaviate server fails. - """ - - def resp( - res: SearchReply, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_generative_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - rerank, - group_by, - ), - ), - ) - - request = self._query.near_vector( - near_vector=near_vector, - certainty=certainty, - distance=distance, - filters=filters, - group_by=_GroupBy.from_input(group_by), - generative=_Generative( - single=single_prompt, - grouped=grouped_task, - grouped_properties=grouped_properties, - generative_provider=generative_provider, - ), - limit=limit, - offset=offset, - autocut=auto_limit, - rerank=rerank, - target_vector=target_vector, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - ) - return executor.execute( - response_callback=resp, - method=self._connection.grpc_search, - request=request, - ) - - -class _NearVectorQueryExecutor( - Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] -): - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> executor.Result[QuerySearchReturnType[Properties, References, TProperties, TReferences]]: - """Search for objects by vector in this collection using and vector-based similarity search. - - See the [docs](https://weaviate.io/developers/weaviate/search/similarity) for a more detailed explanation. - - Args: - near_vector: The vector to search on, REQUIRED. This can be a base64 encoded string of the binary, a path to the file, or a file-like object. - certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. - distance: The maximum distance to search. If not specified, the default distance specified by the server is used. - limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. - offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. - auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. - filters: The filters to apply to the search. - group_by: How the results should be grouped by a specific property. - rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. - target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. - include_vector: Whether to include the vector in the results. If not specified, this is set to False. - return_metadata: The metadata to return for each object, defaults to `None`. - return_properties: The properties to return for each object. - return_references: The references to return for each object. - - NOTE: - - If `return_properties` is not provided then all properties are returned except for blob properties. - - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. - - If `return_references` is not provided then no references are provided. - - Returns: - A `QueryReturn` or `GroupByReturn` object that includes the searched objects. - If `group_by` is provided then a `GroupByReturn` object is returned, otherwise a `QueryReturn` object is returned. - - Raises: - weaviate.exceptions.WeaviateGRPCQueryError: If the request to the Weaviate server fails. - """ - - def resp( - res: SearchReply, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: - return cast( - Any, - self._result_to_generative_return( - res, - _QueryOptions.from_input( - return_metadata, - return_properties, - include_vector, - self._references, - return_references, - rerank, - group_by, - ), - ), - ) - - request = self._query.near_vector( - near_vector=near_vector, - certainty=certainty, - distance=distance, - filters=filters, - group_by=_GroupBy.from_input(group_by), - limit=limit, - offset=offset, - autocut=auto_limit, - rerank=rerank, - target_vector=target_vector, - return_metadata=self._parse_return_metadata(return_metadata, include_vector), - return_properties=self._parse_return_properties(return_properties), - return_references=self._parse_return_references(return_references), - ) - return executor.execute( - response_callback=resp, - method=self._connection.grpc_search, - request=request, - ) diff --git a/weaviate/collections/queries/near_vector/generate.py b/weaviate/collections/queries/near_vector/generate.py deleted file mode 100644 index 8d22f3deb..000000000 --- a/weaviate/collections/queries/near_vector/generate.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Generic - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.near_vector.executors import _NearVectorGenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _NearVectorGenerateAsync( - Generic[Properties, References], - _NearVectorGenerateExecutor[ConnectionAsync, Properties, References], -): - pass - - -@executor.wrap("sync") -class _NearVectorGenerate( - Generic[Properties, References], - _NearVectorGenerateExecutor[ConnectionSync, Properties, References], -): - pass diff --git a/weaviate/collections/queries/near_vector/generate/__init__.py b/weaviate/collections/queries/near_vector/generate/__init__.py new file mode 100644 index 000000000..3e49055e8 --- /dev/null +++ b/weaviate/collections/queries/near_vector/generate/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _NearVectorGenerateAsync +from .sync import _NearVectorGenerate + +__all__ = [ + "_NearVectorGenerate", + "_NearVectorGenerateAsync", +] diff --git a/weaviate/collections/queries/near_vector/generate/async_.py b/weaviate/collections/queries/near_vector/generate/async_.py new file mode 100644 index 000000000..f977daa8d --- /dev/null +++ b/weaviate/collections/queries/near_vector/generate/async_.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_vector.generate.executor import _NearVectorGenerateExecutor +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _NearVectorGenerateAsync( + Generic[Properties, References], + _NearVectorGenerateExecutor[ConnectionAsync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_vector/generate/async_.pyi b/weaviate/collections/queries/near_vector/generate/async_.pyi new file mode 100644 index 000000000..8fc08f863 --- /dev/null +++ b/weaviate/collections/queries/near_vector/generate/async_.pyi @@ -0,0 +1,337 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + TargetVectorJoinType, + NearVectorInputType, +) +from weaviate.collections.classes.internal import ( + _Generative, + GenerativeSearchReturnType, + GenerativeReturn, + GenerativeGroupByReturn, + CrossReferences, + _GroupBy, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionAsync +from .executor import _NearVectorGenerateExecutor + +class _NearVectorGenerateAsync( + Generic[Properties, References], + _NearVectorGenerateExecutor[ConnectionAsync, Properties, References], +): + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[Properties, References]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[TProperties, References]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_vector/generate.pyi b/weaviate/collections/queries/near_vector/generate/executor.py similarity index 50% rename from weaviate/collections/queries/near_vector/generate.pyi rename to weaviate/collections/queries/near_vector/generate/executor.py index ee906eba9..3e89ea620 100644 --- a/weaviate/collections/queries/near_vector/generate.pyi +++ b/weaviate/collections/queries/near_vector/generate/executor.py @@ -1,13 +1,8 @@ -from typing import Generic, List, Literal, Optional, Type, Union, overload +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload from weaviate.collections.classes.filters import ( _Filters, ) -from weaviate.collections.classes.generative import ( - _GenerativeConfigRuntime, - _GroupedTask, - _SinglePrompt, -) from weaviate.collections.classes.grpc import ( METADATA, PROPERTIES, @@ -18,24 +13,32 @@ NearVectorInputType, ) from weaviate.collections.classes.internal import ( + _Generative, + GenerativeSearchReturnType, GenerativeReturn, GenerativeGroupByReturn, CrossReferences, + _GroupBy, ReturnProperties, ReturnReferences, - GenerativeSearchReturnType, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, ) from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.near_vector.executors import _NearVectorGenerateExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply from weaviate.types import NUMBER, INCLUDE_VECTOR -class _NearVectorGenerateAsync( - Generic[Properties, References], - _NearVectorGenerateExecutor[ConnectionAsync, Properties, References], + +class _NearVectorGenerateExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] ): @overload - async def near_vector( + def near_vector( self, near_vector: NearVectorInputType, *, @@ -56,9 +59,10 @@ async def near_vector( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> GenerativeReturn[Properties, References]: ... + ) -> executor.Result[GenerativeReturn[Properties, References]]: ... + @overload - async def near_vector( + def near_vector( self, near_vector: NearVectorInputType, *, @@ -79,9 +83,10 @@ async def near_vector( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> GenerativeReturn[Properties, CrossReferences]: ... + ) -> executor.Result[GenerativeReturn[Properties, CrossReferences]]: ... + @overload - async def near_vector( + def near_vector( self, near_vector: NearVectorInputType, *, @@ -102,9 +107,10 @@ async def near_vector( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> GenerativeReturn[Properties, TReferences]: ... + ) -> executor.Result[GenerativeReturn[Properties, TReferences]]: ... + @overload - async def near_vector( + def near_vector( self, near_vector: NearVectorInputType, *, @@ -125,9 +131,10 @@ async def near_vector( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> GenerativeReturn[TProperties, References]: ... + ) -> executor.Result[GenerativeReturn[TProperties, References]]: ... + @overload - async def near_vector( + def near_vector( self, near_vector: NearVectorInputType, *, @@ -148,9 +155,10 @@ async def near_vector( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> GenerativeReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[GenerativeReturn[TProperties, CrossReferences]]: ... + @overload - async def near_vector( + def near_vector( self, near_vector: NearVectorInputType, *, @@ -171,10 +179,11 @@ async def near_vector( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> GenerativeReturn[TProperties, TReferences]: ... + ) -> executor.Result[GenerativeReturn[TProperties, TReferences]]: ... + ### GroupBy ### @overload - async def near_vector( + def near_vector( self, near_vector: NearVectorInputType, *, @@ -195,9 +204,10 @@ async def near_vector( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[Properties, References]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, References]]: ... + @overload - async def near_vector( + def near_vector( self, near_vector: NearVectorInputType, *, @@ -218,9 +228,10 @@ async def near_vector( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: REFERENCES, - ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, CrossReferences]]: ... + @overload - async def near_vector( + def near_vector( self, near_vector: NearVectorInputType, *, @@ -241,9 +252,10 @@ async def near_vector( return_metadata: Optional[METADATA] = None, return_properties: Union[PROPERTIES, bool, None] = None, return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[Properties, TReferences]]: ... + @overload - async def near_vector( + def near_vector( self, near_vector: NearVectorInputType, *, @@ -264,9 +276,10 @@ async def near_vector( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[TProperties, References]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, References]]: ... + @overload - async def near_vector( + def near_vector( self, near_vector: NearVectorInputType, *, @@ -287,9 +300,10 @@ async def near_vector( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: REFERENCES, - ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, CrossReferences]]: ... + @overload - async def near_vector( + def near_vector( self, near_vector: NearVectorInputType, *, @@ -310,11 +324,11 @@ async def near_vector( return_metadata: Optional[METADATA] = None, return_properties: Type[TProperties], return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + ) -> executor.Result[GenerativeGroupByReturn[TProperties, TReferences]]: ... ### DEFAULT ### @overload - async def near_vector( + def near_vector( self, near_vector: NearVectorInputType, *, @@ -335,292 +349,10 @@ async def near_vector( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... - -class _NearVectorGenerate( - Generic[Properties, References], - _NearVectorGenerateExecutor[ConnectionSync, Properties, References], -): - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeReturn[Properties, References]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeReturn[Properties, CrossReferences]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeReturn[Properties, TReferences]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeReturn[TProperties, References]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeReturn[TProperties, CrossReferences]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeReturn[TProperties, TReferences]: ... - ### GroupBy ### - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[Properties, References]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[Properties, TReferences]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GenerativeGroupByReturn[TProperties, References]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - single_prompt: Union[str, _SinglePrompt, None] = None, - grouped_task: Union[str, _GroupedTask, None] = None, - grouped_properties: Optional[List[str]] = None, - generative_provider: Optional[_GenerativeConfigRuntime] = None, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + ) -> executor.Result[ + GenerativeSearchReturnType[Properties, References, TProperties, TReferences] + ]: ... - ### DEFAULT ### - @overload def near_vector( self, near_vector: NearVectorInputType, @@ -642,4 +374,84 @@ def near_vector( return_metadata: Optional[METADATA] = None, return_properties: Optional[ReturnProperties[TProperties]] = None, return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... + ) -> executor.Result[ + GenerativeSearchReturnType[Properties, References, TProperties, TReferences] + ]: + """Perform retrieval-augmented generation (RaG) on the results of a by-vector object search in this collection using vector-based similarity search. + + See the [docs](https://weaviate.io/developers/weaviate/search/similarity) for a more detailed explanation. + + Args: + near_vector: The vector to search on, REQUIRED. This can be a base64 encoded string of the binary, a path to the file, or a file-like object. + certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. + distance: The maximum distance to search. If not specified, the default distance specified by the server is used. + limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. + auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. + filters: The filters to apply to the search. + group_by: How the results should be grouped by a specific property. + rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. + target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + return_references: The references to return for each object. + + NOTE: + - If `return_properties` is not provided then all properties are returned except for blob properties. + - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + - If `return_references` is not provided then no references are provided. + + Returns: + A `GenerativeReturn` or `GenerativeGroupByReturn` object that includes the searched objects. + If `group_by` is provided then a `GenerativeGroupByReturn` object is returned, otherwise a `GenerativeReturn` object is returned. + + Raises: + weaviate.exceptions.WeaviateGRPCQueryError: If the request to the Weaviate server fails. + """ + + def resp( + res: SearchReply, + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_generative_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + rerank, + group_by, + ), + ), + ) + + request = self._query.near_vector( + near_vector=near_vector, + certainty=certainty, + distance=distance, + filters=filters, + group_by=_GroupBy.from_input(group_by), + generative=_Generative( + single=single_prompt, + grouped=grouped_task, + grouped_properties=grouped_properties, + generative_provider=generative_provider, + ), + limit=limit, + offset=offset, + autocut=auto_limit, + rerank=rerank, + target_vector=target_vector, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + ) + return executor.execute( + response_callback=resp, + method=self._connection.grpc_search, + request=request, + ) diff --git a/weaviate/collections/queries/near_vector/generate/sync.py b/weaviate/collections/queries/near_vector/generate/sync.py new file mode 100644 index 000000000..742d16bc6 --- /dev/null +++ b/weaviate/collections/queries/near_vector/generate/sync.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_vector.generate.executor import _NearVectorGenerateExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _NearVectorGenerate( + Generic[Properties, References], + _NearVectorGenerateExecutor[ConnectionSync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_vector/generate/sync.pyi b/weaviate/collections/queries/near_vector/generate/sync.pyi new file mode 100644 index 000000000..5950aef7d --- /dev/null +++ b/weaviate/collections/queries/near_vector/generate/sync.pyi @@ -0,0 +1,337 @@ +from typing import Any, Generic, List, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + TargetVectorJoinType, + NearVectorInputType, +) +from weaviate.collections.classes.internal import ( + _Generative, + GenerativeSearchReturnType, + GenerativeReturn, + GenerativeGroupByReturn, + CrossReferences, + _GroupBy, + ReturnProperties, + ReturnReferences, + _QueryOptions, + _GenerativeConfigRuntime, + _SinglePrompt, + _GroupedTask, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionSync +from .executor import _NearVectorGenerateExecutor + +class _NearVectorGenerate( + Generic[Properties, References], + _NearVectorGenerateExecutor[ConnectionSync, Properties, References], +): + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeReturn[Properties, References]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeReturn[Properties, CrossReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeReturn[Properties, TReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeReturn[TProperties, References]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeReturn[TProperties, CrossReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeReturn[TProperties, TReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[Properties, References]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GenerativeGroupByReturn[Properties, CrossReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[Properties, TReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GenerativeGroupByReturn[TProperties, References]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GenerativeGroupByReturn[TProperties, CrossReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GenerativeGroupByReturn[TProperties, TReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + single_prompt: Union[str, _SinglePrompt, None] = None, + grouped_task: Union[str, _GroupedTask, None] = None, + grouped_properties: Optional[List[str]] = None, + generative_provider: Optional[_GenerativeConfigRuntime] = None, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> GenerativeSearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_vector/query.py b/weaviate/collections/queries/near_vector/query.py deleted file mode 100644 index cbd8233f6..000000000 --- a/weaviate/collections/queries/near_vector/query.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Generic - -from weaviate.connect import executor -from weaviate.collections.classes.types import Properties, References -from weaviate.collections.queries.near_vector.executors import _NearVectorQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync - - -@executor.wrap("async") -class _NearVectorQueryAsync( - Generic[Properties, References], - _NearVectorQueryExecutor[ConnectionAsync, Properties, References], -): - pass - - -@executor.wrap("sync") -class _NearVectorQuery( - Generic[Properties, References], - _NearVectorQueryExecutor[ConnectionSync, Properties, References], -): - pass diff --git a/weaviate/collections/queries/near_vector/query.pyi b/weaviate/collections/queries/near_vector/query.pyi deleted file mode 100644 index c744d4164..000000000 --- a/weaviate/collections/queries/near_vector/query.pyi +++ /dev/null @@ -1,540 +0,0 @@ -from typing import Generic, List, Literal, Optional, Type, Union, overload - -from weaviate.collections.classes.filters import ( - _Filters, -) -from weaviate.collections.classes.grpc import ( - METADATA, - PROPERTIES, - REFERENCES, - GroupBy, - Rerank, - TargetVectorJoinType, - NearVectorInputType, -) -from weaviate.collections.classes.internal import ( - GroupByReturn, - QueryReturn, - CrossReferences, - ReturnProperties, - ReturnReferences, - QuerySearchReturnType, -) -from weaviate.collections.classes.types import Properties, TProperties, References, TReferences -from weaviate.collections.queries.near_vector.executors import _NearVectorQueryExecutor -from weaviate.connect.v4 import ConnectionAsync, ConnectionSync -from weaviate.types import NUMBER, INCLUDE_VECTOR - -class _NearVectorQueryAsync( - Generic[Properties, References], - _NearVectorQueryExecutor[ConnectionAsync, Properties, References], -): - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> QueryReturn[Properties, References]: ... - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> QueryReturn[Properties, TReferences]: ... - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> QueryReturn[TProperties, References]: ... - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> QueryReturn[TProperties, CrossReferences]: ... - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> QueryReturn[TProperties, TReferences]: ... - - ### GroupBy ### - - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GroupByReturn[Properties, References]: ... - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GroupByReturn[Properties, CrossReferences]: ... - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GroupByReturn[Properties, TReferences]: ... - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GroupByReturn[TProperties, References]: ... - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GroupByReturn[TProperties, CrossReferences]: ... - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GroupByReturn[TProperties, TReferences]: ... - - ### DEFAULT ### - @overload - async def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... - -class _NearVectorQuery( - Generic[Properties, References], - _NearVectorQueryExecutor[ConnectionSync, Properties, References], -): - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> QueryReturn[Properties, References]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> QueryReturn[Properties, CrossReferences]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> QueryReturn[Properties, TReferences]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> QueryReturn[TProperties, References]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> QueryReturn[TProperties, CrossReferences]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Literal[None] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> QueryReturn[TProperties, TReferences]: ... - - ### GroupBy ### - - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Literal[None] = None, - ) -> GroupByReturn[Properties, References]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: REFERENCES, - ) -> GroupByReturn[Properties, CrossReferences]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Union[PROPERTIES, bool, None] = None, - return_references: Type[TReferences], - ) -> GroupByReturn[Properties, TReferences]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Literal[None] = None, - ) -> GroupByReturn[TProperties, References]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: REFERENCES, - ) -> GroupByReturn[TProperties, CrossReferences]: ... - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: GroupBy, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Type[TProperties], - return_references: Type[TReferences], - ) -> GroupByReturn[TProperties, TReferences]: ... - - ### DEFAULT ### - @overload - def near_vector( - self, - near_vector: NearVectorInputType, - *, - certainty: Optional[NUMBER] = None, - distance: Optional[NUMBER] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - auto_limit: Optional[int] = None, - filters: Optional[_Filters] = None, - group_by: Optional[GroupBy] = None, - rerank: Optional[Rerank] = None, - target_vector: Optional[TargetVectorJoinType] = None, - include_vector: INCLUDE_VECTOR = False, - return_metadata: Optional[METADATA] = None, - return_properties: Optional[ReturnProperties[TProperties]] = None, - return_references: Optional[ReturnReferences[TReferences]] = None, - ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_vector/query/__init__.py b/weaviate/collections/queries/near_vector/query/__init__.py new file mode 100644 index 000000000..1d22b421c --- /dev/null +++ b/weaviate/collections/queries/near_vector/query/__init__.py @@ -0,0 +1,7 @@ +from .async_ import _NearVectorQueryAsync +from .sync import _NearVectorQuery + +__all__ = [ + "_NearVectorQuery", + "_NearVectorQueryAsync", +] diff --git a/weaviate/collections/queries/near_vector/query/async_.py b/weaviate/collections/queries/near_vector/query/async_.py new file mode 100644 index 000000000..a74bfa570 --- /dev/null +++ b/weaviate/collections/queries/near_vector/query/async_.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_vector.query.executor import _NearVectorQueryExecutor +from weaviate.connect.v4 import ConnectionAsync + + +@executor.wrap("async") +class _NearVectorQueryAsync( + Generic[Properties, References], + _NearVectorQueryExecutor[ConnectionAsync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_vector/query/async_.pyi b/weaviate/collections/queries/near_vector/query/async_.pyi new file mode 100644 index 000000000..48470c591 --- /dev/null +++ b/weaviate/collections/queries/near_vector/query/async_.pyi @@ -0,0 +1,281 @@ +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + TargetVectorJoinType, + NearVectorInputType, +) +from weaviate.collections.classes.internal import ( + QuerySearchReturnType, + QueryReturn, + GroupByReturn, + CrossReferences, + _GroupBy, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionAsync +from .executor import _NearVectorQueryExecutor + +class _NearVectorQueryAsync( + Generic[Properties, References], + _NearVectorQueryExecutor[ConnectionAsync, Properties, References], +): + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GroupByReturn[Properties, References]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GroupByReturn[Properties, CrossReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GroupByReturn[Properties, TReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GroupByReturn[TProperties, References]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GroupByReturn[TProperties, CrossReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GroupByReturn[TProperties, TReferences]: ... + @overload + async def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/queries/near_vector/query/executor.py b/weaviate/collections/queries/near_vector/query/executor.py new file mode 100644 index 000000000..57b5e71e6 --- /dev/null +++ b/weaviate/collections/queries/near_vector/query/executor.py @@ -0,0 +1,390 @@ +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload + +from weaviate.collections.classes.filters import ( + _Filters, +) +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + TargetVectorJoinType, + NearVectorInputType, +) +from weaviate.collections.classes.internal import ( + QuerySearchReturnType, + QueryReturn, + GroupByReturn, + CrossReferences, + _GroupBy, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR + + +class _NearVectorQueryExecutor( + Generic[ConnectionType, Properties, References], _BaseExecutor[ConnectionType] +): + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None, + ) -> executor.Result[QueryReturn[Properties, References]]: ... + + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES, + ) -> executor.Result[QueryReturn[Properties, CrossReferences]]: ... + + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences], + ) -> executor.Result[QueryReturn[Properties, TReferences]]: ... + + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None, + ) -> executor.Result[QueryReturn[TProperties, References]]: ... + + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES, + ) -> executor.Result[QueryReturn[TProperties, CrossReferences]]: ... + + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences], + ) -> executor.Result[QueryReturn[TProperties, TReferences]]: ... + + ### GroupBy ### + + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None, + ) -> executor.Result[GroupByReturn[Properties, References]]: ... + + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES, + ) -> executor.Result[GroupByReturn[Properties, CrossReferences]]: ... + + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences], + ) -> executor.Result[GroupByReturn[Properties, TReferences]]: ... + + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None, + ) -> executor.Result[GroupByReturn[TProperties, References]]: ... + + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES, + ) -> executor.Result[GroupByReturn[TProperties, CrossReferences]]: ... + + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences], + ) -> executor.Result[GroupByReturn[TProperties, TReferences]]: ... + + ### DEFAULT ### + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None, + ) -> executor.Result[ + QuerySearchReturnType[Properties, References, TProperties, TReferences] + ]: ... + + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None, + ) -> executor.Result[QuerySearchReturnType[Properties, References, TProperties, TReferences]]: + """Search for objects by vector in this collection using and vector-based similarity search. + + See the [docs](https://weaviate.io/developers/weaviate/search/similarity) for a more detailed explanation. + + Args: + near_vector: The vector to search on, REQUIRED. This can be a base64 encoded string of the binary, a path to the file, or a file-like object. + certainty: The minimum similarity score to return. If not specified, the default certainty specified by the server is used. + distance: The maximum distance to search. If not specified, the default distance specified by the server is used. + limit: The maximum number of results to return. If not specified, the default limit specified by the server is returned. + offset: The offset to start from. If not specified, the retrieval begins from the first object in the server. + auto_limit: The maximum number of [autocut](https://weaviate.io/developers/weaviate/api/graphql/additional-operators#autocut) results to return. If not specified, no limit is applied. + filters: The filters to apply to the search. + group_by: How the results should be grouped by a specific property. + rerank: How the results should be reranked. NOTE: A `rerank-*` module must be enabled for this functionality to work. + target_vector: The name of the vector space to search in for named vector configurations. Required if multiple spaces are configured. + include_vector: Whether to include the vector in the results. If not specified, this is set to False. + return_metadata: The metadata to return for each object, defaults to `None`. + return_properties: The properties to return for each object. + return_references: The references to return for each object. + + NOTE: + - If `return_properties` is not provided then all properties are returned except for blob properties. + - If `return_metadata` is not provided then no metadata is provided. Use MetadataQuery.full() to retrieve all metadata. + - If `return_references` is not provided then no references are provided. + + Returns: + A `QueryReturn` or `GroupByReturn` object that includes the searched objects. + If `group_by` is provided then a `GroupByReturn` object is returned, otherwise a `QueryReturn` object is returned. + + Raises: + weaviate.exceptions.WeaviateGRPCQueryError: If the request to the Weaviate server fails. + """ + + def resp( + res: SearchReply, + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: + return cast( + Any, + self._result_to_generative_return( + res, + _QueryOptions.from_input( + return_metadata, + return_properties, + include_vector, + self._references, + return_references, + rerank, + group_by, + ), + ), + ) + + request = self._query.near_vector( + near_vector=near_vector, + certainty=certainty, + distance=distance, + filters=filters, + group_by=_GroupBy.from_input(group_by), + limit=limit, + offset=offset, + autocut=auto_limit, + rerank=rerank, + target_vector=target_vector, + return_metadata=self._parse_return_metadata(return_metadata, include_vector), + return_properties=self._parse_return_properties(return_properties), + return_references=self._parse_return_references(return_references), + ) + return executor.execute( + response_callback=resp, + method=self._connection.grpc_search, + request=request, + ) diff --git a/weaviate/collections/queries/near_vector/query/sync.py b/weaviate/collections/queries/near_vector/query/sync.py new file mode 100644 index 000000000..e38d9883a --- /dev/null +++ b/weaviate/collections/queries/near_vector/query/sync.py @@ -0,0 +1,14 @@ +from typing import Generic + +from weaviate.connect import executor +from weaviate.collections.classes.types import Properties, References +from weaviate.collections.queries.near_vector.query.executor import _NearVectorQueryExecutor +from weaviate.connect.v4 import ConnectionSync + + +@executor.wrap("sync") +class _NearVectorQuery( + Generic[Properties, References], + _NearVectorQueryExecutor[ConnectionSync, Properties, References], +): + pass diff --git a/weaviate/collections/queries/near_vector/query/sync.pyi b/weaviate/collections/queries/near_vector/query/sync.pyi new file mode 100644 index 000000000..5ca902c83 --- /dev/null +++ b/weaviate/collections/queries/near_vector/query/sync.pyi @@ -0,0 +1,281 @@ +from typing import Any, Generic, Literal, Optional, Type, Union, cast, overload +from weaviate.collections.classes.filters import _Filters +from weaviate.collections.classes.grpc import ( + METADATA, + PROPERTIES, + REFERENCES, + GroupBy, + Rerank, + TargetVectorJoinType, + NearVectorInputType, +) +from weaviate.collections.classes.internal import ( + QuerySearchReturnType, + QueryReturn, + GroupByReturn, + CrossReferences, + _GroupBy, + ReturnProperties, + ReturnReferences, + _QueryOptions, +) +from weaviate.collections.classes.types import Properties, TProperties, References, TReferences +from weaviate.collections.queries.base_executor import _BaseExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import ConnectionType +from weaviate.proto.v1.search_get_pb2 import SearchReply +from weaviate.types import NUMBER, INCLUDE_VECTOR +from weaviate.connect.v4 import ConnectionSync +from .executor import _NearVectorQueryExecutor + +class _NearVectorQuery( + Generic[Properties, References], + _NearVectorQueryExecutor[ConnectionSync, Properties, References], +): + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> QueryReturn[Properties, References]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> QueryReturn[Properties, CrossReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> QueryReturn[Properties, TReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> QueryReturn[TProperties, References]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> QueryReturn[TProperties, CrossReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Literal[None] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> QueryReturn[TProperties, TReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Literal[None] = None + ) -> GroupByReturn[Properties, References]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: REFERENCES + ) -> GroupByReturn[Properties, CrossReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Union[PROPERTIES, bool, None] = None, + return_references: Type[TReferences] + ) -> GroupByReturn[Properties, TReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Literal[None] = None + ) -> GroupByReturn[TProperties, References]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: REFERENCES + ) -> GroupByReturn[TProperties, CrossReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: GroupBy, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Type[TProperties], + return_references: Type[TReferences] + ) -> GroupByReturn[TProperties, TReferences]: ... + @overload + def near_vector( + self, + near_vector: NearVectorInputType, + *, + certainty: Optional[NUMBER] = None, + distance: Optional[NUMBER] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + auto_limit: Optional[int] = None, + filters: Optional[_Filters] = None, + group_by: Optional[GroupBy] = None, + rerank: Optional[Rerank] = None, + target_vector: Optional[TargetVectorJoinType] = None, + include_vector: INCLUDE_VECTOR = False, + return_metadata: Optional[METADATA] = None, + return_properties: Optional[ReturnProperties[TProperties]] = None, + return_references: Optional[ReturnReferences[TReferences]] = None + ) -> QuerySearchReturnType[Properties, References, TProperties, TReferences]: ... diff --git a/weaviate/collections/tenants/async_.pyi b/weaviate/collections/tenants/async_.pyi index 66767aa59..6fe921fbb 100644 --- a/weaviate/collections/tenants/async_.pyi +++ b/weaviate/collections/tenants/async_.pyi @@ -1,12 +1,29 @@ -from typing import Dict, List, Optional, Sequence, Union -from weaviate.collections.classes.tenants import Tenant -from weaviate.collections.tenants.executor import _TenantsExecutor -from weaviate.collections.tenants.executor import ( +import asyncio +from math import ceil +from typing import Any, Dict, Generic, List, Optional, Sequence, Union +from httpx import Response +from weaviate.collections.classes.tenants import ( + Tenant, + TenantCreate, + TenantUpdate, + TenantActivityStatus, + TenantCreateActivityStatus, + TenantUpdateActivityStatus, + TenantOutput, +) +from weaviate.collections.grpc.tenants import _TenantsGRPC +from weaviate.collections.tenants.types import ( TenantCreateInputType, - TenantOutputType, TenantUpdateInputType, + TenantOutputType, ) +from weaviate.connect import executor +from weaviate.connect.v4 import _ExpectedStatusCodes, ConnectionAsync, ConnectionType +from weaviate.exceptions import WeaviateInvalidInputError +from weaviate.proto.v1 import tenants_pb2 +from weaviate.validator import _validate_input, _ValidateArgument from weaviate.connect.v4 import ConnectionAsync +from .executor import _TenantsExecutor class _TenantsAsync(_TenantsExecutor[ConnectionAsync]): async def create( diff --git a/weaviate/collections/tenants/executor.py b/weaviate/collections/tenants/executor.py index 1880cad39..a94ab3453 100644 --- a/weaviate/collections/tenants/executor.py +++ b/weaviate/collections/tenants/executor.py @@ -14,15 +14,17 @@ TenantOutput, ) from weaviate.collections.grpc.tenants import _TenantsGRPC +from weaviate.collections.tenants.types import ( + TenantCreateInputType, + TenantUpdateInputType, + TenantOutputType, +) from weaviate.connect import executor from weaviate.connect.v4 import _ExpectedStatusCodes, ConnectionAsync, ConnectionType from weaviate.exceptions import WeaviateInvalidInputError from weaviate.proto.v1 import tenants_pb2 from weaviate.validator import _validate_input, _ValidateArgument -TenantCreateInputType = Union[str, Tenant, TenantCreate] -TenantUpdateInputType = Union[Tenant, TenantUpdate] -TenantOutputType = Tenant UPDATE_TENANT_BATCH_SIZE = 100 diff --git a/weaviate/collections/tenants/sync.pyi b/weaviate/collections/tenants/sync.pyi index 05eb7afc8..9c757438d 100644 --- a/weaviate/collections/tenants/sync.pyi +++ b/weaviate/collections/tenants/sync.pyi @@ -1,12 +1,29 @@ -from typing import Dict, List, Optional, Sequence, Union -from weaviate.collections.classes.tenants import Tenant -from weaviate.collections.tenants.executor import _TenantsExecutor -from weaviate.collections.tenants.executor import ( +import asyncio +from math import ceil +from typing import Any, Dict, Generic, List, Optional, Sequence, Union +from httpx import Response +from weaviate.collections.classes.tenants import ( + Tenant, + TenantCreate, + TenantUpdate, + TenantActivityStatus, + TenantCreateActivityStatus, + TenantUpdateActivityStatus, + TenantOutput, +) +from weaviate.collections.grpc.tenants import _TenantsGRPC +from weaviate.collections.tenants.types import ( TenantCreateInputType, - TenantOutputType, TenantUpdateInputType, + TenantOutputType, ) +from weaviate.connect import executor +from weaviate.connect.v4 import _ExpectedStatusCodes, ConnectionAsync, ConnectionType +from weaviate.exceptions import WeaviateInvalidInputError +from weaviate.proto.v1 import tenants_pb2 +from weaviate.validator import _validate_input, _ValidateArgument from weaviate.connect.v4 import ConnectionSync +from .executor import _TenantsExecutor class _Tenants(_TenantsExecutor[ConnectionSync]): def create( diff --git a/weaviate/collections/tenants/types.py b/weaviate/collections/tenants/types.py new file mode 100644 index 000000000..4c51ec9c1 --- /dev/null +++ b/weaviate/collections/tenants/types.py @@ -0,0 +1,6 @@ +from typing import Union +from weaviate.collections.classes.tenants import Tenant, TenantCreate, TenantUpdate + +TenantCreateInputType = Union[str, Tenant, TenantCreate] +TenantUpdateInputType = Union[Tenant, TenantUpdate] +TenantOutputType = Tenant diff --git a/weaviate/debug/async_.pyi b/weaviate/debug/async_.pyi index daa07d80b..09951c136 100644 --- a/weaviate/debug/async_.pyi +++ b/weaviate/debug/async_.pyi @@ -1,10 +1,12 @@ -from typing import Optional - -from weaviate.connect.v4 import ConnectionAsync +from typing import Dict, Generic, Optional +from httpx import Response from weaviate.classes.config import ConsistencyLevel -from weaviate.debug.executor import _DebugExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import _ExpectedStatusCodes, ConnectionType from weaviate.debug.types import DebugRESTObject from weaviate.types import UUID +from weaviate.connect.v4 import ConnectionAsync +from .executor import _DebugExecutor class _DebugAsync(_DebugExecutor[ConnectionAsync]): async def get_object_over_rest( @@ -14,5 +16,5 @@ class _DebugAsync(_DebugExecutor[ConnectionAsync]): *, consistency_level: Optional[ConsistencyLevel] = None, node_name: Optional[str] = None, - tenant: Optional[str] = None, + tenant: Optional[str] = None ) -> Optional[DebugRESTObject]: ... diff --git a/weaviate/debug/sync.pyi b/weaviate/debug/sync.pyi index 27906eae9..92ca5525f 100644 --- a/weaviate/debug/sync.pyi +++ b/weaviate/debug/sync.pyi @@ -1,10 +1,12 @@ -from typing import Optional - -from weaviate.connect.v4 import ConnectionSync +from typing import Dict, Generic, Optional +from httpx import Response from weaviate.classes.config import ConsistencyLevel -from weaviate.debug.executor import _DebugExecutor +from weaviate.connect import executor +from weaviate.connect.v4 import _ExpectedStatusCodes, ConnectionType from weaviate.debug.types import DebugRESTObject from weaviate.types import UUID +from weaviate.connect.v4 import ConnectionSync +from .executor import _DebugExecutor class _Debug(_DebugExecutor[ConnectionSync]): def get_object_over_rest( @@ -14,5 +16,5 @@ class _Debug(_DebugExecutor[ConnectionSync]): *, consistency_level: Optional[ConsistencyLevel] = None, node_name: Optional[str] = None, - tenant: Optional[str] = None, + tenant: Optional[str] = None ) -> Optional[DebugRESTObject]: ... diff --git a/weaviate/rbac/async_.pyi b/weaviate/rbac/async_.pyi index b43eb18a2..61253dc0f 100644 --- a/weaviate/rbac/async_.pyi +++ b/weaviate/rbac/async_.pyi @@ -1,22 +1,35 @@ -from typing import Dict, List, Optional, Sequence, Union +import asyncio +import json +from typing import Dict, Generic, List, Optional, Sequence, Union, cast from typing_extensions import deprecated - +from httpx import Response +from weaviate.connect.v4 import _ExpectedStatusCodes, ConnectionType, ConnectionAsync +from weaviate.connect import executor +from weaviate.rbac.models import ( + _Permission, + PermissionsOutputType, + PermissionsInputType, + Role, + UserAssignment, + UserTypes, + WeaviatePermission, + WeaviateRole, +) from weaviate.connect.v4 import ConnectionAsync -from weaviate.rbac.models import PermissionsOutputType, PermissionsInputType, Role, UserAssignment -from weaviate.rbac.executor import _RolesExecutor +from .executor import _RolesExecutor class _RolesAsync(_RolesExecutor[ConnectionAsync]): async def list_all(self) -> Dict[str, Role]: ... async def get_current_roles(self) -> List[Role]: ... + async def exists(self, role_name: str) -> bool: ... async def get(self, role_name: str) -> Optional[Role]: ... + async def create(self, *, role_name: str, permissions: PermissionsInputType) -> Role: ... + async def get_user_assignments(self, role_name: str) -> List[UserAssignment]: ... @deprecated( - """This method is deprecated and will be removed in Q4 25. Please use `roles.get_assignments` instead.""" + "This method is deprecated and will be removed in Q4 25. Please use `roles.get_user_assignments` instead." ) async def get_assigned_user_ids(self, role_name: str) -> List[str]: ... - async def get_user_assignments(self, role_name: str) -> List[UserAssignment]: ... async def delete(self, role_name: str) -> None: ... - async def create(self, *, role_name: str, permissions: PermissionsInputType) -> Role: ... - async def exists(self, role_name: str) -> bool: ... async def add_permissions( self, *, permissions: PermissionsInputType, role_name: str ) -> None: ... diff --git a/weaviate/rbac/executor.py b/weaviate/rbac/executor.py index 0231f648b..72bab3ff9 100644 --- a/weaviate/rbac/executor.py +++ b/weaviate/rbac/executor.py @@ -1,6 +1,7 @@ import asyncio import json from typing import Dict, Generic, List, Optional, Sequence, Union, cast +from typing_extensions import deprecated from httpx import Response @@ -176,6 +177,9 @@ def resp(res: Response) -> List[UserAssignment]: status_codes=_ExpectedStatusCodes(ok_in=[200], error="Get users of role"), ) + @deprecated( + """This method is deprecated and will be removed in Q4 25. Please use `roles.get_user_assignments` instead.""" + ) def get_assigned_user_ids( self, role_name: str, diff --git a/weaviate/rbac/sync.pyi b/weaviate/rbac/sync.pyi index 17932a507..005a8840f 100644 --- a/weaviate/rbac/sync.pyi +++ b/weaviate/rbac/sync.pyi @@ -1,22 +1,35 @@ -from typing import Dict, List, Optional, Sequence, Union +import asyncio +import json +from typing import Dict, Generic, List, Optional, Sequence, Union, cast from typing_extensions import deprecated - +from httpx import Response +from weaviate.connect.v4 import _ExpectedStatusCodes, ConnectionType, ConnectionAsync +from weaviate.connect import executor +from weaviate.rbac.models import ( + _Permission, + PermissionsOutputType, + PermissionsInputType, + Role, + UserAssignment, + UserTypes, + WeaviatePermission, + WeaviateRole, +) from weaviate.connect.v4 import ConnectionSync -from weaviate.rbac.models import PermissionsOutputType, PermissionsInputType, Role, UserAssignment -from weaviate.rbac.executor import _RolesExecutor +from .executor import _RolesExecutor class _Roles(_RolesExecutor[ConnectionSync]): def list_all(self) -> Dict[str, Role]: ... def get_current_roles(self) -> List[Role]: ... + def exists(self, role_name: str) -> bool: ... def get(self, role_name: str) -> Optional[Role]: ... + def create(self, *, role_name: str, permissions: PermissionsInputType) -> Role: ... + def get_user_assignments(self, role_name: str) -> List[UserAssignment]: ... @deprecated( - """This method is deprecated and will be removed in Q4 25. Please use `roles.get_user_assignments` instead.""" + "This method is deprecated and will be removed in Q4 25. Please use `roles.get_user_assignments` instead." ) def get_assigned_user_ids(self, role_name: str) -> List[str]: ... - def get_user_assignments(self, role_name: str) -> List[UserAssignment]: ... def delete(self, role_name: str) -> None: ... - def create(self, *, role_name: str, permissions: PermissionsInputType) -> Role: ... - def exists(self, role_name: str) -> bool: ... def add_permissions(self, *, permissions: PermissionsInputType, role_name: str) -> None: ... def remove_permissions(self, *, permissions: PermissionsInputType, role_name: str) -> None: ... def has_permissions( diff --git a/weaviate/users/async_.py b/weaviate/users/async_.py index 0cc8cf6f3..1c11185bc 100644 --- a/weaviate/users/async_.py +++ b/weaviate/users/async_.py @@ -1,24 +1,24 @@ from weaviate.connect import executor from weaviate.connect.v4 import ConnectionAsync from weaviate.users.executor import ( - _DeprecatedExecutor, - _DBExecutor, - _OIDCExecutor, + _UsersExecutor, + _UsersDBExecutor, + _UsersOIDCExecutor, ) @executor.wrap("async") -class _UsersDBAsync(_DBExecutor[ConnectionAsync]): +class _UsersDBAsync(_UsersDBExecutor[ConnectionAsync]): pass @executor.wrap("async") -class _UsersOIDCAsync(_OIDCExecutor[ConnectionAsync]): +class _UsersOIDCAsync(_UsersOIDCExecutor[ConnectionAsync]): pass @executor.wrap("async") -class _UsersAsync(_DeprecatedExecutor[ConnectionAsync]): +class _UsersAsync(_UsersExecutor[ConnectionAsync]): def __init__(self, connection: ConnectionAsync): super().__init__(connection) self.db = _UsersDBAsync(connection) diff --git a/weaviate/users/async_.pyi b/weaviate/users/async_.pyi index c2ee0c7f3..c9b49d088 100644 --- a/weaviate/users/async_.pyi +++ b/weaviate/users/async_.pyi @@ -1,12 +1,44 @@ -from typing import Dict, List, Literal, Union, overload +from typing import Any, Dict, Generic, List, Literal, Optional, Union, cast, overload +from typing_extensions import deprecated +from httpx import Response +from weaviate.connect import executor +from weaviate.connect.v4 import _ExpectedStatusCodes, ConnectionType +from weaviate.rbac.models import Role, RoleBase, WeaviateDBUserRoleNames, UserTypes +from weaviate.users.users import USER_TYPE_DB, USER_TYPE_OIDC, USER_TYPE, UserDB, OwnUser +from weaviate.util import _decode_json_response_dict from weaviate.connect.v4 import ConnectionAsync -from weaviate.users.executor import _DeprecatedExecutor, _DBExecutor, _OIDCExecutor -from weaviate.users.users import UserDB, OwnUser +from .executor import _BaseExecutor, _UsersExecutor, _UsersOIDCExecutor, _UsersDBExecutor -from weaviate.rbac.models import Role, RoleBase -from typing_extensions import deprecated +class _BaseAsync(_BaseExecutor[ConnectionAsync]): + async def _get_roles_of_user( + self, user_id: str, user_type: USER_TYPE, include_permissions: bool + ) -> Union[Dict[str, Role], Dict[str, RoleBase]]: ... + async def _get_roles_of_user_deprecated( + self, user_id: str + ) -> Union[Dict[str, Role], Dict[str, RoleBase]]: ... + async def _assign_roles_to_user( + self, roles: List[str], user_id: str, user_type: Optional[USER_TYPE] + ) -> None: ... + async def _revoke_roles_from_user( + self, roles: Union[str, List[str]], user_id: str, user_type: Optional[USER_TYPE] + ) -> None: ... + +class _UsersAsync(_UsersExecutor[ConnectionAsync]): + async def get_my_user(self) -> OwnUser: ... + @deprecated( + "This method is deprecated and will be removed in Q4 25.\n Please use `users.db.get_assigned_roles` and/or `users.oidc.get_assigned_roles` instead." + ) + async def get_assigned_roles(self, user_id: str) -> Dict[str, Role]: ... + @deprecated( + "This method is deprecated and will be removed in Q4 25.\n Please use `users.db.assign_roles` and/or `users.oidc.assign_roles` instead." + ) + async def assign_roles(self, *, user_id: str, role_names: Union[str, List[str]]) -> None: ... + @deprecated( + "This method is deprecated and will be removed in Q4 25.\n Please use `users.db.revoke_roles` and/or `users.oidc.revoke_roles` instead." + ) + async def revoke_roles(self, *, user_id: str, role_names: Union[str, List[str]]) -> None: ... -class _UsersOIDCAsync(_OIDCExecutor[ConnectionAsync]): +class _UsersOIDCAsync(_UsersOIDCExecutor[ConnectionAsync]): @overload async def get_assigned_roles( self, *, user_id: str, include_permissions: Literal[False] = False @@ -22,7 +54,7 @@ class _UsersOIDCAsync(_OIDCExecutor[ConnectionAsync]): async def assign_roles(self, *, user_id: str, role_names: Union[str, List[str]]) -> None: ... async def revoke_roles(self, *, user_id: str, role_names: Union[str, List[str]]) -> None: ... -class _UsersDBAsync(_DBExecutor[ConnectionAsync]): +class _UsersDBAsync(_UsersDBExecutor[ConnectionAsync]): @overload async def get_assigned_roles( self, *, user_id: str, include_permissions: Literal[False] = False @@ -40,27 +72,7 @@ class _UsersDBAsync(_DBExecutor[ConnectionAsync]): async def create(self, *, user_id: str) -> str: ... async def delete(self, *, user_id: str) -> bool: ... async def rotate_key(self, *, user_id: str) -> str: ... - async def deactivate(self, *, user_id: str, revoke_key: bool = False) -> bool: ... async def activate(self, *, user_id: str) -> bool: ... - async def get(self, *, user_id: str) -> UserDB: ... + async def deactivate(self, *, user_id: str, revoke_key: bool = False) -> bool: ... + async def get(self, *, user_id: str) -> Optional[UserDB]: ... async def list_all(self) -> List[UserDB]: ... - -class _UsersAsync(_DeprecatedExecutor[ConnectionAsync]): - async def get_my_user(self) -> OwnUser: ... - @deprecated( - """This method is deprecated and will be removed in Q4 25. - Please use `users.db.get_assigned_roles` and/or `users.oidc.get_assigned_roles` instead.""" - ) - async def get_assigned_roles(self, user_id: str) -> Dict[str, Role]: ... - @deprecated( - """This method is deprecated and will be removed in Q4 25. - Please use `users.db.assign_roles` and/or `users.oidc.assign_roles` instead.""" - ) - async def assign_roles(self, *, user_id: str, role_names: Union[str, List[str]]) -> None: ... - @deprecated( - """This method is deprecated and will be removed in Q4 25. - Please use `users.db.revoke_roles` and/or `users.oidc.revoke_roles` instead.""" - ) - async def revoke_roles(self, *, user_id: str, role_names: Union[str, List[str]]) -> None: ... - db: _UsersDBAsync - oidc: _UsersOIDCAsync diff --git a/weaviate/users/executor.py b/weaviate/users/executor.py index e1bd1e6f9..e2cedf847 100644 --- a/weaviate/users/executor.py +++ b/weaviate/users/executor.py @@ -1,4 +1,5 @@ -from typing import Any, Dict, Generic, List, Optional, Union, cast +from typing import Any, Dict, Generic, List, Literal, Optional, Union, cast, overload +from typing_extensions import deprecated from httpx import Response @@ -113,7 +114,7 @@ def resp(res: Response) -> None: ) -class _DeprecatedExecutor(Generic[ConnectionType], _BaseExecutor[ConnectionType]): +class _UsersExecutor(Generic[ConnectionType], _BaseExecutor[ConnectionType]): def get_my_user(self) -> executor.Result[OwnUser]: """Get the currently authenticated user. @@ -144,6 +145,10 @@ def resp(res: Response) -> OwnUser: status_codes=_ExpectedStatusCodes(ok_in=[200], error="Get own roles"), ) + @deprecated( + """This method is deprecated and will be removed in Q4 25. + Please use `users.db.get_assigned_roles` and/or `users.oidc.get_assigned_roles` instead.""" + ) def get_assigned_roles(self, user_id: str) -> executor.Result[Dict[str, Role]]: """Get the roles assigned to a user. @@ -156,6 +161,10 @@ def get_assigned_roles(self, user_id: str) -> executor.Result[Dict[str, Role]]: # cast here because the deprecated method is only used in the deprecated class and this type is known return cast(Dict[str, Role], self._get_roles_of_user_deprecated(user_id)) + @deprecated( + """This method is deprecated and will be removed in Q4 25. + Please use `users.db.assign_roles` and/or `users.oidc.assign_roles` instead.""" + ) def assign_roles( self, *, @@ -174,6 +183,10 @@ def assign_roles( None, ) + @deprecated( + """This method is deprecated and will be removed in Q4 25. + Please use `users.db.revoke_roles` and/or `users.oidc.revoke_roles` instead.""" + ) def revoke_roles( self, *, @@ -193,7 +206,25 @@ def revoke_roles( ) -class _OIDCExecutor(Generic[ConnectionType], _BaseExecutor[ConnectionType]): +class _UsersOIDCExecutor(Generic[ConnectionType], _BaseExecutor[ConnectionType]): + @overload + def get_assigned_roles( + self, *, user_id: str, include_permissions: Literal[False] = False + ) -> executor.Result[Dict[str, RoleBase]]: ... + + @overload + def get_assigned_roles( + self, *, user_id: str, include_permissions: Literal[True] + ) -> executor.Result[Dict[str, Role]]: ... + + @overload + def get_assigned_roles( + self, + *, + user_id: str, + include_permissions: bool = False, + ) -> executor.Result[Union[Dict[str, Role], Dict[str, RoleBase]]]: ... + def get_assigned_roles( self, *, @@ -251,7 +282,22 @@ def revoke_roles( ) -class _DBExecutor(Generic[ConnectionType], _BaseExecutor[ConnectionType]): +class _UsersDBExecutor(Generic[ConnectionType], _BaseExecutor[ConnectionType]): + @overload + def get_assigned_roles( + self, *, user_id: str, include_permissions: Literal[False] = False + ) -> executor.Result[Dict[str, RoleBase]]: ... + + @overload + def get_assigned_roles( + self, *, user_id: str, include_permissions: Literal[True] + ) -> executor.Result[Dict[str, Role]]: ... + + @overload + def get_assigned_roles( + self, *, user_id: str, include_permissions: bool = False + ) -> executor.Result[Union[Dict[str, Role], Dict[str, RoleBase]]]: ... + def get_assigned_roles( self, *, user_id: str, include_permissions: bool = False ) -> executor.Result[Union[Dict[str, Role], Dict[str, RoleBase]]]: diff --git a/weaviate/users/sync.py b/weaviate/users/sync.py index 360fac10c..590d00c7e 100644 --- a/weaviate/users/sync.py +++ b/weaviate/users/sync.py @@ -1,24 +1,24 @@ from weaviate.connect import executor from weaviate.connect.v4 import ConnectionSync from weaviate.users.executor import ( - _DeprecatedExecutor, - _DBExecutor, - _OIDCExecutor, + _UsersExecutor, + _UsersDBExecutor, + _UsersOIDCExecutor, ) @executor.wrap("sync") -class _UsersDB(_DBExecutor[ConnectionSync]): +class _UsersDB(_UsersDBExecutor[ConnectionSync]): pass @executor.wrap("sync") -class _UsersOIDC(_OIDCExecutor[ConnectionSync]): +class _UsersOIDC(_UsersOIDCExecutor[ConnectionSync]): pass @executor.wrap("sync") -class _Users(_DeprecatedExecutor[ConnectionSync]): +class _Users(_UsersExecutor[ConnectionSync]): def __init__(self, connection: ConnectionSync): super().__init__(connection) self.db = _UsersDB(connection) diff --git a/weaviate/users/sync.pyi b/weaviate/users/sync.pyi index f09d67c32..02b412a68 100644 --- a/weaviate/users/sync.pyi +++ b/weaviate/users/sync.pyi @@ -1,12 +1,44 @@ -from typing import Dict, List, Literal, Union, overload +from typing import Any, Dict, Generic, List, Literal, Optional, Union, cast, overload +from typing_extensions import deprecated +from httpx import Response +from weaviate.connect import executor +from weaviate.connect.v4 import _ExpectedStatusCodes, ConnectionType +from weaviate.rbac.models import Role, RoleBase, WeaviateDBUserRoleNames, UserTypes +from weaviate.users.users import USER_TYPE_DB, USER_TYPE_OIDC, USER_TYPE, UserDB, OwnUser +from weaviate.util import _decode_json_response_dict from weaviate.connect.v4 import ConnectionSync -from weaviate.users.executor import _DeprecatedExecutor, _DBExecutor, _OIDCExecutor -from weaviate.users.users import UserDB, OwnUser +from .executor import _BaseExecutor, _UsersExecutor, _UsersOIDCExecutor, _UsersDBExecutor -from weaviate.rbac.models import Role, RoleBase -from typing_extensions import deprecated +class _Base(_BaseExecutor[ConnectionSync]): + def _get_roles_of_user( + self, user_id: str, user_type: USER_TYPE, include_permissions: bool + ) -> Union[Dict[str, Role], Dict[str, RoleBase]]: ... + def _get_roles_of_user_deprecated( + self, user_id: str + ) -> Union[Dict[str, Role], Dict[str, RoleBase]]: ... + def _assign_roles_to_user( + self, roles: List[str], user_id: str, user_type: Optional[USER_TYPE] + ) -> None: ... + def _revoke_roles_from_user( + self, roles: Union[str, List[str]], user_id: str, user_type: Optional[USER_TYPE] + ) -> None: ... + +class _Users(_UsersExecutor[ConnectionSync]): + def get_my_user(self) -> OwnUser: ... + @deprecated( + "This method is deprecated and will be removed in Q4 25.\n Please use `users.db.get_assigned_roles` and/or `users.oidc.get_assigned_roles` instead." + ) + def get_assigned_roles(self, user_id: str) -> Dict[str, Role]: ... + @deprecated( + "This method is deprecated and will be removed in Q4 25.\n Please use `users.db.assign_roles` and/or `users.oidc.assign_roles` instead." + ) + def assign_roles(self, *, user_id: str, role_names: Union[str, List[str]]) -> None: ... + @deprecated( + "This method is deprecated and will be removed in Q4 25.\n Please use `users.db.revoke_roles` and/or `users.oidc.revoke_roles` instead." + ) + def revoke_roles(self, *, user_id: str, role_names: Union[str, List[str]]) -> None: ... -class _UsersOIDC(_OIDCExecutor[ConnectionSync]): +class _UsersOIDC(_UsersOIDCExecutor[ConnectionSync]): @overload def get_assigned_roles( self, *, user_id: str, include_permissions: Literal[False] = False @@ -22,7 +54,7 @@ class _UsersOIDC(_OIDCExecutor[ConnectionSync]): def assign_roles(self, *, user_id: str, role_names: Union[str, List[str]]) -> None: ... def revoke_roles(self, *, user_id: str, role_names: Union[str, List[str]]) -> None: ... -class _UsersDB(_DBExecutor[ConnectionSync]): +class _UsersDB(_UsersDBExecutor[ConnectionSync]): @overload def get_assigned_roles( self, *, user_id: str, include_permissions: Literal[False] = False @@ -40,27 +72,7 @@ class _UsersDB(_DBExecutor[ConnectionSync]): def create(self, *, user_id: str) -> str: ... def delete(self, *, user_id: str) -> bool: ... def rotate_key(self, *, user_id: str) -> str: ... - def deactivate(self, *, user_id: str, revoke_key: bool = False) -> bool: ... def activate(self, *, user_id: str) -> bool: ... - def get(self, *, user_id: str) -> UserDB: ... + def deactivate(self, *, user_id: str, revoke_key: bool = False) -> bool: ... + def get(self, *, user_id: str) -> Optional[UserDB]: ... def list_all(self) -> List[UserDB]: ... - -class _Users(_DeprecatedExecutor[ConnectionSync]): - def get_my_user(self) -> OwnUser: ... - @deprecated( - """This method is deprecated and will be removed in Q4 25. - Please use `users.db.get_assigned_roles` and/or `users.oidc.get_assigned_roles` instead.""" - ) - def get_assigned_roles(self, user_id: str) -> Dict[str, Role]: ... - @deprecated( - """This method is deprecated and will be removed in Q4 25. - Please use `users.db.assign_roles` and/or `users.oidc.assign_roles` instead.""" - ) - def assign_roles(self, *, user_id: str, role_names: Union[str, List[str]]) -> None: ... - @deprecated( - """This method is deprecated and will be removed in Q4 25. - Please use `users.db.revoke_roles` and/or `users.oidc.revoke_roles` instead.""" - ) - def revoke_roles(self, *, user_id: str, role_names: Union[str, List[str]]) -> None: ... - db: _UsersDB - oidc: _UsersOIDC