feat: temporarily use a role to send a message (#227)

pull/230/head
sigoden 7 months ago committed by GitHub
parent c256b6bae5
commit c99bd015aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -170,6 +170,7 @@ wrap no
wrap_code false
dry_run false
keybindings emacs
prelude -
config_file /home/alice/.config/aichat/config.yaml
roles_file /home/alice/.config/aichat/roles.yaml
messages_file /home/alice/.config/aichat/messages.md
@ -218,6 +219,16 @@ prompt: I want you to translate the sentences I write into emojis. I will write
temperature: null
```
Temporarily use a role to send a message.
```
〉""" .role emoji
hello world
"""
👋🌍
```
### `.session` - context-aware conversation
By default, aichat behaves in a one-off request/response manner.

@ -344,7 +344,7 @@ impl Config {
}
pub fn sys_info(&self) -> Result<String> {
let path_info = |path: &Path| {
let display_path = |path: &Path| {
let state = if path.exists() { "" } else { " ⚠️" };
format!("{}{state}", path.display())
};
@ -355,6 +355,11 @@ impl Config {
.wrap
.clone()
.map_or_else(|| String::from("no"), |v| v.to_string());
let prelude = if self.prelude.is_empty() {
String::from("-")
} else {
self.prelude.clone()
};
let items = vec![
("model", self.model.id()),
("temperature", temperature),
@ -365,10 +370,11 @@ impl Config {
("wrap_code", self.wrap_code.to_string()),
("light_theme", self.light_theme.to_string()),
("keybindings", self.keybindings.stringify().into()),
("config_file", path_info(&Self::config_file()?)),
("roles_file", path_info(&Self::roles_file()?)),
("messages_file", path_info(&Self::messages_file()?)),
("sessions_dir", path_info(&Self::sessions_dir()?)),
("prelude", prelude),
("config_file", display_path(&Self::config_file()?)),
("roles_file", display_path(&Self::roles_file()?)),
("messages_file", display_path(&Self::messages_file()?)),
("sessions_dir", display_path(&Self::sessions_dir()?)),
];
let output = items
.iter()

@ -153,10 +153,24 @@ impl Repl {
None => println!("Usage: .model <name>"),
},
".role" => match args {
Some(name) => {
self.config.write().set_role(name)?;
}
None => println!("Usage: .role <name>"),
Some(args) => match args.split_once(|c| c == '\n' || c == ' ') {
Some((name, text)) => {
let name = name.trim();
let text = text.trim();
let old_role =
self.config.read().role.as_ref().map(|v| v.name.to_string());
self.config.write().set_role(name)?;
self.ask(text)?;
match old_role {
Some(old_role) => self.config.write().set_role(&old_role)?,
None => self.config.write().clear_role()?,
}
}
None => {
self.config.write().set_role(args)?;
}
},
None => println!(r#"Usage: .role <name> [text...]"#),
},
".session" => {
self.config.write().start_session(args)?;

Loading…
Cancel
Save