File size: 4,806 Bytes
e8b6587
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Startup example acquisition/localization and attribution rendering."""
from __future__ import annotations

import shutil
from pathlib import Path

from huggingface_hub import hf_hub_download

from space_config import EXAMPLE_SPECS
from . import runtime_utils
from .app_runtime_support import APP_LOGGER, APP_ROOT, HF_TOKEN, RUNTIME_EXAMPLE_DIR, sha256_file


def prepare_examples() -> tuple[list[list[str | None]], dict]:
    rows = []
    items = []
    hub_cache = {}
    localized_cache = {}
    shutil.rmtree(RUNTIME_EXAMPLE_DIR, ignore_errors=True)
    RUNTIME_EXAMPLE_DIR.mkdir(parents=True, exist_ok=True)

    def localize(source_path: str, source_name: str) -> tuple[str, str]:
        source_path = str(source_path)
        if source_path in localized_cache:
            return localized_cache[source_path]
        digest = sha256_file(source_path)
        suffix = Path(source_name).suffix.lower() or Path(source_path).suffix.lower() or ".bin"
        target = RUNTIME_EXAMPLE_DIR / f"{digest[:16]}{suffix}"
        if not target.exists():
            shutil.copy2(source_path, target)
        result = (str(target), digest)
        localized_cache[source_path] = result
        return result

    for raw in EXAMPLE_SPECS or []:
        if not isinstance(raw, dict):
            continue
        label = str(raw.get("label") or "Example").strip()
        repo_id = str(raw.get("repo_id") or "").strip()
        repo_type = str(raw.get("repo_type") or "model").strip().lower()
        revision = str(raw.get("revision") or "main").strip() or "main"
        start_name = str(raw.get("start_image") or "").strip() or None
        end_name = str(raw.get("end_image") or "").strip() or None
        prompt = str(raw.get("prompt") or "").strip()
        if not repo_id or not start_name or not prompt or repo_type not in {"model", "dataset", "space"}:
            APP_LOGGER.info("[EXAMPLES] skipping invalid spec label=%r", label)
            continue
        try:
            def get_file(filename: str | None):
                if not filename:
                    return None
                key = (repo_id, repo_type, revision, filename)
                if key not in hub_cache:
                    hub_cache[key] = hf_hub_download(
                        repo_id=repo_id,
                        repo_type=None if repo_type == "model" else repo_type,
                        revision=revision,
                        filename=filename,
                        token=HF_TOKEN,
                    )
                return hub_cache[key]

            start_source = get_file(start_name)
            end_source = get_file(end_name)
            resolved = runtime_utils.resolved_revision_from_hub_path(start_source) or revision
            start_path, start_sha = localize(start_source, start_name)
            if end_source:
                end_path, end_sha = localize(end_source, end_name)
            else:
                end_path, end_sha = None, None
            rows.append([start_path, end_path, prompt])
            items.append({
                "label": label,
                "repo_id": repo_id,
                "repo_type": repo_type,
                "requested_revision": revision,
                "resolved_revision": resolved,
                "start_image": start_name,
                "start_sha256": start_sha,
                "end_image": end_name,
                "end_sha256": end_sha,
                "served_from": str(RUNTIME_EXAMPLE_DIR.relative_to(APP_ROOT)),
                "license": str(raw.get("license") or "").strip() or None,
                "attribution": str(raw.get("attribution") or "").strip() or None,
            })
            APP_LOGGER.info(
                "[EXAMPLES] ready label=%r source=%s:%s@%s served_from=%s",
                label, repo_type, repo_id, resolved, RUNTIME_EXAMPLE_DIR,
            )
        except Exception as exc:
            APP_LOGGER.info("[EXAMPLES] FAILED label=%r: %s: %s", label, type(exc).__name__, exc)
    return rows, {"status": "ready", "count": len(rows), "items": items}


def attribution_markdown(state: dict) -> str:
    items = state.get("items") or []
    if not items:
        return "Examples are unavailable in this startup. Generation is unaffected."
    groups = []
    seen = set()
    for item in items:
        key = (item.get("repo_type"), item.get("repo_id"), item.get("license"), item.get("attribution"))
        if key in seen:
            continue
        seen.add(key)
        repo_type, repo_id, license_id, attribution = key
        text = f"`{repo_type}:{repo_id}`"
        if attribution:
            text += f" · {attribution}"
        if license_id:
            text += f" · {license_id}"
        groups.append(text)
    return "Startup-fetched example assets: " + " | ".join(groups)