UNPKG

@mastra/core

Version:

Mastra is a framework for building AI-powered applications and agents with a modern TypeScript stack.

89 lines 3.63 kB
/** * Base class for model gateway providers * Gateways fetch provider configurations and build URLs for model access */ import type { LanguageModelV2 } from '@ai-sdk/provider-v5'; import type { LanguageModelV3 } from '@ai-sdk/provider-v6'; import type { StreamTransport } from '../../../stream/types.js'; import type { OpenAITransport, ResponsesWebSocketOptions } from '../provider-options.js'; export interface ProviderConfig { url?: string; apiKeyHeader?: string; apiKeyEnvVar: string | string[]; name: string; models: string[]; docUrl?: string; gateway: string; npm?: string; } /** * Union type for language models that can be returned by gateways. * Supports both AI SDK v5 (LanguageModelV2) and v6 (LanguageModelV3). */ export type GatewayLanguageModel = LanguageModelV2 | LanguageModelV3; export type GatewayStreamTransportHandle = Pick<StreamTransport, 'type' | 'close'>; /** @internal Stream transport handle attached by gateways that own custom streaming transports. */ export declare const MASTRA_GATEWAY_STREAM_TRANSPORT: unique symbol; export type GatewayLanguageModelWithStreamTransport = GatewayLanguageModel & { [MASTRA_GATEWAY_STREAM_TRANSPORT]?: GatewayStreamTransportHandle; }; export declare abstract class MastraModelGateway { /** * Unique identifier for the gateway * This ID is used as the prefix for all providers from this gateway (e.g., "netlify/anthropic") * Exception: models.dev is a provider registry and doesn't use a prefix */ abstract readonly id: string; /** * Name of the gateway provider */ abstract readonly name: string; /** * Get the gateway ID */ getId(): string; /** * Whether this gateway should be enabled for the current runtime. * Disabled gateways are skipped when syncing and filtered out when reading cached registry data. */ shouldEnable(): boolean; /** * Fetch provider configurations from the gateway * Should return providers in the standard format */ abstract fetchProviders(): Promise<Record<string, ProviderConfig>>; /** * Build the URL for a specific model/provider combination * @param modelId Full model ID (e.g., "openai/gpt-4o" or "netlify/openai/gpt-4o") * @param envVars Environment variables available * @returns URL string if this gateway can handle the model, false otherwise */ abstract buildUrl(modelId: string, envVars: Record<string, string>): string | undefined | Promise<string | undefined>; abstract getApiKey(modelId: string): Promise<string>; /** * Resolve a language model from the gateway. * Supports returning either LanguageModelV2 (AI SDK v5) or LanguageModelV3 (AI SDK v6). */ abstract resolveLanguageModel(args: { modelId: string; providerId: string; apiKey: string; headers?: Record<string, string>; transport?: OpenAITransport; responsesWebSocket?: ResponsesWebSocketOptions; }): Promise<GatewayLanguageModel> | GatewayLanguageModel; /** * Custom serialization for tracing/observability spans. * Gateways typically hold credentials (apiKey, OAuth tokens, customFetch * closures that capture secrets). The base implementation exposes only * the gateway identity so subclasses are safe by default. * * Subclasses that want to expose additional non-sensitive fields * (e.g. baseUrl when it's a public URL) can override this method. */ serializeForSpan(): { id: string; name: string; }; } //# sourceMappingURL=base.d.ts.map