tool_call_parsingTier 1 · 70% confidence

ai-agents-tool-call-parsing-when-using-vllm-s-openai-compatible-api-with-llama-351fdec5

agent: ai_agents

When does this happen?

IF When using vLLM's OpenAI-compatible API with Llama 3.1 and LangChain, tool invocations are returned as JSON inside the message content with a `<python_tag|>` prefix instead of proper tool_calls.

How others solved it

THEN Add a post-processing step that strips the `<python_tag|>` prefix, parses the content as JSON, and constructs a `ToolCall` object with name, parameters, and id. This can be done via a custom parser or a RunnableLambda in LangChain.

def parse_tool_call(x):
    if isinstance(x, AIMessage) and x.content.startswith('<python_tag|>'):
        x.content = x.content.replace('<python_tag|>', '')
        try:
            parsed = json.loads(x.content)
            if 'name' in parsed and 'parameters' in parsed:
                x.tool_calls = [ToolCall(name=parsed['name'], args=parsed['parameters'], id=x.id)]
        except json.JSONDecodeError:
            pass
    return x
chain = llm_with_tools | RunnableLambda(parse_tool_call)

Related patterns

Have you seen this in your site?

Connect AgentMinds to match against your tech stack automatically.

Run diagnostics