Spaces:
Runtime error
Runtime error
da03
commited on
Commit
·
a899811
1
Parent(s):
04846cf
- main.py +2 -1
- static/index.html +70 -0
main.py
CHANGED
|
@@ -628,7 +628,8 @@ def log_interaction(client_id, data, generated_frame=None, is_end_of_session=Fal
|
|
| 628 |
"is_left_click": data.get("is_left_click"),
|
| 629 |
"is_right_click": data.get("is_right_click"),
|
| 630 |
"keys_down": data.get("keys_down", []),
|
| 631 |
-
"keys_up": data.get("keys_up", [])
|
|
|
|
| 632 |
}
|
| 633 |
else:
|
| 634 |
# For EOS/reset records, just include minimal info
|
|
|
|
| 628 |
"is_left_click": data.get("is_left_click"),
|
| 629 |
"is_right_click": data.get("is_right_click"),
|
| 630 |
"keys_down": data.get("keys_down", []),
|
| 631 |
+
"keys_up": data.get("keys_up", []),
|
| 632 |
+
"is_auto_input": data.get("is_auto_input", False)
|
| 633 |
}
|
| 634 |
else:
|
| 635 |
# For EOS/reset records, just include minimal info
|
static/index.html
CHANGED
|
@@ -109,6 +109,11 @@
|
|
| 109 |
<input class="form-check-input" type="checkbox" role="switch" id="useRnnToggle">
|
| 110 |
<label class="form-check-label" for="useRnnToggle">Use RNN</label>
|
| 111 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 112 |
</div>
|
| 113 |
</div>
|
| 114 |
|
|
@@ -124,6 +129,7 @@
|
|
| 124 |
<li>Use your keyboard to type within the simulated environment</li>
|
| 125 |
<li>Adjust sampling steps to control quality/speed tradeoff</li>
|
| 126 |
<li>Toggle "Use RNN" to switch between RNN and diffusion mode</li>
|
|
|
|
| 127 |
</ul>
|
| 128 |
</div>
|
| 129 |
</div>
|
|
@@ -165,6 +171,9 @@
|
|
| 165 |
isConnected = true;
|
| 166 |
reconnectAttempts = 0;
|
| 167 |
|
|
|
|
|
|
|
|
|
|
| 168 |
// Request current settings from server to sync UI
|
| 169 |
socket.send(JSON.stringify({
|
| 170 |
type: "get_settings"
|
|
@@ -176,6 +185,7 @@
|
|
| 176 |
socket.onclose = function(event) {
|
| 177 |
console.log("WebSocket connection closed. Attempting to reconnect...");
|
| 178 |
isConnected = false;
|
|
|
|
| 179 |
clearInterval(heartbeatInterval);
|
| 180 |
scheduleReconnection();
|
| 181 |
};
|
|
@@ -245,9 +255,53 @@
|
|
| 245 |
let lastSentTime = 0;
|
| 246 |
const SEND_INTERVAL = 10; // Send updates every 50ms
|
| 247 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 248 |
// Track currently pressed keys
|
| 249 |
const pressedKeys = new Set();
|
| 250 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 251 |
function sendInputState(x, y, isLeftClick = false, isRightClick = false) {
|
| 252 |
const currentTime = Date.now();
|
| 253 |
if (isConnected && (isLeftClick || isRightClick || !lastSentPosition || currentTime - lastSentTime >= SEND_INTERVAL)) {
|
|
@@ -263,6 +317,9 @@
|
|
| 263 |
lastSentPosition = { x, y };
|
| 264 |
lastSentTime = currentTime;
|
| 265 |
|
|
|
|
|
|
|
|
|
|
| 266 |
//if (isLeftClick || isRightClick) {
|
| 267 |
// isProcessing = true; // Block further inputs until response
|
| 268 |
//}
|
|
@@ -347,6 +404,7 @@
|
|
| 347 |
"keys_down": Array.from(pressedKeys),
|
| 348 |
"keys_up": [event.key],
|
| 349 |
}));
|
|
|
|
| 350 |
} catch (error) {
|
| 351 |
console.error("Error sending key up event:", error);
|
| 352 |
}
|
|
@@ -354,6 +412,7 @@
|
|
| 354 |
|
| 355 |
// Graceful disconnection
|
| 356 |
window.addEventListener('beforeunload', function (e) {
|
|
|
|
| 357 |
if (isConnected) {
|
| 358 |
try {
|
| 359 |
//socket.send(JSON.stringify({ type: "disconnect" }));
|
|
@@ -411,6 +470,17 @@
|
|
| 411 |
console.error("WebSocket not connected, cannot update USE_RNN");
|
| 412 |
}
|
| 413 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 414 |
</script>
|
| 415 |
|
| 416 |
<!-- Bootstrap JS (optional) -->
|
|
|
|
| 109 |
<input class="form-check-input" type="checkbox" role="switch" id="useRnnToggle">
|
| 110 |
<label class="form-check-label" for="useRnnToggle">Use RNN</label>
|
| 111 |
</div>
|
| 112 |
+
|
| 113 |
+
<div class="form-check form-switch">
|
| 114 |
+
<input class="form-check-input" type="checkbox" role="switch" id="autoInputToggle" checked>
|
| 115 |
+
<label class="form-check-label" for="autoInputToggle">Auto Input</label>
|
| 116 |
+
</div>
|
| 117 |
</div>
|
| 118 |
</div>
|
| 119 |
|
|
|
|
| 129 |
<li>Use your keyboard to type within the simulated environment</li>
|
| 130 |
<li>Adjust sampling steps to control quality/speed tradeoff</li>
|
| 131 |
<li>Toggle "Use RNN" to switch between RNN and diffusion mode</li>
|
| 132 |
+
<li>Toggle "Auto Input" to enable/disable automatic frame generation during idle periods</li>
|
| 133 |
</ul>
|
| 134 |
</div>
|
| 135 |
</div>
|
|
|
|
| 171 |
isConnected = true;
|
| 172 |
reconnectAttempts = 0;
|
| 173 |
|
| 174 |
+
// Start auto-input mechanism
|
| 175 |
+
startAutoInput();
|
| 176 |
+
|
| 177 |
// Request current settings from server to sync UI
|
| 178 |
socket.send(JSON.stringify({
|
| 179 |
type: "get_settings"
|
|
|
|
| 185 |
socket.onclose = function(event) {
|
| 186 |
console.log("WebSocket connection closed. Attempting to reconnect...");
|
| 187 |
isConnected = false;
|
| 188 |
+
stopAutoInput(); // Stop auto-input when connection is lost
|
| 189 |
clearInterval(heartbeatInterval);
|
| 190 |
scheduleReconnection();
|
| 191 |
};
|
|
|
|
| 255 |
let lastSentTime = 0;
|
| 256 |
const SEND_INTERVAL = 10; // Send updates every 50ms
|
| 257 |
|
| 258 |
+
// Auto-input mechanism
|
| 259 |
+
let lastUserInputTime = 0;
|
| 260 |
+
let autoInputInterval = null;
|
| 261 |
+
const AUTO_INPUT_DELAY = 1000; // Send auto-input after 1 second of no user input
|
| 262 |
+
let autoInputEnabled = true; // Default to enabled
|
| 263 |
+
|
| 264 |
// Track currently pressed keys
|
| 265 |
const pressedKeys = new Set();
|
| 266 |
|
| 267 |
+
function startAutoInput() {
|
| 268 |
+
if (autoInputInterval) {
|
| 269 |
+
clearInterval(autoInputInterval);
|
| 270 |
+
}
|
| 271 |
+
|
| 272 |
+
autoInputInterval = setInterval(() => {
|
| 273 |
+
const currentTime = Date.now();
|
| 274 |
+
if (autoInputEnabled && currentTime - lastUserInputTime >= AUTO_INPUT_DELAY && lastSentPosition && isConnected) {
|
| 275 |
+
console.log("Sending auto-input (no user activity for 1 second)");
|
| 276 |
+
try {
|
| 277 |
+
socket.send(JSON.stringify({
|
| 278 |
+
"x": lastSentPosition.x,
|
| 279 |
+
"y": lastSentPosition.y,
|
| 280 |
+
"is_left_click": false,
|
| 281 |
+
"is_right_click": false,
|
| 282 |
+
"keys_down": [],
|
| 283 |
+
"keys_up": [],
|
| 284 |
+
"is_auto_input": true // Flag to identify auto-generated inputs
|
| 285 |
+
}));
|
| 286 |
+
updateLastUserInputTime();
|
| 287 |
+
} catch (error) {
|
| 288 |
+
console.error("Error sending auto-input:", error);
|
| 289 |
+
}
|
| 290 |
+
}
|
| 291 |
+
}, 100); // Check every 100ms
|
| 292 |
+
}
|
| 293 |
+
|
| 294 |
+
function stopAutoInput() {
|
| 295 |
+
if (autoInputInterval) {
|
| 296 |
+
clearInterval(autoInputInterval);
|
| 297 |
+
autoInputInterval = null;
|
| 298 |
+
}
|
| 299 |
+
}
|
| 300 |
+
|
| 301 |
+
function updateLastUserInputTime() {
|
| 302 |
+
lastUserInputTime = Date.now();
|
| 303 |
+
}
|
| 304 |
+
|
| 305 |
function sendInputState(x, y, isLeftClick = false, isRightClick = false) {
|
| 306 |
const currentTime = Date.now();
|
| 307 |
if (isConnected && (isLeftClick || isRightClick || !lastSentPosition || currentTime - lastSentTime >= SEND_INTERVAL)) {
|
|
|
|
| 317 |
lastSentPosition = { x, y };
|
| 318 |
lastSentTime = currentTime;
|
| 319 |
|
| 320 |
+
// Update last user input time for auto-input mechanism
|
| 321 |
+
updateLastUserInputTime();
|
| 322 |
+
|
| 323 |
//if (isLeftClick || isRightClick) {
|
| 324 |
// isProcessing = true; // Block further inputs until response
|
| 325 |
//}
|
|
|
|
| 404 |
"keys_down": Array.from(pressedKeys),
|
| 405 |
"keys_up": [event.key],
|
| 406 |
}));
|
| 407 |
+
updateLastUserInputTime(); // Update for auto-input mechanism
|
| 408 |
} catch (error) {
|
| 409 |
console.error("Error sending key up event:", error);
|
| 410 |
}
|
|
|
|
| 412 |
|
| 413 |
// Graceful disconnection
|
| 414 |
window.addEventListener('beforeunload', function (e) {
|
| 415 |
+
stopAutoInput(); // Clean up auto-input interval
|
| 416 |
if (isConnected) {
|
| 417 |
try {
|
| 418 |
//socket.send(JSON.stringify({ type: "disconnect" }));
|
|
|
|
| 470 |
console.error("WebSocket not connected, cannot update USE_RNN");
|
| 471 |
}
|
| 472 |
});
|
| 473 |
+
|
| 474 |
+
// Add event listener for the auto-input toggle
|
| 475 |
+
document.getElementById('autoInputToggle').addEventListener('change', function() {
|
| 476 |
+
autoInputEnabled = this.checked;
|
| 477 |
+
console.log(`Auto-input ${autoInputEnabled ? 'enabled' : 'disabled'}`);
|
| 478 |
+
|
| 479 |
+
if (autoInputEnabled) {
|
| 480 |
+
// Reset the timer when enabling
|
| 481 |
+
updateLastUserInputTime();
|
| 482 |
+
}
|
| 483 |
+
});
|
| 484 |
</script>
|
| 485 |
|
| 486 |
<!-- Bootstrap JS (optional) -->
|