4Z API

GPT Realtime API

# example requires websocket-client library:
# pip install websocket-client

import os
import json
import websocket


url = "ws://4zapi.com/v1/realtime?model=gpt-realtime-2025-08-28"
headers = [
    "Authorization: Bearer sk-xxx" ,
    "OpenAI-Beta: realtime=v1"
]

def decode_unicode_string(s):
    """Decode Unicode so non-ASCII text is readable"""
    try:
        if isinstance(s, bytes):
            return s.decode('utf-8')
        return s.encode('latin1').decode('utf-8')
    except Exception as e:
        print(f"Decode failed: {e}")
        return s

def on_error(ws, error):
    print("\n=== Error ===")
    print(f"{error}")
    
def on_close(ws, close_status_code, close_msg):
    print("\n=== Connection closed ===")
    print(f"Status: {close_status_code}")
    print(f"Message: {close_msg}")

def on_open(ws):
    print("\n=== Connected ===")
    
    event = {
        "type": "response.create",
        "response": {
            "modalities": ["text"],
            "instructions": "Please assist the user."
        }
    }
    print("\n=== Sending ===")
    print(json.dumps(event, ensure_ascii=False, indent=2))
    ws.send(json.dumps(event))

def on_message(ws, message):
    print("\n=== Message received ===")
    try:
        data = json.loads(message)
        if 'error' in data and 'message' in data['error']:
            data['error']['message'] = decode_unicode_string(data['error']['message'])
        
        print(json.dumps(data, ensure_ascii=False, indent=2))
        
        if data.get('type') == 'error':
            print("\n=== Error summary ===")
            print(f"Type: {data['error'].get('type', 'unknown')}")
            print(f"Code: {data['error'].get('code', 'unknown')}")
            error_message = decode_unicode_string(data['error'].get('message', 'unknown'))
            print(f"Message: {error_message}")
            
    except json.JSONDecodeError as e:
        print(f"Failed to parse message: {message}")
        print(f"Error: {e}")

# Enable websocket logging only for key info
websocket.enableTrace(False)

ws = websocket.WebSocketApp(
    url,
    header=headers,
    on_open=on_open,
    on_message=on_message,
    on_error=on_error,
    on_close=on_close
)

print("\n=== Connecting ===")
print(f"URL: {url}")
ws.run_forever()