letschatty 0.4.337__py3-none-any.whl → 0.4.350__py3-none-any.whl

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.
@@ -4,7 +4,7 @@ from .lambda_events import (
4
4
  QualityTestInteractionCallbackEvent, QualityTestEvent,
5
5
  AllQualityTestEvent, SmartTaggingEvent, QualityTestEventData, AllQualityTestEventData,ChatData,
6
6
  ComparisonAnalysisCallbackMetadata, InteractionCallbackMetadata, SmartTaggingCallbackMetadata,
7
- SmartTaggingPromptEvent
7
+ SmartTaggingPromptEvent, UpdateAIAgentPrequalStatusInChatEvent, UpdateAIAgentPrequalStatusInChatEventData
8
8
  )
9
9
  from .lambda_invokation_types import InvokationType, LambdaAiEvent
10
10
  from .openai_payloads import OpenaiPayload, N8nPayload
@@ -4,6 +4,7 @@ from pydantic import BaseModel, Field, model_validator
4
4
  from typing import Dict, Any, List, Optional, TYPE_CHECKING
5
5
 
6
6
  from letschatty.models.base_models.ai_agent_component import AiAgentComponentType
7
+ from letschatty.models.company.assets.ai_agents_v2.statuses import DataCollectionStatus, PreQualifyStatus
7
8
  from letschatty.models.utils.types.identifier import StrObjectId
8
9
  from .lambda_invokation_types import InvokationType, LambdaAiEvent
9
10
  from .expected_output import ExpectedOutputIncomingMessage, ExpectedOutputSmartFollowUp, ExpectedOutputSmartTag, ExpectedOutputQualityTest, IncomingMessageAIDecision
@@ -93,10 +94,23 @@ class SmartTaggingCallbackEvent(LambdaAiEvent):
93
94
  callback_metadata: SmartTaggingCallbackMetadata
94
95
 
95
96
  @model_validator(mode="before")
96
- def validate_data(cls, data):
97
- if isinstance(data, dict) and "data" in data and "chain_of_thought" in data["data"]:
98
- data["data"]["chain_of_thought"]["chatty_ai_agent_id"] = "000000000000000000000000"
99
- return data
97
+ def normalize_data(cls, values):
98
+ if not isinstance(values, dict):
99
+ return values
100
+
101
+ data = values.get("data")
102
+ if isinstance(data, str):
103
+ import json
104
+ try:
105
+ data = json.loads(data)
106
+ values["data"] = data
107
+ except (json.JSONDecodeError, TypeError):
108
+ return values
109
+
110
+ if isinstance(data, dict) and "chain_of_thought" in data:
111
+ data["chain_of_thought"]["chatty_ai_agent_id"] = "000000000000000000000000"
112
+
113
+ return values
100
114
 
101
115
  class ChatData(BaseModel):
102
116
  chat_id: StrObjectId
@@ -395,6 +409,23 @@ class UpdateAIAgentModeInChatEvent(LambdaAiEvent):
395
409
  data: UpdateAIAgentModeInChatEventData
396
410
 
397
411
 
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
+
398
429
  class EscalateAIAgentInChatEventData(BaseModel):
399
430
  """Data for escalating an AI agent (requiring human intervention)"""
400
431
  chat_id: StrObjectId
@@ -29,6 +29,7 @@ class InvokationType(StrEnum):
29
29
  ASSIGN_AI_AGENT_TO_CHAT = "assign_ai_agent_to_chat"
30
30
  REMOVE_AI_AGENT_FROM_CHAT = "remove_ai_agent_from_chat"
31
31
  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"
32
33
  ESCALATE_AI_AGENT_IN_CHAT = "escalate_ai_agent_in_chat"
33
34
  UNESCALATE_AI_AGENT_IN_CHAT = "unescalate_ai_agent_in_chat"
34
35
  GET_CHAIN_OF_THOUGHTS_BY_CHAT_ID = "get_chain_of_thoughts_by_chat_id"
