feat: first cut at dev brain
This commit is contained in:
40
src/app.rs
40
src/app.rs
@@ -14,7 +14,7 @@ use preferences::PreferenceDraft;
|
||||
#[cfg(test)]
|
||||
use preferences::{parse_optional_gib, parse_streaming_cache};
|
||||
|
||||
use crate::config::{Config, EndpointConfig};
|
||||
use crate::config::{Config, DevBrainConfig, EndpointConfig};
|
||||
use crate::database::{Database, ProjectWithSessions, SessionState, StoredMessage};
|
||||
#[cfg(target_os = "macos")]
|
||||
use crate::engine::ChatTurn;
|
||||
@@ -247,6 +247,7 @@ pub(super) enum DetailTab {
|
||||
pub(super) enum PreferenceSection {
|
||||
Model,
|
||||
Endpoint,
|
||||
DevBrain,
|
||||
Generation,
|
||||
Execution,
|
||||
Acceleration,
|
||||
@@ -255,9 +256,10 @@ pub(super) enum PreferenceSection {
|
||||
}
|
||||
|
||||
impl PreferenceSection {
|
||||
const ALL: [Self; 7] = [
|
||||
const ALL: [Self; 8] = [
|
||||
Self::Model,
|
||||
Self::Endpoint,
|
||||
Self::DevBrain,
|
||||
Self::Generation,
|
||||
Self::Execution,
|
||||
Self::Acceleration,
|
||||
@@ -269,6 +271,7 @@ impl PreferenceSection {
|
||||
match self {
|
||||
Self::Model => "preferences-model",
|
||||
Self::Endpoint => "preferences-endpoint",
|
||||
Self::DevBrain => "preferences-dev-brain",
|
||||
Self::Generation => "preferences-generation",
|
||||
Self::Execution => "preferences-execution",
|
||||
Self::Acceleration => "preferences-acceleration",
|
||||
@@ -281,6 +284,7 @@ impl PreferenceSection {
|
||||
match self {
|
||||
Self::Model => "Model & lifecycle",
|
||||
Self::Endpoint => "Local endpoint",
|
||||
Self::DevBrain => "Dev Brain",
|
||||
Self::Generation => "Generation",
|
||||
Self::Execution => "Execution",
|
||||
Self::Acceleration => "Acceleration & memory",
|
||||
@@ -338,6 +342,10 @@ pub(crate) enum Message {
|
||||
PreferenceEndpointPortChanged(String),
|
||||
PreferenceEndpointEnabledChanged(bool),
|
||||
PreferenceEndpointCorsChanged(bool),
|
||||
PreferenceDevBrainEnabledChanged(bool),
|
||||
PreferenceDevBrainVaultChanged(String),
|
||||
ChooseDevBrainVault,
|
||||
DevBrainVaultPicked(Option<PathBuf>),
|
||||
PreferenceContextChanged(String),
|
||||
PreferenceMaxTokensChanged(String),
|
||||
PreferenceSystemPromptAction(text_editor::Action),
|
||||
@@ -1157,6 +1165,33 @@ impl App {
|
||||
self.preference_draft.endpoint_cors = enabled;
|
||||
self.preference_error = None;
|
||||
}
|
||||
Message::PreferenceDevBrainEnabledChanged(enabled) => {
|
||||
self.preference_draft.dev_brain_enabled = enabled;
|
||||
self.preference_error = None;
|
||||
}
|
||||
Message::PreferenceDevBrainVaultChanged(value) => {
|
||||
self.preference_draft.dev_brain_vault_path = value;
|
||||
self.preference_error = None;
|
||||
}
|
||||
Message::ChooseDevBrainVault => {
|
||||
return Task::perform(
|
||||
async {
|
||||
AsyncFileDialog::new()
|
||||
.set_title("Choose an Obsidian vault")
|
||||
.pick_folder()
|
||||
.await
|
||||
.map(|folder| folder.path().to_path_buf())
|
||||
},
|
||||
Message::DevBrainVaultPicked,
|
||||
);
|
||||
}
|
||||
Message::DevBrainVaultPicked(path) => {
|
||||
if let Some(path) = path {
|
||||
self.preference_draft.dev_brain_vault_path =
|
||||
path.to_string_lossy().into_owned();
|
||||
self.preference_error = None;
|
||||
}
|
||||
}
|
||||
Message::PreferenceContextChanged(value) => {
|
||||
self.preference_draft.context_tokens = value;
|
||||
self.preference_error = None;
|
||||
@@ -1702,6 +1737,7 @@ impl App {
|
||||
self.tokens_per_second = None;
|
||||
}
|
||||
self.reload_projects();
|
||||
self.invalidate_dev_brain_context();
|
||||
self.finish_cache_change();
|
||||
}
|
||||
Err(error) => self.error = Some(error),
|
||||
|
||||
Reference in New Issue
Block a user