Spaces:
Running
Running
Update apps/aura_measure.js
Browse files- apps/aura_measure.js +29 -11
apps/aura_measure.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
| 1 |
-
// apps/aura_measure.js
|
| 2 |
import express from 'express';
|
| 3 |
import { generateCompletion } from '../ai_engine.js';
|
| 4 |
import { supabase } from '../config/supabaseClient.js';
|
|
@@ -31,22 +30,31 @@ RULES:
|
|
| 31 |
// ── LEADERBOARD CACHE ──
|
| 32 |
let leaderboardCache = null;
|
| 33 |
let lastCacheUpdate = 0;
|
| 34 |
-
const CACHE_DURATION =
|
| 35 |
|
| 36 |
router.post('/analyze', async (req, res) => {
|
| 37 |
try {
|
| 38 |
const { media_base64, context } = req.body;
|
| 39 |
if (!media_base64) throw new Error("No media provided.");
|
|
|
|
|
|
|
| 40 |
const aiResult = await generateCompletion({
|
| 41 |
model: "qwen",
|
| 42 |
prompt: context || "Analyze this image and calculate my Aura. Return JSON.",
|
| 43 |
system_prompt: AURA_SYSTEM_PROMPT,
|
| 44 |
images: [media_base64]
|
| 45 |
});
|
|
|
|
| 46 |
if (!aiResult.success) throw new Error(aiResult.error);
|
| 47 |
const parsedData = JSON.parse(aiResult.data);
|
| 48 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
} catch (err) {
|
|
|
|
| 50 |
res.status(500).json({ success: false, error: err.message });
|
| 51 |
}
|
| 52 |
});
|
|
@@ -55,10 +63,10 @@ router.get('/leaderboard', async (req, res) => {
|
|
| 55 |
try {
|
| 56 |
const now = Date.now();
|
| 57 |
if (leaderboardCache && (now - lastCacheUpdate < CACHE_DURATION)) {
|
| 58 |
-
return res.json({ success: true, data: leaderboardCache });
|
| 59 |
}
|
| 60 |
const { data, error } = await supabase
|
| 61 |
-
.from('
|
| 62 |
.select('username, avatar, total_score')
|
| 63 |
.order('total_score', { ascending: false })
|
| 64 |
.limit(50);
|
|
@@ -66,19 +74,29 @@ router.get('/leaderboard', async (req, res) => {
|
|
| 66 |
leaderboardCache = data;
|
| 67 |
lastCacheUpdate = now;
|
| 68 |
res.json({ success: true, data });
|
| 69 |
-
} catch (err) {
|
|
|
|
|
|
|
| 70 |
});
|
| 71 |
|
| 72 |
router.post('/sync', async (req, res) => {
|
| 73 |
try {
|
| 74 |
const { device_id, username, avatar, total_score } = req.body;
|
| 75 |
-
const { error } = await supabase
|
| 76 |
-
|
| 77 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
if (error) throw error;
|
| 79 |
-
lastCacheUpdate = 0; //
|
| 80 |
res.json({ success: true });
|
| 81 |
-
} catch (err) {
|
|
|
|
|
|
|
| 82 |
});
|
| 83 |
|
| 84 |
export default router;
|
|
|
|
|
|
|
| 1 |
import express from 'express';
|
| 2 |
import { generateCompletion } from '../ai_engine.js';
|
| 3 |
import { supabase } from '../config/supabaseClient.js';
|
|
|
|
| 30 |
// ── LEADERBOARD CACHE ──
|
| 31 |
let leaderboardCache = null;
|
| 32 |
let lastCacheUpdate = 0;
|
| 33 |
+
const CACHE_DURATION = 120000; // 2 Minutes
|
| 34 |
|
| 35 |
router.post('/analyze', async (req, res) => {
|
| 36 |
try {
|
| 37 |
const { media_base64, context } = req.body;
|
| 38 |
if (!media_base64) throw new Error("No media provided.");
|
| 39 |
+
console.log(`[AURA MEASURE] Analyzing vibe...`);
|
| 40 |
+
|
| 41 |
const aiResult = await generateCompletion({
|
| 42 |
model: "qwen",
|
| 43 |
prompt: context || "Analyze this image and calculate my Aura. Return JSON.",
|
| 44 |
system_prompt: AURA_SYSTEM_PROMPT,
|
| 45 |
images: [media_base64]
|
| 46 |
});
|
| 47 |
+
|
| 48 |
if (!aiResult.success) throw new Error(aiResult.error);
|
| 49 |
const parsedData = JSON.parse(aiResult.data);
|
| 50 |
+
|
| 51 |
+
res.json({
|
| 52 |
+
success: true,
|
| 53 |
+
score: parsedData.score,
|
| 54 |
+
analysis: parsedData.analysis_markdown
|
| 55 |
+
});
|
| 56 |
} catch (err) {
|
| 57 |
+
console.error("[AURA ERROR]", err.message);
|
| 58 |
res.status(500).json({ success: false, error: err.message });
|
| 59 |
}
|
| 60 |
});
|
|
|
|
| 63 |
try {
|
| 64 |
const now = Date.now();
|
| 65 |
if (leaderboardCache && (now - lastCacheUpdate < CACHE_DURATION)) {
|
| 66 |
+
return res.json({ success: true, data: leaderboardCache, cached: true });
|
| 67 |
}
|
| 68 |
const { data, error } = await supabase
|
| 69 |
+
.from('auragrade_leaderboard')
|
| 70 |
.select('username, avatar, total_score')
|
| 71 |
.order('total_score', { ascending: false })
|
| 72 |
.limit(50);
|
|
|
|
| 74 |
leaderboardCache = data;
|
| 75 |
lastCacheUpdate = now;
|
| 76 |
res.json({ success: true, data });
|
| 77 |
+
} catch (err) {
|
| 78 |
+
res.status(500).json({ success: false, error: err.message });
|
| 79 |
+
}
|
| 80 |
});
|
| 81 |
|
| 82 |
router.post('/sync', async (req, res) => {
|
| 83 |
try {
|
| 84 |
const { device_id, username, avatar, total_score } = req.body;
|
| 85 |
+
const { error } = await supabase
|
| 86 |
+
.from('auragrade_leaderboard')
|
| 87 |
+
.upsert({
|
| 88 |
+
device_id,
|
| 89 |
+
username,
|
| 90 |
+
avatar: avatar || '👤',
|
| 91 |
+
total_score,
|
| 92 |
+
updated_at: new Date().toISOString()
|
| 93 |
+
}, { onConflict: 'device_id' });
|
| 94 |
if (error) throw error;
|
| 95 |
+
lastCacheUpdate = 0; // Reset cache so next fetch gets fresh data
|
| 96 |
res.json({ success: true });
|
| 97 |
+
} catch (err) {
|
| 98 |
+
res.status(500).json({ success: false, error: err.message });
|
| 99 |
+
}
|
| 100 |
});
|
| 101 |
|
| 102 |
export default router;
|