feat: support google multiple keys

This commit is contained in:
Hk-Gosuto 2024-05-28 21:26:54 +08:00
parent 11f063fd9e
commit fe9a17693c
7 changed files with 13 additions and 10 deletions

View File

@ -15,7 +15,7 @@ GOOGLE_API_KEY=
# (optional) # (optional)
# Default: https://generativelanguage.googleapis.com/ # Default: https://generativelanguage.googleapis.com/
# Googel Gemini Pro API url without pathname, set if you want to customize Google Gemini Pro API url. # Googel Gemini Pro API url without pathname, set if you want to customize Google Gemini Pro API url.
GOOGLE_BASE_URL= GEMINI_BASE_URL=
# Override openai api request base url. (optional) # Override openai api request base url. (optional)
# Default: https://api.openai.com # Default: https://api.openai.com

View File

@ -57,7 +57,7 @@
- [GoogleCustomSearch](https://api.js.langchain.com/classes/langchain_tools.GoogleCustomSearch.html) - [GoogleCustomSearch](https://api.js.langchain.com/classes/langchain_tools.GoogleCustomSearch.html)
- 环境变量: - 环境变量:
- `GOOGLE_API_KEY` - ~~`GOOGLE_API_KEY`~~ `GOOGLE_SEARCH_API_KEY`
- `GOOGLE_CSE_ID` - `GOOGLE_CSE_ID`
- 申请参考:[说明](https://stackoverflow.com/questions/37083058/programmatically-searching-google-in-python-using-custom-search) - 申请参考:[说明](https://stackoverflow.com/questions/37083058/programmatically-searching-google-in-python-using-custom-search)
@ -238,7 +238,7 @@ OpenAI 接口代理 URL如果你手动配置了 openai 接口代理,请填
Google Gemini Pro Api Key. Google Gemini Pro Api Key.
### `GOOGLE_BASE_URL` (可选) ### ~~ `GOOGLE_BASE_URL` (可选)~~ `GEMINI_BASE_URL` (可选)
Google Gemini Pro Api Url. Google Gemini Pro Api Url.

View File

@ -110,7 +110,7 @@ Azure Api 版本,你可以在这里找到:[Azure 文档](https://learn.micro
Google Gemini Pro 密钥. Google Gemini Pro 密钥.
### `GOOGLE_BASE_URL` (optional) ### ~~`GOOGLE_BASE_URL` (optional)~~ `GEMINI_BASE_URL` (optional)
Google Gemini Pro Api Url. Google Gemini Pro Api Url.

View File

@ -1,7 +1,7 @@
import { NextRequest, NextResponse } from "next/server"; import { NextRequest, NextResponse } from "next/server";
import { auth } from "../../auth"; import { auth } from "../../auth";
import { getServerSideConfig } from "@/app/config/server"; import { getServerSideConfig } from "@/app/config/server";
import { GOOGLE_BASE_URL, ModelProvider } from "@/app/constant"; import { GEMINI_BASE_URL, ModelProvider } from "@/app/constant";
async function handle( async function handle(
req: NextRequest, req: NextRequest,
@ -17,7 +17,7 @@ async function handle(
const serverConfig = getServerSideConfig(); const serverConfig = getServerSideConfig();
let baseUrl = serverConfig.googleUrl || GOOGLE_BASE_URL; let baseUrl = serverConfig.googleUrl || GEMINI_BASE_URL;
if (!baseUrl.startsWith("http")) { if (!baseUrl.startsWith("http")) {
baseUrl = `https://${baseUrl}`; baseUrl = `https://${baseUrl}`;

View File

@ -38,6 +38,7 @@ import {
AIMessage, AIMessage,
} from "@langchain/core/messages"; } from "@langchain/core/messages";
import { MultimodalContent } from "@/app/client/api"; import { MultimodalContent } from "@/app/client/api";
import { GoogleCustomSearch } from "@/app/api/langchain-tools/langchian-tool-index";
export interface RequestMessage { export interface RequestMessage {
role: string; role: string;
@ -284,8 +285,11 @@ export class AgentApi {
func: async (input: string) => serpAPITool.call(input), func: async (input: string) => serpAPITool.call(input),
}); });
} }
if (process.env.GOOGLE_CSE_ID && process.env.GOOGLE_API_KEY) { if (process.env.GOOGLE_CSE_ID && process.env.GOOGLE_SEARCH_API_KEY) {
let googleCustomSearchTool = new langchainTools["GoogleCustomSearch"](); let googleCustomSearchTool = new GoogleCustomSearch({
apiKey: process.env.GOOGLE_SEARCH_API_KEY,
googleCSEId: process.env.GOOGLE_CSE_ID,
});
searchTool = new DynamicTool({ searchTool = new DynamicTool({
name: "google_custom_search", name: "google_custom_search",
description: googleCustomSearchTool.description, description: googleCustomSearchTool.description,

View File

@ -117,7 +117,7 @@ export const getServerSideConfig = () => {
isGoogle, isGoogle,
googleApiKey: getApiKey(process.env.GOOGLE_API_KEY), googleApiKey: getApiKey(process.env.GOOGLE_API_KEY),
googleUrl: process.env.GEMINI_BASE_URL ?? process.env.GOOGLE_URL, googleUrl: process.env.GOOGLE_URL,
isAnthropic, isAnthropic,
anthropicApiKey: getApiKey(process.env.ANTHROPIC_API_KEY), anthropicApiKey: getApiKey(process.env.ANTHROPIC_API_KEY),

View File

@ -10,7 +10,6 @@ export const RUNTIME_CONFIG_DOM = "danger-runtime-config";
export const DEFAULT_API_HOST = "https://api.nextchat.dev"; export const DEFAULT_API_HOST = "https://api.nextchat.dev";
export const OPENAI_BASE_URL = "https://api.openai.com"; export const OPENAI_BASE_URL = "https://api.openai.com";
export const GOOGLE_BASE_URL = "https://generativelanguage.googleapis.com";
export const GEMINI_BASE_URL = "https://generativelanguage.googleapis.com/"; export const GEMINI_BASE_URL = "https://generativelanguage.googleapis.com/";
export const ANTHROPIC_BASE_URL = "https://api.anthropic.com"; export const ANTHROPIC_BASE_URL = "https://api.anthropic.com";