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.
Setup
First, install the Cohere Python SDK with the following command.
Bash pip install -U cohereNext, 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-keysPYTHON import cohere co = cohere.Client( api_key="", # Leave this blank base_url="<YOUR_DEPLOYMENT_URL>", )PYTHON import cohere co = cohere.BedrockClient( aws_region="AWS_REGION", aws_access_key="AWS_ACCESS_KEY_ID", aws_secret_key="AWS_SECRET_ACCESS_KEY", aws_session_token="AWS_SESSION_TOKEN", ) # Get the model name: https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.htmlPYTHON import cohere co = cohere.SagemakerClient( aws_region="AWS_REGION", aws_access_key="AWS_ACCESS_KEY_ID", aws_secret_key="AWS_SECRET_ACCESS_KEY", aws_session_token="AWS_SESSION_TOKEN", )PYTHON import cohere co = cohere.Client( api_key="AZURE_API_KEY", base_url="AZURE_ENDPOINT", # example: "https://cohere-command-r-plus-08-2024-xyz.eastus.models.ai.azure.com/" )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, andparameter_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_callsobject.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)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)PYTHON message = "What's the weather in Toronto?" response = co.chat( model="YOUR_MODEL_NAME", message=message, tools=tools ) print(response.tool_calls)PYTHON message = "What's the weather in Toronto?" response = co.chat( model="YOUR_ENDPOINT_NAME", message=message, tools=tools ) print(response.tool_calls)PYTHON message = "What's the weather in Toronto?" response = co.chat(message=message, tools=tools) print(response.tool_calls)wordWrap [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)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)PYTHON response = co.chat( model="YOUR_MODEL_NAME", message="", tools=tools, tool_results=tool_content, chat_history=response.chat_history, ) print(response.text)PYTHON response = co.chat( model="YOUR_ENDPOINT_NAME", message="", tools=tools, tool_results=tool_content, chat_history=response.chat_history, ) print(response.text)PYTHON response = co.chat( message="", tools=tools, tool_results=tool_content, chat_history=response.chat_history, ) print(response.text)wordWrap It is 20C in Toronto.Citation Generation
The response object contains a
citationsfield, 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")wordWrap start=6 end=9 text='20C' document_ids=['get_weather:0:2:0']