Merge pull request #5 from luxlzz6/main

令牌搜索适配MySQL,MJ日志增加图生文 图生图
This commit is contained in:
Calcium-Ion 2023-11-15 10:26:49 +08:00 committed by GitHub
commit f3b1f27657
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 29 deletions

View File

@ -33,7 +33,7 @@ func SearchUserTokens(userId int, keyword string, token string) (tokens []*Token
if token != "" {
token = strings.Trim(token, "sk-")
}
err = DB.Where("user_id = ?", userId).Where("name LIKE ?", keyword+"%").Where("key LIKE ?", token+"%").Find(&tokens).Error
err = DB.Where("user_id = ?", userId).Where("name LIKE ?", keyword+"%").Where("`key` LIKE ?", token+"%").Find(&tokens).Error
return tokens, err
}

View File

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react';
import { Button, Form, Header, Label, Pagination, Segment, Select, Table } from 'semantic-ui-react';
import { Button, Form, Header, Label, Pagination, Segment, Select, Table,Modal } from 'semantic-ui-react';
import { API, isAdmin, showError, timestamp2string } from '../helpers';
import { ITEMS_PER_PAGE } from '../constants';
@ -85,6 +85,8 @@ const LogsTable = () => {
const [searching, setSearching] = useState(false);
const [logType, setLogType] = useState(0);
const isAdminUser = isAdmin();
let now = new Date();
const [inputs, setInputs] = useState({
username: '',
@ -100,33 +102,14 @@ const LogsTable = () => {
token: 0
});
const handleInputChange = (e, { name, value }) => {
setInputs((inputs) => ({ ...inputs, [name]: value }));
const [modalContent, setModalContent] = useState('');
const [showModal, setShowModal] = useState(false);
const showFullContent = (content) => {
setModalContent(content);
setShowModal(true);
};
const getLogSelfStat = async () => {
let localStartTimestamp = Date.parse(start_timestamp) / 1000;
let localEndTimestamp = Date.parse(end_timestamp) / 1000;
let res = await API.get(`/api/log/self/stat?type=${logType}&token_name=${token_name}&model_name=${model_name}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`);
const { success, message, data } = res.data;
if (success) {
setStat(data);
} else {
showError(message);
}
};
const getLogStat = async () => {
let localStartTimestamp = Date.parse(start_timestamp) / 1000;
let localEndTimestamp = Date.parse(end_timestamp) / 1000;
let res = await API.get(`/api/log/stat?type=${logType}&username=${username}&token_name=${token_name}&model_name=${model_name}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`);
const { success, message, data } = res.data;
if (success) {
setStat(data);
} else {
showError(message);
}
};
const loadLogs = async (startIdx) => {
let url = '';
@ -301,6 +284,15 @@ const LogsTable = () => {
>
Prompt
</Table.HeaderCell>
<Table.HeaderCell
style={{ cursor: 'pointer' }}
onClick={() => {
sortLog('prompt_en');
}}
width={3}
>
PromptEn
</Table.HeaderCell>
<Table.HeaderCell
style={{ cursor: 'pointer' }}
onClick={() => {
@ -342,8 +334,33 @@ const LogsTable = () => {
) : '暂未生成图片'
}
</Table.Cell>
<Table.Cell>{log.prompt}</Table.Cell>
<Table.Cell>{log.fail_reason ? log.fail_reason : '无'}</Table.Cell>
<Table.Cell>
{log.prompt.length > 10
? <div>
{log.prompt.slice(0, 10)}
<a style={{cursor: "pointer"}} onClick={() => showFullContent(log.prompt)}>查看全部</a>
</div>
: log.prompt
}
</Table.Cell>
<Table.Cell>
{log.prompt_en.length > 10
? <div>
{log.prompt_en.slice(0, 10)}
<a style={{cursor: "pointer"}} onClick={() => showFullContent(log.prompt_en)}>查看全部</a>
</div>
: log.prompt_en
}
</Table.Cell>
<Table.Cell>
{log.fail_reason && log.fail_reason.length > 10
? <div>
{log.fail_reason.slice(0, 10)}
<a style={{cursor: "pointer"}} onClick={() => showFullContent(log.fail_reason)}>查看全部</a>
</div>
: log.fail_reason || '无'
}
</Table.Cell>
</Table.Row>
);
})}
@ -379,6 +396,12 @@ const LogsTable = () => {
</Table.Footer>
</Table>
</Segment>
{/*Modal component goes here*/}
<Modal open={showModal} onClose={() => setShowModal(false)} centered>
<Modal.Content>
<pre style={{whiteSpace: "pre-wrap"}}>{modalContent}</pre>
</Modal.Content>
</Modal>
</>
);
};