@@ -7,15 +7,16 @@ independently without loading entire chat documents.
7
7
  """
8
8
 
9
9
  from letschatty.models.analytics.events.base import EventType
10
+ from enum import StrEnum
10
11
  from pydantic import BaseModel, Field, field_validator, ConfigDict
11
12
  from datetime import datetime
12
13
  from zoneinfo import ZoneInfo
13
14
  from typing import Optional, ClassVar, List, Dict, Any
14
- from enum import StrEnum
15
15
  from letschatty.models.base_models.chatty_asset_model import CompanyAssetModel, ChattyAssetPreview
16
16
  from letschatty.models.utils.types.identifier import StrObjectId
17
17
  from .chain_of_thought_in_chat import ChainOfThoughtInChatTrigger
18
18
  from .chatty_ai_mode import ChattyAIMode
19
+ from .statuses import DataCollectionStatus, PreQualifyStatus
19
20
  import logging
20
21
 
21
22
  logger = logging.getLogger(__name__)
@@ -45,38 +46,6 @@ class HumanInterventionReason(StrEnum):
45
46
  SOMETHING_WENT_WRONG = "something_went_wrong"
46
47
 
47
48
 
48
- class DataCollectionStatus(StrEnum):
49
- """
50
- Status of data collection for the AI agent in this chat.
51
- Only tracks field collection, not qualification status.
52
-
53
- - COLLECTING: Still collecting data from the user
54
- - MANDATORY_COMPLETED: All mandatory fields have been collected
55
- - ALL_COMPLETED: All fields (mandatory + optional) have been collected
56
- - CANCELLED: Data collection was cancelled
57
- """
58
- COLLECTING = "collecting"
59
- MANDATORY_COMPLETED = "mandatory_completed"
60
- ALL_COMPLETED = "all_completed"
61
- CANCELLED = "cancelled"
62
-
63
-
64
- class PreQualifyStatus(StrEnum):
65
- """
66
- Status of pre-qualification for the AI agent in this chat.
67
- Separate from data collection - tracks qualification evaluation.
68
-
69
- - PENDING: Waiting for data collection to complete
70
- - EVALUATING: Data collected, evaluating acceptance criteria
71
- - QUALIFIED: User met acceptance criteria
72
- - UNQUALIFIED: User did NOT meet acceptance criteria
73
- """
74
- PENDING = "pending"
75
- EVALUATING = "evaluating"
76
- QUALIFIED = "qualified"
77
- UNQUALIFIED = "unqualified"
78
-
79
-
80
49
  class HumanIntervention(BaseModel):
81
50
  """
82
51
  Reason for human intervention
@@ -24,12 +24,22 @@ class PreQualifyDestination(StrEnum):
24
24
  SUBSCRIBE_TO_LAUNCH = "subscribe_to_launch" # Subscribe to launch + welcome kit
25
25
  CALENDAR_SCHEDULER = "calendar_scheduler" # Allow AI agent to schedule meetings
26
26
  ESCALATE = "escalate" # Escalate to human
27
+ AUTO_ASSIGN_HUMAN_AGENT = "auto_assign_human_agent" # Auto-assign human agent
27
28
  CUSTOM_MESSAGE = "custom_message" # Send a custom message
28
29
  AUTO_ASSIGN_HUMAN_AGENT = "auto_assign_human_agent" #
29
30
  CONTINUE = "continue" # Continue normal AI agent flow
30
- NONE = "none" # Do nothing (no-op)
31
- ARCHIVE = "archive"
32
- POST_TO_EXTERNAL_API = "post_to_external_api"
31
+ NONE = "none" # Do nothing
32
+ ARCHIVE = "archive" # Archive chat
33
+ POST_TO_EXTERNAL_API = "post_to_external_api" # Post result to external API
34
+
35
+
36
+ class PostToExternalApiConfig(BaseModel):
37
+ """
38
+ Configuration for posting pre-qualification results to an external API.
39
+ """
40
+ url: str = Field(description="Target URL for the external API")
41
+ method: str = Field(default="POST", description="HTTP method to use")
42
+ api_key: Optional[str] = Field(default=None, description="Optional API key for authentication")
33
43
 
34
44
 
35
45
  class PreQualifyFormField(BaseModel):
@@ -82,6 +92,12 @@ class PreQualifyConfig(BaseModel):
82
92
  description="Configuration for posting to an external API"
83
93
  )
84
94
 
95
+ # Optional external API destination config
96
+ post_to_external_api: Optional[PostToExternalApiConfig] = Field(
97
+ default=None,
98
+ description="Config for POST_TO_EXTERNAL_API destination"
99
+ )
100
+
85
101
  @property
86
102
  def has_form_fields(self) -> bool:
87
103
  """Check if pre-qualify has form fields configured"""
@@ -0,0 +1,33 @@
1
+ from enum import StrEnum
2
+
3
+
4
+ class DataCollectionStatus(StrEnum):
5
+ """
6
+ Status of data collection for the AI agent in this chat.
7
+ Only tracks field collection, not qualification status.
8
+
9
+ - COLLECTING: Still collecting data from the user
10
+ - MANDATORY_COMPLETED: All mandatory fields have been collected
11
+ - ALL_COMPLETED: All fields (mandatory + optional) have been collected
12
+ - CANCELLED: Data collection was cancelled
13
+ """
14
+ COLLECTING = "collecting"
15
+ MANDATORY_COMPLETED = "mandatory_completed"
16
+ ALL_COMPLETED = "all_completed"
17
+ CANCELLED = "cancelled"
18
+
19
+
20
+ class PreQualifyStatus(StrEnum):
21
+ """
22
+ Status of pre-qualification for the AI agent in this chat.
23
+ Separate from data collection - tracks qualification evaluation.
24
+
25
+ - PENDING: Waiting for data collection to complete
26
+ - EVALUATING: Data collected, evaluating acceptance criteria
27
+ - QUALIFIED: User met acceptance criteria
28
+ - UNQUALIFIED: User did NOT meet acceptance criteria
29
+ """
30
+ PENDING = "pending"
31
+ EVALUATING = "evaluating"
32
+ QUALIFIED = "qualified"
33
+ UNQUALIFIED = "unqualified"
@@ -4,6 +4,7 @@ from enum import StrEnum
4
4
  from pydantic_core.core_schema import str_schema
5
5
 
6
6
  from letschatty.models.company.assets.ai_agents_v2.chain_of_thought_in_chat import ChainOfThoughtInChatTrigger
7
+ from letschatty.models.company.assets.ai_agents_v2.statuses import DataCollectionStatus, PreQualifyStatus
7
8
  from ...utils.types.identifier import StrObjectId
8
9
  from datetime import datetime
9
10
  from zoneinfo import ZoneInfo
@@ -75,6 +76,14 @@ class ChattyAIAgentAssignedToChat(AssignedAssetToChat):
75
76
  mode: ChattyAIMode = Field(default=ChattyAIMode.OFF)
76
77
  requires_human_intervention: bool = Field(default=False)
77
78
  is_processing: bool = Field(default=False)
79
+ data_collection_status: Optional[DataCollectionStatus] = Field(
80
+ default=None,
81
+ description="Status of data collection for pre-qualification"
82
+ )
83
+ pre_qualify_status: Optional[PreQualifyStatus] = Field(
84
+ default=None,
85
+ description="Status of pre-qualification"
86
+ )
78
87
  last_call_started_at: Optional[datetime] = Field(default=None, description="The timestamp of the get chat with prompt (the moment n8n started processing the call)")
79
88
  trigger_timestamp: Optional[datetime] = Field(default=None, description="The timestamp of the trigger that started the call, if it's a manual trigger, it will be the timestamp of the manual trigger, if it's a follow up, it will be the timestamp of the follow up, if it's a user message, it will be the timestamp of the user message")
80
89
  last_call_cot_id: Optional[StrObjectId] = Field(default=None)
@@ -1,4 +1,4 @@
1
- from pydantic import BaseModel, Field, field_validator
1
+ from pydantic import BaseModel, Field, field_validator, ConfigDict
2
2
  from typing import Optional, Any, ClassVar, List
3
3
  from letschatty.models.base_models.chatty_asset_model import CompanyAssetModel, ChattyAssetPreview
4
4
  import re
@@ -212,7 +212,11 @@ class CollectedData(BaseModel):
212
212
  name: Optional[str] = Field(default=None, description="Customer's name")
213
213
  email: Optional[str] = Field(default=None, description="Customer's email address")
214
214
  phone: Optional[str] = Field(default=None, description="Customer's phone number")
215
- document_id: Optional[str] = Field(default=None, description="Customer's DNI/ID number")
215
+ document_id: Optional[str] = Field(
216
+ default=None,
217
+ alias="dni",
218
+ description="Customer's DNI/ID number"
219
+ )
216
220
 
217
221
  # Generic key-value store for any other collected fields
218
222
  additional_fields: dict[str, Any] = Field(
@@ -220,6 +224,9 @@ class CollectedData(BaseModel):
220
224
  description="Additional collected fields as key-value pairs"
221
225
  )
222
226
 
227
+ model_config = ConfigDict(
228
+ populate_by_name=True
229
+ )
223
230
 
224
231
  @classmethod
225
232
  def example(cls) -> dict:
@@ -849,6 +849,13 @@ class ChatService:
849
849
  chat.client.email = collected_data.email
850
850
  updated_fields.append("email")
851
851
 
852
+ if collected_data.phone:
853
+ if chat.client.lead_form_data is None:
854
+ chat.client.lead_form_data = {}
855
+ if chat.client.lead_form_data.get("phone") != collected_data.phone:
856
+ chat.client.lead_form_data["phone"] = collected_data.phone
857
+ updated_fields.append("phone")
858
+
852
859
  if collected_data.document_id and chat.client.document_id != collected_data.document_id:
853
860
  chat.client.document_id = collected_data.document_id
854
861
  updated_fields.append("document_id")
@@ -873,4 +880,4 @@ class ChatService:
873
880
  context=ChattyContext(chain_of_thought_id=execution_context.chain_of_thought_id)
874
881
  )
875
882
 
876
- return chat.client.lead_form_data
883
+ return chat.client.lead_form_data
@@ -1,6 +1,25 @@
1
1
 
2
2
  from letschatty.models import StrObjectId
3
- from letschatty.models.ai_microservices.lambda_events import DoubleCheckerForIncomingMessagesAnswerCallbackEvent, DoubleCheckerForIncomingMessagesAnswerEvent, FixBuggedAiAgentsCallsInChatsEvent, GetChainOfThoughtsByChatIdEvent, GetChatWithPromptForFollowUpEvent, GetChatWithPromptForIncomingMessageEvent, QualityTestEventData, QualityTestsForUpdatedAIComponentEvent, QualityTestsForUpdatedAIComponentEventData, ManualTriggerEvent, CancelExecutionEvent, AssignAIAgentToChatEvent, RemoveAIAgentFromChatEvent, UpdateAIAgentModeInChatEvent, EscalateAIAgentInChatEvent, UnescalateAIAgentInChatEvent, SmartFollowUpDecisionOutputEvent
3
+ from letschatty.models.ai_microservices.lambda_events import (
4
+ DoubleCheckerForIncomingMessagesAnswerCallbackEvent,
5
+ DoubleCheckerForIncomingMessagesAnswerEvent,
6
+ FixBuggedAiAgentsCallsInChatsEvent,
7
+ GetChainOfThoughtsByChatIdEvent,
8
+ QualityTestEventData,
9
+ QualityTestsForUpdatedAIComponentEvent,
10
+ QualityTestsForUpdatedAIComponentEventData,
11
+ CancelExecutionEvent,
12
+ ManualTriggerEvent,
13
+ AssignAIAgentToChatEvent,
14
+ RemoveAIAgentFromChatEvent,
15
+ SmartFollowUpDecisionOutputEvent,
16
+ UpdateAIAgentModeInChatEvent,
17
+ EscalateAIAgentInChatEvent,
18
+ UnescalateAIAgentInChatEvent,
19
+ GetChatWithPromptForIncomingMessageEvent,
20
+ GetChatWithPromptForFollowUpEvent,
21
+ UpdateAIAgentPrequalStatusInChatEvent,
22
+ )
4
23
  from letschatty.models.ai_microservices.lambda_invokation_types import InvokationType
