51 lines
2.4 KiB
Python
51 lines
2.4 KiB
Python
|
|
from typing import Optional
|
|||
|
|
from sqlmodel import Field, SQLModel
|
|||
|
|
from datetime import datetime
|
|||
|
|
|
|||
|
|
class BotInstance(SQLModel, table=True):
|
|||
|
|
id: str = Field(primary_key=True)
|
|||
|
|
name: str
|
|||
|
|
avatar_model: str = Field(default="base")
|
|||
|
|
avatar_skin: Optional[str] = Field(default="blue_suit")
|
|||
|
|
system_prompt: Optional[str] = Field(default=None)
|
|||
|
|
soul_md: Optional[str] = Field(default=None)
|
|||
|
|
agents_md: Optional[str] = Field(default=None)
|
|||
|
|
user_md: Optional[str] = Field(default=None)
|
|||
|
|
tools_md: Optional[str] = Field(default=None)
|
|||
|
|
tools_config_json: Optional[str] = Field(default=None) # JSON string for runtime tools config
|
|||
|
|
identity_md: Optional[str] = Field(default=None)
|
|||
|
|
llm_provider: str
|
|||
|
|
llm_model: str
|
|||
|
|
api_key: str # Encrypted
|
|||
|
|
api_base: Optional[str] = Field(default=None)
|
|||
|
|
temperature: float = Field(default=0.2)
|
|||
|
|
top_p: float = Field(default=1.0)
|
|||
|
|
max_tokens: int = Field(default=8192)
|
|||
|
|
presence_penalty: float = Field(default=0.0)
|
|||
|
|
frequency_penalty: float = Field(default=0.0)
|
|||
|
|
send_progress: bool = Field(default=False)
|
|||
|
|
send_tool_hints: bool = Field(default=False)
|
|||
|
|
workspace_dir: str = Field(unique=True)
|
|||
|
|
docker_status: str = Field(default="STOPPED", index=True)
|
|||
|
|
current_state: Optional[str] = Field(default="IDLE")
|
|||
|
|
last_action: Optional[str] = Field(default=None)
|
|||
|
|
image_tag: str = Field(default="nanobot-base:v0.1.4") # 记录该机器人使用的镜像版本
|
|||
|
|
created_at: datetime = Field(default_factory=datetime.utcnow)
|
|||
|
|
updated_at: datetime = Field(default_factory=datetime.utcnow)
|
|||
|
|
|
|||
|
|
class BotMessage(SQLModel, table=True):
|
|||
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|||
|
|
bot_id: str = Field(foreign_key="botinstance.id", index=True)
|
|||
|
|
role: str = Field(index=True) # user | assistant | system
|
|||
|
|
text: str
|
|||
|
|
media_json: Optional[str] = Field(default=None) # JSON string list of workspace-relative file paths
|
|||
|
|
created_at: datetime = Field(default_factory=datetime.utcnow, index=True)
|
|||
|
|
|
|||
|
|
class NanobotImage(SQLModel, table=True):
|
|||
|
|
tag: str = Field(primary_key=True) # e.g., nanobot-base:v0.1.4
|
|||
|
|
image_id: Optional[str] = Field(default=None) # Docker 内部的 Image ID
|
|||
|
|
version: str # e.g., 0.1.4
|
|||
|
|
status: str = Field(default="READY") # READY, BUILDING, ERROR
|
|||
|
|
source_dir: Optional[str] = Field(default=None) # 本地来源标识(如 manual)
|
|||
|
|
created_at: datetime = Field(default_factory=datetime.utcnow)
|