From 1515ee05899ba8e5ec5030055628321c4a130096 Mon Sep 17 00:00:00 2001 From: JK-le-dev Date: Sun, 19 Oct 2025 10:58:57 -0500 Subject: [PATCH 1/7] shit --- web-app/src/app/index.jsx | 1 - .../src/components/layouts/chat-layout.jsx | 78 +++++++++++++------ .../components/ui/button/backend-toggle.jsx | 26 +++++++ .../src/components/ui/chat/message-input.jsx | 11 ++- web-app/src/context/chat-backend-context.jsx | 25 ++++++ web-app/src/main.jsx | 5 +- 6 files changed, 118 insertions(+), 28 deletions(-) create mode 100644 web-app/src/components/ui/button/backend-toggle.jsx create mode 100644 web-app/src/context/chat-backend-context.jsx diff --git a/web-app/src/app/index.jsx b/web-app/src/app/index.jsx index ece1d51..86a06e6 100644 --- a/web-app/src/app/index.jsx +++ b/web-app/src/app/index.jsx @@ -5,7 +5,6 @@ function App() { return (
-
); } diff --git a/web-app/src/components/layouts/chat-layout.jsx b/web-app/src/components/layouts/chat-layout.jsx index 626042b..8502217 100644 --- a/web-app/src/components/layouts/chat-layout.jsx +++ b/web-app/src/components/layouts/chat-layout.jsx @@ -2,6 +2,22 @@ import React, { useState } from "react"; import ChatHeader from "src/components/ui/chat/chat-header"; import ChatWindow from "src/components/ui/chat/chat-window"; import MessageInput from "src/components/ui/chat/message-input"; +import { GoogleGenAI } from "@google/genai"; +import { useChatBackend } from "src/context/chat-backend-context"; + +const ai = new GoogleGenAI({ apiKey: import.meta.env.GEMINI_API_KEY }); + +async function AIResponse(userInputArray) { + const response = await ai.models.generateContent({ + model: "gemini-2.5-flash", + + contents: userInputArray, + }); + + return response.text; +} + +let userInput = []; export default function ChatLayout() { const [messages, setMessages] = useState([ @@ -11,29 +27,6 @@ export default function ChatLayout() { }, ]); - function addMessage(role, content) { - const msg = { role, content }; - setMessages((s) => [...s, msg]); - } - - function handleSend(text) { - const userMsg = { role: "user", content: text }; - setMessages((s) => [...s, userMsg]); - - // fake assistant reply after short delay - setTimeout(() => { - setMessages((s) => [ - ...s, - { role: "assistant", content: `You said: ${text}` }, - ]); - }, 600); - } - - function handleDeleteAll() { - if (!window.confirm("Delete all messages?")) return; - setMessages([]); - } - return (
@@ -46,3 +39,42 @@ export default function ChatLayout() {
); } + +function addMessage(role, content) { + const msg = { role, content }; + setMessages((s) => [...s, msg]); +} + +async function handleSend(text) { + const { setMessages } = useChatBackend(); + const userMsg = { role: "user", content: text }; + + switch (setMessages) { + case "gemini": + userInput.push(text); + const res = await AIResponse(userInput); + setMessages((s) => [...s, userMsg]); + setTimeout(() => { + setMessages((s) => [...s, { role: "assistant", content: res }]); + }, 600); + break; + case "rust": + setMessages((s) => [...s, userMsg]); + + // fake assistant reply after short delay + setTimeout(() => { + setMessages((s) => [ + ...s, + { role: "assistant", content: `You said: ${text}` }, + ]); + }, 600); + break; + default: + break; + } +} + +function handleDeleteAll() { + if (!window.confirm("Delete all messages?")) return; + setMessages([]); +} diff --git a/web-app/src/components/ui/button/backend-toggle.jsx b/web-app/src/components/ui/button/backend-toggle.jsx new file mode 100644 index 0000000..f8f9a80 --- /dev/null +++ b/web-app/src/components/ui/button/backend-toggle.jsx @@ -0,0 +1,26 @@ +import React from "react"; +import { motion } from "motion/react"; +import { Cpu } from "lucide-react"; +import { useChatBackend } from "src/context/chat-backend-context"; + +export default function BackendToggle({ className }) { + const { backend, toggleBackend } = useChatBackend(); + + return ( + { + e.preventDefault(); + toggleBackend(); + }} + className={`bg-gray-700 p-2 rounded-2xl file-input border-2 border-gray-600 text-md flex items-center gap-2 ${className || ""}`} + whileHover={{ scale: 1.05 }} + whileTap={{ scale: 0.95 }} + title={`${backend}`} + > + + + {backend === "rust" ? "rust" : "gemini"} + + + ); +} diff --git a/web-app/src/components/ui/chat/message-input.jsx b/web-app/src/components/ui/chat/message-input.jsx index dc6c2aa..961b913 100644 --- a/web-app/src/components/ui/chat/message-input.jsx +++ b/web-app/src/components/ui/chat/message-input.jsx @@ -1,5 +1,7 @@ import React, { useState, useRef, useEffect } from "react"; import DownButton from "src/components/ui/button/down-button"; +import BackendToggle from "src/components/ui/button/backend-toggle"; +import ChatBackendContext from "src/context/chat-backend-context"; import { motion } from "motion/react"; import { BotMessageSquare } from "lucide-react"; @@ -59,7 +61,6 @@ export default function MessageInput({ onSend, onMessage }) { console.error(err); if (onMessage) onMessage("assistant", `Error: ${err.message}`); } - setText(""); } @@ -67,9 +68,13 @@ export default function MessageInput({ onSend, onMessage }) {