154 lines
5.8 KiB
Python
154 lines
5.8 KiB
Python
import datetime
|
|
import uuid
|
|
from enum import StrEnum
|
|
|
|
from sqlalchemy import Column, ForeignKey, Text, DateTime, String, Index, Boolean
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
|
|
from app.db import Base
|
|
|
|
|
|
class RoleType(StrEnum):
|
|
"""
|
|
Enumeration of message roles used in prompt optimization conversations.
|
|
|
|
This enum standardizes the role identifiers for messages stored in the
|
|
prompt optimization session history, ensuring consistency across
|
|
system-generated messages, user inputs, and assistant responses.
|
|
|
|
Attributes:
|
|
SYSTEM (str): Represents system-level instructions or prompts that
|
|
define the behavior or constraints of the assistant.
|
|
USER (str): Represents messages originating from the end user.
|
|
ASSISTANT (str): Represents messages generated by the AI assistant.
|
|
"""
|
|
SYSTEM = "system"
|
|
USER = "user"
|
|
ASSISTANT = "assistant"
|
|
|
|
|
|
class PromptOptimizerSession(Base):
|
|
"""
|
|
Prompt Optimization Session Registry.
|
|
|
|
This table records high-level metadata for prompt optimization sessions.
|
|
Each record represents a single logical session initiated by a user
|
|
under a specific tenant.
|
|
|
|
The session acts as a container for multiple conversation messages
|
|
stored in the session history table.
|
|
|
|
Table Name:
|
|
prompt_opt_session_list
|
|
|
|
Columns:
|
|
id (UUID):
|
|
Public-facing session identifier used to group conversation history.
|
|
tenant_id (UUID):
|
|
Foreign key referencing `tenants.id`.
|
|
Identifies the tenant under which the session is created.
|
|
user_id (UUID):
|
|
Foreign key referencing `users.id`.
|
|
Identifies the user who initiated the session.
|
|
created_at (DateTime):
|
|
Timestamp indicating when the session was created.
|
|
|
|
Design Notes:
|
|
- This table intentionally does not store message content
|
|
- Message-level data is stored in `prompt_opt_session_history`
|
|
- Enables efficient session listing and pagination
|
|
"""
|
|
__tablename__ = "prompt_opt_session_list"
|
|
|
|
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, index=True, comment="Session ID")
|
|
tenant_id = Column(UUID(as_uuid=True), ForeignKey("tenants.id"), nullable=False, comment="Tenant ID")
|
|
# app_id = Column(UUID(as_uuid=True), ForeignKey("apps.id"), nullable=False, comment="Application ID")
|
|
user_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False, comment="User ID")
|
|
|
|
created_at = Column(DateTime, default=datetime.datetime.now, comment="Creation Time", index=True)
|
|
|
|
|
|
class PromptOptimizerSessionHistory(Base):
|
|
"""
|
|
Prompt Optimization Session Message History.
|
|
|
|
This table stores the complete conversational history of a prompt
|
|
optimization session, including system prompts, user inputs, and
|
|
assistant responses.
|
|
|
|
Each record represents a single message within a session, preserving
|
|
the chronological order of interactions.
|
|
|
|
Table Name:
|
|
prompt_opt_session_history
|
|
|
|
Columns:
|
|
id (UUID):
|
|
Primary key. Unique identifier for the message record.
|
|
tenant_id (UUID):
|
|
Foreign key referencing `tenants.id`.
|
|
Identifies the tenant under which the session operates.
|
|
session_id (UUID):
|
|
Logical session identifier linking messages to a session.
|
|
user_id (UUID):
|
|
Foreign key referencing `users.id`.
|
|
Identifies the user associated with the session.
|
|
message_role (Text):
|
|
Role of the message sender (e.g., system, user, assistant).
|
|
message_content (Text):
|
|
Raw message content generated or provided during the session.
|
|
prompt (Text):
|
|
The prompt snapshot used at the time of message generation.
|
|
created_at (DateTime):
|
|
Timestamp indicating when the message was created.
|
|
|
|
Design Notes:
|
|
- Supports full conversation replay and audit
|
|
- Enables prompt evolution tracking over time
|
|
- Indexed by creation time for efficient chronological queries
|
|
"""
|
|
__tablename__ = "prompt_opt_session_history"
|
|
|
|
__table_args__ = (
|
|
Index(
|
|
"ix_prompt_opt_session_history_session_user_created",
|
|
"session_id",
|
|
"user_id",
|
|
"created_at"
|
|
),
|
|
)
|
|
|
|
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, index=True)
|
|
tenant_id = Column(UUID(as_uuid=True), ForeignKey("tenants.id"), nullable=False, comment="Tenant ID")
|
|
# app_id = Column(UUID(as_uuid=True), ForeignKey("apps.id"), nullable=False, comment="Application ID")
|
|
session_id = Column(
|
|
UUID(as_uuid=True),
|
|
ForeignKey("prompt_opt_session_list.id"),
|
|
nullable=False,
|
|
comment="Session ID"
|
|
)
|
|
user_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False, comment="User ID")
|
|
role = Column(String, nullable=False, comment="Message Role")
|
|
content = Column(Text, nullable=False, comment="Message Content")
|
|
# prompt = Column(Text, nullable=False, comment="Prompt")
|
|
|
|
created_at = Column(DateTime, default=datetime.datetime.now, comment="Creation Time", index=True)
|
|
|
|
|
|
class PromptHistory(Base):
|
|
__tablename__ = "prompt_history"
|
|
|
|
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, index=True)
|
|
tenant_id = Column(UUID(as_uuid=True), ForeignKey("tenants.id"), nullable=False, comment="Tenant ID")
|
|
|
|
session_id = Column(
|
|
UUID(as_uuid=True),
|
|
ForeignKey("prompt_opt_session_list.id"),
|
|
nullable=False,
|
|
comment="Session ID"
|
|
)
|
|
title = Column(String, nullable=False, comment="Title")
|
|
prompt = Column(Text, nullable=False, comment="Prompt")
|
|
created_at = Column(DateTime, default=datetime.datetime.now, comment="Creation Time", index=True)
|
|
is_delete = Column(Boolean, default=False, comment="Delete")
|