Hi, glad the no-schema dataset worked for messages.
What you’re seeing is expected: tool calls ≠tool definitions.
- Tool calls live on the assistant message in
inputs / outputs, so they get copied when you add the run.
- Tool definitions (name, description, parameters) are not in
inputs for Google ADK LLM runs. The ADK integration stores them under: extra.invocation_params.tools
That’s the same pattern as LangChain chat models (defs in invocation params, not inputs). The chat-model schema’s convert_to_openai_tool transformation is what normally lifts those into inputs.tools, without that schema, “Add to Dataset” only persists inputs/outputs, so defs are dropped.
Docs: Dataset transformations – convert_to_openai_tool, Tool JSON type.
How to include the tools
1. Confirm you’re adding the LLM span
Tools are on the nested llm run (model name / google_adk_llm), not the root google_adk.session chain. Open that child run → check Extra / invocation_params.tools.
2. UI (one-off)
When adding to the dataset, edit the example and set:
{
“messages”: [ /* already saved */ ],
“tools”: [ /* paste from the run’s extra.invocation_params.tools */ ]
}
ADK already formats those as OpenAI-style { "type": "function", "function": { ... } } objects.
3. Programmatic (recommended for many runs)
from langsmith import Client
client = Client()
*# Prefer the LLM child runs, not only root chain runs*
runs = client.list_runs(
project_name="your-adk-project",
run_type="llm",
error=False,
)
examples = \[\]
for run in runs:
tools = (run.extra or {}).get("invocation_params", {}).get("tools") or \[\]
examples.append(
{
"inputs": {
\*\*(run.inputs or {}),
"tools": tools,
},
"outputs": run.outputs or {},
}
)
client.create_examples(dataset_name="your-dataset", examples=examples)
See Create a dataset from traces.
If those tools still don’t show up on the LLM run’s Extra panel, share a public trace link and we can dig in further.