Azure OpenAI Reasoning Tools

Azure OpenAI agent pairs ReasoningTools with web search to write an NVDA vs TSLA report.

azure_openai_reasoning_tools.py
"""
Azure Openai Reasoning Tools
============================

Demonstrates this reasoning cookbook example.
"""

from agno.agent import Agent
from agno.models.azure.openai_chat import AzureOpenAI
from agno.tools.reasoning import ReasoningTools
from agno.tools.websearch import WebSearchTools


# ---------------------------------------------------------------------------
# Create Example
# ---------------------------------------------------------------------------
def run_example() -> None:
    reasoning_agent = Agent(
        model=AzureOpenAI(id="gpt-5.6-luna"),
        tools=[
            WebSearchTools(),
            ReasoningTools(
                enable_think=True,
                enable_analyze=True,
                add_instructions=True,
                add_few_shot=True,
            ),
        ],
        instructions="Use tables where possible. Think about the problem step by step.",
        markdown=True,
    )

    reasoning_agent.print_response(
        "Write a report comparing NVDA to TSLA.",
        stream=True,
        show_full_reasoning=True,
    )


# ---------------------------------------------------------------------------
# Run Example
# ---------------------------------------------------------------------------
if __name__ == "__main__":
    run_example()

Run the Example

Set up your virtual environment

uv venv --python 3.12
source .venv/bin/activate

Install dependencies

uv pip install -U agno ddgs openai

Export environment variables

export AZURE_OPENAI_API_KEY="your_azure_openai_api_key_here"
export AZURE_OPENAI_ENDPOINT="your_azure_openai_endpoint_here"

Select the Azure OpenAI deployment

Deploy the model used by the source in the resource identified by AZURE_OPENAI_ENDPOINT. Set its deployment name before running Python:

export AZURE_OPENAI_DEPLOYMENT="your_deployment_name"

Keep the underlying model ID in AzureOpenAI(id=...). This variable selects the Azure deployment used in the request URL. Without it, the SDK uses the model ID as the deployment name, which works only when the names match. See Azure deployment setup.

Run the example

Save the code above as azure_openai_reasoning_tools.py, then run:

python azure_openai_reasoning_tools.py

Full source: cookbook/10_reasoning/tools/azure_openai_reasoning_tools.py