agi-med-common 5.0.25__py3-none-any.whl → 5.0.27__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.
@@ -1,4 +1,4 @@
1
- __version__ = "5.0.25"
1
+ __version__ = "5.0.27"
2
2
 
3
3
  from .models import (
4
4
  MTRSLabelEnum,
@@ -1,7 +1,7 @@
1
1
  import warnings
2
2
  from copy import deepcopy
3
3
  from datetime import datetime
4
- from typing import Any, List, Dict, Literal, TypeVar
4
+ from typing import Any, List, Dict, Literal, TypeVar, Callable
5
5
 
6
6
  from agi_med_common.models.chat_item import ChatItem, ReplicaItem, OuterContextItem
7
7
  from agi_med_common.models.widget import Widget
@@ -10,7 +10,6 @@ from agi_med_common.utils import first_nonnull
10
10
  from pydantic import Field, ValidationError
11
11
 
12
12
  from ._base import _Base
13
- from typing import Callable
14
13
 
15
14
 
16
15
  _DT_FORMAT: str = "%Y-%m-%d-%H-%M-%S"
@@ -154,6 +153,14 @@ class BaseMessage(_Base):
154
153
  def with_now_datetime(self):
155
154
  return self.model_copy(update=dict(date_time=now_pretty()))
156
155
 
156
+ @property
157
+ def is_ai(self):
158
+ return self.type == "ai"
159
+
160
+ @property
161
+ def is_human(self):
162
+ return self.type == "human"
163
+
157
164
 
158
165
  class HumanMessage(BaseMessage):
159
166
  type: Literal["human"] = "human"
@@ -163,6 +170,10 @@ class AIMessage(BaseMessage):
163
170
  type: Literal["ai"] = "ai"
164
171
  state: str = Field("", examples=["COLLECTION"])
165
172
 
173
+ @property
174
+ def action(self) -> str:
175
+ return self.extra.get("action", "")
176
+
166
177
 
167
178
  class MiscMessage(BaseMessage):
168
179
  type: Literal["misc"] = "misc"
@@ -192,6 +203,16 @@ class Chat(_Base):
192
203
  for message in messages:
193
204
  self.messages.append(message)
194
205
 
206
+ def replace_messages(self, messages: List[ChatMessage]):
207
+ return self.model_copy(update=dict(messages=messages))
208
+
209
+ def get_last_state(self, default: str = "empty") -> str:
210
+ for ii in range(len(self.messages) - 1, -1, -1):
211
+ message = self.messages[ii]
212
+ if isinstance(message, AIMessage):
213
+ return message.state
214
+ return default
215
+
195
216
 
196
217
  def convert_replica_item_to_message(replica: ReplicaItem) -> ChatMessage:
197
218
  # legacy: eliminate after migration
@@ -1,5 +1,5 @@
1
1
  from datetime import datetime
2
- from typing import Annotated, Any, List
2
+ from typing import Annotated, Any, List, Callable
3
3
 
4
4
  from agi_med_common.models.widget import Widget
5
5
  from pydantic import Field, ConfigDict, BeforeValidator, AfterValidator
@@ -92,6 +92,18 @@ class ReplicaItem(_Base):
92
92
  def with_now_datetime(self):
93
93
  return self.model_copy(update=dict(date_time=now_pretty()))
94
94
 
95
+ @property
96
+ def is_ai(self):
97
+ return self.role
98
+
99
+ @property
100
+ def is_human(self):
101
+ return not self.role
102
+
103
+ def modify_text(self, callback: Callable[[str], str]) -> "ReplicaItem":
104
+ body_upd = callback(self.body)
105
+ return self.model_copy(update=dict(body=body_upd))
106
+
95
107
 
96
108
  class InnerContextItem(_Base):
97
109
  replicas: list[ReplicaItem] = Field(alias="Replicas")
@@ -118,6 +130,18 @@ class ChatItem(_Base):
118
130
  for replica in replicas:
119
131
  self.inner_context.replicas.append(replica)
120
132
 
133
+ def replace_replicas(self, replicas: List[ReplicaItem]):
134
+ return self.model_copy(update=dict(inner_context=InnerContextItem(replicas=replicas)))
135
+
136
+ def get_last_state(self, default: str = "empty") -> str:
137
+ replicas = self.inner_context.replicas
138
+ for ii in range(len(replicas) - 1, -1, -1):
139
+ replica = replicas[ii]
140
+ if replica.role:
141
+ return replica.state
142
+ return default
143
+
144
+
121
145
  def zip_history(self, field: str) -> list[Any]:
122
146
  return [replica.to_dict().get(field, None) for replica in self.inner_context.replicas]
123
147
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agi_med_common
3
- Version: 5.0.25
3
+ Version: 5.0.27
4
4
  Summary: Сommon for agi-med team
5
5
  Author: AGI-MED-TEAM
6
6
  Requires-Python: >=3.11
@@ -1,4 +1,4 @@
1
- agi_med_common/__init__.py,sha256=_cVr0Xpyf_UeT_iBf-t76dvcwpgFjzri5yywDp08rd8,740
1
+ agi_med_common/__init__.py,sha256=31W7wEnB_K8t721ZeTFPRJRu6yIAv11Rr42zhmTvPhg,740
2
2
  agi_med_common/api.py,sha256=kGLKiebbF91s_7V2S55ETS7R6tQgZNkoFMoawdjeMYw,1860
3
3
  agi_med_common/api_v2.py,sha256=gj6BPEAOvpT6GHWeE7bzmKIR-pvq0yORZ3L0ADvI8ps,1828
4
4
  agi_med_common/file_storage.py,sha256=T0Hbs4W-pWO6HdWcmlVqABrQHYdq7lLZH4_Vu-YNVbw,1802
@@ -9,14 +9,14 @@ agi_med_common/validators.py,sha256=vMoPN42XzC8re-zdjekk5_lNQYHuTiAWD56YLvj2Z2w,
9
9
  agi_med_common/xml_parser.py,sha256=VvLIX_XCZao9i0qqpTVx8nx0vbFXSe8pEbdJdXnj97g,568
10
10
  agi_med_common/models/__init__.py,sha256=dqr2kP-RuxFfAZhCr103PQzTVZFKIcdxyzTYiHhdTsE,375
11
11
  agi_med_common/models/_base.py,sha256=qNdH8x3x3mYbo5XgWtR9VpEarxsEvXvzynadUlDvHmU,149
12
- agi_med_common/models/chat.py,sha256=Tc-qPDvmLOkKalHEsx9OX2qQ6o4RCcdod0ciHune4Q8,10115
13
- agi_med_common/models/chat_item.py,sha256=bg_l6B4RAqiSO84vF50nQN7kYCkLB6JHAzItwm1-RzM,4791
12
+ agi_med_common/models/chat.py,sha256=lj6nxxsk0ng_1bhlakHqR_51ho7JonN2-2kYYhVpSxU,10720
13
+ agi_med_common/models/chat_item.py,sha256=QlJ5Q40eX7lEeH9YBmdTH71ugrEtsU-4thkhD8cJhu0,5548
14
14
  agi_med_common/models/enums.py,sha256=J-GNpql9MCnKnWiV9aJRQGI-pAybvV86923RZs99grA,1006
15
15
  agi_med_common/models/tracks.py,sha256=UP-jeWqDiCK6dyoMDfs7hemgl_xsJKee_DApjBf-XYc,311
16
16
  agi_med_common/models/widget.py,sha256=aJZ2vWx_PTFN02Wz16eokz9IIVrxqNuZYVDqLG36toE,710
17
17
  agi_med_common/models/base_config_models/__init__.py,sha256=KjS_bSCka8BOMsigwcIML-e6eNB2ouMU6gxlhRmzeuY,44
18
18
  agi_med_common/models/base_config_models/gigachat_config.py,sha256=WNSCTO8Fjpxc1v2LRUHfKqo9aeMDpXltTHYBFgTD2N0,422
19
- agi_med_common-5.0.25.dist-info/METADATA,sha256=ESt2Yy4UvU-c9T35RdeX4kX4APEusfOY2C0QpJXEsow,518
20
- agi_med_common-5.0.25.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
21
- agi_med_common-5.0.25.dist-info/top_level.txt,sha256=26o565jF_7wYQj7-YJfTedtT9yDxDcf8RNikOYuPq78,15
22
- agi_med_common-5.0.25.dist-info/RECORD,,
19
+ agi_med_common-5.0.27.dist-info/METADATA,sha256=Ir-4gN7waHnGHqcHVDLpzab3REIgcO0dwx5por4bsdA,518
20
+ agi_med_common-5.0.27.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
21
+ agi_med_common-5.0.27.dist-info/top_level.txt,sha256=26o565jF_7wYQj7-YJfTedtT9yDxDcf8RNikOYuPq78,15
22
+ agi_med_common-5.0.27.dist-info/RECORD,,