Skip to content

Commit 2e0ac68

Browse files
Add Settings page with Ollama LLM configuration, connection testing, and data management
Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 98a7520 commit 2e0ac68

5 files changed

Lines changed: 473 additions & 4 deletions

File tree

src/Layout.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const allNavigationItems = [
3030
{ title: "Analytics", url: createPageUrl("Analytics"), icon: BarChart3, page: "Analytics" },
3131
{ title: "Reports", url: createPageUrl("Reports"), icon: FileText, page: "Reports" },
3232
{ title: "Reporting Dashboard", url: createPageUrl("ReportingDashboard"), icon: BarChart3, page: "ReportingDashboard" },
33+
{ title: "Settings", url: createPageUrl("Settings"), icon: Settings, page: "Settings" },
3334
];
3435

3536
export default function Layout({ children }) {

src/api/appClient.js

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,9 +267,12 @@ class LocalIntegrations {
267267
}),
268268
});
269269
const data = await response.json();
270-
const content = data.choices?.[0]?.message?.content || JSON.stringify(data);
270+
let content = data.choices?.[0]?.message?.content || JSON.stringify(data);
271271
if (params.response_json_schema) {
272-
try { return JSON.parse(content); } catch { return content; }
272+
const cleaned = content.replace(/^```(?:json)?\s*\n?/i, '').replace(/\n?```\s*$/i, '').trim();
273+
try { return JSON.parse(cleaned); } catch {
274+
try { return JSON.parse(content); } catch { return content; }
275+
}
273276
}
274277
return content;
275278
} catch (error) {
@@ -392,8 +395,21 @@ class AppClient {
392395
if (ipc) {
393396
await migrateLocalStorageIfNeeded();
394397
if (this.auth.init) await this.auth.init();
398+
await this._ensureLLMDefaults();
395399
}
396400
}
401+
402+
async _ensureLLMDefaults() {
403+
try {
404+
const existing = await this.settings.get('llm_endpoint');
405+
if (!existing) {
406+
await this.settings.set('llm_endpoint', 'http://localhost:11434/v1/chat/completions');
407+
await this.settings.set('llm_model', 'llama3.1:8b');
408+
await this.settings.set('llm_api_key', '');
409+
console.log('[TriageLink] Ollama defaults configured');
410+
}
411+
} catch {}
412+
}
397413
}
398414

399415
export const appClient = new AppClient();

src/lib/rbac.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const ROLE_PERMISSIONS = {
33
pages: [
44
'TriageDashboard', 'AIProtocolManagement', 'RulesManagement',
55
'PagingConfiguration', 'Compliance', 'AuditLog',
6-
'Analytics', 'Reports', 'ReportingDashboard',
6+
'Analytics', 'Reports', 'ReportingDashboard', 'Settings',
77
],
88
actions: [
99
'manage_users', 'manage_rules', 'manage_hospitals', 'manage_paging',
@@ -31,7 +31,7 @@ const ROLE_PERMISSIONS = {
3131
actions: ['view_reports', 'view_audit', 'view_analytics', 'view_compliance'],
3232
},
3333
it: {
34-
pages: ['Compliance', 'AuditLog', 'Analytics'],
34+
pages: ['Compliance', 'AuditLog', 'Analytics', 'Settings'],
3535
actions: ['view_audit', 'configure_llm', 'backup_restore', 'view_compliance', 'view_analytics'],
3636
},
3737
};

src/pages.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import PagingConfiguration from './pages/PagingConfiguration';
5656
import ReportingDashboard from './pages/ReportingDashboard';
5757
import Reports from './pages/Reports';
5858
import RulesManagement from './pages/RulesManagement';
59+
import Settings from './pages/Settings';
5960
import TriageDashboard from './pages/TriageDashboard';
6061
import __Layout from './Layout.jsx';
6162

@@ -70,6 +71,7 @@ export const PAGES = {
7071
"ReportingDashboard": ReportingDashboard,
7172
"Reports": Reports,
7273
"RulesManagement": RulesManagement,
74+
"Settings": Settings,
7375
"TriageDashboard": TriageDashboard,
7476
}
7577

0 commit comments

Comments
 (0)