agi-med-common 1.4.0__py3-none-any.whl → 2.0.0__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 +1,16 @@
1
- __version__ = "1.4.0"
1
+ __version__ = "2.0.0"
2
+
3
+ from .logger import LogLevelEnum, logger_init
4
+ from .models import (
5
+ TrackIdEnum,
6
+ StatesEnum,
7
+ ChatItem,
8
+ InnerContextItem,
9
+ OuterContextItem,
10
+ ReplicaItem,
11
+ ChatItemWithState,
12
+ InnerContextWithState,
13
+ ReplicaWithState,
14
+ )
15
+ from .utils import make_session_id, read_json, replace_n
16
+ from .validators import is_file_exist, validate_prompt
@@ -1,3 +1,5 @@
1
1
  from ._base import _Base
2
- from .enums import TrackIdEnum
2
+ from .enums import TrackIdEnum, StatesEnum
3
3
  from .chat_item import ChatItem, OuterContextItem, InnerContextItem, ReplicaItem
4
+ from .chat_item_with_state import ChatItemWithState, InnerContextWithState, ReplicaWithState
5
+ from .base_config_models import GigaChatConfig
@@ -0,0 +1 @@
1
+ from .gigachat_config import GigaChatConfig
@@ -0,0 +1,15 @@
1
+ from typing import Self
2
+
3
+ from pydantic import BaseModel, model_validator, SecretStr
4
+
5
+
6
+ class GigaChatConfig(BaseModel):
7
+
8
+ client_id: SecretStr = SecretStr("")
9
+ client_secret: SecretStr = SecretStr("")
10
+
11
+ @model_validator(mode="after")
12
+ def empty_validator(self) -> Self:
13
+ if not (self.client_id and self.client_secret):
14
+ raise ValueError("creds for gigachat is not filled")
15
+ return self
@@ -1,10 +1,31 @@
1
- from pydantic import Field
1
+ from datetime import datetime
2
+
3
+ from pydantic import Field, field_validator, field_serializer
2
4
 
3
5
  from .. import _Base
4
6
 
7
+ _TIME_FORMAT: str = "%Y-%m-%d-%H-%M-%S"
8
+ _EXAMPLE_DATETIME: datetime = datetime(1970, 1, 1, 0, 0, 0)
9
+
5
10
 
6
11
  class ReplicaItem(_Base):
7
12
  body: str = Field("", alias="Body", examples=["Привет"])
8
13
  role: bool = Field(False, alias="Role", description="True = ai, False = client", examples=[False])
9
- date_time: str = Field("1970-01-01-00-00-00", alias="DateTime", examples=["2024-12-10-18-03-46"])
10
- previous_score: float | None = Field(None, alias="PreviousScore")
14
+ date_time: datetime = Field(
15
+ _EXAMPLE_DATETIME,
16
+ alias="DateTime",
17
+ examples=[_EXAMPLE_DATETIME.strftime(_TIME_FORMAT)],
18
+ description=f"Format: {_TIME_FORMAT}",
19
+ )
20
+ previous_score: float | None = Field(None, alias="PreviousScore", exclude=True, deprecated=True)
21
+
22
+ @field_validator("date_time", mode="before")
23
+ @classmethod
24
+ def convert_date_time(cls, timestamp: str | datetime) -> datetime:
25
+ if isinstance(timestamp, datetime):
26
+ return timestamp
27
+ return datetime.strptime(timestamp, _TIME_FORMAT)
28
+
29
+ @field_serializer("date_time")
30
+ def serialize_date_time(self, timestamp: datetime) -> str:
31
+ return timestamp.strftime(_TIME_FORMAT)
@@ -0,0 +1,3 @@
1
+ from .replica_with_state import ReplicaWithState
2
+ from .inner_context_with_state import InnerContextWithState
3
+ from .chat_with_state import ChatItemWithState
@@ -0,0 +1,8 @@
1
+ from ..chat_item import ChatItem
2
+ from pydantic import Field
3
+
4
+ from . import InnerContextWithState
5
+
6
+
7
+ class ChatItemWithState(ChatItem):
8
+ inner_context: InnerContextWithState = Field(alias="InnerContext")
@@ -0,0 +1,8 @@
1
+ from ..chat_item import InnerContextItem
2
+ from pydantic import Field
3
+
4
+ from . import ReplicaWithState
5
+
6
+
7
+ class InnerContextWithState(InnerContextItem):
8
+ replicas: list[ReplicaWithState] = Field(alias="Replicas")
@@ -0,0 +1,8 @@
1
+ from ..chat_item import ReplicaItem
2
+ from pydantic import Field
3
+
4
+ from ..enums import StatesEnum
5
+
6
+
7
+ class ReplicaWithState(ReplicaItem):
8
+ state: StatesEnum | None = Field(None, alias="State")
@@ -1 +1,2 @@
1
1
  from .track_id_enum import TrackIdEnum
