feat: Enhance API testing to allow sending actual chat messages to specific accounts and display AI replies.

This commit is contained in:
CJACK
2026-02-01 03:19:25 +08:00
parent 5ac472626e
commit a6d89876ba
2 changed files with 155 additions and 7 deletions

View File

@@ -11,9 +11,13 @@ export default function ApiTester({ config, onMessage }) {
const [model, setModel] = useState('deepseek-chat')
const [message, setMessage] = useState('你好,请用一句话介绍你自己。')
const [apiKey, setApiKey] = useState('')
const [selectedAccount, setSelectedAccount] = useState('') // 空为随机
const [response, setResponse] = useState(null)
const [loading, setLoading] = useState(false)
// 获取账号列表
const accounts = config.accounts || []
const testApi = async () => {
setLoading(true)
setResponse(null)
@@ -84,6 +88,48 @@ export default function ApiTester({ config, onMessage }) {
}
}
// 智能测试:根据是否选择账号决定测试方式
const sendTest = async () => {
setLoading(true)
setResponse(null)
// 如果选择了指定账号,使用账号测试接口
if (selectedAccount) {
try {
const res = await fetch('/admin/accounts/test', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
identifier: selectedAccount,
model,
message,
}),
})
const data = await res.json()
setResponse({
success: data.success,
status_code: res.status,
response: data,
account: selectedAccount,
})
if (data.success) {
onMessage('success', `${selectedAccount}: 测试成功 (${data.response_time}ms)`)
} else {
onMessage('error', `${selectedAccount}: ${data.message}`)
}
} catch (e) {
onMessage('error', '网络错误: ' + e.message)
setResponse({ error: e.message })
} finally {
setLoading(false)
}
return
}
// 随机账号:使用标准 API
directTest()
}
return (
<div className="section">
<div className="card">
@@ -102,6 +148,21 @@ export default function ApiTester({ config, onMessage }) {
</select>
</div>
<div className="form-group">
<label className="form-label">账号指定测试哪个账号</label>
<select
className="form-input"
value={selectedAccount}
onChange={e => setSelectedAccount(e.target.value)}
>
<option value="">🎲 随机选择</option>
{accounts.map((acc, i) => {
const id = acc.email || acc.mobile
return <option key={i} value={id}>{id} {acc.has_token ? '✅' : '⚠️'}</option>
})}
</select>
</div>
<div className="form-group">
<label className="form-label">API Key留空使用第一个配置的 Key</label>
<input
@@ -124,8 +185,9 @@ export default function ApiTester({ config, onMessage }) {
</div>
<div className="btn-group">
<button className="btn btn-primary" onClick={directTest} disabled={loading}>
{loading ? <span className="loading"></span> : '🚀 发送请求'}
<button className="btn btn-primary" onClick={sendTest} disabled={loading}>
{loading ? <span className="loading"></span> :
selectedAccount ? `🚀 使用 ${selectedAccount} 发送` : '🚀 发送请求'}
</button>
</div>
</div>
@@ -155,6 +217,21 @@ export default function ApiTester({ config, onMessage }) {
</div>
</div>
)}
{/* 指定账号测试的回复 */}
{response.success && response.response?.reply && (
<div style={{ marginTop: '1rem' }}>
<div className="form-label">AI 回复 ({response.account})</div>
<div style={{
padding: '1rem',
background: 'var(--bg-tertiary)',
borderRadius: 'var(--radius)',
whiteSpace: 'pre-wrap'
}}>
{response.response.reply}
</div>
</div>
)}
</div>
)}
</div>