[diffusion] CI: switch CI data references to sgl-project/ci-data (#24299)

This commit is contained in:
Mick
2026-05-03 23:05:12 +08:00
committed by GitHub
parent c0f5950636
commit 5925572c95
12 changed files with 130 additions and 162 deletions
@@ -40,7 +40,6 @@ DEFAULT_THRESHOLDS = {
CASE_THRESHOLDS: Dict[str, Dict[ComponentType, float]] = { CASE_THRESHOLDS: Dict[str, Dict[ComponentType, float]] = {
# Add overrides here when a specific model/component needs a different threshold. # Add overrides here when a specific model/component needs a different threshold.
"flux_2_image_t2i": {ComponentType.TRANSFORMER: 0.99}, "flux_2_image_t2i": {ComponentType.TRANSFORMER: 0.99},
"flux_2_image_t2i_layerwise_offload": {ComponentType.TRANSFORMER: 0.99},
"flux_2_image_t2i_2_gpus": {ComponentType.TRANSFORMER: 0.99}, "flux_2_image_t2i_2_gpus": {ComponentType.TRANSFORMER: 0.99},
"flux_2_ti2i": {ComponentType.TRANSFORMER: 0.99}, "flux_2_ti2i": {ComponentType.TRANSFORMER: 0.99},
"flux_2_t2i_customized_vae_path": {ComponentType.TRANSFORMER: 0.99}, "flux_2_t2i_customized_vae_path": {ComponentType.TRANSFORMER: 0.99},
@@ -62,11 +61,6 @@ SKIP_COMPONENTS: Dict[str, Dict[ComponentType, ComponentSkip]] = {
"Text encoder diverges from HF baseline despite 100% matched weights (CosSim ~0.47)" "Text encoder diverges from HF baseline despite 100% matched weights (CosSim ~0.47)"
) )
}, },
"sana_image_t2i": {
ComponentType.VAE: ComponentSkip(
"HF AutoencoderDC checkpoint leaves required to_qkv_multiscale weights missing, so VAE transfer would compare against partially initialized reference weights"
)
},
"qwen_image_t2i_cache_dit_enabled": { "qwen_image_t2i_cache_dit_enabled": {
ComponentType.VAE: ComponentSkip( ComponentType.VAE: ComponentSkip(
"Representative VAE accuracy is already covered by qwen_image_t2i for the same source component and topology" "Representative VAE accuracy is already covered by qwen_image_t2i for the same source component and topology"
@@ -104,6 +98,9 @@ SKIP_COMPONENTS: Dict[str, Dict[ComponentType, ComponentSkip]] = {
ComponentType.VAE: ComponentSkip( ComponentType.VAE: ComponentSkip(
"Representative VAE accuracy is already covered by zimage_image_t2i for the same source component and topology" "Representative VAE accuracy is already covered by zimage_image_t2i for the same source component and topology"
), ),
ComponentType.TRANSFORMER: ComponentSkip(
"FP8 transformer override cannot be materialized by the Diffusers reference loader"
),
ComponentType.TEXT_ENCODER: ComponentSkip( ComponentType.TEXT_ENCODER: ComponentSkip(
"Representative text encoder accuracy is already covered by zimage_image_t2i for the same source component and topology" "Representative text encoder accuracy is already covered by zimage_image_t2i for the same source component and topology"
), ),
@@ -1,5 +1,13 @@
from __future__ import annotations from __future__ import annotations
from sglang.multimodal_gen.test.server.accuracy_config import (
ComponentType,
should_skip_component,
)
from sglang.multimodal_gen.test.server.accuracy_utils import (
extract_component_path_overrides,
)
from sglang.multimodal_gen.test.server.component_accuracy import COMPONENT_SPECS
from sglang.multimodal_gen.test.server.gpu_cases import ( from sglang.multimodal_gen.test.server.gpu_cases import (
ONE_GPU_CASES, ONE_GPU_CASES,
TWO_GPU_CASES, TWO_GPU_CASES,
@@ -7,70 +15,62 @@ from sglang.multimodal_gen.test.server.gpu_cases import (
from sglang.multimodal_gen.test.server.testcase_configs import DiffusionTestCase from sglang.multimodal_gen.test.server.testcase_configs import DiffusionTestCase
def _select_accuracy_cases( def _component_accuracy_key(case: DiffusionTestCase, component: ComponentType) -> tuple:
cases: list[DiffusionTestCase], enabled_ids: tuple[str, ...] server_args = case.server_args
) -> list[DiffusionTestCase]: component_paths = extract_component_path_overrides(server_args.extras)
enabled = set(enabled_ids) override_path = None
return [case for case in cases if case.id in enabled] for key in (component.value, *COMPONENT_SPECS[component].model_index_keys):
if key in component_paths:
override_path = component_paths[key]
break
return (
component.value,
server_args.model_path,
override_path,
server_args.num_gpus,
server_args.tp_size,
server_args.ulysses_degree,
server_args.ring_degree,
server_args.cfg_parallel,
)
ACCURACY_ONE_GPU_CASE_IDS = ( _COMPONENT_DUPLICATE_REASONS: dict[tuple[str, ComponentType], str] = {}
"qwen_image_t2i",
"qwen_image_t2i_cache_dit_enabled",
"flux_image_t2i",
"flux_2_image_t2i",
"flux_2_klein_image_t2i",
"layerwise_offload",
"zimage_image_t2i",
"zimage_image_t2i_fp8",
"zimage_image_t2i_multi_lora",
"qwen_image_edit_ti2i",
"qwen_image_edit_2509_ti2i",
"qwen_image_edit_2511_ti2i",
"qwen_image_layered_i2i",
"flux_2_image_t2i_upscaling_4x",
"mova_360p_1gpu",
"wan2_1_t2v_1.3b",
"wan2_1_t2v_1.3b_teacache_enabled",
"wan2_1_t2v_1.3b_frame_interp_2x",
"wan2_1_t2v_1.3b_upscaling_4x",
"wan2_1_t2v_1.3b_frame_interp_2x_upscaling_4x",
"wan2_1_t2v_1_3b_lora_1gpu",
"flux_2_ti2i",
"flux_2_t2i_customized_vae_path",
"fast_hunyuan_video",
"wan2_2_ti2v_5b",
"fastwan2_2_ti2v_5b",
"hunyuan3d_shape_gen",
"turbo_wan2_1_t2v_1.3b",
"flux_2_ti2i_multi_image_cache_dit",
)
ACCURACY_TWO_GPU_CASE_IDS = (
"wan2_2_i2v_a14b_2gpu",
"wan2_2_t2v_a14b_2gpu",
"wan2_2_t2v_a14b_teacache_2gpu",
"wan2_2_t2v_a14b_lora_2gpu",
"wan2_1_t2v_14b_2gpu",
"wan2_1_t2v_1.3b_cfg_parallel",
"fsdp-inference",
"mova_360p_tp2",
"mova_360p_ring1_uly2",
"mova_360p_ring2_uly1",
"ltx_2_two_stage_t2v",
"wan2_1_i2v_14b_480P_2gpu",
"wan2_1_i2v_14b_lora_2gpu",
"wan2_1_i2v_14b_720P_2gpu",
"qwen_image_t2i_2_gpus",
"zimage_image_t2i_2_gpus",
"zimage_image_t2i_2_gpus_non_square",
"flux_image_t2i_2_gpus",
"flux_2_image_t2i_2_gpus",
)
ACCURACY_ONE_GPU_CASES = _select_accuracy_cases( def _select_accuracy_cases(cases: list[DiffusionTestCase]) -> list[DiffusionTestCase]:
ONE_GPU_CASES, ACCURACY_ONE_GPU_CASE_IDS selected: list[DiffusionTestCase] = []
) seen: dict[tuple, str] = {}
ACCURACY_TWO_GPU_CASES = _select_accuracy_cases( for case in cases:
TWO_GPU_CASES, ACCURACY_TWO_GPU_CASE_IDS if not case.run_component_accuracy_check:
) continue
has_component_to_run = False
for component in ComponentType:
if should_skip_component(case, component):
continue
key = _component_accuracy_key(case, component)
representative = seen.get(key)
if representative is None:
seen[key] = case.id
has_component_to_run = True
else:
_COMPONENT_DUPLICATE_REASONS[(case.id, component)] = (
f"{component.value} component already covered by {representative}"
)
if has_component_to_run:
selected.append(case)
return selected
def get_component_duplicate_skip_reason(
case: DiffusionTestCase, component: ComponentType
) -> str | None:
return _COMPONENT_DUPLICATE_REASONS.get((case.id, component))
ACCURACY_ONE_GPU_CASES = _select_accuracy_cases(ONE_GPU_CASES)
ACCURACY_TWO_GPU_CASES = _select_accuracy_cases(TWO_GPU_CASES)
@@ -2,6 +2,7 @@ from __future__ import annotations
import json import json
import os import os
import shlex
from contextlib import nullcontext from contextlib import nullcontext
from dataclasses import dataclass from dataclasses import dataclass
from typing import Any, Dict, List, Optional, Tuple from typing import Any, Dict, List, Optional, Tuple
@@ -165,20 +166,24 @@ def resolve_component_path(
def extract_component_path_overrides(extra_args: List[str]) -> Dict[str, str]: def extract_component_path_overrides(extra_args: List[str]) -> Dict[str, str]:
normalized_args = []
for arg in extra_args:
normalized_args.extend(shlex.split(arg))
component_paths: Dict[str, str] = {} component_paths: Dict[str, str] = {}
index = 0 index = 0
while index < len(extra_args): while index < len(normalized_args):
arg = extra_args[index] arg = normalized_args[index]
key_part = arg.split("=", 1)[0] if "=" in arg else arg key_part = arg.split("=", 1)[0] if "=" in arg else arg
if key_part.startswith("--") and key_part.endswith("-path"): if key_part.startswith("--") and key_part.endswith("-path"):
component = key_part[2:-5].replace("-", "_") component = key_part[2:-5].replace("-", "_")
if "=" in arg: if "=" in arg:
component_paths[component] = arg.split("=", 1)[1] component_paths[component] = arg.split("=", 1)[1]
elif index + 1 < len(extra_args) and not extra_args[index + 1].startswith( elif index + 1 < len(normalized_args) and not normalized_args[
"-" index + 1
): ].startswith("-"):
index += 1 index += 1
component_paths[component] = extra_args[index] component_paths[component] = normalized_args[index]
index += 1 index += 1
for component, path in component_paths.items(): for component, path in component_paths.items():
@@ -228,12 +233,14 @@ def select_component_source(
override_path = component_paths.get(key) override_path = component_paths.get(key)
if override_path is None: if override_path is None:
continue continue
assert has_component_files(override_path), ( resolved_override_path = maybe_download_model(override_path)
component_paths[key] = resolved_override_path
assert has_component_files(resolved_override_path), (
f"Component override for {component.value} must point directly to a " f"Component override for {component.value} must point directly to a "
f"component directory: {override_path}" f"component directory: {override_path}"
) )
if component == ComponentType.TEXT_ENCODER: if component == ComponentType.TEXT_ENCODER:
assert is_text_encoder_config(override_path), ( assert is_text_encoder_config(resolved_override_path), (
f"Text encoder override must point to a text encoder directory: " f"Text encoder override must point to a text encoder directory: "
f"{override_path}" f"{override_path}"
) )
@@ -241,7 +248,7 @@ def select_component_source(
base_model_id=model_id, base_model_id=model_id,
base_model_root=base_model_root, base_model_root=base_model_root,
component_paths=component_paths, component_paths=component_paths,
source_path=override_path, source_path=resolved_override_path,
) )
source_path = resolve_component_path( source_path = resolve_component_path(
@@ -161,6 +161,7 @@ ONE_GPU_CASES: list[DiffusionTestCase] = [
DiffusionServerArgs(model_path=DEFAULT_JOYAI_IMAGE_EDIT_MODEL_NAME_FOR_TEST), DiffusionServerArgs(model_path=DEFAULT_JOYAI_IMAGE_EDIT_MODEL_NAME_FOR_TEST),
TI2I_sampling_params, TI2I_sampling_params,
run_consistency_check=False, run_consistency_check=False,
run_component_accuracy_check=False,
), ),
# Upscaling (Real-ESRGAN 4×) for T2I # Upscaling (Real-ESRGAN 4×) for T2I
DiffusionTestCase( DiffusionTestCase(
@@ -344,6 +345,7 @@ ONE_GPU_CASES: list[DiffusionTestCase] = [
}, },
), ),
T2I_sampling_params, T2I_sampling_params,
run_component_accuracy_check=False,
), ),
] ]
@@ -538,6 +540,7 @@ TWO_GPU_CASES = [
], ],
), ),
TI2V_sampling_params, TI2V_sampling_params,
run_component_accuracy_check=False,
), ),
DiffusionTestCase( DiffusionTestCase(
"wan2_1_i2v_14b_480P_2gpu", "wan2_1_i2v_14b_480P_2gpu",
@@ -558,6 +561,7 @@ TWO_GPU_CASES = [
], ],
), ),
T2V_sampling_params, T2V_sampling_params,
run_component_accuracy_check=False,
), ),
# I2V LoRA test case # I2V LoRA test case
DiffusionTestCase( DiffusionTestCase(
@@ -630,6 +634,7 @@ TWO_GPU_CASES = [
ulysses_degree=2, ulysses_degree=2,
), ),
TI2V_sampling_params, TI2V_sampling_params,
run_component_accuracy_check=False,
), ),
] ]
@@ -2374,73 +2374,6 @@
"expected_median_denoise_ms": 149.9, "expected_median_denoise_ms": 149.9,
"estimated_full_test_time_s": 129.4 "estimated_full_test_time_s": 129.4
}, },
"flux_2_nvfp4_t2i": {
"stages_ms": {
"InputValidationStage": 0.05,
"DecodingStage": 7.98,
"DenoisingStage": 7120.88,
"LatentPreparationStage": 0.63,
"TimestepPreparationStage": 23.91,
"TextEncodingStage": 463.52,
"ImageVAEEncodingStage": 0.01
},
"denoise_step_ms": {
"0": 95.82,
"1": 89.39,
"2": 109.92,
"3": 139.01,
"4": 143.6,
"5": 142.76,
"6": 139.62,
"7": 142.87,
"8": 140.81,
"9": 139.94,
"10": 141.82,
"11": 143.59,
"12": 146.37,
"13": 142.65,
"14": 140.02,
"15": 142.41,
"16": 139.28,
"17": 141.89,
"18": 139.87,
"19": 140.68,
"20": 144.58,
"21": 141.7,
"22": 141.1,
"23": 139.5,
"24": 144.49,
"25": 142.78,
"26": 141.11,
"27": 140.5,
"28": 140.88,
"29": 141.67,
"30": 140.75,
"31": 141.4,
"32": 142.53,
"33": 141.63,
"34": 142.45,
"35": 138.9,
"36": 141.22,
"37": 143.95,
"38": 141.33,
"39": 141.05,
"40": 139.45,
"41": 143.23,
"42": 142.17,
"43": 145.19,
"44": 142.61,
"45": 140.46,
"46": 142.39,
"47": 142.98,
"48": 141.62,
"49": 143.67
},
"expected_e2e_ms": 8029.29,
"expected_avg_denoise_ms": 140.06,
"expected_median_denoise_ms": 141.63,
"estimated_full_test_time_s": 128.2
},
"ltx_2.3_one_stage_ti2v": { "ltx_2.3_one_stage_ti2v": {
"stages_ms": { "stages_ms": {
"InputValidationStage": 3.05, "InputValidationStage": 3.05,
@@ -7,6 +7,7 @@ from sglang.multimodal_gen.test.server.accuracy_config import (
) )
from sglang.multimodal_gen.test.server.accuracy_testcase_configs import ( from sglang.multimodal_gen.test.server.accuracy_testcase_configs import (
ACCURACY_ONE_GPU_CASES, ACCURACY_ONE_GPU_CASES,
get_component_duplicate_skip_reason,
) )
from sglang.multimodal_gen.test.server.accuracy_utils import ( from sglang.multimodal_gen.test.server.accuracy_utils import (
run_native_component_accuracy_case, run_native_component_accuracy_case,
@@ -22,6 +23,9 @@ class TestComponentAccuracy1GPU:
def test_vae_accuracy(self, case): def test_vae_accuracy(self, case):
if should_skip_component(case, ComponentType.VAE): if should_skip_component(case, ComponentType.VAE):
pytest.skip(get_skip_reason(case, ComponentType.VAE)) pytest.skip(get_skip_reason(case, ComponentType.VAE))
duplicate_reason = get_component_duplicate_skip_reason(case, ComponentType.VAE)
if duplicate_reason:
pytest.skip(duplicate_reason)
run_native_component_accuracy_case( run_native_component_accuracy_case(
AccuracyEngine, AccuracyEngine,
case, case,
@@ -33,6 +37,11 @@ class TestComponentAccuracy1GPU:
def test_transformer_accuracy(self, case): def test_transformer_accuracy(self, case):
if should_skip_component(case, ComponentType.TRANSFORMER): if should_skip_component(case, ComponentType.TRANSFORMER):
pytest.skip(get_skip_reason(case, ComponentType.TRANSFORMER)) pytest.skip(get_skip_reason(case, ComponentType.TRANSFORMER))
duplicate_reason = get_component_duplicate_skip_reason(
case, ComponentType.TRANSFORMER
)
if duplicate_reason:
pytest.skip(duplicate_reason)
run_native_component_accuracy_case( run_native_component_accuracy_case(
AccuracyEngine, AccuracyEngine,
case, case,
@@ -44,6 +53,11 @@ class TestComponentAccuracy1GPU:
def test_encoder_accuracy(self, case): def test_encoder_accuracy(self, case):
if should_skip_component(case, ComponentType.TEXT_ENCODER): if should_skip_component(case, ComponentType.TEXT_ENCODER):
pytest.skip(get_skip_reason(case, ComponentType.TEXT_ENCODER)) pytest.skip(get_skip_reason(case, ComponentType.TEXT_ENCODER))
duplicate_reason = get_component_duplicate_skip_reason(
case, ComponentType.TEXT_ENCODER
)
if duplicate_reason:
pytest.skip(duplicate_reason)
run_text_encoder_accuracy_case( run_text_encoder_accuracy_case(
AccuracyEngine, AccuracyEngine,
case, case,
@@ -7,6 +7,7 @@ from sglang.multimodal_gen.test.server.accuracy_config import (
) )
from sglang.multimodal_gen.test.server.accuracy_testcase_configs import ( from sglang.multimodal_gen.test.server.accuracy_testcase_configs import (
ACCURACY_TWO_GPU_CASES, ACCURACY_TWO_GPU_CASES,
get_component_duplicate_skip_reason,
) )
from sglang.multimodal_gen.test.server.accuracy_utils import ( from sglang.multimodal_gen.test.server.accuracy_utils import (
run_native_component_accuracy_case, run_native_component_accuracy_case,
@@ -22,6 +23,9 @@ class TestComponentAccuracy2GPU:
def test_vae_accuracy(self, case): def test_vae_accuracy(self, case):
if should_skip_component(case, ComponentType.VAE): if should_skip_component(case, ComponentType.VAE):
pytest.skip(get_skip_reason(case, ComponentType.VAE)) pytest.skip(get_skip_reason(case, ComponentType.VAE))
duplicate_reason = get_component_duplicate_skip_reason(case, ComponentType.VAE)
if duplicate_reason:
pytest.skip(duplicate_reason)
run_native_component_accuracy_case( run_native_component_accuracy_case(
AccuracyEngine, AccuracyEngine,
case, case,
@@ -33,6 +37,11 @@ class TestComponentAccuracy2GPU:
def test_transformer_accuracy(self, case): def test_transformer_accuracy(self, case):
if should_skip_component(case, ComponentType.TRANSFORMER): if should_skip_component(case, ComponentType.TRANSFORMER):
pytest.skip(get_skip_reason(case, ComponentType.TRANSFORMER)) pytest.skip(get_skip_reason(case, ComponentType.TRANSFORMER))
duplicate_reason = get_component_duplicate_skip_reason(
case, ComponentType.TRANSFORMER
)
if duplicate_reason:
pytest.skip(duplicate_reason)
run_native_component_accuracy_case( run_native_component_accuracy_case(
AccuracyEngine, AccuracyEngine,
case, case,
@@ -44,6 +53,11 @@ class TestComponentAccuracy2GPU:
def test_encoder_accuracy(self, case): def test_encoder_accuracy(self, case):
if should_skip_component(case, ComponentType.TEXT_ENCODER): if should_skip_component(case, ComponentType.TEXT_ENCODER):
pytest.skip(get_skip_reason(case, ComponentType.TEXT_ENCODER)) pytest.skip(get_skip_reason(case, ComponentType.TEXT_ENCODER))
duplicate_reason = get_component_duplicate_skip_reason(
case, ComponentType.TEXT_ENCODER
)
if duplicate_reason:
pytest.skip(duplicate_reason)
run_text_encoder_accuracy_case( run_text_encoder_accuracy_case(
AccuracyEngine, AccuracyEngine,
case, case,
@@ -257,6 +257,7 @@ class DiffusionTestCase:
sampling_params: DiffusionSamplingParams sampling_params: DiffusionSamplingParams
run_perf_check: bool = True run_perf_check: bool = True
run_consistency_check: bool = True run_consistency_check: bool = True
run_component_accuracy_check: bool = True
run_models_api_check: bool = True run_models_api_check: bool = True
run_t2v_input_reference_check: bool = True run_t2v_input_reference_check: bool = True
run_lora_basic_api_check: bool = False run_lora_basic_api_check: bool = False
@@ -463,6 +464,7 @@ def _make_modelopt_ci_case(
sampling_params, sampling_params,
run_perf_check=False, run_perf_check=False,
run_consistency_check=False, run_consistency_check=False,
run_component_accuracy_check=False,
) )
@@ -39,10 +39,6 @@ SGL_TEST_FILES_CONSISTENCY_GT_BASE = SGL_TEST_FILES_SGLANG_CONSISTENCY_GT_BASE
SGL_TEST_FILES_CONSISTENCY_GT_BASES = ( SGL_TEST_FILES_CONSISTENCY_GT_BASES = (
SGL_TEST_FILES_OFFICIAL_CONSISTENCY_GT_BASE, SGL_TEST_FILES_OFFICIAL_CONSISTENCY_GT_BASE,
SGL_TEST_FILES_SGLANG_CONSISTENCY_GT_BASE, SGL_TEST_FILES_SGLANG_CONSISTENCY_GT_BASE,
# Legacy fallback during migration from sglang-bot/sglang-ci-data
"https://raw.githubusercontent.com/sglang-bot/sglang-ci-data/main/diffusion-ci/consistency_gt/official_generated",
"https://raw.githubusercontent.com/sglang-bot/sglang-ci-data/main/diffusion-ci/consistency_gt/sglang_generated",
"https://raw.githubusercontent.com/sglang-bot/sglang-ci-data/main/diffusion-ci/consistency_gt",
) )
CONSISTENCY_THRESHOLD_JSON_PATH = ( CONSISTENCY_THRESHOLD_JSON_PATH = (
Path(__file__).resolve().parent / "server" / "consistency_threshold.json" Path(__file__).resolve().parent / "server" / "consistency_threshold.json"
@@ -1,6 +1,6 @@
"""Generate a Markdown dashboard for diffusion cross-framework comparisons. """Generate a Markdown dashboard for diffusion cross-framework comparisons.
Reads current comparison results + historical data from sglang-ci-data repo Reads current comparison results + historical data from sgl-project/ci-data repo
and produces a Markdown report with tables and trend charts saved as PNG files. and produces a Markdown report with tables and trend charts saved as PNG files.
Usage: Usage:
@@ -19,16 +19,16 @@ import sys
from datetime import datetime, timezone from datetime import datetime, timezone
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# History fetching (from sglang-ci-data repo via GitHub API) # History fetching (from sgl-project/ci-data repo via GitHub API)
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
CI_DATA_REPO_OWNER = "sglang-bot" CI_DATA_REPO_OWNER = "sgl-project"
CI_DATA_REPO_NAME = "sglang-ci-data" CI_DATA_REPO_NAME = "ci-data"
CI_DATA_BRANCH = "main" CI_DATA_BRANCH = "main"
HISTORY_PREFIX = "diffusion-comparisons" HISTORY_PREFIX = "diffusion-comparisons"
MAX_HISTORY_RUNS = 14 MAX_HISTORY_RUNS = 14
# Base URL for chart images pushed to sglang-ci-data # Base URL for chart images pushed to sgl-project/ci-data
CHARTS_RAW_BASE_URL = ( CHARTS_RAW_BASE_URL = (
f"https://raw.githubusercontent.com/{CI_DATA_REPO_OWNER}/{CI_DATA_REPO_NAME}" f"https://raw.githubusercontent.com/{CI_DATA_REPO_OWNER}/{CI_DATA_REPO_NAME}"
f"/{CI_DATA_BRANCH}/{HISTORY_PREFIX}/charts" f"/{CI_DATA_BRANCH}/{HISTORY_PREFIX}/charts"
@@ -58,7 +58,7 @@ def _github_get(url: str, token: str) -> dict | list | None:
def fetch_history_from_github(token: str) -> list[dict]: def fetch_history_from_github(token: str) -> list[dict]:
"""Fetch recent comparison result JSONs from sglang-ci-data repo.""" """Fetch recent comparison result JSONs from sgl-project/ci-data repo."""
print("Fetching historical comparison data from GitHub...") print("Fetching historical comparison data from GitHub...")
url = ( url = (
f"https://api.github.com/repos/{CI_DATA_REPO_OWNER}/{CI_DATA_REPO_NAME}" f"https://api.github.com/repos/{CI_DATA_REPO_OWNER}/{CI_DATA_REPO_NAME}"
@@ -775,7 +775,7 @@ def main():
parser.add_argument( parser.add_argument(
"--fetch-history", "--fetch-history",
action="store_true", action="store_true",
help="Fetch history from sglang-ci-data GitHub repo", help="Fetch history from ci-data GitHub repo",
) )
parser.add_argument( parser.add_argument(
"--step-summary", "--step-summary",
@@ -1,4 +1,4 @@
"""Publish diffusion comparison results to sglang-bot/sglang-ci-data repo. """Publish diffusion comparison results to sgl-project/ci-data repo.
Pushes comparison-results.json, dashboard.md, and chart PNG files to the Pushes comparison-results.json, dashboard.md, and chart PNG files to the
ci-data repository for historical tracking. Chart PNGs are stored under ci-data repository for historical tracking. Chart PNGs are stored under
@@ -49,8 +49,8 @@ else:
) )
# Repository configuration # Repository configuration
REPO_OWNER = "sglang-bot" REPO_OWNER = "sgl-project"
REPO_NAME = "sglang-ci-data" REPO_NAME = "ci-data"
BRANCH = "main" BRANCH = "main"
STORAGE_PREFIX = "diffusion-comparisons" STORAGE_PREFIX = "diffusion-comparisons"
@@ -196,7 +196,7 @@ def publish_comparison(
def main(): def main():
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description="Publish diffusion comparison results to sglang-ci-data" description="Publish diffusion comparison results to ci-data"
) )
parser.add_argument( parser.add_argument(
"--results", "--results",
+2 -2
View File
@@ -352,8 +352,8 @@ def publish_traces_from_files(files_to_upload, run_id, run_number):
sys.exit(1) sys.exit(1)
# Repository configuration # Repository configuration
repo_owner = "sglang-bot" repo_owner = "sgl-project"
repo_name = "sglang-ci-data" repo_name = "ci-data"
branch = "main" branch = "main"
# Verify token permissions before proceeding # Verify token permissions before proceeding