agentle 0.9.29__py3-none-any.whl → 0.9.31__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.
@@ -46,20 +46,20 @@ class ObjectSchema(BaseModel):
46
46
  ) -> ObjectSchema | ArraySchema | PrimitiveSchema:
47
47
  """
48
48
  Recursively convert a JSON Schema definition to Agentle schema types.
49
-
49
+
50
50
  This method handles deeply nested objects, arrays, and primitives,
51
51
  making it easy to convert complex JSON Schema definitions.
52
-
52
+
53
53
  Args:
54
54
  schema: JSON Schema definition (dict with 'type', 'properties', etc.)
55
-
55
+
56
56
  Returns:
57
57
  Appropriate schema type (ObjectSchema, ArraySchema, or PrimitiveSchema)
58
-
58
+
59
59
  Example:
60
60
  ```python
61
61
  from agentle.agents.apis.object_schema import ObjectSchema
62
-
62
+
63
63
  json_schema = {
64
64
  "type": "object",
65
65
  "properties": {
@@ -79,7 +79,7 @@ class ObjectSchema(BaseModel):
79
79
  }
80
80
  }
81
81
  }
82
-
82
+
83
83
  schema = ObjectSchema.from_json_schema(json_schema)
84
84
  ```
85
85
  """
@@ -11,21 +11,21 @@ def boolean_param(
11
11
  location: ParameterLocation = ParameterLocation.QUERY,
12
12
  ) -> EndpointParameter:
13
13
  """Create a boolean parameter.
14
-
14
+
15
15
  Args:
16
16
  name: Parameter name
17
17
  description: Parameter description
18
18
  required: Whether the parameter is required
19
19
  default: Default value for the parameter
20
20
  location: Where the parameter should be placed in the request
21
-
21
+
22
22
  Returns:
23
23
  EndpointParameter configured for boolean values
24
-
24
+
25
25
  Example:
26
26
  ```python
27
27
  from agentle.agents.apis.params.boolean_param import boolean_param
28
-
28
+
29
29
  boolean_param(
30
30
  name="enabled",
31
31
  description="Enable feature",
@@ -14,7 +14,7 @@ def number_param(
14
14
  format: str | None = None,
15
15
  ) -> EndpointParameter:
16
16
  """Create a number (float/decimal) parameter.
17
-
17
+
18
18
  Args:
19
19
  name: Parameter name
20
20
  description: Parameter description
@@ -24,14 +24,14 @@ def number_param(
24
24
  default: Default value for the parameter
25
25
  location: Where the parameter should be placed in the request
26
26
  format: Format hint (e.g., 'float', 'double', 'decimal')
27
-
27
+
28
28
  Returns:
29
29
  EndpointParameter configured for number values
30
-
30
+
31
31
  Example:
32
32
  ```python
33
33
  from agentle.agents.apis.params.number_param import number_param
34
-
34
+
35
35
  number_param(
36
36
  name="price",
37
37
  description="Product price",
@@ -46,11 +46,14 @@ Example:
46
46
  from __future__ import annotations
47
47
 
48
48
  from collections.abc import Awaitable, Callable, Sequence
49
- from typing import override
49
+ from typing import Any, override
50
50
 
51
51
  from agentle.agents.conversations.conversation_store import ConversationStore
52
52
  from agentle.generations.models.messages.assistant_message import AssistantMessage
53
53
  from agentle.generations.models.messages.developer_message import DeveloperMessage
54
+ from agentle.generations.models.messages.generated_assistant_message import (
55
+ GeneratedAssistantMessage,
56
+ )
54
57
  from agentle.generations.models.messages.user_message import UserMessage
55
58
 
56
59
 
@@ -81,7 +84,14 @@ class CallbackConversationStore(ConversationStore):
81
84
  Awaitable[Sequence[DeveloperMessage | UserMessage | AssistantMessage]],
82
85
  ],
83
86
  add_callback: Callable[
84
- [str, DeveloperMessage | UserMessage | AssistantMessage], Awaitable[None]
87
+ [
88
+ str,
89
+ DeveloperMessage
90
+ | UserMessage
91
+ | AssistantMessage
92
+ | GeneratedAssistantMessage[Any],
93
+ ],
94
+ Awaitable[None],
85
95
  ],
86
96
  clear_callback: Callable[[str], Awaitable[None]],
87
97
  message_limit: int | None = None,
@@ -146,8 +156,13 @@ class CallbackConversationStore(ConversationStore):
146
156
  return await self._get_callback(chat_id)
147
157
 
148
158
  @override
149
- async def add_message_async(
150
- self, chat_id: str, message: DeveloperMessage | UserMessage | AssistantMessage
159
+ async def add_message_async[T = Any](
160
+ self,
161
+ chat_id: str,
162
+ message: DeveloperMessage
163
+ | UserMessage
164
+ | AssistantMessage
165
+ | GeneratedAssistantMessage[T],
151
166
  ) -> None:
152
167
  """
153
168
  Add a message to the conversation using the user-provided add callback.
@@ -1,8 +1,12 @@
1
1
  import abc
2
2
  from collections.abc import Sequence
3
+ from typing import Any
3
4
 
4
5
  from agentle.generations.models.messages.assistant_message import AssistantMessage
5
6
  from agentle.generations.models.messages.developer_message import DeveloperMessage
7
+ from agentle.generations.models.messages.generated_assistant_message import (
8
+ GeneratedAssistantMessage,
9
+ )
6
10
  from agentle.generations.models.messages.user_message import UserMessage
7
11
 
8
12
 
@@ -42,8 +46,13 @@ class ConversationStore(abc.ABC):
42
46
  ) -> Sequence[DeveloperMessage | UserMessage | AssistantMessage]: ...
43
47
 
44
48
  @abc.abstractmethod
45
- async def add_message_async(
46
- self, chat_id: str, message: DeveloperMessage | UserMessage | AssistantMessage
49
+ async def add_message_async[T = Any](
50
+ self,
51
+ chat_id: str,
52
+ message: DeveloperMessage
53
+ | UserMessage
54
+ | AssistantMessage
55
+ | GeneratedAssistantMessage[T],
47
56
  ) -> None: ...
48
57
 
49
58
  @abc.abstractmethod
@@ -1,11 +1,14 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from collections.abc import Sequence
4
- from typing import TYPE_CHECKING, override
4
+ from typing import TYPE_CHECKING, Any, override
5
5
 
6
6
  from agentle.agents.conversations.conversation_store import ConversationStore
7
7
  from agentle.generations.models.messages.assistant_message import AssistantMessage
8
8
  from agentle.generations.models.messages.developer_message import DeveloperMessage
9
+ from agentle.generations.models.messages.generated_assistant_message import (
10
+ GeneratedAssistantMessage,
11
+ )
9
12
  from agentle.generations.models.messages.user_message import UserMessage
10
13
 
11
14
  if TYPE_CHECKING:
@@ -28,8 +31,13 @@ class FirebaseConversationStore(ConversationStore):
28
31
  self._collection_name = collection_name
29
32
 
30
33
  @override
31
- async def add_message_async(
32
- self, chat_id: str, message: DeveloperMessage | UserMessage | AssistantMessage
34
+ async def add_message_async[T = Any](
35
+ self,
36
+ chat_id: str,
37
+ message: DeveloperMessage
38
+ | UserMessage
39
+ | AssistantMessage
40
+ | GeneratedAssistantMessage[T],
33
41
  ) -> None:
34
42
  from google.cloud import firestore
35
43
 
@@ -7,6 +7,9 @@ from typing import Any, override
7
7
  from agentle.agents.conversations.conversation_store import ConversationStore
8
8
  from agentle.generations.models.messages.assistant_message import AssistantMessage
9
9
  from agentle.generations.models.messages.developer_message import DeveloperMessage
10
+ from agentle.generations.models.messages.generated_assistant_message import (
11
+ GeneratedAssistantMessage,
12
+ )
10
13
  from agentle.generations.models.messages.user_message import UserMessage
11
14
 
12
15
 
@@ -87,8 +90,12 @@ class JSONFileConversationStore(ConversationStore):
87
90
  # For other non-serializable objects, convert to string
88
91
  return str(obj)
89
92
 
90
- def _message_to_dict(
91
- self, message: DeveloperMessage | UserMessage | AssistantMessage
93
+ def _message_to_dict[T](
94
+ self,
95
+ message: DeveloperMessage
96
+ | UserMessage
97
+ | AssistantMessage
98
+ | GeneratedAssistantMessage[T],
92
99
  ) -> dict[str, Any]:
93
100
  """Convert a message object to a dictionary for JSON serialization."""
94
101
  # Get the basic message dictionary
@@ -177,8 +184,13 @@ class JSONFileConversationStore(ConversationStore):
177
184
  return UserMessage.model_validate(message_data)
178
185
 
179
186
  @override
180
- async def add_message_async(
181
- self, chat_id: str, message: DeveloperMessage | UserMessage | AssistantMessage
187
+ async def add_message_async[T = Any](
188
+ self,
189
+ chat_id: str,
190
+ message: DeveloperMessage
191
+ | UserMessage
192
+ | AssistantMessage
193
+ | GeneratedAssistantMessage[T],
182
194
  ) -> None:
183
195
  """Add a message to the conversation."""
184
196
  messages_data = self._load_messages(chat_id)
@@ -1,14 +1,19 @@
1
1
  from collections.abc import MutableMapping, MutableSequence, Sequence
2
- from typing import override
2
+ from typing import Any, override
3
+
3
4
  from agentle.agents.conversations.conversation_store import ConversationStore
4
5
  from agentle.generations.models.messages.assistant_message import AssistantMessage
5
6
  from agentle.generations.models.messages.developer_message import DeveloperMessage
7
+ from agentle.generations.models.messages.generated_assistant_message import (
8
+ GeneratedAssistantMessage,
9
+ )
6
10
  from agentle.generations.models.messages.user_message import UserMessage
7
11
 
8
12
 
9
13
  class LocalConversationStore(ConversationStore):
10
14
  __messages: MutableMapping[
11
- str, MutableSequence[DeveloperMessage | UserMessage | AssistantMessage]
15
+ str,
16
+ MutableSequence[DeveloperMessage | UserMessage | AssistantMessage],
12
17
  ]
13
18
 
14
19
  def __init__(
@@ -20,8 +25,13 @@ class LocalConversationStore(ConversationStore):
20
25
  self.__messages = {}
21
26
 
22
27
  @override
23
- async def add_message_async(
24
- self, chat_id: str, message: DeveloperMessage | UserMessage | AssistantMessage
28
+ async def add_message_async[T = Any](
29
+ self,
30
+ chat_id: str,
31
+ message: DeveloperMessage
32
+ | UserMessage
33
+ | AssistantMessage
34
+ | GeneratedAssistantMessage[T],
25
35
  ) -> None:
26
36
  if chat_id not in self.__messages:
27
37
  self.__messages[chat_id] = []
@@ -41,6 +51,9 @@ class LocalConversationStore(ConversationStore):
41
51
  # Don't add message if limit reached and not overriding
42
52
  return
43
53
 
54
+ if isinstance(message, GeneratedAssistantMessage):
55
+ message = message.to_assistant_message()
56
+
44
57
  self.__messages[chat_id].append(message)
45
58
 
46
59
  @override
@@ -8,6 +8,9 @@ from typing import TYPE_CHECKING, Any, override
8
8
  from agentle.agents.conversations.conversation_store import ConversationStore
9
9
  from agentle.generations.models.messages.assistant_message import AssistantMessage
10
10
  from agentle.generations.models.messages.developer_message import DeveloperMessage
11
+ from agentle.generations.models.messages.generated_assistant_message import (
12
+ GeneratedAssistantMessage,
13
+ )
11
14
  from agentle.generations.models.messages.user_message import UserMessage
12
15
 
13
16
  if TYPE_CHECKING:
@@ -74,7 +77,11 @@ class MySQLConversationStore(ConversationStore):
74
77
  await conn.commit()
75
78
 
76
79
  def _message_to_dict(
77
- self, message: DeveloperMessage | UserMessage | AssistantMessage
80
+ self,
81
+ message: DeveloperMessage
82
+ | UserMessage
83
+ | AssistantMessage
84
+ | GeneratedAssistantMessage[Any],
78
85
  ) -> dict[str, Any]:
79
86
  """
80
87
  Convert a Message object to a dictionary for JSON serialization.
@@ -125,8 +132,13 @@ class MySQLConversationStore(ConversationStore):
125
132
  return UserMessage.model_validate(message_dict)
126
133
 
127
134
  @override
128
- async def add_message_async(
129
- self, chat_id: str, message: DeveloperMessage | UserMessage | AssistantMessage
135
+ async def add_message_async[T = Any](
136
+ self,
137
+ chat_id: str,
138
+ message: DeveloperMessage
139
+ | UserMessage
140
+ | AssistantMessage
141
+ | GeneratedAssistantMessage[T],
130
142
  ) -> None:
131
143
  """
132
144
  Add a message to the conversation store.
@@ -7,6 +7,9 @@ from typing import TYPE_CHECKING, Any, override
7
7
  from agentle.agents.conversations.conversation_store import ConversationStore
8
8
  from agentle.generations.models.messages.assistant_message import AssistantMessage
9
9
  from agentle.generations.models.messages.developer_message import DeveloperMessage
10
+ from agentle.generations.models.messages.generated_assistant_message import (
11
+ GeneratedAssistantMessage,
12
+ )
10
13
  from agentle.generations.models.messages.user_message import UserMessage
11
14
 
12
15
  if TYPE_CHECKING:
@@ -84,7 +87,11 @@ class PostgresConversationStore(ConversationStore):
84
87
  """)
85
88
 
86
89
  def _message_to_dict(
87
- self, message: DeveloperMessage | UserMessage | AssistantMessage
90
+ self,
91
+ message: DeveloperMessage
92
+ | UserMessage
93
+ | AssistantMessage
94
+ | GeneratedAssistantMessage[Any],
88
95
  ) -> dict[str, Any]:
89
96
  """Convert a message object to a dictionary for JSON serialization."""
90
97
  message_dict = message.model_dump()
@@ -119,8 +126,13 @@ class PostgresConversationStore(ConversationStore):
119
126
  return UserMessage.model_validate(message_dict)
120
127
 
121
128
  @override
122
- async def add_message_async(
123
- self, chat_id: str, message: DeveloperMessage | UserMessage | AssistantMessage
129
+ async def add_message_async[T = Any](
130
+ self,
131
+ chat_id: str,
132
+ message: DeveloperMessage
133
+ | UserMessage
134
+ | AssistantMessage
135
+ | GeneratedAssistantMessage[T],
124
136
  ) -> None:
125
137
  """Add a message to the conversation."""
126
138
  async with self._pool.acquire() as conn:
@@ -2285,7 +2285,7 @@ class WhatsAppBot[T_Schema: WhatsAppResponseBase = WhatsAppResponseBase](BaseMod
2285
2285
  ... )
2286
2286
  """
2287
2287
  response_text = ""
2288
-
2288
+
2289
2289
  if isinstance(response, GeneratedAssistantMessage):
2290
2290
  # Check if we have structured output (parsed)
2291
2291
  if response.parsed:
@@ -101,12 +101,12 @@ def parse_streaming_json[T: BaseModel](potential_json: str | None, model: type[T
101
101
  in_string = False
102
102
  escape_next = False
103
103
  last_quote_pos = -1
104
-
104
+
105
105
  for i, char in enumerate(json_str):
106
106
  if escape_next:
107
107
  escape_next = False
108
108
  continue
109
- if char == '\\':
109
+ if char == "\\":
110
110
  escape_next = True
111
111
  continue
112
112
  if char == '"':
@@ -141,7 +141,7 @@ def parse_streaming_json[T: BaseModel](potential_json: str | None, model: type[T
141
141
  # Pattern: "key": "value..." - capture everything until the next unescaped quote or EOF
142
142
  string_pattern = r'["\']([\w]+)["\']:\s*["\']([^"\']*?)(?:["\']|$)'
143
143
  string_matches = re.findall(string_pattern, json_str, re.DOTALL)
144
-
144
+
145
145
  # Also try to capture very long strings that span multiple lines
146
146
  # This catches incomplete strings during streaming
147
147
  long_string_pattern = r'["\']([\w_]+)["\']:\s*["\'](.+?)(?:["\'],?\s*["}]|$)'
@@ -149,12 +149,14 @@ def parse_streaming_json[T: BaseModel](potential_json: str | None, model: type[T
149
149
 
150
150
  for key, value in string_matches:
151
151
  data[key] = value
152
-
152
+
153
153
  # Prefer long_matches for fields that might be truncated in string_matches
154
154
  for key, value in long_matches:
155
155
  # Only override if the long match has more content
156
156
  existing = data.get(key, "")
157
- if key not in data or (isinstance(existing, str) and len(value) > len(existing)):
157
+ if key not in data or (
158
+ isinstance(existing, str) and len(value) > len(existing)
159
+ ):
158
160
  data[key] = value
159
161
 
160
162
  # Extract string key-value pairs with unquoted keys
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentle
3
- Version: 0.9.29
3
+ Version: 0.9.31
4
4
  Summary: ...
5
5
  Author-email: Arthur Brenno <64020210+arthurbrenno@users.noreply.github.com>
6
6
  License-File: LICENSE
@@ -87,7 +87,7 @@ agentle/agents/apis/http_method.py,sha256=QhiUJvftOaVJXIMDzhdOnvrPxrwrjikOePm664
87
87
  agentle/agents/apis/no_authentication.py,sha256=s8q5sE6VyUhBmtPAuH18fkc0Dhu-fA_a2jjfvPOF1aE,654
88
88
  agentle/agents/apis/oauth2_authentication.py,sha256=ql-wUfD5sWPy5WqbrMO7k7d7l12z14qf8OGnHgQCOD8,3959
89
89
  agentle/agents/apis/oauth2_grant_type.py,sha256=rx2LvkqMZ32-zzJrKyJZofdii9u4E2cIHeQXoX0MuRM,271
90
- agentle/agents/apis/object_schema.py,sha256=OSV-tkpTyYZ0B7iDe0G3c0fqkhfEisemPwcrqMvMi0Y,4595
90
+ agentle/agents/apis/object_schema.py,sha256=1p01VbRGTFX7v6eFSJToAtfOJuOEkjJKp9Injulk-hs,4531
91
91
  agentle/agents/apis/object_serialization_style.py,sha256=sHt23Spp6TH0KLDH7WuGL7hvLnz-B_NnTkJQboewt4o,482
92
92
  agentle/agents/apis/parameter_location.py,sha256=k4vSvrljwsxorV_sf2Ch_OP4zvIGvhHDXonxrg-32eg,283
93
93
  agentle/agents/apis/primitive_schema.py,sha256=fmDiMrXxtixORKIDvg8dx_h7w1AqPXpFOK8q_XxS_UQ,705
@@ -99,9 +99,9 @@ agentle/agents/apis/response_cache.py,sha256=l-Ec_YVf1phhaTKWNdAORBDWZS3pXK_BBUH
99
99
  agentle/agents/apis/retry_strategy.py,sha256=_W8ZXXmA0kPFLJ0uwwV9ZycmSnj4dsicisFrbN8FtAU,219
100
100
  agentle/agents/apis/params/__init__.py,sha256=7aXlrfQTXpGT2GxuyugnFsF74l4AszSkFgxb0keyPRE,383
101
101
  agentle/agents/apis/params/array_param.py,sha256=dHcKGNdsYnze0AdMKGuxidM81Hwydb264JFdLhJEVeA,1036
102
- agentle/agents/apis/params/boolean_param.py,sha256=tns69WfA-EEMNcMthclVaCG7HqUfJR3QN6-ghRC6cP4,1301
102
+ agentle/agents/apis/params/boolean_param.py,sha256=POQb-qM6w85RiEstgPt-xSfJlK0gb0P1s5CI0ulJ3pk,1273
103
103
  agentle/agents/apis/params/integer_param.py,sha256=DEEOoOmLVzTFAQOJnLAr2MTcgLFYbavBDrf4CJ_-P_E,788
104
- agentle/agents/apis/params/number_param.py,sha256=dZpN-9BJElTlqbjLq_kXAq14xcYnSSLQBE1tHjKco_o,1683
104
+ agentle/agents/apis/params/number_param.py,sha256=KYYS7cH1hYQQnpy9LFd3pEkVbw9cIgkdhuDgu5WXYdo,1655
105
105
  agentle/agents/apis/params/object_param.py,sha256=_zR7t4aQoK7NSRH0yS3-iZqMeKzHCc2vtKqDRfdDp1M,1044
106
106
  agentle/agents/apis/params/string_param.py,sha256=0cLqPLsljw_7AHYXESib9mtJRRLOreH3-4ObJR8CFUk,710
107
107
  agentle/agents/asgi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -109,13 +109,13 @@ agentle/agents/asgi/blacksheep/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
109
109
  agentle/agents/asgi/blacksheep/agent_to_blacksheep_application_adapter.py,sha256=EI-0TBWlL8wewFuOtNoTeY7T1BTbj3GVQjUmkuPrv74,12080
110
110
  agentle/agents/asgi/blacksheep/agent_to_blacksheep_route_handler_adapter.py,sha256=kAX3_W6Gj8JI9yjXm6bnWvzq4YH8E4RD_jPy-Z_RtoA,25124
111
111
  agentle/agents/conversations/__init__.py,sha256=8XNgbcRauHDWbaiwKzoQkMbA4v3IOB1rtKGPfjReHPY,573
112
- agentle/agents/conversations/callback_conversation_store.py,sha256=2ITH1ETBIjbTxq_i9x86kQEaKtlSyi1GMR9OAw2tHcQ,7945
113
- agentle/agents/conversations/conversation_store.py,sha256=LeSwBrQvHjPFLTAoGrY8s2b5h5o43x_BOmrtGIiJ0qM,1824
114
- agentle/agents/conversations/firebase_conversation_store.py,sha256=POnO7mTkL4HLhz0l8DUXZzBluGGnOzmpASZ2k0BC-uE,4167
115
- agentle/agents/conversations/json_file_conversation_store.py,sha256=OWmvr7XbUlueIatFgqvMCaf3hnz11UoMtX4d_pEf1pA,9285
116
- agentle/agents/conversations/local_conversation_store.py,sha256=grnpHX0wc89QjLJXIIZzhMo3O4qsFcO4gGBcUFQUQA0,2112
117
- agentle/agents/conversations/mysql_conversation_store.py,sha256=sBrU5SGDxelWRifjFKUjcx2s4gBWccUmA_7k4Atao2s,11243
118
- agentle/agents/conversations/postgres_conversation_store.py,sha256=Z0zuh2-LbqjE7ft81r24iMrksdpIGNiIwQEjZjRgUNM,9695
112
+ agentle/agents/conversations/callback_conversation_store.py,sha256=zamvaWLu-C0MiVhUetiN5OjS7aktlYIlmhq_UrxrXaE,8283
113
+ agentle/agents/conversations/conversation_store.py,sha256=w4NG_1rzFXQrwBLsLu_AB0IRutapul8wDwcUktwsqiM,2039
114
+ agentle/agents/conversations/firebase_conversation_store.py,sha256=dsQnRf9OQsb_8IhmbNFUaMGgwQZ9RFNosphDcTz5LI8,4364
115
+ agentle/agents/conversations/json_file_conversation_store.py,sha256=NvUGXzxKU_ozoNM4rodqKtrDR1r7WeUvTUDm3eYXkkM,9544
116
+ agentle/agents/conversations/local_conversation_store.py,sha256=cPFQcCieZ9d0K3fc0MvfzcUucnL8KPMK9K8IhOEn28Y,2432
117
+ agentle/agents/conversations/mysql_conversation_store.py,sha256=XKlURkjRQpHcotRyhQHneqzzZXehyR2IJtIqh4kyEgM,11501
118
+ agentle/agents/conversations/postgres_conversation_store.py,sha256=kwB3UsME1oqKj-dYbhMw-XPe0pOm47MSoA6RFNWHrNk,9953
119
119
  agentle/agents/errors/__init__.py,sha256=g2WoSvolIhcRutVsaEctMRsKK_r02wpSquvoNEjDOPo,1694
120
120
  agentle/agents/errors/max_tool_calls_exceeded_error.py,sha256=LXyGXOSNhYyc9W8f0ZcKMuQiFdpFjLr_yM4nkpUvZF8,2817
121
121
  agentle/agents/errors/tool_suspension_error.py,sha256=_wL6URtj2eqnuSLpTvabqD8IYfz8z-1eszifzibyfoc,3096
@@ -137,7 +137,7 @@ agentle/agents/ui/__init__.py,sha256=IjHRV0k2DNwvFrEHebmsXiBvmITE8nQUnsR07h9tVkU
137
137
  agentle/agents/ui/streamlit.py,sha256=9afICL0cxtG1o2pWh6vH39-NdKiVfADKiXo405F2aB0,42829
138
138
  agentle/agents/whatsapp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
139
  agentle/agents/whatsapp/human_delay_calculator.py,sha256=BGCDeoNTPsMn4d_QYmG0BWGCG8SiUJC6Fk295ulAsAk,18268
140
- agentle/agents/whatsapp/whatsapp_bot.py,sha256=7B1ZCQYMJ6qgRINFzSQVSshDr-4L1F5H3MHqJYI7w3g,161962
140
+ agentle/agents/whatsapp/whatsapp_bot.py,sha256=8AkP6VncI04s0KEpJ_ykkZsHUoUpF1PYxXyLRWA8EW4,161954
141
141
  agentle/agents/whatsapp/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
142
  agentle/agents/whatsapp/models/audio_message.py,sha256=kUqG1HdNW6DCYD-CqscJ6WHlAyv9ufmTSKMdjio9XWk,2705
143
143
  agentle/agents/whatsapp/models/context_info.py,sha256=sk80KuNE36S6VRnLh7n6UXmzZCXIB4E4lNxnRyVizg8,563
@@ -971,7 +971,7 @@ agentle/utils/file_validation.py,sha256=Rv6y_ylBrDoslscCk2lkfr3LRMarY0J8qWhKJjZj
971
971
  agentle/utils/fix_base64_padding.py,sha256=IWBlMP3FYcWs17Y72tVxG7w1lzEKnstaDC9HRKmI56Y,1109
972
972
  agentle/utils/make_fields_optional.py,sha256=pu2u-jJ1pNyoQRyGQzxwXnYbWSzZ2G4ssebJvjYsH8A,7800
973
973
  agentle/utils/needs.py,sha256=JRTVvgVP0w0bpq1_w2Jly2lxXiONdHOYAYMvReFQcJM,5110
974
- agentle/utils/parse_streaming_json.py,sha256=9otgyfU37F-X9qbWHxgFmoYi9MSa9PPCarJ5CJ1Tcr0,31890
974
+ agentle/utils/parse_streaming_json.py,sha256=u4Rmfug_Uh3V8Enwqu7ccn0Xa9oYDtNN6Cxysh907Ng,31896
975
975
  agentle/utils/raise_error.py,sha256=EYX6WJS5gzJxgTyFYYOFHc-klEyU0tP20N5k_-ze5nQ,138
976
976
  agentle/utils/safe_b64decode.py,sha256=2nkdwUzkeVgtf3kb_zypjJY2KHe7dlLwa4ynjY2Yy1E,1272
977
977
  agentle/utils/safe_dill_dumps.py,sha256=yXQ51P05uSiWnREKJ6UWVjCKnRQTjgPVzoE1nylBbJI,237
@@ -1018,7 +1018,7 @@ agentle/web/actions/scroll.py,sha256=WqVVAORNDK3BL1oASZBPmXJYeSVkPgAOmWA8ibYO82I
1018
1018
  agentle/web/actions/viewport.py,sha256=KCwm88Pri19Qc6GLHC69HsRxmdJz1gEEAODfggC_fHo,287
1019
1019
  agentle/web/actions/wait.py,sha256=IKEywjf-KC4ni9Gkkv4wgc7bY-hk7HwD4F-OFWlyf2w,571
1020
1020
  agentle/web/actions/write_text.py,sha256=9mxfHcpKs_L7BsDnJvOYHQwG8M0GWe61SRJAsKk3xQ8,748
1021
- agentle-0.9.29.dist-info/METADATA,sha256=R9crja9iNTdYzuPt86thtNZGJFIkwz7wou53L--okQQ,86849
1022
- agentle-0.9.29.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1023
- agentle-0.9.29.dist-info/licenses/LICENSE,sha256=T90S9vqRS6qP-voULxAcvwEs558wRRo6dHuZrjgcOUI,1085
1024
- agentle-0.9.29.dist-info/RECORD,,
1021
+ agentle-0.9.31.dist-info/METADATA,sha256=Bxiq2rY_WhZ3w98ZCshLt6UM_CfWuIUuJtK53Zq9aPw,86849
1022
+ agentle-0.9.31.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1023
+ agentle-0.9.31.dist-info/licenses/LICENSE,sha256=T90S9vqRS6qP-voULxAcvwEs558wRRo6dHuZrjgcOUI,1085
1024
+ agentle-0.9.31.dist-info/RECORD,,