Skip to content

Commit

Permalink
support filter when printing evaluable models
Browse files Browse the repository at this point in the history
  • Loading branch information
ZingLix committed Feb 21, 2024
1 parent 79f2460 commit aa3b926
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 30 deletions.
18 changes: 17 additions & 1 deletion docs/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,6 @@ $ qianfan trainer run [OPTIONS]

* `--train-type TEXT`:训练类型 [required]
* `--dataset-id INTEGER`:数据集 id [required]
* `--list-evaluable-models`: 打印支持进行评估的模型列表
* `--help`:展示帮助文档

训练相关配置,参数含义与 [训练 API 文档](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/mlmrgo4yx#body%E5%8F%82%E6%95%B0) 中对应参数含义一致:
Expand Down Expand Up @@ -368,6 +367,7 @@ $ qianfan evaluation run [OPTIONS] MODELS...
**Options 选项**:

* `--dataset-id TEXT`: 待评估的数据集 id [required]
* `--list-evaluable-models`: 打印支持进行评估的模型列表(已过时,请使用 `qianfan evaluation list-evaluable-models`
* `--enable-rule-evaluator / --no-enable-rule-evaluator`: 启用 RuleEvaluator,使用一定的评估规则来对推理结果进行评估,该评估器支持如下参数 [default: no-enable-rule-evaluator]
* `--using-similarity / --no-using-similarity`: 使用相似度评估结果 [default: no-using-similarity]
* `--using-accuracy / --no-using-accuracy`: 使用准确率评估结果 [default: no-using-accuracy]
Expand All @@ -385,3 +385,19 @@ $ qianfan evaluation run [OPTIONS] MODELS...
* `--enable-manual-evaluator / --no-enable-manual-evaluator`: 使用手动评估器,完成推理后由用户在平台上手动对推理结果进行打分评估 [default: no-enable-manual-evaluator]
* `--dimensions TEXT`: 评估的维度,通过 `,` 分隔不同的维度
* `--help`: 展示帮助信息

#### list-evaluable-models 打印可评估模型

**用法**:

```console
$ qianfan evaluation list-evaluable-models [OPTIONS]
```

**Options 选项**:

* `--preset / --no-preset`: 是否仅打印(非)预置模型,不设置则打印所有模型
* `--train-type`: 仅打印特定训练类型的模型,可以通过 `,` 分隔多个训练类型
* `--name`: 过滤模型名称,可以通过 `,` 分隔多个名称
* `--help`: 展示帮助信息

96 changes: 67 additions & 29 deletions python/qianfan/common/client/evaluation.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,39 +57,77 @@


@credential_required
@evaluation_app.command()
def list_evaluable_models(
ctx: typer.Context, param: typer.CallbackParam, value: bool
preset: Optional[bool] = typer.Option(
None,
help="Whether only print (non-)preset models. Not set to print all models.",
show_default=False,
),
train_type: Optional[str] = typer.Option(
None, help="Filter by train type. Use comma(,) to set multiple values."
),
name: Optional[str] = typer.Option(
None, help="Filter by model name. Use comma(,) to set multiple values."
),
) -> None:
"""
Print models of ChatCompletion and exit.
Print evaluable models.
"""
train_type_set = None if train_type is None else set(train_type.split(","))
name_set = None if name is None else set(name.split(","))
model_list = ModelResource.evaluable_model_list()["result"]
console = replace_logger_handler()
table = Table(show_lines=True)
col_list = ["Model Name", "Platform Preset", "Train Type", "Model Version List"]
for col in col_list:
table.add_column(col)
for model in model_list:
if preset is not None:
if model["source"] != "PlatformPreset" and preset:
continue
if model["source"] == "PlatformPreset" and not preset:
continue
if train_type_set is not None:
if model["trainType"] not in train_type_set:
continue
if name_set is not None:
found = False
for n in name_set:
if n in model["modelName"]:
found = True
if not found:
continue
row_items: List[RenderableType] = []
# Model Name
row_items.append(f"{model['modelName']}\n[dim]{model['modelIdStr']}[/]")
# Platform Preset
model_source = model["source"]
if model_source == "PlatformPreset":
row_items.append("Yes")
else:
row_items.append(f"No\n[dim]{model_source}[/]")
# Train Type
row_items.append(model["trainType"])
# Model Version List
version_list = [
f"{version['version']} [dim]({version['modelVersionIdStr']})[/]"
for version in model["modelVersionList"]
]
row_items.append("\n".join(version_list))
table.add_row(*row_items)
console.print(table)


def list_evaluable_models_callback(
ctx: typer.Context, param: typer.CallbackParam, value: bool
) -> None:
if value:
model_list = ModelResource.evaluable_model_list()["result"]
console = replace_logger_handler()
table = Table(show_lines=True)
col_list = ["Model Name", "Platform Preset", "Train Type", "Model Version List"]
for col in col_list:
table.add_column(col)
for model in model_list:
row_items: List[RenderableType] = []
# Model Name
row_items.append(f"{model['modelName']}\n[dim]{model['modelIdStr']}[/]")
# Platform Preset
model_source = model["source"]
if model_source == "PlatformPreset":
row_items.append("Yes")
else:
row_items.append(f"No\n[dim]{model_source}[/]")
# Train Type
row_items.append(model["trainType"])
# Model Version List
version_list = [
f"{version['version']} [dim]({version['modelVersionIdStr']})[/]"
for version in model["modelVersionList"]
]
row_items.append("\n".join(version_list))
table.add_row(*row_items)
console.print(table)
print_warn_msg(
"This option is [bold]deprecated[/]. Use `qianfan evaluation"
" list-evaluable-models` instead."
)
list_evaluable_models(None, None, None)
raise typer.Exit()


Expand Down Expand Up @@ -153,7 +191,7 @@ def run(
list_evaluable_models: Optional[bool] = typer.Option(
None,
"--list-evaluable-models",
callback=list_evaluable_models,
callback=list_evaluable_models_callback,
is_eager=True,
help="Print evaluable models.",
),
Expand Down

0 comments on commit aa3b926

Please sign in to comment.