# Ollama model host for ADK agents
Supported in ADKPython v0.1.0
[Ollama](https://ollama.com/) is a tool that allows you to host and run
open-source models locally. ADK integrates with Ollama-hosted models through the
[LiteLLM](/adk-docs/agents/models/litellm/) model connector library.
## Get started
Use the LiteLLM wrapper to create agents with Ollama-hosted models. The
following code example shows a basic implementation for using Gemma open
models with your agents:
```py
root_agent = Agent(
model=LiteLlm(model="ollama_chat/gemma3:latest"),
name="dice_agent",
description=(
"hello world agent that can roll a dice of 8 sides and check prime"
" numbers."
),
instruction="""
You roll dice and answer questions about the outcome of the dice rolls.
""",
tools=[
roll_die,
check_prime,
],
)
```
!!! warning "Warning: Use `ollama_chat`interface"
Make sure you set the provider `ollama_chat` instead of `ollama`. Using
`ollama` can result in unexpected behaviors such as infinite tool call loops
and ignoring previous context.
!!! tip "Use `OLLAMA_API_BASE` environment variable"
Although you can specify the `api_base` parameter in LiteLLM for generation,
as of v1.65.5, the library relies on the environment variable for other API calls.
Therefore, you should set the `OLLAMA_API_BASE` environment variable for your
Ollama server URL to ensure all requests are routed correctly.
```bash
export OLLAMA_API_BASE="http://localhost:11434"
adk web
```
## Model choice
If your agent is relying on tools, make sure that you select a model with
tool support from [Ollama website](https://ollama.com/search?c=tools).
For reliable results, use a model with tool support.
You can check tool support for the model using the following command:
```bash
ollama show mistral-small3.1
Model
architecture mistral3
parameters 24.0B
context length 131072
embedding length 5120
quantization Q4_K_M
Capabilities
completion
vision
tools
```
You should see **tools** listed under capabilities.
You can also look at the template the model is using and tweak it based on your
needs.
```bash
ollama show --modelfile llama3.2 > model_file_to_modify
```
For instance, the default template for the above model inherently suggests that
the model shall call a function all the time. This may result in an infinite
loop of function calls.
```
Given the following functions, please respond with a JSON for a function call
with its proper arguments that best answers the given prompt.
Respond in the format {"name": function name, "parameters": dictionary of
argument name and its value}. Do not use variables.
```
You can swap such prompts with a more descriptive one to prevent infinite tool
call loops, for instance:
```
Review the user's prompt and the available functions listed below.
First, determine if calling one of these functions is the most appropriate way
to respond. A function call is likely needed if the prompt asks for a specific
action, requires external data lookup, or involves calculations handled by the
functions. If the prompt is a general question or can be answered directly, a
function call is likely NOT needed.
If you determine a function call IS required: Respond ONLY with a JSON object in
the format {"name": "function_name", "parameters": {"argument_name": "value"}}.
Ensure parameter values are concrete, not variables.
If you determine a function call IS NOT required: Respond directly to the user's
prompt in plain text, providing the answer or information requested. Do not
output any JSON.
```
Then you can create a new model with the following command:
```bash
ollama create llama3.2-modified -f model_file_to_modify
```
## Use OpenAI provider
Alternatively, you can use `openai` as the provider name. This approach
requires setting the `OPENAI_API_BASE=http://localhost:11434/v1` and
`OPENAI_API_KEY=anything` env variables instead of `OLLAMA_API_BASE`.
Note that the `API_BASE` value has *`/v1`* at the end.
```py
root_agent = Agent(
model=LiteLlm(model="openai/mistral-small3.1"),
name="dice_agent",
description=(
"hello world agent that can roll a dice of 8 sides and check prime"
" numbers."
),
instruction="""
You roll dice and answer questions about the outcome of the dice rolls.
""",
tools=[
roll_die,
check_prime,
],
)
```
```bash
export OPENAI_API_BASE=http://localhost:11434/v1
export OPENAI_API_KEY=anything
adk web
```
### Debugging
You can see the request sent to the Ollama server by adding the following in
your agent code just after imports.
```py
import litellm
litellm._turn_on_debug()
```
Look for a line like the following:
```bash
Request Sent from LiteLLM:
curl -X POST \
http://localhost:11434/api/chat \
-d '{'model': 'mistral-small3.1', 'messages': [{'role': 'system', 'content': ...
```