Phase 1 (Foundation): - Project restructure (presenton-main → backend/ + frontend/) - Database schema (8 new models, Alembic config, seed script) - Auth (Azure AD SSO + dev bypass, JWT sessions, AuthMiddleware) - RBAC (access_service, rbac_middleware, admin routers) - Audit logging (fire-and-forget, AuditMiddleware, admin router) - i18n (react-i18next with 5 namespace files) Phase 2 (Admin Panel & Client Management): - Admin panel shell (sidebar layout, role guard, 12 pages) - Redux admin slice with 18 async thunks - User management (role changes, deactivation) - Client management (CRUD, brand config, team management) - Brand config editor (colors, fonts, logos, voice rules) - Master deck upload & parser (PPTX → HTML → React pipeline) - Audit log viewer with filters and CSV/JSON export Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
59 lines
1.3 KiB
Python
59 lines
1.3 KiB
Python
from typing import Any, List, Literal, Optional
|
|
from pydantic import BaseModel
|
|
from google.genai.types import Content as GoogleContent
|
|
|
|
from models.llm_tool_call import AnthropicToolCall
|
|
|
|
|
|
class LLMMessage(BaseModel):
|
|
pass
|
|
|
|
|
|
class LLMUserMessage(LLMMessage):
|
|
role: Literal["user"] = "user"
|
|
content: str
|
|
|
|
|
|
class LLMSystemMessage(LLMMessage):
|
|
role: Literal["system"] = "system"
|
|
content: str
|
|
|
|
|
|
class OpenAIAssistantMessage(LLMMessage):
|
|
role: Literal["assistant"] = "assistant"
|
|
content: str | None = None
|
|
tool_calls: Optional[List[dict]] = None
|
|
|
|
|
|
class GoogleAssistantMessage(LLMMessage):
|
|
role: Literal["assistant"] = "assistant"
|
|
content: GoogleContent
|
|
|
|
|
|
class AnthropicAssistantMessage(LLMMessage):
|
|
role: Literal["assistant"] = "assistant"
|
|
content: List[AnthropicToolCall]
|
|
|
|
|
|
class AnthropicToolCallMessage(LLMMessage):
|
|
type: Literal["tool_result"] = "tool_result"
|
|
tool_use_id: str
|
|
content: str
|
|
|
|
|
|
class AnthropicUserMessage(LLMMessage):
|
|
role: Literal["user"] = "user"
|
|
content: List[AnthropicToolCallMessage]
|
|
|
|
|
|
class OpenAIToolCallMessage(LLMMessage):
|
|
role: Literal["tool"] = "tool"
|
|
content: str
|
|
tool_call_id: str
|
|
|
|
|
|
class GoogleToolCallMessage(LLMMessage):
|
|
role: Literal["tool"] = "tool"
|
|
id: Optional[str] = None
|
|
name: str
|
|
response: dict
|