Add OmniRoute web search toolkit (omniroute_web_search, omniroute_web_fetch, omniroute_search_providers)
This commit is contained in:
1 parent
45310dd2a4
commit
507561466e
6 files changed
+283
-9
No files matched your search
@@ -26,6 +26,11 @@ window.__ModuleLoader__.load({
|
||||
'settings.thinking.hint': 'Offer every thinking level OmniRoute reports for each model. When off, existing levels are kept as they are.',
|
||||
'settings.usage': 'Usage tracking',
|
||||
'settings.usage.hint': 'Show provider quotas (5-hour, weekly, monthly, …) under the composer.',
|
||||
'settings.webSearch': 'Web search tools',
|
||||
'settings.webSearch.hint': 'Give the agent omniroute_web_search, omniroute_web_fetch and omniroute_search_providers, backed by the gateway\'s search providers.',
|
||||
'settings.searchProvider': 'Search provider (blank = first configured)',
|
||||
'settings.fetchProvider': 'Fetch provider (blank = first configured)',
|
||||
'settings.searchMaxResults': 'Default results per search',
|
||||
'settings.pollSec': 'Refresh quotas every (seconds)',
|
||||
'settings.test': 'Test connection',
|
||||
'settings.save': 'Save',
|
||||
@@ -87,6 +92,11 @@ window.__ModuleLoader__.load({
|
||||
'settings.thinking.hint': '为每个模型提供 OmniRoute 报告的全部思考强度。关闭时保持现有强度不变。',
|
||||
'settings.usage': '用量跟踪',
|
||||
'settings.usage.hint': '在输入框下方显示提供商配额(5 小时、每周、每月等)。',
|
||||
'settings.webSearch': '网页搜索工具',
|
||||
'settings.webSearch.hint': '为智能体提供 omniroute_web_search、omniroute_web_fetch 和 omniroute_search_providers 工具,使用网关的搜索提供商。',
|
||||
'settings.searchProvider': '搜索提供商(留空 = 第一个已配置的)',
|
||||
'settings.fetchProvider': '抓取提供商(留空 = 第一个已配置的)',
|
||||
'settings.searchMaxResults': '每次搜索默认结果数',
|
||||
'settings.pollSec': '配额刷新间隔(秒)',
|
||||
'settings.test': '测试连接',
|
||||
'settings.save': '保存',
|
||||
@@ -224,7 +234,7 @@ window.__ModuleLoader__.load({
|
||||
try {
|
||||
const s = await call('status');
|
||||
setStatus(s);
|
||||
setForm((f) => f || { url: s.url || s.effectiveUrl || '', provider: s.provider, discovery: s.discovery, updateOnly: !!s.updateOnly, include: s.include || '', exclude: s.exclude || '', discoverThinking: s.discoverThinking !== false, usage: s.usage, pollSec: s.pollSec, syncMin: s.syncMin });
|
||||
setForm((f) => f || { url: s.url || s.effectiveUrl || '', provider: s.provider, discovery: s.discovery, updateOnly: !!s.updateOnly, include: s.include || '', exclude: s.exclude || '', discoverThinking: s.discoverThinking !== false, usage: s.usage, pollSec: s.pollSec, syncMin: s.syncMin, webSearch: s.webSearch !== false, searchProvider: s.searchProvider || '', fetchProvider: s.fetchProvider || '', searchMaxResults: s.searchMaxResults || 8 });
|
||||
} catch (e) { setMsg({ bad: true, text: String(e.message) }); }
|
||||
}, []);
|
||||
React.useEffect(() => { refresh(); }, [refresh]);
|
||||
@@ -293,6 +303,14 @@ window.__ModuleLoader__.load({
|
||||
form.usage ? h('div', { style: { ...field, marginLeft: 26 } },
|
||||
h('label', { style: hintStyle }, t('settings.pollSec')),
|
||||
h('input', { type: 'number', min: 30, max: 3600, value: form.pollSec, onChange: (e) => set('pollSec')(Number(e.target.value)), style: { ...inputStyle, maxWidth: 120 } })) : null,
|
||||
h(Toggle, { checked: form.webSearch, onChange: set('webSearch'), label: t('settings.webSearch'), hint: t('settings.webSearch.hint') }),
|
||||
form.webSearch ? h('div', { style: { ...field, marginLeft: 26 } },
|
||||
h('label', { style: hintStyle }, t('settings.searchProvider')),
|
||||
h('input', { value: form.searchProvider, placeholder: 'anysearch-search', onChange: (e) => set('searchProvider')(e.target.value), style: { ...inputStyle, maxWidth: 260 } }),
|
||||
h('label', { style: hintStyle }, t('settings.fetchProvider')),
|
||||
h('input', { value: form.fetchProvider, placeholder: 'anysearch-search', onChange: (e) => set('fetchProvider')(e.target.value), style: { ...inputStyle, maxWidth: 260 } }),
|
||||
h('label', { style: hintStyle }, t('settings.searchMaxResults')),
|
||||
h('input', { type: 'number', min: 1, max: 20, value: form.searchMaxResults, onChange: (e) => set('searchMaxResults')(Number(e.target.value)), style: { ...inputStyle, maxWidth: 120 } })) : null,
|
||||
h('div', { style: { display: 'flex', gap: 8, flexWrap: 'wrap', marginBottom: 10 } },
|
||||
h('button', { type: 'button', onClick: test, disabled: !!busy, style: btnStyle(false, !!busy) }, busy === 'test' ? t('settings.testing') : t('settings.test')),
|
||||
h('button', { type: 'button', onClick: save, disabled: !!busy, style: btnStyle(true, !!busy) }, t('settings.save')),
|
||||
|
||||
Reference in new issue
Block a user