Add files via upload

This commit is contained in:
Savsis 2026-05-08 02:54:57 +05:00 • committed by GitHub
parent 235427ce97
commit 73ed266994
21 changed files with 17879 additions and 1046 deletions

77
services/mywave.ts Normal file
View file

@ -0,0 +1,77 @@
import { Track } from './api';
import { useLikes } from '../store';
const DEEPSEEK_API_KEY = 'REDACTED_DEEPSEEK_API_KEY';
const DEEPSEEK_URL = 'https://api.deepseek.com/chat/completions';
export async function getMyWaveTracks(allTracks: Track[]): Promise<Track[]> {
const likedIds = [...useLikes.getState().likes];
if (likedIds.length === 0) {
// No liked tracks - return random shuffle
return [...allTracks].sort(() => Math.random() - 0.5).slice(0, 30);
}
const likedTracks = allTracks.filter((t) => likedIds.includes(t.id));
const likedNames = likedTracks
.slice(0, 20)
.map((t) => `${t.artist} - ${t.title}`)
.join('\n');
const otherTracks = allTracks.filter((t) => !likedIds.includes(t.id));
const otherNames = otherTracks
.slice(0, 80)
.map((t, i) => `${i}. ${t.artist} - ${t.title}`)
.join('\n');
try {
const res = await fetch(DEEPSEEK_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${DEEPSEEK_API_KEY}`,
},
body: JSON.stringify({
model: 'deepseek-chat',
messages: [
{
role: 'system',
content: 'You are a music recommendation engine. Given liked songs, pick the most similar tracks from a list. Return ONLY a JSON array of track indices (numbers), maximum 25. No explanation.',
},
{
role: 'user',
content: `Liked songs:\n${likedNames}\n\nAvailable tracks (pick by index):\n${otherNames}`,
},
],
max_tokens: 200,
temperature: 0.7,
}),
});
if (!res.ok) throw new Error('DeepSeek API error');
const data = await res.json();
const content = data.choices?.[0]?.message?.content || '[]';
const match = content.match(/\[[\d,\s]+\]/);
if (match) {
const indices: number[] = JSON.parse(match[0]);
const recommended = indices
.filter((i) => i >= 0 && i < otherTracks.length)
.map((i) => otherTracks[i])
.filter(Boolean);
// Mix recommended with some liked
const mixed = [
...likedTracks.sort(() => Math.random() - 0.5).slice(0, 5),
...recommended,
].sort(() => Math.random() - 0.5);
return mixed.slice(0, 30);
}
} catch (e) {
console.warn('MyWave DeepSeek error:', e);
}
// Fallback: random mix with liked boosted
return [
...likedTracks.sort(() => Math.random() - 0.5),
...otherTracks.sort(() => Math.random() - 0.5).slice(0, 20),
].slice(0, 30);
}