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 (
{/* LEFT: Chat Panel */}

🪔 OV-Studio

{messages.map((m, i) => (
{m.role === 'user' ? 'You' : 'OV-Engine'}:

{m.text}

))}
setInput(e.target.value)} onKeyPress={e => e.key === 'Enter' && sendMessage()} placeholder="Ask OV-Engine..." style={{ width: '100%', padding: 10, borderRadius: 5, border: 'none' }} />
{/* RIGHT: Memory Visualizer (Honeycomb) */}

🕸️ Memory Graph

Status: {memoryActive ? "Scanning C++ Kernel..." : "Idle"}

{/* Placeholder for 3D Graph */}
{memoryActive ? "Searching 20,000 Vectors..." : "Waiting for Query"}

Active Context:

{memoryActive ? "Calculating P = S * C * R * W" : "None"}
); }