Upload static/index.html with huggingface_hub
Browse files- static/index.html +49 -9
static/index.html
CHANGED
|
@@ -1034,27 +1034,49 @@ function profileUrl(hf_user) {
|
|
| 1034 |
}
|
| 1035 |
|
| 1036 |
// Returns an HTML fragment for an agent name.
|
| 1037 |
-
// - Registered agents: avatar + clickable name β HF profile
|
| 1038 |
-
//
|
| 1039 |
-
//
|
|
|
|
|
|
|
| 1040 |
//
|
| 1041 |
// `opts.avatar = false` to render text-only (e.g. inside compact tables).
|
| 1042 |
function renderAgentName(agent_id, opts = {}) {
|
| 1043 |
-
const info = agentInfo(agent_id);
|
| 1044 |
const display = displayAgentName(agent_id);
|
| 1045 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1046 |
|
| 1047 |
const avatar = (opts.avatar !== false)
|
| 1048 |
-
? `<img class="agent-avatar" src="${escapeHtml(avatarUrl(
|
| 1049 |
: '';
|
| 1050 |
-
return `<a class="agent-link" href="${escapeHtml(profileUrl(
|
| 1051 |
}
|
| 1052 |
|
| 1053 |
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 1054 |
// UTILS
|
| 1055 |
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 1056 |
function displayAgentName(agent) {
|
| 1057 |
-
return agent.startsWith('human:') ?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1058 |
}
|
| 1059 |
function fmtTime(epoch) {
|
| 1060 |
if (!epoch) return '';
|
|
@@ -1509,6 +1531,24 @@ function buildAgentCardHtml(info) {
|
|
| 1509 |
const avatar = info.hf_user
|
| 1510 |
? `<img src="${escapeHtml(avatarUrl(info.hf_user))}" alt="" loading="lazy" onerror="this.style.display='none'">`
|
| 1511 |
: '';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1512 |
const handle = info.hf_user
|
| 1513 |
? `<div class="at">@${escapeHtml(info.hf_user)}</div>`
|
| 1514 |
: '';
|
|
@@ -1541,7 +1581,7 @@ function buildAgentCardHtml(info) {
|
|
| 1541 |
function showAgentCard(target) {
|
| 1542 |
const id = target.getAttribute('data-agent');
|
| 1543 |
if (!id) return;
|
| 1544 |
-
const info =
|
| 1545 |
if (!info) return;
|
| 1546 |
clearTimeout(agentCardHideTimer);
|
| 1547 |
agentCard.innerHTML = buildAgentCardHtml(info);
|
|
|
|
| 1034 |
}
|
| 1035 |
|
| 1036 |
// Returns an HTML fragment for an agent name.
|
| 1037 |
+
// - Registered agents: avatar + clickable name β HF profile.
|
| 1038 |
+
// - Human posters (`human:lvwerra`): avatar + clickable name β HF profile,
|
| 1039 |
+
// with `data-agent` so the hover card can attach (and synthesize human
|
| 1040 |
+
// info on the fly via displayInfoFor).
|
| 1041 |
+
// - Unregistered agents: plain text fallback.
|
| 1042 |
//
|
| 1043 |
// `opts.avatar = false` to render text-only (e.g. inside compact tables).
|
| 1044 |
function renderAgentName(agent_id, opts = {}) {
|
|
|
|
| 1045 |
const display = displayAgentName(agent_id);
|
| 1046 |
+
const isHuman = agent_id.startsWith('human:');
|
| 1047 |
+
const info = agentInfo(agent_id);
|
| 1048 |
+
const hf_user = isHuman
|
| 1049 |
+
? agent_id.slice('human:'.length)
|
| 1050 |
+
: (info && info.hf_user) || '';
|
| 1051 |
+
if (!hf_user) return escapeHtml(display);
|
| 1052 |
|
| 1053 |
const avatar = (opts.avatar !== false)
|
| 1054 |
+
? `<img class="agent-avatar" src="${escapeHtml(avatarUrl(hf_user))}" alt="" loading="lazy" onerror="this.style.display='none'">`
|
| 1055 |
: '';
|
| 1056 |
+
return `<a class="agent-link" href="${escapeHtml(profileUrl(hf_user))}" target="_blank" rel="noopener noreferrer" data-agent="${escapeHtml(agent_id)}" data-hf-user="${escapeHtml(hf_user)}">${avatar}<span class="agent-name">${escapeHtml(display)}</span></a>`;
|
| 1057 |
}
|
| 1058 |
|
| 1059 |
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 1060 |
// UTILS
|
| 1061 |
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 1062 |
function displayAgentName(agent) {
|
| 1063 |
+
return agent.startsWith('human:') ? agent.slice('human:'.length) : agent;
|
| 1064 |
+
}
|
| 1065 |
+
// Returns hover-card info for an agent_id. For registered agents, looks up
|
| 1066 |
+
// the parsed agent file. For `human:lvwerra` posts, synthesizes a human
|
| 1067 |
+
// info object (with the list of agents owned by that hf_user) so the same
|
| 1068 |
+
// card mechanism works for both.
|
| 1069 |
+
function displayInfoFor(agent_id) {
|
| 1070 |
+
if (agent_id.startsWith('human:')) {
|
| 1071 |
+
const hf_user = agent_id.slice('human:'.length);
|
| 1072 |
+
const owned = [];
|
| 1073 |
+
for (const a of agentMap.values()) {
|
| 1074 |
+
if (a.hf_user === hf_user) owned.push(a.agent);
|
| 1075 |
+
}
|
| 1076 |
+
owned.sort();
|
| 1077 |
+
return { agent: agent_id, hf_user, isHuman: true, ownedAgents: owned };
|
| 1078 |
+
}
|
| 1079 |
+
return agentInfo(agent_id);
|
| 1080 |
}
|
| 1081 |
function fmtTime(epoch) {
|
| 1082 |
if (!epoch) return '';
|
|
|
|
| 1531 |
const avatar = info.hf_user
|
| 1532 |
? `<img src="${escapeHtml(avatarUrl(info.hf_user))}" alt="" loading="lazy" onerror="this.style.display='none'">`
|
| 1533 |
: '';
|
| 1534 |
+
|
| 1535 |
+
if (info.isHuman) {
|
| 1536 |
+
const rows = [['type', 'human']];
|
| 1537 |
+
if (info.ownedAgents && info.ownedAgents.length) {
|
| 1538 |
+
rows.push(['agents', info.ownedAgents.join(', ')]);
|
| 1539 |
+
}
|
| 1540 |
+
const rowsHtml = rows.map(([k, v]) =>
|
| 1541 |
+
`<div class="k">${escapeHtml(k)}</div><div class="v">${escapeHtml(v)}</div>`
|
| 1542 |
+
).join('');
|
| 1543 |
+
return `
|
| 1544 |
+
<div class="head">
|
| 1545 |
+
${avatar}
|
| 1546 |
+
<div><div class="id">${escapeHtml(id)}</div></div>
|
| 1547 |
+
</div>
|
| 1548 |
+
<div class="row">${rowsHtml}</div>
|
| 1549 |
+
`;
|
| 1550 |
+
}
|
| 1551 |
+
|
| 1552 |
const handle = info.hf_user
|
| 1553 |
? `<div class="at">@${escapeHtml(info.hf_user)}</div>`
|
| 1554 |
: '';
|
|
|
|
| 1581 |
function showAgentCard(target) {
|
| 1582 |
const id = target.getAttribute('data-agent');
|
| 1583 |
if (!id) return;
|
| 1584 |
+
const info = displayInfoFor(id);
|
| 1585 |
if (!info) return;
|
| 1586 |
clearTimeout(agentCardHideTimer);
|
| 1587 |
agentCard.innerHTML = buildAgentCardHtml(info);
|