Created
February 3, 2026 05:22
-
-
Save tonybaloney/503d97088852016a21db46f9d8780264 to your computer and use it in GitHub Desktop.
Using Copilot SDK with Azure hosted models
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import asyncio | |
| import logging | |
| import os | |
| from copilot import CopilotClient | |
| logging.basicConfig(level=logging.INFO) | |
| logger = logging.getLogger(__name__) | |
| FOUNDRY_MODEL_URL = ( | |
| "https://xyz.openai.azure.com/openai/v1/" # Get from your Foundry deployment | |
| ) | |
| # Set FOUNDRY_API_KEY environment variable too | |
| async def main(): | |
| # Create and start client | |
| client = CopilotClient() | |
| await client.start() | |
| logger.debug("Client started") | |
| # Create a session | |
| session = await client.create_session( | |
| { | |
| "model": "gpt-5.2-codex", # Model deployment name | |
| "provider": { | |
| "type": "openai", | |
| "base_url": FOUNDRY_MODEL_URL, | |
| "wire_api": "responses", # for GPT-5 modes, use "completions" for older models | |
| "api_key": os.environ["FOUNDRY_API_KEY"], | |
| }, | |
| } | |
| ) | |
| # Wait for response using session.idle event | |
| done = asyncio.Event() | |
| def on_event(event): | |
| logger.debug("Received event: %s", event.type.value) | |
| if event.type.value == "assistant.message": | |
| logger.info(event.data.content) | |
| elif event.type.value == "session.error": | |
| logger.error("Session error: %s", event.data.message) | |
| elif event.type.value == "session.idle": | |
| done.set() | |
| else: | |
| logger.debug("Unhandled event: %s", event.type.value) | |
| session.on(on_event) | |
| # Send a message and wait for completion | |
| await session.send({"prompt": "What is 2+2?"}) | |
| logger.debug("Message sent, waiting for response...") | |
| await done.wait() | |
| logger.debug("Response complete") | |
| # Clean up | |
| await session.destroy() | |
| await client.stop() | |
| asyncio.run(main()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment