Tool Use & Agents

Tool use enables developers to build agentic applications that connect to external tools, do reasoning, and perform actions.

The Chat endpoint comes with built-in tool use capabilities such as function calling, multi-step reasoning, and citation generation.

This quickstart guide shows you how to utilize tool use with the Chat endpoint.

1

Setup

First, install the Cohere Python SDK with the following command.

pip install -U cohere

Next, import the library and create a client.

PYTHON
import cohere
co = cohere.Client(
"COHERE_API_KEY"
) # Get your free API key here: https://dashboard.cohere.com/api-keys
2

Tool Definition

First, we need to set up the tools. A tool can be any function or service that can receive and send objects.

We also need to define the tool schemas in a format that can be passed to the Chat endpoint. The schema must contain the following fields: name, description, and parameter_definitions.

PYTHON
def get_weather(location):
# Implement your tool calling logic here
return {"temperature": "20C"}
functions_map = {"get_weather": get_weather}
tools = [
{
"name": "get_weather",
"description": "Gets the weather of a given location",
"parameter_definitions": {
"location": {
"description": "The location to get weather, example: San Francisco, CA",
"type": "str",
"required": True,
}
},
},
]

Tool Calling

Next, pass the tool schema to the Chat endpoint together with the user message.

The LLM will then generate the tool calls (if any) and return the tool_calls object.

PYTHON
message = "What's the weather in Toronto?"
response = co.chat(
model="command-a-plus-05-2026", message=message, tools=tools
)
print(response.tool_calls)
[ToolCall(name='get_weather', parameters={'location': 'Toronto'})]

Tool Execution

Next, the tools called will execute based on the parameters generated in the tool calling step earlier.

PYTHON
tool_content = []
if response.tool_calls:
for tc in response.tool_calls:
tool_call = {"name": tc.name, "parameters": tc.parameters}
tool_result = functions_map[tc.name](**tc.parameters)
tool_content.append(
{"call": tool_call, "outputs": [tool_result]}
)

Response Generation

The results are passed back to the LLM, which generates the final response.

PYTHON
response = co.chat(
model="command-a-plus-05-2026",
message="",
tools=tools,
tool_results=tool_content,
chat_history=response.chat_history,
)
print(response.text)
It is 20C in Toronto.

Citation Generation

The response object contains a citations field, which contains specific text spans from the documents on which the response is grounded.

PYTHON
if response.citations:
for citation in response.citations:
print(citation, "\n")
start=6 end=9 text='20C' document_ids=['get_weather:0:2:0']

Further Resources