{"version":3,"file":"index.0ae338d0.js","sources":["../../../../../../src/lib/apis/openai/index.ts"],"sourcesContent":["import { OPENAI_API_BASE_URL } from '$lib/constants';\nimport { titleGenerationTemplate } from '$lib/utils';\nimport { type Model, models, settings } from '$lib/stores';\n\nexport const getOpenAIConfig = async (token: string = '') => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OPENAI_API_BASE_URL}/config`, {\n\t\tmethod: 'GET',\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...(token && { authorization: `Bearer ${token}` })\n\t\t}\n\t})\n\t\t.then(async (res) => {\n\t\t\tif (!res.ok) throw await res.json();\n\t\t\treturn res.json();\n\t\t})\n\t\t.catch((err) => {\n\t\t\tconsole.log(err);\n\t\t\tif ('detail' in err) {\n\t\t\t\terror = err.detail;\n\t\t\t} else {\n\t\t\t\terror = 'Server connection failed';\n\t\t\t}\n\t\t\treturn null;\n\t\t});\n\n\tif (error) {\n\t\tthrow error;\n\t}\n\n\treturn res;\n};\n\nexport const updateOpenAIConfig = async (token: string = '', enable_openai_api: boolean) => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OPENAI_API_BASE_URL}/config/update`, {\n\t\tmethod: 'POST',\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...(token && { authorization: `Bearer ${token}` })\n\t\t},\n\t\tbody: JSON.stringify({\n\t\t\tenable_openai_api: enable_openai_api\n\t\t})\n\t})\n\t\t.then(async (res) => {\n\t\t\tif (!res.ok) throw await res.json();\n\t\t\treturn res.json();\n\t\t})\n\t\t.catch((err) => {\n\t\t\tconsole.log(err);\n\t\t\tif ('detail' in err) {\n\t\t\t\terror = err.detail;\n\t\t\t} else {\n\t\t\t\terror = 'Server connection failed';\n\t\t\t}\n\t\t\treturn null;\n\t\t});\n\n\tif (error) {\n\t\tthrow error;\n\t}\n\n\treturn res;\n};\n\nexport const getOpenAIUrls = async (token: string = '') => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OPENAI_API_BASE_URL}/urls`, {\n\t\tmethod: 'GET',\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...(token && { authorization: `Bearer ${token}` })\n\t\t}\n\t})\n\t\t.then(async (res) => {\n\t\t\tif (!res.ok) throw await res.json();\n\t\t\treturn res.json();\n\t\t})\n\t\t.catch((err) => {\n\t\t\tconsole.log(err);\n\t\t\tif ('detail' in err) {\n\t\t\t\terror = err.detail;\n\t\t\t} else {\n\t\t\t\terror = 'Server connection failed';\n\t\t\t}\n\t\t\treturn null;\n\t\t});\n\n\tif (error) {\n\t\tthrow error;\n\t}\n\n\treturn res.OPENAI_API_BASE_URLS;\n};\n\nexport const updateOpenAIUrls = async (token: string = '', urls: string[]) => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OPENAI_API_BASE_URL}/urls/update`, {\n\t\tmethod: 'POST',\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...(token && { authorization: `Bearer ${token}` })\n\t\t},\n\t\tbody: JSON.stringify({\n\t\t\turls: urls\n\t\t})\n\t})\n\t\t.then(async (res) => {\n\t\t\tif (!res.ok) throw await res.json();\n\t\t\treturn res.json();\n\t\t})\n\t\t.catch((err) => {\n\t\t\tconsole.log(err);\n\t\t\tif ('detail' in err) {\n\t\t\t\terror = err.detail;\n\t\t\t} else {\n\t\t\t\terror = 'Server connection failed';\n\t\t\t}\n\t\t\treturn null;\n\t\t});\n\n\tif (error) {\n\t\tthrow error;\n\t}\n\n\treturn res.OPENAI_API_BASE_URLS;\n};\n\nexport const getOpenAIKeys = async (token: string = '') => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OPENAI_API_BASE_URL}/keys`, {\n\t\tmethod: 'GET',\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...(token && { authorization: `Bearer ${token}` })\n\t\t}\n\t})\n\t\t.then(async (res) => {\n\t\t\tif (!res.ok) throw await res.json();\n\t\t\treturn res.json();\n\t\t})\n\t\t.catch((err) => {\n\t\t\tconsole.log(err);\n\t\t\tif ('detail' in err) {\n\t\t\t\terror = err.detail;\n\t\t\t} else {\n\t\t\t\terror = 'Server connection failed';\n\t\t\t}\n\t\t\treturn null;\n\t\t});\n\n\tif (error) {\n\t\tthrow error;\n\t}\n\n\treturn res.OPENAI_API_KEYS;\n};\n\nexport const updateOpenAIKeys = async (token: string = '', keys: string[]) => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OPENAI_API_BASE_URL}/keys/update`, {\n\t\tmethod: 'POST',\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...(token && { authorization: `Bearer ${token}` })\n\t\t},\n\t\tbody: JSON.stringify({\n\t\t\tkeys: keys\n\t\t})\n\t})\n\t\t.then(async (res) => {\n\t\t\tif (!res.ok) throw await res.json();\n\t\t\treturn res.json();\n\t\t})\n\t\t.catch((err) => {\n\t\t\tconsole.log(err);\n\t\t\tif ('detail' in err) {\n\t\t\t\terror = err.detail;\n\t\t\t} else {\n\t\t\t\terror = 'Server connection failed';\n\t\t\t}\n\t\t\treturn null;\n\t\t});\n\n\tif (error) {\n\t\tthrow error;\n\t}\n\n\treturn res.OPENAI_API_KEYS;\n};\n\nexport const getOpenAIModels = async (token: string, urlIdx?: number) => {\n\tlet error = null;\n\n\tconst res = await fetch(\n\t\t`${OPENAI_API_BASE_URL}/models${typeof urlIdx === 'number' ? `/${urlIdx}` : ''}`,\n\t\t{\n\t\t\tmethod: 'GET',\n\t\t\theaders: {\n\t\t\t\tAccept: 'application/json',\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t...(token && { authorization: `Bearer ${token}` })\n\t\t\t}\n\t\t}\n\t)\n\t\t.then(async (res) => {\n\t\t\tif (!res.ok) throw await res.json();\n\t\t\treturn res.json();\n\t\t})\n\t\t.catch((err) => {\n\t\t\terror = `OpenAI: ${err?.error?.message ?? 'Network Problem'}`;\n\t\t\treturn [];\n\t\t});\n\n\tif (error) {\n\t\tthrow error;\n\t}\n\n\treturn res;\n};\n\nexport const getOpenAIModelsDirect = async (\n\tbase_url: string = 'https://api.openai.com/v1',\n\tapi_key: string = ''\n) => {\n\tlet error = null;\n\n\tconst res = await fetch(`${base_url}/models`, {\n\t\tmethod: 'GET',\n\t\theaders: {\n\t\t\t'Content-Type': 'application/json',\n\t\t\tAuthorization: `Bearer ${api_key}`\n\t\t}\n\t})\n\t\t.then(async (res) => {\n\t\t\tif (!res.ok) throw await res.json();\n\t\t\treturn res.json();\n\t\t})\n\t\t.catch((err) => {\n\t\t\tconsole.log(err);\n\t\t\terror = `OpenAI: ${err?.error?.message ?? 'Network Problem'}`;\n\t\t\treturn null;\n\t\t});\n\n\tif (error) {\n\t\tthrow error;\n\t}\n\n\tconst models = Array.isArray(res) ? res : res?.data ?? null;\n\n\treturn models\n\t\t.map((model) => ({ id: model.id, name: model.name ?? model.id, external: true }))\n\t\t.filter((model) => (base_url.includes('openai') ? model.name.includes('gpt') : true))\n\t\t.sort((a, b) => {\n\t\t\treturn a.name.localeCompare(b.name);\n\t\t});\n};\n\nexport const generateOpenAIChatCompletion = async (\n\ttoken: string = '',\n\tbody: object,\n\turl: string = OPENAI_API_BASE_URL\n): Promise<[Response | null, AbortController]> => {\n\tconst controller = new AbortController();\n\tlet error = null;\n\n\tconst res = await fetch(`${url}/chat/completions`, {\n\t\tsignal: controller.signal,\n\t\tmethod: 'POST',\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t'Content-Type': 'application/json'\n\t\t},\n\t\tbody: JSON.stringify(body)\n\t}).catch((err) => {\n\t\tconsole.log(err);\n\t\terror = err;\n\t\treturn null;\n\t});\n\n\tif (error) {\n\t\tthrow error;\n\t}\n\n\treturn [res, controller];\n};\n\nexport const synthesizeOpenAISpeech = async (\n\ttoken: string = '',\n\tspeaker: string = 'alloy',\n\ttext: string = '',\n\tmodel: string = 'tts-1'\n) => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OPENAI_API_BASE_URL}/audio/speech`, {\n\t\tmethod: 'POST',\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t'Content-Type': 'application/json'\n\t\t},\n\t\tbody: JSON.stringify({\n\t\t\tmodel: model,\n\t\t\tinput: text,\n\t\t\tvoice: speaker\n\t\t})\n\t}).catch((err) => {\n\t\tconsole.log(err);\n\t\terror = err;\n\t\treturn null;\n\t});\n\n\tif (error) {\n\t\tthrow error;\n\t}\n\n\treturn res;\n};\n\nexport const generateTitle = async (\n\ttoken: string = '',\n\ttemplate: string,\n\tmodel: string,\n\tprompt: string,\n\tchat_id?: string,\n\turl: string = OPENAI_API_BASE_URL\n) => {\n\tlet error = null;\n\n\ttemplate = titleGenerationTemplate(template, prompt);\n\n\tconsole.log(template);\n\n\tconst res = await fetch(`${url}/chat/completions`, {\n\t\tmethod: 'POST',\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t\tAuthorization: `Bearer ${token}`\n\t\t},\n\t\tbody: JSON.stringify({\n\t\t\tmodel: model,\n\t\t\tmessages: [\n\t\t\t\t{\n\t\t\t\t\trole: 'user',\n\t\t\t\t\tcontent: template\n\t\t\t\t}\n\t\t\t],\n\t\t\tstream: false,\n\t\t\t// Restricting the max tokens to 50 to avoid long titles\n\t\t\tmax_tokens: 50,\n\t\t\t...(chat_id && { chat_id: chat_id }),\n\t\t\ttitle: true\n\t\t})\n\t})\n\t\t.then(async (res) => {\n\t\t\tif (!res.ok) throw await res.json();\n\t\t\treturn res.json();\n\t\t})\n\t\t.catch((err) => {\n\t\t\tconsole.log(err);\n\t\t\tif ('detail' in err) {\n\t\t\t\terror = err.detail;\n\t\t\t}\n\t\t\treturn null;\n\t\t});\n\n\tif (error) {\n\t\tthrow error;\n\t}\n\n\treturn res?.choices[0]?.message?.content.replace(/[\"']/g, '') ?? 'New Chat';\n};\n\nexport const generateSearchQuery = async (\n\ttoken: string = '',\n\tmodel: string,\n\tpreviousMessages: string[],\n\tprompt: string,\n\turl: string = OPENAI_API_BASE_URL\n): Promise => {\n\tlet error = null;\n\n\t// TODO: Allow users to specify the prompt\n\t// Get the current date in the format \"January 20, 2024\"\n\tconst currentDate = new Intl.DateTimeFormat('en-US', {\n\t\tyear: 'numeric',\n\t\tmonth: 'long',\n\t\tday: '2-digit'\n\t}).format(new Date());\n\n\tconst res = await fetch(`${url}/chat/completions`, {\n\t\tmethod: 'POST',\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t\tAuthorization: `Bearer ${token}`\n\t\t},\n\t\tbody: JSON.stringify({\n\t\t\tmodel: model,\n\t\t\t// Few shot prompting\n\t\t\tmessages: [\n\t\t\t\t{\n\t\t\t\t\trole: 'assistant',\n\t\t\t\t\tcontent: `You are tasked with generating web search queries. Give me an appropriate query to answer my question for google search. Answer with only the query. Today is ${currentDate}.`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\trole: 'user',\n\t\t\t\t\tcontent: prompt\n\t\t\t\t}\n\t\t\t\t// {\n\t\t\t\t// \trole: 'user',\n\t\t\t\t// \tcontent:\n\t\t\t\t// \t\t(previousMessages.length > 0\n\t\t\t\t// \t\t\t? `Previous Questions:\\n${previousMessages.join('\\n')}\\n\\n`\n\t\t\t\t// \t\t\t: '') + `Current Question: ${prompt}`\n\t\t\t\t// }\n\t\t\t],\n\t\t\tstream: false,\n\t\t\t// Restricting the max tokens to 30 to avoid long search queries\n\t\t\tmax_tokens: 30\n\t\t})\n\t})\n\t\t.then(async (res) => {\n\t\t\tif (!res.ok) throw await res.json();\n\t\t\treturn res.json();\n\t\t})\n\t\t.catch((err) => {\n\t\t\tconsole.log(err);\n\t\t\tif ('detail' in err) {\n\t\t\t\terror = err.detail;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t});\n\n\tif (error) {\n\t\tthrow error;\n\t}\n\n\treturn res?.choices[0]?.message?.content.replace(/[\"']/g, '') ?? undefined;\n};\n"],"names":["getOpenAIConfig","token","error","res","OPENAI_API_BASE_URL","err","updateOpenAIConfig","enable_openai_api","getOpenAIUrls","updateOpenAIUrls","urls","getOpenAIKeys","updateOpenAIKeys","keys","getOpenAIModels","urlIdx","_a","generateOpenAIChatCompletion","body","url","controller"],"mappings":"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"}