for first push

This commit is contained in:
2026-04-29 16:29:03 -04:00
parent 218de3b03b
commit 509259bcf2
19 changed files with 1911 additions and 2 deletions

View File

@@ -0,0 +1,54 @@
import { Queue, Worker } from "bullmq";
import { Redis } from "ioredis";
import { AnalysisService } from "@shieldai/voiceprint";
const redisUrl = process.env.REDIS_URL || "redis://localhost:6379";
const connection = new Redis(redisUrl);
const analysisQueue = new Queue("voiceprint-analysis", { connection });
const analysisWorker = new Worker(
"voiceprint-analysis",
async (job) => {
const { userId, audioBuffer, sampleRate, analysisType } = job.data;
const analysisService = new AnalysisService();
const result = await analysisService.analyze(
{
audioBuffer: Buffer.from(audioBuffer, "base64"),
sampleRate,
analysisType,
},
userId
);
return { jobId: result.jobId, completedAt: new Date().toISOString() };
},
{ connection, concurrency: 2 }
);
analysisWorker.on("completed", (job) => {
console.log(`[VoicePrint] Job ${job.id} completed: ${JSON.stringify(job.returnvalue)}`);
});
analysisWorker.on("failed", (job, err) => {
console.error(`[VoicePrint] Job ${job.id} failed: ${err.message}`);
});
export async function addAnalysisJob(
userId: string,
audioBuffer: Buffer,
sampleRate?: number,
analysisType?: string
) {
return analysisQueue.add("analyze", {
userId,
audioBuffer: audioBuffer.toString("base64"),
sampleRate,
analysisType,
}, {
attempts: 3,
backoff: { type: "exponential", delay: 5000 },
jobId: `vp-${userId}-${Date.now()}`,
});
}
console.log("[VoicePrint] Analysis worker started");