package main import ( "bytes" "encoding/json" "fmt" "io" "net/http" "strings" "time" "github.com/chzyer/readline" ) const ( apiURL = "https://router.ivastudio.verint.live/ProxyScript/run/67bca862210071627d32ef12/current/basic_messenger" blue = "\033[34m" green = "\033[32m" reset = "\033[0m" ) type Request struct { Input string `json:"input"` Model string `json:"model"` PreviousResponseID string `json:"previous_response_id,omitempty"` Metadata map[string]string `json:"metadata"` } type Response struct { ID string `json:"id"` Status string `json:"status"` Output []struct { Content []struct { Text string `json:"text"` } `json:"content"` } `json:"output"` } type Messenger struct { client *http.Client model string prevID string } func (m *Messenger) Send(input string) (string, error) { reqBody := Request{ Input: input, Model: m.model, PreviousResponseID: m.prevID, Metadata: map[string]string{"channel": "text"}, } data, _ := json.Marshal(reqBody) resp, err := m.client.Post(apiURL, "application/json", bytes.NewBuffer(data)) if err != nil { return "", err } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) var response Response if err := json.Unmarshal(body, &response); err != nil { return "", err } m.prevID = response.ID if response.Status != "completed" || len(response.Output) == 0 || len(response.Output[0].Content) == 0 { return "", fmt.Errorf("invalid response") } return response.Output[0].Content[0].Text, nil } func main() { fmt.Print("Enter model name (default: 'default'): ") var model string fmt.Scanln(&model) if model == "" { model = "default" } messenger := &Messenger{ client: &http.Client{Timeout: 10 * time.Second}, model: model, } fmt.Println("\n=== Terminal Messenger ===") fmt.Println("Use ↑/↓ arrows for history, type 'quit' to exit\n") rl, err := readline.NewEx(&readline.Config{ Prompt: blue + "You: " + reset, HistoryFile: "/tmp/messenger_history.tmp", }) if err != nil { fmt.Println("Error:", err) return } defer rl.Close() for { input, err := rl.Readline() if err != nil || strings.TrimSpace(input) == "quit" || strings.TrimSpace(input) == "exit" { break } input = strings.TrimSpace(input) if input == "" { continue } response, err := messenger.Send(input) if err != nil { fmt.Println("Error:", err) continue } fmt.Printf(green+"Assistant: %s"+reset+"\n\n", response) } fmt.Println("Goodbye!") }