asyncapi: 3.0.0
info:
  title: SLNG Gateway API - Gradium STT
  version: 0.1.0
  description: Real-time multilingual speech-to-text via streaming WebSocket
  contact:
    name: SLNG Support
    url: https://slng.ai
    email: support@slng.ai
  license:
    name: Proprietary
  tags: []
servers:
  production:
    host: api.slng.ai
    protocol: wss
    description: Production
    security:
      - $ref: "#/components/securitySchemes/bearer"
  staging:
    host: stageapi.slng.ai
    protocol: wss
    description: Staging
    security:
      - $ref: "#/components/securitySchemes/bearer"
channels:
  /v1/stt/gradium/stt:default:
    address: /v1/stt/gradium/stt:default
    title: Gradium STT default
    summary: Real-time multilingual speech-to-text via streaming WebSocket
    description: Real-time multilingual speech-to-text via streaming WebSocket
    tags:
      - name: Gradium STT
    servers:
      - $ref: "#/servers/production"
      - $ref: "#/servers/staging"
    messages:
      GradiumSttDefaultSetup:
        $ref: "#/components/messages/GradiumSttDefaultSetup"
      GradiumSttDefaultAudio:
        $ref: "#/components/messages/GradiumSttDefaultAudio"
      GradiumSttDefaultFlush:
        $ref: "#/components/messages/GradiumSttDefaultFlush"
      GradiumSttDefaultEndOfStream:
        $ref: "#/components/messages/GradiumSttDefaultEndOfStream"
      GradiumSttDefaultText:
        $ref: "#/components/messages/GradiumSttDefaultText"
      GradiumSttDefaultEndText:
        $ref: "#/components/messages/GradiumSttDefaultEndText"
      GradiumSttDefaultError:
        $ref: "#/components/messages/GradiumSttDefaultError"
    bindings:
      ws:
        method: GET
        headers:
          $ref: "#/components/schemas/WebsocketHeadersGradium"
operations:
  sttGradiumSttDefaultReceiveSetup:
    action: receive
    channel:
      $ref: "#/channels/~1v1~1stt~1gradium~1stt:default"
    summary: Send Setup on Gradium Gradium STT default
    description: Initialize the transcription stream. Must be the first message.
    messages:
      - $ref: "#/channels/~1v1~1stt~1gradium~1stt:default/messages/GradiumSttDefaultSetup"
    tags: []
  sttGradiumSttDefaultReceiveAudio:
    action: receive
    channel:
      $ref: "#/channels/~1v1~1stt~1gradium~1stt:default"
    summary: Send Audio on Gradium Gradium STT default
    description: A chunk of base64-encoded audio bytes.
    messages:
      - $ref: "#/channels/~1v1~1stt~1gradium~1stt:default/messages/GradiumSttDefaultAudio"
    tags: []
  sttGradiumSttDefaultReceiveFlush:
    action: receive
    channel:
      $ref: "#/channels/~1v1~1stt~1gradium~1stt:default"
    summary: Send Flush on Gradium Gradium STT default
    description: Force-finalize buffered audio without closing the stream.
    messages:
      - $ref: "#/channels/~1v1~1stt~1gradium~1stt:default/messages/GradiumSttDefaultFlush"
    tags: []
  sttGradiumSttDefaultReceiveEndOfStream:
    action: receive
    channel:
      $ref: "#/channels/~1v1~1stt~1gradium~1stt:default"
    summary: Send EndOfStream on Gradium Gradium STT default
    description: Signal end of the audio stream.
    messages:
      - $ref: "#/channels/~1v1~1stt~1gradium~1stt:default/messages/GradiumSttDefaultEndOfStream"
    tags: []
  sttGradiumSttDefaultSendText:
    action: send
    channel:
      $ref: "#/channels/~1v1~1stt~1gradium~1stt:default"
    summary: Receive Text on Gradium Gradium STT default
    description: A finalized transcribed text segment.
    messages:
      - $ref: "#/channels/~1v1~1stt~1gradium~1stt:default/messages/GradiumSttDefaultText"
    tags: []
  sttGradiumSttDefaultSendEndText:
    action: send
    channel:
      $ref: "#/channels/~1v1~1stt~1gradium~1stt:default"
    summary: Receive EndText on Gradium Gradium STT default
    description: Marks the end of a transcribed text segment.
    messages:
      - $ref: "#/channels/~1v1~1stt~1gradium~1stt:default/messages/GradiumSttDefaultEndText"
    tags: []
  sttGradiumSttDefaultSendError:
    action: send
    channel:
      $ref: "#/channels/~1v1~1stt~1gradium~1stt:default"
    summary: Receive Error on Gradium Gradium STT default
    description: Terminal error.
    messages:
      - $ref: "#/channels/~1v1~1stt~1gradium~1stt:default/messages/GradiumSttDefaultError"
    tags: []
