@samitouri / QOSami_Agents_Zero / commits / 7b20baeb
Fork 0

Agent Zero AI framework

Simplify project LLM setup

Keep the project creation modal focused on basic project details and Git cloning, without loading model config data. Move project model selection into a collapsed Advanced Settings accordion on the edit screen, and reduce the project LLM UI to a global preset selector plus the existing tune-icon preset editor shortcut.

Alessandro committed May 7, 2026 at 03:31 UTC 7b20baebbf49515446ab3fc49a7bd0c9e8dd7f2a
4 files changed +46 -82
webui/components/projects/project-create.html
-14
@@ -36,14 +36,6 @@
36 </div>
37 </template>
38
39 - <div class="project-detail-inline-section">
40 - <div class="project-detail-header">
41 - <span class="projects-project-card-title">LLM</span>
42 - </div>
43 - <x-component path="projects/project-edit-llm.html">
44 - </x-component>
45 - </div>
46 -
39 <div class="buttons-right">
40 <button type="button" class="button cancel"
41 @click="$store.projects.cancelCreate()"
@@ -82,12 +74,6 @@
74 margin-bottom: 1em;
75 }
76
85 - .project-detail-inline-section {
86 - border-top: 1px solid var(--color-border);
87 - margin-top: 1em;
88 - padding-top: 1em;
89 - }
90 -
77 .button-loading {
78 display: inline-flex;
79 align-items: center;
webui/components/projects/project-edit-llm.html
+29 -61
@@ -4,86 +4,54 @@
4 <title>Project LLM</title>
5 <script type="module">
6 import { store } from "/components/projects/projects-store.js";
7 - import { store as modelConfigStore } from "/plugins/_model_config/webui/model-config-store.js";
7 </script>
8 </head>
9
10 <body>
12 - <div x-data x-init="await $store.modelConfig.ensureLoaded()">
13 - <template x-if="$store.projects && $store.projects.selectedProject && $store.projects.selectedProject.llm && $store.modelConfig._loaded">
14 - <div>
15 - <div class="projects-form-group">
16 - <label class="projects-form-label">Preset</label>
17 - <span class="projects-form-description">Pick a preset to copy its main and utility model settings into this project. Embeddings stay with the current project config.</span>
18 - <select class="projects-form-select"
19 - x-model="$store.projects.selectedProject.llm.preset_key"
20 - @change="$store.projects.applySelectedLlmPreset()">
21 - <option value="current">Current config</option>
22 - <optgroup label="Global presets">
11 + <div x-data>
12 + <template x-if="$store.projects && $store.projects.selectedProject && $store.projects.selectedProject.llm">
13 + <div class="project-llm-preset-row">
14 + <div class="projects-form-group project-llm-preset-field">
15 + <label class="projects-form-label">Model preset</label>
16 + <div class="projects-input-with-button-wrapper project-llm-preset-controls">
17 + <select class="projects-form-select"
18 + x-model="$store.projects.selectedProject.llm.preset_key"
19 + @change="$store.projects.applySelectedLlmPreset()">
20 + <option value="current">Current project config</option>
21 <template x-for="preset in $store.projects.selectedProject.llm.global_presets" :key="$store.projects.getLlmPresetKey(preset)">
22 <option :value="$store.projects.getLlmPresetKey(preset)" x-text="preset.name"></option>
23 </template>
26 - </optgroup>
27 - <optgroup label="This project's presets">
28 - <template x-for="preset in $store.projects.selectedProject.llm.project_presets" :key="$store.projects.getLlmPresetKey(preset)">
29 - <option :value="$store.projects.getLlmPresetKey(preset)" x-text="preset.name"></option>
30 - </template>
31 - </optgroup>
32 - </select>
33 - </div>
34 -
35 - <div class="projects-form-group">
36 - <label class="projects-form-label">Project preset</label>
37 - <template x-if="$store.projects.selectedProject._meta.creating">
38 - <span class="projects-form-description">Create or update a preset stored in this project's <strong>_model_config/presets.yaml</strong> when the project is saved.</span>
39 - </template>
40 - <template x-if="!$store.projects.selectedProject._meta.creating">
41 - <span class="projects-form-description">Create or update a preset stored in <strong><span x-text="$store.projects.getSelectedAbsPath('.a0proj','plugins','_model_config','presets.yaml')"></span></strong>.</span>
42 - </template>
43 - <div class="projects-input-with-button-wrapper">
44 - <input class="projects-form-input" type="text"
45 - x-model="$store.projects.selectedProject.llm.new_preset_name"
46 - placeholder="Preset name">
47 - <button type="button" class="button icon-button"
48 - :disabled="!$store.projects.selectedProject.llm.new_preset_name.trim()"
49 - @click="$store.projects.saveSelectedLlmProjectPreset()">
50 - <span class="icon material-symbols-outlined">save</span>
51 - <span>Save preset</span>
24 + </select>
25 + <button type="button" class="button icon-button project-llm-edit-presets"
26 + @click="openModal('/plugins/_model_config/webui/main.html')">
27 + <span class="icon material-symbols-outlined">tune</span>
28 + <span>Edit Presets</span>
29 </button>
30 </div>
31 </div>
55 -
56 - <template x-for="section in $store.modelConfig.MODEL_SECTIONS" :key="section.key">
57 - <div class="project-llm-model-section"
58 - @input.capture="$store.projects.markLlmCurrent()"
59 - @change.capture="$store.projects.markLlmCurrent()"
60 - x-data="{ get model() { return $store.projects.selectedProject.llm.config[section.key]; }, get modelType() { return section.key.replace('_model', ''); }, get providers() { return $store.modelConfig.getProviders(section.key); }, get searchType() { return $store.modelConfig.getSearchType(section.key); }, apiKeyMode: 'store' }">
61 - <div class="project-llm-section-title" x-text="section.title"></div>
62 - <div class="project-llm-section-description" x-text="section.desc"></div>
63 - <x-component path="/plugins/_model_config/webui/model-field.html"></x-component>
64 - </div>
65 - </template>
32 </div>
33 </template>
34 </div>
35 </body>
36 <style>
71 - .project-llm-model-section {
72 - border-top: 1px dashed var(--color-border);
73 - margin-top: 1em;
74 - padding-top: 1em;
37 + .project-llm-preset-row {
38 + max-width: 100%;
39 + }
40 +
41 + .project-llm-preset-field {
42 + margin-bottom: 0;
43 + }
44 +
45 + .project-llm-preset-controls {
46 + align-items: stretch;
47 }
48
77 - .project-llm-section-title {
78 - font-size: 0.95rem;
79 - font-weight: 700;
80 - margin-bottom: 0.25em;
49 + .project-llm-preset-controls select {
50 + min-width: 0;
51 }
52
83 - .project-llm-section-description {
84 - font-size: 0.8rem;
85 - opacity: 0.75;
86 - margin-bottom: 0.8em;
53 + .project-llm-edit-presets {
54 + flex: 0 0 auto;
55 }
56 </style>
57
webui/components/projects/project-edit.html
+17 -6
@@ -32,14 +32,19 @@
32 </div>
33 <x-component path="projects/project-edit-basic-data.html">
34 </x-component>
35 - </div>
35
37 - <div class="project-detail">
38 - <div class="project-detail-header">
39 - <span class="projects-project-card-title">LLM</span>
36 + <div class="settings-advanced-section project-advanced-section" x-data="{ advOpen: false }">
37 + <button type="button" class="settings-advanced-toggle" @click="advOpen = !advOpen">
38 + <span class="material-symbols-outlined settings-advanced-toggle-icon"
39 + :style="advOpen ? 'transform:rotate(90deg)' : ''">chevron_right</span>
40 + <span>Advanced Settings</span>
41 + </button>
42 +
43 + <div class="settings-advanced-body" x-show="advOpen" x-transition.opacity style="display: none;">
44 + <x-component path="projects/project-edit-llm.html">
45 + </x-component>
46 + </div>
47 </div>
41 - <x-component path="projects/project-edit-llm.html">
42 - </x-component>
48 </div>
49
50 <div class="project-detail">
@@ -104,6 +109,12 @@
109 .project-detail-header {
110 margin-bottom: 1em;
111 }
112 +
113 + .project-advanced-section {
114 + border-top: 1px solid var(--color-border);
115 + margin-top: 1em;
116 + padding-top: 0.5em;
117 + }
118 </style>
119
120 </html>
webui/components/projects/projects-store.js
-1
@@ -410,7 +410,6 @@ const model = {
410 color: "",
411 git_url: "",
412 git_token: "",
413 - llm: await this._createProjectLlmData(""),
413 };
414 },
415