import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
import { type CallOptions, ChannelCredentials, Client, type ClientOptions, type ClientReadableStream, type ClientUnaryCall, type handleServerStreamingCall, type handleUnaryCall, Metadata, type ServiceError, type UntypedServiceImplementation } from "@grpc/grpc-js";
import { GetContentRequest, GetContentResponse, GetIntentsRequest, GetIntentsResponse, GetScoreLimitsRequest, GetScoreLimitsResponse, RemoveContentRequest, RemoveContentResponse, UpdateContentRequest, UpdateContentResponse } from "./intents.js";
import { AddProjectRequest, AddProjectResponse, EmbeddingModel, GetEmbeddingModelsRequest, GetProjectsRequest, Project, RemoveProjectRequest, RemoveProjectResponse, UpdateProjectRequest, UpdateProjectResponse } from "./projects.js";
export declare const protobufPackage = "aristech.nlp";
/** Request for list of functions that server provides */
export interface FunctionRequest {
}
/**
 * A function is a specific operation or information that can be performed on
 * incoming text. I.E. Classification, recasing etc.
 */
export interface FunctionMessage {
    /**
     * An unique ID for the function used (i.e. useful when using different
     * versions of a functions)
     */
    id: string;
    /** An self-explaining name of the function */
    name: string;
    /** A description of the function. */
    description: string;
    /** A list of arguments for the function */
    arguments: string[];
}
/** Process raw text input. */
export interface RunFunctionsRequest {
    /** Function to be requested */
    functions: FunctionMessage[];
    /** The input to be processed */
    input: string;
    /**
     * Arguments, if necessary. I.E. switchting between raw output and debug
     * output.
     */
    arguments: string[];
}
export interface RunFunctionsResponse {
    /** Processed text */
    output: string;
}
export declare const FunctionRequest: MessageFns<FunctionRequest>;
export declare const FunctionMessage: MessageFns<FunctionMessage>;
export declare const RunFunctionsRequest: MessageFns<RunFunctionsRequest>;
export declare const RunFunctionsResponse: MessageFns<RunFunctionsResponse>;
/** Interface exported by the server. */
export type NLPServerService = typeof NLPServerService;
export declare const NLPServerService: {
    /**
     * A simple RPC.
     * returns all available processing Models.
     */
    readonly getFunctions: {
        readonly path: "/aristech.nlp.NLPServer/GetFunctions";
        readonly requestStream: false;
        readonly responseStream: true;
        readonly requestSerialize: (value: FunctionRequest) => Buffer<ArrayBuffer>;
        readonly requestDeserialize: (value: Buffer) => FunctionRequest;
        readonly responseSerialize: (value: FunctionMessage) => Buffer<ArrayBuffer>;
        readonly responseDeserialize: (value: Buffer) => FunctionMessage;
    };
    /**
     * A server-to-client streaming method
     * Returns the processed text
     */
    readonly runFunctions: {
        readonly path: "/aristech.nlp.NLPServer/RunFunctions";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: RunFunctionsRequest) => Buffer<ArrayBuffer>;
        readonly requestDeserialize: (value: Buffer) => RunFunctionsRequest;
        readonly responseSerialize: (value: RunFunctionsResponse) => Buffer<ArrayBuffer>;
        readonly responseDeserialize: (value: Buffer) => RunFunctionsResponse;
    };
    /** Method to add content to a vector database. */
    readonly updateContent: {
        readonly path: "/aristech.nlp.NLPServer/UpdateContent";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: UpdateContentRequest) => Buffer<ArrayBuffer>;
        readonly requestDeserialize: (value: Buffer) => UpdateContentRequest;
        readonly responseSerialize: (value: UpdateContentResponse) => Buffer<ArrayBuffer>;
        readonly responseDeserialize: (value: Buffer) => UpdateContentResponse;
    };
    /** Method to remove content from a vector database. */
    readonly removeContent: {
        readonly path: "/aristech.nlp.NLPServer/RemoveContent";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: RemoveContentRequest) => Buffer<ArrayBuffer>;
        readonly requestDeserialize: (value: Buffer) => RemoveContentRequest;
        readonly responseSerialize: (value: RemoveContentResponse) => Buffer<ArrayBuffer>;
        readonly responseDeserialize: (value: Buffer) => RemoveContentResponse;
    };
    /** Method to get content from a vector database. */
    readonly getContent: {
        readonly path: "/aristech.nlp.NLPServer/GetContent";
        readonly requestStream: false;
        readonly responseStream: true;
        readonly requestSerialize: (value: GetContentRequest) => Buffer<ArrayBuffer>;
        readonly requestDeserialize: (value: Buffer) => GetContentRequest;
        readonly responseSerialize: (value: GetContentResponse) => Buffer<ArrayBuffer>;
        readonly responseDeserialize: (value: Buffer) => GetContentResponse;
    };
    /** Method to initialize a project */
    readonly addProject: {
        readonly path: "/aristech.nlp.NLPServer/AddProject";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: AddProjectRequest) => Buffer<ArrayBuffer>;
        readonly requestDeserialize: (value: Buffer) => AddProjectRequest;
        readonly responseSerialize: (value: AddProjectResponse) => Buffer<ArrayBuffer>;
        readonly responseDeserialize: (value: Buffer) => AddProjectResponse;
    };
    /** Method to remove Project */
    readonly removeProject: {
        readonly path: "/aristech.nlp.NLPServer/RemoveProject";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: RemoveProjectRequest) => Buffer<ArrayBuffer>;
        readonly requestDeserialize: (value: Buffer) => RemoveProjectRequest;
        readonly responseSerialize: (value: RemoveProjectResponse) => Buffer<ArrayBuffer>;
        readonly responseDeserialize: (value: Buffer) => RemoveProjectResponse;
    };
    /** update the settings of a project */
    readonly updateProject: {
        readonly path: "/aristech.nlp.NLPServer/UpdateProject";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: UpdateProjectRequest) => Buffer<ArrayBuffer>;
        readonly requestDeserialize: (value: Buffer) => UpdateProjectRequest;
        readonly responseSerialize: (value: UpdateProjectResponse) => Buffer<ArrayBuffer>;
        readonly responseDeserialize: (value: Buffer) => UpdateProjectResponse;
    };
    /** Method to get projects from a vector database */
    readonly getProjects: {
        readonly path: "/aristech.nlp.NLPServer/GetProjects";
        readonly requestStream: false;
        readonly responseStream: true;
        readonly requestSerialize: (value: GetProjectsRequest) => Buffer<ArrayBuffer>;
        readonly requestDeserialize: (value: Buffer) => GetProjectsRequest;
        readonly responseSerialize: (value: Project) => Buffer<ArrayBuffer>;
        readonly responseDeserialize: (value: Buffer) => Project;
    };
    /** Method to get intents from a project */
    readonly getIntents: {
        readonly path: "/aristech.nlp.NLPServer/GetIntents";
        readonly requestStream: false;
        readonly responseStream: true;
        readonly requestSerialize: (value: GetIntentsRequest) => Buffer<ArrayBuffer>;
        readonly requestDeserialize: (value: Buffer) => GetIntentsRequest;
        readonly responseSerialize: (value: GetIntentsResponse) => Buffer<ArrayBuffer>;
        readonly responseDeserialize: (value: Buffer) => GetIntentsResponse;
    };
    /** Method to get score limits for a project */
    readonly getScoreLimits: {
        readonly path: "/aristech.nlp.NLPServer/GetScoreLimits";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: GetScoreLimitsRequest) => Buffer<ArrayBuffer>;
        readonly requestDeserialize: (value: Buffer) => GetScoreLimitsRequest;
        readonly responseSerialize: (value: GetScoreLimitsResponse) => Buffer<ArrayBuffer>;
        readonly responseDeserialize: (value: Buffer) => GetScoreLimitsResponse;
    };
    /** get the available embedding models to be used for similarity search */
    readonly getEmbeddingModels: {
        readonly path: "/aristech.nlp.NLPServer/GetEmbeddingModels";
        readonly requestStream: false;
        readonly responseStream: true;
        readonly requestSerialize: (value: GetEmbeddingModelsRequest) => Buffer<ArrayBuffer>;
        readonly requestDeserialize: (value: Buffer) => GetEmbeddingModelsRequest;
        readonly responseSerialize: (value: EmbeddingModel) => Buffer<ArrayBuffer>;
        readonly responseDeserialize: (value: Buffer) => EmbeddingModel;
    };
};
export interface NLPServerServer extends UntypedServiceImplementation {
    /**
     * A simple RPC.
     * returns all available processing Models.
     */
    getFunctions: handleServerStreamingCall<FunctionRequest, FunctionMessage>;
    /**
     * A server-to-client streaming method
     * Returns the processed text
     */
    runFunctions: handleUnaryCall<RunFunctionsRequest, RunFunctionsResponse>;
    /** Method to add content to a vector database. */
    updateContent: handleUnaryCall<UpdateContentRequest, UpdateContentResponse>;
    /** Method to remove content from a vector database. */
    removeContent: handleUnaryCall<RemoveContentRequest, RemoveContentResponse>;
    /** Method to get content from a vector database. */
    getContent: handleServerStreamingCall<GetContentRequest, GetContentResponse>;
    /** Method to initialize a project */
    addProject: handleUnaryCall<AddProjectRequest, AddProjectResponse>;
    /** Method to remove Project */
    removeProject: handleUnaryCall<RemoveProjectRequest, RemoveProjectResponse>;
    /** update the settings of a project */
    updateProject: handleUnaryCall<UpdateProjectRequest, UpdateProjectResponse>;
    /** Method to get projects from a vector database */
    getProjects: handleServerStreamingCall<GetProjectsRequest, Project>;
    /** Method to get intents from a project */
    getIntents: handleServerStreamingCall<GetIntentsRequest, GetIntentsResponse>;
    /** Method to get score limits for a project */
    getScoreLimits: handleUnaryCall<GetScoreLimitsRequest, GetScoreLimitsResponse>;
    /** get the available embedding models to be used for similarity search */
    getEmbeddingModels: handleServerStreamingCall<GetEmbeddingModelsRequest, EmbeddingModel>;
}
export interface NLPServerClient extends Client {
    /**
     * A simple RPC.
     * returns all available processing Models.
     */
    getFunctions(request: FunctionRequest, options?: Partial<CallOptions>): ClientReadableStream<FunctionMessage>;
    getFunctions(request: FunctionRequest, metadata?: Metadata, options?: Partial<CallOptions>): ClientReadableStream<FunctionMessage>;
    /**
     * A server-to-client streaming method
     * Returns the processed text
     */
    runFunctions(request: RunFunctionsRequest, callback: (error: ServiceError | null, response: RunFunctionsResponse) => void): ClientUnaryCall;
    runFunctions(request: RunFunctionsRequest, metadata: Metadata, callback: (error: ServiceError | null, response: RunFunctionsResponse) => void): ClientUnaryCall;
    runFunctions(request: RunFunctionsRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: RunFunctionsResponse) => void): ClientUnaryCall;
    /** Method to add content to a vector database. */
    updateContent(request: UpdateContentRequest, callback: (error: ServiceError | null, response: UpdateContentResponse) => void): ClientUnaryCall;
    updateContent(request: UpdateContentRequest, metadata: Metadata, callback: (error: ServiceError | null, response: UpdateContentResponse) => void): ClientUnaryCall;
    updateContent(request: UpdateContentRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: UpdateContentResponse) => void): ClientUnaryCall;
    /** Method to remove content from a vector database. */
    removeContent(request: RemoveContentRequest, callback: (error: ServiceError | null, response: RemoveContentResponse) => void): ClientUnaryCall;
    removeContent(request: RemoveContentRequest, metadata: Metadata, callback: (error: ServiceError | null, response: RemoveContentResponse) => void): ClientUnaryCall;
    removeContent(request: RemoveContentRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: RemoveContentResponse) => void): ClientUnaryCall;
    /** Method to get content from a vector database. */
    getContent(request: GetContentRequest, options?: Partial<CallOptions>): ClientReadableStream<GetContentResponse>;
    getContent(request: GetContentRequest, metadata?: Metadata, options?: Partial<CallOptions>): ClientReadableStream<GetContentResponse>;
    /** Method to initialize a project */
    addProject(request: AddProjectRequest, callback: (error: ServiceError | null, response: AddProjectResponse) => void): ClientUnaryCall;
    addProject(request: AddProjectRequest, metadata: Metadata, callback: (error: ServiceError | null, response: AddProjectResponse) => void): ClientUnaryCall;
    addProject(request: AddProjectRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: AddProjectResponse) => void): ClientUnaryCall;
    /** Method to remove Project */
    removeProject(request: RemoveProjectRequest, callback: (error: ServiceError | null, response: RemoveProjectResponse) => void): ClientUnaryCall;
    removeProject(request: RemoveProjectRequest, metadata: Metadata, callback: (error: ServiceError | null, response: RemoveProjectResponse) => void): ClientUnaryCall;
    removeProject(request: RemoveProjectRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: RemoveProjectResponse) => void): ClientUnaryCall;
    /** update the settings of a project */
    updateProject(request: UpdateProjectRequest, callback: (error: ServiceError | null, response: UpdateProjectResponse) => void): ClientUnaryCall;
    updateProject(request: UpdateProjectRequest, metadata: Metadata, callback: (error: ServiceError | null, response: UpdateProjectResponse) => void): ClientUnaryCall;
    updateProject(request: UpdateProjectRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: UpdateProjectResponse) => void): ClientUnaryCall;
    /** Method to get projects from a vector database */
    getProjects(request: GetProjectsRequest, options?: Partial<CallOptions>): ClientReadableStream<Project>;
    getProjects(request: GetProjectsRequest, metadata?: Metadata, options?: Partial<CallOptions>): ClientReadableStream<Project>;
    /** Method to get intents from a project */
    getIntents(request: GetIntentsRequest, options?: Partial<CallOptions>): ClientReadableStream<GetIntentsResponse>;
    getIntents(request: GetIntentsRequest, metadata?: Metadata, options?: Partial<CallOptions>): ClientReadableStream<GetIntentsResponse>;
    /** Method to get score limits for a project */
    getScoreLimits(request: GetScoreLimitsRequest, callback: (error: ServiceError | null, response: GetScoreLimitsResponse) => void): ClientUnaryCall;
    getScoreLimits(request: GetScoreLimitsRequest, metadata: Metadata, callback: (error: ServiceError | null, response: GetScoreLimitsResponse) => void): ClientUnaryCall;
    getScoreLimits(request: GetScoreLimitsRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: GetScoreLimitsResponse) => void): ClientUnaryCall;
    /** get the available embedding models to be used for similarity search */
    getEmbeddingModels(request: GetEmbeddingModelsRequest, options?: Partial<CallOptions>): ClientReadableStream<EmbeddingModel>;
    getEmbeddingModels(request: GetEmbeddingModelsRequest, metadata?: Metadata, options?: Partial<CallOptions>): ClientReadableStream<EmbeddingModel>;
}
export declare const NLPServerClient: {
    new (address: string, credentials: ChannelCredentials, options?: Partial<ClientOptions>): NLPServerClient;
    service: typeof NLPServerService;
    serviceName: string;
};
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
export type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
    [K in keyof T]?: DeepPartial<T[K]>;
} : Partial<T>;
type KeysOfUnion<T> = T extends T ? keyof T : never;
export type Exact<P, I extends P> = P extends Builtin ? P : P & {
    [K in keyof P]: Exact<P[K], I[K]>;
} & {
    [K in Exclude<keyof I, KeysOfUnion<P>>]: never;
};
export interface MessageFns<T> {
    encode(message: T, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): T;
    fromJSON(object: any): T;
    toJSON(message: T): unknown;
    create<I extends Exact<DeepPartial<T>, I>>(base?: I): T;
    fromPartial<I extends Exact<DeepPartial<T>, I>>(object: I): T;
}
export {};
