change for ocr confidence

This commit is contained in:
2025-10-30 12:01:49 +01:00
parent b5f31a8c72
commit 2260c7cc27
16 changed files with 237 additions and 295 deletions
+28 -24
View File
@@ -1,7 +1,7 @@
import type {
SteamCollectionItem,
Submission,
PuzzleResponse,
import type {
SteamCollectionItem,
Submission,
PuzzleResponse,
SubmissionFile,
UserInfo
} from '../types'
@@ -32,7 +32,7 @@ interface SubmissionStats {
// API Service Class
export class ApiService {
private async request<T>(
endpoint: string,
endpoint: string,
options: RequestInit = {}
): Promise<ApiResponse<T>> {
try {
@@ -122,16 +122,18 @@ export class ApiService {
cycles?: string
area?: string
needs_manual_validation?: boolean
ocr_confidence_score?: number
ocr_confidence_cost?: number
ocr_confidence_cycles?: number
ocr_confidence_area?: number
}>
},
files: File[]
): Promise<ApiResponse<Submission>> {
const formData = new FormData()
// Add JSON data
formData.append('data', JSON.stringify(submissionData))
// Add files
files.forEach((file) => {
formData.append('files', file)
@@ -203,36 +205,36 @@ export const puzzleHelpers = {
findPuzzleByName(puzzles: SteamCollectionItem[], name: string): SteamCollectionItem | null {
if (!name) return null
// Try exact match first
let match = puzzles.find(p =>
let match = puzzles.find(p =>
p.title.toLowerCase() === name.toLowerCase()
)
if (!match) {
// Try partial match
match = puzzles.find(p =>
match = puzzles.find(p =>
p.title.toLowerCase().includes(name.toLowerCase()) ||
name.toLowerCase().includes(p.title.toLowerCase())
)
}
return match || null
}
}
export const submissionHelpers = {
async createFromFiles(
files: SubmissionFile[],
files: SubmissionFile[],
puzzles: SteamCollectionItem[],
notes?: string
): Promise<ApiResponse<Submission>> {
// Group files by detected puzzle
const responsesByPuzzle: Record<string, {
puzzle: SteamCollectionItem | null,
files: SubmissionFile[]
const responsesByPuzzle: Record<string, {
puzzle: SteamCollectionItem | null,
files: SubmissionFile[]
}> = {}
files.forEach(file => {
if (file.ocrData?.puzzle) {
const puzzleName = file.ocrData.puzzle
@@ -251,14 +253,14 @@ export const submissionHelpers = {
.filter(([_, data]) => data.puzzle) // Only include matched puzzles
.map(([puzzleName, data]) => {
// Get OCR data from the first file with complete data
const fileWithOCR = data.files.find(f =>
const fileWithOCR = data.files.find(f =>
f.ocrData?.cost || f.ocrData?.cycles || f.ocrData?.area
)
// Check if manual validation is needed
const needsValidation = !fileWithOCR?.ocrData ||
!fileWithOCR.ocrData.cost ||
!fileWithOCR.ocrData.cycles ||
const needsValidation = !fileWithOCR?.ocrData ||
!fileWithOCR.ocrData.cost ||
!fileWithOCR.ocrData.cycles ||
!fileWithOCR.ocrData.area
return {
@@ -268,7 +270,9 @@ export const submissionHelpers = {
cycles: fileWithOCR?.ocrData?.cycles,
area: fileWithOCR?.ocrData?.area,
needs_manual_validation: needsValidation,
ocr_confidence_score: needsValidation ? 0.5 : 0.9 // Rough estimate
ocr_confidence_cost: fileWithOCR?.ocrData?.confidence?.cost || 0.0,
ocr_confidence_cycles: fileWithOCR?.ocrData?.confidence?.cycles || 0.0,
ocr_confidence_area: fileWithOCR?.ocrData?.confidence?.area || 0.0
}
})