import type { ProvidersConfig } from '../types/config.js'; import type { LifecycleConfig } from '../types/lifecycle.js'; import type { EmbeddingConfig, EmbeddingRequest, EmbeddingResponse, EmbeddingsProvider } from '../types/embeddings.js'; import type { AuditLogger } from '../ops/audit-logger.js'; import type { MetricsCollector } from '../ops/metrics.js'; import type { RateLimiter } from '../ops/rate-limiter.js'; /** What a client shares with its embedding family. Every field is optional. */ export interface EmbeddingManagerRuntime { /** Where metrics go. */ metrics?: MetricsCollector; /** Where audit events go. */ auditLogger?: AuditLogger; /** The rate limiter every family shares. */ rateLimiter?: RateLimiter; /** The client's authorization, budget, and hooks, shared with every other family. */ lifecycle?: LifecycleConfig; /** Provider credentials used to auto-register adapters. */ providers?: ProvidersConfig; } /** * Provider-neutral embeddings with routing, caching, batching, budget, retry, audit, and metrics. * * The operation family behind `ai.embed()`. It is usable standalone, and when it is reached through * `NexusAI` it runs through that client's lifecycle, so embedding spend appears alongside completion * spend instead of being invisible. The routing, batching, and provider code loads on the first * embedding, so a client that never embeds never imports it. */ export declare class EmbeddingManager { private readonly config; private readonly runtime; private readonly providers; private engine?; constructor(config?: EmbeddingConfig, runtime?: EmbeddingManagerRuntime); /** Registers a provider under a name. Returns the manager, for chaining. */ registerEmbeddingProvider(name: string, provider: EmbeddingsProvider): this; /** Whether a provider is registered, or will be built from the client's provider credentials. */ hasEmbeddingProvider(name: string): boolean; /** Every registered provider's name, then those the client's credentials will build. */ listEmbeddingProviders(): string[]; /** * Embeds one text or a batch. * * The single-string form returns one vector at `vectors[0]`; a batch returns them in input order * regardless of how many provider calls the split required. */ embed(request: EmbeddingRequest): Promise; /** Embeds one text and returns the vector alone, for callers that never need the metadata. */ embedOne(text: string, options?: Omit): Promise; private automaticNames; private load; }