From aed243c3aa0dd6d6c7dcba088304170f9d5cb696 Mon Sep 17 00:00:00 2001 From: sigoden Date: Sun, 10 Mar 2024 08:01:54 +0800 Subject: feat: allow use of temporary role in a session (#348) --- src/config/mod.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'src/config/mod.rs') diff --git a/src/config/mod.rs b/src/config/mod.rs index 65b573a..4ee5319 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -2,7 +2,7 @@ mod input; mod role; mod session; -pub use self::input::Input; +pub use self::input::{Input, InputContext}; use self::role::Role; use self::session::{Session, TEMP_SESSION_NAME}; @@ -226,7 +226,7 @@ impl Config { return Ok(()); } - if let Some(session) = self.session.as_mut() { + if let Some(session) = input.session_mut(&mut self.session) { session.add_message(&input, output)?; return Ok(()); } @@ -241,7 +241,7 @@ impl Config { let timestamp = now(); let summary = input.summary(); let input_markdown = input.render(); - let output = match self.role.as_ref() { + let output = match input.role() { None => { format!("# CHAT: {summary} [{timestamp}]\n{input_markdown}\n--------\n{output}\n--------\n\n",) } @@ -369,9 +369,9 @@ impl Config { } pub fn echo_messages(&self, input: &Input) -> String { - if let Some(session) = self.session.as_ref() { + if let Some(session) = input.session(&self.session) { session.echo_messages(input) - } else if let Some(role) = self.role.as_ref() { + } else if let Some(role) = input.role() { role.echo_messages(input) } else { input.render() @@ -379,9 +379,9 @@ impl Config { } pub fn build_messages(&self, input: &Input) -> Result> { - let messages = if let Some(session) = self.session.as_ref() { + let messages = if let Some(session) = input.session(&self.session) { session.build_emssages(input) - } else if let Some(role) = self.role.as_ref() { + } else if let Some(role) = input.role() { role.build_messages(input) } else { let message = Message::new(input); @@ -762,6 +762,10 @@ impl Config { }) } + pub fn input_context(&self) -> InputContext { + InputContext::new(self.role.clone(), self.has_session()) + } + pub fn maybe_print_send_tokens(&self, input: &Input) { if self.dry_run { if let Ok(messages) = self.build_messages(input) { -- cgit v1.2.3