* Initial plan * Add load_dotenv() to 303 Python samples for environment variable loading Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Update SAMPLE_GUIDELINES.md to document load_dotenv() requirement Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Update samples README.md to document .env file usage Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Run ruff format on all changed sample files Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Clarify load_dotenv() usage in README - local dev vs production Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Remove deprecated getting_started folder as requested Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Document env_file_path parameter for per-client configuration Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Merge main branch to resolve conflicts Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Fix run_evaluation.py file that was empty in merge commit Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Remove dotnet changes from merge - out of scope for this PR Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Remove package and test changes from merge - only sample changes needed Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Remove test_func_utils.py - only sample changes needed Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Revert sample files not in original changeset - keep only load_dotenv additions Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Move load_dotenv() outside snippet tag in 06_host_your_agent.py Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Fix comment placement - move load_dotenv before code comments Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Fix load_dotenv() placement across all samples - after docstring, before code comments Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Merge latest main branch with load_dotenv changes Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Remove non-sample changes from merge - keep only load_dotenv additions Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Revert non-load_dotenv sample changes from merge Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Fix run_evaluation.py - use main's improved version (file already had load_dotenv) Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> * Manual update * Manual update 2 * Fix Role usage and load_dotenv placement per PR review feedback Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com> * Fix Role usage - use string literals not enum attributes Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com> * Fix SAMPLE_GUIDELINES.md example - load_dotenv before docstring per guidance Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com> * Move load_dotenv() before docstrings in all samples per SAMPLE_GUIDELINES ordering Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com> * Address PR review: rename files, fix placement, add session usage, remove note Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com> * Update Redis README to reference renamed file redis_history_provider.py Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: TaoChenOSU <12570346+TaoChenOSU@users.noreply.github.com> Co-authored-by: Tao Chen <taochen@microsoft.com> Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com> Co-authored-by: Eduard van Valkenburg <eavanvalkenburg@users.noreply.github.com>
Ollama Examples
This folder contains examples demonstrating how to use Ollama models with the Agent Framework.
Prerequisites
- Install Ollama: Download and install Ollama from ollama.com
- Start Ollama: Ensure Ollama is running on your local machine
- Pull a model: Run
ollama pull mistral(or any other model you prefer)- For function calling examples, use models that support tool calling like
mistralorqwen2.5 - For reasoning examples, use models that support reasoning like
qwen3:8b - For multimodal examples, use models like
gemma3:4b
- For function calling examples, use models that support tool calling like
Note
: Not all models support all features. Function calling, reasoning, and multimodal capabilities depend on the specific model you're using.
Recommended Approach
The recommended way to use Ollama with Agent Framework is via the native OllamaChatClient from the agent-framework-ollama package. This provides full support for Ollama-specific features like reasoning mode.
Alternatively, you can use the OpenAIChatClient configured to point to your local Ollama server, which may be useful if you're already familiar with the OpenAI client interface.
Examples
| File | Description |
|---|---|
ollama_agent_basic.py |
Basic Ollama agent with tool calling using native Ollama Chat Client. Shows both streaming and non-streaming responses. |
ollama_agent_reasoning.py |
Ollama agent with reasoning capabilities using native Ollama Chat Client. Shows how to enable thinking/reasoning mode. |
ollama_chat_client.py |
Direct usage of the native Ollama Chat Client with tool calling. |
ollama_chat_multimodal.py |
Ollama Chat Client with multimodal (image) input capabilities. |
ollama_with_openai_chat_client.py |
Alternative approach using OpenAI Chat Client configured to use local Ollama models. |
Configuration
The examples use environment variables for configuration. Set the appropriate variables based on which example you're running:
For Native Ollama Examples
Set the following environment variables:
-
OLLAMA_HOST: The base URL for your Ollama server (optional, defaults tohttp://localhost:11434)- Example:
export OLLAMA_HOST="http://localhost:11434"
- Example:
-
OLLAMA_MODEL_ID: The model name to use- Example:
export OLLAMA_MODEL_ID="qwen2.5:8b" - Must be a model you have pulled with Ollama
- Example:
For OpenAI Client with Ollama (ollama_with_openai_chat_client.py)
Set the following environment variables:
-
OLLAMA_ENDPOINT: The base URL for your Ollama server with/v1/suffix- Example:
export OLLAMA_ENDPOINT="http://localhost:11434/v1/"
- Example:
-
OLLAMA_MODEL: The model name to use- Example:
export OLLAMA_MODEL="mistral" - Must be a model you have pulled with Ollama
- Example: