gsilvamartin / dotnet-gemini-sdk Goto Github PK
View Code? Open in Web Editor NEW.NET SDK for seamless and efficient integration with the Google Gemini
License: MIT License
.NET SDK for seamless and efficient integration with the Google Gemini
License: MIT License
hey bro, great package, helped a lot but i keep getting this issue every time i try to pass hyper parameters to the model, for that I'm using the same object that you created in the GeminiMessageRequest.cs class which is GenerationConfig, but I feel the BuildGeminiRequest in the GeminiClient is causing an issue which creates the payload for the request, to be precise this is the issue,
"error": {
"code": 400,
"message": "Invalid JSON payload received. Unknown name "generationconfig": Cannot find field.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"description": "Invalid JSON payload received. Unknown name "generationconfig": Cannot find field."
}
]
}
]
}
}
I feel the property name is being set in a wrong way, as per google's docs the property name should be "generationConfig". Can you please look into this?, thanks. The c should be in caps in the payload while we send the request.
Hi,
Users will provide their own keys to call Google Gemini Api.
Is there any way to do that?
Regards,
How can I set multiple safety settings? I can set only 1 safety parameter in IGeminiClient::TextPrompt
public interface IGeminiClient
{
Task<GeminiMessageResponse?> TextPrompt(
string message,
GenerationConfig? generationConfig = null,
SafetySetting? safetySetting = null);
Task<GeminiMessageResponse?> TextPrompt(
List<DotnetGeminiSDK.Model.Request.Content> messages,
GenerationConfig? generationConfig = null,
SafetySetting? safetySetting = null);
...
Describe the solution you'd like
SafetySetting? safetySetting
-> List<SafetySetting>? safetySetting
I was looking for a valid C# SDK to use in our integration with Gemini and I found your solution. Right now it can be used for dev/testing but not for production from my point of view. One of the important problems that I found by looking into the code is the way the requests are performed. You are using HttpClient and you are doing a new instance every time ApiRequester is created.
public class ApiRequester : IApiRequester
{
private readonly HttpClient _httpClient;
public ApiRequester()
{
_httpClient = new HttpClient();
}
This approach will lead to connection pool starvation. You should use IHttpClientFactory instead and maybe allow dependency injection for it . Or make HttpClient static inisde the class and configure PooledConnectionLifetime and in this way you are avoiding the problems on how many instances of ApiRequester are created.
You can read more about this problem here:
https://learn.microsoft.com/en-us/dotnet/fundamentals/networking/http/httpclient-guidelines#recommended-use
or
https://devblogs.microsoft.com/azure-sdk/net-framework-connection-pool-limits/
I saw that you are making it AddSingleton in the services but is not enough, knowing that someone can invoke GeminiClient(GoogleGeminiConfig config) multiple times and here is build a new ApiRequester every time (is not making use of the singleton):
public GeminiClient(GoogleGeminiConfig config)
{
_config = config;
_apiRequester = new ApiRequester();
}
Also in this context I suggest you increase the resilience of the connection by using Polly:
https://learn.microsoft.com/en-us/dotnet/architecture/microservices/implement-resilient-applications/implement-http-call-retries-exponential-backoff-polly
I hope this SKD will improve in the future. U are doing a great job.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.