error handling improved in all APIs

This commit is contained in:
mic 2024-10-15 17:08:33 +02:00
parent 9fe528d6c8
commit 80eecda550
6 changed files with 118 additions and 79 deletions

View file

@ -57,13 +57,17 @@ self.onmessage = async function(event) {
if(response.is_exception === true){ if(response.is_exception === true){
error_message = response.error; error_message = response.error;
}else{ }else{
const errorJSON = await response.json(); try{
errorDetail = JSON.stringify(errorJSON); const errorJSON = await response.json();
error_message = errorJSON.error; errorDetail = JSON.stringify(errorJSON);
taLog.log("errorJSON.error.message: " + JSON.stringify(errorJSON.error.message)); error_message = errorJSON.error.message;
}catch(e){
error_message = response.statusText;
}
taLog.log("error_message: " + JSON.stringify(error_message));
} }
postMessage({ type: 'error', payload: i18nStrings["ollama_api_request_failed"] + ": " + error_message }); postMessage({ type: 'error', payload: i18nStrings["ollama_api_request_failed"] + ": " + response.status + " " + response.statusText + ", Detail: " + error_message + " " + errorDetail });
throw new Error("[ThunderAI] Ollama API request failed: " + response.status + " " + response.statusText + ", Detail: " + errorDetail); throw new Error("[ThunderAI] Ollama API request failed: " + response.status + " " + response.statusText + ", Detail: " + error_message + " " + errorDetail);
} }
const reader = response.body.getReader(); const reader = response.body.getReader();

View file

@ -52,13 +52,17 @@ self.onmessage = async function(event) {
if(response.is_exception === true){ if(response.is_exception === true){
error_message = response.error; error_message = response.error;
}else{ }else{
const errorJSON = await response.json(); try{
errorDetail = JSON.stringify(errorJSON); const errorJSON = await response.json();
error_message = errorJSON.error.message; errorDetail = JSON.stringify(errorJSON);
taLog.error("errorJSON.error.message: " + JSON.stringify(errorJSON.error.message)); error_message = errorJSON.error.message;
}catch(e){
error_message = response.statusText;
}
taLog.log("error_message: " + JSON.stringify(error_message));
} }
postMessage({ type: 'error', payload: error_message }); postMessage({ type: 'error', payload: i18nStrings["chatgpt_api_request_failed"] + ": " + response.status + " " + response.statusText + ", Detail: " + error_message + " " + errorDetail });
throw new Error("[ThunderAI] OpenAI API request failed: " + response.status + " " + response.statusText + ", Detail: " + errorDetail); throw new Error("[ThunderAI] OpenAI ChatGPT API request failed: " + response.status + " " + response.statusText + ", Detail: " + error_message + " " + errorDetail);
} }
const reader = response.body.getReader(); const reader = response.body.getReader();

View file

@ -58,13 +58,17 @@ self.onmessage = async function(event) {
if(response.is_exception === true){ if(response.is_exception === true){
error_message = response.error; error_message = response.error;
}else{ }else{
const errorJSON = await response.json(); try{
errorDetail = JSON.stringify(errorJSON); const errorJSON = await response.json();
error_message = errorJSON.error.message; errorDetail = JSON.stringify(errorJSON);
taLog.log("errorJSON.error.message: " + JSON.stringify(errorJSON.error.message)); error_message = errorJSON.error.message;
}catch(e){
error_message = response.statusText;
}
taLog.log("error_message: " + JSON.stringify(error_message));
} }
postMessage({ type: 'error', payload: i18nStrings["OpenAIComp_api_request_failed"] + ": " + error_message }); postMessage({ type: 'error', payload: i18nStrings["OpenAIComp_api_request_failed"] + ": " + response.status + " " + response.statusText + ", Detail: " + error_message + " " + errorDetail });
throw new Error("[ThunderAI] OpenAI Comp API request failed: " + response.status + " " + response.statusText + ", Detail: " + errorDetail); throw new Error("[ThunderAI] OpenAI Comp API request failed: " + response.status + " " + response.statusText + ", Detail: " + error_message + " " + errorDetail);
} }
const reader = response.body.getReader(); const reader = response.body.getReader();

View file

