Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LLM API Perf Tester

一个面向 OpenAI 兼容接口的本地测试工具,提供以下能力:

  • 通用 HTTP 文本模型测试
  • 通用 HTTP 图像接口调试
  • 通用 HTTP 视频任务创建/查询与结果回查
  • 结果聚合、图表分析、ZIP 报告导出
  • CSV / JSONL / JSON 测试集批量执行与功能点校验
  • 独立测试集管理页,可前端编辑、上传并保存到 datasets/

项目基于 Streamlit 构建 UI,使用 asyncio + aiohttp 执行异步请求,适合快速验证模型网关、供应商 API 或代理服务的稳定性和性能表现。

功能概览

文本测试

  • 拉取模型:GET /v1/models
  • 通用 HTTP 文本请求:默认按 OpenAI POST /v1/chat/completions 填充,也可手动输入请求 Method、URL、Headers、Body
  • JSON 输入支持注释,输入框会根据当前内容动态调整高度
  • 支持上传测试集并用 {prompt}{model} 等变量渲染请求 Body
  • 支持多轮次、并发请求,结果写入 perf_test_results.csv
  • 指标统计:Total Time、token/s、Success Rate(Avg/P50/P99;TTFT/TPOT 仅历史流式数据可用)

图像测试

  • 通用 HTTP 图像请求:默认按 OpenAI POST /v1/images/generations 填充,也可手动输入请求 Method、URL、Headers、Body
  • JSON 输入支持注释,输入框会根据当前内容动态调整高度
  • 支持测试集、并发数、轮次、成功率和延迟统计
  • 自动解析 URL / base64 图片并落盘到 artifacts/image/...
  • 图像任务状态历史列表和图像产物文件浏览器已合并在通用 HTTP 图像任务测试内

视频测试

  • 通用 HTTP 创建任务:默认按 TokenRouter POST https://api.tokenrouter.com/v1/video/generations 填充,也可手动输入请求 Method、URL、Headers、Body
  • 通用 HTTP 查询/轮询:默认按 TokenRouter GET https://api.tokenrouter.com/v1/video/generations/{task_id} 填充,也可手动输入轮询 Method、URL 模板、Headers、Body 模板
  • JSON 输入支持注释,输入框会根据当前内容动态调整高度
  • 支持用字段路径解析 task_idstatusprogressresult_url
  • 支持创建后自动轮询、并发创建、并发轮询与实时状态表
  • 所有视频创建/轮询请求的参数、响应、耗时和错误会追加写入 video_request_logs.jsonl
  • 视频创建/轮询关键结果会写入 perf_test_results.csv,用于统一报告
  • 视频任务状态历史列表和视频产物文件浏览器已合并在通用 HTTP 视频任务测试内
  • 支持创建后自动轮询、状态追踪、结果 URL 落盘

报告导出

  • 单 Base URL 报告导出(ZIP)
  • 多 Base URL 对比报告导出(ZIP)
  • 支持按 text/image/video 模态筛选
  • 导出内容包含明细、模型汇总与失败样本 CSV

测试集格式

支持 CSV、JSONL 和 JSON 数组。推荐字段:

  • typetext / image / video
  • case_idcase_nametags
  • prompt
  • messages:JSON,用于文本多轮消息
  • model_params:JSON,会合并进请求 Body
  • expected_checks:JSON,支持 containsnot_containsmin_lengthmin_outputsrequired_paths

也支持全动态 Payload 参数法:测试集可携带任意列名,Body 模版中用 {{列名}} 占位。

测试集 CSV 示例:

case_id,MODEL_NAME,PROMPT_TEXT,DURATION_VAL
case_001,dreamina-seedance-2-0-260128,一大片白色的雏菊花田,5
case_002,other-model-v1,赛博朋克风格城市,10

Body 模版示例:

{
  "model": "{{MODEL_NAME}}",
  "prompt": "{{PROMPT_TEXT}}",
  "metadata": {
    "duration": {{DURATION_VAL}}
  }
}

测试集可在“测试集管理”页上传或直接编辑保存,文本/图像/视频测试页可从已保存测试集中导入执行。

技术栈

  • Python 3.10+
  • Streamlit
  • FastAPI
  • aiohttp
  • pandas
  • tiktoken
  • uv / uvicorn

项目结构

环境要求

  1. Python >= 3.10
  2. 已安装 uv

快速开始

1. 安装依赖

uv sync

2. 启动 Streamlit(推荐)

uv run streamlit run app.py

默认访问地址通常为 http://localhost:8501

3. 启动 FastAPI 代理(可选)

uv run uvicorn api_server:app --host 0.0.0.0 --port 8002 --reload

可用接口:

  • GET /health
  • GET /playground
  • POST /proxy/chat/stream

4. 一键启动两个服务

./start_all.sh

可选环境变量:

STREAMLIT_HOST=0.0.0.0 STREAMLIT_PORT=8501 API_HOST=0.0.0.0 API_PORT=8002 ./start_all.sh

Ctrl+C 可同时停止两个进程。

使用说明

文本模型测试

  1. 在“文本模型测试”填写 Base URL 与 API Key。
  2. 点击“拉取模型”。
  3. 按需修改通用 HTTP 文本请求的 URL、Headers、Body,并设置并发与轮数。
  4. 点击“发送通用文本请求”,查看汇总指标、图表和明细。

文本、图像与视频调试

分别在“文本模型测试”“图像模型测试”“视频模型测试”页操作,支持:

  • 文本/图像 OpenAI 默认参数、视频 TokenRouter 默认参数一键填充
  • 原始 JSON 响应查看
  • 任务历史回查
  • 本地产物浏览(图片/视频)

报告导出

在“报告导出”页可导出:

  • 单个 Base URL 报告
  • 多个 Base URL 横向对比报告

数据文件

程序在项目根目录维护以下 CSV 文件(不存在时自动创建):

  • history_config.csv:连接配置与模型缓存
  • perf_test_results.csv:文本压测/对话结果明细
  • task_status_history.csv:图像/视频任务状态历史
  • datasets/*.csv:前端编辑或上传保存的测试集

图像和视频下载产物默认保存在:

  • artifacts/image/<provider>/<model>/...
  • artifacts/video/<provider>/<model>/...

指标定义

  • TTFT:首个有效 token 延迟
  • TPOT:首 token 后平均每 token 耗时
  • Total Time:请求总耗时
  • token/stotal_tokens / total_time
  • Success Rate:成功请求占比

代理接口示例

POST /proxy/chat/stream 请求体示例:

{
  "base_url": "https://your-api-host",
  "api_key": "sk-xxx",
  "model": "your-model",
  "prompt": "你好,请用三句话介绍你自己"
}

返回格式为 text/event-stream,可在浏览器 Network 面板观察 data: 分块。

注意事项

  • history_config.csv 会保存 API Key 明文,仅建议在受控本地环境使用。
  • Base URL 建议填写到服务根路径(无需手动加 /v1)。
  • 如果网关不支持特定推理控制字段,工具会自动降级重试,尽量兼容更多模型实现。

常见问题

拉取模型失败

  • 检查 Base URL 与 API Key 是否正确。
  • 确认目标服务支持 GET /v1/models

压测无 token 或成功率低

  • 检查服务端是否按 SSE 标准返回 data: 行与 [DONE]
  • 检查上游限流、超时与模型可用状态。

图像/视频未保存本地产物

  • 确认响应中是否包含可下载 URL 或有效 base64 数据。
  • 检查目标 URL 是否可被当前机器访问。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages