Skip to content

Commit ca3c801

Browse files
committed
2 parents 1f11389 + 26c3edd commit ca3c801

File tree

25 files changed

+241
-66
lines changed

25 files changed

+241
-66
lines changed

app/components/chat.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import QualityIcon from "../icons/hd.svg";
4343
import StyleIcon from "../icons/palette.svg";
4444
import PluginIcon from "../icons/plugin.svg";
4545
import ShortcutkeyIcon from "../icons/shortcutkey.svg";
46+
import ReloadIcon from "../icons/reload.svg";
4647

4748
import {
4849
ChatMessage,
@@ -624,7 +625,7 @@ export function ChatActions(props: {
624625
items={models.map((m) => ({
625626
title: `${m.displayName}${
626627
m?.provider?.providerName
627-
? "(" + m?.provider?.providerName + ")"
628+
? " (" + m?.provider?.providerName + ")"
628629
: ""
629630
}`,
630631
value: `${m.name}@${m?.provider?.providerName}`,
@@ -1541,6 +1542,17 @@ function _Chat() {
15411542
</div>
15421543
</div>
15431544
<div className="window-actions">
1545+
<div className="window-action-button">
1546+
<IconButton
1547+
icon={<ReloadIcon />}
1548+
bordered
1549+
title={Locale.Chat.Actions.RefreshTitle}
1550+
onClick={() => {
1551+
showToast(Locale.Chat.Actions.RefreshToast);
1552+
chatStore.summarizeSession(true);
1553+
}}
1554+
/>
1555+
</div>
15441556
{!isMobileScreen && (
15451557
<div className="window-action-button">
15461558
<IconButton

app/components/model-config.tsx

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,27 @@ import Locale from "../locales";
55
import { InputRange } from "./input-range";
66
import { ListItem, Select } from "./ui-lib";
77
import { useAllModels } from "../utils/hooks";
8+
import { groupBy } from "lodash-es";
89

910
export function ModelConfigList(props: {
1011
modelConfig: ModelConfig;
1112
updateConfig: (updater: (config: ModelConfig) => void) => void;
1213
}) {
1314
const allModels = useAllModels();
15+
const groupModels = groupBy(
16+
allModels.filter((v) => v.available),
17+
"provider.providerName",
18+
);
1419
const value = `${props.modelConfig.model}@${props.modelConfig?.providerName}`;
20+
const compressModelValue = `${props.modelConfig.compressModel}@${props.modelConfig?.compressProviderName}`;
1521

1622
return (
1723
<>
1824
<ListItem title={Locale.Settings.Model}>
1925
<Select
2026
aria-label={Locale.Settings.Model}
2127
value={value}
28+
align="left"
2229
onChange={(e) => {
2330
const [model, providerName] = e.currentTarget.value.split("@");
2431
props.updateConfig((config) => {
@@ -27,13 +34,15 @@ export function ModelConfigList(props: {
2734
});
2835
}}
2936
>
30-
{allModels
31-
.filter((v) => v.available)
32-
.map((v, i) => (
33-
<option value={`${v.name}@${v.provider?.providerName}`} key={i}>
34-
{v.displayName}({v.provider?.providerName})
35-
</option>
36-
))}
37+
{Object.keys(groupModels).map((providerName, index) => (
38+
<optgroup label={providerName} key={index}>
39+
{groupModels[providerName].map((v, i) => (
40+
<option value={`${v.name}@${v.provider?.providerName}`} key={i}>
41+
{v.displayName}
42+
</option>
43+
))}
44+
</optgroup>
45+
))}
3746
</Select>
3847
</ListItem>
3948
<ListItem
@@ -228,6 +237,30 @@ export function ModelConfigList(props: {
228237
}
229238
></input>
230239
</ListItem>
240+
<ListItem
241+
title={Locale.Settings.CompressModel.Title}
242+
subTitle={Locale.Settings.CompressModel.SubTitle}
243+
>
244+
<Select
245+
aria-label={Locale.Settings.CompressModel.Title}
246+
value={compressModelValue}
247+
onChange={(e) => {
248+
const [model, providerName] = e.currentTarget.value.split("@");
249+
props.updateConfig((config) => {
250+
config.compressModel = ModalConfigValidator.model(model);
251+
config.compressProviderName = providerName as ServiceProvider;
252+
});
253+
}}
254+
>
255+
{allModels
256+
.filter((v) => v.available)
257+
.map((v, i) => (
258+
<option value={`${v.name}@${v.provider?.providerName}`} key={i}>
259+
{v.displayName}({v.provider?.providerName})
260+
</option>
261+
))}
262+
</Select>
263+
</ListItem>
231264
</>
232265
);
233266
}

app/components/ui-lib.module.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,12 @@
252252
position: relative;
253253
max-width: fit-content;
254254

255+
&.left-align-option {
256+
option {
257+
text-align: left;
258+
}
259+
}
260+
255261
.select-with-icon-select {
256262
height: 100%;
257263
border: var(--border-in-light);

app/components/ui-lib.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -292,13 +292,19 @@ export function PasswordInput(
292292

293293
export function Select(
294294
props: React.DetailedHTMLProps<
295-
React.SelectHTMLAttributes<HTMLSelectElement>,
295+
React.SelectHTMLAttributes<HTMLSelectElement> & {
296+
align?: "left" | "center";
297+
},
296298
HTMLSelectElement
297299
>,
298300
) {
299-
const { className, children, ...otherProps } = props;
301+
const { className, children, align, ...otherProps } = props;
300302
return (
301-
<div className={`${styles["select-with-icon"]} ${className}`}>
303+
<div
304+
className={`${styles["select-with-icon"]} ${
305+
align === "left" ? styles["left-align-option"] : ""
306+
} ${className}`}
307+
>
302308
<select className={styles["select-with-icon-select"]} {...otherProps}>
303309
{children}
304310
</select>

app/locales/ar.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ const ar: PartialLocaleType = {
4343
PinToastAction: "عرض",
4444
Delete: "حذف",
4545
Edit: "تحرير",
46+
RefreshTitle: "تحديث العنوان",
47+
RefreshToast: "تم إرسال طلب تحديث العنوان",
4648
},
4749
Commands: {
4850
new: "دردشة جديدة",
@@ -404,6 +406,10 @@ const ar: PartialLocaleType = {
404406
},
405407

406408
Model: "النموذج",
409+
CompressModel: {
410+
Title: "نموذج الضغط",
411+
SubTitle: "النموذج المستخدم لضغط السجل التاريخي",
412+
},
407413
Temperature: {
408414
Title: "العشوائية (temperature)",
409415
SubTitle: "كلما زادت القيمة، زادت العشوائية في الردود",

app/locales/bn.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ const bn: PartialLocaleType = {
4343
PinToastAction: "দেখুন",
4444
Delete: "মুছে ফেলুন",
4545
Edit: "সম্পাদনা করুন",
46+
RefreshTitle: "শিরোনাম রিফ্রেশ করুন",
47+
RefreshToast: "শিরোনাম রিফ্রেশ অনুরোধ পাঠানো হয়েছে",
4648
},
4749
Commands: {
4850
new: "নতুন চ্যাট",
@@ -411,6 +413,10 @@ const bn: PartialLocaleType = {
411413
},
412414

413415
Model: "মডেল (model)",
416+
CompressModel: {
417+
Title: "সংকোচন মডেল",
418+
SubTitle: "ইতিহাস সংকুচিত করার জন্য ব্যবহৃত মডেল",
419+
},
414420
Temperature: {
415421
Title: "যাদুকরিতা (temperature)",
416422
SubTitle: "মান বাড়ালে উত্তর বেশি এলোমেলো হবে",

app/locales/cn.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ const cn = {
4444
Delete: "删除",
4545
Edit: "编辑",
4646
FullScreen: "全屏",
47+
RefreshTitle: "刷新标题",
48+
RefreshToast: "已发送刷新标题请求",
4749
},
4850
Commands: {
4951
new: "新建聊天",
@@ -470,6 +472,10 @@ const cn = {
470472
},
471473

472474
Model: "模型 (model)",
475+
CompressModel: {
476+
Title: "压缩模型",
477+
SubTitle: "用于压缩历史记录的模型",
478+
},
473479
Temperature: {
474480
Title: "随机性 (temperature)",
475481
SubTitle: "值越大,回复越随机",

app/locales/cs.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ const cs: PartialLocaleType = {
4343
PinToastAction: "Zobrazit",
4444
Delete: "Smazat",
4545
Edit: "Upravit",
46+
RefreshTitle: "Obnovit název",
47+
RefreshToast: "Požadavek na obnovení názvu byl odeslán",
4648
},
4749
Commands: {
4850
new: "Nová konverzace",
@@ -410,6 +412,10 @@ const cs: PartialLocaleType = {
410412
},
411413

412414
Model: "Model (model)",
415+
CompressModel: {
416+
Title: "Kompresní model",
417+
SubTitle: "Model používaný pro kompresi historie",
418+
},
413419
Temperature: {
414420
Title: "Náhodnost (temperature)",
415421
SubTitle: "Čím vyšší hodnota, tím náhodnější odpovědi",

app/locales/de.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ const de: PartialLocaleType = {
4343
PinToastAction: "Ansehen",
4444
Delete: "Löschen",
4545
Edit: "Bearbeiten",
46+
RefreshTitle: "Titel aktualisieren",
47+
RefreshToast: "Anfrage zur Titelaktualisierung gesendet",
4648
},
4749
Commands: {
4850
new: "Neues Gespräch",
@@ -421,6 +423,10 @@ const de: PartialLocaleType = {
421423
},
422424

423425
Model: "Modell",
426+
CompressModel: {
427+
Title: "Kompressionsmodell",
428+
SubTitle: "Modell zur Komprimierung des Verlaufs",
429+
},
424430
Temperature: {
425431
Title: "Zufälligkeit (temperature)",
426432
SubTitle: "Je höher der Wert, desto zufälliger die Antwort",

app/locales/en.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ const en: LocaleType = {
4545
Delete: "Delete",
4646
Edit: "Edit",
4747
FullScreen: "FullScreen",
48+
RefreshTitle: "Refresh Title",
49+
RefreshToast: "Title refresh request sent",
4850
},
4951
Commands: {
5052
new: "Start a new chat",
@@ -474,6 +476,10 @@ const en: LocaleType = {
474476
},
475477

476478
Model: "Model",
479+
CompressModel: {
480+
Title: "Compression Model",
481+
SubTitle: "Model used to compress history",
482+
},
477483
Temperature: {
478484
Title: "Temperature",
479485
SubTitle: "A larger value makes the more random output",

0 commit comments

Comments
 (0)