From 4b755298060a741853f17b514cd96ec89355ad0c Mon Sep 17 00:00:00 2001 From: Storme-bit Date: Sat, 18 Apr 2026 06:16:31 -0700 Subject: [PATCH] model inference settings --- packages/chat-client/src/api/orchestration.js | 6 ++++++ .../src/components/SettingsView.jsx | 15 +++++++++++++++ .../orchestration-service/src/routes/models.js | 18 ++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/packages/chat-client/src/api/orchestration.js b/packages/chat-client/src/api/orchestration.js index 86843e6..23bc2f9 100644 --- a/packages/chat-client/src/api/orchestration.js +++ b/packages/chat-client/src/api/orchestration.js @@ -194,4 +194,10 @@ export async function getServiceHealth() { const res = await fetch(`${BASE_URL}/health/services`); if (!res.ok) throw new Error(`Failed to fetch health: ${res.status}`); return res.json(); +} + +export async function getModelProps() { + const res = await fetch(`${BASE_URL}/models/props`); + if (!res.ok) throw new Error('Failed to fetch model props'); + return res.json(); } \ No newline at end of file diff --git a/packages/chat-client/src/components/SettingsView.jsx b/packages/chat-client/src/components/SettingsView.jsx index 187c015..bbc93ab 100644 --- a/packages/chat-client/src/components/SettingsView.jsx +++ b/packages/chat-client/src/components/SettingsView.jsx @@ -2,6 +2,7 @@ import React, { useState, useEffect, useCallback } from 'react'; import { useSettings } from '../hooks/useSettings'; import { getServiceHealth } from '../api/orchestration'; import { useModels } from '../hooks/useModels'; +import { getModelProps } from '../api/orchestration'; export default function SettingsView({ onNavigate }) { const { settings, saveSetting, saving } = useSettings(); @@ -243,6 +244,11 @@ function ModelsSection({ onNavigate }) { const [selectedInfo, setSelectedInfo] = useState(null); const {settings, saveSetting, saving} = useSettings(); + const [modelProps, setModelProps] = useState(null); + useEffect(() => { + getModelProps().then(setModelProps).catch(() => {}); + }, []); + // Sync info panel when selection changes useEffect(() => { const m = models.find(m => m.value === selectedModel); @@ -325,6 +331,15 @@ function ModelsSection({ onNavigate }) { {selectedInfo.description && ( )} + +

Model loading and parameter configuration coming soon diff --git a/packages/orchestration-service/src/routes/models.js b/packages/orchestration-service/src/routes/models.js index 8c360c3..17e266e 100644 --- a/packages/orchestration-service/src/routes/models.js +++ b/packages/orchestration-service/src/routes/models.js @@ -4,6 +4,9 @@ const fs = require('fs'); const path = require('path'); const appSettings = require('../config/settings'); +const { getEnv, SERVICES } = require('@nexusai/shared'); +const INFERENCE_SERVICE_URL = getEnv('INFERENCE_SERVICE_URL', SERVICES.INFERENCE_URL); + router.get('/', (req, res) => { const { modelsFolderPath } = appSettings.load(); @@ -40,6 +43,21 @@ router.get('/', (req, res) => { } }); +router.get('/props', async (req, res) => { + try { + const response = await fetch(`${INFERENCE_SERVICE_URL}/props`); + if (!response.ok) throw new Error(`Inference service error: ${response.status}`); + const data = await response.json(); + res.json({ + contextWindow: data.n_ctx, + modelAlias: data.model_alias, + }); + } catch (err) { + console.error('[models/props]', err.message); + res.status(503).json({ error: 'Could not reach inference service' }); + } +}); + function getFileSizeMB(filepath) { try { const bytes = fs.statSync(filepath).size;