5
24
  from letschatty.models.ai_microservices import AllQualityTestEvent, AllQualityTestEventData, QualityTestEvent, QualityTestInteractionCallbackEvent, SmartTaggingCallbackEvent, QualityTestCallbackEvent, LambdaAiEvent, SmartTaggingEvent, SmartTaggingPromptEvent
6
25
  from letschatty.models.base_models.ai_agent_component import AiAgentComponent
@@ -35,10 +54,6 @@ class LambdaEventFactory:
35
54
  return DoubleCheckerForIncomingMessagesAnswerEvent(**event_data)
36
55
  case InvokationType.DOUBLE_CHECKER_FOR_INCOMING_MESSAGES_ANSWER_CALLBACK:
37
56
  return DoubleCheckerForIncomingMessagesAnswerCallbackEvent(**event_data)
38
- case InvokationType.GET_CHAT_WITH_PROMPT_INCOMING_MESSAGE:
39
- return GetChatWithPromptForIncomingMessageEvent(**event_data)
40
- case InvokationType.GET_CHAT_WITH_PROMPT_FOLLOW_UP:
41
- return GetChatWithPromptForFollowUpEvent(**event_data)
42
57
  case InvokationType.MANUAL_TRIGGER:
43
58
  return ManualTriggerEvent(**event_data)
44
59
  case InvokationType.CANCEL_EXECUTION:
@@ -49,6 +64,8 @@ class LambdaEventFactory:
49
64
  return RemoveAIAgentFromChatEvent(**event_data)
50
65
  case InvokationType.UPDATE_AI_AGENT_MODE_IN_CHAT:
51
66
  return UpdateAIAgentModeInChatEvent(**event_data)
67
+ case InvokationType.UPDATE_AI_AGENT_PREQUAL_STATUS_IN_CHAT:
68
+ return UpdateAIAgentPrequalStatusInChatEvent(**event_data)
52
69
  case InvokationType.ESCALATE_AI_AGENT_IN_CHAT:
53
70
  return EscalateAIAgentInChatEvent(**event_data)
54
71
  case InvokationType.UNESCALATE_AI_AGENT_IN_CHAT:
@@ -58,6 +75,10 @@ class LambdaEventFactory:
58
75
  case InvokationType.SMART_FOLLOW_UP_DECISION_OUTPUT:
59
76
  return SmartFollowUpDecisionOutputEvent(**event_data)
60
77
 
78
+ case InvokationType.GET_CHAT_WITH_PROMPT_INCOMING_MESSAGE:
79
+ return GetChatWithPromptForIncomingMessageEvent(**event_data)
80
+ case InvokationType.GET_CHAT_WITH_PROMPT_FOLLOW_UP:
81
+ return GetChatWithPromptForFollowUpEvent(**event_data)
61
82
  case _:
62
83
  raise ValueError(f"Invalid event type: {event_type}")
63
84
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: letschatty
3
- Version: 0.4.337
3
+ Version: 0.4.350
4
4
  Summary: Models and custom classes to work across the Chattyverse
5
5
  License: MIT
6
6
  Author: Axel
@@ -1,9 +1,9 @@
1
1
  letschatty/__init__.py,sha256=6dGYdy5edB1dHdgvpqUpENZ347CpIyWgR1CsGYwPSk8,45
2
2
  letschatty/models/__init__.py,sha256=obWHa796C-O1mqo_lk22KhUC2ODVvG7cICY3Lo-AqJg,126
3
- letschatty/models/ai_microservices/__init__.py,sha256=Ijt8hsCpqZoAlUNPfj8O2gE4zCwEGshio4THxdMT06c,601
3
+ letschatty/models/ai_microservices/__init__.py,sha256=bpsDpNi8IiXwY3I7wM6OT2Sh42R4LB3Awy7-Uj-77Nw,683
4
4
  letschatty/models/ai_microservices/expected_output.py,sha256=oEaTE4Y9lgRog0GmW20b5xdLl9Yiq6Ln_H2_0r1dGvQ,10956
