{"record":{"id":"f9f33a62ced56a8d","repo":"tinyhumansai/openhuman","slug":"ptt-transcription-failed","errorCode":null,"errorMessage":"[ptt] transcription failed","messagePattern":"\\[ptt\\] transcription failed","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app/src/services/pttService.ts","lineNumber":122,"sourceCode":"    }\n\n    await deps.playChime('close');\n    await deps.showOverlay(false, sessionId);\n\n    if (audio.durationMs < deps.minAudioMs) {\n      deps.logger.info('[ptt] session dropped — audio shorter than minAudioMs', {\n        sessionId,\n        durationMs: audio.durationMs,\n      });\n      await deps.playChime('error');\n      return;\n    }\n\n    let text = '';\n    try {\n      text = await deps.transcribe(audio.buffer);\n    } catch (err) {\n      deps.logger.warn('[ptt] transcription failed', { sessionId, err: String(err) });\n      // Per spec: post the message anyway as a breadcrumb.\n      text = '[Voice — transcription failed]';\n    }\n\n    const trimmed = text.trim();\n\n    if (!trimmed) {\n      deps.logger.info('[ptt] session dropped — empty transcript', { sessionId });\n      await deps.playChime('error');\n      return;\n    }\n\n    let threadId: string;\n    try {\n      const resolved = await deps.resolveActiveThreadId();\n      if (!resolved) {\n        threadId = await deps.createNewVoiceThread();\n      } else {","sourceCodeStart":104,"sourceCodeEnd":140,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/app/src/services/pttService.ts#L104-L140","documentation":"The push-to-talk session's speech-to-text call (deps.transcribe) threw during finalization, so the captured audio buffer could not be converted into text. Fires when the hosted STT endpoint is unreachable, returns a non-2xx, or the provider rejects the audio; per the PTT spec the transcript falls back to empty so the turn becomes a dropped session rather than a posted message.","triggerScenarios":"Thrown at app/src/services/pttService.ts:122 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check network connectivity to the configured STT host (backend, ElevenLabs, or OpenAI per voice_server.stt_engine)","Inspect the full err string in the warn log to distinguish HTTP failures from provider-side rejections","If the failure persists, verify the STT provider credentials/key are valid in voice settings","Note that a session shorter than minAudioMs is dropped earlier with a different log line — this failure means a valid-length buffer reached the provider and transcription itself errored"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}