Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Ollama Template Test</title> | |
| <style> | |
| body { | |
| font-family: Arial, sans-serif; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| main { | |
| margin: 0 auto; | |
| max-width: 800px; | |
| padding: 20px; | |
| } | |
| textarea { | |
| width: 100%; | |
| } | |
| pre { | |
| background-color: #f4f4f4; | |
| padding: 10px; | |
| border-radius: 5px; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <main> | |
| <h1>Ollama Template Test</h1> | |
| <p> | |
| Given a conversation and a template, the Go template engine will apply the chat template. | |
| </p> | |
| Conversation JSON:<br/> | |
| <textarea id="conversation" rows="10" cols="50"></textarea><br/> | |
| <br/> | |
| Ollama Go template:<br/> | |
| <textarea id="template" rows="10" cols="50"></textarea><br/> | |
| <br/> | |
| <button onclick="applyChatTemplate()" style="font-size: 1.2em">π Apply chat template</button><br/> | |
| <br/> | |
| Output:<br/> | |
| <pre id="output"></pre> | |
| <br/> | |
| <br/> | |
| <br/> | |
| <center> | |
| <small>Made by <a href="https://github.com/ngxson">ngxson</a> from π€</small> | |
| </center> | |
| <br/> | |
| <br/> | |
| </main> | |
| <script src="wasm_exec.js"></script> | |
| <script> | |
| const DEFAULT_CONV = [ | |
| { role: "system", content: "You are a helpful assistant."}, | |
| { role: "user", content: "Hello, how are you?"}, | |
| { role: "assistant", content: "I'm doing great. How can I help you today?"}, | |
| { role: "user", content: "I'd like to show off how chat templating works!"}, | |
| ]; | |
| const DEFAULT_TMPL = "{{ if .System }}<|system|>\n{{ .System }}<|end|>\n{{ end }}{{ if .Prompt }}<|user|>\n{{ .Prompt }}<|end|>\n{{ end }}<|assistant|>\n{{ .Response }}<|end|>"; | |
| const elTemplate = document.getElementById("template"); | |
| const elConversation = document.getElementById("conversation"); | |
| elTemplate.value = DEFAULT_TMPL; | |
| elConversation.value = JSON.stringify(DEFAULT_CONV, null, 2); | |
| if (WebAssembly) { | |
| // WebAssembly.instantiateStreaming is not currently available in Safari | |
| if (WebAssembly && !WebAssembly.instantiateStreaming) { // polyfill | |
| WebAssembly.instantiateStreaming = async (resp, importObject) => { | |
| const source = await (await resp).arrayBuffer(); | |
| return await WebAssembly.instantiate(source, importObject); | |
| }; | |
| } | |
| const go = new Go(); | |
| WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).then((result) => { | |
| go.run(result.instance); | |
| applyChatTemplate(); | |
| }); | |
| } else { | |
| alert("WebAssembly is not supported in your browser"); | |
| } | |
| function applyChatTemplate() { | |
| const conversation = elConversation.value; | |
| const template = elTemplate.value.trim(); | |
| const output = formatChatTemplate(conversation, template); | |
| document.getElementById("output").textContent = output; | |
| } | |
| </script> | |
| </body> | |
| </html> |