diff options
| author | sigoden <sigoden@gmail.com> | 2023-03-09 23:30:12 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-09 23:30:12 +0800 |
| commit | 0044399509dc26df4f0d1d776ca97edc73b041e5 (patch) | |
| tree | b01602d523c3eb0f284a7a98821cb217ea0501c6 /src/config/conversation.rs | |
| parent | ad282ae74c29bb96a213f2d02412f080bc2ce938 (diff) | |
| download | aichat-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.rs | 18 |
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() { |
