letschatty 0.4.351__tar.gz → 0.4.352__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.
Potentially problematic release.
This version of letschatty might be problematic. Click here for more details.
- {letschatty-0.4.351 → letschatty-0.4.352}/PKG-INFO +1 -1
- {letschatty-0.4.351 → letschatty-0.4.352}/pyproject.toml +1 -1
- letschatty-0.4.352/src/letschatty/models/ai_microservices/__init__.py +10 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/ai_microservices/expected_output.py +2 -29
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/ai_microservices/lambda_events.py +28 -155
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/ai_microservices/lambda_invokation_types.py +1 -4
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/ai_microservices/n8n_ai_agents_payload.py +1 -3
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/__init__.py +3 -3
- letschatty-0.4.352/src/letschatty/models/analytics/events/chat_based_events/chat_client.py +19 -0
- letschatty-0.4.352/src/letschatty/models/analytics/events/chat_based_events/chat_funnel.py +96 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/company_based_events/asset_events.py +9 -2
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/event_type_to_classes.py +7 -3
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/event_types.py +11 -50
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/chat/chat.py +13 -2
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/chat/chat_with_assets.py +6 -1
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/chat/client.py +0 -2
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/chat/continuous_conversation.py +1 -1
- letschatty-0.4.352/src/letschatty/models/company/CRM/funnel.py +401 -0
- letschatty-0.4.352/src/letschatty/models/company/__init__.py +12 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/ai_agents_decision_output.py +1 -1
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/chatty_ai_agent_in_chat.py +0 -4
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/chatty_ai_mode.py +2 -2
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/get_chat_with_prompt_response.py +0 -1
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/pre_qualify_config.py +1 -28
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/automation.py +10 -19
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/chat_assets.py +3 -2
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/company_assets.py +2 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/sale.py +3 -3
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/empresa.py +4 -1
- letschatty-0.4.352/src/letschatty/models/company/integrations/product_sync_status.py +28 -0
- letschatty-0.4.352/src/letschatty/models/company/integrations/shopify/company_shopify_integration.py +62 -0
- letschatty-0.4.352/src/letschatty/models/company/integrations/shopify/shopify_product_sync_status.py +18 -0
- letschatty-0.4.352/src/letschatty/models/company/integrations/shopify/shopify_webhook_topics.py +40 -0
- letschatty-0.4.352/src/letschatty/models/company/integrations/sync_status_enum.py +9 -0
- letschatty-0.4.352/src/letschatty/models/company/integrations/tienda_nube/company_tienda_nube_integration.py +62 -0
- letschatty-0.4.352/src/letschatty/models/company/integrations/tienda_nube/tienda_nube_product_sync_status.py +18 -0
- letschatty-0.4.352/src/letschatty/models/company/integrations/tienda_nube/tienda_nube_webhook_topics.py +46 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/data_base/collection_interface.py +29 -101
- letschatty-0.4.352/src/letschatty/models/data_base/mongo_connection.py +35 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_document.py +4 -2
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_media.py +4 -3
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/custom_exceptions/custom_exceptions.py +1 -14
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/ai_agents/smart_follow_up_context_builder_v2.py +2 -5
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/chat/chat_service.py +47 -11
- letschatty-0.4.352/src/letschatty/services/chatty_assets/__init__.py +2 -0
- letschatty-0.4.352/src/letschatty/services/chatty_assets/asset_service.py +83 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/chatty_assets/base_container.py +2 -3
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/chatty_assets/base_container_with_collection.py +26 -35
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/continuous_conversation_service/continuous_conversation_helper.py +0 -11
- letschatty-0.4.352/src/letschatty/services/events/events_manager.py +2 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/analytics/events_factory.py +30 -66
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/lambda_ai_orchestrartor/lambda_events_factory.py +8 -46
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/messages_helpers/get_caption_or_body_or_preview.py +4 -6
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/validators/analytics_validator.py +11 -0
- letschatty-0.4.351/src/letschatty/models/ai_microservices/__init__.py +0 -10
- letschatty-0.4.351/src/letschatty/models/analytics/events/chat_based_events/ai_agent_execution_event.py +0 -71
- letschatty-0.4.351/src/letschatty/models/analytics/events/chat_based_events/chat_funnel.py +0 -40
- letschatty-0.4.351/src/letschatty/models/company/CRM/funnel.py +0 -69
- letschatty-0.4.351/src/letschatty/models/company/__init__.py +0 -3
- letschatty-0.4.351/src/letschatty/models/data_base/mongo_connection.py +0 -118
- letschatty-0.4.351/src/letschatty/services/chatty_assets/__init__.py +0 -14
- letschatty-0.4.351/src/letschatty/services/chatty_assets/asset_service.py +0 -260
- letschatty-0.4.351/src/letschatty/services/chatty_assets/assets_collections.py +0 -137
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/__init__.py +0 -38
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/ai_agent_collection.py +0 -19
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/ai_agent_in_chat_collection.py +0 -32
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/ai_component_collection.py +0 -21
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/chain_of_thought_collection.py +0 -30
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/chat_collection.py +0 -21
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/contact_point_collection.py +0 -21
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/fast_answer_collection.py +0 -21
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/filter_criteria_collection.py +0 -18
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/flow_collection.py +0 -20
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/product_collection.py +0 -20
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/sale_collection.py +0 -20
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/source_collection.py +0 -21
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/tag_collection.py +0 -19
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/topic_collection.py +0 -21
- letschatty-0.4.351/src/letschatty/services/chatty_assets/collections/user_collection.py +0 -20
- letschatty-0.4.351/src/letschatty/services/chatty_assets/example_usage.py +0 -44
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/__init__.py +0 -37
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/ai_agent_in_chat_service.py +0 -73
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/ai_agent_service.py +0 -23
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/chain_of_thought_service.py +0 -70
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/chat_service.py +0 -25
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/contact_point_service.py +0 -29
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/fast_answer_service.py +0 -32
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/filter_criteria_service.py +0 -30
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/flow_service.py +0 -25
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/product_service.py +0 -30
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/sale_service.py +0 -25
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/source_service.py +0 -28
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/tag_service.py +0 -32
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/topic_service.py +0 -31
- letschatty-0.4.351/src/letschatty/services/chatty_assets/services/user_service.py +0 -32
- letschatty-0.4.351/src/letschatty/services/events/__init__.py +0 -6
- letschatty-0.4.351/src/letschatty/services/events/events_manager.py +0 -219
- letschatty-0.4.351/src/letschatty/services/factories/analytics/ai_agent_event_factory.py +0 -161
- {letschatty-0.4.351 → letschatty-0.4.352}/LICENSE +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/README.md +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/ai_microservices/openai_payloads.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/base.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/ai_agent_chat.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/business_area.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/chat_based_event.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/chat_context.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/chat_status.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/contact_point.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/continuous_conversation.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/highlight.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/message.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/messages_intent_context.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/product_chat.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/quality_scoring.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/sale.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/tag_chat.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/chat_based_events/workflow.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/company_based_events/company_events.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/company_based_events/user_events.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/metrics/__init_.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/metrics/daily_contact_points.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/metrics/daily_new_chats.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/metrics/daily_sent_templates_grouped.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/metrics/sales_roadmap.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/metrics/sent_templates.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/smart_messages/friendly_code_for_source.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/smart_messages/topic.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/smart_messages/topic_message.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/sources/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/sources/google_ad_utm_source.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/sources/helpers.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/sources/other_source.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/sources/pure_ad.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/sources/pure_ad_utm_source.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/sources/source_base.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/sources/template_source.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/sources/topic_default_source.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/sources/utm_source.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/sources/utms/referer_info.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/sources/utms/utm_query_params.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/sources/whatsapp_default_source.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/auth/jwt.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/base_models/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/base_models/ai_agent_component.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/base_models/chatty_asset_model.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/base_models/helpers.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/base_models/related_asset_usage_example.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/base_models/singleton.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/base_models/update_model_interface.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/base_models/validate_timestamps_and_id.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/channels/channel.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/chat/assets_assigned_to_chat.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/chat/chat_status_modifications.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/chat/filter_parameters.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/chat/flow_link_state.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/chat/highlight.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/chat/preview.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/chat/quality_scoring.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/chat/scheduled_messages.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/chat/temporary_chat.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/chat/time_left.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/CRM/business_area.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/ai_agent_message_draft.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/chain_of_thought_in_chat.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/chat_example.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/chat_example_test.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/chatty_ai_agent.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/chatty_ai_agent_config_for_automation.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/context_item.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/faq.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/follow_up_strategy.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/knowleadge_base_components.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/n8n_agents_info.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/n8n_schema_incoming_message_output.json +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/n8n_schema_smart_follow_up_output.json +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/ai_agents_v2/statuses.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/assignment/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/assignment/assignment_assets.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/chatty_fast_answers/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/chatty_fast_answers/chatty_fast_answer.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/contact_point.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/filter_criteria.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/flow.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/launch/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/launch/launch.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/launch/scheduled_communication.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/launch/subscription.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/media/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/media/file.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/product.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/tag.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/users/agent_chats_snapshot.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/users/user.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/users/user_asset_permission.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/assets/workflow_execution.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/company_chats_snapshot.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/company_messaging_settgins.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/conversation_topic.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/form_field.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/insight.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/company/notifications/notification.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/copilot/links.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/data_base/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/execution/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/execution/execution.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/execution/executor.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/forms/company/auth0_company_registration_form.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/forms/company/meta_register.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/audio.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/base/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/base/chatty_message_json.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/base/message_base.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/base/message_draft.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/button.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/central_notification.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/contact.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/document.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/image.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/interactive.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/location.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/reaction.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_audio.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_button.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_central.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_contacts.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_image.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_interactive.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_location.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_reaction.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_sticker.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_text.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_content/content_video.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_context/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_context/chatty_context.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_referal/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/schema/chatty_referal/chatty_referal.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/sticker.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/text.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/chatty_messages/video.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/message_templates/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/message_templates/chatty_template_campaign.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/message_templates/filled_data_from_frontend.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/message_templates/payload_for_sending_template.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/message_templates/raw_meta_template.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/message_templates/recipient_of_template_campaign.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/message_templates/required_for_frontend_templates.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/meta_base_notification_json.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/meta_error_json.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/meta_inexistent_json.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/meta_message_json.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/meta_status_json.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/meta_unknown_json.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/schema/content_messages/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/schema/content_messages/button_content.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/schema/content_messages/contacts_content.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/schema/content_messages/interactive_content.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/schema/content_messages/location_content.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/schema/content_messages/multimedia_content.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/schema/content_messages/order_content.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/schema/content_messages/reaction_content.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/schema/content_messages/system_content.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/schema/content_messages/text_content.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/schema/values/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/schema/values/value_errors.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/schema/values/value_messages.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/messages/meta_message_model/schema/values/value_statuses.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/custom_exceptions/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/definitions.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/types/CRUD_operations.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/types/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/types/channel_types.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/types/chats_actions.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/types/country.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/types/deletion_type.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/types/executor_types.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/types/identifier.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/types/message_status_types.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/types/message_types.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/types/phone_number.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/types/serializer_type.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/types/source_types.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/utils/types/typealiases.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/ai_agents/context_builder_v2.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/ai_agents/cot_follow_up_examples.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/ai_agents/followup_schema.json +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/ai_agents/smart_follow_up_service_v2.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/ai_agents/tool_descriptions/assign_chat_to_ai_agent_itself.json +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/ai_agents/tool_descriptions/human_handover.json +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/ai_agents/tool_descriptions.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/ai_components_service.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/chat/chat_extractors.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/chat/client_service.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/chat/conversation_topics_service.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/chatty_assets/documentation_diagram.png +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/chatty_assets/readme.md +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/concurrent/concurrent.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/contact_points/contact_point_service.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/analytics/contact_point_factory.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/analytics/smart_messages/topics_factory.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/analytics/sources/helpers.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/analytics/sources/source_factory.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/chats/chat_factory.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/chatty_fast_answers/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/chatty_fast_answers/chatty_fast_answers_factory.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/clients/client_factory.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/company/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/company/empresa_factory.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/messages/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/messages/central_notification_factory.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/messages/chatty_message_factory.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/messages/child_db_message_factory.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/messages/child_request_message.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/messages/from_template_hot_fix.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/messages/message_templates/template_factory.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/messages/message_templates/test.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/meta_notifications/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/meta_notifications/meta_notification_factory.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/factories/product_factory.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/filter_criteria_service.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/messages_helpers/__init__.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/scheduled_messages_service/scheduled_messages_helpers.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/template_campaigns/template_campaign_service.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/users/agent_service.py +0 -0
- {letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/services/users/user_factory.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "letschatty"
|
|
3
|
-
version = "0.4.
|
|
3
|
+
version = "0.4.352" # Or whichever is your latest version
|
|
4
4
|
description = "Models and custom classes to work across the Chattyverse"
|
|
5
5
|
authors = ["Axel <axel@letschatty.com>"]
|
|
6
6
|
license = "MIT"
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from .expected_output import ExpectedOutputQualityTest, ExpectedOutputSmartTag
|
|
2
|
+
from .lambda_events import (
|
|
3
|
+
IncomingMessageCallbackEvent, QualityTestCallbackEvent, SmartTaggingCallbackEvent,
|
|
4
|
+
QualityTestInteractionCallbackEvent, IncomingMessageEvent, QualityTestEvent,
|
|
5
|
+
AllQualityTestEvent, FollowUpEvent, SmartTaggingEvent, QualityTestEventData, AllQualityTestEventData,ChatData,
|
|
6
|
+
ComparisonAnalysisCallbackMetadata, InteractionCallbackMetadata, SmartTaggingCallbackMetadata,
|
|
7
|
+
SmartTaggingPromptEvent
|
|
8
|
+
)
|
|
9
|
+
from .lambda_invokation_types import InvokationType, LambdaAiEvent
|
|
10
|
+
from .openai_payloads import OpenaiPayload, N8nPayload
|
{letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/ai_microservices/expected_output.py
RENAMED
|
@@ -6,10 +6,9 @@ from typing import List, Optional, Literal
|
|
|
6
6
|
from datetime import datetime
|
|
7
7
|
|
|
8
8
|
from letschatty.models.utils.types.message_types import MessageType
|
|
9
|
-
from ...models.company.assets.ai_agents_v2.ai_agents_decision_output import ChainOfThoughtInChatRequest, IncomingMessageAIDecision, IncomingMessageDecisionAction
|
|
9
|
+
from ...models.company.assets.ai_agents_v2.ai_agents_decision_output import ChainOfThoughtInChatRequest, IncomingMessageAIDecision, IncomingMessageDecisionAction
|
|
10
10
|
from ...models.company.assets.automation import Automation
|
|
11
11
|
from ...models.company.form_field import CollectedData
|
|
12
|
-
from ...models.chat.chat import Area
|
|
13
12
|
|
|
14
13
|
class ExpectedOutputQualityTest(BaseModel):
|
|
15
14
|
accuracy: float = Field(description="The accuracy of the comparison analysis")
|
|
@@ -195,30 +194,4 @@ class ExpectedOutputIncomingMessage(BaseModel):
|
|
|
195
194
|
|
|
196
195
|
|
|
197
196
|
class ExpectedOutputSmartFollowUp(BaseModel):
|
|
198
|
-
action:
|
|
199
|
-
messages: List[str] = Field(description="Array of message strings to send to the customer. Required for send/suggest actions, optional for escalate action, empty array for skip/remove/postpone actions.")
|
|
200
|
-
chain_of_thought: ChainOfThoughtInChatRequest = Field(description="REQUIRED: Your reasoning process and response decision explanation")
|
|
201
|
-
next_call_time: Optional[datetime] = Field(default=None, description="The next call time for the smart follow up (required for postpone_delta_time action)")
|
|
202
|
-
reason: Optional[str] = Field(default=None, description="Reason for the decision (especially for postpone/postponed actions)")
|
|
203
|
-
area: Optional[Area] = Field(default=None, description="The area to move the chat after the decision")
|
|
204
|
-
|
|
205
|
-
def to_smart_follow_up_decision_output(self) -> SmartFollowUpDecision:
|
|
206
|
-
messages_drafts = [
|
|
207
|
-
MessageDraft(
|
|
208
|
-
type=MessageType.TEXT,
|
|
209
|
-
content=ChattyContentText(body=message),
|
|
210
|
-
is_incoming_message=False
|
|
211
|
-
)
|
|
212
|
-
for message in self.messages
|
|
213
|
-
]
|
|
214
|
-
smart_follow_up_decision = SmartFollowUpDecision(
|
|
215
|
-
action=self.action,
|
|
216
|
-
next_call_time=self.next_call_time,
|
|
217
|
-
messages=messages_drafts,
|
|
218
|
-
chain_of_thought=self.chain_of_thought,
|
|
219
|
-
reason=self.reason,
|
|
220
|
-
area=self.area
|
|
221
|
-
)
|
|
222
|
-
return smart_follow_up_decision
|
|
223
|
-
|
|
224
|
-
|
|
197
|
+
action: Optional[str] = None
|
{letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/ai_microservices/lambda_events.py
RENAMED
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
from letschatty.models.company.assets.ai_agents_v2.chatty_ai_agent_in_chat import HumanInterventionReason
|
|
2
1
|
from letschatty.models.company.assets.chat_assets import ChainOfThoughtInChatTrigger
|
|
3
2
|
from pydantic import BaseModel, Field, model_validator
|
|
4
|
-
from typing import Dict, Any, List, Optional
|
|
3
|
+
from typing import Dict, Any, List, Optional
|
|
5
4
|
|
|
6
5
|
from letschatty.models.base_models.ai_agent_component import AiAgentComponentType
|
|
7
|
-
from letschatty.models.company.assets.ai_agents_v2.statuses import DataCollectionStatus, PreQualifyStatus
|
|
8
6
|
from letschatty.models.utils.types.identifier import StrObjectId
|
|
9
7
|
from .lambda_invokation_types import InvokationType, LambdaAiEvent
|
|
10
|
-
from .expected_output import ExpectedOutputIncomingMessage,
|
|
11
|
-
from ...models.company.assets.ai_agents_v2.ai_agents_decision_output import IncomingMessageDecisionAction
|
|
8
|
+
from .expected_output import ExpectedOutputIncomingMessage, ExpectedOutputSmartTag, ExpectedOutputQualityTest, ExpectedOutputSmartFollowUp, IncomingMessageAIDecision
|
|
9
|
+
from ...models.company.assets.ai_agents_v2.ai_agents_decision_output import IncomingMessageDecisionAction
|
|
10
|
+
from ...models.company.assets.ai_agents_v2.chatty_ai_agent_in_chat import HumanInterventionReason
|
|
12
11
|
|
|
13
12
|
class SmartTaggingCallbackMetadata(BaseModel):
|
|
14
13
|
chat_id: StrObjectId
|
|
15
14
|
company_id: StrObjectId
|
|
16
|
-
trigger: ChainOfThoughtInChatTrigger
|
|
17
15
|
|
|
18
16
|
class ComparisonAnalysisCallbackMetadata(BaseModel):
|
|
19
17
|
test_case_id: StrObjectId
|
|
@@ -25,8 +23,21 @@ class InteractionCallbackMetadata(BaseModel):
|
|
|
25
23
|
ai_agent_id: StrObjectId
|
|
26
24
|
company_id: StrObjectId
|
|
27
25
|
interaction_index: int
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
|
|
27
|
+
class IncomingMessageCallbackMetadata(BaseModel):
|
|
28
|
+
chat_id: StrObjectId
|
|
29
|
+
company_id: StrObjectId
|
|
30
|
+
ai_agent_id: StrObjectId
|
|
31
|
+
cot_id: StrObjectId
|
|
32
|
+
trigger: str
|
|
33
|
+
# Trigger info is in: incoming_message_ids for user_message,
|
|
34
|
+
# triggered_by_user_id for manual_trigger, smart_follow_up_id for follow_up
|
|
35
|
+
triggered_by_user_id: Optional[StrObjectId] = None
|
|
36
|
+
|
|
37
|
+
class IncomingMessageCallbackEvent(LambdaAiEvent):
|
|
38
|
+
type: InvokationType = InvokationType.INCOMING_MESSAGE_CALLBACK
|
|
39
|
+
data: IncomingMessageAIDecision
|
|
40
|
+
callback_metadata: IncomingMessageCallbackMetadata
|
|
30
41
|
|
|
31
42
|
class QualityTestCallbackEvent(LambdaAiEvent):
|
|
32
43
|
type: InvokationType = InvokationType.SINGLE_QUALITY_TEST_CALLBACK
|
|
@@ -44,50 +55,6 @@ class QualityTestInteractionCallbackEvent(LambdaAiEvent):
|
|
|
44
55
|
data["data"]["chain_of_thought"]["chatty_ai_agent_id"] = data["callback_metadata"]["ai_agent_id"]
|
|
45
56
|
return data
|
|
46
57
|
|
|
47
|
-
@model_validator(mode="before")
|
|
48
|
-
@classmethod
|
|
49
|
-
def set_chain_of_thought_id(cls, values: Dict[str, Any]):
|
|
50
|
-
"""
|
|
51
|
-
Get the chain_of_thought_id from callback_metadata and set it in data.chain_of_thought.id
|
|
52
|
-
|
|
53
|
-
Handles both cases:
|
|
54
|
-
- data is a JSON string (needs parsing)
|
|
55
|
-
- data is already a dict
|
|
56
|
-
"""
|
|
57
|
-
import json
|
|
58
|
-
|
|
59
|
-
data = values.get("data")
|
|
60
|
-
callback_metadata = values.get("callback_metadata")
|
|
61
|
-
|
|
62
|
-
if not data or not callback_metadata:
|
|
63
|
-
return values
|
|
64
|
-
|
|
65
|
-
# Get chain_of_thought_id from callback_metadata (could be dict or object)
|
|
66
|
-
if isinstance(callback_metadata, dict):
|
|
67
|
-
chain_of_thought_id = callback_metadata.get("chain_of_thought_id")
|
|
68
|
-
else:
|
|
69
|
-
chain_of_thought_id = getattr(callback_metadata, "chain_of_thought_id", None)
|
|
70
|
-
|
|
71
|
-
if not chain_of_thought_id:
|
|
72
|
-
return values
|
|
73
|
-
|
|
74
|
-
# Parse data if it's a JSON string
|
|
75
|
-
if isinstance(data, str):
|
|
76
|
-
try:
|
|
77
|
-
data = json.loads(data)
|
|
78
|
-
values["data"] = data
|
|
79
|
-
except (json.JSONDecodeError, TypeError):
|
|
80
|
-
return values
|
|
81
|
-
|
|
82
|
-
# If data is a dict, set the id in chain_of_thought
|
|
83
|
-
if isinstance(data, dict):
|
|
84
|
-
chain_of_thought = data.get("chain_of_thought")
|
|
85
|
-
if isinstance(chain_of_thought, dict):
|
|
86
|
-
chain_of_thought["id"] = chain_of_thought_id
|
|
87
|
-
|
|
88
|
-
return values
|
|
89
|
-
|
|
90
|
-
|
|
91
58
|
class SmartTaggingCallbackEvent(LambdaAiEvent):
|
|
92
59
|
type: InvokationType = InvokationType.SMART_TAGGING_CALLBACK
|
|
93
60
|
data: ExpectedOutputSmartTag
|
|
@@ -182,9 +149,11 @@ class DoubleCheckerCallbackMetadata(BaseModel):
|
|
|
182
149
|
company_id: StrObjectId
|
|
183
150
|
ai_agent_id: StrObjectId
|
|
184
151
|
incoming_messages_ids: List[str]
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
152
|
+
# Trigger info
|
|
153
|
+
trigger: str
|
|
154
|
+
# Trigger info is in: incoming_messages_ids for user_message,
|
|
155
|
+
# triggered_by_user_id for manual_trigger, smart_follow_up_id for follow_up
|
|
156
|
+
triggered_by_user_id: Optional[StrObjectId] = None
|
|
188
157
|
|
|
189
158
|
class DoubleCheckerForIncomingMessagesAnswerEvent(LambdaAiEvent):
|
|
190
159
|
type: InvokationType = InvokationType.DOUBLE_CHECKER_FOR_INCOMING_MESSAGES_ANSWER
|
|
@@ -192,73 +161,13 @@ class DoubleCheckerForIncomingMessagesAnswerEvent(LambdaAiEvent):
|
|
|
192
161
|
|
|
193
162
|
class DoubleCheckerForIncomingMessagesAnswerCallbackEvent(LambdaAiEvent):
|
|
194
163
|
type: InvokationType = InvokationType.DOUBLE_CHECKER_FOR_INCOMING_MESSAGES_ANSWER_CALLBACK
|
|
195
|
-
data:
|
|
164
|
+
data: DoubleCheckerForIncomingMessagesAnswerData
|
|
196
165
|
callback_metadata: DoubleCheckerCallbackMetadata
|
|
197
166
|
|
|
198
|
-
|
|
199
|
-
@classmethod
|
|
200
|
-
def set_chain_of_thought_id(cls, values: Dict[str, Any]):
|
|
201
|
-
"""
|
|
202
|
-
Get the chain_of_thought_id from callback_metadata and set it in data.chain_of_thought.id
|
|
203
|
-
|
|
204
|
-
Handles both cases:
|
|
205
|
-
- data is a JSON string (needs parsing)
|
|
206
|
-
- data is already a dict
|
|
207
|
-
"""
|
|
208
|
-
import json
|
|
209
|
-
|
|
210
|
-
data = values.get("data")
|
|
211
|
-
callback_metadata = values.get("callback_metadata")
|
|
212
|
-
|
|
213
|
-
if not data or not callback_metadata:
|
|
214
|
-
return values
|
|
215
|
-
|
|
216
|
-
# Get chain_of_thought_id from callback_metadata (could be dict or object)
|
|
217
|
-
if isinstance(callback_metadata, dict):
|
|
218
|
-
chain_of_thought_id = callback_metadata.get("chain_of_thought_id")
|
|
219
|
-
else:
|
|
220
|
-
chain_of_thought_id = getattr(callback_metadata, "chain_of_thought_id", None)
|
|
221
|
-
|
|
222
|
-
if not chain_of_thought_id:
|
|
223
|
-
return values
|
|
224
|
-
|
|
225
|
-
# Parse data if it's a JSON string
|
|
226
|
-
if isinstance(data, str):
|
|
227
|
-
try:
|
|
228
|
-
data = json.loads(data)
|
|
229
|
-
values["data"] = data
|
|
230
|
-
except (json.JSONDecodeError, TypeError):
|
|
231
|
-
return values
|
|
232
|
-
|
|
233
|
-
# If data is a dict, set the id in chain_of_thought
|
|
234
|
-
if isinstance(data, dict):
|
|
235
|
-
chain_of_thought = data.get("chain_of_thought")
|
|
236
|
-
if isinstance(chain_of_thought, dict):
|
|
237
|
-
chain_of_thought["id"] = chain_of_thought_id
|
|
238
|
-
|
|
239
|
-
return values
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
# Smart Follow-Up Decision Output Events
|
|
244
|
-
|
|
245
|
-
class SmartFollowUpDecisionOutputData(BaseModel):
|
|
246
|
-
"""Data for smart follow-up decision output"""
|
|
167
|
+
class DoubleCheckerForIncomingMessagesAnswerCallbackMetadata(BaseModel):
|
|
247
168
|
chat_id: StrObjectId
|
|
248
169
|
company_id: StrObjectId
|
|
249
170
|
ai_agent_id: StrObjectId
|
|
250
|
-
smart_follow_up_output: ExpectedOutputSmartFollowUp
|
|
251
|
-
smart_follow_up_id: Optional[StrObjectId] = None
|
|
252
|
-
|
|
253
|
-
class SmartFollowUpDecisionOutputEvent(LambdaAiEvent):
|
|
254
|
-
"""
|
|
255
|
-
Event for smart follow-up decision output.
|
|
256
|
-
|
|
257
|
-
Similar to incoming message decision but for follow-ups.
|
|
258
|
-
Bypasses double checker and sends directly to API.
|
|
259
|
-
"""
|
|
260
|
-
type: InvokationType = InvokationType.SMART_FOLLOW_UP_DECISION_OUTPUT
|
|
261
|
-
data: SmartFollowUpDecisionOutputData
|
|
262
171
|
|
|
263
172
|
|
|
264
173
|
# New AI Agent Context Building Events (for new architecture)
|
|
@@ -293,7 +202,7 @@ class GetChatWithPromptForFollowUpEventData(BaseModel):
|
|
|
293
202
|
"""Data for get chat with prompt for follow-up event"""
|
|
294
203
|
chat_id: StrObjectId
|
|
295
204
|
company_id: StrObjectId
|
|
296
|
-
smart_follow_up_id:
|
|
205
|
+
smart_follow_up_id: StrObjectId
|
|
297
206
|
# Trigger information
|
|
298
207
|
trigger: ChainOfThoughtInChatTrigger
|
|
299
208
|
# trigger_id is derived from: smart_follow_up_id
|
|
@@ -409,29 +318,11 @@ class UpdateAIAgentModeInChatEvent(LambdaAiEvent):
|
|
|
409
318
|
data: UpdateAIAgentModeInChatEventData
|
|
410
319
|
|
|
411
320
|
|
|
412
|
-
class UpdateAIAgentPrequalStatusInChatEventData(BaseModel):
|
|
413
|
-
"""Data for updating pre-qualification and data collection status in a chat"""
|
|
414
|
-
chat_id: StrObjectId
|
|
415
|
-
company_id: StrObjectId
|
|
416
|
-
data_collection_status: Optional[DataCollectionStatus] = Field(default=None, description="New data collection status")
|
|
417
|
-
pre_qualify_status: Optional[PreQualifyStatus] = Field(default=None, description="New pre-qualification status")
|
|
418
|
-
updated_by: Optional[StrObjectId] = Field(default=None, description="User who updated the status")
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
class UpdateAIAgentPrequalStatusInChatEvent(LambdaAiEvent):
|
|
422
|
-
"""
|
|
423
|
-
Event to update data_collection_status and/or pre_qualify_status for a chat's AI agent.
|
|
424
|
-
"""
|
|
425
|
-
type: InvokationType = InvokationType.UPDATE_AI_AGENT_PREQUAL_STATUS_IN_CHAT
|
|
426
|
-
data: UpdateAIAgentPrequalStatusInChatEventData
|
|
427
|
-
|
|
428
|
-
|
|
429
321
|
class EscalateAIAgentInChatEventData(BaseModel):
|
|
430
322
|
"""Data for escalating an AI agent (requiring human intervention)"""
|
|
431
323
|
chat_id: StrObjectId
|
|
432
324
|
company_id: StrObjectId
|
|
433
|
-
reason:
|
|
434
|
-
message: Optional[str] = Field(default="El agente de IA requiere de tu intervención", description="The message to display to the user if any")
|
|
325
|
+
reason: str = Field(description="Reason for escalation (e.g., 'Complex technical issue', 'Customer request')")
|
|
435
326
|
|
|
436
327
|
|
|
437
328
|
class EscalateAIAgentInChatEvent(LambdaAiEvent):
|
|
@@ -463,24 +354,6 @@ class UnescalateAIAgentInChatEvent(LambdaAiEvent):
|
|
|
463
354
|
data: UnescalateAIAgentInChatEventData
|
|
464
355
|
|
|
465
356
|
|
|
466
|
-
|
|
467
|
-
class GetChainOfThoughtsByChatIdEventData(BaseModel):
|
|
468
|
-
"""Data for getting chain of thoughts by chat ID"""
|
|
469
|
-
chat_id: StrObjectId
|
|
470
|
-
company_id: StrObjectId
|
|
471
|
-
skip: int = Field(default=0, description="Number of results to skip for pagination")
|
|
472
|
-
limit: int = Field(default=10, description="Number of results to return")
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
class GetChainOfThoughtsByChatIdEvent(LambdaAiEvent):
|
|
476
|
-
"""
|
|
477
|
-
Event to get chain of thoughts for a chat.
|
|
478
|
-
|
|
479
|
-
Returns a list of chain of thoughts associated with the given chat ID,
|
|
480
|
-
sorted by created_at (newest first), with pagination support via skip.
|
|
481
|
-
"""
|
|
482
|
-
type: InvokationType = InvokationType.GET_CHAIN_OF_THOUGHTS_BY_CHAT_ID
|
|
483
|
-
data: GetChainOfThoughtsByChatIdEventData
|
|
484
357
|
# Launch Events
|
|
485
358
|
|
|
486
359
|
class LaunchCommunicationEventData(BaseModel):
|
|
@@ -11,14 +11,13 @@ class InvokationType(StrEnum):
|
|
|
11
11
|
SMART_TAGGING_PROMPT = "smart_tagging_prompt"
|
|
12
12
|
QUALITY_TEST_INTERACTION = "quality_test_interaction"
|
|
13
13
|
# Callback-specific types
|
|
14
|
+
INCOMING_MESSAGE_CALLBACK = "incoming_message_callback"
|
|
14
15
|
SINGLE_QUALITY_TEST_CALLBACK = "single_quality_test_callback"
|
|
15
16
|
SMART_TAGGING_CALLBACK = "smart_tagging_callback"
|
|
16
17
|
QUALITY_TESTS_FOR_UPDATED_AI_COMPONENT = "quality_tests_for_updated_ai_component"
|
|
17
18
|
FIX_BUGGED_AI_AGENTS_CALLS_IN_CHATS = "fix_bugged_ai_agents_calls_in_chats"
|
|
18
19
|
DOUBLE_CHECKER_FOR_INCOMING_MESSAGES_ANSWER = "double_checker_for_incoming_messages_answer"
|
|
19
20
|
DOUBLE_CHECKER_FOR_INCOMING_MESSAGES_ANSWER_CALLBACK = "double_checker_for_incoming_messages_answer_callback"
|
|
20
|
-
# Decision output events
|
|
21
|
-
SMART_FOLLOW_UP_DECISION_OUTPUT = "smart_follow_up_decision_output"
|
|
22
21
|
# AI Agent context building events (new architecture)
|
|
23
22
|
GET_CHAT_WITH_PROMPT_INCOMING_MESSAGE = "get_chat_with_prompt_incoming_message"
|
|
24
23
|
GET_CHAT_WITH_PROMPT_FOLLOW_UP = "get_chat_with_prompt_follow_up"
|
|
@@ -29,10 +28,8 @@ class InvokationType(StrEnum):
|
|
|
29
28
|
ASSIGN_AI_AGENT_TO_CHAT = "assign_ai_agent_to_chat"
|
|
30
29
|
REMOVE_AI_AGENT_FROM_CHAT = "remove_ai_agent_from_chat"
|
|
31
30
|
UPDATE_AI_AGENT_MODE_IN_CHAT = "update_ai_agent_mode_in_chat"
|
|
32
|
-
UPDATE_AI_AGENT_PREQUAL_STATUS_IN_CHAT = "update_ai_agent_prequal_status_in_chat"
|
|
33
31
|
ESCALATE_AI_AGENT_IN_CHAT = "escalate_ai_agent_in_chat"
|
|
34
32
|
UNESCALATE_AI_AGENT_IN_CHAT = "unescalate_ai_agent_in_chat"
|
|
35
|
-
GET_CHAIN_OF_THOUGHTS_BY_CHAT_ID = "get_chain_of_thoughts_by_chat_id"
|
|
36
33
|
# Launch events
|
|
37
34
|
LAUNCH_COMMUNICATION = "launch_communication"
|
|
38
35
|
LAUNCH_WELCOME_KIT = "launch_welcome_kit"
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
from letschatty.models.company.assets.chat_assets import ChainOfThoughtInChatTrigger
|
|
2
1
|
from pydantic import BaseModel, Field
|
|
3
2
|
from letschatty.models import StrObjectId
|
|
4
3
|
from letschatty.models.company.assets.ai_agents_v2.chatty_ai_agent import N8NWorkspaceAgentType
|
|
@@ -11,5 +10,4 @@ class SmartFollowUpN8NPayload(BaseModel):
|
|
|
11
10
|
class ManualTriggerN8NPayload(BaseModel):
|
|
12
11
|
chat_id: StrObjectId = Field(description="The id of the chat")
|
|
13
12
|
company_id: StrObjectId = Field(description="The id of the company")
|
|
14
|
-
n8n_agent_type: N8NWorkspaceAgentType = Field(description="The type of agent to redirect the message to")
|
|
15
|
-
trigger: ChainOfThoughtInChatTrigger = Field(default=ChainOfThoughtInChatTrigger.MANUAL_TRIGGER)
|
|
13
|
+
n8n_agent_type: N8NWorkspaceAgentType = Field(description="The type of agent to redirect the message to")
|
{letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/__init__.py
RENAMED
|
@@ -3,8 +3,9 @@ from .chat_based_events.contact_point import ContactPointEvent, ContactPointData
|
|
|
3
3
|
from .chat_based_events.business_area import ChatBusinessAreaEvent, BusinessAreaData
|
|
4
4
|
from .chat_based_events.workflow import WorkflowEvent, WorkflowEventData
|
|
5
5
|
from .chat_based_events.chat_status import ChatStatusEvent, ChatStatusEventData, ChatStatusModification, ChatCreatedFrom
|
|
6
|
+
from .chat_based_events.chat_client import ChatClientEvent
|
|
6
7
|
from .chat_based_events.chat_funnel import ChatFunnelEvent, FunnelEventData
|
|
7
|
-
from ...company.CRM.funnel import
|
|
8
|
+
from ...company.CRM.funnel import ChatFunnel, StageTransition, ActiveFunnel
|
|
8
9
|
from .company_based_events.user_events import UserEvent, UserEventData
|
|
9
10
|
from .chat_based_events.quality_scoring import QualityScoringEvent
|
|
10
11
|
from .chat_based_events.message import MessageEvent, MessageData
|
|
@@ -28,5 +29,4 @@ from ...messages.chatty_messages import ChattyMessage
|
|
|
28
29
|
from ...company.CRM.funnel import Funnel, FunnelStage
|
|
29
30
|
from ...utils.types import Status
|
|
30
31
|
from .chat_based_events.chat_based_event import CustomerEventData
|
|
31
|
-
from .chat_based_events.ai_agent_chat import ChattyAIChatEvent, ChattyAIChatData
|
|
32
|
-
from .chat_based_events.ai_agent_execution_event import AIAgentExecutionEvent, AIAgentExecutionEventData
|
|
32
|
+
from .chat_based_events.ai_agent_chat import ChattyAIChatEvent, ChattyAIChatData
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from ..base import Event
|
|
2
|
+
from ..event_types import EventType
|
|
3
|
+
from .chat_based_event import CustomerEventData
|
|
4
|
+
from typing import ClassVar
|
|
5
|
+
import json
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ChatClientEvent(Event):
|
|
9
|
+
"""Emitted when the client (contact/customer) data on a chat is updated."""
|
|
10
|
+
data: CustomerEventData
|
|
11
|
+
|
|
12
|
+
VALID_TYPES: ClassVar[set] = {
|
|
13
|
+
EventType.CHAT_CLIENT_UPDATED,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
def model_dump_json(self, *args, **kwargs):
|
|
17
|
+
dump = json.loads(super().model_dump_json(*args, **kwargs))
|
|
18
|
+
dump['data'] = self.data.model_dump_json()
|
|
19
|
+
return dump
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
from typing import ClassVar, Optional
|
|
2
|
+
from pydantic import Field, field_validator, ValidationInfo
|
|
3
|
+
from ..base import Event
|
|
4
|
+
from ..event_types import EventType
|
|
5
|
+
from .chat_based_event import CustomerEventData
|
|
6
|
+
from ....utils.types.identifier import StrObjectId
|
|
7
|
+
from ....company.CRM.funnel import StageTransition
|
|
8
|
+
import json
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class FunnelEventData(CustomerEventData):
|
|
12
|
+
"""
|
|
13
|
+
Event data for chat funnel events.
|
|
14
|
+
|
|
15
|
+
Fields required per event type:
|
|
16
|
+
- STARTED: funnel_id, chat_funnel_id, stage_transition
|
|
17
|
+
- STAGE_CHANGED: funnel_id, chat_funnel_id, stage_transition (with time_in_previous_stage_seconds)
|
|
18
|
+
- COMPLETED: funnel_id, chat_funnel_id, time_in_funnel_seconds, time_in_last_stage_seconds
|
|
19
|
+
- ABANDONED: funnel_id, chat_funnel_id, time_in_funnel_seconds, time_in_last_stage_seconds
|
|
20
|
+
"""
|
|
21
|
+
funnel_id: StrObjectId = Field(description="The funnel the chat is in")
|
|
22
|
+
chat_funnel_id: StrObjectId = Field(description="Reference to the ChatFunnel record")
|
|
23
|
+
|
|
24
|
+
# For STARTED and STAGE_CHANGED events
|
|
25
|
+
stage_transition: Optional[StageTransition] = Field(
|
|
26
|
+
default=None,
|
|
27
|
+
description="The stage transition details (for STARTED and STAGE_CHANGED)"
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
# For COMPLETED and ABANDONED events
|
|
31
|
+
time_in_funnel_seconds: Optional[int] = Field(
|
|
32
|
+
default=None,
|
|
33
|
+
description="Total time spent in the funnel (for COMPLETED and ABANDONED)"
|
|
34
|
+
)
|
|
35
|
+
time_in_last_stage_seconds: Optional[int] = Field(
|
|
36
|
+
default=None,
|
|
37
|
+
description="Time spent in the last stage before completion/abandonment"
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class ChatFunnelEvent(Event):
|
|
42
|
+
"""
|
|
43
|
+
Event for tracking chat funnel lifecycle.
|
|
44
|
+
|
|
45
|
+
Events:
|
|
46
|
+
- CHAT_FUNNEL_STARTED: Chat entered a funnel
|
|
47
|
+
- CHAT_FUNNEL_STAGE_CHANGED: Chat moved between stages
|
|
48
|
+
- CHAT_FUNNEL_COMPLETED: Chat completed the funnel
|
|
49
|
+
- CHAT_FUNNEL_ABANDONED: Chat abandoned the funnel
|
|
50
|
+
"""
|
|
51
|
+
data: FunnelEventData
|
|
52
|
+
|
|
53
|
+
VALID_TYPES: ClassVar[set] = {
|
|
54
|
+
EventType.CHAT_FUNNEL_STARTED,
|
|
55
|
+
EventType.CHAT_FUNNEL_STAGE_CHANGED,
|
|
56
|
+
EventType.CHAT_FUNNEL_COMPLETED,
|
|
57
|
+
EventType.CHAT_FUNNEL_ABANDONED
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@field_validator('data')
|
|
61
|
+
def validate_data_fields(cls, v: FunnelEventData, info: ValidationInfo):
|
|
62
|
+
"""Validate that appropriate fields are set based on event type"""
|
|
63
|
+
event_type = info.data.get('type')
|
|
64
|
+
|
|
65
|
+
# STARTED: requires stage_transition
|
|
66
|
+
if event_type == EventType.CHAT_FUNNEL_STARTED:
|
|
67
|
+
if v.stage_transition is None:
|
|
68
|
+
raise ValueError("stage_transition must be set for CHAT_FUNNEL_STARTED events")
|
|
69
|
+
|
|
70
|
+
# STAGE_CHANGED: requires stage_transition with time_in_previous_stage_seconds
|
|
71
|
+
elif event_type == EventType.CHAT_FUNNEL_STAGE_CHANGED:
|
|
72
|
+
if v.stage_transition is None:
|
|
73
|
+
raise ValueError("stage_transition must be set for CHAT_FUNNEL_STAGE_CHANGED events")
|
|
74
|
+
if v.stage_transition.time_in_previous_stage_seconds is None:
|
|
75
|
+
raise ValueError("time_in_previous_stage_seconds must be set in stage_transition for CHAT_FUNNEL_STAGE_CHANGED events")
|
|
76
|
+
|
|
77
|
+
# COMPLETED: requires time metrics
|
|
78
|
+
elif event_type == EventType.CHAT_FUNNEL_COMPLETED:
|
|
79
|
+
if v.time_in_funnel_seconds is None:
|
|
80
|
+
raise ValueError("time_in_funnel_seconds must be set for CHAT_FUNNEL_COMPLETED events")
|
|
81
|
+
if v.time_in_last_stage_seconds is None:
|
|
82
|
+
raise ValueError("time_in_last_stage_seconds must be set for CHAT_FUNNEL_COMPLETED events")
|
|
83
|
+
|
|
84
|
+
# ABANDONED: requires time metrics
|
|
85
|
+
elif event_type == EventType.CHAT_FUNNEL_ABANDONED:
|
|
86
|
+
if v.time_in_funnel_seconds is None:
|
|
87
|
+
raise ValueError("time_in_funnel_seconds must be set for CHAT_FUNNEL_ABANDONED events")
|
|
88
|
+
if v.time_in_last_stage_seconds is None:
|
|
89
|
+
raise ValueError("time_in_last_stage_seconds must be set for CHAT_FUNNEL_ABANDONED events")
|
|
90
|
+
|
|
91
|
+
return v
|
|
92
|
+
|
|
93
|
+
def model_dump_json(self, *args, **kwargs):
|
|
94
|
+
dump = json.loads(super().model_dump_json(*args, **kwargs))
|
|
95
|
+
dump['data'] = self.data.model_dump_json()
|
|
96
|
+
return dump
|
|
@@ -58,6 +58,9 @@ class AssetEvent(Event):
|
|
|
58
58
|
EventType.FUNNEL_STAGE_CREATED,
|
|
59
59
|
EventType.FUNNEL_STAGE_UPDATED,
|
|
60
60
|
EventType.FUNNEL_STAGE_DELETED,
|
|
61
|
+
EventType.FUNNEL_MEMBER_ADDED,
|
|
62
|
+
EventType.FUNNEL_MEMBER_UPDATED,
|
|
63
|
+
EventType.FUNNEL_MEMBER_REMOVED,
|
|
61
64
|
EventType.WORKFLOW_CREATED,
|
|
62
65
|
EventType.WORKFLOW_UPDATED,
|
|
63
66
|
EventType.WORKFLOW_DELETED,
|
|
@@ -70,6 +73,9 @@ class AssetEvent(Event):
|
|
|
70
73
|
EventType.FILTER_CRITERIA_CREATED,
|
|
71
74
|
EventType.FILTER_CRITERIA_UPDATED,
|
|
72
75
|
EventType.FILTER_CRITERIA_DELETED,
|
|
76
|
+
EventType.FORM_FIELD_CREATED,
|
|
77
|
+
EventType.FORM_FIELD_UPDATED,
|
|
78
|
+
EventType.FORM_FIELD_DELETED,
|
|
73
79
|
EventType.COMPANY_CREATED,
|
|
74
80
|
EventType.COMPANY_UPDATED,
|
|
75
81
|
EventType.COMPANY_DELETED
|
|
@@ -77,8 +83,9 @@ class AssetEvent(Event):
|
|
|
77
83
|
|
|
78
84
|
@model_validator(mode='after')
|
|
79
85
|
def validate_data_fields(self):
|
|
80
|
-
|
|
81
|
-
|
|
86
|
+
# Asset is not required for deleted/removed events
|
|
87
|
+
if "deleted" not in self.type.value and "removed" not in self.type.value and not self.data.asset:
|
|
88
|
+
raise ValueError("asset must be set for all events except DELETED/REMOVED")
|
|
82
89
|
return self
|
|
83
90
|
|
|
84
91
|
def model_dump_json(self, *args, **kwargs):
|
|
@@ -8,6 +8,7 @@ EVENT_TO_TYPE_CLASSES = {
|
|
|
8
8
|
EventType.CHAT_CREATED : ChatStatusEvent,
|
|
9
9
|
EventType.CHAT_STATUS_UPDATED : ChatStatusEvent,
|
|
10
10
|
EventType.CHAT_DELETED : ChatStatusEvent,
|
|
11
|
+
EventType.CHAT_CLIENT_UPDATED : ChatClientEvent,
|
|
11
12
|
#TAGS
|
|
12
13
|
EventType.TAG_ASSIGNED : TagChatEvent,
|
|
13
14
|
EventType.TAG_REMOVED : TagChatEvent,
|
|
@@ -41,10 +42,9 @@ EVENT_TO_TYPE_CLASSES = {
|
|
|
41
42
|
#CONTINUOUS CONVERSATION
|
|
42
43
|
EventType.CONTINUOUS_CONVERSATION_CREATED : ContinuousConversationEvent,
|
|
43
44
|
EventType.CONTINUOUS_CONVERSATION_UPDATED : ContinuousConversationEvent,
|
|
44
|
-
#FUNNEL
|
|
45
|
-
# Funnel-level events
|
|
45
|
+
#CHAT FUNNEL EVENTS
|
|
46
46
|
EventType.CHAT_FUNNEL_STARTED : ChatFunnelEvent,
|
|
47
|
-
EventType.
|
|
47
|
+
EventType.CHAT_FUNNEL_STAGE_CHANGED : ChatFunnelEvent,
|
|
48
48
|
EventType.CHAT_FUNNEL_COMPLETED : ChatFunnelEvent,
|
|
49
49
|
EventType.CHAT_FUNNEL_ABANDONED : ChatFunnelEvent,
|
|
50
50
|
|
|
@@ -86,6 +86,10 @@ EVENT_TO_TYPE_CLASSES = {
|
|
|
86
86
|
EventType.WORKFLOW_CREATED : AssetEvent,
|
|
87
87
|
EventType.WORKFLOW_UPDATED : AssetEvent,
|
|
88
88
|
EventType.WORKFLOW_DELETED : AssetEvent,
|
|
89
|
+
#FORM FIELDS
|
|
90
|
+
EventType.FORM_FIELD_CREATED : AssetEvent,
|
|
91
|
+
EventType.FORM_FIELD_UPDATED : AssetEvent,
|
|
92
|
+
EventType.FORM_FIELD_DELETED : AssetEvent,
|
|
89
93
|
#AGENTS
|
|
90
94
|
EventType.USER_CREATED : UserEvent,
|
|
91
95
|
EventType.USER_UPDATED : UserEvent,
|
{letschatty-0.4.351 → letschatty-0.4.352}/src/letschatty/models/analytics/events/event_types.py
RENAMED
|
@@ -5,6 +5,8 @@ class EventType(StrEnum):
|
|
|
5
5
|
CHAT_CREATED = "chat.created"
|
|
6
6
|
CHAT_STATUS_UPDATED = "chat.status_updated"
|
|
7
7
|
CHAT_DELETED = "chat.deleted"
|
|
8
|
+
##CHAT CLIENT EVENTS
|
|
9
|
+
CHAT_CLIENT_UPDATED = "chat.client.updated"
|
|
8
10
|
#TAGS
|
|
9
11
|
TAG_ASSIGNED = "chat.tag.assigned"
|
|
10
12
|
TAG_REMOVED = "chat.tag.removed"
|
|
@@ -12,51 +14,6 @@ class EventType(StrEnum):
|
|
|
12
14
|
AI_AGENT_ASSIGNED_TO_CHAT = "chat.chatty_ai_agent.assigned_to_chat"
|
|
13
15
|
AI_AGENT_REMOVED_FROM_CHAT = "chat.chatty_ai_agent.removed_from_chat"
|
|
14
16
|
AI_AGENT_UPDATED_ON_CHAT = "chat.chatty_ai_agent.updated_on_chat"
|
|
15
|
-
|
|
16
|
-
#CHATTY AI AGENT EXECUTION EVENTS - 3-level hierarchy for execution tracking
|
|
17
|
-
# Pattern: chatty_ai_agent_in_chat.{operation}.{detail}
|
|
18
|
-
# Note: Execution events are already chat-scoped via CustomerEventData
|
|
19
|
-
|
|
20
|
-
# TRIGGER EVENTS - What initiates AI agent processing
|
|
21
|
-
CHATTY_AI_AGENT_IN_CHAT_TRIGGER_USER_MESSAGE = "chatty_ai_agent_in_chat.trigger.user_message"
|
|
22
|
-
CHATTY_AI_AGENT_IN_CHAT_TRIGGER_FOLLOW_UP = "chatty_ai_agent_in_chat.trigger.follow_up"
|
|
23
|
-
CHATTY_AI_AGENT_IN_CHAT_TRIGGER_MANUAL = "chatty_ai_agent_in_chat.trigger.manual"
|
|
24
|
-
CHATTY_AI_AGENT_IN_CHAT_TRIGGER_RETRY = "chatty_ai_agent_in_chat.trigger.retry"
|
|
25
|
-
|
|
26
|
-
# STATE EVENTS - AI agent state changes
|
|
27
|
-
CHATTY_AI_AGENT_IN_CHAT_STATE_PROCESSING_STARTED = "chatty_ai_agent_in_chat.state.processing_started"
|
|
28
|
-
CHATTY_AI_AGENT_IN_CHAT_STATE_CALL_STARTED = "chatty_ai_agent_in_chat.state.call_started"
|
|
29
|
-
CHATTY_AI_AGENT_IN_CHAT_STATE_ESCALATED = "chatty_ai_agent_in_chat.state.escalated"
|
|
30
|
-
CHATTY_AI_AGENT_IN_CHAT_STATE_UNESCALATED = "chatty_ai_agent_in_chat.state.unescalated"
|
|
31
|
-
|
|
32
|
-
# CALL EVENTS - Outbound calls to services
|
|
33
|
-
CHATTY_AI_AGENT_IN_CHAT_CALL_GET_CHAT_WITH_PROMPT = "chatty_ai_agent_in_chat.call.get_chat_with_prompt"
|
|
34
|
-
CHATTY_AI_AGENT_IN_CHAT_CALL_TAGGER = "chatty_ai_agent_in_chat.call.tagger"
|
|
35
|
-
CHATTY_AI_AGENT_IN_CHAT_CALL_DOUBLE_CHECKER = "chatty_ai_agent_in_chat.call.double_checker"
|
|
36
|
-
CHATTY_AI_AGENT_IN_CHAT_CALL_DEBUGGER = "chatty_ai_agent_in_chat.call.debugger"
|
|
37
|
-
|
|
38
|
-
# CALLBACK EVENTS - Responses received from services
|
|
39
|
-
CHATTY_AI_AGENT_IN_CHAT_CALLBACK_GET_CHAT_WITH_PROMPT = "chatty_ai_agent_in_chat.callback.get_chat_with_prompt"
|
|
40
|
-
CHATTY_AI_AGENT_IN_CHAT_CALLBACK_TAGGER = "chatty_ai_agent_in_chat.callback.tagger"
|
|
41
|
-
CHATTY_AI_AGENT_IN_CHAT_CALLBACK_DOUBLE_CHECKER = "chatty_ai_agent_in_chat.callback.double_checker"
|
|
42
|
-
CHATTY_AI_AGENT_IN_CHAT_CALLBACK_OUTPUT_RECEIVED = "chatty_ai_agent_in_chat.callback.output_received"
|
|
43
|
-
|
|
44
|
-
# DECISION EVENTS - AI agent decisions and actions
|
|
45
|
-
CHATTY_AI_AGENT_IN_CHAT_DECISION_SEND = "chatty_ai_agent_in_chat.decision.send"
|
|
46
|
-
CHATTY_AI_AGENT_IN_CHAT_DECISION_SUGGEST = "chatty_ai_agent_in_chat.decision.suggest"
|
|
47
|
-
CHATTY_AI_AGENT_IN_CHAT_DECISION_ESCALATE = "chatty_ai_agent_in_chat.decision.escalate"
|
|
48
|
-
CHATTY_AI_AGENT_IN_CHAT_DECISION_SKIP = "chatty_ai_agent_in_chat.decision.skip"
|
|
49
|
-
CHATTY_AI_AGENT_IN_CHAT_DECISION_SENT_TO_API = "chatty_ai_agent_in_chat.decision.sent_to_api"
|
|
50
|
-
CHATTY_AI_AGENT_IN_CHAT_DECISION_COMPLETED = "chatty_ai_agent_in_chat.decision.completed"
|
|
51
|
-
|
|
52
|
-
# ERROR EVENTS - Failures and cancellations
|
|
53
|
-
CHATTY_AI_AGENT_IN_CHAT_ERROR_CALL_FAILED = "chatty_ai_agent_in_chat.error.call_failed"
|
|
54
|
-
CHATTY_AI_AGENT_IN_CHAT_ERROR_CALL_CANCELLED = "chatty_ai_agent_in_chat.error.call_cancelled"
|
|
55
|
-
CHATTY_AI_AGENT_IN_CHAT_ERROR_VALIDATION_FAILED = "chatty_ai_agent_in_chat.error.validation_failed"
|
|
56
|
-
|
|
57
|
-
# RATING EVENTS - User feedback
|
|
58
|
-
CHATTY_AI_AGENT_IN_CHAT_RATING_RECEIVED = "chatty_ai_agent_in_chat.rating.received"
|
|
59
|
-
|
|
60
17
|
#PRODUCTS
|
|
61
18
|
PRODUCT_ASSIGNED = "chat.product.assigned"
|
|
62
19
|
PRODUCT_REMOVED = "chat.product.removed"
|
|
@@ -87,10 +44,9 @@ class EventType(StrEnum):
|
|
|
87
44
|
#CONTINUOUS CONVERSATION
|
|
88
45
|
CONTINUOUS_CONVERSATION_CREATED = "chat.continuous_conversation.created"
|
|
89
46
|
CONTINUOUS_CONVERSATION_UPDATED = "chat.continuous_conversation.updated"
|
|
90
|
-
#FUNNEL
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
CHAT_FUNNEL_UPDATED = "chat.funnel.updated"
|
|
47
|
+
#CHAT FUNNEL EVENTS
|
|
48
|
+
CHAT_FUNNEL_STARTED = "chat.funnel.started"
|
|
49
|
+
CHAT_FUNNEL_STAGE_CHANGED = "chat.funnel.stage_changed"
|
|
94
50
|
CHAT_FUNNEL_COMPLETED = "chat.funnel.completed"
|
|
95
51
|
CHAT_FUNNEL_ABANDONED = "chat.funnel.abandoned"
|
|
96
52
|
|
|
@@ -129,13 +85,18 @@ class EventType(StrEnum):
|
|
|
129
85
|
FAST_ANSWER_CREATED = "company.fast_answer.created"
|
|
130
86
|
FAST_ANSWER_UPDATED = "company.fast_answer.updated"
|
|
131
87
|
FAST_ANSWER_DELETED = "company.fast_answer.deleted"
|
|
132
|
-
#
|
|
88
|
+
#FUNNELS
|
|
133
89
|
FUNNEL_CREATED = "company.funnel.created"
|
|
134
90
|
FUNNEL_UPDATED = "company.funnel.updated"
|
|
135
91
|
FUNNEL_DELETED = "company.funnel.deleted"
|
|
92
|
+
#FUNNEL STAGES
|
|
136
93
|
FUNNEL_STAGE_CREATED = "company.funnel_stage.created"
|
|
137
94
|
FUNNEL_STAGE_UPDATED = "company.funnel_stage.updated"
|
|
138
95
|
FUNNEL_STAGE_DELETED = "company.funnel_stage.deleted"
|
|
96
|
+
#FUNNEL MEMBERS
|
|
97
|
+
FUNNEL_MEMBER_ADDED = "company.funnel_member.added"
|
|
98
|
+
FUNNEL_MEMBER_UPDATED = "company.funnel_member.updated"
|
|
99
|
+
FUNNEL_MEMBER_REMOVED = "company.funnel_member.removed"
|
|
139
100
|
#BUSINESS AREA
|
|
140
101
|
BUSINESS_AREA_CREATED = "company.business_area.created"
|
|
141
102
|
BUSINESS_AREA_UPDATED = "company.business_area.updated"
|