apexify.js 4.1.5 → 4.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"Gemini-flash.d.ts","sourceRoot":"","sources":["../../../lib/ai/modals-chat/Gemini-flash.ts"],"names":[],"mappings":"AAUA,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAG,EAAE,EAAE,EAAE;IAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CA8KpP"}
1
+ {"version":3,"file":"Gemini-flash.d.ts","sourceRoot":"","sources":["../../../lib/ai/modals-chat/Gemini-flash.ts"],"names":[],"mappings":"AAUA,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,EAAE,EAAE,EAAE;IAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAsMnP"}
@@ -13,27 +13,28 @@ const verse_db_1 = require("verse.db");
13
13
  const axios_1 = __importDefault(require("axios"));
14
14
  let currentApiKeyIndex = 0;
15
15
  async function geminiFlash(message, AI) {
16
- var _a, _b, _c, _d, _e;
17
- let db;
18
- if (message.db) {
19
- db = new verse_db_1.connect({ adapter: 'json', dataPath: `${message.serverId}_ChatHistory` });
16
+ async function validateKey(apiKey) {
17
+ try {
18
+ const validateResponse = await axios_1.default.get(`https://generativelanguage.googleapis.com/v1beta/models?key=${apiKey}`);
19
+ return validateResponse.status === 200;
20
+ }
21
+ catch (error) {
22
+ console.error(`Error validating API key: ${apiKey}`, error);
23
+ return false;
24
+ }
20
25
  }
21
- try {
22
- let apiKeyIndex = currentApiKeyIndex;
23
- let genAI;
24
- while (apiKeyIndex < config_1.default.apiKeys.length) {
25
- const validateKey = await axios_1.default.get(`https://generativelanguage.googleapis.com/v1beta/models?key=${config_1.default.apiKeys[apiKeyIndex]}`);
26
- if (validateKey.status === 200) {
27
- genAI = new generative_ai_1.GoogleGenerativeAI(config_1.default.apiKeys[apiKeyIndex]);
28
- break;
26
+ async function getValidGenAI(apiKeys, initialIndex) {
27
+ for (let i = initialIndex; i < apiKeys.length; i++) {
28
+ const apiKey = apiKeys[i];
29
+ if (await validateKey(apiKey)) {
30
+ currentApiKeyIndex = i;
31
+ return new generative_ai_1.GoogleGenerativeAI(apiKey);
29
32
  }
30
- else {
31
- apiKeyIndex++;
32
- }
33
- }
34
- if (apiKeyIndex === config_1.default.apiKeys.length) {
35
- return 'All provided API keys are invalid.';
36
33
  }
34
+ return null;
35
+ }
36
+ async function processRequest(genAI) {
37
+ var _a, _b;
37
38
  let personalityString = '';
38
39
  if (AI.AiPersonality) {
39
40
  const personalityFilePath = path_1.default.join(process.cwd(), AI.AiPersonality);
@@ -62,7 +63,7 @@ async function geminiFlash(message, AI) {
62
63
  },
63
64
  ];
64
65
  const systemInstruction = `${personalityString}\n And working on discord in serverName: ${message.serverName} at channelName: ${message.channelName} and responding to the userName: <@${message.userId}>`;
65
- const model = genAI.getGenerativeModel({ model: "gemini-1.5-pro-latest", systemInstruction, generationConfig, safetySettings });
66
+ const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash-latest", systemInstruction, generationConfig, safetySettings });
66
67
  const defaultHistory = [
67
68
  {
68
69
  role: "user",
@@ -78,11 +79,11 @@ async function geminiFlash(message, AI) {
78
79
  },
79
80
  {
80
81
  role: "model",
81
- parts: [{ text: `Yes, i save chat history for each user if it is enabled in my configuration otherwise no data being saved.` }],
82
+ parts: [{ text: `Yes, I save chat history for each user if it is enabled in my configuration otherwise no data being saved.` }],
82
83
  },
83
84
  {
84
85
  role: "user",
85
- parts: [{ text: `How is your data/memory/chat history is managed` }],
86
+ parts: [{ text: `How is your data/memory/chat history managed?` }],
86
87
  },
87
88
  {
88
89
  role: "model",
@@ -90,21 +91,17 @@ async function geminiFlash(message, AI) {
90
91
  }
91
92
  ];
92
93
  let historyData = undefined;
94
+ let db;
93
95
  if (message.db) {
94
96
  db = new verse_db_1.connect({ adapter: 'json', dataPath: `${message.serverId}_ChatHistory` });
95
97
  const data = await db.find(`${message.userId}_chatHistory`, { userId: message.userId });
96
- if (!((_a = data.results) === null || _a === void 0 ? void 0 : _a.history) || ((_c = (_b = data.results) === null || _b === void 0 ? void 0 : _b.history) === null || _c === void 0 ? void 0 : _c.length) === 0) {
97
- await db.update(`${message.userId}_chatHistory`, { userId: message.userId }, { $set: { history: [] } }, true);
98
- }
99
- else {
100
- historyData = ((_d = data.results) === null || _d === void 0 ? void 0 : _d.history) || undefined;
101
- }
98
+ historyData = ((_a = data.results) === null || _a === void 0 ? void 0 : _a.history) || undefined;
102
99
  }
103
100
  const chat = model.startChat({
104
101
  history: historyData || defaultHistory,
105
102
  generationConfig
106
103
  });
107
- const imgURL = ((_e = message.attachment) === null || _e === void 0 ? void 0 : _e.url) || null;
104
+ const imgURL = ((_b = message.attachment) === null || _b === void 0 ? void 0 : _b.url) || null;
108
105
  let result;
109
106
  if (imgURL) {
110
107
  const imageData = await urlToBase64(imgURL);
@@ -121,7 +118,7 @@ async function geminiFlash(message, AI) {
121
118
  }
122
119
  const response = await result.response.text();
123
120
  if (message.db) {
124
- const updateQuery_1 = {
121
+ const userHistory = {
125
122
  $push: {
126
123
  "history": {
127
124
  role: "user",
@@ -129,8 +126,8 @@ async function geminiFlash(message, AI) {
129
126
  }
130
127
  },
131
128
  };
132
- historyData = await db.update(`${message.userId}_chatHistory`, { userId: message.userId }, updateQuery_1, true);
133
- const updateQuery_2 = {
129
+ historyData = await db.update(`${message.userId}_chatHistory`, { userId: message.userId }, userHistory, true);
130
+ const modelHistory = {
134
131
  $push: {
135
132
  "history": {
136
133
  role: "model",
@@ -138,17 +135,46 @@ async function geminiFlash(message, AI) {
138
135
  }
139
136
  },
140
137
  };
141
- historyData = await db.update(`${message.userId}_chatHistory`, { userId: message.userId }, updateQuery_2, true);
138
+ historyData = await db.update(`${message.userId}_chatHistory`, { userId: message.userId }, modelHistory, true);
142
139
  }
143
140
  return response;
144
141
  }
142
+ async function urlToBase64(imageURL) {
143
+ try {
144
+ const convertedBuffer = await (0, general_functions_1.converter)(imageURL, 'png');
145
+ const base64String = convertedBuffer.toString('base64');
146
+ return base64String;
147
+ }
148
+ catch (error) {
149
+ throw new Error(`Failed to fetch and convert the image: ${error.message}`);
150
+ }
151
+ }
152
+ try {
153
+ let genAI;
154
+ if (AI.API_KEY && await validateKey(AI.API_KEY)) {
155
+ genAI = new generative_ai_1.GoogleGenerativeAI(AI.API_KEY);
156
+ }
157
+ else {
158
+ genAI = await getValidGenAI(config_1.default.apiKeys, currentApiKeyIndex);
159
+ if (!genAI) {
160
+ return 'All provided API keys are invalid.';
161
+ }
162
+ }
163
+ return await processRequest(genAI);
164
+ }
145
165
  catch (e) {
146
166
  if (e.message) {
147
- if (e.message === '[GoogleGenerativeAI Error]: Error fetching from https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent: [400 Bad Request] User location is not supported for the API use.') {
148
- return `The hoster/bot owner/the used host isn't supported by gemini.`;
167
+ if (e.status === 429 || e.status === 403) {
168
+ currentApiKeyIndex++;
169
+ if (currentApiKeyIndex < config_1.default.apiKeys.length) {
170
+ return await geminiFlash(message, AI);
171
+ }
172
+ else {
173
+ return 'Ai is on a cooldown for the rest of the day. Either provide your own API key or wait for tomorrow. Check ai.google.dev for free apikeys';
174
+ }
149
175
  }
150
- else if (e.response && (e.response.status === 429 || e.response.status === 403)) {
151
- return 'Ai is on a cooldown for the rest of the day. Either provide your own API key or wait for tomorrow. Check ai.google.dev for free apikeys';
176
+ else if (e.status === 400) {
177
+ return `The hoster/bot owner/the used host isn't supported by gemini.`;
152
178
  }
153
179
  else if (e.message === '[GoogleGenerativeAI Error]: Candidate was blocked due to SAFETY') {
154
180
  console.error(e);
@@ -166,14 +192,4 @@ async function geminiFlash(message, AI) {
166
192
  }
167
193
  }
168
194
  exports.geminiFlash = geminiFlash;
169
- async function urlToBase64(imageURL) {
170
- try {
171
- const convertedBuffer = await (0, general_functions_1.converter)(imageURL, 'png');
172
- const base64String = convertedBuffer.toString('base64');
173
- return base64String;
174
- }
175
- catch (error) {
176
- throw new Error(`Failed to fetch and convert the image: ${error.message}`);
177
- }
178
- }
179
195
  //# sourceMappingURL=Gemini-flash.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Gemini-flash.js","sourceRoot":"","sources":["../../../lib/ai/modals-chat/Gemini-flash.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Gemini-flash.js","sourceRoot":"","sources":["../../../lib/ai/modals-chat/Gemini-flash.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Gemini-pro.d.ts","sourceRoot":"","sources":["../../../lib/ai/modals-chat/Gemini-pro.ts"],"names":[],"mappings":"AAUA,wBAAsB,SAAS,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAG,EAAE,EAAE,EAAE;IAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CA8KlP"}
1
+ {"version":3,"file":"Gemini-pro.d.ts","sourceRoot":"","sources":["../../../lib/ai/modals-chat/Gemini-pro.ts"],"names":[],"mappings":"AAUA,wBAAsB,SAAS,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,EAAE,EAAE,EAAE;IAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAsMjP"}
@@ -13,27 +13,28 @@ const verse_db_1 = require("verse.db");
13
13
  const axios_1 = __importDefault(require("axios"));
14
14
  let currentApiKeyIndex = 0;
15
15
  async function geminiPro(message, AI) {
16
- var _a, _b, _c, _d, _e;
17
- let db;
18
- if (message.db) {
19
- db = new verse_db_1.connect({ adapter: 'json', dataPath: `${message.serverId}_ChatHistory` });
16
+ async function validateKey(apiKey) {
17
+ try {
18
+ const validateResponse = await axios_1.default.get(`https://generativelanguage.googleapis.com/v1beta/models?key=${apiKey}`);
19
+ return validateResponse.status === 200;
20
+ }
21
+ catch (error) {
22
+ console.error(`Error validating API key: ${apiKey}`, error);
23
+ return false;
24
+ }
20
25
  }
21
- try {
22
- let apiKeyIndex = currentApiKeyIndex;
23
- let genAI;
24
- while (apiKeyIndex < config_1.default.apiKeys.length) {
25
- const validateKey = await axios_1.default.get(`https://generativelanguage.googleapis.com/v1beta/models?key=${config_1.default.apiKeys[apiKeyIndex]}`);
26
- if (validateKey.status === 200) {
27
- genAI = new generative_ai_1.GoogleGenerativeAI(config_1.default.apiKeys[apiKeyIndex]);
28
- break;
26
+ async function getValidGenAI(apiKeys, initialIndex) {
27
+ for (let i = initialIndex; i < apiKeys.length; i++) {
28
+ const apiKey = apiKeys[i];
29
+ if (await validateKey(apiKey)) {
30
+ currentApiKeyIndex = i;
31
+ return new generative_ai_1.GoogleGenerativeAI(apiKey);
29
32
  }
30
- else {
31
- apiKeyIndex++;
32
- }
33
- }
34
- if (apiKeyIndex === config_1.default.apiKeys.length) {
35
- return 'All provided API keys are invalid.';
36
33
  }
34
+ return null;
35
+ }
36
+ async function processRequest(genAI) {
37
+ var _a, _b;
37
38
  let personalityString = '';
38
39
  if (AI.AiPersonality) {
39
40
  const personalityFilePath = path_1.default.join(process.cwd(), AI.AiPersonality);
@@ -78,11 +79,11 @@ async function geminiPro(message, AI) {
78
79
  },
79
80
  {
80
81
  role: "model",
81
- parts: [{ text: `Yes, i save chat history for each user if it is enabled in my configuration otherwise no data being saved.` }],
82
+ parts: [{ text: `Yes, I save chat history for each user if it is enabled in my configuration otherwise no data being saved.` }],
82
83
  },
83
84
  {
84
85
  role: "user",
85
- parts: [{ text: `How is your data/memory/chat history is managed` }],
86
+ parts: [{ text: `How is your data/memory/chat history managed?` }],
86
87
  },
87
88
  {
88
89
  role: "model",
@@ -90,21 +91,17 @@ async function geminiPro(message, AI) {
90
91
  }
91
92
  ];
92
93
  let historyData = undefined;
94
+ let db;
93
95
  if (message.db) {
94
96
  db = new verse_db_1.connect({ adapter: 'json', dataPath: `${message.serverId}_ChatHistory` });
95
97
  const data = await db.find(`${message.userId}_chatHistory`, { userId: message.userId });
96
- if (!((_a = data.results) === null || _a === void 0 ? void 0 : _a.history) || ((_c = (_b = data.results) === null || _b === void 0 ? void 0 : _b.history) === null || _c === void 0 ? void 0 : _c.length) === 0) {
97
- await db.update(`${message.userId}_chatHistory`, { userId: message.userId }, { $set: { history: [] } }, true);
98
- }
99
- else {
100
- historyData = ((_d = data.results) === null || _d === void 0 ? void 0 : _d.history) || undefined;
101
- }
98
+ historyData = ((_a = data.results) === null || _a === void 0 ? void 0 : _a.history) || undefined;
102
99
  }
103
100
  const chat = model.startChat({
104
101
  history: historyData || defaultHistory,
105
102
  generationConfig
106
103
  });
107
- const imgURL = ((_e = message.attachment) === null || _e === void 0 ? void 0 : _e.url) || null;
104
+ const imgURL = ((_b = message.attachment) === null || _b === void 0 ? void 0 : _b.url) || null;
108
105
  let result;
109
106
  if (imgURL) {
110
107
  const imageData = await urlToBase64(imgURL);
@@ -121,7 +118,7 @@ async function geminiPro(message, AI) {
121
118
  }
122
119
  const response = await result.response.text();
123
120
  if (message.db) {
124
- const updateQuery_1 = {
121
+ const userHistory = {
125
122
  $push: {
126
123
  "history": {
127
124
  role: "user",
@@ -129,8 +126,8 @@ async function geminiPro(message, AI) {
129
126
  }
130
127
  },
131
128
  };
132
- historyData = await db.update(`${message.userId}_chatHistory`, { userId: message.userId }, updateQuery_1, true);
133
- const updateQuery_2 = {
129
+ historyData = await db.update(`${message.userId}_chatHistory`, { userId: message.userId }, userHistory, true);
130
+ const modelHistory = {
134
131
  $push: {
135
132
  "history": {
136
133
  role: "model",
@@ -138,17 +135,46 @@ async function geminiPro(message, AI) {
138
135
  }
139
136
  },
140
137
  };
141
- historyData = await db.update(`${message.userId}_chatHistory`, { userId: message.userId }, updateQuery_2, true);
138
+ historyData = await db.update(`${message.userId}_chatHistory`, { userId: message.userId }, modelHistory, true);
142
139
  }
143
140
  return response;
144
141
  }
142
+ async function urlToBase64(imageURL) {
143
+ try {
144
+ const convertedBuffer = await (0, general_functions_1.converter)(imageURL, 'png');
145
+ const base64String = convertedBuffer.toString('base64');
146
+ return base64String;
147
+ }
148
+ catch (error) {
149
+ throw new Error(`Failed to fetch and convert the image: ${error.message}`);
150
+ }
151
+ }
152
+ try {
153
+ let genAI;
154
+ if (AI.API_KEY && await validateKey(AI.API_KEY)) {
155
+ genAI = new generative_ai_1.GoogleGenerativeAI(AI.API_KEY);
156
+ }
157
+ else {
158
+ genAI = await getValidGenAI(config_1.default.apiKeys, currentApiKeyIndex);
159
+ if (!genAI) {
160
+ return 'All provided API keys are invalid.';
161
+ }
162
+ }
163
+ return await processRequest(genAI);
164
+ }
145
165
  catch (e) {
146
166
  if (e.message) {
147
- if (e.message === '[GoogleGenerativeAI Error]: Error fetching from https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent: [400 Bad Request] User location is not supported for the API use.') {
148
- return `The hoster/bot owner/the used host isn't supported by gemini.`;
167
+ if (e.status === 429 || e.status === 403) {
168
+ currentApiKeyIndex++;
169
+ if (currentApiKeyIndex < config_1.default.apiKeys.length) {
170
+ return await geminiPro(message, AI);
171
+ }
172
+ else {
173
+ return 'Ai is on a cooldown for the rest of the day. Either provide your own API key or wait for tomorrow. Check ai.google.dev for free apikeys';
174
+ }
149
175
  }
150
- else if (e.response && (e.response.status === 429 || e.response.status === 403)) {
151
- return 'Ai is on a cooldown for the rest of the day. Either provide your own API key or wait for tomorrow. Check ai.google.dev for free apikeys';
176
+ else if (e.status === 400) {
177
+ return `The hoster/bot owner/the used host isn't supported by gemini.`;
152
178
  }
153
179
  else if (e.message === '[GoogleGenerativeAI Error]: Candidate was blocked due to SAFETY') {
154
180
  console.error(e);
@@ -166,14 +192,4 @@ async function geminiPro(message, AI) {
166
192
  }
167
193
  }
168
194
  exports.geminiPro = geminiPro;
169
- async function urlToBase64(imageURL) {
170
- try {
171
- const convertedBuffer = await (0, general_functions_1.converter)(imageURL, 'png');
172
- const base64String = convertedBuffer.toString('base64');
173
- return base64String;
174
- }
175
- catch (error) {
176
- throw new Error(`Failed to fetch and convert the image: ${error.message}`);
177
- }
178
- }
179
195
  //# sourceMappingURL=Gemini-pro.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Gemini-pro.js","sourceRoot":"","sources":["../../../lib/ai/modals-chat/Gemini-pro.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Gemini-pro.js","sourceRoot":"","sources":["../../../lib/ai/modals-chat/Gemini-pro.ts"],"names":[],"mappings":"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"}
@@ -3,195 +3,207 @@ import path from 'path';
3
3
  import fs from 'fs';
4
4
  import config from './config';
5
5
  import { converter } from "../../canvas/utils/general functions";
6
- import { connect } from "verse.db";
6
+ import { connect } from "verse.db";
7
7
  import axios from "axios";
8
8
 
9
9
  let currentApiKeyIndex = 0;
10
10
 
11
- export async function geminiFlash(message: { userId: string, serverName: string, serverId: string, channelName: string, attachment: any, db: boolean }, AI: { AiPersonality: string | null, userMsg: string, API_KEY: string | null }): Promise<any> {
11
+ export async function geminiFlash(message: { userId: string, serverName: string, serverId: string, channelName: string, attachment: any, db: boolean }, AI: { AiPersonality: string | null, userMsg: string, API_KEY: string | null }): Promise<any> {
12
12
 
13
- let db: any;
13
+ async function validateKey(apiKey: string) {
14
+ try {
15
+ const validateResponse = await axios.get(`https://generativelanguage.googleapis.com/v1beta/models?key=${apiKey}`);
16
+ return validateResponse.status === 200;
17
+ } catch (error) {
18
+ console.error(`Error validating API key: ${apiKey}`, error);
19
+ return false;
20
+ }
21
+ }
14
22
 
15
- if (message.db) {
16
- db = new connect({ adapter: 'json', dataPath: `${message.serverId}_ChatHistory` });
23
+ async function getValidGenAI(apiKeys: string[], initialIndex: number): Promise<any> {
24
+ for (let i = initialIndex; i < apiKeys.length; i++) {
25
+ const apiKey = apiKeys[i];
26
+ if (await validateKey(apiKey)) {
27
+ currentApiKeyIndex = i;
28
+ return new GoogleGenerativeAI(apiKey);
29
+ }
17
30
  }
31
+ return null;
32
+ }
18
33
 
19
- try {
20
- let apiKeyIndex = currentApiKeyIndex;
21
- let genAI: any;
22
- while (apiKeyIndex < config.apiKeys.length) {
23
- const validateKey = await axios.get(`https://generativelanguage.googleapis.com/v1beta/models?key=${config.apiKeys[apiKeyIndex]}`);
24
- if (validateKey.status === 200) {
25
- genAI = new GoogleGenerativeAI(config.apiKeys[apiKeyIndex]);
26
-
27
- break;
28
- } else {
29
- apiKeyIndex++;
30
- }
31
- }
34
+ async function processRequest(genAI: any): Promise<any> {
35
+ let personalityString = '';
32
36
 
33
- if (apiKeyIndex === config.apiKeys.length) {
34
- return 'All provided API keys are invalid.';
35
- }
36
- let personalityString: string = '';
37
-
38
37
  if (AI.AiPersonality) {
39
- const personalityFilePath = path.join(process.cwd(), AI.AiPersonality);
40
- const personalityContent = fs.readFileSync(personalityFilePath, 'utf-8');
41
- personalityString = personalityContent.split('\n').join(' ');
38
+ const personalityFilePath = path.join(process.cwd(), AI.AiPersonality);
39
+ const personalityContent = fs.readFileSync(personalityFilePath, 'utf-8');
40
+ personalityString = personalityContent.split('\n').join(' ');
42
41
  }
43
42
 
44
43
  const generationConfig = {
45
- maxOutputTokens: 750,
44
+ maxOutputTokens: 750,
46
45
  };
47
46
 
48
47
  const safetySettings = [
49
- {
50
- category: HarmCategory.HARM_CATEGORY_HARASSMENT,
51
- threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
52
- },
53
- {
54
- category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
55
- threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
56
- },
57
- {
58
- category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
59
- threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
60
- },
61
- {
62
- category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
63
- threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
64
- },
48
+ {
49
+ category: HarmCategory.HARM_CATEGORY_HARASSMENT,
50
+ threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
51
+ },
52
+ {
53
+ category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
54
+ threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
55
+ },
56
+ {
57
+ category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
58
+ threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
59
+ },
60
+ {
61
+ category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
62
+ threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
63
+ },
65
64
  ];
66
65
 
67
66
  const systemInstruction = `${personalityString}\n And working on discord in serverName: ${message.serverName} at channelName: ${message.channelName} and responding to the userName: <@${message.userId}>`;
68
- const model = genAI.getGenerativeModel({ model: "gemini-1.5-pro-latest", systemInstruction, generationConfig, safetySettings });
67
+ const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash-latest", systemInstruction, generationConfig, safetySettings });
69
68
 
70
69
  const defaultHistory = [
71
- {
72
- role: "user",
73
- parts: [{ text: `Hey who are you?` }],
74
- },
75
- {
76
- role: "model",
77
- parts: [{ text: `I am an AI assistant built/developed/created by Apexify.js` }],
78
- },
79
- {
80
- role: "user",
81
- parts: [{ text: `You have chat Memory?` }],
82
- },
83
- {
84
- role: "model",
85
- parts: [{ text: `Yes, i save chat history for each user if it is enabled in my configuration otherwise no data being saved.` }],
86
- },
87
- {
88
- role: "user",
89
- parts: [{ text: `How is your data/memory/chat history is managed` }],
90
- },
91
- {
92
- role: "model",
93
- parts: [{ text: `It is managed by verse.db. A database used to manage JSON/SQL/YAML/SQOL database with ease and supports schema/schemaless data.` }],
94
- }
70
+ {
71
+ role: "user",
72
+ parts: [{ text: `Hey who are you?` }],
73
+ },
74
+ {
75
+ role: "model",
76
+ parts: [{ text: `I am an AI assistant built/developed/created by Apexify.js` }],
77
+ },
78
+ {
79
+ role: "user",
80
+ parts: [{ text: `You have chat Memory?` }],
81
+ },
82
+ {
83
+ role: "model",
84
+ parts: [{ text: `Yes, I save chat history for each user if it is enabled in my configuration otherwise no data being saved.` }],
85
+ },
86
+ {
87
+ role: "user",
88
+ parts: [{ text: `How is your data/memory/chat history managed?` }],
89
+ },
90
+ {
91
+ role: "model",
92
+ parts: [{ text: `It is managed by verse.db. A database used to manage JSON/SQL/YAML/SQOL database with ease and supports schema/schemaless data.` }],
93
+ }
95
94
  ];
96
95
 
97
96
  let historyData: any[] | undefined = undefined;
98
97
 
98
+ let db: any;
99
99
  if (message.db) {
100
- db = new connect({ adapter: 'json', dataPath: `${message.serverId}_ChatHistory` });
101
-
102
- const data = await db.find(`${message.userId}_chatHistory`, { userId: message.userId });
103
-
104
- if (!data.results?.history || data.results?.history?.length === 0) {
105
- await db.update(`${message.userId}_chatHistory`, { userId: message.userId }, { $set: { history: [] } }, true);
106
- } else {
107
- historyData = data.results?.history || undefined;
108
- }
100
+ db = new connect({ adapter: 'json', dataPath: `${message.serverId}_ChatHistory` });
101
+ const data = await db.find(`${message.userId}_chatHistory`, { userId: message.userId });
102
+ historyData = data.results?.history || undefined;
109
103
  }
110
104
 
111
105
  const chat = model.startChat({
112
106
  history: historyData || defaultHistory,
113
107
  generationConfig
114
108
  });
115
-
109
+
116
110
  const imgURL = message.attachment?.url || null;
117
111
  let result: any;
118
112
 
119
113
  if (imgURL) {
120
- const imageData = await urlToBase64(imgURL)
121
- const image = {
122
- inlineData: {
123
- data: imageData,
124
- mimeType: "image/png",
125
- },
126
- };
127
- result = await chat.sendMessage([AI.userMsg, image]);
114
+ const imageData = await urlToBase64(imgURL);
115
+ const image = {
116
+ inlineData: {
117
+ data: imageData,
118
+ mimeType: "image/png",
119
+ },
120
+ };
121
+ result = await chat.sendMessage([AI.userMsg, image]);
128
122
  } else {
129
- result = await chat.sendMessage(AI.userMsg);
123
+ result = await chat.sendMessage(AI.userMsg);
130
124
  }
131
125
 
132
- const response = await result.response.text();
126
+ const response = await result.response.text();
133
127
 
134
128
  if (message.db) {
135
-
136
- const updateQuery_1 = {
137
- $push: {
138
- "history": {
139
- role: "user",
140
- parts: [{ text: `${AI.userMsg}` }]
141
- }
142
- },
143
- };
144
-
145
- historyData = await db.update(`${message.userId}_chatHistory`,
146
- { userId: message.userId },
147
- updateQuery_1, true
148
- );
149
-
150
- const updateQuery_2 = {
151
- $push: {
152
- "history": {
153
- role: "model",
154
- parts: [{ text: `${response}` }]
155
- }
156
- },
157
- };
158
-
159
- historyData = await db.update(`${message.userId}_chatHistory`,
129
+ const userHistory = {
130
+ $push: {
131
+ "history": {
132
+ role: "user",
133
+ parts: [{ text: `${AI.userMsg}` }]
134
+ }
135
+ },
136
+ };
137
+
138
+ historyData = await db.update(`${message.userId}_chatHistory`,
139
+ { userId: message.userId },
140
+ userHistory,
141
+ true
142
+ );
143
+
144
+ const modelHistory = {
145
+ $push: {
146
+ "history": {
147
+ role: "model",
148
+ parts: [{ text: `${response}` }]
149
+ }
150
+ },
151
+ };
152
+
153
+ historyData = await db.update(`${message.userId}_chatHistory`,
160
154
  { userId: message.userId },
161
- updateQuery_2,
155
+ modelHistory,
162
156
  true
163
- );
157
+ );
164
158
  }
165
159
 
166
160
  return response;
167
- } catch (e: any) {
161
+ }
162
+
163
+ async function urlToBase64(imageURL: string) {
164
+ try {
165
+ const convertedBuffer = await converter(imageURL, 'png');
166
+ const base64String = convertedBuffer.toString('base64');
167
+ return base64String;
168
+ } catch (error: any) {
169
+ throw new Error(`Failed to fetch and convert the image: ${error.message}`);
170
+ }
171
+ }
172
+
173
+ try {
174
+ let genAI: any;
175
+
176
+ if (AI.API_KEY && await validateKey(AI.API_KEY)) {
177
+ genAI = new GoogleGenerativeAI(AI.API_KEY);
178
+ } else {
179
+ genAI = await getValidGenAI(config.apiKeys, currentApiKeyIndex);
180
+ if (!genAI) {
181
+ return 'All provided API keys are invalid.';
182
+ }
183
+ }
184
+
185
+ return await processRequest(genAI);
186
+ } catch (e: any) {
168
187
  if (e.message) {
169
- if (e.message === '[GoogleGenerativeAI Error]: Error fetching from https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent: [400 Bad Request] User location is not supported for the API use.') {
170
- return `The hoster/bot owner/the used host isn't supported by gemini.`;
171
- } else if (e.response && (e.response.status === 429 || e.response.status === 403)) {
172
- return 'Ai is on a cooldown for the rest of the day. Either provide your own API key or wait for tomorrow. Check ai.google.dev for free apikeys';
173
- } else if (e.message === '[GoogleGenerativeAI Error]: Candidate was blocked due to SAFETY') {
174
- console.error(e);
175
- return `Due to safety enabled by gemini you have been blocked.`;
188
+ if (e.status === 429 || e.status === 403) {
189
+ currentApiKeyIndex++;
190
+ if (currentApiKeyIndex < config.apiKeys.length) {
191
+ return await geminiFlash(message, AI);
176
192
  } else {
177
- console.error(e);
178
- return `Try again later please... Either API is on a cooldown or an internal server error has occurred. If issue persists please contact the bot developer or owner of the npm package.`;
193
+ return 'Ai is on a cooldown for the rest of the day. Either provide your own API key or wait for tomorrow. Check ai.google.dev for free apikeys';
179
194
  }
180
- } else {
195
+ } else if (e.status === 400) {
196
+ return `The hoster/bot owner/the used host isn't supported by gemini.`;
197
+ } else if (e.message === '[GoogleGenerativeAI Error]: Candidate was blocked due to SAFETY') {
181
198
  console.error(e);
182
- return 'An unknown error has occurred.';
199
+ return `Due to safety enabled by gemini you have been blocked.`;
200
+ } else {
201
+ console.error(e);
202
+ return `Try again later please... Either API is on a cooldown or an internal server error has occurred. If issue persists please contact the bot developer or owner of the npm package.`;
203
+ }
204
+ } else {
205
+ console.error(e);
206
+ return 'An unknown error has occurred.';
183
207
  }
184
208
  }
185
209
  }
186
-
187
- async function urlToBase64(imageURL: string) {
188
- try {
189
- const convertedBuffer = await converter(imageURL, 'png');
190
-
191
- const base64String = convertedBuffer.toString('base64');
192
- return base64String;
193
- } catch (error: any) {
194
- throw new Error(`Failed to fetch and convert the image: ${error.message}`);
195
- }
196
- }
197
-
@@ -3,195 +3,207 @@ import path from 'path';
3
3
  import fs from 'fs';
4
4
  import config from './config';
5
5
  import { converter } from "../../canvas/utils/general functions";
6
- import { connect } from "verse.db";
6
+ import { connect } from "verse.db";
7
7
  import axios from "axios";
8
8
 
9
9
  let currentApiKeyIndex = 0;
10
10
 
11
- export async function geminiPro(message: { userId: string, serverName: string, serverId: string, channelName: string, attachment: any, db: boolean }, AI: { AiPersonality: string | null, userMsg: string, API_KEY: string | null }): Promise<any> {
11
+ export async function geminiPro(message: { userId: string, serverName: string, serverId: string, channelName: string, attachment: any, db: boolean }, AI: { AiPersonality: string | null, userMsg: string, API_KEY: string | null }): Promise<any> {
12
12
 
13
- let db: any;
13
+ async function validateKey(apiKey: string) {
14
+ try {
15
+ const validateResponse = await axios.get(`https://generativelanguage.googleapis.com/v1beta/models?key=${apiKey}`);
16
+ return validateResponse.status === 200;
17
+ } catch (error) {
18
+ console.error(`Error validating API key: ${apiKey}`, error);
19
+ return false;
20
+ }
21
+ }
14
22
 
15
- if (message.db) {
16
- db = new connect({ adapter: 'json', dataPath: `${message.serverId}_ChatHistory` });
23
+ async function getValidGenAI(apiKeys: string[], initialIndex: number): Promise<any> {
24
+ for (let i = initialIndex; i < apiKeys.length; i++) {
25
+ const apiKey = apiKeys[i];
26
+ if (await validateKey(apiKey)) {
27
+ currentApiKeyIndex = i;
28
+ return new GoogleGenerativeAI(apiKey);
29
+ }
17
30
  }
31
+ return null;
32
+ }
18
33
 
19
- try {
20
- let apiKeyIndex = currentApiKeyIndex;
21
- let genAI: any;
22
- while (apiKeyIndex < config.apiKeys.length) {
23
- const validateKey = await axios.get(`https://generativelanguage.googleapis.com/v1beta/models?key=${config.apiKeys[apiKeyIndex]}`);
24
- if (validateKey.status === 200) {
25
- genAI = new GoogleGenerativeAI(config.apiKeys[apiKeyIndex]);
26
-
27
- break;
28
- } else {
29
- apiKeyIndex++;
30
- }
31
- }
34
+ async function processRequest(genAI: any): Promise<any> {
35
+ let personalityString = '';
32
36
 
33
- if (apiKeyIndex === config.apiKeys.length) {
34
- return 'All provided API keys are invalid.';
35
- }
36
- let personalityString: string = '';
37
-
38
37
  if (AI.AiPersonality) {
39
- const personalityFilePath = path.join(process.cwd(), AI.AiPersonality);
40
- const personalityContent = fs.readFileSync(personalityFilePath, 'utf-8');
41
- personalityString = personalityContent.split('\n').join(' ');
38
+ const personalityFilePath = path.join(process.cwd(), AI.AiPersonality);
39
+ const personalityContent = fs.readFileSync(personalityFilePath, 'utf-8');
40
+ personalityString = personalityContent.split('\n').join(' ');
42
41
  }
43
42
 
44
43
  const generationConfig = {
45
- maxOutputTokens: 750,
44
+ maxOutputTokens: 750,
46
45
  };
47
46
 
48
47
  const safetySettings = [
49
- {
50
- category: HarmCategory.HARM_CATEGORY_HARASSMENT,
51
- threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
52
- },
53
- {
54
- category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
55
- threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
56
- },
57
- {
58
- category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
59
- threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
60
- },
61
- {
62
- category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
63
- threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
64
- },
48
+ {
49
+ category: HarmCategory.HARM_CATEGORY_HARASSMENT,
50
+ threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
51
+ },
52
+ {
53
+ category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
54
+ threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
55
+ },
56
+ {
57
+ category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
58
+ threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
59
+ },
60
+ {
61
+ category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
62
+ threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
63
+ },
65
64
  ];
66
65
 
67
66
  const systemInstruction = `${personalityString}\n And working on discord in serverName: ${message.serverName} at channelName: ${message.channelName} and responding to the userName: <@${message.userId}>`;
68
67
  const model = genAI.getGenerativeModel({ model: "gemini-1.5-pro-latest", systemInstruction, generationConfig, safetySettings });
69
68
 
70
69
  const defaultHistory = [
71
- {
72
- role: "user",
73
- parts: [{ text: `Hey who are you?` }],
74
- },
75
- {
76
- role: "model",
77
- parts: [{ text: `I am an AI assistant built/developed/created by Apexify.js` }],
78
- },
79
- {
80
- role: "user",
81
- parts: [{ text: `You have chat Memory?` }],
82
- },
83
- {
84
- role: "model",
85
- parts: [{ text: `Yes, i save chat history for each user if it is enabled in my configuration otherwise no data being saved.` }],
86
- },
87
- {
88
- role: "user",
89
- parts: [{ text: `How is your data/memory/chat history is managed` }],
90
- },
91
- {
92
- role: "model",
93
- parts: [{ text: `It is managed by verse.db. A database used to manage JSON/SQL/YAML/SQOL database with ease and supports schema/schemaless data.` }],
94
- }
70
+ {
71
+ role: "user",
72
+ parts: [{ text: `Hey who are you?` }],
73
+ },
74
+ {
75
+ role: "model",
76
+ parts: [{ text: `I am an AI assistant built/developed/created by Apexify.js` }],
77
+ },
78
+ {
79
+ role: "user",
80
+ parts: [{ text: `You have chat Memory?` }],
81
+ },
82
+ {
83
+ role: "model",
84
+ parts: [{ text: `Yes, I save chat history for each user if it is enabled in my configuration otherwise no data being saved.` }],
85
+ },
86
+ {
87
+ role: "user",
88
+ parts: [{ text: `How is your data/memory/chat history managed?` }],
89
+ },
90
+ {
91
+ role: "model",
92
+ parts: [{ text: `It is managed by verse.db. A database used to manage JSON/SQL/YAML/SQOL database with ease and supports schema/schemaless data.` }],
93
+ }
95
94
  ];
96
95
 
97
96
  let historyData: any[] | undefined = undefined;
98
97
 
98
+ let db: any;
99
99
  if (message.db) {
100
- db = new connect({ adapter: 'json', dataPath: `${message.serverId}_ChatHistory` });
101
-
102
- const data = await db.find(`${message.userId}_chatHistory`, { userId: message.userId });
103
-
104
- if (!data.results?.history || data.results?.history?.length === 0) {
105
- await db.update(`${message.userId}_chatHistory`, { userId: message.userId }, { $set: { history: [] } }, true);
106
- } else {
107
- historyData = data.results?.history || undefined;
108
- }
100
+ db = new connect({ adapter: 'json', dataPath: `${message.serverId}_ChatHistory` });
101
+ const data = await db.find(`${message.userId}_chatHistory`, { userId: message.userId });
102
+ historyData = data.results?.history || undefined;
109
103
  }
110
104
 
111
105
  const chat = model.startChat({
112
106
  history: historyData || defaultHistory,
113
107
  generationConfig
114
108
  });
115
-
109
+
116
110
  const imgURL = message.attachment?.url || null;
117
111
  let result: any;
118
112
 
119
113
  if (imgURL) {
120
- const imageData = await urlToBase64(imgURL)
121
- const image = {
122
- inlineData: {
123
- data: imageData,
124
- mimeType: "image/png",
125
- },
126
- };
127
- result = await chat.sendMessage([AI.userMsg, image]);
114
+ const imageData = await urlToBase64(imgURL);
115
+ const image = {
116
+ inlineData: {
117
+ data: imageData,
118
+ mimeType: "image/png",
119
+ },
120
+ };
121
+ result = await chat.sendMessage([AI.userMsg, image]);
128
122
  } else {
129
- result = await chat.sendMessage(AI.userMsg);
123
+ result = await chat.sendMessage(AI.userMsg);
130
124
  }
131
125
 
132
- const response = await result.response.text();
126
+ const response = await result.response.text();
133
127
 
134
128
  if (message.db) {
135
-
136
- const updateQuery_1 = {
137
- $push: {
138
- "history": {
139
- role: "user",
140
- parts: [{ text: `${AI.userMsg}` }]
141
- }
142
- },
143
- };
144
-
145
- historyData = await db.update(`${message.userId}_chatHistory`,
146
- { userId: message.userId },
147
- updateQuery_1, true
148
- );
149
-
150
- const updateQuery_2 = {
151
- $push: {
152
- "history": {
153
- role: "model",
154
- parts: [{ text: `${response}` }]
155
- }
156
- },
157
- };
158
-
159
- historyData = await db.update(`${message.userId}_chatHistory`,
129
+ const userHistory = {
130
+ $push: {
131
+ "history": {
132
+ role: "user",
133
+ parts: [{ text: `${AI.userMsg}` }]
134
+ }
135
+ },
136
+ };
137
+
138
+ historyData = await db.update(`${message.userId}_chatHistory`,
139
+ { userId: message.userId },
140
+ userHistory,
141
+ true
142
+ );
143
+
144
+ const modelHistory = {
145
+ $push: {
146
+ "history": {
147
+ role: "model",
148
+ parts: [{ text: `${response}` }]
149
+ }
150
+ },
151
+ };
152
+
153
+ historyData = await db.update(`${message.userId}_chatHistory`,
160
154
  { userId: message.userId },
161
- updateQuery_2,
155
+ modelHistory,
162
156
  true
163
- );
157
+ );
164
158
  }
165
159
 
166
160
  return response;
167
- } catch (e: any) {
161
+ }
162
+
163
+ async function urlToBase64(imageURL: string) {
164
+ try {
165
+ const convertedBuffer = await converter(imageURL, 'png');
166
+ const base64String = convertedBuffer.toString('base64');
167
+ return base64String;
168
+ } catch (error: any) {
169
+ throw new Error(`Failed to fetch and convert the image: ${error.message}`);
170
+ }
171
+ }
172
+
173
+ try {
174
+ let genAI: any;
175
+
176
+ if (AI.API_KEY && await validateKey(AI.API_KEY)) {
177
+ genAI = new GoogleGenerativeAI(AI.API_KEY);
178
+ } else {
179
+ genAI = await getValidGenAI(config.apiKeys, currentApiKeyIndex);
180
+ if (!genAI) {
181
+ return 'All provided API keys are invalid.';
182
+ }
183
+ }
184
+
185
+ return await processRequest(genAI);
186
+ } catch (e: any) {
168
187
  if (e.message) {
169
- if (e.message === '[GoogleGenerativeAI Error]: Error fetching from https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent: [400 Bad Request] User location is not supported for the API use.') {
170
- return `The hoster/bot owner/the used host isn't supported by gemini.`;
171
- } else if (e.response && (e.response.status === 429 || e.response.status === 403)) {
172
- return 'Ai is on a cooldown for the rest of the day. Either provide your own API key or wait for tomorrow. Check ai.google.dev for free apikeys';
173
- } else if (e.message === '[GoogleGenerativeAI Error]: Candidate was blocked due to SAFETY') {
174
- console.error(e);
175
- return `Due to safety enabled by gemini you have been blocked.`;
188
+ if (e.status === 429 || e.status === 403) {
189
+ currentApiKeyIndex++;
190
+ if (currentApiKeyIndex < config.apiKeys.length) {
191
+ return await geminiPro(message, AI);
176
192
  } else {
177
- console.error(e);
178
- return `Try again later please... Either API is on a cooldown or an internal server error has occurred. If issue persists please contact the bot developer or owner of the npm package.`;
193
+ return 'Ai is on a cooldown for the rest of the day. Either provide your own API key or wait for tomorrow. Check ai.google.dev for free apikeys';
179
194
  }
180
- } else {
195
+ } else if (e.status === 400) {
196
+ return `The hoster/bot owner/the used host isn't supported by gemini.`;
197
+ } else if (e.message === '[GoogleGenerativeAI Error]: Candidate was blocked due to SAFETY') {
181
198
  console.error(e);
182
- return 'An unknown error has occurred.';
199
+ return `Due to safety enabled by gemini you have been blocked.`;
200
+ } else {
201
+ console.error(e);
202
+ return `Try again later please... Either API is on a cooldown or an internal server error has occurred. If issue persists please contact the bot developer or owner of the npm package.`;
203
+ }
204
+ } else {
205
+ console.error(e);
206
+ return 'An unknown error has occurred.';
183
207
  }
184
208
  }
185
209
  }
186
-
187
- async function urlToBase64(imageURL: string) {
188
- try {
189
- const convertedBuffer = await converter(imageURL, 'png');
190
-
191
- const base64String = convertedBuffer.toString('base64');
192
- return base64String;
193
- } catch (error: any) {
194
- throw new Error(`Failed to fetch and convert the image: ${error.message}`);
195
- }
196
- }
197
-
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "apexify.js",
3
- "version": "4.1.5",
3
+ "version": "4.1.7",
4
4
  "description": "Ai and Canvas library. Supports typescript and javascript",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -160,7 +160,7 @@
160
160
  "pdf-parse": "^1.1.1",
161
161
  "sharp": "^0.33.2",
162
162
  "tesseract.js": "^5.0.5",
163
- "verse.db": "^2.0.4"
163
+ "verse.db": "^2.0.5"
164
164
  },
165
165
  "devDependencies": {
166
166
  "@types/gifencoder": "^2.0.3",