Refactor application and runtime boundaries
This commit is contained in:
178
src/database.rs
178
src/database.rs
@@ -147,6 +147,54 @@ struct NewMessage<'a> {
|
||||
compaction_tail_start: Option<i32>,
|
||||
}
|
||||
|
||||
impl<'a> NewMessage<'a> {
|
||||
fn system(session_id: i32, content: &'a str) -> Self {
|
||||
Self::new(session_id, content, false, false, true)
|
||||
}
|
||||
|
||||
fn user(session_id: i32, content: &'a str, model_content: Option<&'a str>) -> Self {
|
||||
Self {
|
||||
model_content,
|
||||
..Self::new(session_id, content, true, false, false)
|
||||
}
|
||||
}
|
||||
|
||||
fn tool_result(session_id: i32, content: &'a str) -> Self {
|
||||
Self::new(session_id, content, false, true, false)
|
||||
}
|
||||
|
||||
fn assistant(session_id: i32, reasoning: bool) -> Self {
|
||||
Self {
|
||||
reasoning: reasoning.then_some(""),
|
||||
reasoning_complete: !reasoning,
|
||||
..Self::new(session_id, "", false, false, false)
|
||||
}
|
||||
}
|
||||
|
||||
fn compaction(session_id: i32, content: &'a str, tail_start: Option<i32>) -> Self {
|
||||
Self {
|
||||
compaction: true,
|
||||
compaction_tail_start: tail_start,
|
||||
..Self::system(session_id, content)
|
||||
}
|
||||
}
|
||||
|
||||
fn new(session_id: i32, content: &'a str, user: bool, tool: bool, system: bool) -> Self {
|
||||
Self {
|
||||
session_id,
|
||||
user,
|
||||
tool,
|
||||
reasoning: None,
|
||||
reasoning_complete: true,
|
||||
content,
|
||||
model_content: None,
|
||||
system,
|
||||
compaction: false,
|
||||
compaction_tail_start: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Identifiable, Queryable, Selectable)]
|
||||
#[diesel(table_name = a2ui_messages)]
|
||||
#[diesel(check_for_backend(diesel::sqlite::Sqlite))]
|
||||
@@ -388,18 +436,7 @@ impl Database {
|
||||
self.connection
|
||||
.transaction(|connection| {
|
||||
let message = diesel::insert_into(messages::table)
|
||||
.values(NewMessage {
|
||||
session_id,
|
||||
user: false,
|
||||
tool: false,
|
||||
reasoning: None,
|
||||
reasoning_complete: true,
|
||||
content: &content,
|
||||
model_content: None,
|
||||
system: true,
|
||||
compaction: false,
|
||||
compaction_tail_start: None,
|
||||
})
|
||||
.values(NewMessage::system(session_id, &content))
|
||||
.returning(StoredMessage::as_returning())
|
||||
.get_result(connection)?;
|
||||
diesel::insert_into(a2ui_messages::table)
|
||||
@@ -454,50 +491,17 @@ impl Database {
|
||||
for content in system_messages {
|
||||
stored.push(
|
||||
diesel::insert_into(messages::table)
|
||||
.values(NewMessage {
|
||||
session_id,
|
||||
user: false,
|
||||
tool: false,
|
||||
reasoning: None,
|
||||
reasoning_complete: true,
|
||||
content,
|
||||
model_content: None,
|
||||
system: true,
|
||||
compaction: false,
|
||||
compaction_tail_start: None,
|
||||
})
|
||||
.values(NewMessage::system(session_id, content))
|
||||
.returning(StoredMessage::as_returning())
|
||||
.get_result(connection)?,
|
||||
);
|
||||
}
|
||||
let user = diesel::insert_into(messages::table)
|
||||
.values(NewMessage {
|
||||
session_id,
|
||||
user: true,
|
||||
tool: false,
|
||||
reasoning: None,
|
||||
reasoning_complete: true,
|
||||
content: prompt,
|
||||
model_content: model_prompt,
|
||||
system: false,
|
||||
compaction: false,
|
||||
compaction_tail_start: None,
|
||||
})
|
||||
.values(NewMessage::user(session_id, prompt, model_prompt))
|
||||
.returning(StoredMessage::as_returning())
|
||||
.get_result(connection)?;
|
||||
let assistant = diesel::insert_into(messages::table)
|
||||
.values(NewMessage {
|
||||
session_id,
|
||||
user: false,
|
||||
tool: false,
|
||||
reasoning: reasoning.then_some(""),
|
||||
reasoning_complete: !reasoning,
|
||||
content: "",
|
||||
model_content: None,
|
||||
system: false,
|
||||
compaction: false,
|
||||
compaction_tail_start: None,
|
||||
})
|
||||
.values(NewMessage::assistant(session_id, reasoning))
|
||||
.returning(StoredMessage::as_returning())
|
||||
.get_result(connection)?;
|
||||
stored.extend([user, assistant]);
|
||||
@@ -520,36 +524,14 @@ impl Database {
|
||||
let mut stored = Vec::with_capacity(system_messages.len() + 3);
|
||||
stored.push(
|
||||
diesel::insert_into(messages::table)
|
||||
.values(NewMessage {
|
||||
session_id,
|
||||
user: false,
|
||||
tool: true,
|
||||
reasoning: None,
|
||||
reasoning_complete: true,
|
||||
content: result,
|
||||
model_content: None,
|
||||
system: false,
|
||||
compaction: false,
|
||||
compaction_tail_start: None,
|
||||
})
|
||||
.values(NewMessage::tool_result(session_id, result))
|
||||
.returning(StoredMessage::as_returning())
|
||||
.get_result(connection)?,
|
||||
);
|
||||
if let Some(content) = queued_user {
|
||||
stored.push(
|
||||
diesel::insert_into(messages::table)
|
||||
.values(NewMessage {
|
||||
session_id,
|
||||
user: true,
|
||||
tool: false,
|
||||
reasoning: None,
|
||||
reasoning_complete: true,
|
||||
content,
|
||||
model_content: None,
|
||||
system: false,
|
||||
compaction: false,
|
||||
compaction_tail_start: None,
|
||||
})
|
||||
.values(NewMessage::user(session_id, content, None))
|
||||
.returning(StoredMessage::as_returning())
|
||||
.get_result(connection)?,
|
||||
);
|
||||
@@ -557,35 +539,13 @@ impl Database {
|
||||
for content in system_messages {
|
||||
stored.push(
|
||||
diesel::insert_into(messages::table)
|
||||
.values(NewMessage {
|
||||
session_id,
|
||||
user: false,
|
||||
tool: false,
|
||||
reasoning: None,
|
||||
reasoning_complete: true,
|
||||
content,
|
||||
model_content: None,
|
||||
system: true,
|
||||
compaction: false,
|
||||
compaction_tail_start: None,
|
||||
})
|
||||
.values(NewMessage::system(session_id, content))
|
||||
.returning(StoredMessage::as_returning())
|
||||
.get_result(connection)?,
|
||||
);
|
||||
}
|
||||
let assistant = diesel::insert_into(messages::table)
|
||||
.values(NewMessage {
|
||||
session_id,
|
||||
user: false,
|
||||
tool: false,
|
||||
reasoning: reasoning.then_some(""),
|
||||
reasoning_complete: !reasoning,
|
||||
content: "",
|
||||
model_content: None,
|
||||
system: false,
|
||||
compaction: false,
|
||||
compaction_tail_start: None,
|
||||
})
|
||||
.values(NewMessage::assistant(session_id, reasoning))
|
||||
.returning(StoredMessage::as_returning())
|
||||
.get_result(connection)?;
|
||||
stored.push(assistant);
|
||||
@@ -667,36 +627,14 @@ impl Database {
|
||||
let mut stored = Vec::with_capacity(2);
|
||||
stored.push(
|
||||
diesel::insert_into(messages::table)
|
||||
.values(NewMessage {
|
||||
session_id,
|
||||
user: false,
|
||||
tool: false,
|
||||
reasoning: None,
|
||||
reasoning_complete: true,
|
||||
content: summary,
|
||||
model_content: None,
|
||||
system: true,
|
||||
compaction: true,
|
||||
compaction_tail_start: tail_start,
|
||||
})
|
||||
.values(NewMessage::compaction(session_id, summary, tail_start))
|
||||
.returning(StoredMessage::as_returning())
|
||||
.get_result(connection)?,
|
||||
);
|
||||
if let Some(content) = running_jobs {
|
||||
stored.push(
|
||||
diesel::insert_into(messages::table)
|
||||
.values(NewMessage {
|
||||
session_id,
|
||||
user: false,
|
||||
tool: true,
|
||||
reasoning: None,
|
||||
reasoning_complete: true,
|
||||
content,
|
||||
model_content: None,
|
||||
system: false,
|
||||
compaction: false,
|
||||
compaction_tail_start: None,
|
||||
})
|
||||
.values(NewMessage::tool_result(session_id, content))
|
||||
.returning(StoredMessage::as_returning())
|
||||
.get_result(connection)?,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user