import React, { useState, useEffect } from 'react'; const { ipcRenderer } = window.require('electron'); export default function App() { const [messages, setMessages] = useState([]); const [input, setInput] = useState(""); const [memoryActive, setMemoryActive] = useState(false); const [models, setModels] = useState({ local: [], presets: [] }); const [selectedModel, setSelectedModel] = useState("ibm-granite/granite-3.0-2b-instruct"); useEffect(() => { // Initial Load ipcRenderer.send('list-models'); ipcRenderer.on('model-list', (e, data) => setModels(data)); ipcRenderer.on('receive-token', (event, token) => { setMessages(prev => { const last = prev[prev.length - 1]; if (last && last.role === 'assistant') { return [...prev.slice(0, -1), { role: 'assistant', text: last.text + token }]; } return [...prev, { role: 'assistant', text: token }]; }); }); ipcRenderer.on('stream-end', () => setMemoryActive(false)); }, []); const sendMessage = () => { if (!input) return; setMessages(prev => [...prev, { role: 'user', text: input }]); ipcRenderer.send('send-message', { model: selectedModel, text: input }); setInput(""); setMemoryActive(true); }; return (
{m.text}
Status: {memoryActive ? "Scanning C++ Kernel..." : "Idle"}
{/* Placeholder for 3D Graph */}