{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://jambonz.org/schema/components/recognizer-houndifyOptions",
  "title": "Houndify Recognizer Options",
  "description": "Houndify-specific STT options. Only applies when recognizer vendor is 'houndify'.",
  "type": "object",
  "properties": {
    "requestInfo": {
      "type": "object",
      "description": "Houndify RequestInfo object with context data.",
      "additionalProperties": true
    },
    "sampleRate": { "type": "number", "description": "Audio sample rate in Hz." },
    "latitude": { "type": "number", "description": "User latitude for location-aware queries." },
    "longitude": { "type": "number", "description": "User longitude for location-aware queries." },
    "city": { "type": "string", "description": "User city." },
    "state": { "type": "string", "description": "User state." },
    "country": { "type": "string", "description": "User country." },
    "timeZone": { "type": "string", "description": "User timezone." },
    "domain": { "type": "string", "description": "Houndify domain." },
    "audioEndpoint": { "type": "string", "description": "Custom audio endpoint URL." },
    "maxSilenceSeconds": { "type": "number", "description": "Maximum silence before stopping." },
    "maxSilenceAfterFullQuerySeconds": { "type": "number", "description": "Silence timeout after a complete query." },
    "maxSilenceAfterPartialQuerySeconds": { "type": "number", "description": "Silence timeout after a partial query." },
    "vadSensitivity": { "type": "number", "description": "VAD sensitivity level." },
    "vadTimeout": { "type": "number", "description": "VAD timeout in milliseconds." },
    "vadMode": { "type": "string", "description": "VAD mode." },
    "vadVoiceMs": { "type": "number", "description": "Milliseconds of voice to trigger VAD." },
    "vadSilenceMs": { "type": "number", "description": "Milliseconds of silence to trigger VAD." },
    "vadDebug": { "type": "boolean", "description": "Enable VAD debug logging." },
    "audioFormat": { "type": "string", "description": "Audio format." },
    "enableNoiseReduction": { "type": "boolean", "description": "Enable noise reduction." },
    "enableProfanityFilter": { "type": "boolean", "description": "Filter profanity." },
    "enablePunctuation": { "type": "boolean", "description": "Enable punctuation." },
    "enableCapitalization": { "type": "boolean", "description": "Enable capitalization." },
    "confidenceThreshold": { "type": "number", "description": "Minimum confidence threshold." },
    "enableDisfluencyFilter": { "type": "boolean", "description": "Filter disfluencies (um, uh)." },
    "maxResults": { "type": "number", "description": "Maximum number of results." },
    "enableWordTimestamps": { "type": "boolean", "description": "Include word timestamps." },
    "maxAlternatives": { "type": "number", "description": "Maximum alternative transcripts." },
    "partialTranscriptInterval": { "type": "number", "description": "Interval for partial transcript delivery." },
    "sessionTimeout": { "type": "number", "description": "Session timeout." },
    "connectionTimeout": { "type": "number", "description": "Connection timeout." },
    "customVocabulary": {
      "type": "array",
      "items": { "type": "string" },
      "description": "Custom vocabulary terms."
    },
    "languageModel": { "type": "string", "description": "Language model to use." },
    "audioQueryAbsoluteTimeout": { "type": "number", "description": "Absolute timeout for audio queries." },
    "eoqThreshold": { "type": "number", "minimum": 0, "maximum": 1, "description": "End-of-query likelihood threshold (0.0-1.0) to trigger end of speech when segmentation is disabled. Default 0.8, set to 0 to disable." },
    "vadStopThreshold": { "type": "number", "minimum": 0, "maximum": 1, "description": "VAD probability threshold to trigger end of speech when segmentation is disabled. When VAD drops below this value after speech is detected, streaming stops. Default 0.05, set to 0 to disable." }
  },
  "additionalProperties": false
}
