Update main.ts
Browse files
main.ts
CHANGED
|
@@ -254,7 +254,7 @@ class GoogleAIService {
|
|
| 254 |
}
|
| 255 |
}
|
| 256 |
|
| 257 |
-
async generateContentWithDocument(messages: OpenAIMessage[], modelName: string): Promise<string> {
|
| 258 |
const apiKey = this.getNextApiKey();
|
| 259 |
const fullModelName = modelName.startsWith('models/') ? modelName : `models/${modelName}`;
|
| 260 |
const documentModel = this.isDocumentModel(fullModelName) ? fullModelName : 'models/gemini-1.5-pro-latest';
|
|
@@ -299,7 +299,7 @@ class GoogleAIService {
|
|
| 299 |
|
| 300 |
const requestBody = {
|
| 301 |
contents,
|
| 302 |
-
generationConfig: { temperature: 0.7, maxOutputTokens: 8192 }
|
| 303 |
};
|
| 304 |
|
| 305 |
const response = await fetch(
|
|
@@ -342,10 +342,10 @@ class GoogleAIService {
|
|
| 342 |
}
|
| 343 |
|
| 344 |
// The rest of the original methods from the user's code
|
| 345 |
-
async generateContent(messages: OpenAIMessage[], modelName: string, enableSearch: boolean = false): Promise<string> {
|
| 346 |
const hasDocument = messages.some(msg => Array.isArray(msg.content) && msg.content.some(part => part.type === "document"));
|
| 347 |
if (hasDocument) {
|
| 348 |
-
return await this.generateContentWithDocument(messages, modelName);
|
| 349 |
}
|
| 350 |
|
| 351 |
const apiKey = this.getNextApiKey();
|
|
@@ -375,7 +375,7 @@ class GoogleAIService {
|
|
| 375 |
|
| 376 |
const requestBody: any = {
|
| 377 |
contents,
|
| 378 |
-
generationConfig: { temperature: 0.7, maxOutputTokens:
|
| 379 |
};
|
| 380 |
if (enableSearch) {
|
| 381 |
requestBody.tools = [{ googleSearchRetrieval: {} }];
|
|
@@ -456,7 +456,7 @@ class GoogleAIService {
|
|
| 456 |
return result;
|
| 457 |
}
|
| 458 |
|
| 459 |
-
async generateContentWithGrounding(messages: OpenAIMessage[], modelName: string): Promise<string> {
|
| 460 |
const apiKey = this.getNextApiKey();
|
| 461 |
const fullModelName = modelName.startsWith('models/') ? modelName : `models/${modelName}`;
|
| 462 |
const contents = messages.map(msg => ({ role: msg.role === 'assistant' ? 'model' : 'user', parts: [{ text: typeof msg.content === 'string' ? msg.content : '' }] }));
|
|
@@ -464,7 +464,7 @@ class GoogleAIService {
|
|
| 464 |
const requestBody = {
|
| 465 |
contents,
|
| 466 |
tools: [{ googleSearch: {} }],
|
| 467 |
-
generationConfig: { temperature: 0.7, maxOutputTokens:
|
| 468 |
};
|
| 469 |
|
| 470 |
const response = await fetch(
|
|
@@ -474,12 +474,12 @@ class GoogleAIService {
|
|
| 474 |
|
| 475 |
if (!response.ok) {
|
| 476 |
console.warn(`Google Search API failed: ${response.status}, trying alternative.`);
|
| 477 |
-
return await this.generateContentWithSearchPrompt(messages, modelName);
|
| 478 |
}
|
| 479 |
|
| 480 |
const data = await response.json();
|
| 481 |
if (!data.candidates || data.candidates.length === 0) {
|
| 482 |
-
return await this.generateContentWithSearchPrompt(messages, modelName);
|
| 483 |
}
|
| 484 |
|
| 485 |
const candidate = data.candidates[0];
|
|
@@ -489,13 +489,13 @@ class GoogleAIService {
|
|
| 489 |
return candidate.content?.parts[0]?.text || "No response generated";
|
| 490 |
}
|
| 491 |
|
| 492 |
-
async generateContentWithSearchPrompt(messages: OpenAIMessage[], modelName: string): Promise<string> {
|
| 493 |
const enhancedMessages = [...messages];
|
| 494 |
const lastMessage = enhancedMessages[enhancedMessages.length - 1];
|
| 495 |
if (typeof lastMessage.content === "string") {
|
| 496 |
lastMessage.content = `Please provide the most current and accurate information available about: ${lastMessage.content}.`;
|
| 497 |
}
|
| 498 |
-
return await this.generateContent(enhancedMessages, modelName, false);
|
| 499 |
}
|
| 500 |
|
| 501 |
async generateOrEditImage(prompt: string, modelName: string, inputImages?: any[]): Promise<string> {
|
|
@@ -602,7 +602,8 @@ class OpenAICompatibleServer {
|
|
| 602 |
const body: OpenAIRequest = await request.json();
|
| 603 |
const requestedModel = body.model || "gemini-1.5-pro";
|
| 604 |
const stream = body.stream || false;
|
| 605 |
-
|
|
|
|
| 606 |
|
| 607 |
const lastMessage = body.messages[body.messages.length - 1];
|
| 608 |
const content = typeof lastMessage.content === "string"
|
|
@@ -631,16 +632,16 @@ class OpenAICompatibleServer {
|
|
| 631 |
|
| 632 |
// Routing logic based on keywords and content types
|
| 633 |
if (hasDocument) {
|
| 634 |
-
responseText = await this.googleAI.generateContentWithDocument(body.messages, requestedModel);
|
| 635 |
} else if (this.googleAI.isImageEditingModel(requestedModel) && hasImages) {
|
| 636 |
responseText = await this.googleAI.generateOrEditImage(content, requestedModel, inputImages);
|
| 637 |
} else if (this.googleAI.isImageGenerationModel(requestedModel)) {
|
| 638 |
responseText = await this.googleAI.generateOrEditImage(content, requestedModel);
|
| 639 |
} else if (requestedModel.endsWith("-search")) {
|
| 640 |
const searchMessages = [{ ...lastMessage, content: content }];
|
| 641 |
-
responseText = await this.googleAI.generateContentWithGrounding(searchMessages, requestedModel.slice(0, -"-search".length));
|
| 642 |
} else {
|
| 643 |
-
responseText = await this.googleAI.generateContent(body.messages, requestedModel, false);
|
| 644 |
}
|
| 645 |
|
| 646 |
if (stream) {
|
|
|
|
| 254 |
}
|
| 255 |
}
|
| 256 |
|
| 257 |
+
async generateContentWithDocument(messages: OpenAIMessage[], modelName: string, maxTokens?: number): Promise<string> {
|
| 258 |
const apiKey = this.getNextApiKey();
|
| 259 |
const fullModelName = modelName.startsWith('models/') ? modelName : `models/${modelName}`;
|
| 260 |
const documentModel = this.isDocumentModel(fullModelName) ? fullModelName : 'models/gemini-1.5-pro-latest';
|
|
|
|
| 299 |
|
| 300 |
const requestBody = {
|
| 301 |
contents,
|
| 302 |
+
generationConfig: { temperature: 0.7, maxOutputTokens: maxTokens || 8192 }
|
| 303 |
};
|
| 304 |
|
| 305 |
const response = await fetch(
|
|
|
|
| 342 |
}
|
| 343 |
|
| 344 |
// The rest of the original methods from the user's code
|
| 345 |
+
async generateContent(messages: OpenAIMessage[], modelName: string, maxTokens?: number, enableSearch: boolean = false): Promise<string> {
|
| 346 |
const hasDocument = messages.some(msg => Array.isArray(msg.content) && msg.content.some(part => part.type === "document"));
|
| 347 |
if (hasDocument) {
|
| 348 |
+
return await this.generateContentWithDocument(messages, modelName, maxTokens);
|
| 349 |
}
|
| 350 |
|
| 351 |
const apiKey = this.getNextApiKey();
|
|
|
|
| 375 |
|
| 376 |
const requestBody: any = {
|
| 377 |
contents,
|
| 378 |
+
generationConfig: { temperature: 0.7, maxOutputTokens: maxTokens || 8192 }
|
| 379 |
};
|
| 380 |
if (enableSearch) {
|
| 381 |
requestBody.tools = [{ googleSearchRetrieval: {} }];
|
|
|
|
| 456 |
return result;
|
| 457 |
}
|
| 458 |
|
| 459 |
+
async generateContentWithGrounding(messages: OpenAIMessage[], modelName: string, maxTokens?: number): Promise<string> {
|
| 460 |
const apiKey = this.getNextApiKey();
|
| 461 |
const fullModelName = modelName.startsWith('models/') ? modelName : `models/${modelName}`;
|
| 462 |
const contents = messages.map(msg => ({ role: msg.role === 'assistant' ? 'model' : 'user', parts: [{ text: typeof msg.content === 'string' ? msg.content : '' }] }));
|
|
|
|
| 464 |
const requestBody = {
|
| 465 |
contents,
|
| 466 |
tools: [{ googleSearch: {} }],
|
| 467 |
+
generationConfig: { temperature: 0.7, maxOutputTokens: maxTokens || 8192 }
|
| 468 |
};
|
| 469 |
|
| 470 |
const response = await fetch(
|
|
|
|
| 474 |
|
| 475 |
if (!response.ok) {
|
| 476 |
console.warn(`Google Search API failed: ${response.status}, trying alternative.`);
|
| 477 |
+
return await this.generateContentWithSearchPrompt(messages, modelName, maxTokens);
|
| 478 |
}
|
| 479 |
|
| 480 |
const data = await response.json();
|
| 481 |
if (!data.candidates || data.candidates.length === 0) {
|
| 482 |
+
return await this.generateContentWithSearchPrompt(messages, modelName, maxTokens);
|
| 483 |
}
|
| 484 |
|
| 485 |
const candidate = data.candidates[0];
|
|
|
|
| 489 |
return candidate.content?.parts[0]?.text || "No response generated";
|
| 490 |
}
|
| 491 |
|
| 492 |
+
async generateContentWithSearchPrompt(messages: OpenAIMessage[], modelName: string, maxTokens?: number): Promise<string> {
|
| 493 |
const enhancedMessages = [...messages];
|
| 494 |
const lastMessage = enhancedMessages[enhancedMessages.length - 1];
|
| 495 |
if (typeof lastMessage.content === "string") {
|
| 496 |
lastMessage.content = `Please provide the most current and accurate information available about: ${lastMessage.content}.`;
|
| 497 |
}
|
| 498 |
+
return await this.generateContent(enhancedMessages, modelName, maxTokens, false);
|
| 499 |
}
|
| 500 |
|
| 501 |
async generateOrEditImage(prompt: string, modelName: string, inputImages?: any[]): Promise<string> {
|
|
|
|
| 602 |
const body: OpenAIRequest = await request.json();
|
| 603 |
const requestedModel = body.model || "gemini-1.5-pro";
|
| 604 |
const stream = body.stream || false;
|
| 605 |
+
const maxTokens = body.max_tokens || 1024000;
|
| 606 |
+
console.log(`Request for model: ${requestedModel}, stream: ${stream}, max_tokens: ${maxTokens}`);
|
| 607 |
|
| 608 |
const lastMessage = body.messages[body.messages.length - 1];
|
| 609 |
const content = typeof lastMessage.content === "string"
|
|
|
|
| 632 |
|
| 633 |
// Routing logic based on keywords and content types
|
| 634 |
if (hasDocument) {
|
| 635 |
+
responseText = await this.googleAI.generateContentWithDocument(body.messages, requestedModel, maxTokens);
|
| 636 |
} else if (this.googleAI.isImageEditingModel(requestedModel) && hasImages) {
|
| 637 |
responseText = await this.googleAI.generateOrEditImage(content, requestedModel, inputImages);
|
| 638 |
} else if (this.googleAI.isImageGenerationModel(requestedModel)) {
|
| 639 |
responseText = await this.googleAI.generateOrEditImage(content, requestedModel);
|
| 640 |
} else if (requestedModel.endsWith("-search")) {
|
| 641 |
const searchMessages = [{ ...lastMessage, content: content }];
|
| 642 |
+
responseText = await this.googleAI.generateContentWithGrounding(searchMessages, requestedModel.slice(0, -"-search".length), maxTokens);
|
| 643 |
} else {
|
| 644 |
+
responseText = await this.googleAI.generateContent(body.messages, requestedModel, maxTokens, false);
|
| 645 |
}
|
| 646 |
|
| 647 |
if (stream) {
|