microcore.message_types
Message classes for OpenAI Chat API
1""" Message classes for OpenAI Chat API """ 2 3from dataclasses import dataclass, field 4 5 6class Role: 7 SYSTEM = "system" 8 USER = "user" 9 ASSISTANT = "assistant" 10 11 12DEFAULT_MESSAGE_ROLE = Role.USER 13 14 15@dataclass 16class Msg: 17 dict_factory = dict 18 role: str = field(default=DEFAULT_MESSAGE_ROLE) 19 content: str = field(default="") 20 21 def __str__(self): 22 return str(self.content) 23 24 def strip(self): 25 self.content = self.content.strip() 26 return self 27 28 29@dataclass 30class SysMsg(Msg): 31 role: str = field(default=Role.SYSTEM, init=False) 32 33 34@dataclass 35class UserMsg(Msg): 36 role: str = field(default=Role.USER, init=False) 37 38 39@dataclass 40class AssistantMsg(Msg): 41 role: str = field(default=Role.ASSISTANT, init=False) 42 43 44class PartialMsg(AssistantMsg): 45 """A message that is not fully formed yet.""" 46 47 class _PartialMsgDict(dict): 48 is_partial = True 49 """Custom dictionary class to handle additional properties""" 50 51 dict_factory = _PartialMsgDict 52 placeholder = "<|placeholder|>" 53 variants_splitter = "<|or|>" 54 55 @staticmethod 56 def split_prefix_and_suffixes(content: str): 57 parts = content.split(PartialMsg.placeholder) 58 prefix = parts[0] 59 suffix = parts[1] if len(parts) > 1 else "" 60 suffixes = suffix.split(PartialMsg.variants_splitter) if suffix else [] 61 return prefix, suffixes 62 63 def prefix_and_suffixes(self): 64 return self.split_prefix_and_suffixes(self.content) 65 66 def prefix(self): 67 prefix, _ = self.prefix_and_suffixes() 68 return prefix 69 70 def suffixes(self): 71 _, suffixes = self.prefix_and_suffixes() 72 return suffixes
class
Role:
DEFAULT_MESSAGE_ROLE =
'user'
@dataclass
class
Msg:
Inherited Members
Inherited Members
Inherited Members
45class PartialMsg(AssistantMsg): 46 """A message that is not fully formed yet.""" 47 48 class _PartialMsgDict(dict): 49 is_partial = True 50 """Custom dictionary class to handle additional properties""" 51 52 dict_factory = _PartialMsgDict 53 placeholder = "<|placeholder|>" 54 variants_splitter = "<|or|>" 55 56 @staticmethod 57 def split_prefix_and_suffixes(content: str): 58 parts = content.split(PartialMsg.placeholder) 59 prefix = parts[0] 60 suffix = parts[1] if len(parts) > 1 else "" 61 suffixes = suffix.split(PartialMsg.variants_splitter) if suffix else [] 62 return prefix, suffixes 63 64 def prefix_and_suffixes(self): 65 return self.split_prefix_and_suffixes(self.content) 66 67 def prefix(self): 68 prefix, _ = self.prefix_and_suffixes() 69 return prefix 70 71 def suffixes(self): 72 _, suffixes = self.prefix_and_suffixes() 73 return suffixes
A message that is not fully formed yet.