Skip to content

Commit 8c25804

Browse files
committed
feat: setting endpoint url
1 parent fea75d7 commit 8c25804

File tree

9 files changed

+64
-31
lines changed

9 files changed

+64
-31
lines changed

public/locales/en/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@
1313
"api-key-notice": "<0>NOTE: To get a key, sign up for an OpenAI account and visit the following <1>link.</1>,This key is only used in the current browser session</0>",
1414
"tokens-tips": "Controls the maximum number of tokens used in each API call (higher value will make responses more detailed but cost more).",
1515
"tokens": "Tokens: ",
16-
"guest-key": "Guest Key: "
16+
"guest-key": "Guest Key: ",
17+
"endPoint": "Endpoint: "
1718
}

public/locales/zh/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@
1313
"api-key-notice": "<0>注意:要获取密钥,请注册OpenAI账户并访问以下<1>链接。</1>此密钥仅在当前浏览器会话中使用。</0>",
1414
"tokens-tips": "控制每个 API 调用中使用的最大令牌数(更高的值将使响应更详细,但更昂贵)。",
1515
"tokens": "字节数:",
16-
"guest-key": "访问码:"
16+
"guest-key": "访问码:",
17+
"endPoint": "代理地址:"
1718
}

src/components/SettingsDialog.tsx

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ import {
99
FaSyncAlt,
1010
FaCoins,
1111
FaCode,
12+
FaServer,
1213
} from "react-icons/fa";
1314
import Dialog from "./Dialog";
1415
import Input from "./Input";
1516
import { GPT_MODEL_NAMES, GPT_4 } from "../utils/constants";
1617
import Accordion from "./Accordion";
1718
import type { ModelSettings } from "../utils/types";
1819
import { useGuestMode } from "../hooks/useGuestMode";
20+
import { DEFAULT_SETTINGS } from "../hooks/useSettings";
1921