2
+ from .states_enum import StatesEnum
@@ -0,0 +1,29 @@
1
+ from enum import StrEnum, auto
2
+
3
+
4
+ class StatesEnum(StrEnum):
5
+ """
6
+ Класс для хранения имен состояний.
7
+ """
8
+
9
+ BEGIN = auto()
10
+ START = auto()
11
+
12
+ IS_CHILD = auto()
13
+ IS_ABSURD = auto()
14
+ CRITICAL = auto()
15
+ WHAT_COMPLAINTS = auto()
16
+ NOT_MEDICAL = auto()
17
+
18
+ ERROR_STATE = auto()
19
+
20
+ CONSULTATION_TRANSIT = auto()
21
+ NOT_MEDICAL_DOC = auto()
22
+ CONSULTATION = auto()
23
+
24
+ INFO_COLLECTION = auto()
25
+ MAKE_DIAGNOSIS = auto()
26
+
27
+ SUMMARIZATION = auto()
28
+
29
+ ANALYSIS_CONSULTATION = auto()
@@ -0,0 +1,18 @@
1
+ import codecs
2
+ import json
3
+ import os
4
+ from datetime import datetime
5
+ from pathlib import Path
6
+
7
+
8
+ def make_session_id() -> str:
9
+ return f"{datetime.now():%y%m%d%H%M%S}"
10
+
11
+
12
+ def read_json(path: Path | os.PathLike[str] | str) -> list | dict:
13
+ with codecs.open(path, "r", encoding="utf8") as file:
14
+ return json.load(file)
15
+
16
+
17
+ def replace_n(value: str) -> str:
18
+ return value.replace("\\n", "\n")
@@ -0,0 +1,18 @@
1
+ import os
2
+ import re
3
+ from pathlib import Path
4
+
5
+
6
+ def is_file_exist(filepath: str | os.PathLike[str] | Path) -> str | os.PathLike | Path:
7
+ if not os.path.exists(filepath):
8
+ raise ValueError(f"File {filepath} is not exist. Check the path")
9
+ return filepath
10
+
11
+
12
+ def validate_prompt(prompt: str, prompt_required_keys: set[str]) -> str:
13
+ exist_keys: set[str] = set(re.findall(r"{(.*?)}", prompt))
14
+ if missed_keys := prompt_required_keys.difference(exist_keys):
15
+ raise ValueError(f"Missing required key in prompt: {missed_keys}")
16
+ if extern_keys := exist_keys.difference(prompt_required_keys):
17
+ raise ValueError(f"You have more keys for prompt: {extern_keys}")
18
+ return prompt
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: agi_med_common
3
- Version: 1.4.0
3
+ Version: 2.0.0
4
4
  Summary: Сommon for agi-med team
5
5
  Author: AGI-MED-TEAM
6
6
  Requires-Python: >=3.13
