The Google.Gemini SDK implements IChatClient and IEmbeddingGenerator<string, Embedding<float>> from Microsoft.Extensions.AI.
Supported Interfaces
Interface
Support Level
IChatClient
Full (text, streaming, tool calling, images, thinking)
IEmbeddingGenerator<string, Embedding<float>>
Full
IChatClient
Installation
1
dotnetaddpackageGoogle_Gemini
Basic Usage
1 2 3 4 5 6 7 8 91011121314
usingGoogle.Gemini;usingMicrosoft.Extensions.AI;usingvarclient=newGeminiClient(apiKey);IChatClientchatClient=client;varresponse=awaitchatClient.GetResponseAsync("What is the capital of France?",newChatOptions{ModelId="gemini-2.0-flash",});Console.WriteLine(response.Text);
Streaming
1 2 3 4 5 6 7 8 91011
IChatClientchatClient=client;awaitforeach(varupdateinchatClient.GetStreamingResponseAsync("Write a short poem about coding.",newChatOptions{ModelId="gemini-2.0-flash",})){Console.Write(update.Text);}
Tool Calling
1 2 3 4 5 6 7 8 91011121314151617181920
usingCSharpToJsonSchema;[GenerateJsonSchema]publicinterfaceIWeatherTools{[Description("Gets the current weather for a location.")]stringGetWeather([Description("The city name")]stringcity);}IChatClientchatClient=client;varservice=newWeatherToolsService();varresponse=awaitchatClient.GetResponseAsync("What's the weather in Paris?",newChatOptions{ModelId="gemini-2.0-flash",Tools=service.AsTools().AsAITools(),});
Image Input
1 2 3 4 5 6 7 8 91011121314
IChatClientchatClient=client;varresponse=awaitchatClient.GetResponseAsync([ new ChatMessage(ChatRole.User, [ new ImageContent(imageBytes, "image/png"), new TextContent("Describe this image."), ]),],newChatOptions{ModelId="gemini-2.0-flash",});
IEmbeddingGenerator
Basic Usage
1 2 3 4 5 6 7 8 91011121314151617
usingGoogle.Gemini;usingMicrosoft.Extensions.AI;usingvarclient=newGeminiClient(apiKey);IEmbeddingGenerator<string,Embedding<float>>generator=client;varembeddings=awaitgenerator.GenerateAsync(["Hello, world!", "How are you?"],newEmbeddingGenerationOptions{ModelId="gemini-embedding-2-preview",});foreach(varembeddinginembeddings){Console.WriteLine($"Dimensions: {embedding.Vector.Length}");}
Custom Dimensions
gemini-embedding-2-preview supports Matryoshka dimensionality reduction — you can request smaller vectors for faster search with minimal quality loss:
Specify a task type via AdditionalProperties to optimize embeddings for your use case:
1 2 3 4 5 6 7 8 910
varembeddings=awaitgenerator.GenerateAsync(["How do I reset my password?"],newEmbeddingGenerationOptions{ModelId="gemini-embedding-2-preview",AdditionalProperties=newAdditionalPropertiesDictionary{["TaskType"]="RETRIEVAL_QUERY",},});
For document ingestion, use RETRIEVAL_DOCUMENT with an optional Title:
1 2 3 4 5 6 7 8 91011
varembeddings=awaitgenerator.GenerateAsync(["To reset your password, go to Settings > Security > Change Password..."],newEmbeddingGenerationOptions{ModelId="gemini-embedding-2-preview",AdditionalProperties=newAdditionalPropertiesDictionary{["TaskType"]="RETRIEVAL_DOCUMENT",["Title"]="Password Reset Guide",},});
Task Type
Use Case
RETRIEVAL_QUERY
Search queries — embed the question
RETRIEVAL_DOCUMENT
Documents to be searched — embed the content
SEMANTIC_SIMILARITY
Measuring text similarity
CLASSIFICATION
Text classification
CLUSTERING
Grouping similar texts
QUESTION_ANSWERING
Question answering
FACT_VERIFICATION
Fact checking
CODE_RETRIEVAL_QUERY
Code search queries
Available Embedding Models
Model
Dimensions
Description
gemini-embedding-2-preview
3072 (default)
Latest model, best retrieval quality, Matryoshka dimensions support
gemini-embedding-001
768
Previous generation model
API Version
This SDK targets the v1beta API — the full-featured version used by Google's own SDKs. The v1 stable API lacks critical features like tool calling, file upload, context caching, and grounding.