UNPKG

ai-sdk-provider-gemini-cli

Version:

Community AI SDK provider for Google Gemini using the official CLI/SDK

140 lines (135 loc) 4.62 kB
import { LanguageModelV1, LanguageModelV1CallOptions, LanguageModelV1FunctionToolCall, LanguageModelV1FinishReason, LanguageModelV1CallWarning, LanguageModelV1StreamPart, ProviderV1 } from '@ai-sdk/provider'; export { LanguageModelV1, LanguageModelV1CallOptions, LanguageModelV1CallWarning, LanguageModelV1FinishReason, LanguageModelV1FunctionTool, LanguageModelV1FunctionToolCall, LanguageModelV1Message, LanguageModelV1Prompt, LanguageModelV1ProviderMetadata, LanguageModelV1StreamPart } from '@ai-sdk/provider'; import { GoogleAuth } from 'google-auth-library'; /** * Provider options for configuring Gemini authentication and behavior */ type GeminiProviderOptions = GeminiApiKeyAuth | VertexAIAuth | OAuthAuth | GoogleAuthLibraryAuth | { authType?: undefined; }; /** * Gemini API key authentication (supports both AI SDK standard and Gemini-specific auth types) */ interface GeminiApiKeyAuth { authType: 'api-key' | 'gemini-api-key'; apiKey?: string; } /** * Vertex AI authentication */ interface VertexAIAuth { authType: 'vertex-ai'; vertexAI: { projectId: string; location: string; apiKey?: string; }; } /** * OAuth authentication (personal or service account) */ interface OAuthAuth { authType: 'oauth' | 'oauth-personal'; cacheDir?: string; } /** * Google Auth Library authentication */ interface GoogleAuthLibraryAuth { authType: 'google-auth-library'; googleAuth: GoogleAuth; } interface GeminiLanguageModelOptions { modelId: string; providerOptions: GeminiProviderOptions; settings?: Record<string, unknown>; } declare class GeminiLanguageModel implements LanguageModelV1 { readonly specificationVersion: "v1"; readonly provider = "gemini-cli-core"; readonly defaultObjectGenerationMode: "json"; readonly supportsImageUrls = false; readonly supportsStructuredOutputs = true; private contentGenerator?; private config?; private initPromise?; readonly modelId: string; readonly settings?: Record<string, unknown>; private providerOptions; constructor(options: GeminiLanguageModelOptions); private ensureInitialized; private initialize; /** * Non-streaming generation method */ doGenerate(options: LanguageModelV1CallOptions): Promise<{ text?: string; toolCalls?: LanguageModelV1FunctionToolCall[]; finishReason: LanguageModelV1FinishReason; usage: { promptTokens: number; completionTokens: number; }; rawCall: { rawPrompt: unknown; rawSettings: Record<string, unknown>; }; rawResponse?: { headers?: Record<string, string>; body?: unknown; }; request?: { body?: string; }; response?: { id?: string; timestamp?: Date; modelId?: string; }; warnings?: LanguageModelV1CallWarning[]; }>; /** * Streaming generation method */ doStream(options: LanguageModelV1CallOptions): Promise<{ stream: ReadableStream<LanguageModelV1StreamPart>; rawCall: { rawPrompt: unknown; rawSettings: Record<string, unknown>; }; rawResponse?: { headers?: Record<string, string>; }; warnings?: LanguageModelV1CallWarning[]; }>; } interface GeminiProvider extends ProviderV1 { (modelId: string, settings?: Record<string, unknown>): GeminiLanguageModel; languageModel(modelId: string, settings?: Record<string, unknown>): GeminiLanguageModel; chat(modelId: string, settings?: Record<string, unknown>): GeminiLanguageModel; } /** * Creates a new Gemini provider instance. * * @param options - Configuration options for the provider * @returns A configured provider function * @throws Error if authentication options are invalid * * @example * ```typescript * // Using API key authentication * const gemini = createGeminiProvider({ * authType: 'gemini-api-key', * apiKey: process.env.GEMINI_API_KEY * }); * * // Use with Vercel AI SDK * const model = gemini('gemini-1.5-flash'); * const result = await generateText({ * model, * prompt: 'Hello, world!' * }); * ``` */ declare function createGeminiProvider(options?: GeminiProviderOptions): GeminiProvider; export { type GeminiProvider as GeminiCliCoreProvider, type GeminiProviderOptions as GeminiCliCoreProviderOptions, type GeminiProvider, type GeminiProviderOptions, createGeminiProvider as createGeminiCliCoreProvider, createGeminiProvider };