Skip to content

Commit b8eaac2

Browse files
HavenDVclaude
andcommitted
feat: auto-generate OpenAPI spec from Google Discovery API
Replace static committed openapi.yaml (from Dart LangChain project) with automated conversion from Google's official Discovery endpoint. - Add convert_discovery.py to convert Discovery format → OpenAPI 3.0.3 - Update generate.sh to download from googleapis.com and convert - Regenerate SDK with 59 endpoints and 177 schemas from official spec - Update integration tests for new method names Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent f7a8439 commit b8eaac2

655 files changed

Lines changed: 57900 additions & 1745 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/libs/Google.Gemini/Generated/Google.Gemini..JsonSerializerContext.g.cs

Lines changed: 64 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,78 @@ namespace Google.Gemini
1313
DefaultIgnoreCondition = global::System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull,
1414
Converters = new global::System.Type[]
1515
{
16-
typeof(global::Google.Gemini.JsonConverters.EmbedContentRequestTaskTypeJsonConverter),
17-
typeof(global::Google.Gemini.JsonConverters.EmbedContentRequestTaskTypeNullableJsonConverter),
16+
typeof(global::Google.Gemini.JsonConverters.FunctionResponseSchedulingJsonConverter),
17+
typeof(global::Google.Gemini.JsonConverters.FunctionResponseSchedulingNullableJsonConverter),
18+
typeof(global::Google.Gemini.JsonConverters.ExecutableCodeLanguageJsonConverter),
19+
typeof(global::Google.Gemini.JsonConverters.ExecutableCodeLanguageNullableJsonConverter),
20+
typeof(global::Google.Gemini.JsonConverters.CodeExecutionResultOutcomeJsonConverter),
21+
typeof(global::Google.Gemini.JsonConverters.CodeExecutionResultOutcomeNullableJsonConverter),
22+
typeof(global::Google.Gemini.JsonConverters.ToolCallToolTypeJsonConverter),
23+
typeof(global::Google.Gemini.JsonConverters.ToolCallToolTypeNullableJsonConverter),
24+
typeof(global::Google.Gemini.JsonConverters.ToolResponseToolTypeJsonConverter),
25+
typeof(global::Google.Gemini.JsonConverters.ToolResponseToolTypeNullableJsonConverter),
26+
typeof(global::Google.Gemini.JsonConverters.SchemaTypeJsonConverter),
27+
typeof(global::Google.Gemini.JsonConverters.SchemaTypeNullableJsonConverter),
28+
typeof(global::Google.Gemini.JsonConverters.FunctionDeclarationBehaviorJsonConverter),
29+
typeof(global::Google.Gemini.JsonConverters.FunctionDeclarationBehaviorNullableJsonConverter),
30+
typeof(global::Google.Gemini.JsonConverters.DynamicRetrievalConfigModeJsonConverter),
31+
typeof(global::Google.Gemini.JsonConverters.DynamicRetrievalConfigModeNullableJsonConverter),
32+
typeof(global::Google.Gemini.JsonConverters.ComputerUseEnvironmentJsonConverter),
33+
typeof(global::Google.Gemini.JsonConverters.ComputerUseEnvironmentNullableJsonConverter),
34+
typeof(global::Google.Gemini.JsonConverters.FunctionCallingConfigModeJsonConverter),
35+
typeof(global::Google.Gemini.JsonConverters.FunctionCallingConfigModeNullableJsonConverter),
36+
typeof(global::Google.Gemini.JsonConverters.SafetySettingCategoryJsonConverter),
37+
typeof(global::Google.Gemini.JsonConverters.SafetySettingCategoryNullableJsonConverter),
38+
typeof(global::Google.Gemini.JsonConverters.SafetySettingThresholdJsonConverter),
39+
typeof(global::Google.Gemini.JsonConverters.SafetySettingThresholdNullableJsonConverter),
40+
typeof(global::Google.Gemini.JsonConverters.GenerationConfigResponseModalitieJsonConverter),
41+
typeof(global::Google.Gemini.JsonConverters.GenerationConfigResponseModalitieNullableJsonConverter),
42+
typeof(global::Google.Gemini.JsonConverters.ThinkingConfigThinkingLevelJsonConverter),
43+
typeof(global::Google.Gemini.JsonConverters.ThinkingConfigThinkingLevelNullableJsonConverter),
44+
typeof(global::Google.Gemini.JsonConverters.GenerationConfigMediaResolutionJsonConverter),
45+
typeof(global::Google.Gemini.JsonConverters.GenerationConfigMediaResolutionNullableJsonConverter),
1846
typeof(global::Google.Gemini.JsonConverters.CandidateFinishReasonJsonConverter),
1947
typeof(global::Google.Gemini.JsonConverters.CandidateFinishReasonNullableJsonConverter),
2048
typeof(global::Google.Gemini.JsonConverters.SafetyRatingCategoryJsonConverter),
2149
typeof(global::Google.Gemini.JsonConverters.SafetyRatingCategoryNullableJsonConverter),
2250
typeof(global::Google.Gemini.JsonConverters.SafetyRatingProbabilityJsonConverter),
2351
typeof(global::Google.Gemini.JsonConverters.SafetyRatingProbabilityNullableJsonConverter),
24-
typeof(global::Google.Gemini.JsonConverters.SafetySettingCategoryJsonConverter),
25-
typeof(global::Google.Gemini.JsonConverters.SafetySettingCategoryNullableJsonConverter),
26-
typeof(global::Google.Gemini.JsonConverters.SafetySettingThresholdJsonConverter),
27-
typeof(global::Google.Gemini.JsonConverters.SafetySettingThresholdNullableJsonConverter),
52+
typeof(global::Google.Gemini.JsonConverters.UrlMetadataUrlRetrievalStatusJsonConverter),
53+
typeof(global::Google.Gemini.JsonConverters.UrlMetadataUrlRetrievalStatusNullableJsonConverter),
2854
typeof(global::Google.Gemini.JsonConverters.PromptFeedbackBlockReasonJsonConverter),
2955
typeof(global::Google.Gemini.JsonConverters.PromptFeedbackBlockReasonNullableJsonConverter),
56+
typeof(global::Google.Gemini.JsonConverters.ModalityTokenCountModalityJsonConverter),
57+
typeof(global::Google.Gemini.JsonConverters.ModalityTokenCountModalityNullableJsonConverter),
58+
typeof(global::Google.Gemini.JsonConverters.ModelStatusModelStageJsonConverter),
59+
typeof(global::Google.Gemini.JsonConverters.ModelStatusModelStageNullableJsonConverter),
60+
typeof(global::Google.Gemini.JsonConverters.ConditionOperationJsonConverter),
61+
typeof(global::Google.Gemini.JsonConverters.ConditionOperationNullableJsonConverter),
62+
typeof(global::Google.Gemini.JsonConverters.GenerateAnswerRequestAnswerStyleJsonConverter),
63+
typeof(global::Google.Gemini.JsonConverters.GenerateAnswerRequestAnswerStyleNullableJsonConverter),
64+
typeof(global::Google.Gemini.JsonConverters.InputFeedbackBlockReasonJsonConverter),
65+
typeof(global::Google.Gemini.JsonConverters.InputFeedbackBlockReasonNullableJsonConverter),
66+
typeof(global::Google.Gemini.JsonConverters.EmbedContentRequestTaskTypeJsonConverter),
67+
typeof(global::Google.Gemini.JsonConverters.EmbedContentRequestTaskTypeNullableJsonConverter),
68+
typeof(global::Google.Gemini.JsonConverters.GenerateContentBatchStateJsonConverter),
69+
typeof(global::Google.Gemini.JsonConverters.GenerateContentBatchStateNullableJsonConverter),
70+
typeof(global::Google.Gemini.JsonConverters.EmbedContentBatchStateJsonConverter),
71+
typeof(global::Google.Gemini.JsonConverters.EmbedContentBatchStateNullableJsonConverter),
72+
typeof(global::Google.Gemini.JsonConverters.ContentFilterReasonJsonConverter),
73+
typeof(global::Google.Gemini.JsonConverters.ContentFilterReasonNullableJsonConverter),
74+
typeof(global::Google.Gemini.JsonConverters.FileStateJsonConverter),
75+
typeof(global::Google.Gemini.JsonConverters.FileStateNullableJsonConverter),
76+
typeof(global::Google.Gemini.JsonConverters.FileSourceJsonConverter),
77+
typeof(global::Google.Gemini.JsonConverters.FileSourceNullableJsonConverter),
78+
typeof(global::Google.Gemini.JsonConverters.GeneratedFileStateJsonConverter),
79+
typeof(global::Google.Gemini.JsonConverters.GeneratedFileStateNullableJsonConverter),
80+
typeof(global::Google.Gemini.JsonConverters.TunedModelStateJsonConverter),
81+
typeof(global::Google.Gemini.JsonConverters.TunedModelStateNullableJsonConverter),
82+
typeof(global::Google.Gemini.JsonConverters.PermissionGranteeTypeJsonConverter),
83+
typeof(global::Google.Gemini.JsonConverters.PermissionGranteeTypeNullableJsonConverter),
84+
typeof(global::Google.Gemini.JsonConverters.PermissionRoleJsonConverter),
85+
typeof(global::Google.Gemini.JsonConverters.PermissionRoleNullableJsonConverter),
86+
typeof(global::Google.Gemini.JsonConverters.DocumentStateJsonConverter),
87+
typeof(global::Google.Gemini.JsonConverters.DocumentStateNullableJsonConverter),
3088
typeof(global::Google.Gemini.JsonConverters.UnixTimestampJsonConverter),
3189
})]
3290

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
2+
#nullable enable
3+
4+
namespace Google.Gemini
5+
{
6+
public partial class GeminiClient
7+
{
8+
partial void PrepareBatchesCancelArguments(
9+
global::System.Net.Http.HttpClient httpClient,
10+
ref string batchesId);
11+
partial void PrepareBatchesCancelRequest(
12+
global::System.Net.Http.HttpClient httpClient,
13+
global::System.Net.Http.HttpRequestMessage httpRequestMessage,
14+
string batchesId);
15+
partial void ProcessBatchesCancelResponse(
16+
global::System.Net.Http.HttpClient httpClient,
17+
global::System.Net.Http.HttpResponseMessage httpResponseMessage);
18+
19+
partial void ProcessBatchesCancelResponseContent(
20+
global::System.Net.Http.HttpClient httpClient,
21+
global::System.Net.Http.HttpResponseMessage httpResponseMessage,
22+
ref string content);
23+
24+
/// <summary>
25+
/// Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of `1`, corresponding to `Code.CANCELLED`.
26+
/// </summary>
27+
/// <param name="batchesId"></param>
28+
/// <param name="cancellationToken">The token to cancel the operation with</param>
29+
/// <exception cref="global::Google.Gemini.ApiException"></exception>
30+
public async global::System.Threading.Tasks.Task<string> BatchesCancelAsync(
31+
string batchesId,
32+
global::System.Threading.CancellationToken cancellationToken = default)
33+
{
34+
PrepareArguments(
35+
client: HttpClient);
36+
PrepareBatchesCancelArguments(
37+
httpClient: HttpClient,
38+
batchesId: ref batchesId);
39+
40+
var __pathBuilder = new global::Google.Gemini.PathBuilder(
41+
path: $"/batches/{batchesId}:cancel",
42+
baseUri: HttpClient.BaseAddress);
43+
foreach (var __authorization in Authorizations)
44+
{
45+
if (__authorization.Type == "ApiKey" &&
46+
__authorization.Location == "Query")
47+
{
48+
__pathBuilder = __pathBuilder.AddRequiredParameter(__authorization.Name, __authorization.Value);
49+
}
50+
}
51+
var __path = __pathBuilder.ToString();
52+
using var __httpRequest = new global::System.Net.Http.HttpRequestMessage(
53+
method: global::System.Net.Http.HttpMethod.Post,
54+
requestUri: new global::System.Uri(__path, global::System.UriKind.RelativeOrAbsolute));
55+
#if NET6_0_OR_GREATER
56+
__httpRequest.Version = global::System.Net.HttpVersion.Version11;
57+
__httpRequest.VersionPolicy = global::System.Net.Http.HttpVersionPolicy.RequestVersionOrHigher;
58+
#endif
59+
60+
PrepareRequest(
61+
client: HttpClient,
62+
request: __httpRequest);
63+
PrepareBatchesCancelRequest(
64+
httpClient: HttpClient,
65+
httpRequestMessage: __httpRequest,
66+
batchesId: batchesId);
67+
68+
using var __response = await HttpClient.SendAsync(
69+
request: __httpRequest,
70+
completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead,
71+
cancellationToken: cancellationToken).ConfigureAwait(false);
72+
73+
ProcessResponse(
74+
client: HttpClient,
75+
response: __response);
76+
ProcessBatchesCancelResponse(
77+
httpClient: HttpClient,
78+
httpResponseMessage: __response);
79+
80+
if (ReadResponseAsString)
81+
{
82+
var __content = await __response.Content.ReadAsStringAsync(
83+
#if NET5_0_OR_GREATER
84+
cancellationToken
85+
#endif
86+
).ConfigureAwait(false);
87+
88+
ProcessResponseContent(
89+
client: HttpClient,
90+
response: __response,
91+
content: ref __content);
92+
ProcessBatchesCancelResponseContent(
93+
httpClient: HttpClient,
94+
httpResponseMessage: __response,
95+
content: ref __content);
96+
97+
try
98+
{
99+
__response.EnsureSuccessStatusCode();
100+
101+
return __content;
102+
}
103+
catch (global::System.Exception __ex)
104+
{
105+
throw new global::Google.Gemini.ApiException(
106+
message: __content ?? __response.ReasonPhrase ?? string.Empty,
107+
innerException: __ex,
108+
statusCode: __response.StatusCode)
109+
{
110+
ResponseBody = __content,
111+
ResponseHeaders = global::System.Linq.Enumerable.ToDictionary(
112+
__response.Headers,
113+
h => h.Key,
114+
h => h.Value),
115+
};
116+
}
117+
}
118+
else
119+
{
120+
try
121+
{
122+
__response.EnsureSuccessStatusCode();
123+
124+
var __content = await __response.Content.ReadAsStringAsync(
125+
#if NET5_0_OR_GREATER
126+
cancellationToken
127+
#endif
128+
).ConfigureAwait(false);
129+
130+
return __content;
131+
}
132+
catch (global::System.Exception __ex)
133+
{
134+
throw new global::Google.Gemini.ApiException(
135+
message: __response.ReasonPhrase ?? string.Empty,
136+
innerException: __ex,
137+
statusCode: __response.StatusCode)
138+
{
139+
ResponseHeaders = global::System.Linq.Enumerable.ToDictionary(
140+
__response.Headers,
141+
h => h.Key,
142+
h => h.Value),
143+
};
144+
}
145+
}
146+
}
147+
}
148+
}

