feat: Replace Nebius with Pixtral AI for bottle scanning

This commit is contained in:
2025-12-19 21:53:18 +01:00
parent 06891a3619
commit 25b1378794
10 changed files with 184 additions and 81 deletions

View File

@@ -65,7 +65,7 @@ export default function CameraCapture({ onImageCaptured, onAnalysisComplete, onS
const [isDiscovering, setIsDiscovering] = useState(false);
const [originalFile, setOriginalFile] = useState<File | null>(null);
const [isAdmin, setIsAdmin] = useState(false);
const [aiProvider, setAiProvider] = useState<'gemini' | 'nebius'>('gemini');
const [aiProvider, setAiProvider] = useState<'gemini' | 'pixtral'>('gemini');
React.useEffect(() => {
const checkAdmin = async () => {
@@ -200,7 +200,7 @@ export default function CameraCapture({ onImageCaptured, onAnalysisComplete, onS
setError(null);
try {
const { data: { user } } = await supabase.auth.getUser();
const { data: { user } = {} } = await supabase.auth.getUser();
if (!user) {
throw new Error(t('camera.authRequired'));
}
@@ -242,7 +242,7 @@ export default function CameraCapture({ onImageCaptured, onAnalysisComplete, onS
setError(null);
try {
const { data: { user } } = await supabase.auth.getUser();
const { data: { user } = {} } = await supabase.auth.getUser();
if (!user) {
throw new Error(t('camera.authRequired'));
}
@@ -364,10 +364,10 @@ export default function CameraCapture({ onImageCaptured, onAnalysisComplete, onS
Gemini
</button>
<button
onClick={() => setAiProvider('nebius')}
className={`px-3 py-1 text-[10px] font-black uppercase tracking-widest rounded-lg transition-all ${aiProvider === 'nebius' ? 'bg-white dark:bg-zinc-700 text-amber-600 shadow-sm' : 'text-zinc-400'}`}
onClick={() => setAiProvider('pixtral')}
className={`px-3 py-1 text-[10px] font-black uppercase tracking-widest rounded-lg transition-all ${aiProvider === 'pixtral' ? 'bg-white dark:bg-zinc-700 text-amber-600 shadow-sm' : 'text-zinc-400'}`}
>
Nebius
Pixtral 🇪🇺
</button>
</div>
)}

View File

@@ -3,7 +3,7 @@
import React, { useEffect, useState, useCallback } from 'react';
import { useLiveQuery } from 'dexie-react-hooks';
import { db, PendingScan, PendingTasting } from '@/lib/db';
import { analyzeBottle } from '@/services/analyze-bottle';
import { magicScan } from '@/services/magic-scan';
import { saveBottle } from '@/services/save-bottle';
import { saveTasting } from '@/services/save-tasting';
import { createClient } from '@/lib/supabase/client';
@@ -41,7 +41,7 @@ export default function UploadQueue() {
const itemId = `scan-${item.id}`;
setCurrentProgress({ id: itemId, status: 'Analysiere Scan...' });
try {
const analysis = await analyzeBottle(item.imageBase64, undefined, item.locale);
const analysis = await magicScan(item.imageBase64, item.provider, item.locale);
if (analysis.success && analysis.data) {
const bottleData = analysis.data;
setCurrentProgress({ id: itemId, status: 'Speichere Flasche...' });