2022
export const SettingsDialog: React.FC<{
2123
show: boolean;
@@ -25,7 +27,7 @@ export const SettingsDialog: React.FC<{
2527
const [settings, setSettings] = React.useState<ModelSettings>({
2628
...customSettings,
2729
});
28-
const { isGuestMode } = useGuestMode(settings.guestKey);
30+
const { isGuestMode } = useGuestMode(settings.customGuestKey);
2931
const { t } = useTranslation(["settings", "common"]);
3032

3133
useEffect(() => {
@@ -37,6 +39,22 @@ export const SettingsDialog: React.FC<{
3739
value: ModelSettings[Key]
3840
) => {
3941
setSettings((prev) => {
42+
if (key === "customApiKey" && !value) {
43+
const {
44+
customTemperature,
45+
customMaxLoops,
46+
customEndPoint,
47+
customMaxTokens,
48+
} = DEFAULT_SETTINGS;
49+
return {
50+
...prev,
51+
[key]: value,
52+
customTemperature,
53+
customMaxLoops,
54+
customEndPoint,
55+
customMaxTokens,
56+
};
57+
}
4058
return { ...prev, [key]: value };
4159
});
4260
};
@@ -50,6 +68,18 @@ export const SettingsDialog: React.FC<{
5068
const disabled = !settings.customApiKey;
5169
const advancedSettings = (
5270
<>
71+
<Input
72+
left={
73+
<>
74+
<FaServer />
75+
<span className="ml-2">{t("endPoint")}</span>
76+
</>
77+
}
78+
disabled={disabled}
79+
value={settings.customEndPoint}
80+
onChange={(e) => updateSettings("customEndPoint", e.target.value)}
81+
/>
82+
<br />
5383
<Input
5484
left={
5585
<>
@@ -104,10 +134,10 @@ export const SettingsDialog: React.FC<{
104134
<span className="ml-2">{t("tokens")}</span>
105135
</>
106136
}
107-
value={settings.maxTokens ?? 400}
137+
value={settings.customMaxTokens ?? 400}
108138
disabled={disabled}
109139
onChange={(e) =>
110-
updateSettings("maxTokens", parseFloat(e.target.value))
140+
updateSettings("customMaxTokens", parseFloat(e.target.value))
111141
}
112142
type="range"
113143
toolTipProperties={{
@@ -192,8 +222,8 @@ export const SettingsDialog: React.FC<{
192222
<span className="ml-2">{t("guest-key")}</span>
193223
</>
194224
}
195-
value={settings.guestKey}
196-
onChange={(e) => updateSettings("guestKey", e.target.value)}
225+
value={settings.customGuestKey}
226+
onChange={(e) => updateSettings("customGuestKey", e.target.value)}
197227
/>
198228
)}
199229
<br className="hidden md:inline" />

src/env/schema.mjs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ export const serverSchema = z.object({
4646
NEXTAUTH_SECRET: requiredAuthEnabledForProduction(),
4747
NEXTAUTH_URL: validateNextUrl(),
4848
OPENAI_API_KEY: z.string(),
49-
OPENAI_API_BASE_URL: z.string().url().optional(),
5049
GOOGLE_CLIENT_ID: requiredAuthEnabledForProduction(),
5150
GOOGLE_CLIENT_SECRET: requiredAuthEnabledForProduction(),
5251
GITHUB_CLIENT_ID: requiredAuthEnabledForProduction(),
@@ -74,7 +73,6 @@ export const serverEnv = {
7473
NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET,
7574
NEXTAUTH_URL: process.env.NEXTAUTH_URL ?? "http://localhost:3000",
7675
OPENAI_API_KEY: process.env.OPENAI_API_KEY,
77-
OPENAI_API_BASE_URL: process.env.OPENAI_API_BASE_URL,
7876
GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID,
7977
GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET,
8078
GITHUB_CLIENT_ID: process.env.GITHUB_CLIENT_ID,

src/hooks/useGuestMode.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
import { useState, useEffect } from "react";
22
import { env } from "../env/client.mjs";
33

4-
export function useGuestMode(guestKey = "") {
4+
export function useGuestMode(customGuestKey = "") {
55
const [isValidGuest, setIsValidGuest] = useState(false);
66
const [isGuestMode, setIsGuestMode] = useState(false);
77

88
useEffect(() => {
99
const publicGuestKey = env.NEXT_PUBLIC_GUEST_KEY ?? "";
1010
const keys = publicGuestKey.split(",").filter((key) => !!key);
1111
const isGuestMode = keys.length > 0;
12-
const isMatchedGuestKey = !!keys.find((key) => key === guestKey);
12+
const isMatchedGuestKey = !!keys.find((key) => key === customGuestKey);
1313
const isValidGuest = isMatchedGuestKey;
1414
setIsValidGuest(isValidGuest);
1515
setIsGuestMode(isGuestMode);
16-
}, [guestKey]);
16+
}, [customGuestKey]);
1717

1818
return {
1919
isValidGuest,

src/hooks/useSettings.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,58 +5,60 @@ import {
55
DEFAULT_MAX_LOOPS_FREE,
66
GPT_35_TURBO,
77
} from "../utils/constants";
8-
import { useGuestMode } from "./useGuestMode"
8+
import { useGuestMode } from "./useGuestMode";
99

1010
const SETTINGS_KEY = "AGENTGPT_SETTINGS";
11-
const DEFAULT_SETTINGS: ModelSettings = {
11+
export const DEFAULT_SETTINGS: ModelSettings = {
1212
customApiKey: "",
1313
customModelName: GPT_35_TURBO,
1414
customTemperature: 0.9,
1515
customMaxLoops: DEFAULT_MAX_LOOPS_FREE,
1616
customLanguage: "",
17-
maxTokens: 400,
18-
guestKey:""
17+
customEndPoint: "",
18+
customMaxTokens: 400,
19+
customGuestKey: "",
1920
};
2021

2122
const loadSettings = () => {
23+
const defaultSettions = DEFAULT_SETTINGS;
2224
if (typeof window === "undefined") {
23-
return DEFAULT_SETTINGS;
25+
return defaultSettions;
2426
}
2527

2628
const data = localStorage.getItem(SETTINGS_KEY);
2729
if (!data) {
28-
return DEFAULT_SETTINGS;
30+
return defaultSettions;
2931
}
3032

3133
try {
3234
const obj = JSON.parse(data) as ModelSettings;
3335
Object.entries(obj).forEach(([key, value]) => {
34-
if (DEFAULT_SETTINGS.hasOwnProperty(key)) {
36+
if (defaultSettions.hasOwnProperty(key)) {
3537
// @ts-ignore
36-
DEFAULT_SETTINGS[key] = value;
38+
defaultSettions[key] = value;
3739
}
3840
});
3941
} catch (error) {}
4042

4143
if (
42-
DEFAULT_SETTINGS.customApiKey &&
43-
DEFAULT_SETTINGS.customMaxLoops === DEFAULT_MAX_LOOPS_FREE
44+
defaultSettions.customApiKey &&
45+
defaultSettions.customMaxLoops === DEFAULT_MAX_LOOPS_FREE
4446
) {
45-
DEFAULT_SETTINGS.customMaxLoops = DEFAULT_MAX_LOOPS_CUSTOM_API_KEY;
47+
defaultSettions.customMaxLoops = DEFAULT_MAX_LOOPS_CUSTOM_API_KEY;
4648
}
4749

48-
return DEFAULT_SETTINGS;
50+
return defaultSettions;
4951
};
5052

5153
export function useSettings({ customLanguage }: { customLanguage: string }) {
5254
const [settings, setSettings] = useState<ModelSettings>(loadSettings);
53-
const { isValidGuest } = useGuestMode(settings.guestKey);
55+
const { isValidGuest } = useGuestMode(settings.customGuestKey);
5456

5557
const rewriteSettings = (settings: ModelSettings) => {
5658
const rewriteSettings = {
5759
...settings,
5860
customLanguage,
59-
isValidGuest
61+
isValidGuest,
6062
};
6163

6264
return rewriteSettings;

src/pages/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ const Home: NextPage = () => {
4545
useState(false);
4646
const [customLanguage, setCustomLanguage] = useState<string>(i18n.language);
4747
const { settings, saveSettings } = useSettings({ customLanguage });
48-
const { isValidGuest, isGuestMode } = useGuestMode(settings.guestKey);
48+
const { isValidGuest, isGuestMode } = useGuestMode(settings.customGuestKey);
4949

5050
const router = useRouter();
5151
const agentUtils = useAgent();

src/utils/prompts.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ export const createModel = (settings: ModelSettings) => {
1313
openAIApiKey: _settings?.customApiKey || process.env.OPENAI_API_KEY,
1414
temperature: _settings?.customTemperature || 0.9,
1515
modelName: _settings?.customModelName || GPT_35_TURBO,
16-
maxTokens: _settings?.maxTokens || 400,
16+
maxTokens: _settings?.customMaxLoops || 400,
1717
};
1818

1919
const baseOptions = {
20-
basePath: process.env.OPENAI_API_BASE_URL,
20+
basePath: _settings?.customEndPoint || undefined,
2121
};
2222
console.log(
2323
"Dogtiti ~ file: prompts.ts:22 ~ createModel ~ options:",

src/utils/types.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ export type ModelSettings = {
44
customTemperature: number;
55
customMaxLoops: number;
66
customLanguage: string;
7-
maxTokens?: number;
8-
guestKey?: string;
7+
customEndPoint?: string;
8+
customMaxTokens?: number;
9+
customGuestKey?: string;
910
};
1011

1112
export type GuestSettings = {

0 commit comments

Comments
 (0)