feat: AI Worker 平台 MVP v1.0.0 - 多租户/项目管理/AI Worker/任务编排/HITL审核/成本治理
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
"""AI Worker model - the 'virtual employee' profile."""
|
||||
from sqlalchemy import Column, String, Integer, Text, Boolean, ForeignKey, Float
|
||||
from app.models.base import Base, TimestampMixin, TenantMixin
|
||||
|
||||
|
||||
class AIWorker(Base, TimestampMixin, TenantMixin):
|
||||
"""An AI Worker is a 'virtual employee' profile.
|
||||
|
||||
Combines: model config + system prompt (role) + tool whitelist + cost limits.
|
||||
|
||||
Status: active, idle, busy, offline, cooling
|
||||
"""
|
||||
__tablename__ = "ai_workers"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
|
||||
name = Column(String(200), nullable=False)
|
||||
description = Column(Text, default="")
|
||||
|
||||
# Model configuration
|
||||
provider = Column(String(100), nullable=False, default="openai")
|
||||
model_name = Column(String(200), nullable=False, default="gpt-4o-mini")
|
||||
api_key = Column(String(500), nullable=True) # If empty, uses default
|
||||
base_url = Column(String(500), nullable=True)
|
||||
temperature = Column(Float, default=0.7)
|
||||
|
||||
# Role / system prompt
|
||||
system_prompt = Column(Text, default="You are a helpful AI assistant.")
|
||||
|
||||
# Tool whitelist (JSON array of tool names)
|
||||
tools = Column(Text, default="[]")
|
||||
|
||||
# Cost limits
|
||||
max_cost_per_task_cents = Column(Integer, nullable=True)
|
||||
max_cost_per_month_cents = Column(Integer, nullable=True)
|
||||
|
||||
# Status
|
||||
status = Column(String(50), default="active")
|
||||
is_active = Column(Boolean, default=True)
|
||||
|
||||
# Available time window (JSON: {"start": "09:00", "end": "18:00"})
|
||||
available_hours = Column(Text, default='{"start": "00:00", "end": "23:59"}')
|
||||
|
||||
# Current load
|
||||
current_task_count = Column(Integer, default=0)
|
||||
max_concurrent_tasks = Column(Integer, default=1)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<AIWorker {self.name} ({self.provider}/{self.model_name})>"
|
||||
Reference in New Issue
Block a user