{"version":3,"file":"index.b788b082.js","sources":["../../../../../../src/lib/apis/ollama/index.ts"],"sourcesContent":["import { OLLAMA_API_BASE_URL } from '$lib/constants';\nimport { titleGenerationTemplate } from '$lib/utils';\n\nexport const getOllamaConfig = async (token: string = '') => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OLLAMA_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 updateOllamaConfig = async (token: string = '', enable_ollama_api: boolean) => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OLLAMA_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_ollama_api: enable_ollama_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 getOllamaUrls = async (token: string = '') => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OLLAMA_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.OLLAMA_BASE_URLS;\n};\n\nexport const updateOllamaUrls = async (token: string = '', urls: string[]) => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OLLAMA_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.OLLAMA_BASE_URLS;\n};\n\nexport const getOllamaVersion = async (token: string, urlIdx?: number) => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OLLAMA_API_BASE_URL}/api/version${urlIdx ? `/${urlIdx}` : ''}`, {\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?.version ?? false;\n};\n\nexport const getOllamaModels = async (token: string = '') => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OLLAMA_API_BASE_URL}/api/tags`, {\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?.models ?? [])\n\t\t.map((model) => ({ id: model.model, name: model.name ?? model.model, ...model }))\n\t\t.sort((a, b) => {\n\t\t\treturn a.name.localeCompare(b.name);\n\t\t});\n};\n\n// TODO: migrate to backend\nexport const generateTitle = async (\n\ttoken: string = '',\n\ttemplate: string,\n\tmodel: string,\n\tprompt: string\n) => {\n\tlet error = null;\n\n\ttemplate = titleGenerationTemplate(template, prompt);\n\n\tconsole.log(template);\n\n\tconst res = await fetch(`${OLLAMA_API_BASE_URL}/api/generate`, {\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\tprompt: template,\n\t\t\tstream: false,\n\t\t\toptions: {\n\t\t\t\t// Restrict the number of tokens generated to 50\n\t\t\t\tnum_predict: 50\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\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?.response.replace(/[\"']/g, '') ?? 'New Chat';\n};\n\nexport const generatePrompt = async (token: string = '', model: string, conversation: string) => {\n\tlet error = null;\n\n\tif (conversation === '') {\n\t\tconversation = '[no existing conversation]';\n\t}\n\n\tconst res = await fetch(`${OLLAMA_API_BASE_URL}/api/generate`, {\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\tprompt: `Conversation:\n\t\t\t${conversation}\n\n\t\t\tAs USER in the conversation above, your task is to continue the conversation. Remember, Your responses should be crafted as if you're a human conversing in a natural, realistic manner, keeping in mind the context and flow of the dialogue. Please generate a fitting response to the last message in the conversation, or if there is no existing conversation, initiate one as a normal person would.\n\t\t\t\n\t\t\tResponse:\n\t\t\t`\n\t\t})\n\t}).catch((err) => {\n\t\tconsole.log(err);\n\t\tif ('detail' in err) {\n\t\t\terror = err.detail;\n\t\t}\n\t\treturn null;\n\t});\n\n\tif (error) {\n\t\tthrow error;\n\t}\n\n\treturn res;\n};\n\nexport const generateEmbeddings = async (token: string = '', model: string, text: string) => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OLLAMA_API_BASE_URL}/api/embeddings`, {\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\tprompt: text\n\t\t})\n\t}).catch((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 generateTextCompletion = async (token: string = '', model: string, text: string) => {\n\tlet error = null;\n\n\tconst res = await fetch(`${OLLAMA_API_BASE_URL}/api/generate`, {\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\tprompt: text,\n\t\t\tstream: true\n\t\t})\n\t}).catch((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 generateChatCompletion = async (token: string = '', body: object) => {\n\tlet controller = new AbortController();\n\tlet error = null;\n\n\tconst res = await fetch(`${OLLAMA_API_BASE_URL}/api/chat`, {\n\t\tsignal: controller.signal,\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(body)\n\t}).catch((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 createModel = async (\n\ttoken: string,\n\ttagName: string,\n\tcontent: string,\n\turlIdx: string | null = null\n) => {\n\tlet error = null;\n\n\tconst res = await fetch(\n\t\t`${OLLAMA_API_BASE_URL}/api/create${urlIdx !== null ? `/${urlIdx}` : ''}`,\n\t\t{\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\tAccept: 'application/json',\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAuthorization: `Bearer ${token}`\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\tname: tagName,\n\t\t\t\tmodelfile: content\n\t\t\t})\n\t\t}\n\t).catch((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 deleteModel = async (token: string, tagName: string, urlIdx: string | null = null) => {\n\tlet error = null;\n\n\tconst res = await fetch(\n\t\t`${OLLAMA_API_BASE_URL}/api/delete${urlIdx !== null ? `/${urlIdx}` : ''}`,\n\t\t{\n\t\t\tmethod: 'DELETE',\n\t\t\theaders: {\n\t\t\t\tAccept: 'application/json',\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAuthorization: `Bearer ${token}`\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\tname: tagName\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.then((json) => {\n\t\t\tconsole.log(json);\n\t\t\treturn true;\n\t\t})\n\t\t.catch((err) => {\n\t\t\tconsole.log(err);\n\t\t\terror = err;\n\n\t\t\tif ('detail' in err) {\n\t\t\t\terror = err.detail;\n\t\t\t}\n\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 pullModel = async (token: string, tagName: string, urlIdx: string | null = null) => {\n\tlet error = null;\n\tconst controller = new AbortController();\n\n\tconst res = await fetch(`${OLLAMA_API_BASE_URL}/api/pull${urlIdx !== null ? `/${urlIdx}` : ''}`, {\n\t\tsignal: controller.signal,\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\tname: tagName\n\t\t})\n\t}).catch((err) => {\n\t\tconsole.log(err);\n\t\terror = err;\n\n\t\tif ('detail' in err) {\n\t\t\terror = err.detail;\n\t\t}\n\n\t\treturn null;\n\t});\n\tif (error) {\n\t\tthrow error;\n\t}\n\treturn [res, controller];\n};\n\nexport const downloadModel = async (\n\ttoken: string,\n\tdownload_url: string,\n\turlIdx: string | null = null\n) => {\n\tlet error = null;\n\n\tconst res = await fetch(\n\t\t`${OLLAMA_API_BASE_URL}/models/download${urlIdx !== null ? `/${urlIdx}` : ''}`,\n\t\t{\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\tAccept: 'application/json',\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAuthorization: `Bearer ${token}`\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\turl: download_url\n\t\t\t})\n\t\t}\n\t).catch((err) => {\n\t\tconsole.log(err);\n\t\terror = err;\n\n\t\tif ('detail' in err) {\n\t\t\terror = err.detail;\n\t\t}\n\n\t\treturn null;\n\t});\n\tif (error) {\n\t\tthrow error;\n\t}\n\treturn res;\n};\n\nexport const uploadModel = async (token: string, file: File, urlIdx: string | null = null) => {\n\tlet error = null;\n\n\tconst formData = new FormData();\n\tformData.append('file', file);\n\n\tconst res = await fetch(\n\t\t`${OLLAMA_API_BASE_URL}/models/upload${urlIdx !== null ? `/${urlIdx}` : ''}`,\n\t\t{\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${token}`\n\t\t\t},\n\t\t\tbody: formData\n\t\t}\n\t).catch((err) => {\n\t\tconsole.log(err);\n\t\terror = err;\n\n\t\tif ('detail' in err) {\n\t\t\terror = err.detail;\n\t\t}\n\n\t\treturn null;\n\t});\n\tif (error) {\n\t\tthrow error;\n\t}\n\treturn res;\n};\n\n// export const pullModel = async (token: string, tagName: string) => {\n// \treturn await fetch(`${OLLAMA_API_BASE_URL}/pull`, {\n// \t\tmethod: 'POST',\n// \t\theaders: {\n// \t\t\t'Content-Type': 'text/event-stream',\n// \t\t\tAuthorization: `Bearer ${token}`\n// \t\t},\n// \t\tbody: JSON.stringify({\n// \t\t\tname: tagName\n// \t\t})\n// \t});\n// };\n"],"names":["getOllamaConfig","token","error","res","OLLAMA_API_BASE_URL","err","updateOllamaConfig","enable_ollama_api","getOllamaUrls","updateOllamaUrls","urls","getOllamaVersion","urlIdx","generateChatCompletion","body","controller","createModel","tagName","content","deleteModel","json","pullModel","downloadModel","download_url","uploadModel","file","formData"],"mappings":"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"}