@ -29,31 +29,40 @@ export class Ollama {
} }
fetchModels = async () => { fetchModels = async () => {
const response = await fetch(this.host + "/api/tags", { try{
method: "GET", const response = await fetch(this.host + "/api/tags", {
headers: { method: "GET",
"Content-Type": "application/json" headers: {
}, "Content-Type": "application/json"
}); },
});
if (!response.ok) { if (!response.ok) {
const errorDetail = await response.text(); const errorDetail = await response.text();
let err_msg = "[ThunderAI] Ollama API request failed: " + response.status + " " + response.statusText + ", Detail: " + errorDetail; let err_msg = "[ThunderAI] Ollama API request failed: " + response.status + " " + response.statusText + ", Detail: " + errorDetail;
console.error(err_msg); console.error(err_msg);
let output = {}; let output = {};
output.ok = false; output.ok = false;
output.error = errorDetail; output.error = errorDetail;
return output; return output;
}
let output = {};
output.ok = true;
let output_response = await response.json();
output.response = output_response;
//console.log(">>>>>>>>>> output_response: " + JSON.stringify(output_response));
return output;
}catch (error) {
console.error("[ThunderAI] Ollama API request failed: " + error);
let output = {};
output.is_exception = true;
output.ok = false;
output.error = "Ollama API request failed: " + error;
return output;
} }
let output = {};
output.ok = true;
let output_response = await response.json();
output.response = output_response;
//console.log(">>>>>>>>>> output_response: " + JSON.stringify(output_response));
return output;
} }

View file

@ -33,30 +33,39 @@ export class OpenAI {
fetchModels = async () => { fetchModels = async () => {
const response = await fetch("https://api.openai.com/v1/models", { try{
method: "GET", const response = await fetch("https://api.openai.com/v1/models", {
headers: { method: "GET",
"Content-Type": "application/json", headers: {
Authorization: "Bearer "+ this.apiKey "Content-Type": "application/json",
}, Authorization: "Bearer "+ this.apiKey
}); },
});
if (!response.ok) { if (!response.ok) {
const errorDetail = await response.text(); const errorDetail = await response.text();
let err_msg = "[ThunderAI] OpenAI API request failed: " + response.status + " " + response.statusText + ", Detail: " + errorDetail; let err_msg = "[ThunderAI] OpenAI API request failed: " + response.status + " " + response.statusText + ", Detail: " + errorDetail;
console.error(err_msg); console.error(err_msg);
let output = {}; let output = {};
output.ok = false; output.ok = false;
output.error = errorDetail; output.error = errorDetail;
return output; return output;
}
let output = {};
output.ok = true;
let output_response = await response.json();
output.response = output_response.data.filter(item => item.id.startsWith('gpt-')).sort((a, b) => b.id.localeCompare(a.id));
return output;
}catch (error) {
console.error("[ThunderAI] OpenAI API request failed: " + error);
let output = {};
output.is_exception = true;
output.ok = false;
output.error = "OpenAI API request failed: " + error;
return output;
} }
let output = {};
output.ok = true;
let output_response = await response.json();
output.response = output_response.data.filter(item => item.id.startsWith('gpt-')).sort((a, b) => b.id.localeCompare(a.id));
return output;
} }
fetchResponse = async (messages, maxTokens = 0) => { fetchResponse = async (messages, maxTokens = 0) => {

View file

@ -66,23 +66,32 @@ export class OpenAIComp {
} }
fetchResponse = async (messages, maxTokens = 0) => { fetchResponse = async (messages, maxTokens = 0) => {
const curr_headers = { try{
"Content-Type": "application/json", const curr_headers = {
}; "Content-Type": "application/json",
if(this.apiKey !== '') curr_headers["Authorization"] = "Bearer "+ this.apiKey; };
if(this.apiKey !== '') curr_headers["Authorization"] = "Bearer "+ this.apiKey;
try { try {
const response = await fetch(this.host + (this.use_v1 ? "/v1" : "") + "/chat/completions", { const response = await fetch(this.host + (this.use_v1 ? "/v1" : "") + "/chat/completions", {
method: "POST", method: "POST",
headers: curr_headers, headers: curr_headers,
body: JSON.stringify({ body: JSON.stringify({
model: this.model, model: this.model,
messages: messages, messages: messages,
stream: this.stream, stream: this.stream,
...(maxTokens > 0 ? { 'max_tokens': parseInt(maxTokens) } : {}) ...(maxTokens > 0 ? { 'max_tokens': parseInt(maxTokens) } : {})
}), }),
}); });
return response; return response;
}catch (error) {
console.error("[ThunderAI] OpenAI API Comp request failed: " + error);
let output = {};
output.is_exception = true;
output.ok = false;
output.error = "OpenAI API Comp request failed: " + error;
return output;
}
}catch (error) { }catch (error) {
console.error("[ThunderAI] OpenAI API Comp request failed: " + error); console.error("[ThunderAI] OpenAI API Comp request failed: " + error);
let output = {}; let output = {};