microsoft-agents-hosting-core 0.4.0.dev18__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- microsoft_agents_hosting_core-0.5.0/LICENSE +21 -0
- microsoft_agents_hosting_core-0.5.0/PKG-INFO +191 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/_oauth/_flow_state.py +2 -2
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/_oauth/_oauth_flow.py +26 -23
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/activity_handler.py +19 -17
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/agent_application.py +37 -13
- microsoft_agents_hosting_core-0.5.0/microsoft_agents/hosting/core/app/input_file.py +49 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/oauth/_handlers/_authorization_handler.py +4 -4
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/oauth/_handlers/_user_authorization.py +2 -2
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/oauth/_handlers/agentic_user_authorization.py +9 -9
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/oauth/authorization.py +38 -20
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/state/state.py +50 -6
- microsoft_agents_hosting_core-0.5.0/microsoft_agents/hosting/core/app/typing_indicator.py +79 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/authorization/access_token_provider_base.py +1 -1
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/authorization/anonymous_token_provider.py +1 -1
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/authorization/jwt_token_validator.py +6 -4
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/channel_adapter.py +9 -9
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/channel_service_adapter.py +64 -6
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/connector/client/connector_client.py +1 -1
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/connector/client/user_token_client.py +40 -43
- microsoft_agents_hosting_core-0.5.0/microsoft_agents/hosting/core/connector/user_token_base.py +120 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/connector/user_token_client_base.py +3 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/state/agent_state.py +16 -20
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/storage/transcript_file_store.py +1 -5
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/turn_context.py +2 -1
- microsoft_agents_hosting_core-0.5.0/microsoft_agents_hosting_core.egg-info/PKG-INFO +191 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents_hosting_core.egg-info/SOURCES.txt +2 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents_hosting_core.egg-info/requires.txt +1 -1
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/pyproject.toml +9 -2
- microsoft_agents_hosting_core-0.5.0/readme.md +166 -0
- microsoft_agents_hosting_core-0.4.0.dev18/PKG-INFO +0 -16
- microsoft_agents_hosting_core-0.4.0.dev18/microsoft_agents/hosting/core/app/input_file.py +0 -45
- microsoft_agents_hosting_core-0.4.0.dev18/microsoft_agents/hosting/core/app/typing_indicator.py +0 -55
- microsoft_agents_hosting_core-0.4.0.dev18/microsoft_agents/hosting/core/connector/user_token_base.py +0 -44
- microsoft_agents_hosting_core-0.4.0.dev18/microsoft_agents_hosting_core.egg-info/PKG-INFO +0 -16
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/_oauth/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/_oauth/_flow_storage_client.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/agent.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/_routes/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/_routes/_route.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/_routes/_route_list.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/_routes/route_rank.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/_type_defs.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/app_error.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/app_options.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/oauth/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/oauth/_handlers/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/oauth/_sign_in_response.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/oauth/_sign_in_state.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/oauth/auth_handler.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/query.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/state/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/state/conversation_state.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/state/temp_state.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/app/state/turn_state.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/authorization/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/authorization/agent_auth_configuration.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/authorization/auth_types.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/authorization/authentication_constants.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/authorization/claims_identity.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/authorization/connections.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/card_factory.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/channel_api_handler_protocol.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/channel_service_client_factory_base.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/client/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/client/agent_conversation_reference.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/client/channel_factory_protocol.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/client/channel_host_protocol.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/client/channel_info_protocol.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/client/channel_protocol.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/client/channels_configuration.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/client/configuration_channel_host.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/client/conversation_constants.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/client/conversation_id_factory.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/client/conversation_id_factory_options.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/client/conversation_id_factory_protocol.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/client/http_agent_channel.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/client/http_agent_channel_factory.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/connector/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/connector/agent_sign_in_base.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/connector/attachments_base.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/connector/client/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/connector/connector_client_base.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/connector/conversations_base.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/connector/get_product_info.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/connector/teams/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/connector/teams/teams_connector_client.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/message_factory.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/middleware_set.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/rest_channel_service_client_factory.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/state/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/state/state_property_accessor.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/state/user_state.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/storage/__init__.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/storage/_type_aliases.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/storage/error_handling.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/storage/memory_storage.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/storage/storage.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/storage/store_item.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/storage/transcript_info.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/storage/transcript_logger.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/storage/transcript_memory_store.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents/hosting/core/storage/transcript_store.py +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents_hosting_core.egg-info/dependency_links.txt +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/microsoft_agents_hosting_core.egg-info/top_level.txt +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/setup.cfg +0 -0
- {microsoft_agents_hosting_core-0.4.0.dev18 → microsoft_agents_hosting_core-0.5.0}/setup.py +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Microsoft Corporation.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: microsoft-agents-hosting-core
|
|
3
|
+
Version: 0.5.0
|
|
4
|
+
Summary: Core library for Microsoft Agents
|
|
5
|
+
Author: Microsoft Corporation
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/microsoft/Agents
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Requires-Python: >=3.10
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Requires-Dist: microsoft-agents-activity==0.5.0
|
|
19
|
+
Requires-Dist: pyjwt>=2.10.1
|
|
20
|
+
Requires-Dist: isodate>=0.6.1
|
|
21
|
+
Requires-Dist: azure-core>=1.30.0
|
|
22
|
+
Requires-Dist: python-dotenv>=1.1.1
|
|
23
|
+
Dynamic: license-file
|
|
24
|
+
Dynamic: requires-dist
|
|
25
|
+
|
|
26
|
+
# Microsoft Agents Hosting Core
|
|
27
|
+
|
|
28
|
+
[](https://pypi.org/project/microsoft-agents-hosting-core/)
|
|
29
|
+
|
|
30
|
+
The core hosting library for Microsoft 365 Agents SDK. This library provides the fundamental building blocks for creating conversational AI agents, including activity processing, state management, authentication, and channel communication.
|
|
31
|
+
|
|
32
|
+
This is the heart of the Microsoft 365 Agents SDK - think of it as the engine that powers your conversational agents. It handles the complex orchestration of conversations, manages state across turns, and provides the infrastructure needed to build production-ready agents that work across Microsoft 365 platforms.
|
|
33
|
+
|
|
34
|
+
# What is this?
|
|
35
|
+
This library is part of the **Microsoft 365 Agents SDK for Python** - a comprehensive framework for building enterprise-grade conversational AI agents. The SDK enables developers to create intelligent agents that work across multiple platforms including Microsoft Teams, M365 Copilot, Copilot Studio, and web chat, with support for third-party integrations like Slack, Facebook Messenger, and Twilio.
|
|
36
|
+
|
|
37
|
+
## Release Notes
|
|
38
|
+
<table style="width:100%">
|
|
39
|
+
<tr>
|
|
40
|
+
<th style="width:20%">Version</th>
|
|
41
|
+
<th style="width:20%">Date</th>
|
|
42
|
+
<th style="width:60%">Release Notes</th>
|
|
43
|
+
</tr>
|
|
44
|
+
<tr>
|
|
45
|
+
<td>0.5.0</td>
|
|
46
|
+
<td>2025-10-22</td>
|
|
47
|
+
<td>
|
|
48
|
+
<a href="https://github.com/microsoft/Agents-for-python/blob/main/changelog.md">
|
|
49
|
+
0.5.0 Release Notes
|
|
50
|
+
</a>
|
|
51
|
+
</td>
|
|
52
|
+
</tr>
|
|
53
|
+
</table>
|
|
54
|
+
|
|
55
|
+
## Packages Overview
|
|
56
|
+
|
|
57
|
+
We offer the following PyPI packages to create conversational experiences based on Agents:
|
|
58
|
+
|
|
59
|
+
| Package Name | PyPI Version | Description |
|
|
60
|
+
|--------------|-------------|-------------|
|
|
61
|
+
| `microsoft-agents-activity` | [](https://pypi.org/project/microsoft-agents-activity/) | Types and validators implementing the Activity protocol spec. |
|
|
62
|
+
| `microsoft-agents-hosting-core` | [](https://pypi.org/project/microsoft-agents-hosting-core/) | Core library for Microsoft Agents hosting. |
|
|
63
|
+
| `microsoft-agents-hosting-aiohttp` | [](https://pypi.org/project/microsoft-agents-hosting-aiohttp/) | Configures aiohttp to run the Agent. |
|
|
64
|
+
| `microsoft-agents-hosting-teams` | [](https://pypi.org/project/microsoft-agents-hosting-teams/) | Provides classes to host an Agent for Teams. |
|
|
65
|
+
| `microsoft-agents-storage-blob` | [](https://pypi.org/project/microsoft-agents-storage-blob/) | Extension to use Azure Blob as storage. |
|
|
66
|
+
| `microsoft-agents-storage-cosmos` | [](https://pypi.org/project/microsoft-agents-storage-cosmos/) | Extension to use CosmosDB as storage. |
|
|
67
|
+
| `microsoft-agents-authentication-msal` | [](https://pypi.org/project/microsoft-agents-authentication-msal/) | MSAL-based authentication for Microsoft Agents. |
|
|
68
|
+
|
|
69
|
+
Additionally we provide a Copilot Studio Client, to interact with Agents created in CopilotStudio:
|
|
70
|
+
|
|
71
|
+
| Package Name | PyPI Version | Description |
|
|
72
|
+
|--------------|-------------|-------------|
|
|
73
|
+
| `microsoft-agents-copilotstudio-client` | [](https://pypi.org/project/microsoft-agents-copilotstudio-client/) | Direct to Engine client to interact with Agents created in CopilotStudio |
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
## Installation
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
pip install microsoft-agents-hosting-core
|
|
80
|
+
```
|
|
81
|
+
## Simple Echo Agent
|
|
82
|
+
See the [Quickstart sample](https://github.com/microsoft/Agents/tree/main/samples/python/quickstart) for full working code.
|
|
83
|
+
|
|
84
|
+
```python
|
|
85
|
+
agents_sdk_config = load_configuration_from_env(environ)
|
|
86
|
+
|
|
87
|
+
STORAGE = MemoryStorage()
|
|
88
|
+
CONNECTION_MANAGER = MsalConnectionManager(**agents_sdk_config)
|
|
89
|
+
ADAPTER = CloudAdapter(connection_manager=CONNECTION_MANAGER)
|
|
90
|
+
AUTHORIZATION = Authorization(STORAGE, CONNECTION_MANAGER, **agents_sdk_config)
|
|
91
|
+
|
|
92
|
+
AGENT_APP = AgentApplication[TurnState](
|
|
93
|
+
storage=STORAGE, adapter=ADAPTER, authorization=AUTHORIZATION, **agents_sdk_config
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
@AGENT_APP.activity("message")
|
|
97
|
+
async def on_message(context: TurnContext, state: TurnState):
|
|
98
|
+
await context.send_activity(f"You said: {context.activity.text}")
|
|
99
|
+
|
|
100
|
+
...
|
|
101
|
+
|
|
102
|
+
start_server(
|
|
103
|
+
agent_application=AGENT_APP,
|
|
104
|
+
auth_configuration=CONNECTION_MANAGER.get_default_connection_configuration(),
|
|
105
|
+
)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Core Concepts
|
|
109
|
+
|
|
110
|
+
### AgentApplication vs ActivityHandler
|
|
111
|
+
|
|
112
|
+
**AgentApplication** - Modern, fluent API for building agents:
|
|
113
|
+
- Decorator-based routing (`@agent_app.activity("message")`)
|
|
114
|
+
- Built-in state management and middleware
|
|
115
|
+
- AI-ready with authorization support
|
|
116
|
+
- Type-safe with generics
|
|
117
|
+
|
|
118
|
+
**ActivityHandler** - Traditional inheritance-based approach:
|
|
119
|
+
- Override methods for different activity types
|
|
120
|
+
- More familiar to Bot Framework developers
|
|
121
|
+
- Lower-level control over activity processing
|
|
122
|
+
|
|
123
|
+
### Route-based Message Handling
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
@AGENT_APP.message(re.compile(r"^hello$"))
|
|
127
|
+
async def on_hello(context: TurnContext, _state: TurnState):
|
|
128
|
+
await context.send_activity("Hello!")
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
@AGENT_APP.activity("message")
|
|
132
|
+
async def on_message(context: TurnContext, _state: TurnState):
|
|
133
|
+
await context.send_activity(f"you said: {context.activity.text}")
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Error Handling
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
@AGENT_APP.error
|
|
140
|
+
async def on_error(context: TurnContext, error: Exception):
|
|
141
|
+
# NOTE: In production environment, you should consider logging this to Azure
|
|
142
|
+
# application insights.
|
|
143
|
+
print(f"\n [on_turn_error] unhandled error: {error}", file=sys.stderr)
|
|
144
|
+
traceback.print_exc()
|
|
145
|
+
|
|
146
|
+
# Send a message to the user
|
|
147
|
+
await context.send_activity("The bot encountered an error or bug.")
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
## Key Classes Reference
|
|
152
|
+
|
|
153
|
+
### Core Classes
|
|
154
|
+
- **`AgentApplication`** - Main application class with fluent API
|
|
155
|
+
- **`ActivityHandler`** - Base class for inheritance-based agents
|
|
156
|
+
- **`TurnContext`** - Context for each conversation turn
|
|
157
|
+
- **`TurnState`** - State management across conversation turns
|
|
158
|
+
|
|
159
|
+
### State Management
|
|
160
|
+
- **`ConversationState`** - Conversation-scoped state
|
|
161
|
+
- **`UserState`** - User-scoped state across conversations
|
|
162
|
+
- **`TempState`** - Temporary state for current turn
|
|
163
|
+
- **`MemoryStorage`** - In-memory storage (development)
|
|
164
|
+
|
|
165
|
+
### Messaging
|
|
166
|
+
- **`MessageFactory`** - Create different types of messages
|
|
167
|
+
- **`CardFactory`** - Create rich card attachments
|
|
168
|
+
- **`InputFile`** - Handle file attachments
|
|
169
|
+
|
|
170
|
+
### Authorization
|
|
171
|
+
- **`Authorization`** - Authentication and authorization manager
|
|
172
|
+
- **`ClaimsIdentity`** - User identity and claims
|
|
173
|
+
|
|
174
|
+
# Quick Links
|
|
175
|
+
|
|
176
|
+
- 📦 [All SDK Packages on PyPI](https://pypi.org/search/?q=microsoft-agents)
|
|
177
|
+
- 📖 [Complete Documentation](https://aka.ms/agents)
|
|
178
|
+
- 💡 [Python Samples Repository](https://github.com/microsoft/Agents/tree/main/samples/python)
|
|
179
|
+
- 🐛 [Report Issues](https://github.com/microsoft/Agents-for-python/issues)
|
|
180
|
+
|
|
181
|
+
# Sample Applications
|
|
182
|
+
|
|
183
|
+
|Name|Description|README|
|
|
184
|
+
|----|----|----|
|
|
185
|
+
|Quickstart|Simplest agent|[Quickstart](https://github.com/microsoft/Agents/blob/main/samples/python/quickstart/README.md)|
|
|
186
|
+
|Auto Sign In|Simple OAuth agent using Graph and GitHub|[auto-signin](https://github.com/microsoft/Agents/blob/main/samples/python/auto-signin/README.md)|
|
|
187
|
+
|OBO Authorization|OBO flow to access a Copilot Studio Agent|[obo-authorization](https://github.com/microsoft/Agents/blob/main/samples/python/obo-authorization/README.md)|
|
|
188
|
+
|Semantic Kernel Integration|A weather agent built with Semantic Kernel|[semantic-kernel-multiturn](https://github.com/microsoft/Agents/blob/main/samples/python/semantic-kernel-multiturn/README.md)|
|
|
189
|
+
|Streaming Agent|Streams OpenAI responses|[azure-ai-streaming](https://github.com/microsoft/Agents/blob/main/samples/python/azureai-streaming/README.md)|
|
|
190
|
+
|Copilot Studio Client|Console app to consume a Copilot Studio Agent|[copilotstudio-client](https://github.com/microsoft/Agents/blob/main/samples/python/copilotstudio-client/README.md)|
|
|
191
|
+
|Cards Agent|Agent that uses rich cards to enhance conversation design |[cards](https://github.com/microsoft/Agents/blob/main/samples/python/cards/README.md)|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
from datetime import datetime
|
|
6
|
+
from datetime import datetime, timezone
|
|
7
7
|
from enum import Enum
|
|
8
8
|
from typing import Optional
|
|
9
9
|
|
|
@@ -60,7 +60,7 @@ class _FlowState(BaseModel, StoreItem):
|
|
|
60
60
|
return _FlowState.model_validate(json_data)
|
|
61
61
|
|
|
62
62
|
def is_expired(self) -> bool:
|
|
63
|
-
return datetime.now().timestamp() >= self.expiration
|
|
63
|
+
return datetime.now(timezone.utc).timestamp() >= self.expiration
|
|
64
64
|
|
|
65
65
|
def reached_max_attempts(self) -> bool:
|
|
66
66
|
return self.attempts_remaining <= 0
|
|
@@ -6,7 +6,7 @@ from __future__ import annotations
|
|
|
6
6
|
import logging
|
|
7
7
|
|
|
8
8
|
from pydantic import BaseModel
|
|
9
|
-
from datetime import datetime
|
|
9
|
+
from datetime import datetime, timezone
|
|
10
10
|
from typing import Optional
|
|
11
11
|
|
|
12
12
|
from microsoft_agents.activity import (
|
|
@@ -30,7 +30,6 @@ class _FlowResponse(BaseModel):
|
|
|
30
30
|
flow_error_tag: _FlowErrorTag = _FlowErrorTag.NONE
|
|
31
31
|
token_response: Optional[TokenResponse] = None
|
|
32
32
|
sign_in_resource: Optional[SignInResource] = None
|
|
33
|
-
continuation_activity: Optional[Activity] = None
|
|
34
33
|
|
|
35
34
|
|
|
36
35
|
class _OAuthFlow:
|
|
@@ -112,7 +111,7 @@ class _OAuthFlow:
|
|
|
112
111
|
"""Get the user token based on the context.
|
|
113
112
|
|
|
114
113
|
Args:
|
|
115
|
-
magic_code (str,
|
|
114
|
+
magic_code (str, Optional): Defaults to None. The magic code for user authentication.
|
|
116
115
|
|
|
117
116
|
Returns:
|
|
118
117
|
TokenResponse
|
|
@@ -137,7 +136,7 @@ class _OAuthFlow:
|
|
|
137
136
|
if token_response:
|
|
138
137
|
logger.info("User token obtained successfully: %s", token_response)
|
|
139
138
|
self._flow_state.expiration = (
|
|
140
|
-
datetime.now().timestamp() + self._default_flow_duration
|
|
139
|
+
datetime.now(timezone.utc).timestamp() + self._default_flow_duration
|
|
141
140
|
)
|
|
142
141
|
self._flow_state.tag = _FlowStateTag.COMPLETE
|
|
143
142
|
|
|
@@ -183,20 +182,8 @@ class _OAuthFlow:
|
|
|
183
182
|
Notes:
|
|
184
183
|
The flow state is reset if a token is not obtained from cache.
|
|
185
184
|
"""
|
|
186
|
-
token_response = await self.get_user_token()
|
|
187
|
-
if token_response:
|
|
188
|
-
return _FlowResponse(
|
|
189
|
-
flow_state=self._flow_state, token_response=token_response
|
|
190
|
-
)
|
|
191
185
|
|
|
192
186
|
logger.debug("Starting new OAuth flow")
|
|
193
|
-
self._flow_state.tag = _FlowStateTag.BEGIN
|
|
194
|
-
self._flow_state.expiration = (
|
|
195
|
-
datetime.now().timestamp() + self._default_flow_duration
|
|
196
|
-
)
|
|
197
|
-
|
|
198
|
-
self._flow_state.attempts_remaining = self._max_attempts
|
|
199
|
-
self._flow_state.continuation_activity = activity.model_copy()
|
|
200
187
|
|
|
201
188
|
token_exchange_state = TokenExchangeState(
|
|
202
189
|
connection_name=self._abs_oauth_connection_name,
|
|
@@ -205,16 +192,33 @@ class _OAuthFlow:
|
|
|
205
192
|
ms_app_id=self._ms_app_id,
|
|
206
193
|
)
|
|
207
194
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
195
|
+
res = await self._user_token_client.user_token._get_token_or_sign_in_resource(
|
|
196
|
+
activity.from_property.id,
|
|
197
|
+
self._abs_oauth_connection_name,
|
|
198
|
+
activity.channel_id,
|
|
199
|
+
token_exchange_state.get_encoded_state(),
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
if res.token_response:
|
|
203
|
+
logger.info("Skipping flow, user token obtained.")
|
|
204
|
+
self._flow_state.tag = _FlowStateTag.COMPLETE
|
|
205
|
+
self._flow_state.expiration = (
|
|
206
|
+
datetime.now(timezone.utc).timestamp() + self._default_flow_duration
|
|
207
|
+
)
|
|
208
|
+
return _FlowResponse(
|
|
209
|
+
flow_state=self._flow_state, token_response=res.token_response
|
|
211
210
|
)
|
|
211
|
+
|
|
212
|
+
self._flow_state.tag = _FlowStateTag.BEGIN
|
|
213
|
+
self._flow_state.expiration = (
|
|
214
|
+
datetime.now(timezone.utc).timestamp() + self._default_flow_duration
|
|
212
215
|
)
|
|
216
|
+
self._flow_state.attempts_remaining = self._max_attempts
|
|
213
217
|
|
|
214
|
-
logger.debug("Sign-in resource obtained successfully: %s", sign_in_resource)
|
|
218
|
+
logger.debug("Sign-in resource obtained successfully: %s", res.sign_in_resource)
|
|
215
219
|
|
|
216
220
|
return _FlowResponse(
|
|
217
|
-
flow_state=self._flow_state, sign_in_resource=sign_in_resource
|
|
221
|
+
flow_state=self._flow_state, sign_in_resource=res.sign_in_resource
|
|
218
222
|
)
|
|
219
223
|
|
|
220
224
|
async def _continue_from_message(
|
|
@@ -299,7 +303,7 @@ class _OAuthFlow:
|
|
|
299
303
|
else:
|
|
300
304
|
self._flow_state.tag = _FlowStateTag.COMPLETE
|
|
301
305
|
self._flow_state.expiration = (
|
|
302
|
-
datetime.now().timestamp() + self._default_flow_duration
|
|
306
|
+
datetime.now(timezone.utc).timestamp() + self._default_flow_duration
|
|
303
307
|
)
|
|
304
308
|
logger.debug(
|
|
305
309
|
"OAuth flow completed successfully, got TokenResponse: %s",
|
|
@@ -310,7 +314,6 @@ class _OAuthFlow:
|
|
|
310
314
|
flow_state=self._flow_state.model_copy(),
|
|
311
315
|
flow_error_tag=flow_error_tag,
|
|
312
316
|
token_response=token_response,
|
|
313
|
-
continuation_activity=self._flow_state.continuation_activity,
|
|
314
317
|
)
|
|
315
318
|
|
|
316
319
|
async def begin_or_continue_flow(self, activity: Activity) -> _FlowResponse:
|
|
@@ -38,7 +38,7 @@ class ActivityHandler(Agent):
|
|
|
38
38
|
in order to process an inbound :class:`microsoft_agents.activity.Activity`.
|
|
39
39
|
|
|
40
40
|
:param turn_context: The context object for this turn
|
|
41
|
-
:type turn_context: :class:`microsoft_agents.
|
|
41
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
42
42
|
|
|
43
43
|
:returns: A task that represents the work queued to execute
|
|
44
44
|
|
|
@@ -143,7 +143,7 @@ class ActivityHandler(Agent):
|
|
|
143
143
|
:meth:`on_turn()` is used.
|
|
144
144
|
|
|
145
145
|
:param turn_context: The context object for this turn
|
|
146
|
-
:type turn_context: :class:`microsoft_agents.
|
|
146
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
147
147
|
:returns: A task that represents the work queued to execute
|
|
148
148
|
|
|
149
149
|
.. remarks::
|
|
@@ -176,7 +176,7 @@ class ActivityHandler(Agent):
|
|
|
176
176
|
|
|
177
177
|
:param members_added: A list of all the members added to the conversation, as described by the
|
|
178
178
|
conversation update activity
|
|
179
|
-
:type members_added: list[ChannelAccount]
|
|
179
|
+
:type members_added: list[:class:`microsoft_agents.activity.ChannelAccount`]
|
|
180
180
|
:param turn_context: The context object for this turn
|
|
181
181
|
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
182
182
|
:returns: A task that represents the work queued to execute
|
|
@@ -195,9 +195,9 @@ class ActivityHandler(Agent):
|
|
|
195
195
|
Override this method in a derived class to provide logic for when members other than the agent leave
|
|
196
196
|
the conversation. You can add your agent's good-bye logic.
|
|
197
197
|
|
|
198
|
-
:param
|
|
198
|
+
:param members_removed: A list of all the members removed from the conversation, as described by the
|
|
199
199
|
conversation update activity
|
|
200
|
-
:type
|
|
200
|
+
:type members_removed: list[:class:`microsoft_agents.activity.ChannelAccount`]
|
|
201
201
|
:param turn_context: The context object for this turn
|
|
202
202
|
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
203
203
|
:returns: A task that represents the work queued to execute
|
|
@@ -216,7 +216,7 @@ class ActivityHandler(Agent):
|
|
|
216
216
|
:meth:`on_turn()` is used.
|
|
217
217
|
|
|
218
218
|
:param turn_context: The context object for this turn
|
|
219
|
-
:type turn_context: :class:`microsoft_agents.
|
|
219
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
220
220
|
|
|
221
221
|
:returns: A task that represents the work queued to execute
|
|
222
222
|
|
|
@@ -260,7 +260,7 @@ class ActivityHandler(Agent):
|
|
|
260
260
|
are added to the conversation.
|
|
261
261
|
|
|
262
262
|
:param message_reactions: The list of reactions added
|
|
263
|
-
:type message_reactions: list[MessageReaction]
|
|
263
|
+
:type message_reactions: list[:class:`microsoft_agents.activity.MessageReaction`]
|
|
264
264
|
:param turn_context: The context object for this turn
|
|
265
265
|
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
266
266
|
:returns: A task that represents the work queued to execute
|
|
@@ -285,7 +285,7 @@ class ActivityHandler(Agent):
|
|
|
285
285
|
are removed from the conversation.
|
|
286
286
|
|
|
287
287
|
:param message_reactions: The list of reactions removed
|
|
288
|
-
:type message_reactions: list[MessageReaction]
|
|
288
|
+
:type message_reactions: list[:class:`microsoft_agents.activity.MessageReaction`]
|
|
289
289
|
:param turn_context: The context object for this turn
|
|
290
290
|
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
291
291
|
|
|
@@ -382,7 +382,7 @@ class ActivityHandler(Agent):
|
|
|
382
382
|
ActivityTypes.typing activities, such as the conversational logic.
|
|
383
383
|
|
|
384
384
|
:param turn_context: The context object for this turn
|
|
385
|
-
:type turn_context: :class:`microsoft_agents.
|
|
385
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
386
386
|
:returns: A task that represents the work queued to execute
|
|
387
387
|
"""
|
|
388
388
|
return
|
|
@@ -395,7 +395,7 @@ class ActivityHandler(Agent):
|
|
|
395
395
|
ActivityTypes.InstallationUpdate activities.
|
|
396
396
|
|
|
397
397
|
:param turn_context: The context object for this turn
|
|
398
|
-
:type turn_context: :class:`microsoft_agents.
|
|
398
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
399
399
|
:returns: A task that represents the work queued to execute
|
|
400
400
|
"""
|
|
401
401
|
if turn_context.activity.action in ("add", "add-upgrade"):
|
|
@@ -412,7 +412,7 @@ class ActivityHandler(Agent):
|
|
|
412
412
|
ActivityTypes.InstallationUpdate activities with 'action' set to 'add'.
|
|
413
413
|
|
|
414
414
|
:param turn_context: The context object for this turn
|
|
415
|
-
:type turn_context: :class:`microsoft_agents.
|
|
415
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
416
416
|
:returns: A task that represents the work queued to execute
|
|
417
417
|
"""
|
|
418
418
|
return
|
|
@@ -425,7 +425,7 @@ class ActivityHandler(Agent):
|
|
|
425
425
|
ActivityTypes.InstallationUpdate activities with 'action' set to 'remove'.
|
|
426
426
|
|
|
427
427
|
:param turn_context: The context object for this turn
|
|
428
|
-
:type turn_context: :class:`microsoft_agents.
|
|
428
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
429
429
|
:returns: A task that represents the work queued to execute
|
|
430
430
|
"""
|
|
431
431
|
return
|
|
@@ -439,7 +439,7 @@ class ActivityHandler(Agent):
|
|
|
439
439
|
If overridden, this method could potentially respond to any of the other activity types.
|
|
440
440
|
|
|
441
441
|
:param turn_context: The context object for this turn
|
|
442
|
-
:type turn_context: :class:`microsoft_agents.
|
|
442
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
443
443
|
|
|
444
444
|
:returns: A task that represents the work queued to execute
|
|
445
445
|
|
|
@@ -456,9 +456,10 @@ class ActivityHandler(Agent):
|
|
|
456
456
|
Registers an activity event handler for the _invoke_ event, emitted for every incoming event activity.
|
|
457
457
|
|
|
458
458
|
:param turn_context: The context object for this turn
|
|
459
|
-
:type turn_context: :class:`microsoft_agents.
|
|
459
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
460
460
|
|
|
461
461
|
:returns: A task that represents the work queued to execute
|
|
462
|
+
:rtype: Optional[:class:`microsoft_agents.activity.InvokeResponse`]
|
|
462
463
|
"""
|
|
463
464
|
try:
|
|
464
465
|
if (
|
|
@@ -492,7 +493,7 @@ class ActivityHandler(Agent):
|
|
|
492
493
|
By default, this method does nothing.
|
|
493
494
|
|
|
494
495
|
:param turn_context: The context object for this turn
|
|
495
|
-
:type turn_context: :class:`microsoft_agents.
|
|
496
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
496
497
|
|
|
497
498
|
:returns: A task that represents the work queued to execute
|
|
498
499
|
"""
|
|
@@ -508,10 +509,11 @@ class ActivityHandler(Agent):
|
|
|
508
509
|
calls this method.
|
|
509
510
|
|
|
510
511
|
:param turn_context: A context object for this turn.
|
|
511
|
-
:type turn_context: :class:`microsoft_agents.
|
|
512
|
+
:type turn_context: :class:`microsoft_agents.activity.TurnContextProtocol`
|
|
512
513
|
:param invoke_value: A string-typed object from the incoming activity's value.
|
|
513
|
-
:type invoke_value: :class:`microsoft_agents.activity.
|
|
514
|
+
:type invoke_value: :class:`microsoft_agents.activity.AdaptiveCardInvokeValue`
|
|
514
515
|
:return: The HealthCheckResponse object
|
|
516
|
+
:rtype: :class:`microsoft_agents.activity.AdaptiveCardInvokeResponse`
|
|
515
517
|
"""
|
|
516
518
|
raise _InvokeResponseException(HTTPStatus.NOT_IMPLEMENTED)
|
|
517
519
|
|
|
@@ -83,8 +83,16 @@ class AgentApplication(Agent, Generic[StateT]):
|
|
|
83
83
|
) -> None:
|
|
84
84
|
"""
|
|
85
85
|
Creates a new AgentApplication instance.
|
|
86
|
+
|
|
87
|
+
:param options: Configuration options for the application.
|
|
88
|
+
:type options: Optional[:class:`microsoft_agents.hosting.core.app.app_options.ApplicationOptions`]
|
|
89
|
+
:param connection_manager: OAuth connection manager.
|
|
90
|
+
:type connection_manager: Optional[:class:`microsoft_agents.hosting.core.authorization.Connections`]
|
|
91
|
+
:param authorization: Authorization manager for handling authentication flows.
|
|
92
|
+
:type authorization: Optional[:class:`microsoft_agents.hosting.core.app.oauth.Authorization`]
|
|
93
|
+
:param kwargs: Additional configuration parameters.
|
|
94
|
+
:type kwargs: Any
|
|
86
95
|
"""
|
|
87
|
-
self.typing = TypingIndicator()
|
|
88
96
|
self._route_list = _RouteList[StateT]()
|
|
89
97
|
|
|
90
98
|
configuration = kwargs
|
|
@@ -161,6 +169,10 @@ class AgentApplication(Agent, Generic[StateT]):
|
|
|
161
169
|
def adapter(self) -> ChannelServiceAdapter:
|
|
162
170
|
"""
|
|
163
171
|
The bot's adapter.
|
|
172
|
+
|
|
173
|
+
:return: The channel service adapter for the bot.
|
|
174
|
+
:rtype: :class:`microsoft_agents.hosting.core.channel_service_adapter.ChannelServiceAdapter`
|
|
175
|
+
:raises ApplicationError: If the adapter is not configured.
|
|
164
176
|
"""
|
|
165
177
|
|
|
166
178
|
if not self._adapter:
|
|
@@ -181,6 +193,10 @@ class AgentApplication(Agent, Generic[StateT]):
|
|
|
181
193
|
def auth(self) -> Authorization:
|
|
182
194
|
"""
|
|
183
195
|
The application's authentication manager
|
|
196
|
+
|
|
197
|
+
:return: The authentication manager for handling OAuth flows.
|
|
198
|
+
:rtype: :class:`microsoft_agents.hosting.core.app.oauth.Authorization`
|
|
199
|
+
:raises ApplicationError: If authentication is not configured.
|
|
184
200
|
"""
|
|
185
201
|
if not self._auth:
|
|
186
202
|
logger.error(
|
|
@@ -200,6 +216,9 @@ class AgentApplication(Agent, Generic[StateT]):
|
|
|
200
216
|
def options(self) -> ApplicationOptions:
|
|
201
217
|
"""
|
|
202
218
|
The application's configured options.
|
|
219
|
+
|
|
220
|
+
:return: The configuration options for the application.
|
|
221
|
+
:rtype: :class:`microsoft_agents.hosting.core.app.app_options.ApplicationOptions`
|
|
203
222
|
"""
|
|
204
223
|
return self._options
|
|
205
224
|
|
|
@@ -217,18 +236,18 @@ class AgentApplication(Agent, Generic[StateT]):
|
|
|
217
236
|
Routes are ordered by: is_agentic, is_invoke, rank (lower is higher priority), in that order.
|
|
218
237
|
|
|
219
238
|
:param selector: A function that takes a TurnContext and returns a boolean indicating whether the route should be selected.
|
|
220
|
-
:type selector: RouteSelector
|
|
239
|
+
:type selector: :class:`microsoft_agents.hosting.core.app._type_defs.RouteSelector`
|
|
221
240
|
:param handler: A function that takes a TurnContext and a TurnState and returns an Awaitable.
|
|
222
|
-
:type handler: RouteHandler[StateT]
|
|
241
|
+
:type handler: :class:`microsoft_agents.hosting.core.app._type_defs.RouteHandler`[StateT]
|
|
223
242
|
:param is_invoke: Whether the route is for an invoke activity, defaults to False
|
|
224
|
-
:type is_invoke: bool,
|
|
243
|
+
:type is_invoke: bool, Optional
|
|
225
244
|
:param is_agentic: Whether the route is for an agentic request, defaults to False. For agentic requests
|
|
226
245
|
the selector will include a new check for `context.activity.is_agentic_request()`.
|
|
227
|
-
:type is_agentic: bool,
|
|
246
|
+
:type is_agentic: bool, Optional
|
|
228
247
|
:param rank: The rank of the route, defaults to RouteRank.DEFAULT
|
|
229
|
-
:type rank: RouteRank
|
|
248
|
+
:type rank: :class:`microsoft_agents.hosting.core.app._routes.RouteRank`, Optional
|
|
230
249
|
:param auth_handlers: A list of authentication handler IDs to use for this route, defaults to None
|
|
231
|
-
:type auth_handlers: Optional[list[str]],
|
|
250
|
+
:type auth_handlers: Optional[list[str]], Optional
|
|
232
251
|
:raises ApplicationError: If the selector or handler are not valid.
|
|
233
252
|
"""
|
|
234
253
|
if not selector or not handler:
|
|
@@ -639,9 +658,12 @@ class AgentApplication(Agent, Generic[StateT]):
|
|
|
639
658
|
await self._start_long_running_call(context, self._on_turn)
|
|
640
659
|
|
|
641
660
|
async def _on_turn(self, context: TurnContext):
|
|
661
|
+
typing = None
|
|
642
662
|
try:
|
|
643
663
|
if context.activity.type != ActivityTypes.typing:
|
|
644
|
-
|
|
664
|
+
if self._options.start_typing_timer:
|
|
665
|
+
typing = TypingIndicator()
|
|
666
|
+
await typing.start(context)
|
|
645
667
|
|
|
646
668
|
self._remove_mentions(context)
|
|
647
669
|
|
|
@@ -689,11 +711,8 @@ class AgentApplication(Agent, Generic[StateT]):
|
|
|
689
711
|
)
|
|
690
712
|
await self._on_error(context, err)
|
|
691
713
|
finally:
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
async def _start_typing(self, context: TurnContext):
|
|
695
|
-
if self._options.start_typing_timer:
|
|
696
|
-
await self.typing.start(context)
|
|
714
|
+
if typing:
|
|
715
|
+
await typing.stop()
|
|
697
716
|
|
|
698
717
|
def _remove_mentions(self, context: TurnContext):
|
|
699
718
|
if (
|
|
@@ -706,6 +725,11 @@ class AgentApplication(Agent, Generic[StateT]):
|
|
|
706
725
|
def parse_env_vars_configuration(vars: dict[str, Any]) -> dict:
|
|
707
726
|
"""
|
|
708
727
|
Parses environment variables and returns a dictionary with the relevant configuration.
|
|
728
|
+
|
|
729
|
+
:param vars: Dictionary of environment variable names and values.
|
|
730
|
+
:type vars: dict[str, Any]
|
|
731
|
+
:return: Parsed configuration dictionary with nested structure.
|
|
732
|
+
:rtype: dict
|
|
709
733
|
"""
|
|
710
734
|
result = {}
|
|
711
735
|
for key, value in vars.items():
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
Licensed under the MIT License.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from abc import ABC, abstractmethod
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from typing import List, Optional
|
|
11
|
+
|
|
12
|
+
from microsoft_agents.hosting.core import TurnContext
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass
|
|
16
|
+
class InputFile:
|
|
17
|
+
"""A file sent by the user to the bot.
|
|
18
|
+
|
|
19
|
+
:param content: The downloaded content of the file.
|
|
20
|
+
:type content: bytes
|
|
21
|
+
:param content_type: The content type of the file.
|
|
22
|
+
:type content_type: str
|
|
23
|
+
:param content_url: Optional. URL to the content of the file.
|
|
24
|
+
:type content_url: Optional[str]
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
content: bytes
|
|
28
|
+
content_type: str
|
|
29
|
+
content_url: Optional[str]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class InputFileDownloader(ABC):
|
|
33
|
+
"""
|
|
34
|
+
Abstract base class for a plugin responsible for downloading files provided by the user.
|
|
35
|
+
|
|
36
|
+
Implementations should download any files referenced by the incoming activity and return a
|
|
37
|
+
list of :class:`InputFile` instances representing the downloaded content.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
@abstractmethod
|
|
41
|
+
async def download_files(self, context: TurnContext) -> List[InputFile]:
|
|
42
|
+
"""
|
|
43
|
+
Download any files referenced by the incoming activity for the current turn.
|
|
44
|
+
|
|
45
|
+
:param context: The turn context for the current request.
|
|
46
|
+
:type context: :class:`microsoft_agents.hosting.core.turn_context.TurnContext`
|
|
47
|
+
:return: A list of downloaded :class:`InputFile` objects.
|
|
48
|
+
:rtype: list[:class:`microsoft_agents.hosting.core.app.input_file.InputFile`]
|
|
49
|
+
"""
|