mirror of
https://github.com/k8sgpt-ai/k8sgpt.git
synced 2025-05-05 22:57:06 +00:00
71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
package query
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
schemav1 "buf.build/gen/go/k8sgpt-ai/k8sgpt/protocolbuffers/go/schema/v1"
|
|
"github.com/k8sgpt-ai/k8sgpt/pkg/ai"
|
|
)
|
|
|
|
func (h *Handler) Query(ctx context.Context, i *schemav1.QueryRequest) (
|
|
*schemav1.QueryResponse,
|
|
error,
|
|
) {
|
|
// Create client factory and config provider
|
|
factory := ai.GetAIClientFactory()
|
|
configProvider := ai.GetConfigProvider()
|
|
|
|
// Use the factory to create the client
|
|
aiClient := factory.NewClient(i.Backend)
|
|
defer aiClient.Close()
|
|
|
|
var configAI ai.AIConfiguration
|
|
if err := configProvider.UnmarshalKey("ai", &configAI); err != nil {
|
|
return &schemav1.QueryResponse{
|
|
Response: "",
|
|
Error: &schemav1.QueryError{
|
|
Message: fmt.Sprintf("Failed to unmarshal AI configuration: %v", err),
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
var aiProvider ai.AIProvider
|
|
for _, provider := range configAI.Providers {
|
|
if i.Backend == provider.Name {
|
|
aiProvider = provider
|
|
break
|
|
}
|
|
}
|
|
if aiProvider.Name == "" {
|
|
return &schemav1.QueryResponse{
|
|
Response: "",
|
|
Error: &schemav1.QueryError{
|
|
Message: fmt.Sprintf("AI provider %s not found in configuration", i.Backend),
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
// Configure the AI client
|
|
if err := aiClient.Configure(&aiProvider); err != nil {
|
|
return &schemav1.QueryResponse{
|
|
Response: "",
|
|
Error: &schemav1.QueryError{
|
|
Message: fmt.Sprintf("Failed to configure AI client: %v", err),
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
resp, err := aiClient.GetCompletion(ctx, i.Query)
|
|
var errMessage string = ""
|
|
if err != nil {
|
|
errMessage = err.Error()
|
|
}
|
|
return &schemav1.QueryResponse{
|
|
Response: resp,
|
|
Error: &schemav1.QueryError{
|
|
Message: errMessage,
|
|
},
|
|
}, nil
|
|
}
|