Spaces:
Running
Running
| import { Client } from "https://cdn.jsdelivr.net/npm/@gradio/client/dist/index.min.js"; | |
| (async () => { | |
| const chatWindow = document.getElementById("chat-window"); | |
| const userInput = document.getElementById("userMessage"); | |
| const sendBtn = document.getElementById("sendBtn"); | |
| let client; | |
| let isConnected = false; | |
| function pushMessage(role, text) { | |
| const wrap = document.createElement("div"); | |
| wrap.className = `message ${role}`; | |
| const bubble = document.createElement("div"); | |
| bubble.className = "bubble"; | |
| bubble.textContent = text; | |
| wrap.appendChild(bubble); | |
| chatWindow.appendChild(wrap); | |
| chatWindow.scrollTop = chatWindow.scrollHeight; | |
| } | |
| async function connectClient() { | |
| pushMessage("assistant", "Connecting to model..."); | |
| try { | |
| client = await Client.connect("amd/gpt-oss-120b-chatbot"); | |
| isConnected = true; | |
| pushMessage("assistant", "已連線,開始對話吧!"); | |
| } catch (err) { | |
| pushMessage("assistant", "連線失敗: " + String(err)); | |
| console.error(err); | |
| } | |
| } | |
| async function sendChat() { | |
| if (!isConnected) { | |
| await connectClient(); | |
| if (!isConnected) return; | |
| } | |
| const message = userInput.value.trim(); | |
| if (!message) return; | |
| sendBtn.disabled = true; | |
| pushMessage("user", message); | |
| try { | |
| // 如果你有固定的 system_prompt 可以直接填這裡 | |
| const system_prompt = "You are a helpful assistant."; | |
| const result = await client.predict("/chat", { | |
| message, | |
| system_prompt, | |
| temperature: 0, | |
| }); | |
| const assistantText = | |
| result && result.data ? String(result.data) : "No response"; | |
| pushMessage("assistant", assistantText); | |
| } catch (err) { | |
| console.error(err); | |
| pushMessage("assistant", "Error: " + String(err)); | |
| } finally { | |
| sendBtn.disabled = false; | |
| userInput.value = ""; | |
| userInput.focus(); | |
| } | |
| } | |
| sendBtn.addEventListener("click", sendChat); | |
| userInput.addEventListener("keydown", (e) => { | |
| if (e.key === "Enter" && !e.shiftKey) { | |
| e.preventDefault(); | |
| sendChat(); | |
| } | |
| }); | |
| connectClient(); | |
| })(); | |