src/libs/Google.Gemini/Generated/Google.Gemini.GeminiClient.DeleteOperation.g.cs renamed to src/libs/Google.Gemini/Generated/Google.Gemini.GeminiClient.BatchesDelete.g.cs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,40 +5,40 @@ namespace Google.Gemini
55
{
66
public partial class GeminiClient
77
{
8-
partial void PrepareDeleteOperationArguments(
8+
partial void PrepareBatchesDeleteArguments(
99
global::System.Net.Http.HttpClient httpClient,
10-
ref string operationId);
11-
partial void PrepareDeleteOperationRequest(
10+
ref string batchesId);
11+
partial void PrepareBatchesDeleteRequest(
1212
global::System.Net.Http.HttpClient httpClient,
1313
global::System.Net.Http.HttpRequestMessage httpRequestMessage,
14-
string operationId);
15-
partial void ProcessDeleteOperationResponse(
14+
string batchesId);
15+
partial void ProcessBatchesDeleteResponse(
1616
global::System.Net.Http.HttpClient httpClient,
1717
global::System.Net.Http.HttpResponseMessage httpResponseMessage);
1818

19-
partial void ProcessDeleteOperationResponseContent(
19+
partial void ProcessBatchesDeleteResponseContent(
2020
global::System.Net.Http.HttpClient httpClient,
2121
global::System.Net.Http.HttpResponseMessage httpResponseMessage,
2222
ref string content);
2323

2424
/// <summary>
2525
/// Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.
2626
/// </summary>
27-
/// <param name="operationId"></param>
27+
/// <param name="batchesId"></param>
2828
/// <param name="cancellationToken">The token to cancel the operation with</param>
2929
/// <exception cref="global::Google.Gemini.ApiException"></exception>
30-
public async global::System.Threading.Tasks.Task<string> DeleteOperationAsync(
31-
string operationId,
30+
public async global::System.Threading.Tasks.Task<string> BatchesDeleteAsync(
31+
string batchesId,
3232
global::System.Threading.CancellationToken cancellationToken = default)
3333
{
3434
PrepareArguments(
3535
client: HttpClient);
36-
PrepareDeleteOperationArguments(
36+
PrepareBatchesDeleteArguments(
3737
httpClient: HttpClient,
38-
operationId: ref operationId);
38+
batchesId: ref batchesId);
3939

4040
var __pathBuilder = new global::Google.Gemini.PathBuilder(
41-
path: $"/operations/{operationId}",
41+
path: $"/batches/{batchesId}",
4242
baseUri: HttpClient.BaseAddress);
4343
foreach (var __authorization in Authorizations)
4444
{
@@ -60,10 +60,10 @@ partial void ProcessDeleteOperationResponseContent(
6060
PrepareRequest(
6161
client: HttpClient,
6262
request: __httpRequest);
63-
PrepareDeleteOperationRequest(
63+
PrepareBatchesDeleteRequest(
6464
httpClient: HttpClient,
6565
httpRequestMessage: __httpRequest,
66-
operationId: operationId);
66+
batchesId: batchesId);
6767

6868
using var __response = await HttpClient.SendAsync(
6969
request: __httpRequest,
@@ -73,7 +73,7 @@ partial void ProcessDeleteOperationResponseContent(
7373
ProcessResponse(
7474
client: HttpClient,
7575
response: __response);
76-
ProcessDeleteOperationResponse(
76+
ProcessBatchesDeleteResponse(
7777
httpClient: HttpClient,
7878
httpResponseMessage: __response);
7979

@@ -89,7 +89,7 @@ partial void ProcessDeleteOperationResponseContent(
8989
client: HttpClient,
9090
response: __response,
9191
content: ref __content);
92-
ProcessDeleteOperationResponseContent(
92+
ProcessBatchesDeleteResponseContent(
9393
httpClient: HttpClient,
9494
httpResponseMessage: __response,
9595
content: ref __content);

0 commit comments

Comments
 (0)