| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- package apicompat
- import "encoding/json"
- func chatResponseFormatToResponsesTextFormat(raw json.RawMessage) json.RawMessage {
- raw = normalizedRawJSON(raw)
- if len(raw) == 0 {
- return nil
- }
- obj, ok := rawJSONObject(raw)
- if !ok || rawString(obj["type"]) != "json_schema" {
- return raw
- }
- schemaRaw := normalizedRawJSON(obj["json_schema"])
- if len(schemaRaw) == 0 {
- return raw
- }
- var schema map[string]json.RawMessage
- if err := json.Unmarshal(schemaRaw, &schema); err != nil {
- return raw
- }
- schema["type"] = rawJSONString("json_schema")
- out, err := json.Marshal(schema)
- if err != nil {
- return raw
- }
- return out
- }
- func responsesTextFormatToChatResponseFormat(raw json.RawMessage) json.RawMessage {
- raw = normalizedRawJSON(raw)
- if len(raw) == 0 {
- return nil
- }
- obj, ok := rawJSONObject(raw)
- if !ok || rawString(obj["type"]) != "json_schema" {
- return raw
- }
- if _, alreadyChatShape := obj["json_schema"]; alreadyChatShape {
- return raw
- }
- schema := make(map[string]json.RawMessage, len(obj))
- for key, value := range obj {
- if key == "type" {
- continue
- }
- schema[key] = value
- }
- if len(schema) == 0 {
- return raw
- }
- schemaRaw, err := json.Marshal(schema)
- if err != nil {
- return raw
- }
- out, err := json.Marshal(map[string]json.RawMessage{
- "type": rawJSONString("json_schema"),
- "json_schema": schemaRaw,
- })
- if err != nil {
- return raw
- }
- return out
- }
- func normalizedRawJSON(raw json.RawMessage) json.RawMessage {
- raw = bytesTrimSpace(raw)
- if len(raw) == 0 || string(raw) == "null" {
- return nil
- }
- return append(json.RawMessage(nil), raw...)
- }
- func rawJSONObject(raw json.RawMessage) (map[string]json.RawMessage, bool) {
- var obj map[string]json.RawMessage
- if err := json.Unmarshal(raw, &obj); err != nil {
- return nil, false
- }
- return obj, true
- }
- func rawJSONString(value string) json.RawMessage {
- data, _ := json.Marshal(value)
- return data
- }
|