5
- letschatty/models/ai_microservices/lambda_events.py,sha256=Ti5E_qEV1kKFH1VnnIiPpmJp7D0sv_-Iryh-IgQBbkQ,18142
6
- letschatty/models/ai_microservices/lambda_invokation_types.py,sha256=qvwEj2Cn9Pe0WSxi4I7pwdD9qbLSu_i3c_ZVhUjYxR4,2033
5
+ letschatty/models/ai_microservices/lambda_events.py,sha256=Ujs-Jlc7-LIhwYWI4jtZBAZdQsyxgk2prOrWuzQcNKw,19399
6
+ letschatty/models/ai_microservices/lambda_invokation_types.py,sha256=mb6BB_CwREjhmRmbAWibyScUgsFq2XTkfJ4QgeO06C0,2119
7
7
  letschatty/models/ai_microservices/n8n_ai_agents_payload.py,sha256=yV7WhAdnIOxWymrUTYJiDLH71A5mSUsX2gac8oAAGJw,882
8
8
  letschatty/models/ai_microservices/openai_payloads.py,sha256=HauUGf4c37khJJsKyH4ikxzHKboGWnerjDQgDOnMFrY,271
9
9
  letschatty/models/analytics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -88,7 +88,7 @@ letschatty/models/company/assets/ai_agents_v2/chat_example.py,sha256=yCKt6ifNYch
88
88
  letschatty/models/company/assets/ai_agents_v2/chat_example_test.py,sha256=vChD-TkX1ORRD9LMbd2HlpbK4QyrsfhDiJd-LDjIqlk,4618
89
89
  letschatty/models/company/assets/ai_agents_v2/chatty_ai_agent.py,sha256=R2rCANri8ZiqnmPP10PWoanGddMImCMxrl78Y6d-194,8204
90
90
  letschatty/models/company/assets/ai_agents_v2/chatty_ai_agent_config_for_automation.py,sha256=W8orpgp-yG8OHNWGQ16jMv-VgM_Z-Hk0q8PtC0KT2KU,388
91
- letschatty/models/company/assets/ai_agents_v2/chatty_ai_agent_in_chat.py,sha256=IsySLBUYzkYVwbd7ms1HFlB0riOtc9lMvP5verPcpCU,15653
91
+ letschatty/models/company/assets/ai_agents_v2/chatty_ai_agent_in_chat.py,sha256=p-Mys4XM0kppdETj__gCa0ddQmS93S_evVYTrha4eCc,14630
92
92
  letschatty/models/company/assets/ai_agents_v2/chatty_ai_mode.py,sha256=fnmExsywjDk5stMcgpHF-8W5lLy-5ReCm02HaQ6Ae98,2309
93
93
  letschatty/models/company/assets/ai_agents_v2/context_item.py,sha256=9629_sJ4vjfF6--KR44E6lqVpc0uOGSlcorKS5ooSXU,438
94
94
  letschatty/models/company/assets/ai_agents_v2/faq.py,sha256=qL-sr17ALvJ9PEzpaXpYL91-bQ9Np3C4jCYe-zfot6o,457
@@ -98,11 +98,12 @@ letschatty/models/company/assets/ai_agents_v2/knowleadge_base_components.py,sha2
98
98
  letschatty/models/company/assets/ai_agents_v2/n8n_agents_info.py,sha256=UNsYXznXr2yj9J_zylZTMPrU5hjkkVgHAaIP2etpZRM,383
99
99
  letschatty/models/company/assets/ai_agents_v2/n8n_schema_incoming_message_output.json,sha256=_NERM9gJ4Ry8NFVb8mHxRmdv0GfBrHdtmKxVJWmTUrY,2102
100
100
  letschatty/models/company/assets/ai_agents_v2/n8n_schema_smart_follow_up_output.json,sha256=QAPRJXin-sE9NxQBHmmErSYHL6dQzmu4i0HEFSSXOi4,2350
