@@ -2,23 +2,69 @@ package v1
22
33import (
44 "context"
5+ "encoding/json"
56
67 "connectrpc.com/connect"
8+ "github.com/missingstudio/studio/backend/models"
9+ "github.com/missingstudio/studio/common/errors"
710 llmv1 "github.com/missingstudio/studio/protos/pkg/llm"
811 "google.golang.org/protobuf/types/known/emptypb"
12+ "google.golang.org/protobuf/types/known/structpb"
913)
1014
1115func (s * V1Handler ) ListProviders (ctx context.Context , req * connect.Request [emptypb.Empty ]) (* connect.Response [llmv1.ProvidersResponse ], error ) {
1216 providers := s .providerService .GetProviders ()
1317
1418 data := []* llmv1.Provider {}
15- for name := range providers {
19+ for _ , provider := range providers {
20+ providerInfo := provider .Info ()
1621 data = append (data , & llmv1.Provider {
17- Name : name ,
22+ Title : providerInfo .Title ,
23+ Name : providerInfo .Name ,
24+ Description : providerInfo .Description ,
1825 })
1926 }
2027
2128 return connect .NewResponse (& llmv1.ProvidersResponse {
2229 Providers : data ,
2330 }), nil
2431}
32+
33+ func (s * V1Handler ) GetProviderById (ctx context.Context , req * connect.Request [llmv1.GetProviderRequest ]) (* connect.Response [llmv1.GetProviderResponse ], error ) {
34+ provider , err := s .providerService .GetProvider (models.Connection {Name : req .Msg .Id })
35+ if err != nil {
36+ return nil , errors .NewNotFound (err .Error ())
37+ }
38+
39+ info := provider .Info ()
40+ p := & llmv1.Provider {
41+ Title : info .Title ,
42+ Name : info .Name ,
43+ Description : info .Description ,
44+ }
45+
46+ return connect .NewResponse (& llmv1.GetProviderResponse {
47+ Provider : p ,
48+ }), nil
49+ }
50+
51+ func (s * V1Handler ) GetProviderConfig (ctx context.Context , req * connect.Request [llmv1.GetProviderConfigRequest ]) (* connect.Response [llmv1.GetProviderConfigResponse ], error ) {
52+ provider , err := s .providerService .GetProvider (models.Connection {Name : req .Msg .Id })
53+ if err != nil {
54+ return nil , errors .NewNotFound (err .Error ())
55+ }
56+
57+ configs := map [string ]any {}
58+ if err := json .Unmarshal (provider .Schema (), & configs ); err != nil {
59+ return nil , errors .NewInternalError (err .Error ())
60+ }
61+
62+ stConfigs , err := structpb .NewStruct (configs )
63+ if err != nil {
64+ return nil , errors .NewInternalError (err .Error ())
65+ }
66+
67+ return connect .NewResponse (& llmv1.GetProviderConfigResponse {
68+ Config : stConfigs ,
69+ }), nil
70+ }
0 commit comments