| const { createApp, ref, onMounted, computed } = Vue; | |
| import { HfInference } from "https://cdn.skypack.dev/@huggingface/inference@latest"; | |
| const app = createApp({ | |
| setup() { | |
| const token = ref(localStorage.getItem("token") || ""); | |
| const userPrompt = ref("Write about the difference between Data Science and AI Engineering."); | |
| const currentGeneratedText = ref(""); | |
| const models = ref(["HuggingFaceH4/zephyr-7b-beta", "mistralai/Mistral-7B-v0.1", | |
| "google/flan-t5-xxl"]); | |
| const selectedModel = ref(""); | |
| const isRunning = ref(false); | |
| const responseLength = ref("150"); | |
| const temperature = ref("1.0"); | |
| const generating = ref(false); | |
| let controller; | |
| const statusMessage = computed(() => { | |
| if (generating.value) return "Generating..." | |
| return "Ready" | |
| }) | |
| const createTextGenerationStream = (hfInstance, prompt, abortControllerSignal) => { | |
| return hfInstance.textGenerationStream( | |
| { | |
| model: selectedModel.value, | |
| inputs: prompt, | |
| parameters: { | |
| max_new_tokens: parseInt(responseLength.value), | |
| temperature: parseFloat(temperature.value), | |
| }, | |
| }, | |
| { | |
| use_cache: false, | |
| signal: abortControllerSignal, | |
| } | |
| ); | |
| }; | |
| const generateTextStream = async function* (hfInstance, abortSignal, prompt) { | |
| let generatedText = "" | |
| generating.value = true | |
| for await (const output of createTextGenerationStream(hfInstance, prompt, abortSignal)) { | |
| generatedText += output.token.text; | |
| yield generatedText; | |
| } | |
| generating.value = false | |
| }; | |
| const run = async () => { | |
| isRunning.value = true; | |
| currentGeneratedText.value = ""; | |
| controller = new AbortController(); | |
| localStorage.setItem("token", token.value); | |
| const hfInstance = new HfInference(token.value); | |
| try { | |
| for await (const textStream of generateTextStream( | |
| hfInstance, | |
| controller.signal, | |
| userPrompt.value | |
| )) { | |
| currentGeneratedText.value = textStream; | |
| } | |
| } catch (e) { | |
| console.log(e); | |
| } | |
| }; | |
| const stop = () => { | |
| if (controller) { | |
| controller.abort(); | |
| } | |
| isRunning.value = false; | |
| }; | |
| onMounted(async () => { | |
| const localStorageToken = localStorage.getItem("token") | |
| if (localStorageToken) { | |
| token.value = localStorageToken; | |
| } | |
| selectedModel.value = models.value[0]; | |
| }); | |
| return { | |
| token, | |
| userPrompt, | |
| currentGeneratedText, | |
| run, | |
| stop, | |
| models, | |
| selectedModel, | |
| isRunning, | |
| responseLength, | |
| temperature, | |
| statusMessage | |
| }; | |
| }, | |
| }); | |
| app.mount("#app"); | |