| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- """消息系统"""
- import uuid
- from typing import Optional, Dict, Any, Literal
- from datetime import datetime
- from pydantic import BaseModel
- MessageRole = Literal["user", "assistant", "system", "tool"]
- class Message(BaseModel):
- """消息类"""
- content: str
- role: MessageRole
- message_id: str = ""
- conversation_id: str = ""
- parent_id: Optional[str] = None
- branch_point: bool = False
- timestamp: datetime = None
- metadata: Optional[Dict[str, Any]] = None
- def __init__(self, content: str, role: MessageRole, **kwargs):
- super().__init__(
- content=content,
- role=role,
- message_id=kwargs.get("message_id", uuid.uuid4().hex[:12]),
- conversation_id=kwargs.get("conversation_id", ""),
- parent_id=kwargs.get("parent_id"),
- branch_point=kwargs.get("branch_point", False),
- timestamp=kwargs.get("timestamp", datetime.now()),
- metadata=kwargs.get("metadata", {}),
- )
- def to_dict(self, full: bool = False) -> Dict[str, Any]:
- if full:
- return {
- "role": self.role,
- "content": self.content,
- "message_id": self.message_id,
- "conversation_id": self.conversation_id,
- "parent_id": self.parent_id,
- "branch_point": self.branch_point,
- "timestamp": self.timestamp.isoformat() if self.timestamp else None,
- "metadata": self.metadata,
- }
- return {"role": self.role, "content": self.content}
- def __str__(self) -> str:
- return f"[{self.role}] {self.content}"
|