checkpoint(Saved system prompt presets)
This commit is contained in:
@@ -24,6 +24,7 @@ from src import session_logger
|
||||
from src import project_manager
|
||||
from src import performance_monitor
|
||||
from src import models
|
||||
from src import presets
|
||||
from src.file_cache import ASTParser
|
||||
from src import ai_client
|
||||
from src import shell_runner
|
||||
@@ -297,6 +298,13 @@ class AppController:
|
||||
self._inject_mode: str = "skeleton"
|
||||
self._inject_preview: str = ""
|
||||
self._show_inject_modal: bool = False
|
||||
self.show_preset_manager_modal: bool = False
|
||||
self._editing_preset_name: str = ""
|
||||
self._editing_preset_content: str = ""
|
||||
self._editing_preset_temperature: float = 0.0
|
||||
self._editing_preset_top_p: float = 0.0
|
||||
self._editing_preset_max_output_tokens: int = 4096
|
||||
self._editing_preset_scope: str = "project"
|
||||
self.diagnostic_log: List[Dict[str, Any]] = []
|
||||
self._settable_fields: Dict[str, str] = {
|
||||
'ai_input': 'ui_ai_input',
|
||||
@@ -322,10 +330,19 @@ class AppController:
|
||||
'ui_new_track_name': 'ui_new_track_name',
|
||||
'ui_new_track_desc': 'ui_new_track_desc',
|
||||
'manual_approve': 'ui_manual_approve',
|
||||
'inject_file_path': '_inject_file_path',
|
||||
'inject_mode': '_inject_mode',
|
||||
'show_inject_modal': '_show_inject_modal',
|
||||
'bg_shader_enabled': 'bg_shader_enabled'
|
||||
'global_system_prompt': 'ui_global_system_prompt',
|
||||
'project_system_prompt': 'ui_project_system_prompt',
|
||||
'global_preset_name': 'ui_global_preset_name',
|
||||
'project_preset_name': 'ui_project_preset_name',
|
||||
'temperature': 'temperature',
|
||||
'max_tokens': 'max_tokens',
|
||||
'show_preset_manager_modal': 'show_preset_manager_modal',
|
||||
'_editing_preset_name': '_editing_preset_name',
|
||||
'_editing_preset_content': '_editing_preset_content',
|
||||
'_editing_preset_temperature': '_editing_preset_temperature',
|
||||
'_editing_preset_top_p': '_editing_preset_top_p',
|
||||
'_editing_preset_max_output_tokens': '_editing_preset_max_output_tokens',
|
||||
'_editing_preset_scope': '_editing_preset_scope'
|
||||
}
|
||||
self._gettable_fields = dict(self._settable_fields)
|
||||
self._gettable_fields.update({
|
||||
@@ -348,7 +365,20 @@ class AppController:
|
||||
'_inject_mode': '_inject_mode',
|
||||
'_inject_preview': '_inject_preview',
|
||||
'_show_inject_modal': '_show_inject_modal',
|
||||
'bg_shader_enabled': 'bg_shader_enabled'
|
||||
'bg_shader_enabled': 'bg_shader_enabled',
|
||||
'global_system_prompt': 'ui_global_system_prompt',
|
||||
'project_system_prompt': 'ui_project_system_prompt',
|
||||
'global_preset_name': 'ui_global_preset_name',
|
||||
'project_preset_name': 'ui_project_preset_name',
|
||||
'temperature': 'temperature',
|
||||
'max_tokens': 'max_tokens',
|
||||
'show_preset_manager_modal': 'show_preset_manager_modal',
|
||||
'_editing_preset_name': '_editing_preset_name',
|
||||
'_editing_preset_content': '_editing_preset_content',
|
||||
'_editing_preset_temperature': '_editing_preset_temperature',
|
||||
'_editing_preset_top_p': '_editing_preset_top_p',
|
||||
'_editing_preset_max_output_tokens': '_editing_preset_max_output_tokens',
|
||||
'_editing_preset_scope': '_editing_preset_scope'
|
||||
})
|
||||
self.perf_monitor = performance_monitor.get_monitor()
|
||||
self._perf_profiling_enabled = False
|
||||
@@ -423,7 +453,10 @@ class AppController:
|
||||
}
|
||||
self._predefined_callbacks: dict[str, Callable[..., Any]] = {
|
||||
'_test_callback_func_write_to_file': self._test_callback_func_write_to_file,
|
||||
'_set_env_var': lambda k, v: os.environ.update({k: v})
|
||||
'_set_env_var': lambda k, v: os.environ.update({k: v}),
|
||||
'_apply_preset': self._apply_preset,
|
||||
'_switch_project': self._switch_project,
|
||||
'_refresh_from_project': self._refresh_from_project
|
||||
}
|
||||
|
||||
def _update_gcli_adapter(self, path: str) -> None:
|
||||
@@ -787,6 +820,11 @@ class AppController:
|
||||
self.ui_auto_add_history = disc_sec.get("auto_add", False)
|
||||
self.ui_global_system_prompt = self.config.get("ai", {}).get("system_prompt", "")
|
||||
|
||||
self.preset_manager = presets.PresetManager(Path(self.active_project_path) if self.active_project_path else None)
|
||||
self.presets = self.preset_manager.load_all()
|
||||
self.ui_global_preset_name = ai_cfg.get("active_preset")
|
||||
self.ui_project_preset_name = proj_meta.get("active_preset")
|
||||
|
||||
gui_cfg = self.config.get("gui", {})
|
||||
from src import bg_shader
|
||||
bg_shader.get_bg().enabled = gui_cfg.get("bg_shader_enabled", False)
|
||||
@@ -1689,6 +1727,7 @@ class AppController:
|
||||
self.ui_project_git_dir = proj_meta.get("git_dir", "")
|
||||
self.ui_project_system_prompt = proj_meta.get("system_prompt", "")
|
||||
self.ui_project_main_context = proj_meta.get("main_context", "")
|
||||
self.ui_project_preset_name = proj_meta.get("active_preset")
|
||||
self.ui_gemini_cli_path = self.project.get("gemini_cli", {}).get("binary_path", "gemini")
|
||||
self.ui_auto_add_history = proj.get("discussion", {}).get("auto_add", False)
|
||||
self.ui_auto_scroll_comms = proj.get("project", {}).get("auto_scroll_comms", True)
|
||||
@@ -1726,6 +1765,30 @@ class AppController:
|
||||
if track_history:
|
||||
with self._disc_entries_lock:
|
||||
self.disc_entries = models.parse_history_entries(track_history, self.disc_roles)
|
||||
|
||||
self.preset_manager.project_root = Path(self.ui_files_base_dir)
|
||||
self.presets = self.preset_manager.load_all()
|
||||
|
||||
def _apply_preset(self, name: str, scope: str) -> None:
|
||||
if name == "None":
|
||||
if scope == "global":
|
||||
self.ui_global_preset_name = ""
|
||||
else:
|
||||
self.ui_project_preset_name = ""
|
||||
return
|
||||
preset = self.presets.get(name)
|
||||
if not preset:
|
||||
return
|
||||
if scope == "global":
|
||||
self.ui_global_system_prompt = preset.system_prompt
|
||||
self.ui_global_preset_name = name
|
||||
else:
|
||||
self.ui_project_system_prompt = preset.system_prompt
|
||||
self.ui_project_preset_name = name
|
||||
if preset.temperature is not None:
|
||||
self.temperature = preset.temperature
|
||||
if preset.max_output_tokens is not None:
|
||||
self.max_tokens = preset.max_output_tokens
|
||||
|
||||
def _cb_load_track(self, track_id: str) -> None:
|
||||
state = project_manager.load_track_state(track_id, self.ui_files_base_dir)
|
||||
@@ -2053,6 +2116,7 @@ class AppController:
|
||||
proj["project"]["git_dir"] = self.ui_project_git_dir
|
||||
proj["project"]["system_prompt"] = self.ui_project_system_prompt
|
||||
proj["project"]["main_context"] = self.ui_project_main_context
|
||||
proj["project"]["active_preset"] = self.ui_project_preset_name
|
||||
proj["project"]["word_wrap"] = self.ui_word_wrap
|
||||
proj["project"]["summary_only"] = self.ui_summary_only
|
||||
proj["project"]["auto_scroll_comms"] = self.ui_auto_scroll_comms
|
||||
@@ -2082,6 +2146,7 @@ class AppController:
|
||||
"temperature": self.temperature,
|
||||
"max_tokens": self.max_tokens,
|
||||
"history_trunc_limit": self.history_trunc_limit,
|
||||
"active_preset": self.ui_global_preset_name,
|
||||
}
|
||||
self.config["ai"]["system_prompt"] = self.ui_global_system_prompt
|
||||
self.config["projects"] = {"paths": self.project_paths, "active": self.active_project_path}
|
||||
|
||||
Reference in New Issue
Block a user