Spaces:
Running
Running
File size: 6,090 Bytes
da8db3e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | import { describe, expect, it } from "vitest"
// Executable spec for `notes/transformations/04-dataset-url-synthesis.md`.
//
// Replicates the 4-step fallback chain from components/eval-card.tsx:83-86
// verbatim. Pipeline must produce identical outputs for every case below.
// Verify cross-corpus equivalence with `scripts/verify-dataset-url.mjs`.
interface SourceData {
dataset_url?: string
url?: string | string[] | null
hf_repo?: string
[key: string]: unknown
}
// Replicates the actual TS expression verbatim. The original uses `??`
// (nullish coalescing), NOT `||` truthiness β so empty strings stay; only
// null/undefined fall through. Don't "improve" by switching to truthiness.
function resolveDatasetUrl(sourceData: SourceData | null | undefined): string | undefined {
const fromDataset = sourceData?.dataset_url
const fromUrl = Array.isArray(sourceData?.url) ? sourceData?.url?.[0] : sourceData?.url
const fromHfRepo = sourceData?.hf_repo ? `https://huggingface.co/datasets/${sourceData.hf_repo}` : undefined
return fromDataset ?? fromUrl ?? fromHfRepo
}
// ---------------------------------------------------------------------------
// Group A β Branch firing order (first non-nullish wins, NOT truthy)
// ---------------------------------------------------------------------------
describe("Group A β branch firing order", () => {
const cases = [
{ input: { dataset_url: "https://example.com/x" }, expected: "https://example.com/x", why: "branch 1" },
{ input: { dataset_url: "x", url: ["y"] }, expected: "x", why: "branch 1 short-circuits even with url present" },
{ input: { url: ["https://a.com", "https://b.com"] }, expected: "https://a.com", why: "branch 2 β first array element" },
{ input: { url: ["only"] }, expected: "only", why: "branch 2 β single-element array" },
{ input: { url: "https://a.com" }, expected: "https://a.com", why: "branch 3 β string form" },
{ input: { hf_repo: "Mercor/ACE" }, expected: "https://huggingface.co/datasets/Mercor/ACE", why: "branch 4 β HF template" },
{
input: { hf_repo: "mercor/apex-agents" },
expected: "https://huggingface.co/datasets/mercor/apex-agents",
why: "branch 4 β preserves case",
},
{ input: { dataset_name: "x" }, expected: undefined, why: "branch 5 β none of the above" },
{ input: {}, expected: undefined, why: "branch 5 β empty object" },
{ input: null, expected: undefined, why: "branch 5 β null defensive" },
{ input: undefined, expected: undefined, why: "branch 5 β undefined defensive" },
]
it.each(cases)("$why β '$expected'", ({ input, expected }) => {
expect(resolveDatasetUrl(input as SourceData | null | undefined)).toBe(expected)
})
})
// ---------------------------------------------------------------------------
// Group B β Edge cases of the fallback chain
// ---------------------------------------------------------------------------
describe("Group B β fallback chain edge cases (?? nullish semantics)", () => {
it("empty dataset_url string is RETURNED (not nullish, ?? does NOT fall through)", () => {
// "" is not nullish β ?? short-circuits to it. TS quirk to preserve.
expect(resolveDatasetUrl({ dataset_url: "", url: ["fallback"] })).toBe("")
})
it("empty url array β url[0] is undefined, ?? falls through to hf_repo", () => {
expect(resolveDatasetUrl({ url: [], hf_repo: "x/y" })).toBe("https://huggingface.co/datasets/x/y")
})
it("url array containing only empty string β returns empty string (NO further fallback because '' is not nullish)", () => {
expect(resolveDatasetUrl({ url: [""], hf_repo: "x/y" })).toBe("")
})
it("url array containing only null β null IS nullish, ?? falls through to hf_repo", () => {
expect(resolveDatasetUrl({ url: [null as unknown as string], hf_repo: "x/y" })).toBe(
"https://huggingface.co/datasets/x/y"
)
})
it("url array short-circuits hf_repo when first element is truthy", () => {
expect(resolveDatasetUrl({ url: ["a"], hf_repo: "x/y" })).toBe("a")
})
it("empty hf_repo evaluated as falsy by inline ternary, falls through to undefined", () => {
// The hf_repo branch uses `sourceData.hf_repo ? template : undefined`,
// a truthiness check (NOT ??), so empty string is treated as falsy.
expect(resolveDatasetUrl({ hf_repo: "" })).toBe(undefined)
})
it("hf_repo with leading slash produces double-slash URL (no normalization)", () => {
expect(resolveDatasetUrl({ hf_repo: "/leading-slash" })).toBe(
"https://huggingface.co/datasets//leading-slash"
)
})
})
// ---------------------------------------------------------------------------
// Group C β Production fixtures (real source_data shapes from prod cache)
// ---------------------------------------------------------------------------
describe("Group C β production fixtures", () => {
const cases = [
{
input: { dataset_name: "appworld/test_normal", source_type: "url", url: ["https://github.com/Exgentic/exgentic"] },
expected: "https://github.com/Exgentic/exgentic",
why: "url-array path (564/587 eval-details use this)",
},
{
input: { dataset_name: "ace", source_type: "hf_dataset", hf_repo: "Mercor/ACE" },
expected: "https://huggingface.co/datasets/Mercor/ACE",
why: "hf_repo template (22/587)",
},
{
input: {
dataset_name: "Artificial Analysis LLM API",
source_type: "url",
url: ["https://artificialanalysis.ai/api/v2/data/llms/models"],
},
expected: "https://artificialanalysis.ai/api/v2/data/llms/models",
why: "third-party API URL",
},
{
input: {
dataset_name: "CocoaBench v1.0",
source_type: "other",
additional_details: { samples_number: "153" },
},
expected: undefined,
why: "no url, no hf_repo, no dataset_url β branch 5 (1/587)",
},
]
it.each(cases)("$why β '$expected'", ({ input, expected }) => {
expect(resolveDatasetUrl(input as SourceData)).toBe(expected)
})
})
|