101
- letschatty/models/company/assets/ai_agents_v2/pre_qualify_config.py,sha256=tXsUXWB4d_SeY1ip9aMZzmkAftaNP3CMlW3_04xArcM,4761
101
+ letschatty/models/company/assets/ai_agents_v2/pre_qualify_config.py,sha256=LoWJpAbCbB0lMrAkncjtkzI5d6Z2k_mZ8v0eItTpSAA,5496
102
+ letschatty/models/company/assets/ai_agents_v2/statuses.py,sha256=nhIGfeKednLNFZCIMavbZptT_9L-HDDVshAyCLdwPe8,1109
102
103
  letschatty/models/company/assets/assignment/__init__.py,sha256=eWYZfaDQde5OJNIDed8D-LNRXOa5O_O4mGMToNFtaW8,239
103
104
  letschatty/models/company/assets/assignment/assignment_assets.py,sha256=phIJqNh4UGTU-Hux_kaOYhJm2GCqv37AnCGePSDVKmM,2245
104
105
  letschatty/models/company/assets/automation.py,sha256=QDMCHm--85tEGUwddjWGeUSxmCT27HiH8lRm4w4DJLE,1871
105
- letschatty/models/company/assets/chat_assets.py,sha256=OV33LPOBOaK02Va0yH7rCH5ufmEyOploQPTEefjlsdk,7524
106
+ letschatty/models/company/assets/chat_assets.py,sha256=26FX3hOgJF3ogxfYvhhBHJUfXMFtVHapgd8XsFStoU4,7934
106
107
  letschatty/models/company/assets/chatty_fast_answers/__init__.py,sha256=tbgWS0n1i0nVi9f79U44GPRnrW25NKcjl6Port92alk,48
107
108
  letschatty/models/company/assets/chatty_fast_answers/chatty_fast_answer.py,sha256=PxW3eStHXo0BY7Z9hMDqBTHmgO7XcwtOvEpwXi-rA5g,1076
108
109
  letschatty/models/company/assets/company_assets.py,sha256=YKRo_uXhQYRQ8HvMf4HhrHTBC2zp7xlE_B0nqSMfMFY,726
@@ -126,7 +127,7 @@ letschatty/models/company/company_chats_snapshot.py,sha256=Mg9Wmu3pfE-t5Sf57FCj-
126
127
  letschatty/models/company/company_messaging_settgins.py,sha256=7isXt7gmqw-FKSUSZwdctdXDFMfPi2OyPuWqB7WpC6c,957
127
128
  letschatty/models/company/conversation_topic.py,sha256=__IinJ3YcUsiApF4Em5uAgd01ydRUrlCVxaat-pCCRg,1704
128
129
  letschatty/models/company/empresa.py,sha256=2INPC8YSZJcT10Gny_zXV_PujeqUGccsZHV31ZSywyw,5961
129
- letschatty/models/company/form_field.py,sha256=Twzpieo0yia_kJ8uEXJq7pX9drsKuBYEslAMa3iO0Mg,9680
130
+ letschatty/models/company/form_field.py,sha256=LGyMLybwvfEPG3hMmwsoP_4wnMaPJbVFpG6c1HdVC8E,9802
130
131
  letschatty/models/company/insight.py,sha256=B7BL07E4Z1b9aJHi3PXC1atln4-7fSo9JeqgQoeB_ao,7459
131
132
  letschatty/models/company/notifications/notification.py,sha256=wE7rIi21nZno6jjIxajMz4e7OJbzrDHjH1KdkNzJiF8,1907
132
133
  letschatty/models/copilot/links.py,sha256=mcddNR6WdWOoOr3NgDl_FElxF15SiZZXw9wmIV08HRw,185
@@ -230,7 +231,7 @@ letschatty/services/ai_agents/tool_descriptions/human_handover.json,sha256=-b3l_
230
231
  letschatty/services/ai_agents/tool_descriptions.py,sha256=MMFhcgEl6Z7k8BUv3Yx1pCxHzIjc8HD93S0uM5OPj8Y,105
231
232
  letschatty/services/ai_components_service.py,sha256=QUb-NdzHj4nPmnceVSQ9Pe3swFWUrkUFKzDZeuP0b5o,3762
232
233
  letschatty/services/chat/chat_extractors.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
