microsoft-agents-activity 1.1.0.dev8__tar.gz → 1.2.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_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/PKG-INFO +29 -1
- microsoft_agents_activity-1.2.0/VERSION.txt +1 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/__init__.py +4 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/activity.py +150 -96
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/channel_adapter_protocol.py +4 -4
- microsoft_agents_activity-1.2.0/microsoft_agents/activity/config/_coercion.py +99 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/config/_configure_logging.py +40 -3
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/conversation_reference.py +2 -6
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/__init__.py +3 -0
- microsoft_agents_activity-1.2.0/microsoft_agents/activity/entity/activity_treatment.py +27 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/ai_entity.py +4 -4
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/entity_types.py +1 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/conversation_list.py +2 -3
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_notification_channel_data.py +1 -2
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_notification_response.py +1 -2
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_participants_event_details.py +1 -2
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload.py +7 -7
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_action.py +2 -3
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_query.py +3 -3
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_result.py +3 -3
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_suggested_action.py +2 -3
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card.py +5 -5
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_action_card.py +4 -5
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_multichoice_input.py +2 -2
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_open_uri.py +2 -3
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_section.py +7 -7
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_response_cards.py +1 -2
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_suggested_actions.py +1 -3
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/targeted_meeting_notification_value.py +3 -4
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_channel_account.py +7 -1
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_channel_data.py +2 -3
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_paged_members_result.py +1 -2
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_exchange_state.py +2 -2
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/turn_context_protocol.py +8 -4
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents_activity.egg-info/PKG-INFO +29 -1
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents_activity.egg-info/SOURCES.txt +2 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/readme.md +28 -0
- microsoft_agents_activity-1.1.0.dev8/VERSION.txt +0 -1
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/LICENSE +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/MANIFEST.in +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/_channel_id_field_mixin.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/_model_utils.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/_type_aliases.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/_utils/__init__.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/_utils/_deferred_string.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/action_types.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/activity_event_names.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/activity_importance.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/activity_types.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/adaptive_card_invoke_action.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/adaptive_card_invoke_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/adaptive_card_invoke_value.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/agents_model.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/animation_card.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/attachment.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/attachment_data.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/attachment_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/attachment_layout_types.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/attachment_view.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/audio_card.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/basic_card.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/caller_id_constants.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/card_action.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/card_image.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/channel_account.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/channel_id.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/channels.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/config/__init__.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/config/_load_configuration.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/contact_relation_update_action_types.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/conversation_account.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/conversation_members.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/conversation_parameters.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/conversation_resource_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/conversation_update_types.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/conversations_result.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/delivery_modes.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/end_of_conversation_codes.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/_schema_mixin.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/entity.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/geo_coordinates.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/mention.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/place.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/product_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/stream_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/thing.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/error.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/error_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/errors/__init__.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/errors/error_message.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/errors/error_resources.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/expected_replies.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/fact.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/hero_card.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/inner_http_error.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/input_hints.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/installation_update_action_types.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/invoke_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/media_card.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/media_event_value.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/media_url.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/message_reaction.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/message_reaction_types.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/message_update_types.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/oauth_card.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/paged_members_result.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/receipt_card.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/receipt_item.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/resource_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/role_types.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/semantic_action.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/semantic_actions_states.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/sign_in_constants.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/sign_in_resource.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/signin_card.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/suggested_actions.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/__init__.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/app_based_link_query.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/batch_failed_entries_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/batch_failed_entry.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/batch_operation_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/batch_operation_state_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/bot_config_auth.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/cache_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/cancel_operation_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/channel_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/config_auth_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/config_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/config_response_base.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/config_task_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/file_consent_card.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/file_consent_card_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/file_download_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/file_info_card.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/file_upload_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_details.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_details_base.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_end_event_details.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_event_details.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_notification.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_notification_base.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_notification_recipient_failure_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_participant_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_stage_surface.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_start_event_details.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_tab_icon_surface.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_app.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_attachment.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_body.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_conversation.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_from.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_mention.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_reaction.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_user.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_action_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_attachment.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_parameter.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_query_options.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/notification_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_action_base.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_action_query.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_date_input.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_fact.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_http_post.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_image.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_input_base.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_multichoice_input_choice.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_open_uri_target.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_text_input.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_view_action.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/on_behalf_of.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/read_receipt_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/signin_state_verification_query.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/surface.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_context.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_entity_context.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_request.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_response_card.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_response_payload.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_submit.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_submit_data.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/targeted_meeting_notification.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_card_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_continue_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_message_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_request.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_request_context.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_response_base.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_task_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/team_details.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/team_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_batch_operation_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_channel_data_settings.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_meeting_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_meeting_member.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_meeting_participant.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_member.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tenant_info.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/user_meeting_details.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/text_format_types.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/text_highlight.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/thumbnail_card.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/thumbnail_url.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_exchange_invoke_request.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_exchange_invoke_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_exchange_resource.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_or_sign_in_resource_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_post_resource.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_request.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_response.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_status.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/transcript.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/video_card.py +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents_activity.egg-info/dependency_links.txt +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents_activity.egg-info/requires.txt +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/microsoft_agents_activity.egg-info/top_level.txt +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/pyproject.toml +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/setup.cfg +0 -0
- {microsoft_agents_activity-1.1.0.dev8 → microsoft_agents_activity-1.2.0}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: microsoft-agents-activity
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.0
|
|
4
4
|
Summary: A protocol library for Microsoft Agents
|
|
5
5
|
Author: Microsoft Corporation
|
|
6
6
|
License-Expression: MIT
|
|
@@ -35,6 +35,24 @@ This library is part of the **Microsoft 365 Agents SDK for Python** - a comprehe
|
|
|
35
35
|
<th style="width:20%">Date</th>
|
|
36
36
|
<th style="width:60%">Release Notes</th>
|
|
37
37
|
</tr>
|
|
38
|
+
<tr>
|
|
39
|
+
<td>1.2.0</td>
|
|
40
|
+
<td>2026-07-17</td>
|
|
41
|
+
<td>
|
|
42
|
+
<a href="https://github.com/microsoft/Agents-for-python/blob/main/changelog.md#microsoft-365-agents-sdk-for-python---release-notes-v120">
|
|
43
|
+
1.2.0 Release Notes
|
|
44
|
+
</a>
|
|
45
|
+
</td>
|
|
46
|
+
</tr>
|
|
47
|
+
<tr>
|
|
48
|
+
<td>1.1.0</td>
|
|
49
|
+
<td>2026-06-19</td>
|
|
50
|
+
<td>
|
|
51
|
+
<a href="https://github.com/microsoft/Agents-for-python/blob/main/changelog.md#microsoft-365-agents-sdk-for-python---release-notes-v110">
|
|
52
|
+
1.1.0 Release Notes
|
|
53
|
+
</a>
|
|
54
|
+
</td>
|
|
55
|
+
</tr>
|
|
38
56
|
<tr>
|
|
39
57
|
<td>1.0.0</td>
|
|
40
58
|
<td>2026-05-22</td>
|
|
@@ -44,6 +62,15 @@ This library is part of the **Microsoft 365 Agents SDK for Python** - a comprehe
|
|
|
44
62
|
</a>
|
|
45
63
|
</td>
|
|
46
64
|
</tr>
|
|
65
|
+
<tr>
|
|
66
|
+
<td>0.9.1</td>
|
|
67
|
+
<td>2026-05-04</td>
|
|
68
|
+
<td>
|
|
69
|
+
<a href="https://github.com/microsoft/Agents-for-python/blob/main/changelog.md#microsoft-365-agents-sdk-for-python---release-notes-v091">
|
|
70
|
+
0.9.1 Release Notes
|
|
71
|
+
</a>
|
|
72
|
+
</td>
|
|
73
|
+
</tr>
|
|
47
74
|
<tr>
|
|
48
75
|
<td>0.9.0</td>
|
|
49
76
|
<td>2026-04-15</td>
|
|
@@ -110,6 +137,7 @@ We offer the following PyPI packages to create conversational experiences based
|
|
|
110
137
|
| `microsoft-agents-hosting-core` | [](https://pypi.org/project/microsoft-agents-hosting-core/) | Core library for Microsoft Agents hosting. |
|
|
111
138
|
| `microsoft-agents-hosting-aiohttp` | [](https://pypi.org/project/microsoft-agents-hosting-aiohttp/) | Configures aiohttp to run the Agent. |
|
|
112
139
|
| `microsoft-agents-hosting-teams` | [](https://pypi.org/project/microsoft-agents-hosting-teams/) | Provides classes to host an Agent for Teams. |
|
|
140
|
+
| `microsoft-agents-hosting-dialogs` | [](https://pypi.org/project/microsoft-agents-hosting-dialogs/) | Dialog system with waterfall dialogs, prompts, and multi-turn conversation management. |
|
|
113
141
|
| `microsoft-agents-storage-blob` | [](https://pypi.org/project/microsoft-agents-storage-blob/) | Extension to use Azure Blob as storage. |
|
|
114
142
|
| `microsoft-agents-storage-cosmos` | [](https://pypi.org/project/microsoft-agents-storage-cosmos/) | Extension to use CosmosDB as storage. |
|
|
115
143
|
| `microsoft-agents-authentication-msal` | [](https://pypi.org/project/microsoft-agents-authentication-msal/) | MSAL-based authentication for Microsoft Agents. |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.2.0
|
|
@@ -45,6 +45,8 @@ from .entity import (
|
|
|
45
45
|
ProductInfo,
|
|
46
46
|
Thing,
|
|
47
47
|
StreamInfo,
|
|
48
|
+
ActivityTreatment,
|
|
49
|
+
ActivityTreatmentTypes,
|
|
48
50
|
)
|
|
49
51
|
from .error import Error
|
|
50
52
|
from .error_response import ErrorResponse
|
|
@@ -199,5 +201,7 @@ __all__ = [
|
|
|
199
201
|
"load_configuration_from_env",
|
|
200
202
|
"ChannelAdapterProtocol",
|
|
201
203
|
"TurnContextProtocol",
|
|
204
|
+
"ActivityTreatment",
|
|
205
|
+
"ActivityTreatmentTypes",
|
|
202
206
|
"TokenOrSignInResourceResponse",
|
|
203
207
|
]
|
|
@@ -6,7 +6,8 @@ from __future__ import annotations
|
|
|
6
6
|
import logging
|
|
7
7
|
from copy import copy
|
|
8
8
|
from datetime import datetime, timezone
|
|
9
|
-
from typing import Optional, Any
|
|
9
|
+
from typing import Optional, Any, cast, Annotated, TypeVar
|
|
10
|
+
from typing_extensions import Self
|
|
10
11
|
|
|
11
12
|
from pydantic import (
|
|
12
13
|
Field,
|
|
@@ -48,6 +49,8 @@ from microsoft_agents.activity.errors import activity_errors
|
|
|
48
49
|
|
|
49
50
|
logger = logging.getLogger(__name__)
|
|
50
51
|
|
|
52
|
+
_EntityT = TypeVar("_EntityT", bound=Entity)
|
|
53
|
+
|
|
51
54
|
|
|
52
55
|
# TODO: A2A Agent 2 is responding with None as id, had to mark it as optional (investigate)
|
|
53
56
|
class Activity(AgentsModel, _ChannelIdFieldMixin):
|
|
@@ -157,7 +160,7 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
|
|
|
157
160
|
local_timestamp: datetime = None
|
|
158
161
|
local_timezone: NonEmptyString = None
|
|
159
162
|
service_url: NonEmptyString = None
|
|
160
|
-
from_property: ChannelAccount
|
|
163
|
+
from_property: Annotated[ChannelAccount, Field(alias="from")] = None
|
|
161
164
|
conversation: ConversationAccount = None
|
|
162
165
|
recipient: ChannelAccount = None
|
|
163
166
|
text_format: NonEmptyString = None
|
|
@@ -497,7 +500,7 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
|
|
|
497
500
|
"""
|
|
498
501
|
return Activity(type=ActivityTypes.message)
|
|
499
502
|
|
|
500
|
-
def create_reply(self, text: str = None, locale: str = None):
|
|
503
|
+
def create_reply(self, text: str | None = None, locale: str | None = None):
|
|
501
504
|
"""
|
|
502
505
|
Creates a new message activity as a response to this activity.
|
|
503
506
|
|
|
@@ -509,37 +512,44 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
|
|
|
509
512
|
.. remarks::
|
|
510
513
|
The new activity sets up routing information based on this activity.
|
|
511
514
|
"""
|
|
512
|
-
return
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
515
|
+
return cast(
|
|
516
|
+
Self,
|
|
517
|
+
pick_model(
|
|
518
|
+
self.__class__,
|
|
519
|
+
type=ActivityTypes.message,
|
|
520
|
+
timestamp=datetime.now(timezone.utc),
|
|
521
|
+
from_property=SkipNone(
|
|
522
|
+
ChannelAccount.pick_properties(self.recipient, ["id", "name"])
|
|
523
|
+
),
|
|
524
|
+
recipient=SkipNone(
|
|
525
|
+
ChannelAccount.pick_properties(self.from_property, ["id", "name"])
|
|
526
|
+
),
|
|
527
|
+
reply_to_id=(
|
|
528
|
+
SkipNone(self.id)
|
|
529
|
+
if self.type != ActivityTypes.conversation_update
|
|
530
|
+
or self.channel_id not in ["directline", "webchat"]
|
|
531
|
+
else None
|
|
532
|
+
),
|
|
533
|
+
service_url=self.service_url,
|
|
534
|
+
channel_id=self.channel_id,
|
|
535
|
+
conversation=SkipNone(
|
|
536
|
+
ConversationAccount.pick_properties(
|
|
537
|
+
self.conversation, ["is_group", "id", "name"]
|
|
538
|
+
)
|
|
539
|
+
),
|
|
540
|
+
text=text if text else "",
|
|
541
|
+
locale=locale if locale else SkipNone(self.locale),
|
|
542
|
+
attachments=[],
|
|
543
|
+
entities=[],
|
|
521
544
|
),
|
|
522
|
-
reply_to_id=(
|
|
523
|
-
SkipNone(self.id)
|
|
524
|
-
if type != ActivityTypes.conversation_update
|
|
525
|
-
or self.channel_id not in ["directline", "webchat"]
|
|
526
|
-
else None
|
|
527
|
-
),
|
|
528
|
-
service_url=self.service_url,
|
|
529
|
-
channel_id=self.channel_id,
|
|
530
|
-
conversation=SkipNone(
|
|
531
|
-
ConversationAccount.pick_properties(
|
|
532
|
-
self.conversation, ["is_group", "id", "name"]
|
|
533
|
-
)
|
|
534
|
-
),
|
|
535
|
-
text=text if text else "",
|
|
536
|
-
locale=locale if locale else SkipNone(self.locale),
|
|
537
|
-
attachments=[],
|
|
538
|
-
entities=[],
|
|
539
545
|
)
|
|
540
546
|
|
|
541
547
|
def create_trace(
|
|
542
|
-
self,
|
|
548
|
+
self,
|
|
549
|
+
name: str,
|
|
550
|
+
value: object = None,
|
|
551
|
+
value_type: str | None = None,
|
|
552
|
+
label: str | None = None,
|
|
543
553
|
):
|
|
544
554
|
"""
|
|
545
555
|
Creates a new trace activity based on this activity.
|
|
@@ -554,39 +564,45 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
|
|
|
554
564
|
if not value_type and value:
|
|
555
565
|
value_type = type(value).__name__
|
|
556
566
|
|
|
557
|
-
return
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
567
|
+
return cast(
|
|
568
|
+
Self,
|
|
569
|
+
pick_model(
|
|
570
|
+
self.__class__,
|
|
571
|
+
type=ActivityTypes.trace,
|
|
572
|
+
timestamp=datetime.now(timezone.utc),
|
|
573
|
+
from_property=SkipNone(
|
|
574
|
+
ChannelAccount.pick_properties(self.recipient, ["id", "name"])
|
|
575
|
+
),
|
|
576
|
+
recipient=SkipNone(
|
|
577
|
+
ChannelAccount.pick_properties(self.from_property, ["id", "name"])
|
|
578
|
+
),
|
|
579
|
+
reply_to_id=(
|
|
580
|
+
SkipNone(self.id) # preserve unset
|
|
581
|
+
if self.type != ActivityTypes.conversation_update
|
|
582
|
+
or self.channel_id not in ["directline", "webchat"]
|
|
583
|
+
else None
|
|
584
|
+
),
|
|
585
|
+
service_url=self.service_url,
|
|
586
|
+
channel_id=self.channel_id,
|
|
587
|
+
conversation=SkipNone(
|
|
588
|
+
ConversationAccount.pick_properties(
|
|
589
|
+
self.conversation, ["is_group", "id", "name"]
|
|
590
|
+
)
|
|
591
|
+
),
|
|
592
|
+
name=SkipNone(name),
|
|
593
|
+
label=SkipNone(label),
|
|
594
|
+
value_type=SkipNone(value_type),
|
|
595
|
+
value=SkipNone(value),
|
|
566
596
|
),
|
|
567
|
-
reply_to_id=(
|
|
568
|
-
SkipNone(self.id) # preserve unset
|
|
569
|
-
if type != ActivityTypes.conversation_update
|
|
570
|
-
or self.channel_id not in ["directline", "webchat"]
|
|
571
|
-
else None
|
|
572
|
-
),
|
|
573
|
-
service_url=self.service_url,
|
|
574
|
-
channel_id=self.channel_id,
|
|
575
|
-
conversation=SkipNone(
|
|
576
|
-
ConversationAccount.pick_properties(
|
|
577
|
-
self.conversation, ["is_group", "id", "name"]
|
|
578
|
-
)
|
|
579
|
-
),
|
|
580
|
-
name=SkipNone(name),
|
|
581
|
-
label=SkipNone(label),
|
|
582
|
-
value_type=SkipNone(value_type),
|
|
583
|
-
value=SkipNone(value),
|
|
584
597
|
).as_trace_activity()
|
|
585
598
|
|
|
586
599
|
@staticmethod
|
|
587
600
|
def create_trace_activity(
|
|
588
|
-
name: str,
|
|
589
|
-
|
|
601
|
+
name: str,
|
|
602
|
+
value: object = None,
|
|
603
|
+
value_type: str | None = None,
|
|
604
|
+
label: str | None = None,
|
|
605
|
+
) -> Activity:
|
|
590
606
|
"""
|
|
591
607
|
Creates an instance of the :class:`microsoft_agents.activity.Activity` class as a TraceActivity object.
|
|
592
608
|
|
|
@@ -600,13 +616,16 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
|
|
|
600
616
|
if not value_type and value:
|
|
601
617
|
value_type = type(value).__name__
|
|
602
618
|
|
|
603
|
-
return
|
|
619
|
+
return cast(
|
|
604
620
|
Activity,
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
621
|
+
pick_model(
|
|
622
|
+
Activity,
|
|
623
|
+
type=ActivityTypes.trace,
|
|
624
|
+
name=name,
|
|
625
|
+
label=SkipNone(label),
|
|
626
|
+
value_type=SkipNone(value_type),
|
|
627
|
+
value=SkipNone(value),
|
|
628
|
+
),
|
|
610
629
|
)
|
|
611
630
|
|
|
612
631
|
@staticmethod
|
|
@@ -629,33 +648,71 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
|
|
|
629
648
|
Composite values are split only on the first ``:``.
|
|
630
649
|
:returns: A conversation reference for the conversation that contains this activity.
|
|
631
650
|
"""
|
|
632
|
-
return
|
|
651
|
+
return cast(
|
|
633
652
|
ConversationReference,
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
self.
|
|
645
|
-
|
|
646
|
-
|
|
653
|
+
pick_model(
|
|
654
|
+
ConversationReference,
|
|
655
|
+
activity_id=(
|
|
656
|
+
SkipNone(self.id)
|
|
657
|
+
if self.type != ActivityTypes.conversation_update
|
|
658
|
+
or self.channel_id not in ["directline", "webchat"]
|
|
659
|
+
else None
|
|
660
|
+
),
|
|
661
|
+
user=copy(self.from_property),
|
|
662
|
+
agent=copy(self.recipient),
|
|
663
|
+
conversation=copy(self.conversation),
|
|
664
|
+
channel_id=(
|
|
665
|
+
self.channel_id.split(":", 1)[0]
|
|
666
|
+
if force_base_channel and self.channel_id is not None
|
|
667
|
+
else self.channel_id
|
|
668
|
+
),
|
|
669
|
+
locale=self.locale,
|
|
670
|
+
service_url=self.service_url,
|
|
647
671
|
),
|
|
648
|
-
locale=self.locale,
|
|
649
|
-
service_url=self.service_url,
|
|
650
672
|
)
|
|
651
673
|
|
|
674
|
+
@staticmethod
|
|
675
|
+
def _convert_entity(raw_entity: Entity, entity_cls: type[_EntityT]) -> _EntityT:
|
|
676
|
+
"""
|
|
677
|
+
Converts an entity to a specific entity type.
|
|
678
|
+
|
|
679
|
+
:param raw_entity: The entity to convert.
|
|
680
|
+
:param entity_cls: The class of the entity type to convert to.
|
|
681
|
+
:return: The converted entity of the specified type.
|
|
682
|
+
"""
|
|
683
|
+
if isinstance(raw_entity, entity_cls):
|
|
684
|
+
return raw_entity
|
|
685
|
+
return entity_cls.model_validate(raw_entity.model_dump())
|
|
686
|
+
|
|
687
|
+
@staticmethod
|
|
688
|
+
def _convert_entity_list(
|
|
689
|
+
raw_entities: list[Entity], entity_cls: type[_EntityT]
|
|
690
|
+
) -> list[_EntityT]:
|
|
691
|
+
"""
|
|
692
|
+
Converts a list of entities to a list of a specific entity type.
|
|
693
|
+
|
|
694
|
+
:param raw_entities: The list of entities to convert.
|
|
695
|
+
:param entity_cls: The class of the entity type to convert to.
|
|
696
|
+
:return: The list of converted entities of the specified type.
|
|
697
|
+
"""
|
|
698
|
+
|
|
699
|
+
entities: list[_EntityT] = []
|
|
700
|
+
for e in raw_entities:
|
|
701
|
+
entities.append(Activity._convert_entity(e, entity_cls))
|
|
702
|
+
return entities
|
|
703
|
+
|
|
652
704
|
def get_product_info_entity(self) -> Optional[ProductInfo]:
|
|
653
705
|
if not self.entities:
|
|
654
706
|
return None
|
|
655
707
|
target = EntityTypes.PRODUCT_INFO.lower()
|
|
656
708
|
# validated entities can be Entity, and that prevents us from
|
|
657
709
|
# making assumptions about the casing of the 'type' attribute
|
|
658
|
-
|
|
710
|
+
raw_product_info = next(
|
|
711
|
+
filter(lambda e: e.type.lower() == target, self.entities), None
|
|
712
|
+
)
|
|
713
|
+
if raw_product_info is None:
|
|
714
|
+
return None
|
|
715
|
+
return Activity._convert_entity(raw_product_info, ProductInfo)
|
|
659
716
|
|
|
660
717
|
def get_mentions(self) -> list[Mention]:
|
|
661
718
|
"""
|
|
@@ -669,7 +726,11 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
|
|
|
669
726
|
"""
|
|
670
727
|
if not self.entities:
|
|
671
728
|
return []
|
|
672
|
-
|
|
729
|
+
raw_mentions = [
|
|
730
|
+
x for x in self.entities if x.type.lower() == EntityTypes.MENTION
|
|
731
|
+
]
|
|
732
|
+
|
|
733
|
+
return Activity._convert_entity_list(raw_mentions, Mention)
|
|
673
734
|
|
|
674
735
|
def get_reply_conversation_reference(
|
|
675
736
|
self, reply: ResourceResponse
|
|
@@ -732,21 +793,14 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
|
|
|
732
793
|
if self.type is None:
|
|
733
794
|
return False
|
|
734
795
|
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
796
|
+
type_value = str(getattr(self.type, "value", self.type)).lower()
|
|
797
|
+
activity_type_value = str(
|
|
798
|
+
getattr(activity_type, "value", activity_type)
|
|
799
|
+
).lower()
|
|
739
800
|
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
if not result:
|
|
744
|
-
result = (
|
|
745
|
-
len(type_attribute) > len(activity_type)
|
|
746
|
-
and type_attribute[len(activity_type)] == "/"
|
|
747
|
-
)
|
|
748
|
-
|
|
749
|
-
return result
|
|
801
|
+
return type_value == activity_type_value or type_value.startswith(
|
|
802
|
+
f"{activity_type_value}/"
|
|
803
|
+
)
|
|
750
804
|
|
|
751
805
|
def add_ai_metadata(
|
|
752
806
|
self,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Licensed under the MIT License.
|
|
3
3
|
|
|
4
4
|
from abc import abstractmethod
|
|
5
|
-
from typing import Protocol,
|
|
5
|
+
from typing import Protocol, Callable, Awaitable, Optional
|
|
6
6
|
|
|
7
7
|
from .turn_context_protocol import TurnContextProtocol
|
|
8
8
|
from microsoft_agents.activity import (
|
|
@@ -18,8 +18,8 @@ class ChannelAdapterProtocol(Protocol):
|
|
|
18
18
|
|
|
19
19
|
@abstractmethod
|
|
20
20
|
async def send_activities(
|
|
21
|
-
self, context: TurnContextProtocol, activities:
|
|
22
|
-
) ->
|
|
21
|
+
self, context: TurnContextProtocol, activities: list[Activity]
|
|
22
|
+
) -> list[ResourceResponse]:
|
|
23
23
|
pass
|
|
24
24
|
|
|
25
25
|
@abstractmethod
|
|
@@ -54,7 +54,7 @@ class ChannelAdapterProtocol(Protocol):
|
|
|
54
54
|
claims_identity: dict,
|
|
55
55
|
continuation_activity: Activity,
|
|
56
56
|
callback: Callable[[TurnContextProtocol], Awaitable],
|
|
57
|
-
audience: str = None,
|
|
57
|
+
audience: str | None = None,
|
|
58
58
|
):
|
|
59
59
|
pass
|
|
60
60
|
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
2
|
+
# Licensed under the MIT License.
|
|
3
|
+
|
|
4
|
+
"""Coercion helpers for values loaded from environment configuration.
|
|
5
|
+
|
|
6
|
+
:func:`load_configuration_from_env` keeps every value as the raw string (or a
|
|
7
|
+
nested ``dict``) read from the environment. Consumers that expect a bool, int or
|
|
8
|
+
float must coerce explicitly: a naive ``bool("false")`` is ``True`` and would
|
|
9
|
+
silently invert a flag, and ``int("5") + 1`` style math fails on values that may
|
|
10
|
+
legitimately arrive as strings. These helpers centralize that coercion so every
|
|
11
|
+
config consumer parses env values the same, fail-safe way.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from typing import Any
|
|
17
|
+
|
|
18
|
+
_TRUTHY = ("1", "true")
|
|
19
|
+
_FALSY = ("0", "false")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def coerce_bool(value: Any, default: bool | None = None, name: str = "value") -> bool:
|
|
23
|
+
"""Coerce a config value (possibly an env string) to a bool.
|
|
24
|
+
|
|
25
|
+
Environment variables always arrive as strings, so ``bool("false")`` would
|
|
26
|
+
be ``True``. Recognized truthy spellings are ``1/true`` and falsy spellings
|
|
27
|
+
are ``0/false`` (case-insensitive).
|
|
28
|
+
|
|
29
|
+
An empty/whitespace-only string or ``None`` is treated as *unset* (not as an
|
|
30
|
+
explicit ``false``). For unset and unrecognized values: if ``default`` is
|
|
31
|
+
provided it is returned, otherwise a ``ValueError`` is raised naming the
|
|
32
|
+
offending setting -- mirroring :func:`coerce_int` and :func:`coerce_float`.
|
|
33
|
+
"""
|
|
34
|
+
if isinstance(value, bool):
|
|
35
|
+
return value
|
|
36
|
+
if isinstance(value, (int, float)):
|
|
37
|
+
return bool(value)
|
|
38
|
+
if value is not None:
|
|
39
|
+
text = str(value).strip().lower()
|
|
40
|
+
if text in _TRUTHY:
|
|
41
|
+
return True
|
|
42
|
+
if text in _FALSY:
|
|
43
|
+
return False
|
|
44
|
+
if text:
|
|
45
|
+
if default is not None:
|
|
46
|
+
return default
|
|
47
|
+
raise ValueError(f"Invalid boolean for {name}: {value!r}")
|
|
48
|
+
# Unset (None or empty/whitespace-only string).
|
|
49
|
+
if default is not None:
|
|
50
|
+
return default
|
|
51
|
+
raise ValueError(f"Invalid boolean for {name}: {value!r}")
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def coerce_int(value: Any, default: int, name: str = "value") -> int:
|
|
55
|
+
"""Coerce a config value (possibly an env string) to an int.
|
|
56
|
+
|
|
57
|
+
Empty/``None`` values fall back to ``default``. Bools are treated as unset
|
|
58
|
+
(a stray ``True``/``False`` is not a meaningful count). Numeric strings such
|
|
59
|
+
as ``"5"`` or ``"5.0"`` are accepted; anything else raises ``ValueError``
|
|
60
|
+
naming the offending setting.
|
|
61
|
+
"""
|
|
62
|
+
if value is None:
|
|
63
|
+
return default
|
|
64
|
+
if isinstance(value, bool):
|
|
65
|
+
return default
|
|
66
|
+
if isinstance(value, int):
|
|
67
|
+
return value
|
|
68
|
+
text = str(value).strip()
|
|
69
|
+
if not text:
|
|
70
|
+
return default
|
|
71
|
+
try:
|
|
72
|
+
return int(text, 10)
|
|
73
|
+
except ValueError:
|
|
74
|
+
try:
|
|
75
|
+
return int(float(text))
|
|
76
|
+
except ValueError as ex:
|
|
77
|
+
raise ValueError(f"Invalid integer for {name}: {value!r}") from ex
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def coerce_float(value: Any, default: float, name: str = "value") -> float:
|
|
81
|
+
"""Coerce a config value (possibly an env string) to a float.
|
|
82
|
+
|
|
83
|
+
Empty/``None`` values fall back to ``default``. Bools are treated as unset.
|
|
84
|
+
Anything that is not parseable as a float raises ``ValueError`` naming the
|
|
85
|
+
offending setting.
|
|
86
|
+
"""
|
|
87
|
+
if value is None:
|
|
88
|
+
return default
|
|
89
|
+
if isinstance(value, bool):
|
|
90
|
+
return default
|
|
91
|
+
if isinstance(value, (int, float)):
|
|
92
|
+
return float(value)
|
|
93
|
+
text = str(value).strip()
|
|
94
|
+
if not text:
|
|
95
|
+
return default
|
|
96
|
+
try:
|
|
97
|
+
return float(text)
|
|
98
|
+
except ValueError as ex:
|
|
99
|
+
raise ValueError(f"Invalid number for {name}: {value!r}") from ex
|
|
@@ -20,6 +20,44 @@ _NAME_TO_LEVEL = {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
|
|
23
|
+
class ColorFormatter(logging.Formatter):
|
|
24
|
+
"""Logging formatter that can add ANSI color based on severity."""
|
|
25
|
+
|
|
26
|
+
MAGENTA = "\033[1;35m"
|
|
27
|
+
RED = "\033[1;31m"
|
|
28
|
+
YELLOW = "\033[1;33m"
|
|
29
|
+
GREEN = "\033[1;32m"
|
|
30
|
+
BLUE = "\033[1;34m"
|
|
31
|
+
RESET = "\033[0m"
|
|
32
|
+
|
|
33
|
+
FMT = (
|
|
34
|
+
"%(asctime)s - %(name)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)"
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
def __init__(
|
|
38
|
+
self,
|
|
39
|
+
use_colors: bool = True,
|
|
40
|
+
) -> None:
|
|
41
|
+
super().__init__(fmt=self.FMT)
|
|
42
|
+
self._plain_formatter = logging.Formatter(fmt=self.FMT)
|
|
43
|
+
if not use_colors:
|
|
44
|
+
self._formatters: dict[int, logging.Formatter] = {}
|
|
45
|
+
return
|
|
46
|
+
self._formatters = {
|
|
47
|
+
logging.CRITICAL: logging.Formatter(
|
|
48
|
+
f"{self.MAGENTA}{self.FMT}{self.RESET}"
|
|
49
|
+
),
|
|
50
|
+
logging.ERROR: logging.Formatter(f"{self.RED}{self.FMT}{self.RESET}"),
|
|
51
|
+
logging.WARNING: logging.Formatter(f"{self.YELLOW}{self.FMT}{self.RESET}"),
|
|
52
|
+
logging.INFO: logging.Formatter(f"{self.GREEN}{self.FMT}{self.RESET}"),
|
|
53
|
+
logging.DEBUG: logging.Formatter(f"{self.BLUE}{self.FMT}{self.RESET}"),
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
def format(self, record: logging.LogRecord) -> str:
|
|
57
|
+
formatter = self._formatters.get(record.levelno)
|
|
58
|
+
return (formatter or self._plain_formatter).format(record)
|
|
59
|
+
|
|
60
|
+
|
|
23
61
|
def _configure_logging(logging_config: dict):
|
|
24
62
|
"""Configures logging based on the provided logging configuration dictionary.
|
|
25
63
|
|
|
@@ -31,9 +69,7 @@ def _configure_logging(logging_config: dict):
|
|
|
31
69
|
|
|
32
70
|
console_handler = logging.StreamHandler()
|
|
33
71
|
console_handler.setFormatter(
|
|
34
|
-
|
|
35
|
-
"%(asctime)s - %(name)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)"
|
|
36
|
-
)
|
|
72
|
+
ColorFormatter(use_colors=console_handler.stream.isatty())
|
|
37
73
|
)
|
|
38
74
|
|
|
39
75
|
for key in log_levels:
|
|
@@ -50,6 +86,7 @@ def _configure_logging(logging_config: dict):
|
|
|
50
86
|
else:
|
|
51
87
|
logger = logging.getLogger(namespace)
|
|
52
88
|
|
|
89
|
+
logger.propagate = False # Prevent log messages from being propagated
|
|
53
90
|
logger.handlers.clear() # Remove existing handlers to prevent duplicates
|
|
54
91
|
logger.addHandler(console_handler)
|
|
55
92
|
logger.setLevel(level)
|
|
@@ -4,22 +4,18 @@
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
6
|
from uuid import uuid4 as uuid
|
|
7
|
-
from typing import Optional
|
|
8
|
-
import logging
|
|
7
|
+
from typing import Optional, Annotated
|
|
9
8
|
|
|
10
9
|
from pydantic import Field
|
|
11
10
|
|
|
12
11
|
from .channel_account import ChannelAccount
|
|
13
12
|
from ._channel_id_field_mixin import _ChannelIdFieldMixin
|
|
14
|
-
from .channel_id import ChannelId
|
|
15
13
|
from .conversation_account import ConversationAccount
|
|
16
14
|
from .agents_model import AgentsModel
|
|
17
15
|
from ._type_aliases import NonEmptyString
|
|
18
16
|
from .activity_types import ActivityTypes
|
|
19
17
|
from .activity_event_names import ActivityEventNames
|
|
20
18
|
|
|
21
|
-
logger = logging.getLogger(__name__)
|
|
22
|
-
|
|
23
19
|
|
|
24
20
|
class ConversationReference(AgentsModel, _ChannelIdFieldMixin):
|
|
25
21
|
"""An object relating to a particular point in a conversation.
|
|
@@ -48,7 +44,7 @@ class ConversationReference(AgentsModel, _ChannelIdFieldMixin):
|
|
|
48
44
|
# optionals here are due to webchat
|
|
49
45
|
activity_id: Optional[NonEmptyString] = None
|
|
50
46
|
user: Optional[ChannelAccount] = None
|
|
51
|
-
agent: ChannelAccount
|
|
47
|
+
agent: Annotated[ChannelAccount, Field(alias="bot")] = None
|
|
52
48
|
conversation: ConversationAccount
|
|
53
49
|
locale: Optional[NonEmptyString] = None
|
|
54
50
|
service_url: NonEmptyString = None
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
2
2
|
# Licensed under the MIT License.
|
|
3
3
|
|
|
4
|
+
from .activity_treatment import ActivityTreatment, ActivityTreatmentTypes
|
|
4
5
|
from .mention import Mention
|
|
5
6
|
from .entity import Entity
|
|
6
7
|
from .entity_types import EntityTypes
|
|
@@ -35,4 +36,6 @@ __all__ = [
|
|
|
35
36
|
"Place",
|
|
36
37
|
"ProductInfo",
|
|
37
38
|
"Thing",
|
|
39
|
+
"ActivityTreatment",
|
|
40
|
+
"ActivityTreatmentTypes",
|
|
38
41
|
]
|