56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
package service
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"strings"
|
|
"text/template"
|
|
)
|
|
|
|
type forcedCodexInstructionsTemplateData struct {
|
|
ExistingInstructions string
|
|
OriginalModel string
|
|
NormalizedModel string
|
|
BillingModel string
|
|
UpstreamModel string
|
|
}
|
|
|
|
func applyForcedCodexInstructionsTemplate(
|
|
reqBody map[string]any,
|
|
templateText string,
|
|
data forcedCodexInstructionsTemplateData,
|
|
) (bool, error) {
|
|
rendered, err := renderForcedCodexInstructionsTemplate(templateText, data)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
if rendered == "" {
|
|
return false, nil
|
|
}
|
|
|
|
existing, _ := reqBody["instructions"].(string)
|
|
if strings.TrimSpace(existing) == rendered {
|
|
return false, nil
|
|
}
|
|
|
|
reqBody["instructions"] = rendered
|
|
return true, nil
|
|
}
|
|
|
|
func renderForcedCodexInstructionsTemplate(
|
|
templateText string,
|
|
data forcedCodexInstructionsTemplateData,
|
|
) (string, error) {
|
|
tmpl, err := template.New("forced_codex_instructions").Option("missingkey=zero").Parse(templateText)
|
|
if err != nil {
|
|
return "", fmt.Errorf("parse forced codex instructions template: %w", err)
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
if err := tmpl.Execute(&buf, data); err != nil {
|
|
return "", fmt.Errorf("render forced codex instructions template: %w", err)
|
|
}
|
|
|
|
return strings.TrimSpace(buf.String()), nil
|
|
}
|