{"record":{"id":"87dbfed156994c1d","repo":"sgl-project/sglang","slug":"unknown-output-type-type-output","errorCode":null,"errorMessage":"Unknown output type: {type(output)}","messagePattern":"Unknown output type: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/entrypoints/harmony_utils.py","lineNumber":216,"sourceCode":"    else:\n        raise ValueError(f\"Unknown input type: {response_msg['type']}\")\n    return msg\n\n\ndef parse_response_output(output: ResponseOutputItem) -> Message:\n    if isinstance(output, ResponseOutputMessage):\n        role = output.role\n        contents = [TextContent(text=c.text) for c in output.content]\n        msg = Message.from_role_and_contents(role, contents)\n        return msg\n    elif isinstance(output, ResponseFunctionToolCall):\n        msg = Message.from_role_and_content(Role.ASSISTANT, output.arguments)\n        msg = msg.with_channel(\"commentary\")\n        msg = msg.with_recipient(output.name)\n        msg = msg.with_content_type(\"json\")\n        return msg\n    else:\n        raise ValueError(f\"Unknown output type: {type(output)}\")\n\n\ndef parse_chat_input(chat_msg) -> Message:\n    role = chat_msg.role\n    content = chat_msg.content\n    if isinstance(content, str):\n        contents = [TextContent(text=content)]\n    else:\n        # TODO: Support refusal.\n        contents = [TextContent(text=c.text) for c in content]\n    msg = Message.from_role_and_contents(role, contents)\n    return msg\n\n\ndef render_for_completion(messages: list[Message]) -> list[int]:\n    conversation = Conversation.from_messages(messages)\n    token_ids = get_encoding().render_conversation_for_completion(\n        conversation, Role.ASSISTANT","sourceCodeStart":198,"sourceCodeEnd":234,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/entrypoints/harmony_utils.py#L198-L234","documentation":"parse_response_output raises when a ResponseOutputItem is neither a ResponseOutputMessage nor a ResponseFunctionToolCall — the only two output shapes it knows how to convert into harmony Messages. Any other subclass (or a duck-typed lookalike) hits the else branch.","triggerScenarios":"Passing a ResponseReasoningItem, ResponseFunctionWebSearch, or any new/custom ResponseOutputItem subclass into parse_response_output.","commonSituations":"Extending the Responses API output model with new item kinds without updating the parser; feeding recorded outputs from a newer server version into an older sglang client library.","solutions":["Handle/convert the extra output item types before calling parse_response_output","Filter items to ResponseOutputMessage and ResponseFunctionToolCall instances","Upgrade sglang so its parser covers the item types you emit"],"exampleFix":"# before\nmsgs = [parse_response_output(o) for o in outputs]\n# after\nmsgs = [parse_response_output(o) for o in outputs\n        if isinstance(o, (ResponseOutputMessage, ResponseFunctionToolCall))]","handlingStrategy":"type-guard","validationCode":"from sglang.srt.entrypoints.openai.protocol import ResponseOutputMessage, ResponseFunctionToolCall\nfiltered = [o for o in outputs if isinstance(o, (ResponseOutputMessage, ResponseFunctionToolCall))]","typeGuard":"def is_parseable_output(o) -> bool:\n    from sglang.srt.entrypoints.openai.protocol import ResponseOutputMessage, ResponseFunctionToolCall\n    return isinstance(o, (ResponseOutputMessage, ResponseFunctionToolCall))","tryCatchPattern":"try:\n    msg = parse_response_output(o)\nexcept ValueError as e:\n    if \"Unknown output type\" in str(e):\n        return None\n    raise","preventionTips":["Type-check output items before conversion","Upgrade sglang alongside any extension of the output item model"],"tags":["harmony","output-parsing","type-dispatch","sglang"],"backgroundTag":"unsupported-message-type","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}