@@ -0,0 +1,26 @@
1
+ agi_med_common/__init__.py,sha256=0GJulrzkBDkB17nr_utQW7ghrK5yCMq30GZKK9aV3wY,385
2
+ agi_med_common/utils.py,sha256=4GV1yNZiRG3KYOh859dvOZI899z7_s_YN3aXzthMgwU,399
3
+ agi_med_common/validators.py,sha256=R678gjPp-5XbnocRuEtdOQgJyCCOurxwaOe2nT04kSg,705
4
+ agi_med_common/logger/__init__.py,sha256=RW_0VZtbeJ4RsLqUXZUQWl5CtV9g840rU7qRlf5u49E,96
5
+ agi_med_common/logger/log_level_enum.py,sha256=lWuSMho9I0v_xf1RuwpERx5o8NJXaavjwxSdh8fxMqE,477
6
+ agi_med_common/logger/logger.py,sha256=BrLFWe_103S7uFHX2UeGpZdF-wuz7up4l6gfQwQjJoA,1263
7
+ agi_med_common/models/__init__.py,sha256=kBCFA9ctcBRm9JrrEs4HHGYcXERMaoEI8p5N6kN2JAY,289
8
+ agi_med_common/models/_base.py,sha256=qNdH8x3x3mYbo5XgWtR9VpEarxsEvXvzynadUlDvHmU,149
9
+ agi_med_common/models/base_config_models/__init__.py,sha256=KjS_bSCka8BOMsigwcIML-e6eNB2ouMU6gxlhRmzeuY,44
10
+ agi_med_common/models/base_config_models/gigachat_config.py,sha256=WNSCTO8Fjpxc1v2LRUHfKqo9aeMDpXltTHYBFgTD2N0,422
11
+ agi_med_common/models/chat_item/__init__.py,sha256=MoZFnZQV-tWJTHmH1OhRBRkrc5cGWAfdJ6QfHDg6TDk,168
12
+ agi_med_common/models/chat_item/chat_item.py,sha256=aCRR4OwL-YS6hvVSNkIg7FNpfvEGo8BESCY8BhiAlNk,255
13
+ agi_med_common/models/chat_item/inner_context_item.py,sha256=s17frAcwyi8WcHnBt-5LF8nUJeO-hnu7YMobYQO5a-c,166
14
+ agi_med_common/models/chat_item/outer_context_item.py,sha256=IprCIh8ki3PUueFwdmPw-MYn0-prx_G523Y-IXN62ZY,792
15
+ agi_med_common/models/chat_item/replica_item.py,sha256=_OvnGmbP-wzxi16c6FGz-_Y-QtudV1Pi6I-zCJ7aQfA,1131
16
+ agi_med_common/models/chat_item_with_state/__init__.py,sha256=KrXgsvJnLzS1kSi9_Y1z6_egxIqKL7epY1r-PIyrnno,156
17
+ agi_med_common/models/chat_item_with_state/chat_with_state.py,sha256=IgZh0CRoar56eM8QOblPx8tsIm9NPO5tOj0mVC8yj40,205
18
+ agi_med_common/models/chat_item_with_state/inner_context_with_state.py,sha256=qIwqCHn-JuQemcVQqLDzkpuaPRNCjIL_-h1wm1Jv5WU,212
19
+ agi_med_common/models/chat_item_with_state/replica_with_state.py,sha256=YvUcCo1HTfxYUEwZ5T7UqLW2WkZ8SFvVNQZf-5mK5Dg,192
20
+ agi_med_common/models/enums/__init__.py,sha256=yHUFI7n5r-LY5y4CbliZlXDrmr38bsz8dh4iyNo5Ti8,75
21
+ agi_med_common/models/enums/states_enum.py,sha256=IerXA4uaCNnE0zt4JF4bveqwL1wpUUBMXMh6kqFV_XM,543
22
+ agi_med_common/models/enums/track_id_enum.py,sha256=fHGQz9AACIS6SfTFCrSau1HKee70r2bap-OcBxD3YRE,423
23
+ agi_med_common-2.0.0.dist-info/METADATA,sha256=VTyClWQ9zBYJdascshkCrq_hXlMsvCFyU3qxY8nz4Sg,520
24
+ agi_med_common-2.0.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
25
+ agi_med_common-2.0.0.dist-info/top_level.txt,sha256=26o565jF_7wYQj7-YJfTedtT9yDxDcf8RNikOYuPq78,15
26
+ agi_med_common-2.0.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,17 +0,0 @@
1
- agi_med_common/__init__.py,sha256=8UhoYEXHs1Oai7BW_ExBmuwWnRI-yMG_u1fQAXMizHQ,22
2
- agi_med_common/logger/__init__.py,sha256=RW_0VZtbeJ4RsLqUXZUQWl5CtV9g840rU7qRlf5u49E,96
3
- agi_med_common/logger/log_level_enum.py,sha256=lWuSMho9I0v_xf1RuwpERx5o8NJXaavjwxSdh8fxMqE,477
4
- agi_med_common/logger/logger.py,sha256=BrLFWe_103S7uFHX2UeGpZdF-wuz7up4l6gfQwQjJoA,1263
5
- agi_med_common/models/__init__.py,sha256=MxRz8pUM0U7QfLSDsjDX4dMQQHEDJu6179RibFWDYQc,137
6
- agi_med_common/models/_base.py,sha256=qNdH8x3x3mYbo5XgWtR9VpEarxsEvXvzynadUlDvHmU,149
7
- agi_med_common/models/chat_item/__init__.py,sha256=MoZFnZQV-tWJTHmH1OhRBRkrc5cGWAfdJ6QfHDg6TDk,168
8
- agi_med_common/models/chat_item/chat_item.py,sha256=aCRR4OwL-YS6hvVSNkIg7FNpfvEGo8BESCY8BhiAlNk,255
9
- agi_med_common/models/chat_item/inner_context_item.py,sha256=s17frAcwyi8WcHnBt-5LF8nUJeO-hnu7YMobYQO5a-c,166
10
- agi_med_common/models/chat_item/outer_context_item.py,sha256=IprCIh8ki3PUueFwdmPw-MYn0-prx_G523Y-IXN62ZY,792
11
- agi_med_common/models/chat_item/replica_item.py,sha256=c561A7EpjjaB7fr7DPd6hTCphAH1uFXGSiF74E5L-jY,419
12
- agi_med_common/models/enums/__init__.py,sha256=ooZLUfkRKeJDeTROAAqdRsMoqKBKmgnuGZXWQf9r83Y,39
13
- agi_med_common/models/enums/track_id_enum.py,sha256=fHGQz9AACIS6SfTFCrSau1HKee70r2bap-OcBxD3YRE,423
14
- agi_med_common-1.4.0.dist-info/METADATA,sha256=nUj-kQJAJ5TXGleZPhKPAiTh43vplQPGr3d7I_xHZfA,520
15
- agi_med_common-1.4.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
16
- agi_med_common-1.4.0.dist-info/top_level.txt,sha256=26o565jF_7wYQj7-YJfTedtT9yDxDcf8RNikOYuPq78,15
17
- agi_med_common-1.4.0.dist-info/RECORD,,