Commit 82ccc985

Krista Pratico <krpratic@microsoft.com>
2025-01-14 02:08:10
docs(examples/azure): example script with realtime API (#1967)
1 parent 7e88d42
Changed files (1)
examples
examples/realtime/azure_realtime.py
@@ -0,0 +1,57 @@
+import os
+import asyncio
+
+from azure.identity.aio import DefaultAzureCredential, get_bearer_token_provider
+
+from openai import AsyncAzureOpenAI
+
+# Azure OpenAI Realtime Docs
+
+# How-to: https://learn.microsoft.com/azure/ai-services/openai/how-to/realtime-audio
+# Supported models and API versions: https://learn.microsoft.com/azure/ai-services/openai/how-to/realtime-audio#supported-models
+# Entra ID auth: https://learn.microsoft.com/azure/ai-services/openai/how-to/managed-identity
+
+
+async def main() -> None:
+    """The following example demonstrates how to configure Azure OpenAI to use the Realtime API.
+    For an audio example, see push_to_talk_app.py and update the client and model parameter accordingly.
+
+    When prompted for user input, type a message and hit enter to send it to the model.
+    Enter "q" to quit the conversation.
+    """
+
+    credential = DefaultAzureCredential()
+    client = AsyncAzureOpenAI(
+        azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
+        azure_ad_token_provider=get_bearer_token_provider(credential, "https://cognitiveservices.azure.com/.default"),
+        api_version="2024-10-01-preview",
+    )
+    async with client.beta.realtime.connect(
+        model="gpt-4o-realtime-preview",  # deployment name for your model
+    ) as connection:
+        await connection.session.update(session={"modalities": ["text"]})  # type: ignore
+        while True:
+            user_input = input("Enter a message: ")
+            if user_input == "q":
+                break
+
+            await connection.conversation.item.create(
+                item={
+                    "type": "message",
+                    "role": "user",
+                    "content": [{"type": "input_text", "text": user_input}],
+                }
+            )
+            await connection.response.create()
+            async for event in connection:
+                if event.type == "response.text.delta":
+                    print(event.delta, flush=True, end="")
+                elif event.type == "response.text.done":
+                    print()
+                elif event.type == "response.done":
+                    break
+
+    await credential.close()
+
+
+asyncio.run(main())