Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions python/samples/concepts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -265,9 +265,15 @@ In Semantic Kernel for Python, we leverage Pydantic Settings to manage configura
3. **Direct Constructor Input:**
- As an alternative to environment variables and `.env` files, you can pass the required settings directly through the constructor of the AI Connector or Memory Connector.

## Microsoft Entra Token Authentication
## Azure Authentication

To authenticate to your Azure resources using a Microsoft Entra Authentication Token, the `AzureChatCompletion` AI Service connector now supports this as a built-in feature. If you do not provide an API key -- either through an environment variable, a `.env` file, or the constructor -- and you also do not provide a custom `AsyncAzureOpenAI` client, an `ad_token`, or an `ad_token_provider`, the `AzureChatCompletion` connector will attempt to retrieve a token using the [`DefaultAzureCredential`](https://learn.microsoft.com/en-us/python/api/azure-identity/azure.identity.defaultazurecredential?view=azure-python).
To authenticate to your Azure resources, you must provide one of the following authentication methods to successfully authenticate:

1. **AsyncTokenCredential** - provide one of the `AsyncTokenCredential` types (e.g. `AzureCliCredential`, `ManagedIdentityCredential`). More information here: [Credentials for asynchronous Azure SDK clients]("https://learn.microsoft.com/en-us/python/api/azure-identity/azure.identity.aio?view=azure-python").
2. **Custom AsyncAzureOpenAI client** - Pass a pre-configured client instance.
3. **Access Token (`ad_token`)** - Provide a valid Microsoft Entra access token directly.
4. **Token Provider (`ad_token_provider`)** - Provide a callable that returns a valid access token.
5. **API Key** - Provide through an environment variable, a `.env` file, or the constructor.

To successfully retrieve and use the Entra Auth Token, you need the `Cognitive Services OpenAI Contributor` role assigned to your Azure OpenAI resource. By default, the `https://cognitiveservices.azure.com` token endpoint is used. You can override this endpoint by setting an environment variable `.env` variable as `AZURE_OPENAI_TOKEN_ENDPOINT` or by passing a new value to the `AzureChatCompletion` constructor as part of the `AzureOpenAISettings`.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import asyncio

from azure.identity.aio import DefaultAzureCredential
from azure.identity import AzureCliCredential

from semantic_kernel import Kernel
from semantic_kernel.agents import (
Expand Down Expand Up @@ -69,9 +69,10 @@ async def main() -> None:

ai_agent_settings = AzureAIAgentSettings()

credential = AzureCliCredential()

async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds, endpoint=ai_agent_settings.endpoint) as client,
AzureAIAgent.create_client(credential=credential, endpoint=ai_agent_settings.endpoint) as client,
):
# Create the agent definition
agent_definition = await client.agents.create_agent(
Expand All @@ -93,7 +94,7 @@ async def main() -> None:
)

