summaryrefslogtreecommitdiffstats
path: root/src/config/conversation.rs
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2023-03-09 23:30:12 +0800
committerGitHub <noreply@github.com>2023-03-09 23:30:12 +0800
commit0044399509dc26df4f0d1d776ca97edc73b041e5 (patch)
treeb01602d523c3eb0f284a7a98821cb217ea0501c6 /src/config/conversation.rs
parentad282ae74c29bb96a213f2d02412f080bc2ce938 (diff)
downloadaichat-0044399509dc26df4f0d1d776ca97edc73b041e5.tar.gz
feat: add config.conversation_first (#55)
If set true, start a conversation immediately upon repl.
Diffstat (limited to 'src/config/conversation.rs')
-rw-r--r--src/config/conversation.rs18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/config/conversation.rs b/src/config/conversation.rs
index 4472781..7fe843d 100644
--- a/src/config/conversation.rs
+++ b/src/config/conversation.rs
@@ -2,7 +2,7 @@ use super::message::{num_tokens_from_messages, Message, MessageRole};
use super::role::Role;
use super::MAX_TOKENS;
-use anyhow::Result;
+use anyhow::{bail, Result};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
@@ -19,10 +19,24 @@ impl Conversation {
role,
messages: vec![],
};
- value.tokens = num_tokens_from_messages(&value.build_emssages(""));
+ value.update_tokens();
value
}
+ pub fn update_role(&mut self, role: &Role) -> Result<()> {
+ if self.messages.is_empty() {
+ self.role = Some(role.clone());
+ self.update_tokens();
+ } else {
+ bail!("Error: Cannot perform this action in the middle of conversation")
+ }
+ Ok(())
+ }
+
+ pub fn update_tokens(&mut self) {
+ self.tokens = num_tokens_from_messages(&self.build_emssages(""));
+ }
+
pub fn add_message(&mut self, input: &str, output: &str) -> Result<()> {
let mut need_add_msg = true;
if self.messages.is_empty() {