Skip to content

Commit 7aee651

Browse files
committed
feat(model): support volcengine-maas
1 parent b38ab95 commit 7aee651

File tree

5 files changed

+207
-19
lines changed

5 files changed

+207
-19
lines changed

backend/application/base/appinfra/modelmgr.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ import (
2828
"github.com/coze-dev/coze-studio/backend/infra/contract/chatmodel"
2929
"github.com/coze-dev/coze-studio/backend/infra/contract/modelmgr"
3030
"github.com/coze-dev/coze-studio/backend/infra/impl/modelmgr/static"
31+
"github.com/coze-dev/coze-studio/backend/infra/impl/modelmgr/volcengine_maas"
3132
"github.com/coze-dev/coze-studio/backend/pkg/logs"
33+
"github.com/coze-dev/coze-studio/backend/types/consts"
3234
)
3335

3436
func initModelMgr() (modelmgr.Manager, error) {
@@ -37,6 +39,15 @@ func initModelMgr() (modelmgr.Manager, error) {
3739
return nil, err
3840
}
3941

42+
modelProvider := os.Getenv(consts.ModelProvider)
43+
if modelProvider == consts.ModelProviderVolcengineMAAS {
44+
staticModel, err := initModelByTemplate(wd, "resources/conf/model/template")
45+
if err != nil {
46+
return nil, err
47+
}
48+
return volcengine_maas.NewModelMgr(staticModel)
49+
}
50+
4051
staticModel, err := initModelByTemplate(wd, "resources/conf/model")
4152
if err != nil {
4253
return nil, err

backend/go.mod

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,11 @@ require (
128128
github.com/beorn7/perks v1.0.1 // indirect
129129
github.com/blang/semver/v4 v4.0.0 // indirect
130130
github.com/bytedance/gopkg v0.1.1
131-
github.com/bytedance/sonic/loader v0.2.4 // indirect
131+
github.com/bytedance/sonic/loader v0.3.0 // indirect
132132
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
133133
github.com/cespare/xxhash/v2 v2.3.0 // indirect
134134
github.com/cilium/ebpf v0.11.0 // indirect
135-
github.com/cloudwego/base64x v0.1.5 // indirect
135+
github.com/cloudwego/base64x v0.1.6 // indirect
136136
github.com/cloudwego/netpoll v0.7.0 // indirect
137137
github.com/cockroachdb/errors v1.9.1 // indirect
138138
github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f // indirect
@@ -193,7 +193,7 @@ require (
193193
github.com/json-iterator/go v1.1.12 // indirect
194194
github.com/jtolds/gls v4.20.0+incompatible // indirect
195195
github.com/klauspost/compress v1.18.0 // indirect
196-
github.com/klauspost/cpuid/v2 v2.2.10 // indirect
196+
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
197197
github.com/kr/pretty v0.3.1 // indirect
198198
github.com/kr/text v0.2.0 // indirect
199199
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
@@ -275,10 +275,10 @@ require (
275275
go.uber.org/automaxprocs v1.5.3 // indirect
276276
go.uber.org/multierr v1.11.0 // indirect
277277
go.uber.org/zap v1.27.0 // indirect
278-
golang.org/x/arch v0.15.0 // indirect
278+
golang.org/x/arch v0.20.0 // indirect
279279
golang.org/x/crypto v0.39.0
280280
golang.org/x/net v0.41.0 // indirect
281-
golang.org/x/sys v0.33.0 // indirect
281+
golang.org/x/sys v0.35.0 // indirect
282282
golang.org/x/text v0.26.0 // indirect
283283
golang.org/x/time v0.11.0 // indirect
284284
golang.org/x/tools v0.33.0 // indirect

backend/go.sum

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -892,9 +892,8 @@ github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1
892892
github.com/bytedance/sonic v1.8.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
893893
github.com/bytedance/sonic v1.13.2 h1:8/H1FempDZqC4VqjptGo14QQlJx8VdZJegxs6wwfqpQ=
894894
github.com/bytedance/sonic v1.13.2/go.mod h1:o68xyaF9u2gvVBuGHPlUVCy+ZfmNNO5ETf1+KgkJhz4=
895-
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
896-
github.com/bytedance/sonic/loader v0.2.4 h1:ZWCw4stuXUsn1/+zQDqeE7JKP+QO47tz7QCNan80NzY=
897-
github.com/bytedance/sonic/loader v0.2.4/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
895+
github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA=
896+
github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
898897
github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg=
899898
github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
900899
github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
@@ -922,8 +921,8 @@ github.com/cilium/ebpf v0.11.0/go.mod h1:WE7CZAnqOL2RouJ4f1uyNhqr2P4CCvXFIqdRDUg
922921
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
923922
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
924923
github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng=
925-
github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4=
926-
github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
924+
github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M=
925+
github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU=
927926
github.com/cloudwego/eino v0.3.55 h1:lMZrGtEh0k3qykQTLNXSXuAa98OtF2tS43GMHyvN7nA=
928927
github.com/cloudwego/eino v0.3.55/go.mod h1:wUjz990apdsaOraOXdh6CdhVXq8DJsOvLsVlxNTcNfY=
929928
github.com/cloudwego/eino-ext/components/embedding/ark v0.1.0 h1:AuJsMdaTXc+dGUDQp82MifLYK8oiJf4gLQPUETmKISM=
@@ -953,7 +952,6 @@ github.com/cloudwego/gopkg v0.1.4/go.mod h1:FQuXsRWRsSqJLsMVd5SYzp8/Z1y5gXKnVvRr
953952
github.com/cloudwego/hertz v0.6.2/go.mod h1:2em2hGREvCBawsTQcQxyWBGVlCeo+N1pp2q0HkkbwR0=
954953
github.com/cloudwego/hertz v0.10.0 h1:V0vmBaLdQPlgL6w2TA6PZL1g6SGgQznFx6vqxWdCcKw=
955954
github.com/cloudwego/hertz v0.10.0/go.mod h1:lRBohmcDkGx5TLK6QKFGdzJ6n3IXqGueHsOiXcYgXA4=
956-
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
957955
github.com/cloudwego/netpoll v0.3.1/go.mod h1:1T2WVuQ+MQw6h6DpE45MohSvDTKdy2DlzCx2KsnPI4E=
958956
github.com/cloudwego/netpoll v0.7.0 h1:bDrxQaNfijRI1zyGgXHQoE/nYegL0nr+ijO1Norelc4=
959957
github.com/cloudwego/netpoll v0.7.0/go.mod h1:PI+YrmyS7cIr0+SD4seJz3Eo3ckkXdu2ZVKBLhURLNU=
@@ -1470,9 +1468,8 @@ github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYW
14701468
github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
14711469
github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
14721470
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
1473-
github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE=
1474-
github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
1475-
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
1471+
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
1472+
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
14761473
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
14771474
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
14781475
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
@@ -2010,8 +2007,8 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
20102007
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
20112008
golang.org/x/arch v0.0.0-20201008161808-52c3e6f60cff/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4=
20122009
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
2013-
golang.org/x/arch v0.15.0 h1:QtOrQd0bTUnhNVNndMpLHNWrDmYzZ2KDqSrEymqInZw=
2014-
golang.org/x/arch v0.15.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE=
2010+
golang.org/x/arch v0.20.0 h1:dx1zTU0MAE98U+TQ8BLl7XsJbgze2WnNKF/8tGp/Q6c=
2011+
golang.org/x/arch v0.20.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk=
20152012
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
20162013
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
20172014
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -2388,8 +2385,8 @@ golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
23882385
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
23892386
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
23902387
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
2391-
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
2392-
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
2388+
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
2389+
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
23932390
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
23942391
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
23952392
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -2943,7 +2940,6 @@ modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
29432940
modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
29442941
modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
29452942
modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8=
2946-
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
29472943
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
29482944
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
29492945
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
/*
2+
* Copyright 2025 coze-dev Authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package volcengine_maas
18+
19+
import (
20+
"context"
21+
"fmt"
22+
"os"
23+
"strconv"
24+
"strings"
25+
26+
"github.com/coze-dev/coze-studio/backend/infra/contract/chatmodel"
27+
"github.com/coze-dev/coze-studio/backend/infra/contract/modelmgr"
28+
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
29+
"github.com/coze-dev/coze-studio/backend/pkg/lang/sets"
30+
"github.com/coze-dev/coze-studio/backend/types/consts"
31+
"github.com/volcengine/volcengine-go-sdk/service/ark"
32+
"github.com/volcengine/volcengine-go-sdk/volcengine"
33+
"github.com/volcengine/volcengine-go-sdk/volcengine/credentials"
34+
"github.com/volcengine/volcengine-go-sdk/volcengine/session"
35+
)
36+
37+
var _ modelmgr.Manager = (*volcModelManager)(nil)
38+
39+
type volcModelManager struct {
40+
models []*modelmgr.Model
41+
modelMapping map[int64]*modelmgr.Model
42+
arkClient *ark.ARK
43+
}
44+
45+
func NewModelMgr(staticModels []*modelmgr.Model) (modelmgr.Manager, error) {
46+
47+
cfg := volcengine.NewConfig().
48+
WithCredentials(credentials.NewStaticCredentials(os.Getenv(consts.VolcengineMAASAccessKey), os.Getenv(consts.VolcengineMAASSecretKey), "")).
49+
WithRegion(os.Getenv(consts.VolcengineMAASRegion))
50+
51+
sess, err := session.NewSession(cfg)
52+
if err != nil {
53+
return nil, err
54+
}
55+
svc := ark.New(sess)
56+
57+
mapping := make(map[int64]*modelmgr.Model, len(staticModels))
58+
for i := range staticModels {
59+
mapping[staticModels[i].ID] = staticModels[i]
60+
}
61+
62+
manager := &volcModelManager{
63+
arkClient: svc,
64+
models: staticModels,
65+
modelMapping: mapping,
66+
}
67+
manager.initModelList(context.Background())
68+
return manager, nil
69+
}
70+
71+
func (v *volcModelManager) initModelList(ctx context.Context) error {
72+
newModels := make([]*modelmgr.Model, 0)
73+
for i := range v.models {
74+
m := v.models[i]
75+
if m.Meta.Protocol != chatmodel.ProtocolArk || !strings.Contains(m.Meta.ConnConfig.BaseURL, "volces") {
76+
continue
77+
}
78+
item, err := v.listEndpoints(ctx, m.Name)
79+
if err != nil {
80+
continue
81+
}
82+
m.Meta.ConnConfig.Model = *item.Id
83+
m.Meta.ConnConfig.APIKey = os.Getenv(consts.VolcengineMAASAPIKey)
84+
m.Meta.Status = modelmgr.StatusInUse
85+
newModels = append(newModels, m)
86+
}
87+
v.models = newModels
88+
mapping := make(map[int64]*modelmgr.Model, len(newModels))
89+
for i := range newModels {
90+
mapping[newModels[i].ID] = newModels[i]
91+
}
92+
v.modelMapping = mapping
93+
return nil
94+
}
95+
96+
func (v *volcModelManager) listEndpoints(ctx context.Context, modelName string) (*ark.ItemForListEndpointsOutput, error) {
97+
m := strings.ReplaceAll(strings.ReplaceAll(modelName, ".", "-"), "-VolcEngine", "")
98+
input := &ark.ListEndpointsInput{
99+
Filter: &ark.FilterForListEndpointsInput{
100+
FoundationModelName: volcengine.String(m),
101+
},
102+
}
103+
resp, err := v.arkClient.ListEndpointsWithContext(ctx, input)
104+
if err != nil {
105+
return nil, err
106+
}
107+
if len(resp.Items) == 0 {
108+
return nil, fmt.Errorf("model %s not found", modelName)
109+
}
110+
return resp.Items[0], nil
111+
}
112+
113+
func (v *volcModelManager) ListModel(ctx context.Context, req *modelmgr.ListModelRequest) (*modelmgr.ListModelResponse, error) {
114+
startIdx := 0
115+
if req.Cursor != nil {
116+
start, err := strconv.ParseInt(*req.Cursor, 10, 64)
117+
if err != nil {
118+
return nil, err
119+
}
120+
startIdx = int(start)
121+
}
122+
123+
limit := req.Limit
124+
if limit == 0 {
125+
limit = 100
126+
}
127+
128+
var (
129+
i int
130+
respList []*modelmgr.Model
131+
statSet = sets.FromSlice(req.Status)
132+
)
133+
134+
for i = startIdx; i < len(v.models) && len(respList) < limit; i++ {
135+
m := v.models[i]
136+
if req.FuzzyModelName != nil && !strings.Contains(m.Name, *req.FuzzyModelName) {
137+
continue
138+
}
139+
if len(statSet) > 0 && !statSet.Contains(m.Meta.Status) {
140+
continue
141+
}
142+
respList = append(respList, m)
143+
}
144+
145+
resp := &modelmgr.ListModelResponse{
146+
ModelList: respList,
147+
}
148+
resp.HasMore = i != len(v.models)
149+
if resp.HasMore {
150+
resp.NextCursor = ptr.Of(strconv.FormatInt(int64(i), 10))
151+
}
152+
153+
return resp, nil
154+
}
155+
156+
func (v *volcModelManager) ListInUseModel(ctx context.Context, limit int, Cursor *string) (*modelmgr.ListModelResponse, error) {
157+
return v.ListModel(ctx, &modelmgr.ListModelRequest{
158+
Status: []modelmgr.ModelStatus{modelmgr.StatusInUse},
159+
Limit: limit,
160+
Cursor: Cursor,
161+
})
162+
}
163+
164+
func (v *volcModelManager) MGetModelByID(ctx context.Context, req *modelmgr.MGetModelRequest) ([]*modelmgr.Model, error) {
165+
resp := make([]*modelmgr.Model, 0)
166+
for _, id := range req.IDs {
167+
if m, found := v.modelMapping[id]; found {
168+
resp = append(resp, m)
169+
}
170+
}
171+
return resp, nil
172+
}

backend/types/consts/consts.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,15 @@ const (
8787
UseSSL = "USE_SSL"
8888
SSLCertFile = "SSL_CERT_FILE"
8989
SSLKeyFile = "SSL_KEY_FILE"
90+
91+
ModelProvider = "MODEL_PROVIDER"
92+
ModelProviderVolcengineMAAS = "volcengine_maas"
93+
ModelProviderStatic = "static"
94+
95+
VolcengineMAASAccessKey = "VOLCENGINE_MAAS_ACCESS_KEY"
96+
VolcengineMAASSecretKey = "VOLCENGINE_MAAS_SECRET_KEY"
97+
VolcengineMAASRegion = "VOLCENGINE_MAAS_REGION"
98+
VolcengineMAASAPIKey = "VOLCENGINE_MAAS_API_KEY"
9099
)
91100

92101
const (

0 commit comments

Comments
 (0)