Files
Genarrative/server-rs/crates/module-creative-agent/src/domain.rs
2026-05-08 11:44:42 +08:00

188 lines
5.8 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//! 创意互动 Agent 领域模型。
//!
//! 本 crate 只描述会话、阶段、消息和目标绑定的纯领域事实LLM、SSE、
//! 图片生成和 SpacetimeDB 写表均留在外层 adapter。
use serde::{Deserialize, Serialize};
#[cfg(feature = "spacetime-types")]
use spacetimedb::SpacetimeType;
pub const CREATIVE_AGENT_SESSION_ID_PREFIX: &str = "creative-session-";
pub const CREATIVE_AGENT_MESSAGE_ID_PREFIX: &str = "creative-message-";
pub const CREATIVE_AGENT_BINDING_ID_PREFIX: &str = "creative-binding-";
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum CreativeAgentStage {
Idle,
Perceiving,
Thinking,
Remembering,
SelectingPuzzleTemplate,
WaitingTemplateConfirmation,
PlanningPuzzleLevels,
Acting,
Reflecting,
Collaborating,
TargetReady,
WaitingUser,
Failed,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum CreativeAgentMessageRole {
User,
Assistant,
System,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum CreativeAgentMessageKind {
Chat,
Stage,
ActionResult,
Warning,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum CreativeTargetPlayType {
Puzzle,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum CreativeTargetStage {
PuzzleAgentWorkspace,
PuzzleResult,
PuzzleRuntime,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct CreativeInputImageSnapshot {
pub asset_id: Option<String>,
pub read_url: Option<String>,
pub thumbnail_url: Option<String>,
pub width: Option<u32>,
pub height: Option<u32>,
pub summary: Option<String>,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct CreativeInputSummarySnapshot {
pub text: Option<String>,
pub entry_context: String,
pub images: Vec<CreativeInputImageSnapshot>,
pub material_summary: Option<String>,
pub unsupported_capabilities_json: String,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct CreativeAgentMessageSnapshot {
pub message_id: String,
pub session_id: String,
pub role: CreativeAgentMessageRole,
pub kind: CreativeAgentMessageKind,
pub text: String,
pub created_at_micros: i64,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct CreativeAgentTargetBindingSnapshot {
pub binding_id: String,
pub session_id: String,
pub play_type: CreativeTargetPlayType,
pub target_session_id: String,
pub target_stage: CreativeTargetStage,
pub result_profile_id: Option<String>,
pub created_at_micros: i64,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct CreativeAgentSessionSnapshot {
pub session_id: String,
pub owner_user_id: String,
pub stage: CreativeAgentStage,
pub input_summary: CreativeInputSummarySnapshot,
pub messages: Vec<CreativeAgentMessageSnapshot>,
pub puzzle_template_selection_json: Option<String>,
pub puzzle_image_generation_plan_json: Option<String>,
pub target_binding: Option<CreativeAgentTargetBindingSnapshot>,
pub created_at_micros: i64,
pub updated_at_micros: i64,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct CreativeAgentSessionProcedureResult {
pub ok: bool,
pub session_json: Option<String>,
pub error_message: Option<String>,
}
impl CreativeAgentStage {
pub fn as_str(self) -> &'static str {
match self {
Self::Idle => "idle",
Self::Perceiving => "perceiving",
Self::Thinking => "thinking",
Self::Remembering => "remembering",
Self::SelectingPuzzleTemplate => "selecting_puzzle_template",
Self::WaitingTemplateConfirmation => "waiting_template_confirmation",
Self::PlanningPuzzleLevels => "planning_puzzle_levels",
Self::Acting => "acting",
Self::Reflecting => "reflecting",
Self::Collaborating => "collaborating",
Self::TargetReady => "target_ready",
Self::WaitingUser => "waiting_user",
Self::Failed => "failed",
}
}
}
impl CreativeAgentMessageRole {
pub fn as_str(self) -> &'static str {
match self {
Self::User => "user",
Self::Assistant => "assistant",
Self::System => "system",
}
}
}
impl CreativeAgentMessageKind {
pub fn as_str(self) -> &'static str {
match self {
Self::Chat => "chat",
Self::Stage => "stage",
Self::ActionResult => "action_result",
Self::Warning => "warning",
}
}
}
impl CreativeTargetPlayType {
pub fn as_str(self) -> &'static str {
match self {
Self::Puzzle => "puzzle",
}
}
}
impl CreativeTargetStage {
pub fn as_str(self) -> &'static str {
match self {
Self::PuzzleAgentWorkspace => "puzzle-agent-workspace",
Self::PuzzleResult => "puzzle-result",
Self::PuzzleRuntime => "puzzle-runtime",
}
}
}