Mscc.GenerativeAI
0.8.0
See the version list below for details.
dotnet add package Mscc.GenerativeAI --version 0.8.0
NuGet\Install-Package Mscc.GenerativeAI -Version 0.8.0
<PackageReference Include="Mscc.GenerativeAI" Version="0.8.0" />
paket add Mscc.GenerativeAI --version 0.8.0
#r "nuget: Mscc.GenerativeAI, 0.8.0"
// Install Mscc.GenerativeAI as a Cake Addin #addin nuget:?package=Mscc.GenerativeAI&version=0.8.0 // Install Mscc.GenerativeAI as a Cake Tool #tool nuget:?package=Mscc.GenerativeAI&version=0.8.0
Gemini AI Client for .NET and ASP.NET Core
Access the Gemini API in Google AI Studio and Google Cloud Vertex AI.
Read more about Mscc.GenerativeAI.Web and how to add it to your ASP.NET web applications.
Client for .NET using Google API Client Library:
Read more about Mscc.GenerativeAI.Google and how to add it to your .NET applications.
Install the package 🖥️
Install the package Mscc.GenerativeAI from NuGet. You can install the package from the command line using either the command line or the NuGet Package Manager Console. Or you add it directly to your .NET project.
Add the package using the dotnet
command line tool in your .NET project folder.
> dotnet add package Mscc.GenerativeAI
Working with Visual Studio use the NuGet Package Manager to install the package Mscc.GenerativeAI.
PM> Install-Package Mscc.GenerativeAI
Alternatively, add the following line to your .csproj
file.
<ItemGroup>
<PackageReference Include="Mscc.GenerativeAI" Version="0.7.1" />
</ItemGroup>
You can then add this code to your sources whenever you need to access any Gemini API provided by Google. This package works for Google AI (Google AI Studio) and Google Cloud Vertex AI.
Authentication use cases 👥
The package supports the following use cases to authenticate.
- Google AI: Authentication with an API key
- Google AI: Authentication with OAuth
- Vertex AI: Authentication with Application Default Credentials (ADC)
- Vertex AI: Authentication with OAuth (using Mscc.GenerativeAI.Google)
- Vertex AI: Authentication with Service Account (using Mscc.GenerativeAI.Google)
This applies mainly to the instantiation procedure.
Getting Started 🚀
Use of Gemini API in either Google AI or Vertex AI is almost identical. The major difference is the way to instantiate the model handling your prompt.
Using Environment variables
In the cloud most settings are configured via environment variables (EnvVars). The ease of configuration, their wide spread support and the simplicity of environment variables makes them a very interesting option.
Variable Name | Description |
---|---|
GOOGLE_AI_MODEL | The name of the model to use (default is Model.Gemini10Pro) |
GOOGLE_API_KEY | The API key generated in Google AI Studio |
GOOGLE_PROJECT_ID | Project ID in Google Cloud to access the APIs |
GOOGLE_REGION | Region in Google Cloud (default is us-central1) |
GOOGLE_ACCESS_TOKEN | The access token required to use models running in Vertex AI |
GOOGLE_APPLICATION_CREDENTIALS | Path to the application credentials file. |
GOOGLE_WEB_CREDENTIALS | Path to a Web credentials file. |
Using any environment variable provides a simplified access to a model.
using Mscc.GenerativeAI;
var model = new GenerativeModel();
Choose an API and authentication mode
Google AI with an API key
using Mscc.GenerativeAI;
// Google AI with an API key
var model = new GenerativeModel(apiKey: "your API key", model: Model.GeminiPro);
Google AI with OAuth. Use gcloud auth application-default print-access-token
to get the access token.
using Mscc.GenerativeAI;
// Google AI with OAuth. Use `gcloud auth application-default print-access-token` to get the access token.
var model = new GenerativeModel(model: Model.GeminiPro);
model.AccessToken = accessToken;
Vertex AI with OAuth. Use gcloud auth application-default print-access-token
to get the access token.
using Mscc.GenerativeAI;
// Vertex AI with OAuth. Use `gcloud auth application-default print-access-token` to get the access token.
var vertex = new VertexAI(projectId: projectId, region: region);
var model = vertex.GenerativeModel(model: Model.Gemini10Pro);
model.AccessToken = accessToken;
The ConfigurationFixture
type in the test project implements multiple options to retrieve sensitive information, ie. API key or access token.
Using Google AI Gemini API
Working with Google AI in your application requires an API key. Get an API key from Google AI Studio.
using Mscc.GenerativeAI;
var apiKey = "your_api_key";
var prompt = "Write a story about a magic backpack.";
var model = new GenerativeModel(apiKey: apiKey, model: Model.GeminiPro);
var response = model.GenerateContent(prompt).Result;
Console.WriteLine(response.Text);
Using Vertex AI Gemini API
Use of Vertex AI requires an account on Google Cloud, a project with billing and Vertex AI API enabled.
using Mscc.GenerativeAI;
var projectId = "your_google_project_id"; // the ID of a project, not its name.
var region = "us-central1"; // see documentation for available regions.
var accessToken = "your_access_token"; // use `gcloud auth application-default print-access-token` to get it.
var prompt = "Write a story about a magic backpack.";
var vertex = new VertexAI(projectId: projectId, region: region);
var model = vertex.GenerativeModel(model: Model.GeminiPro);
model.AccessToken = accessToken;
var response = model.GenerateContent(prompt).Result;
Console.WriteLine(response.Text);
More examples
Chat conversations
Gemini enables you to have freeform conversations across multiple turns. You can interact with Gemini Pro using a single-turn prompt and response or chat with it in a multi-turn, continuous conversation, even for code understanding and generation.
using Mscc.GenerativeAI;
var apiKey = "your_api_key";
var model = new GenerativeModel(apiKey: apiKey); // using default model: gemini-pro
var chat = model.StartChat();
// Instead of discarding you could also use the response and access `response.Text`.
_ = await chat.SendMessage("Hello, fancy brainstorming about IT?");
_ = await chat.SendMessage("In one sentence, explain how a computer works to a young child.");
_ = await chat.SendMessage("Okay, how about a more detailed explanation to a high schooler?");
_ = await chat.SendMessage("Lastly, give a thorough definition for a CS graduate.");
// A chat session keeps every response in its history.
chat.History.ForEach(c => Console.WriteLine($"{c.Role}: {c.Parts[0].Text}"));
Create a tuned model
The Gemini API lets you tune models on your own data. Since it's your data and your tuned models this needs stricter access controls than API-Keys can provide.
Before you can create a tuned model, you'll need to setup OAuth for your project.
using Mscc.GenerativeAI;
var projectId = "your_google_project_id"; // the ID of a project, not its name.
var accessToken = "your_access_token"; // use `gcloud auth application-default print-access-token` to get it.
var model = new GenerativeModel(apiKey: null, model: Model.Gemini10Pro001)
{
AccessToken = accessToken,
ProjectId = projectId
};
var request = new CreateTunedModelRequest()
{
BaseModel = $"models/{Model.Gemini10Pro001}",
DisplayName = "Autogenerated Test model",
TuningTask = new()
{
Hyperparameters = new() { BatchSize = 2, LearningRate = 0.001f, EpochCount = 3 },
TrainingData = new()
{
Examples = new()
{
Examples = new()
{
new TrainingDataExample() { TextInput = "1", Output = "2" },
new TrainingDataExample() { TextInput = "3", Output = "4" },
new TrainingDataExample() { TextInput = "-3", Output = "-2" },
new TrainingDataExample() { TextInput = "twenty two", Output = "twenty three" },
new TrainingDataExample() { TextInput = "two hundred", Output = "two hundred one" },
new TrainingDataExample() { TextInput = "ninety nine", Output = "one hundred" },
new TrainingDataExample() { TextInput = "8", Output = "9" },
new TrainingDataExample() { TextInput = "-98", Output = "-97" },
new TrainingDataExample() { TextInput = "1,000", Output = "1,001" },
new TrainingDataExample() { TextInput = "thirteen", Output = "fourteen" },
new TrainingDataExample() { TextInput = "seven", Output = "eight" },
}
}
}
}
};
// Act
var response = await model.CreateTunedModel(request);
Console.WriteLine($"Name: {response.Name}");
Console.WriteLine($"Model: {response.Metadata.TunedModel} (Steps: {response.Metadata.TotalSteps})");
(This is still work in progress but operational. Future release will provide types to simplify the create request.)
Tuned models appear in your Google AI Studio library.
More samples
The folders samples and tests contain more examples.
- Simple console application
- ASP.NET Core Minimal web application
- ASP.NET Core MVP web application (work in progress!)
Troubleshooting ⚡
Sometimes you might have authentication warnings HTTP 403 (Forbidden). Especially while working with OAuth-based authentication. You can fix it by re-authenticating through ADC.
gcloud config set project "$PROJECT_ID"
gcloud auth application-default set-quota-project "$PROJECT_ID"
gcloud auth application-default login
Make sure that the required API have been enabled.
# ENABLE APIs
gcloud services enable aiplatform.googleapis.com
Using the tests 🧩
The repository contains a number of test cases for Google AI and Vertex AI. You will find them in the tests folder. They are part of the [GenerativeAI solution].
To run the tests, either enter the relevant information into the appsettings.json, create a new appsettings.user.json
file with the same JSON structure in the tests
folder, or define the following environment variables
- GOOGLE_API_KEY
- GOOGLE_PROJECT_ID
- GOOGLE_REGION
- GOOGLE_ACCESS_TOKEN (optional: if absent,
gcloud auth application-default print-access-token
is executed)
The test cases should provide more insights and use cases on how to use the Mscc.GenerativeAI package in your .NET projects.
Feedback ✨
For support and feedback kindly create issues at the https://github.com/mscraftsman/generative-ai repository.
License 📜
This project is licensed under the Apache-2.0 License - see the LICENSE file for details.
Citation 📚
If you use Mscc.GenerativeAI in your research project, kindly cite as follows
@misc{Mscc.GenerativeAI,
author = {Kirstätter, J and MSCraftsman},
title = {Mscc.GenerativeAI - Gemini AI Client for .NET and ASP.NET Core},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
note = {https://github.com/mscraftsman/generative-ai}
}
Created by Jochen Kirstätter.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 is compatible. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.7.2
- Microsoft.Bcl.AsyncInterfaces (>= 8.0.0)
- Nullable (>= 1.3.1)
- System.Text.Json (>= 8.0.2)
-
.NETStandard 2.0
- Microsoft.Bcl.AsyncInterfaces (>= 8.0.0)
- Nullable (>= 1.3.1)
- System.Text.Json (>= 8.0.2)
-
net6.0
- System.Text.Json (>= 8.0.2)
-
net7.0
- System.Text.Json (>= 8.0.2)
-
net8.0
- System.Text.Json (>= 8.0.2)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on Mscc.GenerativeAI:
Package | Downloads |
---|---|
Mscc.GenerativeAI.Google
Gemini AI Client for .NET |
|
Mscc.GenerativeAI.Web
A client for ASP.NET Core designed to consume Gemini AI. |
|
fsEnsemble
Package Description |
|
Mscc.GenerativeAI.Microsoft
Gemini AI Client for .NET |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on Mscc.GenerativeAI:
Repository | Stars |
---|---|
JasonBock/Rocks
A mocking library based on the Compiler APIs (Roslyn + Mocks)
|
Version | Downloads | Last updated |
---|---|---|
1.9.1 | 74 | 11/13/2024 |
1.9.0 | 199 | 11/4/2024 |
1.8.3 | 213 | 11/1/2024 |
1.8.2 | 92 | 10/31/2024 |
1.8.1 | 237 | 10/30/2024 |
1.8.0 | 171 | 10/29/2024 |
1.7.0 | 296 | 10/14/2024 |
1.6.5 | 277 | 10/13/2024 |
1.6.4 | 536 | 10/9/2024 |
1.6.3 | 605 | 9/24/2024 |
1.6.2 | 125 | 9/19/2024 |
1.6.1 | 204 | 9/18/2024 |
1.6.0 | 762 | 8/29/2024 |
1.5.1 | 361 | 7/31/2024 |
1.5.0 | 2,362 | 5/15/2024 |
1.4.0 | 364 | 4/22/2024 |
1.3.0 | 119 | 4/18/2024 |
1.2.0 | 111 | 4/16/2024 |
1.1.4 | 147 | 4/15/2024 |
1.1.3 | 111 | 4/12/2024 |
1.1.2 | 100 | 4/11/2024 |
1.1.1 | 1,788 | 4/10/2024 |
1.1.0 | 93 | 4/9/2024 |
1.0.1 | 272 | 4/1/2024 |
1.0.0 | 98 | 3/30/2024 |
0.9.4 | 282 | 3/29/2024 |
0.9.3 | 200 | 3/28/2024 |
0.9.1 | 193 | 3/26/2024 |
0.9.0 | 205 | 3/23/2024 |
0.8.4 | 191 | 3/21/2024 |
0.8.3 | 252 | 3/20/2024 |
0.8.2 | 207 | 3/20/2024 |
0.8.1 | 221 | 3/20/2024 |
0.8.0 | 215 | 3/20/2024 |
0.7.2 | 112 | 3/18/2024 |
0.7.1 | 99 | 3/18/2024 |
0.7.0 | 110 | 3/15/2024 |
0.6.1 | 445 | 3/11/2024 |
0.6.0 | 115 | 3/11/2024 |
0.5.4 | 125 | 3/7/2024 |
0.5.3 | 147 | 3/7/2024 |
0.5.2 | 112 | 3/6/2024 |
0.5.1 | 125 | 3/5/2024 |
0.5.0 | 157 | 3/5/2024 |
0.4.5 | 203 | 3/3/2024 |
0.4.4 | 122 | 3/1/2024 |
0.4.3 | 119 | 3/1/2024 |
0.4.2 | 118 | 3/1/2024 |
0.4.1 | 114 | 2/29/2024 |
0.3.2 | 111 | 2/29/2024 |
0.3.1 | 102 | 2/29/2024 |
0.2.1 | 114 | 2/29/2024 |
# Changelog (Release Notes)
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html) (SemVer).
## [Unreleased]
### Added
- provide types to simplify creation of tuned model
- compatibility methods for PaLM models
### Changed
### Fixed
## 0.8.0
### Added
- implement tuned model patching (.NET 6 and higher only)
- implement transfer of ownership of tuned model
- implement batched Embeddings
- query string parameters to list models (pagination and filter support)
- type documentation
- generate a grounded answer
- constants for method names/endpoints
- enumeration of state of created tuned model
### Changed
- text prompts have `user` role assigned
- improve Embeddings
- refactor types according to API reference
- extend type documentation
- improve .NET targetting of source code
## 0.7.2
### Added
- delete tuned model
### Changed
- method to list models supports both - regular and tuned - model types
## 0.7.1
### Added
- implement model tuning (works with stable models only)
- text-bison-001
- gemini-1.0-pro-001
- tests for model tuning
### Changed
- improved authentication regarding API key or OAuth/ADC
- added scope https://www.googleapis.com/auth/generative-language.tuning
- harmonized version among NuGet packages
- provide empty response on Safety stop
- merged regular and tuned ModelResponse
## 0.7.0
### Added
- use Environment Variables for default values (parameterless constructor)
- support of .env file
### Changed
- improve Function Calling
- improve Chat streaming
- improve Embeddings
## 0.6.1
### Added
- implement Function Calling
## 0.6.0
### Added
- implement streaming of content
- support of HTTP/3 protocol
- specify JSON order of properties
### Changed
- improve handling of config and settings
## 0.5.4
### Added
- implement Embeddings
- brief sanity check on model selection
### Changed
- refactor handling of parts
- ⛳ allow configuration, safety settings and tools for Chat
## 0.5.3
### Added
- Implement Chat
## 0.5.2
### Added
- Use of enumerations
### Changed
- Correct JSON conversion of SafetySettings
## 0.5.1
### Added
- Handle GenerationConfig, SafetySeetings and Tools
### Changed
- Append streamGenerateContent
## 0.5.0
### Added
- Add NuGet package Mscc.GenerativeAI.Web for use with ASP.NET Core.
### Changed
- Refactor folder structure
## 0.4.5
### Changed
- Extend methods
## 0.4.4
### Added
- Automate package build process
## 0.4.3
### Added
- Add x-goog-api-key header
## 0.4.2
### Changed
- Minor correction
## 0.4.1
### Added
- Add OAuth to Google AI
## 0.3.2
### Changed
- Improve package attributes
## 0.3.1
### Added
- Add methods ListModels and GetModel
## 0.2.1
### Added
- Initial Release
## 0.1.2
### Changed
- Update README.md