Releases: ben-vargas/ai-sdk-provider-gemini-cli
v2.0.1
v2.0.0 - AI SDK v6 Support
Summary
Major release adding AI SDK v6 support. This makes v6 the primary version.
For AI SDK v5 compatibility, use npm install ai-sdk-provider-gemini-cli@ai-sdk-v5.
Breaking Changes
- Provider interface: ProviderV2 → ProviderV3
- Token usage: flat → hierarchical structure
- Warning format:
unsupported-setting→unsupported - Method rename:
textEmbeddingModel()→embeddingModel() - Finish reason: string →
{ unified, raw }object
Dependencies
@ai-sdk/provider: ^3.0.0@ai-sdk/provider-utils: ^4.0.1@google/gemini-cli-core: 0.22.4
Installation
npm install ai-sdk-provider-gemini-cli aiSee CHANGELOG.md for full details.
v2.0.0-beta.2 - thinkingConfig support for Gemini 3
thinkingConfig Support for Gemini 3
Port of thinkingConfig from main branch (v1.5.1) for AI SDK v6 compatibility.
Added
-
thinkingConfig Support: Configure Gemini 3 thinking/reasoning mode
thinkingLevelfor Gemini 3 models (gemini-3-pro-preview,gemini-3-flash-preview)- Supports values:
low,medium,high,minimal - Case-insensitive string input (
'HIGH','high','High'all work) - Also accepts
ThinkingLevelenum for type-safe usage
- Supports values:
thinkingBudgetfor Gemini 2.5 models (backwards compatible)- Token-based control:
0(disabled),512,8192,-1(unlimited)
- Token-based control:
includeThoughtsoption to include reasoning in responses
-
New Exports:
ThinkingLevelenum for type-safe thinkingLevel valuesThinkingConfigInputtype for TypeScript users
Installation
npm install ai-sdk-provider-gemini-cli@beta ai@betaExample Usage
import { createGeminiProvider, ThinkingLevel } from 'ai-sdk-provider-gemini-cli';
const gemini = createGeminiProvider();
// Using string (case-insensitive)
const result = await generateText({
model: gemini('gemini-3-flash-preview'),
prompt: 'Solve this complex problem...',
thinkingConfig: {
thinkingLevel: 'high',
includeThoughts: true,
},
});
// Or using enum
const result = await generateText({
model: gemini('gemini-3-flash-preview'),
prompt: 'Solve this complex problem...',
thinkingConfig: {
thinkingLevel: ThinkingLevel.HIGH,
},
});Technical Details
- All 191 tests passing
- Call-time thinkingConfig merges with model-level settings (field-by-field override)
See CHANGELOG.md for full details.
v1.5.1 - thinkingConfig support for Gemini 3
Added
-
Thinking Mode Support: Added
thinkingConfigsettings for Gemini reasoning capabilities (#29)thinkingLevelfor Gemini 3 models:low- Minimizes latency and cost (Pro & Flash)medium- Balanced thinking (Flash only)high- Maximizes reasoning depth (Pro & Flash)minimal- Matches "no thinking" for most queries (Flash only)
- Case-insensitive string input ('HIGH', 'high', 'High' all work)
- Also accepts
ThinkingLevelenum for type-safe usage thinkingBudgetfor Gemini 2.5 models (backwards compatible)- Token-based control: 0 (disabled), 512, 8192 (default), -1 (unlimited)
includeThoughtsoption to include reasoning in responses- Re-exported
ThinkingLevelenum andThinkingConfigInputtype
-
Known Limitations Documentation: Added comprehensive guide for Gemini API schema complexity limits
Fixed
- thinkingConfig field merging: Call-time thinkingConfig now merges with model-level settings instead of replacing
- Invalid thinkingLevel fallback: Invalid call-time values now preserve settings defaults instead of silently dropping
Model Compatibility
| thinkingLevel | gemini-3-pro-preview | gemini-3-flash-preview |
|---|---|---|
low |
✅ | ✅ |
medium |
❌ | ✅ |
high |
✅ | ✅ |
minimal |
❌ | ✅ |
v2.0.0-beta.1 - AI SDK v6 Support
AI SDK v6 (Beta) Support
This release adds compatibility with Vercel AI SDK v6 (beta).
Breaking Changes
- Provider Interface:
ProviderV2→ProviderV3 - Language Model:
LanguageModelV2→LanguageModelV3 - Specification Version:
'v2'→'v3' - Warning Type:
LanguageModelV2CallWarning→SharedV3Warning - Warning Format:
'unsupported-setting'+'setting'→'unsupported'+'feature' - Token Usage: Flat → hierarchical structure
- Method Rename:
textEmbeddingModel()→embeddingModel() - Tool Result Output: Now uses typed
ToolResultOutputunion
Installation
npm install ai-sdk-provider-gemini-cli@beta ai@betaDependencies
Pinned to exact beta versions for stability:
@ai-sdk/provider: 3.0.0-beta.26@ai-sdk/provider-utils: 4.0.0-beta.51ai(devDep): 6.0.0-beta.156
See CHANGELOG.md for full details.
v1.5.0 - Multimodal File Support
What's New
This release adds multimodal file support, extending input capabilities beyond images to include PDF documents, audio files, and video files.
Added
-
Multimodal File Support (#27, thanks @kaiinui)
- PDF documents (
application/pdf) - Audio files (
audio/*- mp3, wav, flac, etc.) - Video files (
video/*- mp4, webm, mov, etc.) - All file types supported by the underlying Gemini API are now accessible
- PDF documents (
-
New Example:
pdf-document-analysis.mjs- Demonstrates analyzing SEC 10-Q filings with Gemini
- Shows executive summary, financial metrics extraction, and risk analysis patterns
Changed
- Renamed internal
mapImageParttomapFilePartto reflect broader file type support - Updated error messages from "image" to "file" terminology for consistency
Technical Details
- File handling uses the same
inlineDataformat with base64 encoding - URL-based files remain unsupported (base64-encoded data required)
- All 178 tests passing
Full Changelog: v1.4.1...v1.5.0
v1.4.1
Changes
Dependencies
- Update
@google/gemini-cli-corefrom 0.17.1 to 0.20.0 - Update
@google/genaifrom 1.16.0 to 1.30.0 - Update
@ai-sdk/provider-utilsfrom 3.0.17 to 3.0.18 - Refresh dev dependencies to latest patch/minor versions
Fixed
- Config Proxy Compatibility: Added support for new 0.20.0 configuration methods:
getContextManager(),getGlobalMemory(),getEnvironmentMemory()- JIT context supportgetHookSystem()- Hook execution systemgetModelAvailabilityService()- Policy-driven model routinggetShellToolInactivityTimeout()- Shell command timeoutgetExperimentsAsync()- Experimental features
- Proxy Handler: Enhanced fallback handling for
Manager,Memory, andTimeoutmethod patterns - Security: Fixed high severity vulnerability in
jwsdependency
Testing
- All 175 unit tests passing
- All 13 integration tests passing
- 81% code coverage maintained
v1.4.0 - Native Structured Output Support
Added
-
Native Structured Output Support: Implemented native
responseJsonSchemasupport for Gemini API- Enables
supportsStructuredOutputs = truefor improved AI SDK integration - Schema is now passed directly to Gemini API via
responseJsonSchemain generation config - Provides cleaner, more reliable JSON output without post-processing
- Enables
-
JSON Without Schema Handling: Graceful downgrade when JSON format is requested without a schema
- Emits
unsupported-settingwarning to inform users - Downgrades to
text/plainresponse format (prevents fenced/raw JSON leaking) - Aligns with Claude-code provider behavior for cross-provider consistency
- Works in both streaming and non-streaming modes
- Emits
Changed
- Dependency Updates (aligned with @google/gemini-cli-core 0.17.1):
@ai-sdk/provider-utils: 3.0.3 → 3.0.17@google/gemini-cli-core: 0.16.0 → 0.17.1@google/genai: 1.14.0 → 1.16.0 (aligned with gemini-cli-core)google-auth-library: 10.2.1 → ^9.11.0 (aligned with gemini-cli-core)zod-to-json-schema: 3.24.6 → 3.25.0
Removed
- Prompt-based Schema Injection: Removed workaround that injected schema instructions into user prompts
- No longer needed with native
responseJsonSchemasupport
- No longer needed with native
- JSON Extraction Utility: Removed
extract-json.tsand related post-processing- Gemini now returns clean JSON directly when schema is provided
Technical Details
- Streaming now outputs JSON chunks directly without accumulation
- Simplified codebase with shared
prepareGenerationConfighelper for consistent behavior - Tests updated to use JSON Schema objects instead of Zod schemas (matching what AI SDK passes to providers)
- All 175 tests passing (including new no-schema downgrade tests)
v1.3.0 - Gemini 3 Support
Added
- Support for Gemini 3: Added support for
gemini-3-pro-previewmodel - Dependency Update: Updated
@google/gemini-cli-coreto0.16.0(pinned) - Security Updates: Updated dev dependencies (Vite 6, Vitest 4) to resolve security vulnerabilities
Changed
- Node.js Requirement: Updated engine requirement to
node >= 20to align with@google/gemini-cli-corev0.16.0 - CI/CD: Removed Node 18 from CI matrix
Fixed
- Async Configuration: Fixed compatibility with
gemini-cli-corev0.16.0 async configuration loading - Example Compatibility: Ensured core health-check examples (
check-auth.mjs,integration-test.mjs) use GA models (gemini-2.5-pro) for broader compatibility
v1.2.0 - Comprehensive Logging with Verbose Mode
🎉 What's New in v1.2.0
This release adds comprehensive logging capabilities with a flexible verbose mode system, enabling better debugging and production monitoring.
✨ Features
4-Level Logging System
debug: Detailed execution tracing (request/response, token usage, timing)info: General flow information (session initialization, completion)warn: Configuration warnings (always shown)error: Error messages (always shown)
Verbose Mode Control
- Default mode (
verbose: false): Silent operation - only warn/error shown - Verbose mode (
verbose: true): Full debug/info output for development and troubleshooting
Flexible Logger Configuration
undefined(default): Console logger with clear level tags ([DEBUG],[INFO],[WARN],[ERROR])false: Completely disabled (noop logger for silent operation)- Custom Logger: Integrate with Winston, Pino, Datadog, or any logging system
📝 New Examples
Added 4 comprehensive logging examples:
logging-default.mjs- Default silent modelogging-verbose.mjs- Verbose debug modelogging-disabled.mjs- Completely disabled logginglogging-custom-logger.mjs- Custom logger integration patterns
🔧 Usage
Silent by Default (Recommended for Production)
import { streamText } from 'ai';
import { createGeminiProvider } from 'ai-sdk-provider-gemini-cli';
const gemini = createGeminiProvider({ authType: 'oauth-personal' });
const result = streamText({
model: gemini('gemini-2.5-pro'),
prompt: 'Write a haiku'
});
// No logs - clean outputVerbose Debug Mode
const result = streamText({
model: gemini('gemini-2.5-pro', { verbose: true }),
prompt: 'Write a haiku'
});
// [DEBUG] Executing generateContent request
// [INFO] Stream completed in 1234msCustom Logger Integration
const customLogger = {
debug: (msg) => winston.debug(msg),
info: (msg) => winston.info(msg),
warn: (msg) => winston.warn(msg),
error: (msg) => winston.error(msg),
};
const result = streamText({
model: gemini('gemini-2.5-pro', { logger: customLogger, verbose: true }),
prompt: 'Write a haiku'
});Disabled Logging
const result = streamText({
model: gemini('gemini-2.5-pro', { logger: false }),
prompt: 'Write a haiku'
});
// Completely silent - no provider logs at all⚠️ Breaking Changes
Custom Logger Interface Change
The Logger interface now requires 4 methods instead of 2.
Who is affected: Only users with custom Logger implementations.
Migration Required
// Before (v1.1.2)
const logger = {
warn: (msg) => myLogger.warn(msg),
error: (msg) => myLogger.error(msg),
};
// After (v1.2.0)
const logger = {
debug: (msg) => myLogger.debug(msg), // ✨ Add this
info: (msg) => myLogger.info(msg), // ✨ Add this
warn: (msg) => myLogger.warn(msg),
error: (msg) => myLogger.error(msg),
};If you don't have a custom logger, no changes required - the default behavior is unchanged (silent operation).
📦 Installation
npm install ai-sdk-provider-gemini-cli@1.2.0Or update to latest:
npm install ai-sdk-provider-gemini-cli@latest🔍 Full Changelog
See CHANGELOG.md for detailed changes.
🎯 Why Version 1.2.0?
This is a minor version bump (not patch) due to the breaking Logger interface change. Following semantic versioning, we use minor versions for backward-incompatible changes that affect a subset of users with a clear migration path.
✅ Quality Assurance
- 214 tests passing (including 9 new logger tests)
- Comprehensive Oracle code review completed
- Zero regressions detected
- Full documentation and examples provided
Full Changelog: v1.1.2...v1.2.0