dashboard-nanobot/backend/models/bot.py

34 lines
1.6 KiB
Python
Raw Normal View History

2026-03-01 16:26:03 +00:00
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
2026-03-05 02:42:39 +00:00
access_password: str = Field(default="")
2026-03-01 16:26:03 +00:00
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
2026-03-03 16:45:51 +00:00
feedback: Optional[str] = Field(default=None, index=True) # up | down
feedback_at: Optional[datetime] = Field(default=None)
2026-03-01 16:26:03 +00:00
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)