Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
| import { c } from './lib/Log'; | |
| interface AutocompleteOutput { | |
| sentences: { | |
| value: string; | |
| time: number; | |
| }[]; | |
| time: number; | |
| } | |
| export class Api { | |
| private static ENDPOINT = | |
| // `http://coconut-proxy.huggingface.test` | |
| // `http://coconuthf.eastus.cloudapp.azure.com:6006` | |
| // "http://localhost:6006" | |
| // `https://transformer.huggingface.co` | |
| `https://wvnbdkpga3d4aev9.us-east-1.aws.endpoints.huggingface.cloud` | |
| ; | |
| static shared = new Api(); | |
| private async postAutocomplete( | |
| params: { | |
| inputs: { | |
| context: string; | |
| kwargs: { | |
| model_size?: string; /// 'small' | 'medium', | |
| top_p?: number; /// float between 0 and 1 | |
| temperature?: number; /// float between 0 and 100 | |
| step_size?: number; | |
| kl_scale?: number; | |
| gm_scale?: number; | |
| num_iterations?: number; | |
| gen_length?: number; | |
| max_time?: number; /// <- if we want to limit the response time. (in sec) | |
| bow_or_discrim?: string; | |
| use_sampling?: boolean; | |
| } | |
| } | |
| } | |
| ): Promise<any> { | |
| const init = { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify(params), | |
| } | |
| const response = await fetch(Api.ENDPOINT, init) | |
| const result = JSON.parse(await response.json()) | |
| return result | |
| } | |
| /** | |
| * Demo-specific helpers | |
| */ | |
| async postWithSettings( | |
| params: { | |
| context: string; | |
| } | |
| ): Promise<AutocompleteOutput> { | |
| /// Retrieve all settings params then launch the request. | |
| const model_size = | |
| document.querySelector('.decoder-settings .setting.model_size .js-val')!.textContent | |
| || undefined; | |
| const parseSliderVal = (sel: string): number | undefined => { | |
| const x = document.querySelector(sel); | |
| if (x && x.textContent) { | |
| return Number(x.textContent); | |
| } | |
| return undefined; | |
| }; | |
| const top_p = parseSliderVal('.decoder-settings .setting.top_p .js-val'); | |
| const temperature = parseSliderVal('.decoder-settings .setting.temperature .js-val'); | |
| const step_size = parseSliderVal('.decoder-settings .setting.step_size .js-val'); | |
| const kl_scale = parseSliderVal('.decoder-settings .setting.kl_scale .js-val'); | |
| const gm_scale = parseSliderVal('.decoder-settings .setting.gm_scale .js-val'); | |
| const num_iterations = parseSliderVal('.decoder-settings .setting.num_iterations .js-val'); | |
| const gen_length = parseSliderVal('.decoder-settings .setting.gen_length .js-val'); | |
| const max_time = parseSliderVal('.decoder-settings .setting.max_time .js-val'); | |
| const bow_or_discrim = ( | |
| document.querySelector<HTMLInputElement>('.decoder-settings input[name=bow_or_discrim]:checked') || {} | |
| ).value; | |
| const use_sampling = ( | |
| document.querySelector<HTMLInputElement>('.decoder-settings input[name=use_sampling]') || {} | |
| ).checked; | |
| const sent_params = { | |
| inputs: { | |
| ...params, | |
| kwargs: { | |
| model_size, | |
| top_p, | |
| temperature, | |
| step_size, | |
| kl_scale, | |
| gm_scale, | |
| num_iterations, | |
| gen_length, | |
| max_time, | |
| bow_or_discrim, | |
| use_sampling, | |
| } | |
| } | |
| } | |
| return this.postAutocomplete(sent_params); | |
| } | |
| /** | |
| * Edit AJAX endpoint | |
| * | |
| * Contrary to the autocomplete endpoint, | |
| * this is on server, | |
| * not on backend. | |
| */ | |
| async postEdit(body: any): Promise<boolean> { | |
| const doc = (<any>window).doc as { [index: string]: string }; | |
| if (!doc || !doc.longId) { | |
| throw new Error(`invalid doc`); | |
| } | |
| const path = `/edit/${doc.model}/${doc.longId}/${doc.shortId}`; | |
| const response = await fetch(path, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify(body), | |
| }); | |
| return response.ok; | |
| } | |
| /** | |
| * Duplicate AJAX endpoint | |
| * | |
| * Contrary to the autocomplete endpoint, | |
| * this is on server, | |
| * not on backend. | |
| */ | |
| async postDuplicate(): Promise<string> { | |
| const doc = (<any>window).doc as { [index: string]: string }; | |
| if (!doc || !doc.shortId) { | |
| throw new Error(`invalid doc`); | |
| } | |
| const path = `/duplicate/${doc.shortId}`; | |
| const response = await fetch(path, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| }); | |
| const url = await response.text(); | |
| c.log('[new url]', url); | |
| return url; | |
| } | |
| } | |