lib/turbopuffer/resources/namespaces.rb



# frozen_string_literal: true

module Turbopuffer
  module Resources
    class Namespaces
      # Delete namespace.
      #
      # @overload delete_all(namespace: nil, request_options: {})
      #
      # @param namespace [String] The name of the namespace.
      #
      # @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
      #
      # @return [Turbopuffer::Models::NamespaceDeleteAllResponse]
      #
      # @see Turbopuffer::Models::NamespaceDeleteAllParams
      def delete_all(params = {})
        parsed, options = Turbopuffer::NamespaceDeleteAllParams.dump_request(params)
        namespace =
          parsed.delete(:namespace) do
            @client.default_namespace
          end
        @client.request(
          method: :delete,
          path: ["v2/namespaces/%1$s", namespace],
          model: Turbopuffer::Models::NamespaceDeleteAllResponse,
          options: options
        )
      end

      # Warm the cache for a namespace.
      #
      # @overload hint_cache_warm(namespace: nil, request_options: {})
      #
      # @param namespace [String] The name of the namespace.
      #
      # @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
      #
      # @return [Turbopuffer::Models::NamespaceHintCacheWarmResponse]
      #
      # @see Turbopuffer::Models::NamespaceHintCacheWarmParams
      def hint_cache_warm(params = {})
        parsed, options = Turbopuffer::NamespaceHintCacheWarmParams.dump_request(params)
        namespace =
          parsed.delete(:namespace) do
            @client.default_namespace
          end
        @client.request(
          method: :get,
          path: ["v1/namespaces/%1$s/hint_cache_warm", namespace],
          model: Turbopuffer::Models::NamespaceHintCacheWarmResponse,
          options: options
        )
      end

      # Get metadata about a namespace.
      #
      # @overload metadata(namespace: nil, request_options: {})
      #
      # @param namespace [String] The name of the namespace.
      #
      # @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
      #
      # @return [Turbopuffer::Models::NamespaceMetadata]
      #
      # @see Turbopuffer::Models::NamespaceMetadataParams
      def metadata(params = {})
        parsed, options = Turbopuffer::NamespaceMetadataParams.dump_request(params)
        namespace =
          parsed.delete(:namespace) do
            @client.default_namespace
          end
        @client.request(
          method: :get,
          path: ["v1/namespaces/%1$s/metadata", namespace],
          model: Turbopuffer::NamespaceMetadata,
          options: options
        )
      end

      # Issue multiple concurrent queries filter or search documents.
      #
      # @overload multi_query(queries:, namespace: nil, consistency: nil, vector_encoding: nil, request_options: {})
      #
      # @param queries [Array<Turbopuffer::Models::Query>] Body param:
      #
      # @param namespace [String] Path param: The name of the namespace.
      #
      # @param consistency [Turbopuffer::Models::NamespaceMultiQueryParams::Consistency] Body param: The consistency level for a query.
      #
      # @param vector_encoding [Symbol, Turbopuffer::Models::VectorEncoding] Body param: The encoding to use for vectors in the response.
      #
      # @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
      #
      # @return [Turbopuffer::Models::NamespaceMultiQueryResponse]
      #
      # @see Turbopuffer::Models::NamespaceMultiQueryParams
      def multi_query(params)
        parsed, options = Turbopuffer::NamespaceMultiQueryParams.dump_request(params)
        namespace =
          parsed.delete(:namespace) do
            @client.default_namespace
          end
        @client.request(
          method: :post,
          path: ["v2/namespaces/%1$s/query?stainless_overload=multiQuery", namespace],
          body: parsed,
          model: Turbopuffer::Models::NamespaceMultiQueryResponse,
          options: options
        )
      end

      # Some parameter documentations has been truncated, see
      # {Turbopuffer::Models::NamespaceQueryParams} for more details.
      #
      # Query, filter, full-text search and vector search documents.
      #
      # @overload query(namespace: nil, aggregate_by: nil, consistency: nil, distance_metric: nil, filters: nil, include_attributes: nil, rank_by: nil, top_k: nil, vector_encoding: nil, request_options: {})
      #
      # @param namespace [String] Path param: The name of the namespace.
      #
      # @param aggregate_by [Hash{Symbol=>Object}] Body param: Aggregations to compute over all documents in the namespace that mat
      #
      # @param consistency [Turbopuffer::Models::NamespaceQueryParams::Consistency] Body param: The consistency level for a query.
      #
      # @param distance_metric [Symbol, Turbopuffer::Models::DistanceMetric] Body param: A function used to calculate vector similarity.
      #
      # @param filters [Object] Body param: Exact filters for attributes to refine search results for. Think of
      #
      # @param include_attributes [Boolean, Array<String>] Body param: Whether to include attributes in the response.
      #
      # @param rank_by [Object] Body param: How to rank the documents in the namespace.
      #
      # @param top_k [Integer] Body param: The number of results to return.
      #
      # @param vector_encoding [Symbol, Turbopuffer::Models::VectorEncoding] Body param: The encoding to use for vectors in the response.
      #
      # @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
      #
      # @return [Turbopuffer::Models::NamespaceQueryResponse]
      #
      # @see Turbopuffer::Models::NamespaceQueryParams
      def query(params = {})
        parsed, options = Turbopuffer::NamespaceQueryParams.dump_request(params)
        namespace =
          parsed.delete(:namespace) do
            @client.default_namespace
          end
        @client.request(
          method: :post,
          path: ["v2/namespaces/%1$s/query", namespace],
          body: parsed,
          model: Turbopuffer::Models::NamespaceQueryResponse,
          options: options
        )
      end

      # Some parameter documentations has been truncated, see
      # {Turbopuffer::Models::NamespaceRecallParams} for more details.
      #
      # Evaluate recall.
      #
      # @overload recall(namespace: nil, filters: nil, num: nil, queries: nil, top_k: nil, request_options: {})
      #
      # @param namespace [String] Path param: The name of the namespace.
      #
      # @param filters [Object] Body param: Filter by attributes. Same syntax as the query endpoint.
      #
      # @param num [Integer] Body param: The number of searches to run.
      #
      # @param queries [Array<Float>] Body param: Use specific query vectors for the measurement. If omitted, sampled
      #
      # @param top_k [Integer] Body param: Search for `top_k` nearest neighbors.
      #
      # @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
      #
      # @return [Turbopuffer::Models::NamespaceRecallResponse]
      #
      # @see Turbopuffer::Models::NamespaceRecallParams
      def recall(params = {})
        parsed, options = Turbopuffer::NamespaceRecallParams.dump_request(params)
        namespace =
          parsed.delete(:namespace) do
            @client.default_namespace
          end
        @client.request(
          method: :post,
          path: ["v1/namespaces/%1$s/_debug/recall", namespace],
          body: parsed,
          model: Turbopuffer::Models::NamespaceRecallResponse,
          options: options
        )
      end

      # Get namespace schema.
      #
      # @overload schema(namespace: nil, request_options: {})
      #
      # @param namespace [String] The name of the namespace.
      #
      # @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
      #
      # @return [Hash{Symbol=>Turbopuffer::Models::AttributeSchemaConfig}]
      #
      # @see Turbopuffer::Models::NamespaceSchemaParams
      def schema(params = {})
        parsed, options = Turbopuffer::NamespaceSchemaParams.dump_request(params)
        namespace =
          parsed.delete(:namespace) do
            @client.default_namespace
          end
        @client.request(
          method: :get,
          path: ["v1/namespaces/%1$s/schema", namespace],
          model: Turbopuffer::Internal::Type::HashOf[Turbopuffer::AttributeSchemaConfig],
          options: options
        )
      end

      # Update namespace schema.
      #
      # @overload update_schema(namespace: nil, schema: nil, request_options: {})
      #
      # @param namespace [String] Path param: The name of the namespace.
      #
      # @param schema [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig}] Body param: The desired schema for the namespace.
      #
      # @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
      #
      # @return [Hash{Symbol=>Turbopuffer::Models::AttributeSchemaConfig}]
      #
      # @see Turbopuffer::Models::NamespaceUpdateSchemaParams
      def update_schema(params = {})
        parsed, options = Turbopuffer::NamespaceUpdateSchemaParams.dump_request(params)
        namespace =
          parsed.delete(:namespace) do
            @client.default_namespace
          end
        @client.request(
          method: :post,
          path: ["v1/namespaces/%1$s/schema", namespace],
          body: parsed[:schema],
          model: Turbopuffer::Internal::Type::HashOf[Turbopuffer::AttributeSchemaConfig],
          options: options
        )
      end

      # Some parameter documentations has been truncated, see
      # {Turbopuffer::Models::NamespaceWriteParams} for more details.
      #
      # Create, update, or delete documents.
      #
      # @overload write(namespace: nil, copy_from_namespace: nil, delete_by_filter: nil, delete_condition: nil, deletes: nil, distance_metric: nil, encryption: nil, patch_columns: nil, patch_condition: nil, patch_rows: nil, schema: nil, upsert_columns: nil, upsert_condition: nil, upsert_rows: nil, request_options: {})
      #
      # @param namespace [String] Path param: The name of the namespace.
      #
      # @param copy_from_namespace [String] Body param: The namespace to copy documents from.
      #
      # @param delete_by_filter [Object] Body param: The filter specifying which documents to delete.
      #
      # @param delete_condition [Object] Body param: A condition evaluated against the current value of each document tar
      #
      # @param deletes [Array<String, Integer>] Body param:
      #
      # @param distance_metric [Symbol, Turbopuffer::Models::DistanceMetric] Body param: A function used to calculate vector similarity.
      #
      # @param encryption [Turbopuffer::Models::NamespaceWriteParams::Encryption] Body param: The encryption configuration for a namespace.
      #
      # @param patch_columns [Turbopuffer::Models::Columns] Body param: A list of documents in columnar format. Each key is a column name, m
      #
      # @param patch_condition [Object] Body param: A condition evaluated against the current value of each document tar
      #
      # @param patch_rows [Array<Turbopuffer::Models::Row>] Body param:
      #
      # @param schema [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig}] Body param: The schema of the attributes attached to the documents.
      #
      # @param upsert_columns [Turbopuffer::Models::Columns] Body param: A list of documents in columnar format. Each key is a column name, m
      #
      # @param upsert_condition [Object] Body param: A condition evaluated against the current value of each document tar
      #
      # @param upsert_rows [Array<Turbopuffer::Models::Row>] Body param:
      #
      # @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
      #
      # @return [Turbopuffer::Models::NamespaceWriteResponse]
      #
      # @see Turbopuffer::Models::NamespaceWriteParams
      def write(params = {})
        parsed, options = Turbopuffer::NamespaceWriteParams.dump_request(params)
        namespace =
          parsed.delete(:namespace) do
            @client.default_namespace
          end
        @client.request(
          method: :post,
          path: ["v2/namespaces/%1$s", namespace],
          body: parsed,
          model: Turbopuffer::Models::NamespaceWriteResponse,
          options: options
        )
      end

      # @api private
      #
      # @param client [Turbopuffer::Client]
      def initialize(client:)
        @client = client
      end
    end
  end
end