#[cfg(feature = "pisovereign")]
pub use domain::Conversation;
#[cfg(feature = "pisovereign")]
pub use domain::entities::{ChatMessage, MessageRole};
#[cfg(feature = "pisovereign")]
pub use domain::entities::{ParameterProperty, ToolDefinition, ToolParameters};
#[cfg(not(feature = "pisovereign"))]
mod standalone {
use std::collections::HashMap;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum MessageRole {
User,
Assistant,
System,
Tool,
}
#[derive(Debug, Clone)]
pub struct ChatMessage {
pub role: MessageRole,
pub content: String,
}
impl ChatMessage {
#[must_use]
pub fn user(content: impl Into<String>) -> Self {
Self {
role: MessageRole::User,
content: content.into(),
}
}
#[must_use]
pub fn assistant(content: impl Into<String>) -> Self {
Self {
role: MessageRole::Assistant,
content: content.into(),
}
}
#[must_use]
pub fn system(content: impl Into<String>) -> Self {
Self {
role: MessageRole::System,
content: content.into(),
}
}
#[must_use]
pub fn tool(content: impl Into<String>) -> Self {
Self {
role: MessageRole::Tool,
content: content.into(),
}
}
}
#[derive(Debug, Clone, Default)]
pub struct Conversation {
pub system_prompt: Option<String>,
pub messages: Vec<ChatMessage>,
pub summary: Option<String>,
pub cached_prompt_tokens: Option<u32>,
}
impl Conversation {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn with_system_prompt(prompt: impl Into<String>) -> Self {
Self {
system_prompt: Some(prompt.into()),
..Self::default()
}
}
pub fn add_user_message(&mut self, content: impl Into<String>) {
self.messages.push(ChatMessage::user(content));
}
pub fn add_assistant_message(&mut self, content: impl Into<String>) {
self.messages.push(ChatMessage::assistant(content));
}
}
#[derive(Debug, Clone)]
pub struct ToolDefinition {
pub name: String,
pub description: String,
pub parameters: ToolParameters,
pub icon: Option<String>,
}
#[derive(Debug, Clone)]
pub struct ToolParameters {
pub schema_type: String,
pub properties: HashMap<String, ParameterProperty>,
pub required: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct ParameterProperty {
pub param_type: String,
pub description: String,
pub enum_values: Vec<String>,
}
}
#[cfg(not(feature = "pisovereign"))]
pub use standalone::*;
#[derive(Debug, Clone)]
pub struct OptimizedPrompt {
pub text: String,
pub recommended_max_tokens: Option<u32>,
pub tokens_estimated: u32,
pub strategies_applied: Vec<String>,
pub metadata: OptimizationMetadata,
}
#[derive(Debug, Clone)]
pub struct OptimizationMetadata {
pub tokens_before: u32,
pub tokens_after: u32,
pub reduction_ratio: f32,
pub complexity: Option<crate::output::complexity::QueryComplexity>,
}