Skip to content

Commit f4ce65a

Browse files
committed
add google-ai support
1 parent da4c0b1 commit f4ce65a

File tree

19 files changed

+492
-11
lines changed

19 files changed

+492
-11
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
build/bin
2-
*.flatpak*
2+
*.flatpak*
3+
.ask-mai.yml

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,18 @@ ask-mai -b anthropic --llm.anthropic.api-key.plain=YOUR_ANTHROPIC_API_KEY
4242
ask-mai -b mistral --llm.mistral.api-key.plain=YOUR_MISTRAL_API_KEY --llm.mistral.model=mistral-small-latest
4343
```
4444

45-
### DeepSeekConfig
45+
### DeepSeek
4646

4747
```shell
4848
ask-mai -b deepseek --llm.deepseek.api-key.plain=YOUR_DEEPSEEK_API_KEY
4949
```
5050

51+
### Google Gemini
52+
53+
```shell
54+
ask-mai -b google --llm.google.api-key.plain=YOUR_GOOGLE_API_KEY
55+
```
56+
5157
## Features
5258

5359
* Support different LLM provider
@@ -58,6 +64,7 @@ ask-mai -b deepseek --llm.deepseek.api-key.plain=YOUR_DEEPSEEK_API_KEY
5864
* [Ollama](https://ollama.com/)
5965
* [Mistral](https://mistral.ai/)
6066
* [Anthropic](https://www.anthropic.com/)
67+
* [Google AI](https://ai.google.dev//)
6168
* Tool Support
6269
* You can define your own tools which can be called from the LLM
6370
* There are some built-in tools:

frontend/wailsjs/go/models.ts

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1689,9 +1689,9 @@ export namespace http {
16891689
export namespace llm {
16901690

16911691
export class AnthropicCache {
1692-
SystemMessage: boolean;
1693-
Tools: boolean;
1694-
Chat: boolean;
1692+
SystemMessage?: boolean;
1693+
Tools?: boolean;
1694+
Chat?: boolean;
16951695

16961696
static createFrom(source: any = {}) {
16971697
return new AnthropicCache(source);
@@ -1708,7 +1708,7 @@ export namespace llm {
17081708
Token: common.Secret;
17091709
BaseUrl: string;
17101710
Model: string;
1711-
Cache?: AnthropicCache;
1711+
Cache: AnthropicCache;
17121712

17131713
static createFrom(source: any = {}) {
17141714
return new AnthropicConfig(source);
@@ -1867,6 +1867,40 @@ export namespace llm {
18671867
return a;
18681868
}
18691869
}
1870+
export class GoogleAIConfig {
1871+
APIKey: common.Secret;
1872+
Model: string;
1873+
HarmThreshold?: number;
1874+
1875+
static createFrom(source: any = {}) {
1876+
return new GoogleAIConfig(source);
1877+
}
1878+
1879+
constructor(source: any = {}) {
1880+
if ('string' === typeof source) source = JSON.parse(source);
1881+
this.APIKey = this.convertValues(source["APIKey"], common.Secret);
1882+
this.Model = source["Model"];
1883+
this.HarmThreshold = source["HarmThreshold"];
1884+
}
1885+
1886+
convertValues(a: any, classs: any, asMap: boolean = false): any {
1887+
if (!a) {
1888+
return a;
1889+
}
1890+
if (a.slice && a.map) {
1891+
return (a as any[]).map(elem => this.convertValues(elem, classs));
1892+
} else if ("object" === typeof a) {
1893+
if (asMap) {
1894+
for (const key of Object.keys(a)) {
1895+
a[key] = new classs(a[key]);
1896+
}
1897+
return a;
1898+
}
1899+
return new classs(a);
1900+
}
1901+
return a;
1902+
}
1903+
}
18701904
export class MistralConfig {
18711905
ApiKey: common.Secret;
18721906
Endpoint: string;
@@ -2012,6 +2046,7 @@ export namespace llm {
20122046
Mistral: MistralConfig;
20132047
Anthropic: AnthropicConfig;
20142048
DeepSeek: DeepSeekConfig;
2049+
Google: GoogleAIConfig;
20152050
CallOptions: CallOptionsConfig;
20162051
Tool: tools.Config;
20172052

@@ -2030,6 +2065,7 @@ export namespace llm {
20302065
this.Mistral = this.convertValues(source["Mistral"], MistralConfig);
20312066
this.Anthropic = this.convertValues(source["Anthropic"], AnthropicConfig);
20322067
this.DeepSeek = this.convertValues(source["DeepSeek"], DeepSeekConfig);
2068+
this.Google = this.convertValues(source["Google"], GoogleAIConfig);
20332069
this.CallOptions = this.convertValues(source["CallOptions"], CallOptionsConfig);
20342070
this.Tool = this.convertValues(source["Tool"], tools.Config);
20352071
}

go.mod

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,32 @@ require (
2424
)
2525

2626
require (
27+
cloud.google.com/go v0.116.0 // indirect
28+
cloud.google.com/go/ai v0.7.0 // indirect
29+
cloud.google.com/go/aiplatform v1.68.0 // indirect
30+
cloud.google.com/go/auth v0.14.0 // indirect
31+
cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect
32+
cloud.google.com/go/compute/metadata v0.6.0 // indirect
33+
cloud.google.com/go/iam v1.2.1 // indirect
34+
cloud.google.com/go/longrunning v0.6.1 // indirect
35+
cloud.google.com/go/vertexai v0.12.0 // indirect
2736
github.com/bep/debounce v1.2.1 // indirect
2837
github.com/davecgh/go-spew v1.1.1 // indirect
2938
github.com/dlclark/regexp2 v1.11.4 // indirect
3039
github.com/ebitengine/purego v0.8.2 // indirect
40+
github.com/felixge/httpsnoop v1.0.4 // indirect
41+
github.com/go-logr/logr v1.4.2 // indirect
42+
github.com/go-logr/stdr v1.2.2 // indirect
3143
github.com/go-ole/go-ole v1.3.0 // indirect
3244
github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect
3345
github.com/go-toast/toast v0.0.0-20190211030409-01e6764cf0a4 // indirect
3446
github.com/godbus/dbus/v5 v5.1.0 // indirect
47+
github.com/google/generative-ai-go v0.15.1 // indirect
3548
github.com/google/pprof v0.0.0-20230207041349-798e818bf904 // indirect
49+
github.com/google/s2a-go v0.1.9 // indirect
3650
github.com/google/uuid v1.6.0 // indirect
51+
github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect
52+
github.com/googleapis/gax-go/v2 v2.14.1 // indirect
3753
github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect
3854
github.com/labstack/echo/v4 v4.13.3 // indirect
3955
github.com/labstack/gommon v0.4.2 // indirect
@@ -65,11 +81,25 @@ require (
6581
github.com/wailsapp/mimetype v1.4.1 // indirect
6682
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
6783
github.com/yusufpapurcu/wmi v1.2.4 // indirect
84+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect
85+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect
86+
go.opentelemetry.io/otel v1.32.0 // indirect
87+
go.opentelemetry.io/otel/metric v1.32.0 // indirect
88+
go.opentelemetry.io/otel/trace v1.32.0 // indirect
6889
golang.org/x/crypto v0.36.0 // indirect
6990
golang.org/x/net v0.38.0 // indirect
91+
golang.org/x/oauth2 v0.25.0 // indirect
92+
golang.org/x/sync v0.12.0 // indirect
7093
golang.org/x/sys v0.31.0 // indirect
7194
golang.org/x/text v0.23.0 // indirect
95+
golang.org/x/time v0.9.0 // indirect
96+
google.golang.org/api v0.218.0 // indirect
97+
google.golang.org/genproto v0.0.0-20241021214115-324edc3d5d38 // indirect
98+
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect
99+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250122153221-138b5a5a4fd4 // indirect
100+
google.golang.org/grpc v1.70.0 // indirect
101+
google.golang.org/protobuf v1.36.3 // indirect
72102
gopkg.in/yaml.v3 v3.0.1 // indirect
73103
)
74104

75-
replace github.com/tmc/langchaingo => github.com/rainu/langchaingo v0.0.0-20250529142520-123929cc4bd7
105+
replace github.com/tmc/langchaingo => github.com/rainu/langchaingo v0.0.0-20250530154254-565c5b692d5b

go.sum

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,21 @@
1+
cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE=
2+
cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U=
3+
cloud.google.com/go/ai v0.7.0 h1:P6+b5p4gXlza5E+u7uvcgYlzZ7103ACg70YdZeC6oGE=
4+
cloud.google.com/go/ai v0.7.0/go.mod h1:7ozuEcraovh4ABsPbrec3o4LmFl9HigNI3D5haxYeQo=
5+
cloud.google.com/go/aiplatform v1.68.0 h1:EPPqgHDJpBZKRvv+OsB3cr0jYz3EL2pZ+802rBPcG8U=
6+
cloud.google.com/go/aiplatform v1.68.0/go.mod h1:105MFA3svHjC3Oazl7yjXAmIR89LKhRAeNdnDKJczME=
7+
cloud.google.com/go/auth v0.14.0 h1:A5C4dKV/Spdvxcl0ggWwWEzzP7AZMJSEIgrkngwhGYM=
8+
cloud.google.com/go/auth v0.14.0/go.mod h1:CYsoRL1PdiDuqeQpZE0bP2pnPrGqFcOkI0nldEQis+A=
9+
cloud.google.com/go/auth/oauth2adapt v0.2.7 h1:/Lc7xODdqcEw8IrZ9SvwnlLX6j9FHQM74z6cBk9Rw6M=
10+
cloud.google.com/go/auth/oauth2adapt v0.2.7/go.mod h1:NTbTTzfvPl1Y3V1nPpOgl2w6d/FjO7NNUQaWSox6ZMc=
11+
cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I=
12+
cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
13+
cloud.google.com/go/iam v1.2.1 h1:QFct02HRb7H12J/3utj0qf5tobFh9V4vR6h9eX5EBRU=
14+
cloud.google.com/go/iam v1.2.1/go.mod h1:3VUIJDPpwT6p/amXRC5GY8fCCh70lxPygguVtI0Z4/g=
15+
cloud.google.com/go/longrunning v0.6.1 h1:lOLTFxYpr8hcRtcwWir5ITh1PAKUD/sG2lKrTSYjyMc=
16+
cloud.google.com/go/longrunning v0.6.1/go.mod h1:nHISoOZpBcmlwbJmiVk5oDRz0qG/ZxPynEGs1iZ79s0=
17+
cloud.google.com/go/vertexai v0.12.0 h1:zTadEo/CtsoyRXNx3uGCncoWAP1H2HakGqwznt+iMo8=
18+
cloud.google.com/go/vertexai v0.12.0/go.mod h1:8u+d0TsvBfAAd2x5R6GMgbYhsLgo3J7lmP4bR8g2ig8=
119
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
220
github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=
321
github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
@@ -12,6 +30,8 @@ github.com/dop251/goja v0.0.0-20250125213203-5ef83b82af17 h1:spJaibPy2sZNwo6Q0Hj
1230
github.com/dop251/goja v0.0.0-20250125213203-5ef83b82af17/go.mod h1:MxLav0peU43GgvwVgNbLAj1s/bSGboKkhuULvq/7hx4=
1331
github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I=
1432
github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
33+
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
34+
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
1535
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
1636
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
1737
github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM=
@@ -20,6 +40,11 @@ github.com/gage-technologies/mistral-go v1.1.0 h1:POv1wM9jA/9OBXGV2YdPi9Y/h09+Mj
2040
github.com/gage-technologies/mistral-go v1.1.0/go.mod h1:tF++Xt7U975GcLlzhrjSQb8l/x+PrriO9QEdsgm9l28=
2141
github.com/gen2brain/beeep v0.0.0-20240516210008-9c006672e7f4 h1:ygs9POGDQpQGLJPlq4+0LBUmMBNox1N4JSpw+OETcvI=
2242
github.com/gen2brain/beeep v0.0.0-20240516210008-9c006672e7f4/go.mod h1:0W7dI87PvXJ1Sjs0QPvWXKcQmNERY77e8l7GFhZB/s4=
43+
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
44+
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
45+
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
46+
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
47+
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
2348
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
2449
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
2550
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
@@ -31,13 +56,23 @@ github.com/goccy/go-yaml v1.17.1 h1:LI34wktB2xEE3ONG/2Ar54+/HJVBriAGJ55PHls4YuY=
3156
github.com/goccy/go-yaml v1.17.1/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
3257
github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
3358
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
59+
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
60+
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
61+
github.com/google/generative-ai-go v0.15.1 h1:n8aQUpvhPOlGVuM2DRkJ2jvx04zpp42B778AROJa+pQ=
62+
github.com/google/generative-ai-go v0.15.1/go.mod h1:AAucpWZjXsDKhQYWvCYuP6d0yB1kX998pJlOW1rAesw=
3463
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
3564
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
3665
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
3766
github.com/google/pprof v0.0.0-20230207041349-798e818bf904 h1:4/hN5RUoecvl+RmJRE2YxKWtnnQls6rQjjW5oV7qg2U=
3867
github.com/google/pprof v0.0.0-20230207041349-798e818bf904/go.mod h1:uglQLonpP8qtYCYyzA+8c/9qtqgA3qsXGYqCPKARAFg=
68+
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
69+
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
3970
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
4071
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
72+
github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw=
73+
github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA=
74+
github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q=
75+
github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA=
4176
github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck=
4277
github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs=
4378
github.com/kirsle/configdir v0.0.0-20170128060238-e45d2f54772f h1:dKccXx7xA56UNqOcFIbuqFjAWPVtP688j5QMgmo6OHU=
@@ -99,8 +134,8 @@ github.com/rainu/go-command-chain v0.4.0 h1:qgrNbNsqkTfJHdwGzVuGPPK+p+XSnGAhAT/8
99134
github.com/rainu/go-command-chain v0.4.0/go.mod h1:RvLsDKnTGD9XoUY7nmBz73ayffI0bFCDH/EVJPRgfks=
100135
github.com/rainu/go-yacl v0.2.1 h1:BZdwonr/JA8RiE/8xptE9RKT0+COwyfTmyB7kiANGPw=
101136
github.com/rainu/go-yacl v0.2.1/go.mod h1:cZwUkCDYE1w6xlTUi6vCqdV1O3iLvM/govQdUn6I9NU=
102-
github.com/rainu/langchaingo v0.0.0-20250529142520-123929cc4bd7 h1:sQyN78q6HJVyoCwfGhxIqkCGB41ds6Xd7QIORrrtEbM=
103-
github.com/rainu/langchaingo v0.0.0-20250529142520-123929cc4bd7/go.mod h1:5TXP7bKcWjN05g9e2+MpqUXprf5jwI62Q2xGtAKLno8=
137+
github.com/rainu/langchaingo v0.0.0-20250530154254-565c5b692d5b h1:d6BoQOmei4gvKDB+a/V1+hhFbOm326C0EG/5xT2/BJo=
138+
github.com/rainu/langchaingo v0.0.0-20250530154254-565c5b692d5b/go.mod h1:5TXP7bKcWjN05g9e2+MpqUXprf5jwI62Q2xGtAKLno8=
104139
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
105140
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
106141
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
@@ -138,11 +173,29 @@ github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zI
138173
github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4=
139174
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
140175
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
176+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc=
177+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI=
178+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk=
179+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8=
180+
go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U=
181+
go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg=
182+
go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M=
183+
go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8=
184+
go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4=
185+
go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU=
186+
go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU=
187+
go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ=
188+
go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM=
189+
go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8=
141190
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
142191
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
143192
golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
144193
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
145194
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
195+
golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
196+
golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
197+
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
198+
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
146199
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
147200
golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
148201
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -159,8 +212,22 @@ golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9sn
159212
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
160213
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
161214
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
215+
golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
216+
golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
162217
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
163218
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
219+
google.golang.org/api v0.218.0 h1:x6JCjEWeZ9PFCRe9z0FBrNwj7pB7DOAqT35N+IPnAUA=
220+
google.golang.org/api v0.218.0/go.mod h1:5VGHBAkxrA/8EFjLVEYmMUJ8/8+gWWQ3s4cFH0FxG2M=
221+
google.golang.org/genproto v0.0.0-20241021214115-324edc3d5d38 h1:Q3nlH8iSQSRUwOskjbcSMcF2jiYMNiQYZ0c2KEJLKKU=
222+
google.golang.org/genproto v0.0.0-20241021214115-324edc3d5d38/go.mod h1:xBI+tzfqGGN2JBeSebfKXFSdBpWVQ7sLW40PTupVRm4=
223+
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q=
224+
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08=
225+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250122153221-138b5a5a4fd4 h1:yrTuav+chrF0zF/joFGICKTzYv7mh/gr9AgEXrVU8ao=
226+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250122153221-138b5a5a4fd4/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50=
227+
google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
228+
google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw=
229+
google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU=
230+
google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
164231
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
165232
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
166233
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

internal/config/model/llm/general.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type LLMConfig struct {
2828
Mistral MistralConfig `yaml:"mistral,omitempty" usage:"Mistral " llm:""`
2929
Anthropic AnthropicConfig `yaml:"anthropic,omitempty" usage:"Anthropic " llm:""`
3030
DeepSeek DeepSeekConfig `yaml:"deepseek,omitempty" usage:"DeepSeek " llm:""`
31+
Google GoogleAIConfig `yaml:"google,omitempty" usage:"Google " llm:""`
3132

3233
CallOptions CallOptionsConfig `yaml:"call,omitempty" usage:"Call option "`
3334
Tool tools.Config `yaml:"tool,omitempty"`
@@ -99,7 +100,7 @@ func (c *LLMConfig) BuildLLM() (common.Model, error) {
99100
return b.BuildLLM()
100101
}
101102

102-
func (c *LLMConfig) AsOptions(ctx context.Context) ([]langLLMS.CallOption, error) {
103+
func (c *LLMConfig) AsOptions(ctx context.Context, model common.Model) ([]langLLMS.CallOption, error) {
103104
mcpTools, err := c.Tool.GetTools(ctx)
104105
if err != nil {
105106
return nil, fmt.Errorf("failed to list mcp tools: %w", err)
@@ -125,6 +126,9 @@ func (c *LLMConfig) AsOptions(ctx context.Context) ([]langLLMS.CallOption, error
125126

126127
opts := c.CallOptions.AsOptions()
127128
if len(tools) > 0 {
129+
if err := model.PatchTools(&tools); err != nil {
130+
return nil, fmt.Errorf("failed to patch tools: %w", err)
131+
}
128132
opts = append(opts, langLLMS.WithTools(tools))
129133
}
130134
return opts, nil

0 commit comments

Comments
 (0)