{"asyncapi":"3.1.0","info":{"title":"C-elo Streaming ASR","version":"1.0.0","description":"Bidirectional WebSocket protocol for Kikuyu and Dholuo PCM16 streaming transcription."},"defaultContentType":"application/json","channels":{"stream":{"address":"/","description":"Use the websocket_url and websocket_protocols returned by POST /v1/asr/sessions.","bindings":{"ws":{"method":"GET","headers":{"type":"object","properties":{"Sec-WebSocket-Protocol":{"type":"string","description":"The ordered values returned as websocket_protocols by POST /v1/asr/sessions.","pattern":"^celo\\.realtime\\.v1,\\s*celo\\.auth\\.[A-Za-z0-9._~-]+$"}},"required":["Sec-WebSocket-Protocol"]},"bindingVersion":"0.1.0"}},"messages":{"config":{"$ref":"#/components/messages/Config"},"flush":{"$ref":"#/components/messages/Flush"},"reset":{"$ref":"#/components/messages/Reset"},"audio":{"$ref":"#/components/messages/Audio"},"ready":{"$ref":"#/components/messages/Ready"},"transcript":{"$ref":"#/components/messages/Transcript"},"error":{"$ref":"#/components/messages/Error"},"status":{"$ref":"#/components/messages/Status"}}}},"operations":{"sendAudio":{"action":"send","channel":{"$ref":"#/channels/stream"},"messages":[{"$ref":"#/channels/stream/messages/config"},{"$ref":"#/channels/stream/messages/flush"},{"$ref":"#/channels/stream/messages/reset"},{"$ref":"#/channels/stream/messages/audio"}]},"receiveTranscripts":{"action":"receive","channel":{"$ref":"#/channels/stream"},"messages":[{"$ref":"#/channels/stream/messages/config"},{"$ref":"#/channels/stream/messages/reset"},{"$ref":"#/channels/stream/messages/ready"},{"$ref":"#/channels/stream/messages/transcript"},{"$ref":"#/channels/stream/messages/error"},{"$ref":"#/channels/stream/messages/status"}]}},"components":{"messages":{"Config":{"name":"config","title":"Stream configuration","contentType":"application/json","payload":{"type":"object","additionalProperties":false,"properties":{"type":{"const":"config"},"language":{"const":"sw-KE","description":"Optional. When omitted, the server uses its configured language."},"att_context_size":{"const":"[56,13]","description":"Optional. When omitted, the server uses its fixed attention context."}},"required":["type"]}},"Flush":{"name":"flush","title":"Flush buffered audio","contentType":"application/json","payload":{"type":"object","additionalProperties":false,"properties":{"type":{"const":"flush"}},"required":["type"]}},"Reset":{"name":"reset","title":"Reset the current utterance","contentType":"application/json","payload":{"type":"object","additionalProperties":false,"properties":{"type":{"const":"reset"}},"required":["type"]}},"Audio":{"name":"audio","title":"PCM audio frame","contentType":"application/octet-stream","description":"Little-endian signed 16-bit mono PCM at 16 kHz. Each binary frame must be at most 65,536 bytes and have an even byte count.","payload":{"type":"string","format":"binary"}},"Ready":{"name":"ready","title":"Stream ready","contentType":"application/json","payload":{"type":"object","additionalProperties":false,"properties":{"type":{"const":"ready"},"language":{"const":"sw-KE"},"att_context_size":{"const":"[56,13]"},"chunk_samples":{"type":"integer"}},"required":["type","language","att_context_size","chunk_samples"]}},"Transcript":{"name":"transcript","title":"Partial or final transcript","contentType":"application/json","payload":{"type":"object","additionalProperties":false,"properties":{"type":{"enum":["delta","final"]},"text":{"type":"string"}},"required":["type","text"]}},"Error":{"name":"error","title":"Stream error","contentType":"application/json","payload":{"type":"object","additionalProperties":false,"properties":{"type":{"const":"error"},"message":{"type":"string"}},"required":["type","message"]}},"Status":{"name":"status","title":"Session status","contentType":"application/json","payload":{"type":"object","additionalProperties":false,"properties":{"type":{"const":"status"},"message":{"type":"string"}},"required":["type","message"]}}}}}