Refactor codebase for consistency and readability
- Standardize array and vector formatting for clarity. - Adjust spacing and indentation in examples and TUI code. - Ensure proper newline usage across files (e.g., LICENSE, TOML files, etc.). - Simplify `.to_string()` and `.ok()` calls for brevity.
This commit is contained in:
1
LICENSE
1
LICENSE
@@ -659,4 +659,3 @@ specific requirements.
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
1
PKGBUILD
1
PKGBUILD
@@ -47,4 +47,3 @@ package() {
|
||||
install -Dm644 "$theme" "$pkgdir/usr/share/$pkgname/themes/$(basename $theme)"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
@@ -1171,14 +1171,8 @@ impl ChatApp {
|
||||
let description =
|
||||
if self.controller.config().storage.generate_descriptions {
|
||||
self.status = "Generating description...".to_string();
|
||||
match self
|
||||
.controller
|
||||
.generate_conversation_description()
|
||||
.await
|
||||
{
|
||||
Ok(desc) => Some(desc),
|
||||
Err(_) => None,
|
||||
}
|
||||
(self.controller.generate_conversation_description().await)
|
||||
.ok()
|
||||
} else {
|
||||
None
|
||||
};
|
||||
@@ -1780,7 +1774,7 @@ impl ChatApp {
|
||||
stream,
|
||||
}) => {
|
||||
// Step 3: Model loaded, now generating response
|
||||
self.status = format!("Model loaded. Generating response... (streaming)");
|
||||
self.status = "Model loaded. Generating response... (streaming)".to_string();
|
||||
|
||||
self.spawn_stream(response_id, stream);
|
||||
match self.controller.mark_stream_placeholder(response_id, "▌") {
|
||||
|
||||
@@ -1149,7 +1149,14 @@ fn render_help(frame: &mut Frame<'_>, app: &ChatApp) {
|
||||
frame.render_widget(Clear, area);
|
||||
|
||||
let tab_index = app.help_tab_index();
|
||||
let tabs = vec!["Navigation", "Editing", "Visual", "Commands", "Sessions", "Browsers"];
|
||||
let tabs = [
|
||||
"Navigation",
|
||||
"Editing",
|
||||
"Visual",
|
||||
"Commands",
|
||||
"Sessions",
|
||||
"Browsers",
|
||||
];
|
||||
|
||||
// Build tab line
|
||||
let mut tab_spans = Vec::new();
|
||||
@@ -1284,102 +1291,138 @@ fn render_help(frame: &mut Frame<'_>, app: &ChatApp) {
|
||||
3 => vec![
|
||||
// Commands
|
||||
Line::from(""),
|
||||
Line::from(vec![
|
||||
Span::styled("COMMAND MODE", Style::default().add_modifier(Modifier::BOLD).fg(theme.info))
|
||||
]),
|
||||
Line::from(vec![Span::styled(
|
||||
"COMMAND MODE",
|
||||
Style::default().add_modifier(Modifier::BOLD).fg(theme.info),
|
||||
)]),
|
||||
Line::from(" Press ':' to enter command mode, then type one of:"),
|
||||
Line::from(""),
|
||||
Line::from(vec![
|
||||
Span::styled("KEYBINDINGS", Style::default().add_modifier(Modifier::BOLD).fg(theme.user_message_role))
|
||||
]),
|
||||
Line::from(vec![Span::styled(
|
||||
"KEYBINDINGS",
|
||||
Style::default()
|
||||
.add_modifier(Modifier::BOLD)
|
||||
.fg(theme.user_message_role),
|
||||
)]),
|
||||
Line::from(" Enter → execute command"),
|
||||
Line::from(" Esc → exit command mode"),
|
||||
Line::from(" Tab → autocomplete suggestion"),
|
||||
Line::from(" ↑/↓ → navigate suggestions"),
|
||||
Line::from(" Backspace → delete character"),
|
||||
Line::from(""),
|
||||
Line::from(vec![
|
||||
Span::styled("GENERAL", Style::default().add_modifier(Modifier::BOLD).fg(theme.user_message_role))
|
||||
]),
|
||||
Line::from(vec![Span::styled(
|
||||
"GENERAL",
|
||||
Style::default()
|
||||
.add_modifier(Modifier::BOLD)
|
||||
.fg(theme.user_message_role),
|
||||
)]),
|
||||
Line::from(" :h, :help → show this help"),
|
||||
Line::from(" :q, :quit → quit application"),
|
||||
Line::from(" :reload → reload configuration and themes"),
|
||||
Line::from(""),
|
||||
Line::from(vec![
|
||||
Span::styled("CONVERSATION", Style::default().add_modifier(Modifier::BOLD).fg(theme.user_message_role))
|
||||
]),
|
||||
Line::from(vec![Span::styled(
|
||||
"CONVERSATION",
|
||||
Style::default()
|
||||
.add_modifier(Modifier::BOLD)
|
||||
.fg(theme.user_message_role),
|
||||
)]),
|
||||
Line::from(" :n, :new → start new conversation"),
|
||||
Line::from(" :c, :clear → clear current conversation"),
|
||||
Line::from(""),
|
||||
Line::from(vec![
|
||||
Span::styled("MODEL & THEME", Style::default().add_modifier(Modifier::BOLD).fg(theme.user_message_role))
|
||||
]),
|
||||
Line::from(vec![Span::styled(
|
||||
"MODEL & THEME",
|
||||
Style::default()
|
||||
.add_modifier(Modifier::BOLD)
|
||||
.fg(theme.user_message_role),
|
||||
)]),
|
||||
Line::from(" :m, :model → open model selector"),
|
||||
Line::from(" :themes → open theme selector"),
|
||||
Line::from(" :theme <name> → switch to a specific theme"),
|
||||
Line::from(""),
|
||||
Line::from(vec![
|
||||
Span::styled("SESSION MANAGEMENT", Style::default().add_modifier(Modifier::BOLD).fg(theme.user_message_role))
|
||||
]),
|
||||
Line::from(vec![Span::styled(
|
||||
"SESSION MANAGEMENT",
|
||||
Style::default()
|
||||
.add_modifier(Modifier::BOLD)
|
||||
.fg(theme.user_message_role),
|
||||
)]),
|
||||
Line::from(" :save [name] → save current session (with optional name)"),
|
||||
Line::from(" :w [name] → alias for :save"),
|
||||
Line::from(" :load, :o, :open → browse and load saved sessions"),
|
||||
Line::from(" :sessions, :ls → browse saved sessions"),
|
||||
],
|
||||
4 => vec![ // Sessions
|
||||
4 => vec![
|
||||
// Sessions
|
||||
Line::from(""),
|
||||
Line::from(vec![
|
||||
Span::styled("SESSION MANAGEMENT", Style::default().add_modifier(Modifier::BOLD).fg(theme.info))
|
||||
]),
|
||||
Line::from(vec![Span::styled(
|
||||
"SESSION MANAGEMENT",
|
||||
Style::default().add_modifier(Modifier::BOLD).fg(theme.info),
|
||||
)]),
|
||||
Line::from(""),
|
||||
Line::from(vec![
|
||||
Span::styled("SAVING SESSIONS", Style::default().add_modifier(Modifier::BOLD).fg(theme.user_message_role))
|
||||
]),
|
||||
Line::from(vec![Span::styled(
|
||||
"SAVING SESSIONS",
|
||||
Style::default()
|
||||
.add_modifier(Modifier::BOLD)
|
||||
.fg(theme.user_message_role),
|
||||
)]),
|
||||
Line::from(" :save → save with auto-generated name"),
|
||||
Line::from(" :save my-session → save with custom name"),
|
||||
Line::from(" • AI generates description automatically (configurable)"),
|
||||
Line::from(" • Sessions stored in platform-specific directories"),
|
||||
Line::from(""),
|
||||
Line::from(vec![
|
||||
Span::styled("LOADING SESSIONS", Style::default().add_modifier(Modifier::BOLD).fg(theme.user_message_role))
|
||||
]),
|
||||
Line::from(vec![Span::styled(
|
||||
"LOADING SESSIONS",
|
||||
Style::default()
|
||||
.add_modifier(Modifier::BOLD)
|
||||
.fg(theme.user_message_role),
|
||||
)]),
|
||||
Line::from(" :load, :o, :open → browse and select session"),
|
||||
Line::from(" :sessions, :ls → browse saved sessions"),
|
||||
Line::from(""),
|
||||
Line::from(vec![
|
||||
Span::styled("SESSION BROWSER KEYS", Style::default().add_modifier(Modifier::BOLD).fg(theme.user_message_role))
|
||||
]),
|
||||
Line::from(vec![Span::styled(
|
||||
"SESSION BROWSER KEYS",
|
||||
Style::default()
|
||||
.add_modifier(Modifier::BOLD)
|
||||
.fg(theme.user_message_role),
|
||||
)]),
|
||||
Line::from(" j/k or ↑/↓ → navigate sessions"),
|
||||
Line::from(" Enter → load selected session"),
|
||||
Line::from(" d → delete selected session"),
|
||||
Line::from(" Esc → close browser"),
|
||||
Line::from(""),
|
||||
Line::from(vec![
|
||||
Span::styled("STORAGE LOCATIONS", Style::default().add_modifier(Modifier::BOLD).fg(theme.user_message_role))
|
||||
]),
|
||||
Line::from(vec![Span::styled(
|
||||
"STORAGE LOCATIONS",
|
||||
Style::default()
|
||||
.add_modifier(Modifier::BOLD)
|
||||
.fg(theme.user_message_role),
|
||||
)]),
|
||||
Line::from(" Linux → ~/.local/share/owlen/sessions"),
|
||||
Line::from(" Windows → %APPDATA%\\owlen\\sessions"),
|
||||
Line::from(" macOS → ~/Library/Application Support/owlen/sessions"),
|
||||
Line::from(""),
|
||||
Line::from(vec![
|
||||
Span::styled("CONTEXT PRESERVATION", Style::default().add_modifier(Modifier::BOLD).fg(theme.assistant_message_role))
|
||||
]),
|
||||
Line::from(vec![Span::styled(
|
||||
"CONTEXT PRESERVATION",
|
||||
Style::default()
|
||||
.add_modifier(Modifier::BOLD)
|
||||
.fg(theme.assistant_message_role),
|
||||
)]),
|
||||
Line::from(" • Full conversation history is preserved when saving"),
|
||||
Line::from(" • All context is restored when loading a session"),
|
||||
Line::from(" • Continue conversations seamlessly across restarts"),
|
||||
],
|
||||
5 => vec![ // Browsers
|
||||
5 => vec![
|
||||
// Browsers
|
||||
Line::from(""),
|
||||
Line::from(vec![
|
||||
Span::styled("PROVIDER & MODEL BROWSERS", Style::default().add_modifier(Modifier::BOLD).fg(theme.info))
|
||||
]),
|
||||
Line::from(vec![Span::styled(
|
||||
"PROVIDER & MODEL BROWSERS",
|
||||
Style::default().add_modifier(Modifier::BOLD).fg(theme.info),
|
||||
)]),
|
||||
Line::from(" Enter → select item"),
|
||||
Line::from(" Esc → close browser"),
|
||||
Line::from(" ↑/↓ or j/k → navigate items"),
|
||||
Line::from(""),
|
||||
Line::from(vec![
|
||||
Span::styled("THEME BROWSER", Style::default().add_modifier(Modifier::BOLD).fg(theme.info))
|
||||
]),
|
||||
Line::from(vec![Span::styled(
|
||||
"THEME BROWSER",
|
||||
Style::default().add_modifier(Modifier::BOLD).fg(theme.info),
|
||||
)]),
|
||||
Line::from(" Enter → apply theme"),
|
||||
Line::from(" Esc / q → close browser"),
|
||||
Line::from(" ↑/↓ or j/k → navigate themes"),
|
||||
@@ -1430,7 +1473,12 @@ fn render_help(frame: &mut Frame<'_>, app: &ChatApp) {
|
||||
.add_modifier(Modifier::BOLD),
|
||||
),
|
||||
Span::raw(":Switch "),
|
||||
Span::styled("1-6", Style::default().fg(theme.focused_panel_border).add_modifier(Modifier::BOLD)),
|
||||
Span::styled(
|
||||
"1-6",
|
||||
Style::default()
|
||||
.fg(theme.focused_panel_border)
|
||||
.add_modifier(Modifier::BOLD),
|
||||
),
|
||||
Span::raw(":Jump "),
|
||||
Span::styled(
|
||||
"Esc/q",
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// This example demonstrates a basic chat interaction without the TUI.
|
||||
|
||||
use owlen_core::model::Model;
|
||||
use owlen_core::provider::Provider;
|
||||
use owlen_core::session::Session;
|
||||
use owlen_ollama::OllamaProvider; // Assuming you have an Ollama provider
|
||||
use owlen_core::provider::Provider;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), anyhow::Error> {
|
||||
|
||||
@@ -16,10 +16,16 @@ impl Provider for MyCustomProvider {
|
||||
}
|
||||
|
||||
async fn chat(&self, session: &Session, model: &Model) -> Result<String, anyhow::Error> {
|
||||
println!("Custom provider received chat request for model: {}", model.name);
|
||||
println!(
|
||||
"Custom provider received chat request for model: {}",
|
||||
model.name
|
||||
);
|
||||
// In a real implementation, you would send the session data to an API.
|
||||
let message_count = session.get_messages().len();
|
||||
Ok(format!("This is a custom response. You have {} messages in your session.", message_count))
|
||||
Ok(format!(
|
||||
"This is a custom response. You have {} messages in your session.",
|
||||
message_count
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@ fn main() {
|
||||
println!("\nSession cleared.");
|
||||
|
||||
let messages_after_clear = session.get_messages();
|
||||
println!("Messages in session after clear: {}", messages_after_clear.len());
|
||||
println!(
|
||||
"Messages in session after clear: {}",
|
||||
messages_after_clear.len()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user