|
|
|
|
|
from typing import Type |
|
|
|
|
|
import gradio as gr |
|
|
from packaging import version |
|
|
|
|
|
from swift.ui.base import BaseUI |
|
|
from swift.ui.llm_infer.runtime import Runtime |
|
|
from swift.utils import get_logger |
|
|
|
|
|
logger = get_logger() |
|
|
|
|
|
|
|
|
class EvalRuntime(Runtime): |
|
|
|
|
|
group = 'llm_eval' |
|
|
|
|
|
cmd = 'eval' |
|
|
|
|
|
locale_dict = { |
|
|
'runtime_tab': { |
|
|
'label': { |
|
|
'zh': '运行时', |
|
|
'en': 'Runtime' |
|
|
}, |
|
|
}, |
|
|
'running_cmd': { |
|
|
'label': { |
|
|
'zh': '运行命令', |
|
|
'en': 'Command line' |
|
|
}, |
|
|
'info': { |
|
|
'zh': '执行的实际命令', |
|
|
'en': 'The actual command' |
|
|
} |
|
|
}, |
|
|
'show_log': { |
|
|
'value': { |
|
|
'zh': '展示评测状态', |
|
|
'en': 'Show eval status' |
|
|
}, |
|
|
}, |
|
|
'stop_show_log': { |
|
|
'value': { |
|
|
'zh': '停止展示', |
|
|
'en': 'Stop showing running status' |
|
|
}, |
|
|
}, |
|
|
'log': { |
|
|
'label': { |
|
|
'zh': '日志输出', |
|
|
'en': 'Logging content' |
|
|
}, |
|
|
'info': { |
|
|
'zh': '如果日志无更新请再次点击"展示日志内容"', |
|
|
'en': 'Please press "Show log" if the log content is not updating' |
|
|
} |
|
|
}, |
|
|
'running_tasks': { |
|
|
'label': { |
|
|
'zh': '运行中评测', |
|
|
'en': 'Running evaluation' |
|
|
}, |
|
|
'info': { |
|
|
'zh': '所有的swift eval命令启动的任务', |
|
|
'en': 'All tasks started by swift eval' |
|
|
} |
|
|
}, |
|
|
'refresh_tasks': { |
|
|
'value': { |
|
|
'zh': '找回评测', |
|
|
'en': 'Find evaluation' |
|
|
}, |
|
|
}, |
|
|
'kill_task': { |
|
|
'value': { |
|
|
'zh': '杀死评测', |
|
|
'en': 'Kill evaluation' |
|
|
}, |
|
|
}, |
|
|
} |
|
|
|
|
|
@classmethod |
|
|
def do_build_ui(cls, base_tab: Type['BaseUI']): |
|
|
with gr.Accordion(elem_id='runtime_tab', open=False, visible=True): |
|
|
with gr.Blocks(): |
|
|
with gr.Row(): |
|
|
gr.Dropdown(elem_id='running_tasks', scale=10) |
|
|
gr.Button(elem_id='refresh_tasks', scale=1, variant='primary') |
|
|
gr.Button(elem_id='show_log', scale=1, variant='primary') |
|
|
gr.Button(elem_id='stop_show_log', scale=1) |
|
|
gr.Button(elem_id='kill_task', scale=1, size='lg') |
|
|
with gr.Row(): |
|
|
gr.Textbox(elem_id='log', lines=6, visible=False) |
|
|
|
|
|
concurrency_limit = {} |
|
|
if version.parse(gr.__version__) >= version.parse('4.0.0'): |
|
|
concurrency_limit = {'concurrency_limit': 5} |
|
|
cls.log_event = base_tab.element('show_log').click(cls.update_log, [], [cls.element('log')]).then( |
|
|
cls.wait, [base_tab.element('running_tasks')], [cls.element('log')], **concurrency_limit) |
|
|
|
|
|
base_tab.element('stop_show_log').click(cls.break_log_event, [cls.element('running_tasks')], []) |
|
|
|
|
|
base_tab.element('refresh_tasks').click( |
|
|
cls.refresh_tasks, |
|
|
[base_tab.element('running_tasks')], |
|
|
[base_tab.element('running_tasks')], |
|
|
) |
|
|
|