233
- letschatty/services/chat/chat_service.py,sha256=h1AkzLDA7PSKXIuol18a5-lXq48ODfBPPLtHog0fzzE,47496
234
+ letschatty/services/chat/chat_service.py,sha256=DsnjSYmOXGSRQPtnYEx2O4NPdEXpG1GBOjk53M-jYM8,47832
234
235
  letschatty/services/chat/client_service.py,sha256=TtlG0GJDqx6YemfueiJzAtMNk_udnPhg0MJG0bKwnk8,1097
235
236
  letschatty/services/chat/conversation_topics_service.py,sha256=jvIkpHTCz0JKXui3n_BRs6UQ-TB3x7DrQsnX2zUVFVw,2461
236
237
  letschatty/services/chatty_assets/__init__.py,sha256=yNe0X8N86OBgrUagYVexX8u8wxoqeepNiCSUwa0OnNo,375
@@ -290,7 +291,7 @@ letschatty/services/factories/chatty_fast_answers/chatty_fast_answers_factory.py
290
291
  letschatty/services/factories/clients/client_factory.py,sha256=WIFUksJlnMSSLeHEVTAorpelEvpJMQg_mxg66wZfLcQ,1567
291
292
  letschatty/services/factories/company/__init__.py,sha256=Zd3Zo21bQ1Lk9mQNpNaaTZ5EyjttWXi9AthgV5GnSb4,43
292
293
  letschatty/services/factories/company/empresa_factory.py,sha256=tJ5Y9WhvYTEvPZXzREGHi2X-aNnW1_B49K12fAo290w,1710
293
- letschatty/services/factories/lambda_ai_orchestrartor/lambda_events_factory.py,sha256=tCY77uqvOoTlXwtepjwagIIk1id8ci7eb1WwZ4CXrzo,5796
294
+ letschatty/services/factories/lambda_ai_orchestrartor/lambda_events_factory.py,sha256=5fJwbaKw-qNqImONdM_xUXCTJ4ARKw4PQuun8R7jHzY,6059
294
295
  letschatty/services/factories/messages/__init__.py,sha256=Qm02DTwopP5WKXt4hMB5j-Y2ytfAUfMqztX5_pPJnxI,122
295
296
  letschatty/services/factories/messages/central_notification_factory.py,sha256=P8rrBw-Ew0AMqL31YsHH9dXAMQALiLzh6BH618eX_EU,2815
296
297
  letschatty/services/factories/messages/chatty_message_factory.py,sha256=kFYkkrZ1x-njavcqcSkRY30DIj5cFHLCo5Iixd63JR4,2234
@@ -310,7 +311,7 @@ letschatty/services/template_campaigns/template_campaign_service.py,sha256=jORgD
310
311
  letschatty/services/users/agent_service.py,sha256=hIkUUJ1SpkKbh5_uo4i2CeqGtuMTjU7tSV8k5J7WPG4,279
311
312
  letschatty/services/users/user_factory.py,sha256=FCB9uiAfjMeYfh4kMdx5h8VDHJ8MCsD-uaxW3X3KaWM,6681
312
313
  letschatty/services/validators/analytics_validator.py,sha256=-QBR6XIqEv2qw3stcBQehkwui1EcfWUM6M9DRQODykY,6335
313
- letschatty-0.4.337.dist-info/LICENSE,sha256=EClLu_bO2HBLDcThowIwfaIg5EOwIYhpRsBJjVEk92A,1197
314
- letschatty-0.4.337.dist-info/METADATA,sha256=goPA4IWZT1rJpEvIFjtGU8x4heWI5nL0QB5bWrT_ItA,3283
315
- letschatty-0.4.337.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
316
- letschatty-0.4.337.dist-info/RECORD,,
314
+ letschatty-0.4.350.dist-info/LICENSE,sha256=EClLu_bO2HBLDcThowIwfaIg5EOwIYhpRsBJjVEk92A,1197
315
+ letschatty-0.4.350.dist-info/METADATA,sha256=o8NAjLrxC9cFSrLcT58uCnL9MThc0urF5kgt3unwi2M,3283
316
+ letschatty-0.4.350.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
317
+ letschatty-0.4.350.dist-info/RECORD,,