# Copyright (c) Microsoft. All rights reserved. """ Sample: Host a LangChain / LangGraph agent as a Microsoft Foundry hosted agent. This sample shows how to take an agent built with LangGraph and expose it through the Microsoft Foundry hosted-agent **Responses** protocol using the `langchain_azure_ai.agents.hosting` package. Foundry then manages the runtime, sessions, scaling, identity, and protocol endpoints while your agent logic stays in LangGraph. The Responses API is the recommended API for agent-style development in Foundry: it provides OpenAI-compatible chat, streaming, response history, and conversation threading in a single API surface. Prerequisites ------------- - An Azure subscription and a Microsoft Foundry project. - A deployed chat model that supports the Responses API (e.g. gpt-4.1 or gpt-5-mini). - Python 3.10+ and the Azure CLI signed in (`az login`). - Install the hosting extra: pip install -U "langchain-azure-ai[hosting]>=1.2.4" azure-identity - Set environment variables: FOUNDRY_PROJECT_ENDPOINT=https://.services.ai.azure.com/api/projects/ FOUNDRY_MODEL_NAME=gpt-4.1 Run locally ----------- python 14-langchain-hosted-agent.py Then send a Responses request to the local server: curl -sS -H "Content-Type: application/json" \ -X POST http://localhost:8088/responses \ -d '{"input":"Give me one tip for testing hosted agents.","stream":false}' Deploy to Foundry (Azure Developer CLI) --------------------------------------- azd ext install azure.ai.agents azd auth login azd ai agent init -m azd ai agent run # runs the container locally (requires Docker) azd provision # if a new Foundry project/model is needed azd deploy # packages + rolls out to the Foundry hosted runtime See: https://learn.microsoft.com/azure/foundry/how-to/develop/langchain-hosted-agents """ import os from azure.ai.projects import AIProjectClient from azure.identity import DefaultAzureCredential, get_bearer_token_provider from langchain.agents import create_agent from langchain_openai import ChatOpenAI from langchain_azure_ai.agents.hosting import ResponsesHostServer # Scope used to request tokens for the Foundry project's OpenAI-compatible endpoint. _AZURE_AI_SCOPE = "https://ai.azure.com/.default" def build_chat_model() -> ChatOpenAI: """Create a ChatOpenAI bound to the Foundry project's Responses endpoint.""" project_endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"].rstrip("/") deployment = os.environ.get("FOUNDRY_MODEL_NAME", "gpt-4.1") credential = DefaultAzureCredential() project = AIProjectClient(endpoint=project_endpoint, credential=credential) # The project's OpenAI-compatible client exposes the Responses-capable base URL. openai_client = project.get_openai_client() token_provider = get_bearer_token_provider(credential, _AZURE_AI_SCOPE) return ChatOpenAI( model=deployment, base_url=str(openai_client.base_url), api_key=token_provider, ) def main() -> None: # A minimal LangGraph agent. Add your own tools to the list to give it capabilities. graph = create_agent(build_chat_model(), tools=[]) # ResponsesHostServer exposes the compiled graph over POST /responses and emits # Responses API server-sent events (response.created, response.output_text.delta, # response.completed) when a request sets "stream": true. port = int(os.environ.get("PORT", "8088")) ResponsesHostServer(graph).run(port=port) if __name__ == "__main__": main()