components:
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
  schemas:
    WebsocketHeadersGradium:
      type: object
      properties:
        X-World-Part-Override:
          type: string
          description: Override target world part. Auto-selected if not provided.
  messages:
    GradiumSttDefaultSetup:
      name: GradiumSttDefaultSetup
      title: Setup
      summary: Initialize the transcription stream. Must be the first message.
      contentType: application/json
      payload:
        type: object
        description: Initialize the transcription stream. Must be the first message.
        required:
          - type
        properties:
          type:
            const: setup
          model_name:
            type: string
            default: default
          input_format:
            type: string
            enum:
              - pcm
              - pcm_8000
              - pcm_16000
              - pcm_24000
              - wav
              - opus
              - ulaw_8000
              - alaw_8000
          json_config:
            type: object
            properties:
              language:
                type: string
              temperature:
                type: number
          close_ws_on_eos:
            type: boolean
      examples:
        - name: setupExample
          summary: Setup message
          payload:
            type: setup
    GradiumSttDefaultAudio:
      name: GradiumSttDefaultAudio
      title: Audio
      summary: A chunk of base64-encoded audio bytes.
      contentType: application/json
      payload:
        type: object
        description: A chunk of base64-encoded audio bytes.
        required:
          - type
          - audio
        properties:
          type:
            const: audio
          audio:
            type: string
            format: base64
      examples:
        - name: audioExample
          summary: Audio message
          payload:
            type: audio
            audio: <audio>
    GradiumSttDefaultFlush:
      name: GradiumSttDefaultFlush
      title: Flush
      summary: Force-finalize buffered audio without closing the stream.
      contentType: application/json
      payload:
        type: object
        description: Force-finalize buffered audio without closing the stream.
        required:
          - type
        properties:
          type:
            const: flush
          flush_id:
            type: integer
      examples:
        - name: flushExample
          summary: Flush message
          payload:
            type: flush
    GradiumSttDefaultEndOfStream:
      name: GradiumSttDefaultEndOfStream
      title: EndOfStream
      summary: Signal end of the audio stream.
      contentType: application/json
      payload:
        type: object
        description: Signal end of the audio stream.
        required:
          - type
        properties:
          type:
            const: end_of_stream
      examples:
        - name: endOfStreamExample
          summary: EndOfStream message
          payload:
            type: end_of_stream
    GradiumSttDefaultText:
      name: GradiumSttDefaultText
      title: Text
      summary: A finalized transcribed text segment.
      contentType: application/json
      payload:
        type: object
        description: A finalized transcribed text segment.
        required:
          - type
          - text
        properties:
          type:
            const: text
          text:
            type: string
          start_s:
            type: number
          stream_id:
            type: integer
      examples:
        - name: textExample
          summary: Text message
          payload:
            type: text
            text: Hello world.
    GradiumSttDefaultEndText:
      name: GradiumSttDefaultEndText
      title: EndText
      summary: Marks the end of a transcribed text segment.
      contentType: application/json
      payload:
        type: object
        description: Marks the end of a transcribed text segment.
        required:
          - type
        properties:
          type:
            const: end_text
          stop_s:
            type: number
          stream_id:
            type: integer
      examples:
        - name: endTextExample
          summary: EndText message
          payload:
            type: end_text
    GradiumSttDefaultError:
      name: GradiumSttDefaultError
      title: Error
      summary: Terminal error.
      contentType: application/json
      payload:
        type: object
        description: Terminal error.
        required:
          - type
        properties:
          type:
            const: error
          message:
            type: string
          code:
            type: integer
      examples:
        - name: errorExample
          summary: Error message
          payload:
            type: error
