File size: 6,734 Bytes
6bb9441
 
 
 
 
 
a33baff
 
6bb9441
 
 
 
 
a33baff
6bb9441
 
 
 
 
 
a33baff
6bb9441
 
a33baff
6bb9441
 
 
 
 
a33baff
6bb9441
 
 
 
 
a33baff
6bb9441
 
a33baff
 
6bb9441
 
 
 
 
 
 
a33baff
6bb9441
 
 
a33baff
 
6bb9441
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a33baff
6bb9441
 
 
 
 
8d6e9ab
 
6bb9441
 
8d6e9ab
6bb9441
 
8d6e9ab
6bb9441
8d6e9ab
6bb9441
8d6e9ab
 
 
 
 
 
 
 
 
 
 
 
 
 
6bb9441
 
 
a33baff
6bb9441
 
a33baff
6bb9441
 
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
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ROW-PROXY // CCCP</title>
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{background:#0d0d0d;font-family:"Courier New",monospace;color:#c8a84b}
.header{background:#1a1200;border-bottom:2px solid #c8a84b;padding:1.5rem 2rem;display:flex;align-items:center;gap:1rem}
.star{color:#cc0000;font-size:28px}
.header-title{font-size:22px;font-weight:bold;letter-spacing:4px;color:#c8a84b}
.header-sub{font-size:11px;letter-spacing:3px;color:#7a6228;margin-top:2px}
.red-bar{height:4px;background:#cc0000}
.content{padding:2rem}
.section-label{font-size:10px;letter-spacing:4px;color:#7a6228;border-bottom:1px solid #3a2a00;padding-bottom:6px;margin-bottom:1rem}
.status-row{display:flex;gap:1rem;margin-bottom:2rem}
.status-card{flex:1;background:#1a1200;border:1px solid #3a2a00;border-left:3px solid #c8a84b;padding:1rem}
.status-card .val{font-size:18px;color:#c8a84b;font-weight:bold;margin-bottom:2px}
.status-card .lbl{font-size:10px;color:#7a6228;letter-spacing:2px}
.online{color:#44aa99}
.url-box{background:#111;border:1px solid #3a2a00;border-left:3px solid #cc0000;padding:1rem 1.25rem;margin-bottom:2rem}
.url-label{font-size:10px;color:#7a6228;letter-spacing:3px;margin-bottom:6px}
.url-val{font-size:13px;color:#e8c86b;word-break:break-all}
.key-val{font-size:12px;color:#c8a84b;margin-top:4px}
.models-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:2rem}
.model-item{background:#1a1200;border:1px solid #2a1e00;padding:8px 12px;display:flex;align-items:center;gap:8px}
.model-dot{width:6px;height:6px;background:#44aa99;border-radius:50%;flex-shrink:0}
.model-dot.glm{background:#c8a84b}
.model-name{font-size:11px;color:#c8a84b}
.tank-section{background:#1a1200;border:1px solid #3a2a00;padding:1.5rem;margin-bottom:2rem}
.tank-title{font-size:14px;color:#cc0000;letter-spacing:3px;margin-bottom:1rem;font-weight:bold}
.tank-row{display:flex;gap:1rem;margin-bottom:8px;align-items:center}
.tank-name{font-size:12px;color:#e8c86b;width:80px;flex-shrink:0}
.tank-bar-wrap{flex:1;background:#0d0d0d;height:16px}
.tank-bar{height:100%;background:#cc0000}
.tank-era{font-size:10px;color:#7a6228;width:80px;text-align:right}
.footer{border-top:1px solid #3a2a00;padding:1rem 2rem;text-align:center;font-size:10px;color:#4a3a10;letter-spacing:3px}
.classified{color:#cc0000}
</style>
</head>
<body>
<div class="header">
  <div class="star">&#9733;</div>
  <div>
    <div class="header-title">ROW-PROXY // CCCP</div>
    <div class="header-sub">SOVIET ARMORED DIVISION — AI GATEWAY SYSTEM — 1960-1985</div>
  </div>
  <div style="margin-left:auto;text-align:right">
    <div style="font-size:10px;color:#44aa99;letter-spacing:2px">&#9679; SISTEMA ACTIVO</div>
    <div style="font-size:10px;color:#7a6228;margin-top:2px">HUGGING FACE DEPLOY</div>
  </div>
</div>
<div class="red-bar"></div>
<div class="content">
  <div class="section-label">// ESTADO DEL SISTEMA</div>
  <div class="status-row">
    <div class="status-card"><div class="val online">&#9679; ONLINE</div><div class="lbl">PROXY STATUS</div></div>
    <div class="status-card"><div class="val">24</div><div class="lbl">MODELOS ACTIVOS</div></div>
    <div class="status-card"><div class="val">FREE</div><div class="lbl">API KEY</div></div>
  </div>
  <div class="section-label">// PUNTO DE ACCESO</div>
  <div class="url-box">
    <div class="url-label">BASE URL — PRODUCCION</div>
    <div class="url-val">https://moge-row-row-proxy.hf.space/v1</div>
    <div class="key-val">API KEY: free</div>
  </div>
  <div class="section-label">// MODELOS DISPONIBLES</div>
  <div class="models-grid">
    <div class="model-item"><div class="model-dot"></div><div class="model-name">claude-sonnet-4-6</div></div>
    <div class="model-item"><div class="model-dot"></div><div class="model-name">claude-haiku-4-5</div></div>
    <div class="model-item"><div class="model-dot"></div><div class="model-name">claude-opus-4-6</div></div>
    <div class="model-item"><div class="model-dot"></div><div class="model-name">claude-3-5-sonnet</div></div>
    <div class="model-item"><div class="model-dot glm"></div><div class="model-name">glm-4.7</div></div>
    <div class="model-item"><div class="model-dot glm"></div><div class="model-name">glm-4.7-thinking</div></div>
    <div class="model-item"><div class="model-dot glm"></div><div class="model-name">glm-5</div></div>
    <div class="model-item"><div class="model-dot glm"></div><div class="model-name">glm-5-thinking</div></div>
  </div>
  <div class="section-label">// RAMA SOV</div>
  <div class="tank-section">
    <div class="tank-title">&#9733; COMANDANTES </div>
    <div id="top-users-bars">
      <div style="font-size:11px;color:#7a6228;letter-spacing:1px">CARGANDO DATOS...</div>
    </div>                  
    <div style="margin-top:1rem;font-size:10px;color:#7a6228;letter-spacing:1px">&#9888; INFORMACION AL SERVICIO PUBLICO DE LA COMUNIDAD</div>
  </div>
</div>
<div class="footer"><span class="classified">&#9733; CLASIFICADO &#9733;</span> &mdash; ROW-PROXY v1.0 &mdash; CCCP AI GATEWAY &mdash; <span class="classified">&#9733; CLASIFICADO &#9733;</span></div>
<script>
function loadStats() {
  fetch('/stats')
    .then(r => r.json())
    .then(data => {
      var keys = Object.values(data.keys || {});
      keys.sort(function(a,b){ return (b.tokens || 0) - (a.tokens || 0); }); // ordenar por tokens

      var freeEl = document.getElementById('free-count');
      if (freeEl) freeEl.textContent = (data.free_reqs || 0) + '/340';

      var barsEl = document.getElementById('top-users-bars');
      if (barsEl) {
        if (keys.length === 0) {
          barsEl.innerHTML = '<div style="font-size:11px;color:#7a6228">SIN DATOS AUN</div>';
          return;
        }
        var maxTokens = Math.max.apply(null, keys.map(function(k){ return k.tokens || 0; }));
        if (maxTokens === 0) maxTokens = 1;

        barsEl.innerHTML = keys.map(function(k) { // sin slice = todos
          var pct = Math.round(((k.tokens || 0) / maxTokens) * 100);
          var tkLabel = (k.tokens || 0) >= 1000
            ? ((k.tokens || 0) / 1000).toFixed(1) + 'K'
            : (k.tokens || 0) + '';
          return '<div class="tank-row">' +
            '<div class="tank-name">' + (k.name || 'OPERADOR') + '</div>' +
            '<div class="tank-bar-wrap"><div class="tank-bar" style="width:' + pct + '%"></div></div>' +
            '<div class="tank-era">' + tkLabel + ' tok</div>' +
          '</div>';
        }).join('');
      }
    })
    .catch(function(){ });
}
loadStats();
setInterval(loadStats, 30000);
</script>
</body>
</html>