2023-12-26 11:28:30 +00:00
import { OLLAMA_API_BASE_URL } from '$lib/constants' ;
2024-01-04 21:06:31 +00:00
export const getOllamaAPIUrl = async ( token : string = '' ) = > {
2023-12-26 11:28:30 +00:00
let error = null ;
2024-01-04 21:06:31 +00:00
const res = await fetch ( ` ${ OLLAMA_API_BASE_URL } /url ` , {
method : 'GET' ,
headers : {
Accept : 'application/json' ,
'Content-Type' : 'application/json' ,
. . . ( token && { authorization : ` Bearer ${ token } ` } )
}
} )
. then ( async ( res ) = > {
if ( ! res . ok ) throw await res . json ( ) ;
return res . json ( ) ;
} )
. catch ( ( err ) = > {
console . log ( err ) ;
if ( 'detail' in err ) {
error = err . detail ;
} else {
error = 'Server connection failed' ;
}
return null ;
} ) ;
if ( error ) {
throw error ;
}
return res . OLLAMA_API_BASE_URL ;
} ;
export const updateOllamaAPIUrl = async ( token : string = '' , url : string ) = > {
let error = null ;
const res = await fetch ( ` ${ OLLAMA_API_BASE_URL } /url/update ` , {
method : 'POST' ,
headers : {
Accept : 'application/json' ,
'Content-Type' : 'application/json' ,
. . . ( token && { authorization : ` Bearer ${ token } ` } )
} ,
body : JSON.stringify ( {
url : url
} )
} )
. then ( async ( res ) = > {
if ( ! res . ok ) throw await res . json ( ) ;
return res . json ( ) ;
} )
. catch ( ( err ) = > {
console . log ( err ) ;
if ( 'detail' in err ) {
error = err . detail ;
} else {
error = 'Server connection failed' ;
}
return null ;
} ) ;
if ( error ) {
throw error ;
}
return res . OLLAMA_API_BASE_URL ;
} ;
export const getOllamaVersion = async ( token : string = '' ) = > {
let error = null ;
const res = await fetch ( ` ${ OLLAMA_API_BASE_URL } /version ` , {
2023-12-26 11:28:30 +00:00
method : 'GET' ,
headers : {
Accept : 'application/json' ,
'Content-Type' : 'application/json' ,
. . . ( token && { authorization : ` Bearer ${ token } ` } )
}
} )
. then ( async ( res ) = > {
if ( ! res . ok ) throw await res . json ( ) ;
return res . json ( ) ;
} )
2023-12-26 19:32:22 +00:00
. catch ( ( err ) = > {
console . log ( err ) ;
if ( 'detail' in err ) {
error = err . detail ;
2023-12-26 11:28:30 +00:00
} else {
error = 'Server connection failed' ;
}
return null ;
} ) ;
if ( error ) {
throw error ;
}
2023-12-26 21:10:50 +00:00
return res ? . version ? ? '' ;
2023-12-26 11:28:30 +00:00
} ;
2024-01-04 21:06:31 +00:00
export const getOllamaModels = async ( token : string = '' ) = > {
2023-12-26 11:28:30 +00:00
let error = null ;
2024-01-04 21:06:31 +00:00
const res = await fetch ( ` ${ OLLAMA_API_BASE_URL } /tags ` , {
2023-12-26 11:28:30 +00:00
method : 'GET' ,
headers : {
Accept : 'application/json' ,
'Content-Type' : 'application/json' ,
. . . ( token && { authorization : ` Bearer ${ token } ` } )
}
} )
. then ( async ( res ) = > {
if ( ! res . ok ) throw await res . json ( ) ;
return res . json ( ) ;
} )
2023-12-26 19:32:22 +00:00
. catch ( ( err ) = > {
console . log ( err ) ;
if ( 'detail' in err ) {
error = err . detail ;
2023-12-26 11:28:30 +00:00
} else {
error = 'Server connection failed' ;
}
return null ;
} ) ;
if ( error ) {
throw error ;
}
2024-01-04 07:46:49 +00:00
return ( res ? . models ? ? [ ] ) . sort ( ( a , b ) = > {
return a . name . localeCompare ( b . name ) ;
} ) ;
2023-12-26 11:28:30 +00:00
} ;
2023-12-26 20:50:52 +00:00
2024-01-04 21:06:31 +00:00
export const generateTitle = async ( token : string = '' , model : string , prompt : string ) = > {
2023-12-26 20:50:52 +00:00
let error = null ;
2024-01-04 21:06:31 +00:00
const res = await fetch ( ` ${ OLLAMA_API_BASE_URL } /generate ` , {
2023-12-26 20:50:52 +00:00
method : 'POST' ,
headers : {
'Content-Type' : 'text/event-stream' ,
Authorization : ` Bearer ${ token } `
} ,
body : JSON.stringify ( {
model : model ,
2024-01-05 20:22:27 +00:00
prompt : ` Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title': ${ prompt } ` ,
2023-12-26 20:50:52 +00:00
stream : false
} )
} )
. then ( async ( res ) = > {
if ( ! res . ok ) throw await res . json ( ) ;
return res . json ( ) ;
} )
. catch ( ( err ) = > {
console . log ( err ) ;
if ( 'detail' in err ) {
error = err . detail ;
}
return null ;
} ) ;
if ( error ) {
throw error ;
}
return res ? . response ? ? 'New Chat' ;
} ;
2024-01-04 21:06:31 +00:00
export const generateChatCompletion = async ( token : string = '' , body : object ) = > {
2023-12-26 20:50:52 +00:00
let error = null ;
2024-01-04 21:06:31 +00:00
const res = await fetch ( ` ${ OLLAMA_API_BASE_URL } /chat ` , {
2023-12-26 20:50:52 +00:00
method : 'POST' ,
headers : {
'Content-Type' : 'text/event-stream' ,
Authorization : ` Bearer ${ token } `
} ,
body : JSON.stringify ( body )
} ) . catch ( ( err ) = > {
error = err ;
return null ;
} ) ;
if ( error ) {
throw error ;
}
return res ;
} ;
2023-12-27 06:51:52 +00:00
2024-01-04 21:06:31 +00:00
export const createModel = async ( token : string , tagName : string , content : string ) = > {
2023-12-27 06:51:52 +00:00
let error = null ;
2024-01-04 21:06:31 +00:00
const res = await fetch ( ` ${ OLLAMA_API_BASE_URL } /create ` , {
2023-12-27 06:51:52 +00:00
method : 'POST' ,
headers : {
'Content-Type' : 'text/event-stream' ,
Authorization : ` Bearer ${ token } `
} ,
body : JSON.stringify ( {
name : tagName ,
modelfile : content
} )
} ) . catch ( ( err ) = > {
error = err ;
return null ;
} ) ;
if ( error ) {
throw error ;
}
return res ;
} ;
2024-01-04 21:06:31 +00:00
export const deleteModel = async ( token : string , tagName : string ) = > {
2023-12-27 06:51:52 +00:00
let error = null ;
2024-01-04 21:06:31 +00:00
const res = await fetch ( ` ${ OLLAMA_API_BASE_URL } /delete ` , {
2023-12-27 06:51:52 +00:00
method : 'DELETE' ,
headers : {
'Content-Type' : 'text/event-stream' ,
Authorization : ` Bearer ${ token } `
} ,
body : JSON.stringify ( {
name : tagName
} )
} )
. then ( async ( res ) = > {
if ( ! res . ok ) throw await res . json ( ) ;
return res . json ( ) ;
} )
. then ( ( json ) = > {
console . log ( json ) ;
return true ;
} )
. catch ( ( err ) = > {
console . log ( err ) ;
error = err . error ;
return null ;
} ) ;
if ( error ) {
throw error ;
}
return res ;
} ;
2024-01-04 21:06:31 +00:00
export const pullModel = async ( token : string , tagName : string ) = > {
let error = null ;
const res = await fetch ( ` ${ OLLAMA_API_BASE_URL } /pull ` , {
method : 'POST' ,
headers : {
'Content-Type' : 'text/event-stream' ,
Authorization : ` Bearer ${ token } `
} ,
body : JSON.stringify ( {
name : tagName
} )
} ) . catch ( ( err ) = > {
error = err ;
return null ;
} ) ;
if ( error ) {
throw error ;
}
return res ;
} ;