{"record":{"id":"ae6f24b63ffdc4e0","repo":"BerriAI/litellm","slug":"runwayml-tts-task-polling-timed-out-after-timeout","errorCode":null,"errorMessage":"RunwayML TTS task polling timed out after {timeout_secs} seconds","messagePattern":"RunwayML TTS task polling timed out after (.+?) seconds","errorType":"exception","errorClass":"TimeoutError","httpStatus":null,"severity":"error","filePath":"litellm/llms/runwayml/text_to_speech/transformation.py","lineNumber":242,"sourceCode":"        complete_url = api_base or get_secret_str(\"RUNWAYML_API_BASE\") or self.DEFAULT_BASE_URL\n\n        complete_url = complete_url.rstrip(\"/\")\n        return f\"{complete_url}/{self.TTS_ENDPOINT_PATH}\"\n\n    @staticmethod\n    def _check_timeout(start_time: float, timeout_secs: float) -> None:\n        \"\"\"\n        Check if operation has timed out.\n\n        Args:\n            start_time: Start time of the operation\n            timeout_secs: Timeout duration in seconds\n\n        Raises:\n            TimeoutError: If operation has exceeded timeout\n        \"\"\"\n        if time.time() - start_time > timeout_secs:\n            raise TimeoutError(f\"RunwayML TTS task polling timed out after {timeout_secs} seconds\")\n\n    @staticmethod\n    def _check_task_status(response_data: dict[str, Any]) -> str:\n        \"\"\"\n        Check RunwayML task status from response.\n\n        RunwayML statuses: PENDING, RUNNING, SUCCEEDED, FAILED, CANCELLED, THROTTLED\n\n        Args:\n            response_data: JSON response from RunwayML task endpoint\n\n        Returns:\n            Normalized status string: \"running\", \"succeeded\", or raises on failure\n\n        Raises:\n            ValueError: If task failed or status is unknown\n        \"\"\"\n        status: Final = response_data.get(\"status\", \"\").upper()","sourceCodeStart":224,"sourceCodeEnd":260,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/llms/runwayml/text_to_speech/transformation.py#L224-L260","documentation":"Poll-loop timeout in the RunwayML TTS handler: the audio-generation task did not reach a terminal state within timeout_secs of start_time, so a TimeoutError aborts the wait instead of polling indefinitely.","triggerScenarios":"Triggered when polling a RunwayML TTS task exceeds the configured timeout.","commonSituations":"See trigger scenarios.","solutions":["Increase the polling timeout for TTS tasks.","Check RunwayML service status."],"exampleFix":"litellm.speech(..., timeout=300)","handlingStrategy":"retry","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-14T05:17:10.506Z"}