sync: migrate ai-operator to Gitea (2026-08-10)
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
package realtime
|
||||
|
||||
import (
|
||||
"ai-operator/internal/ai"
|
||||
"ai-operator/internal/audio"
|
||||
"ai-operator/internal/config"
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
func BuildSessionUpdate(cfg config.OpenAIConfig, instructions string) ([]byte, error) {
|
||||
session := map[string]any{"type": "realtime", "model": cfg.RealtimeModel, "instructions": instructions, "audio": map[string]any{"input": map[string]any{"format": map[string]any{"type": "audio/pcm", "rate": cfg.RealtimeInputSampleRate}, "turn_detection": map[string]any{"type": cfg.RealtimeTurnDetection}}, "output": map[string]any{"format": map[string]any{"type": "audio/pcm", "rate": cfg.RealtimeOutputSampleRate}}}, "reasoning": map[string]any{"effort": cfg.RealtimeReasoningEffort}}
|
||||
if cfg.RealtimeVoice != "" {
|
||||
session["audio"].(map[string]any)["output"].(map[string]any)["voice"] = cfg.RealtimeVoice
|
||||
}
|
||||
return json.Marshal(map[string]any{"type": "session.update", "session": session})
|
||||
}
|
||||
func BuildAudioAppend(pcm []byte) ([]byte, error) {
|
||||
return json.Marshal(map[string]any{"type": "input_audio_buffer.append", "audio": audio.Base64Encode(pcm)})
|
||||
}
|
||||
func BuildCommit() ([]byte, error) {
|
||||
return json.Marshal(map[string]any{"type": "input_audio_buffer.commit"})
|
||||
}
|
||||
func BuildResponseCreate() ([]byte, error) {
|
||||
return json.Marshal(map[string]any{"type": "response.create"})
|
||||
}
|
||||
func BuildResponseCreateWithInstructions(instructions string) ([]byte, error) {
|
||||
if instructions == "" {
|
||||
return BuildResponseCreate()
|
||||
}
|
||||
return json.Marshal(map[string]any{"type": "response.create", "response": map[string]any{"instructions": instructions}})
|
||||
}
|
||||
func BuildResponseCancel() ([]byte, error) {
|
||||
return json.Marshal(map[string]any{"type": "response.cancel"})
|
||||
}
|
||||
func BuildInputAudioClear() ([]byte, error) {
|
||||
return json.Marshal(map[string]any{"type": "input_audio_buffer.clear"})
|
||||
}
|
||||
func BuildToolResult(result ai.ToolResult) ([]byte, error) {
|
||||
b, _ := json.Marshal(result.Result)
|
||||
if result.Error != "" {
|
||||
b = []byte(result.Error)
|
||||
}
|
||||
return json.Marshal(map[string]any{"type": "conversation.item.create", "item": map[string]any{"type": "function_call_output", "call_id": result.ToolCallID, "output": string(b)}})
|
||||
}
|
||||
Reference in New Issue
Block a user