|
import { OPENAI_API_BASE_URL } from '$lib/constants'; |
|
|
|
export const getOpenAIConfig = async (token: string = '') => { |
|
let error = null; |
|
|
|
const res = await fetch(`${OPENAI_API_BASE_URL}/config`, { |
|
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; |
|
}; |
|
|
|
type OpenAIConfig = { |
|
ENABLE_OPENAI_API: boolean; |
|
OPENAI_API_BASE_URLS: string[]; |
|
OPENAI_API_KEYS: string[]; |
|
OPENAI_API_CONFIGS: object; |
|
}; |
|
|
|
export const updateOpenAIConfig = async (token: string = '', config: OpenAIConfig) => { |
|
let error = null; |
|
|
|
const res = await fetch(`${OPENAI_API_BASE_URL}/config/update`, { |
|
method: 'POST', |
|
headers: { |
|
Accept: 'application/json', |
|
'Content-Type': 'application/json', |
|
...(token && { authorization: `Bearer ${token}` }) |
|
}, |
|
body: JSON.stringify({ |
|
...config |
|
}) |
|
}) |
|
.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; |
|
}; |
|
|
|
export const getOpenAIUrls = async (token: string = '') => { |
|
let error = null; |
|
|
|
const res = await fetch(`${OPENAI_API_BASE_URL}/urls`, { |
|
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.OPENAI_API_BASE_URLS; |
|
}; |
|
|
|
export const updateOpenAIUrls = async (token: string = '', urls: string[]) => { |
|
let error = null; |
|
|
|
const res = await fetch(`${OPENAI_API_BASE_URL}/urls/update`, { |
|
method: 'POST', |
|
headers: { |
|
Accept: 'application/json', |
|
'Content-Type': 'application/json', |
|
...(token && { authorization: `Bearer ${token}` }) |
|
}, |
|
body: JSON.stringify({ |
|
urls: urls |
|
}) |
|
}) |
|
.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.OPENAI_API_BASE_URLS; |
|
}; |
|
|
|
export const getOpenAIKeys = async (token: string = '') => { |
|
let error = null; |
|
|
|
const res = await fetch(`${OPENAI_API_BASE_URL}/keys`, { |
|
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.OPENAI_API_KEYS; |
|
}; |
|
|
|
export const updateOpenAIKeys = async (token: string = '', keys: string[]) => { |
|
let error = null; |
|
|
|
const res = await fetch(`${OPENAI_API_BASE_URL}/keys/update`, { |
|
method: 'POST', |
|
headers: { |
|
Accept: 'application/json', |
|
'Content-Type': 'application/json', |
|
...(token && { authorization: `Bearer ${token}` }) |
|
}, |
|
body: JSON.stringify({ |
|
keys: keys |
|
}) |
|
}) |
|
.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.OPENAI_API_KEYS; |
|
}; |
|
|
|
export const getOpenAIModels = async (token: string, urlIdx?: number) => { |
|
let error = null; |
|
|
|
const res = await fetch( |
|
`${OPENAI_API_BASE_URL}/models${typeof urlIdx === 'number' ? `/${urlIdx}` : ''}`, |
|
{ |
|
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) => { |
|
error = `OpenAI: ${err?.error?.message ?? 'Network Problem'}`; |
|
return []; |
|
}); |
|
|
|
if (error) { |
|
throw error; |
|
} |
|
|
|
return res; |
|
}; |
|
|
|
export const verifyOpenAIConnection = async ( |
|
token: string = '', |
|
url: string = 'https://api.openai.com/v1', |
|
key: string = '' |
|
) => { |
|
let error = null; |
|
|
|
const res = await fetch(`${OPENAI_API_BASE_URL}/verify`, { |
|
method: 'POST', |
|
headers: { |
|
Accept: 'application/json', |
|
Authorization: `Bearer ${token}`, |
|
'Content-Type': 'application/json' |
|
}, |
|
body: JSON.stringify({ |
|
url, |
|
key |
|
}) |
|
}) |
|
.then(async (res) => { |
|
if (!res.ok) throw await res.json(); |
|
return res.json(); |
|
}) |
|
.catch((err) => { |
|
error = `OpenAI: ${err?.error?.message ?? 'Network Problem'}`; |
|
return []; |
|
}); |
|
|
|
if (error) { |
|
throw error; |
|
} |
|
|
|
return res; |
|
}; |
|
|
|
export const generateOpenAIChatCompletion = async ( |
|
token: string = '', |
|
body: object, |
|
url: string = OPENAI_API_BASE_URL |
|
): Promise<[Response | null, AbortController]> => { |
|
const controller = new AbortController(); |
|
let error = null; |
|
|
|
const res = await fetch(`${url}/chat/completions`, { |
|
signal: controller.signal, |
|
method: 'POST', |
|
headers: { |
|
Authorization: `Bearer ${token}`, |
|
'Content-Type': 'application/json' |
|
}, |
|
body: JSON.stringify(body) |
|
}).catch((err) => { |
|
console.log(err); |
|
error = err; |
|
return null; |
|
}); |
|
|
|
if (error) { |
|
throw error; |
|
} |
|
|
|
return [res, controller]; |
|
}; |
|
|
|
export const synthesizeOpenAISpeech = async ( |
|
token: string = '', |
|
speaker: string = 'alloy', |
|
text: string = '', |
|
model: string = 'tts-1' |
|
) => { |
|
let error = null; |
|
|
|
const res = await fetch(`${OPENAI_API_BASE_URL}/audio/speech`, { |
|
method: 'POST', |
|
headers: { |
|
Authorization: `Bearer ${token}`, |
|
'Content-Type': 'application/json' |
|
}, |
|
body: JSON.stringify({ |
|
model: model, |
|
input: text, |
|
voice: speaker |
|
}) |
|
}).catch((err) => { |
|
console.log(err); |
|
error = err; |
|
return null; |
|
}); |
|
|
|
if (error) { |
|
throw error; |
|
} |
|
|
|
return res; |
|
}; |
|
|