refund_agent = ChatCompletionAgent(
service=AzureChatCompletion(),
service=AzureChatCompletion(credential=credential),
name="RefundAgent",
instructions=(
"You specialize in addressing customer inquiries regarding refunds. "
Expand All @@ -106,7 +107,7 @@ async def main() -> None:
)

triage_agent = ChatCompletionAgent(
service=AzureChatCompletion(),
service=AzureChatCompletion(credential=credential),
kernel=kernel,
name="TriageAgent",
instructions=(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import asyncio
from typing import Annotated

from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread
from semantic_kernel.contents import ChatMessageContent, FunctionCallContent, FunctionResultContent
Expand Down Expand Up @@ -97,7 +97,7 @@ async def main() -> None:
ai_agent_settings = AzureAIAgentSettings.create()

async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
# 1. Create an agent on the Azure AI agent service
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import asyncio
from typing import Annotated

from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread
from semantic_kernel.contents import ChatMessageContent, FunctionCallContent, FunctionResultContent
Expand Down Expand Up @@ -97,7 +97,7 @@ async def main() -> None:
ai_agent_settings = AzureAIAgentSettings.create()

async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
# 1. Create an agent on the Azure AI agent service
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from azure.ai.agents.models import AzureAISearchTool
from azure.ai.projects.models import ConnectionType
from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread

Expand Down Expand Up @@ -39,7 +39,7 @@ async def main() -> None:
ai_agent_settings = AzureAIAgentSettings()

async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds, endpoint=ai_agent_settings.endpoint) as client,
):
ai_search_conn_id = ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import asyncio

from azure.ai.agents.models import BingGroundingTool
from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread
from semantic_kernel.contents import (
Expand Down Expand Up @@ -37,7 +37,7 @@ async def handle_intermediate_steps(message: ChatMessageContent) -> None:

async def main() -> None:
async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
# 1. Enter your Bing Grounding Connection Name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import asyncio

from azure.ai.agents.models import BingGroundingTool
from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread
from semantic_kernel.contents import (
Expand Down Expand Up @@ -42,7 +42,7 @@ async def handle_streaming_intermediate_steps(message: ChatMessageContent) -> No

async def main() -> None:
async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
# 1. Enter your Bing Grounding Connection Name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from functools import reduce

from azure.ai.agents.models import CodeInterpreterTool
from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread
from semantic_kernel.contents import ChatMessageContent, StreamingChatMessageContent
Expand All @@ -27,7 +27,7 @@ async def handle_streaming_intermediate_steps(message: ChatMessageContent) -> No

async def main() -> None:
async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
# 1. Create an agent with a code interpreter on the Azure AI agent service
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import asyncio

from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AgentRegistry, AzureAIAgent, AzureAIAgentSettings
from semantic_kernel.contents.chat_message_content import ChatMessageContent
Expand Down Expand Up @@ -50,7 +50,7 @@

async def main():
async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
try:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import asyncio

from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AgentRegistry, AzureAIAgent, AzureAIAgentSettings

Expand Down Expand Up @@ -43,7 +43,7 @@

async def main():
async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
try:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import os

from azure.ai.agents.models import FilePurpose
from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AgentRegistry, AzureAIAgent, AzureAIAgentSettings

Expand Down Expand Up @@ -40,7 +40,7 @@

async def main():
async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
# Create the CSV file path for the sample
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import os

from azure.ai.agents.models import VectorStore
from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AgentRegistry, AzureAIAgent, AzureAIAgentSettings

Expand Down Expand Up @@ -36,7 +36,7 @@

async def main():
async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
# Read and upload the file to the Azure AI agent service
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import os
from typing import Annotated

from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AgentRegistry, AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread
from semantic_kernel.functions.kernel_function_decorator import kernel_function
Expand Down Expand Up @@ -37,7 +37,7 @@ def get_item_price(

async def main():
async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
try:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import asyncio

from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AgentRegistry, AzureAIAgent, AzureAIAgentSettings

Expand Down Expand Up @@ -157,7 +157,7 @@

async def main():
async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
try:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import asyncio

from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AgentRegistry, AzureAIAgent

Expand Down Expand Up @@ -40,7 +40,7 @@

async def main():
async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
try:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import asyncio

from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AgentRegistry, AzureAIAgent

Expand All @@ -21,7 +21,7 @@

async def main():
async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
try:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import os

from azure.ai.agents.models import CodeInterpreterTool, FilePurpose
from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread
from semantic_kernel.contents.annotation_content import AnnotationContent
Expand All @@ -21,7 +21,7 @@ async def main() -> None:
ai_agent_settings = AzureAIAgentSettings()

async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds, endpoint=ai_agent_settings.endpoint) as client,
):
csv_file_path = os.path.join(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import asyncio

from azure.ai.agents.models import McpTool
from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread
from semantic_kernel.contents import ChatMessageContent, FunctionCallContent, FunctionResultContent
Expand All @@ -28,7 +28,7 @@ async def handle_intermediate_messages(message: ChatMessageContent) -> None:

async def main() -> None:
async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
# 1. Define the MCP tool with the server URL
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import asyncio
from typing import Annotated

from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread
from semantic_kernel.contents import FunctionCallContent, FunctionResultContent
Expand Down Expand Up @@ -59,7 +59,7 @@ async def main() -> None:
ai_agent_settings = AzureAIAgentSettings()

async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds, endpoint=ai_agent_settings.endpoint) as client,
):
AGENT_NAME = "Host"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import logging
from typing import Annotated

from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread
from semantic_kernel.contents import ChatMessageContent, FunctionCallContent, FunctionResultContent
Expand Down Expand Up @@ -63,7 +63,7 @@ async def main() -> None:
ai_agent_settings = AzureAIAgentSettings()

async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds, endpoint=ai_agent_settings.endpoint) as client,
):
# Create agent definition
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import asyncio

from azure.identity.aio import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential

from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings
from semantic_kernel.functions import KernelArguments
Expand Down Expand Up @@ -55,7 +55,7 @@ async def invoke_agent_with_template(template_str: str, template_format: str, de
ai_agent_settings = AzureAIAgentSettings()

async with (
DefaultAzureCredential() as creds,
AzureCliCredential() as creds,
AzureAIAgent.create_client(credential=creds, endpoint=ai_agent_settings.endpoint) as client,
):
# Create agent definition
Expand Down
Loading
Loading