Merge pull request #1541 from QuantumNous/fluent-read
feat: added "流畅阅读" (FluentRead) as a new chat provider option.
This commit is contained in:
@@ -12,6 +12,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 = () => { } }) => {
|
|||||||
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() {
|
|||||||
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;
|
|
||||||
const container = document.getElementById('fluent-new-api-container');
|
|
||||||
if (!container) {
|
|
||||||
Toast.warning(t('未检测到 Fluent 容器,请确认扩展已启用'));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
setPrefillKey(key || '');
|
|
||||||
setFluentNoticeOpen(true);
|
|
||||||
if (modelOptions.length === 0) {
|
if (modelOptions.length === 0) {
|
||||||
// fire-and-forget; a later effect will refresh the notice content
|
// fire-and-forget; a later effect will refresh the notice content
|
||||||
loadModels()
|
loadModels()
|
||||||
}
|
}
|
||||||
|
if (!key && localStorage.getItem(SUPPRESS_KEY) === '1') return;
|
||||||
|
const container = document.getElementById('fluent-new-api-container');
|
||||||
|
if (!container) {
|
||||||
|
Toast.warning(t('未检测到 FluentRead(流畅阅读),请确认扩展已启用'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setPrefillKey(key || '');
|
||||||
|
setFluentNoticeOpen(true);
|
||||||
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() {
|
|||||||
</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>
|
||||||
|
|||||||
Reference in New Issue
Block a user