Commit 571301ad by Calcium-Ion Committed by GitHub

Merge pull request #1541 from QuantumNous/fluent-read

feat: added "流畅阅读" (FluentRead) as a new chat provider option.
parents abee65c1 991a09f4
...@@ -13,6 +13,9 @@ var Chats = []map[string]string{ ...@@ -13,6 +13,9 @@ var Chats = []map[string]string{
"Cherry Studio": "cherrystudio://providers/api-keys?v=1&data={cherryConfig}", "Cherry Studio": "cherrystudio://providers/api-keys?v=1&data={cherryConfig}",
}, },
{ {
"流畅阅读": "fluentread",
},
{
"Lobe Chat 官方示例": "https://chat-preview.lobehub.com/?settings={\"keyVaults\":{\"openai\":{\"apiKey\":\"{key}\",\"baseURL\":\"{address}/v1\"}}}", "Lobe Chat 官方示例": "https://chat-preview.lobehub.com/?settings={\"keyVaults\":{\"openai\":{\"apiKey\":\"{key}\",\"baseURL\":\"{address}/v1\"}}}",
}, },
{ {
......
...@@ -201,12 +201,20 @@ const SiderBar = ({ onNavigate = () => { } }) => { ...@@ -201,12 +201,20 @@ const SiderBar = ({ onNavigate = () => { } }) => {
if (Array.isArray(chats)) { if (Array.isArray(chats)) {
let chatItems = []; let chatItems = [];
for (let i = 0; i < chats.length; i++) { for (let i = 0; i < chats.length; i++) {
let shouldSkip = false;
let chat = {}; let chat = {};
for (let key in chats[i]) { for (let key in chats[i]) {
let link = chats[i][key];
if (typeof link !== 'string') continue; // 确保链接是字符串
if (link.startsWith('fluent')) {
shouldSkip = true;
break; // 跳过 Fluent Read
}
chat.text = key; chat.text = key;
chat.itemKey = 'chat' + i; chat.itemKey = 'chat' + i;
chat.to = '/console/chat/' + i; chat.to = '/console/chat/' + i;
} }
if (shouldSkip || !chat.text) continue; // 避免推入空项
chatItems.push(chat); chatItems.push(chat);
} }
setChatItems(chatItems); setChatItems(chatItems);
......
...@@ -88,27 +88,27 @@ function TokensPage() { ...@@ -88,27 +88,27 @@ function TokensPage() {
function openFluentNotification(key) { function openFluentNotification(key) {
const { t } = latestRef.current; const { t } = latestRef.current;
const SUPPRESS_KEY = 'fluent_notify_suppressed'; const SUPPRESS_KEY = 'fluent_notify_suppressed';
if (localStorage.getItem(SUPPRESS_KEY) === '1') return; if (modelOptions.length === 0) {
// fire-and-forget; a later effect will refresh the notice content
loadModels()
}
if (!key && localStorage.getItem(SUPPRESS_KEY) === '1') return;
const container = document.getElementById('fluent-new-api-container'); const container = document.getElementById('fluent-new-api-container');
if (!container) { if (!container) {
Toast.warning(t('未检测到 Fluent 容器,请确认扩展已启用')); Toast.warning(t('未检测到 FluentRead(流畅阅读),请确认扩展已启用'));
return; return;
} }
setPrefillKey(key || ''); setPrefillKey(key || '');
setFluentNoticeOpen(true); setFluentNoticeOpen(true);
if (modelOptions.length === 0) {
// fire-and-forget; a later effect will refresh the notice content
loadModels()
}
Notification.info({ Notification.info({
id: 'fluent-detected', id: 'fluent-detected',
title: t('检测到 Fluent(流畅阅读)'), title: t('检测到 FluentRead(流畅阅读)'),
content: ( content: (
<div> <div>
<div style={{ marginBottom: 8 }}> <div style={{ marginBottom: 8 }}>
{prefillKey {key
? t('已检测到 Fluent 扩展,已从操作中指定密钥,将使用该密钥进行填充。请选择模型后继续。') ? t('请选择模型。')
: t('已检测到 Fluent 扩展,请选择模型后可一键填充当前选中令牌(或本页第一个令牌)。')} : t('选择模型后可一键填充当前选中令牌(或本页第一个令牌)。')}
</div> </div>
<div style={{ marginBottom: 8 }}> <div style={{ marginBottom: 8 }}>
<Select <Select
...@@ -124,15 +124,17 @@ function TokensPage() { ...@@ -124,15 +124,17 @@ function TokensPage() {
</div> </div>
<Space> <Space>
<Button theme="solid" type="primary" onClick={handlePrefillToFluent}> <Button theme="solid" type="primary" onClick={handlePrefillToFluent}>
{t('一键填充到 Fluent')} {t('一键填充到 FluentRead')}
</Button>
<Button type="warning" onClick={() => {
localStorage.setItem(SUPPRESS_KEY, '1');
Notification.close('fluent-detected');
Toast.info(t('已关闭后续提醒'));
}}>
{t('不再提醒')}
</Button> </Button>
{!key && (
<Button type="warning" onClick={() => {
localStorage.setItem(SUPPRESS_KEY, '1');
Notification.close('fluent-detected');
Toast.info(t('已关闭后续提醒'));
}}>
{t('不再提醒')}
</Button>
)}
<Button type="tertiary" onClick={() => Notification.close('fluent-detected')}> <Button type="tertiary" onClick={() => Notification.close('fluent-detected')}>
{t('关闭')} {t('关闭')}
</Button> </Button>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment