first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:52:23 +03:00
commit 880f412e2c
2662 changed files with 866266 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
package schemas
import (
"bytes"
"encoding/json"
"strings"
)
// ParseRealtimeClientSecretBody parses a realtime client-secret request body
// into a mutable raw JSON map while preserving unknown fields.
func ParseRealtimeClientSecretBody(raw json.RawMessage) (map[string]json.RawMessage, *BifrostError) {
var root map[string]json.RawMessage
if err := Unmarshal(raw, &root); err != nil {
return nil, NewRealtimeClientSecretBodyError(400, "invalid_request_error", "invalid JSON body", err)
}
return root, nil
}
// ExtractRealtimeClientSecretModel extracts the model from either session.model
// or the legacy top-level model field.
func ExtractRealtimeClientSecretModel(root map[string]json.RawMessage) (string, *BifrostError) {
if sessionJSON, ok := root["session"]; ok && len(sessionJSON) > 0 && !bytes.Equal(sessionJSON, []byte("null")) {
var session map[string]json.RawMessage
if err := Unmarshal(sessionJSON, &session); err != nil {
return "", NewRealtimeClientSecretBodyError(400, "invalid_request_error", "session must be an object", err)
}
if modelJSON, ok := session["model"]; ok {
var sessionModel string
if err := Unmarshal(modelJSON, &sessionModel); err != nil {
return "", NewRealtimeClientSecretBodyError(400, "invalid_request_error", "session.model must be a string", err)
}
if strings.TrimSpace(sessionModel) != "" {
return strings.TrimSpace(sessionModel), nil
}
}
}
if modelJSON, ok := root["model"]; ok {
var model string
if err := Unmarshal(modelJSON, &model); err != nil {
return "", NewRealtimeClientSecretBodyError(400, "invalid_request_error", "model must be a string", err)
}
if strings.TrimSpace(model) != "" {
return strings.TrimSpace(model), nil
}
}
return "", NewRealtimeClientSecretBodyError(400, "invalid_request_error", "session.model or model is required", nil)
}
// NewRealtimeClientSecretBodyError builds a standard invalid-request style error
// for HTTP realtime client-secret request parsing/validation.
func NewRealtimeClientSecretBodyError(status int, errorType, message string, err error) *BifrostError {
return &BifrostError{
IsBifrostError: false,
StatusCode: Ptr(status),
Error: &ErrorField{
Type: Ptr(errorType),
Message: message,
Error: err,
},
ExtraFields: BifrostErrorExtraFields{
RequestType: RealtimeRequest,
},
}
}