import * as genkit from 'genkit';
import { z, Genkit } from 'genkit';
import { EmbedderArgument } from 'genkit/embedder';
import { GenkitPlugin } from 'genkit/plugin';
import { SomeDoc, Filter } from '@datastax/astra-db-ts';

type AstraDBClientOptions = {
    applicationToken: string;
    apiEndpoint: string;
    keyspace?: string;
};
declare const astraDBRetrieverRef: <Schema extends SomeDoc>(params: {
    collectionName: string;
    displayName?: string;
}) => genkit.RetrieverReference<z.ZodObject<z.objectUtil.extendShape<{
    k: z.ZodOptional<z.ZodNumber>;
}, {
    filter: z.ZodOptional<z.ZodType<Filter<Schema>, z.ZodTypeDef, Filter<Schema>>>;
}>, "strip", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<z.objectUtil.extendShape<{
    k: z.ZodOptional<z.ZodNumber>;
}, {
    filter: z.ZodOptional<z.ZodType<Filter<Schema>, z.ZodTypeDef, Filter<Schema>>>;
}>>, any> extends infer T ? { [k in keyof T]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<z.objectUtil.extendShape<{
    k: z.ZodOptional<z.ZodNumber>;
}, {
    filter: z.ZodOptional<z.ZodType<Filter<Schema>, z.ZodTypeDef, Filter<Schema>>>;
}>>, any>[k]; } : never, z.baseObjectInputType<z.objectUtil.extendShape<{
    k: z.ZodOptional<z.ZodNumber>;
}, {
    filter: z.ZodOptional<z.ZodType<Filter<Schema>, z.ZodTypeDef, Filter<Schema>>>;
}>> extends infer T_1 ? { [k_1 in keyof T_1]: z.baseObjectInputType<z.objectUtil.extendShape<{
    k: z.ZodOptional<z.ZodNumber>;
}, {
    filter: z.ZodOptional<z.ZodType<Filter<Schema>, z.ZodTypeDef, Filter<Schema>>>;
}>>[k_1]; } : never>>;
declare const astraDBIndexerRef: (params: {
    collectionName: string;
    displayName?: string;
}) => genkit.IndexerReference<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
declare function astraDB<EmbedderCustomOptions extends z.ZodTypeAny>(params: {
    clientParams?: AstraDBClientOptions;
    collectionName: string;
    embedder?: EmbedderArgument<EmbedderCustomOptions>;
    embedderOptions?: z.infer<EmbedderCustomOptions>;
}[]): GenkitPlugin;
declare function configureAstraDBRetriever<Schema extends SomeDoc, EmbedderCustomOptions extends z.ZodTypeAny>(ai: Genkit, params: {
    clientParams?: AstraDBClientOptions;
    collectionName: string;
    embedder?: EmbedderArgument<EmbedderCustomOptions>;
    embedderOptions?: z.infer<EmbedderCustomOptions>;
}): genkit.RetrieverAction<z.ZodOptional<z.ZodObject<z.objectUtil.extendShape<{
    k: z.ZodOptional<z.ZodNumber>;
}, {
    filter: z.ZodOptional<z.ZodType<Filter<Schema>, z.ZodTypeDef, Filter<Schema>>>;
}>, "strip", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<z.objectUtil.extendShape<{
    k: z.ZodOptional<z.ZodNumber>;
}, {
    filter: z.ZodOptional<z.ZodType<Filter<Schema>, z.ZodTypeDef, Filter<Schema>>>;
}>>, any> extends infer T ? { [k in keyof T]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<z.objectUtil.extendShape<{
    k: z.ZodOptional<z.ZodNumber>;
}, {
    filter: z.ZodOptional<z.ZodType<Filter<Schema>, z.ZodTypeDef, Filter<Schema>>>;
}>>, any>[k]; } : never, z.baseObjectInputType<z.objectUtil.extendShape<{
    k: z.ZodOptional<z.ZodNumber>;
}, {
    filter: z.ZodOptional<z.ZodType<Filter<Schema>, z.ZodTypeDef, Filter<Schema>>>;
}>> extends infer T_1 ? { [k_1 in keyof T_1]: z.baseObjectInputType<z.objectUtil.extendShape<{
    k: z.ZodOptional<z.ZodNumber>;
}, {
    filter: z.ZodOptional<z.ZodType<Filter<Schema>, z.ZodTypeDef, Filter<Schema>>>;
}>>[k_1]; } : never>>>;
declare function configureAstraDBIndexer<EmbedderCustomOptions extends z.ZodTypeAny>(ai: Genkit, params: {
    clientParams?: AstraDBClientOptions;
    collectionName: string;
    embedder?: EmbedderArgument<EmbedderCustomOptions>;
    embedderOptions?: z.infer<EmbedderCustomOptions>;
}): genkit.IndexerAction<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;

export { astraDB, astraDBIndexerRef, astraDBRetrieverRef, configureAstraDBIndexer, configureAstraDBRetriever };
