| import { defaultModel } from "$lib/server/models"; |
| import { modelEndpoint } from "./modelEndpoint"; |
| import { trimSuffix } from "$lib/utils/trimSuffix"; |
| import { trimPrefix } from "$lib/utils/trimPrefix"; |
| import { PUBLIC_SEP_TOKEN } from "$lib/constants/publicSepToken"; |
| import { AwsClient } from "aws4fetch"; |
|
|
| interface Parameters { |
| temperature: number; |
| truncate: number; |
| max_new_tokens: number; |
| stop: string[]; |
| } |
| export async function generateFromDefaultEndpoint( |
| prompt: string, |
| parameters?: Partial<Parameters>, |
| preprompt: string = "" |
| ): Promise<string> { |
| const newParameters = { |
| ...defaultModel.parameters, |
| ...parameters, |
| return_full_text: false, |
| }; |
|
|
| const randomEndpoint = modelEndpoint(defaultModel); |
|
|
| |
|
|
| let resp: Response; |
|
|
| if (randomEndpoint.host === "sagemaker") { |
| const requestParams = JSON.stringify({ |
| parameters: newParameters, |
| inputs: prompt, |
| }); |
|
|
| const aws = new AwsClient({ |
| accessKeyId: randomEndpoint.accessKey, |
| secretAccessKey: randomEndpoint.secretKey, |
| sessionToken: randomEndpoint.sessionToken, |
| service: "sagemaker", |
| }); |
|
|
| resp = await aws.fetch(randomEndpoint.url, { |
| method: "POST", |
| body: requestParams, |
| signal: abortController.signal, |
| headers: { |
| "Content-Type": "application/json", |
| }, |
| }); |
| } else { |
| console.log('generateFromDefaultEndpoint params', JSON.stringify({ |
| parameters: newParameters, |
| preprompt: preprompt, |
| messages: [{ from: 'user', content: prompt }], |
| })) |
|
|
| await fetch(randomEndpoint.url + '/reset', { |
| headers: { |
| "Content-Type": "application/json" |
| }, |
| method: "GET" |
| }); |
|
|
| resp = await fetch(randomEndpoint.url, { |
| headers: { |
| "Content-Type": "application/json" |
| }, |
| method: "POST", |
| body: JSON.stringify({ |
| parameters: newParameters, |
| preprompt: preprompt, |
| messages: [{ from: 'user', content: prompt }], |
| }) |
| }); |
| } |
|
|
| if (!resp.ok) { |
| throw new Error(await resp.text()); |
| } |
|
|
| if (!resp.body) { |
| throw new Error("Body is empty"); |
| } |
|
|
| const decoder = new TextDecoder(); |
| const reader = resp.body.getReader(); |
|
|
| let isDone = false; |
| let result = ""; |
|
|
| while (!isDone) { |
| const { done, value } = await reader.read(); |
|
|
| isDone = done; |
| result += decoder.decode(value, { stream: true }); |
| } |
|
|
| |
| reader.releaseLock(); |
|
|
| console.log('Model raw result:', result) |
| return result; |
|
|
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
|
|
| |
| } |