OpenAI-compatible AI gateway with Vue admin UI, multi-provider egress, ingress key governance, monitoring, and security controls. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
package prediction
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math/big"
|
||||
)
|
||||
|
||||
func BuildPrompt(workflowJSON string, binding InputBinding, input map[string]any) (map[string]any, error) {
|
||||
var workflow map[string]any
|
||||
if err := json.Unmarshal([]byte(workflowJSON), &workflow); err != nil {
|
||||
return nil, fmt.Errorf("invalid workflow: %w", err)
|
||||
}
|
||||
prompt := deepCopyMap(workflow)
|
||||
for name, target := range binding {
|
||||
if target == nil || target.Node == "" || target.Field == "" {
|
||||
continue
|
||||
}
|
||||
val, ok := input[name]
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
if name == "seed" {
|
||||
if iv, ok := val.(int); ok && iv < 0 {
|
||||
n, _ := rand.Int(rand.Reader, big.NewInt(1<<31-1))
|
||||
val = int(n.Int64())
|
||||
}
|
||||
}
|
||||
node, ok := prompt[target.Node].(map[string]any)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("node %s not found", target.Node)
|
||||
}
|
||||
inputs, ok := node["inputs"].(map[string]any)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("node %s inputs missing", target.Node)
|
||||
}
|
||||
inputs[target.Field] = val
|
||||
}
|
||||
return prompt, nil
|
||||
}
|
||||
|
||||
func deepCopyMap(src map[string]any) map[string]any {
|
||||
b, _ := json.Marshal(src)
|
||||
var dst map[string]any
|
||||
_ = json.Unmarshal(b, &dst)
|
||||
return dst
|
||||
}
|
||||
Reference in New Issue
Block a user