Files
k8sgpt/pkg/ai/bedrock_support/responses.go
Alex Jones e5817f9e55 feat: old sonnet (#1408)
* chore: rebased
chore: removed trivy

Signed-off-by: AlexsJones <alexsimonjones@gmail.com>

* chore: updated deps

Signed-off-by: AlexsJones <alexsimonjones@gmail.com>

* fix: missing error

Signed-off-by: AlexsJones <alexsimonjones@gmail.com>

* fix: missing error

Signed-off-by: AlexsJones <alexsimonjones@gmail.com>

* feat: switching old sonnet to message API

Signed-off-by: AlexsJones <alexsimonjones@gmail.com>

---------

Signed-off-by: AlexsJones <alexsimonjones@gmail.com>
2025-03-28 13:51:47 +00:00

156 lines
3.7 KiB
Go

package bedrock_support
import (
"encoding/json"
)
type IResponse interface {
ParseResponse(rawResponse []byte) (string, error)
}
type CohereMessagesResponse struct {
response IResponse
}
func (a *CohereMessagesResponse) ParseResponse(rawResponse []byte) (string, error) {
type InvokeModelResponseBody struct {
ID string `json:"id"`
Type string `json:"type"`
Role string `json:"role"`
Model string `json:"model"`
Content []struct {
Type string `json:"type"`
Text string `json:"text"`
} `json:"content"`
StopReason string `json:"stop_reason"`
StopSequence interface{} `json:"stop_sequence"` // Could be null
Usage struct {
InputTokens int `json:"input_tokens"`
OutputTokens int `json:"output_tokens"`
} `json:"usage"`
}
output := &InvokeModelResponseBody{}
err := json.Unmarshal(rawResponse, output)
if err != nil {
return "", err
}
// Extract the text content from the Content array
var resultText string
for _, content := range output.Content {
if content.Type == "text" {
resultText += content.Text
}
}
return resultText, nil
}
type CohereResponse struct {
response IResponse
}
func (a *CohereResponse) ParseResponse(rawResponse []byte) (string, error) {
type InvokeModelResponseBody struct {
Completion string `json:"completion"`
Stop_reason string `json:"stop_reason"`
}
output := &InvokeModelResponseBody{}
err := json.Unmarshal(rawResponse, output)
if err != nil {
return "", err
}
return output.Completion, nil
}
type AI21Response struct {
response IResponse
}
func (a *AI21Response) ParseResponse(rawResponse []byte) (string, error) {
type Data struct {
Text string `json:"text"`
}
type Completion struct {
Data Data `json:"data"`
}
type InvokeModelResponseBody struct {
Completions []Completion `json:"completions"`
}
output := &InvokeModelResponseBody{}
err := json.Unmarshal(rawResponse, output)
if err != nil {
return "", err
}
return output.Completions[0].Data.Text, nil
}
type AmazonResponse struct {
response IResponse
}
type NovaResponse struct {
response NResponse
}
type NResponse interface {
ParseResponse(rawResponse []byte) (string, error)
}
func (a *AmazonResponse) ParseResponse(rawResponse []byte) (string, error) {
type Result struct {
TokenCount int `json:"tokenCount"`
OutputText string `json:"outputText"`
CompletionReason string `json:"completionReason"`
}
type InvokeModelResponseBody struct {
InputTextTokenCount int `json:"inputTextTokenCount"`
Results []Result `json:"results"`
}
output := &InvokeModelResponseBody{}
err := json.Unmarshal(rawResponse, output)
if err != nil {
return "", err
}
return output.Results[0].OutputText, nil
}
func (a *NovaResponse) ParseResponse(rawResponse []byte) (string, error) {
type Content struct {
Text string `json:"text"`
}
type Message struct {
Role string `json:"role"`
Content []Content `json:"content"`
}
type UsageDetails struct {
InputTokens int `json:"inputTokens"`
OutputTokens int `json:"outputTokens"`
TotalTokens int `json:"totalTokens"`
CacheReadInputTokenCount int `json:"cacheReadInputTokenCount"`
CacheWriteInputTokenCount int `json:"cacheWriteInputTokenCount,omitempty"`
}
type AmazonNovaResponse struct {
Output struct {
Message Message `json:"message"`
} `json:"output"`
StopReason string `json:"stopReason"`
Usage UsageDetails `json:"usage"`
}
response := &AmazonNovaResponse{}
err := json.Unmarshal(rawResponse, response)
if err != nil {
return "", err
}
if len(response.Output.Message.Content) > 0 {
return response.Output.Message.Content[0].Text, nil
}
return "", nil
}