{"record":{"id":"c1f580a1f6c60438","repo":"BerriAI/litellm","slug":"runwayml-tts-response-missing-task-id","errorCode":null,"errorMessage":"RunwayML TTS response missing task ID","messagePattern":"RunwayML TTS response missing task ID","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/llms/runwayml/text_to_speech/transformation.py","lineNumber":469,"sourceCode":"        }\n        \"\"\"\n        from litellm.types.llms.openai import HttpxBinaryResponseContent\n\n        try:\n            response_data: Final = raw_response.json()\n        except Exception as e:\n            raise self.get_error_class(\n                error_message=f\"Error parsing RunwayML TTS response: {e}\",\n                status_code=raw_response.status_code,\n                headers=dict(raw_response.headers),\n            )\n\n        verbose_logger.debug(\"RunwayML TTS starting polling...\")\n\n        # Get task ID\n        task_id: Final = response_data.get(\"id\")\n        if not task_id:\n            raise ValueError(\"RunwayML TTS response missing task ID\")\n\n        # Get headers for polling (need auth)\n        poll_headers: Final = {\n            \"Authorization\": raw_response.request.headers.get(\"Authorization\", \"\"),\n            \"X-Runway-Version\": raw_response.request.headers.get(\"X-Runway-Version\", RUNWAYML_DEFAULT_API_VERSION),\n        }\n\n        # Poll until task completes\n        polled_response: Final = self._poll_task_sync(\n            task_id=task_id,\n            api_base=self.DEFAULT_BASE_URL,\n            headers=poll_headers,\n            timeout_secs=RUNWAYML_POLLING_TIMEOUT,\n        )\n\n        # Get the completed task data\n        task_data: Final = polled_response.json()\n","sourceCodeStart":451,"sourceCodeEnd":487,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/llms/runwayml/text_to_speech/transformation.py#L451-L487","documentation":"Contract guard in the RunwayML TTS response transformation: the JSON body contains no 'id', so there is no task identifier to poll for audio completion and the transformation aborts with this error.","triggerScenarios":"Triggered when the RunwayML TTS response does not contain a task ID.","commonSituations":"See trigger scenarios.","solutions":["Inspect the raw RunwayML response; the task id field was absent.","Verify API key and request body."],"exampleFix":"# log the response body to inspect the actual payload.","handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}