reneco-advanced-input-module 0.0.25 → 0.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/voice-input-module.cjs.entry.js +65 -28
  3. package/dist/cjs/voice-input-module.cjs.entry.js.map +1 -1
  4. package/dist/cjs/voice-input-module.cjs.js +1 -1
  5. package/dist/cjs/voice-input-module.entry.cjs.js.map +1 -1
  6. package/dist/collection/components/voice-input-module/voice-input-module.css +26 -3
  7. package/dist/collection/components/voice-input-module/voice-input-module.js +57 -23
  8. package/dist/collection/components/voice-input-module/voice-input-module.js.map +1 -1
  9. package/dist/collection/services/llm.service.js +8 -4
  10. package/dist/collection/services/llm.service.js.map +1 -1
  11. package/dist/collection/types/form-schema.types.js.map +1 -1
  12. package/dist/components/voice-input-module.js +66 -28
  13. package/dist/components/voice-input-module.js.map +1 -1
  14. package/dist/esm/loader.js +1 -1
  15. package/dist/esm/voice-input-module.entry.js +65 -28
  16. package/dist/esm/voice-input-module.entry.js.map +1 -1
  17. package/dist/esm/voice-input-module.js +1 -1
  18. package/dist/types/components/voice-input-module/voice-input-module.d.ts +4 -0
  19. package/dist/types/types/form-schema.types.d.ts +1 -0
  20. package/dist/voice-input-module/p-f14c05d0.entry.js +3 -0
  21. package/dist/voice-input-module/p-f14c05d0.entry.js.map +1 -0
  22. package/dist/voice-input-module/voice-input-module.entry.esm.js.map +1 -1
  23. package/dist/voice-input-module/voice-input-module.esm.js +1 -1
  24. package/package.json +1 -1
  25. package/www/build/p-4e26fbbb.js +2 -0
  26. package/www/build/p-f14c05d0.entry.js +3 -0
  27. package/www/build/p-f14c05d0.entry.js.map +1 -0
  28. package/www/build/voice-input-module.entry.esm.js.map +1 -1
  29. package/www/build/voice-input-module.esm.js +1 -1
  30. package/www/index.html +9 -9
  31. package/dist/voice-input-module/p-334644ec.entry.js +0 -3
  32. package/dist/voice-input-module/p-334644ec.entry.js.map +0 -1
  33. package/www/build/p-334644ec.entry.js +0 -3
  34. package/www/build/p-334644ec.entry.js.map +0 -1
  35. package/www/build/p-dfdcd9a6.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"voice-input-module.js","sourceRoot":"","sources":["../../../src/components/voice-input-module/voice-input-module.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, Event, EventEmitter, State, h, Watch, Method } from '@stencil/core';\r\nimport { FormSchema, VoiceFormRecorderResult, FilledFormData, FormSchemaFieldsOnly, FormSchemaFieldsOnlyExtended } from '../../types/form-schema.types';\r\nimport { ServiceProviderConfig, TranscriptionProvider, CompletionProvider, TRANSCRIPTION_MODELS, COMPLETION_MODELS } from '../../types/service-providers.types';\r\nimport { AudioRecorderService } from '../../services/audio-recorder.service';\r\nimport { SpeechToTextServiceFactory } from '../../services/speech-to-text.service';\r\nimport { LLMServiceFactory } from '../../services/llm.service';\r\nimport { SchemaConverter } from '../../utils/schema-converter';\r\nimport { defineCustomElements } from 'ocr-file-uploader/loader';\r\n\r\n// Initialize OCR\r\ndefineCustomElements();\r\n\r\n@Component({\r\n tag: 'voice-input-module',\r\n styleUrl: 'voice-input-module.css',\r\n shadow: true,\r\n})\r\nexport class VoiceFormRecorder {\r\n @Prop() formJson: string = '{}';\r\n @Prop() serviceConfig: string = '{}';\r\n @Prop() apiKey: string;\r\n @Prop() apiProxyUrl: string = 'http://localhost:8492';\r\n @Prop() transcriptionModel: string = 'gpt-4o-transcribe';\r\n @Prop() completionModel: string = 'gpt-5-mini';\r\n @Prop() transcriptionProvider: TranscriptionProvider = 'openai';\r\n @Prop() completionProvider: CompletionProvider = 'openai';\r\n @Prop() context: 'track'|'ng'|'ecoll-veto'|'ecoteka' = undefined;\r\n @Prop() classificationRootUrl: string = 'http://localhost';\r\n @Prop() language: 'fr'|'en' = 'en';\r\n @Prop() inputTypes: string = '';\r\n @Prop() theme: string = '';\r\n \r\n private get parsedInputTypes(): ('voice' | 'ocr' | 'audio')[] {\r\n if (!this.inputTypes) return [];\r\n try {\r\n return JSON.parse(this.inputTypes.replace(/'/g, '\"'));\r\n } catch {\r\n return this.inputTypes.split(',').map(type => type.trim() as 'voice' | 'ocr' | 'audio');\r\n }\r\n }\r\n \r\n @Prop() debug: boolean = false;\r\n @Prop() renderForm: boolean = false;\r\n @Prop() displayStatus: boolean = false;\r\n \r\n @Event() formFilled: EventEmitter<VoiceFormRecorderResult>;\r\n @Event() recordingStateChanged: EventEmitter<{ isRecording: boolean; state: string }>;\r\n\r\n @State() isRecording: boolean = false;\r\n @State() isProcessing: boolean = false;\r\n @State() statusMessage: string;\r\n @State() hasError: boolean = false;\r\n @State() hasTransientError: boolean = false;\r\n @State() transcription: string = '';\r\n @State() filledData: FilledFormData | null = null;\r\n @State() debugInfo: any = {};\r\n @State() isReadonlyMode: boolean = true; // Start in readonly preview mode\r\n @State() isInitializing: boolean = true;\r\n\r\n private audioRecorder: AudioRecorderService;\r\n private speechToTextService: any;\r\n private llmService: any;\r\n private parsedSchema: any; // Support both simple FormSchema and complex nested schema\r\n private parsedConfig: ServiceProviderConfig;\r\n private parsedTheme: any;\r\n\r\n constructor() {\r\n this.audioRecorder = new AudioRecorderService();\r\n }\r\n\r\n componentWillLoad() {\r\n // Parse theme only so the skeleton can be styled correctly on first render.\r\n // Full initialization runs in componentDidLoad() to give the skeleton time to paint.\r\n try {\r\n this.parsedTheme = this.theme ? JSON.parse(this.theme) : this.getDefaultTheme();\r\n } catch {\r\n this.parsedTheme = this.getDefaultTheme();\r\n }\r\n }\r\n\r\n componentDidLoad() {\r\n this.initializeServices();\r\n this.isInitializing = false;\r\n }\r\n\r\n @Watch('formJson')\r\n @Watch('serviceConfig')\r\n @Watch('theme')\r\n @Watch('transcriptionProvider')\r\n @Watch('completionProvider')\r\n @Watch('transcriptionModel')\r\n @Watch('completionModel')\r\n initializeServices() {\r\n // Parse theme\r\n try {\r\n this.parsedTheme = this.theme ? JSON.parse(this.theme) : this.getDefaultTheme();\r\n } catch {\r\n this.parsedTheme = this.getDefaultTheme();\r\n }\r\n try {\r\n if (!this.context){\r\n this.hasError = true;\r\n const errorMessage = (this.language == 'en' ? `Initialization error: context is '${this.context}'` : `Erreur d'initialisation: le contexte est '${this.context}'`);\r\n this.statusMessage = errorMessage;\r\n this.updateDebugInfo(errorMessage, { error: errorMessage });\r\n }\r\n else{\r\n // Validate transcription provider/model\r\n const allowedTranscriptionModels = TRANSCRIPTION_MODELS[this.transcriptionProvider];\r\n if (!allowedTranscriptionModels) {\r\n throw new Error(`Unsupported transcription provider: '${this.transcriptionProvider}'. Allowed: openai, mistral`);\r\n }\r\n if (!allowedTranscriptionModels.includes(this.transcriptionModel)) {\r\n throw new Error(`Model '${this.transcriptionModel}' is not allowed for transcription provider '${this.transcriptionProvider}'. Allowed: ${allowedTranscriptionModels.join(', ')}`);\r\n }\r\n\r\n // Validate completion provider/model\r\n const allowedCompletionModels = COMPLETION_MODELS[this.completionProvider];\r\n if (!allowedCompletionModels) {\r\n throw new Error(`Unsupported completion provider: '${this.completionProvider}'. Allowed: openai, anthropic, mistral`);\r\n }\r\n if (!allowedCompletionModels.includes(this.completionModel)) {\r\n throw new Error(`Model '${this.completionModel}' is not allowed for completion provider '${this.completionProvider}'. Allowed: ${allowedCompletionModels.join(', ')}`);\r\n }\r\n\r\n // Parse form schema\r\n this.parsedSchema = JSON.parse(this.formJson || '{}');\r\n \r\n // Parse service configuration\r\n this.parsedConfig = JSON.parse(this.serviceConfig || '{}');\r\n \r\n // Add API key to config if provided via prop\r\n if (this.apiKey) {\r\n this.parsedConfig = {\r\n ...this.parsedConfig,\r\n speechToText: { ...this.parsedConfig.speechToText, provider: this.transcriptionProvider, apiKey: this.apiKey, model: this.transcriptionModel },\r\n llm: { ...this.parsedConfig.llm, provider: this.completionProvider, apiKey: this.apiKey, model: this.completionModel }\r\n };\r\n } else {\r\n // Use proxy API if no API key provided\r\n this.parsedConfig = {\r\n ...this.parsedConfig,\r\n speechToText: { ...this.parsedConfig.speechToText, provider: this.transcriptionProvider, useProxy: true, proxyUrl: this.apiProxyUrl, model: this.transcriptionModel },\r\n llm: { ...this.parsedConfig.llm, provider: this.completionProvider, useProxy: true, proxyUrl: this.apiProxyUrl, model: this.completionModel }\r\n };\r\n }\r\n \r\n // Initialize services\r\n this.speechToTextService = SpeechToTextServiceFactory.create(this.parsedConfig);\r\n this.llmService = LLMServiceFactory.create(this.parsedConfig);\r\n \r\n this.updateDebugInfo('Initialized', {\r\n schema: this.parsedSchema,\r\n config: this.parsedConfig\r\n });\r\n \r\n this.hasError = false;\r\n this.hasTransientError = false;\r\n this.statusMessage = this.parsedTheme.texts?.idle || (this.language == 'en' ? 'Select an input method' : 'Sélectionner une méthode de saisie');\r\n if (this.parsedInputTypes.length === 0){\r\n this.inputTypes = 'voice';\r\n }\r\n }\r\n } catch (error) {\r\n this.hasError = true;\r\n this.statusMessage = (this.language == 'en' ? `Initialization error: ${error.message}` : `Erreur d'initialisation: ${error.message}`);\r\n this.updateDebugInfo('Initialization Error', { error: error.message });\r\n }\r\n }\r\n\r\n private updateDebugInfo(action: string, data: any) {\r\n if (this.debug) {\r\n this.debugInfo = {\r\n ...this.debugInfo,\r\n [action]: {\r\n timestamp: new Date().toISOString(),\r\n data\r\n }\r\n };\r\n }\r\n }\r\n\r\n private getMicErrorMessage(error: Error): string {\r\n const isEn = this.language === 'en';\r\n const errorName = (error as any).name || '';\r\n if (errorName === 'NotAllowedError' || errorName === 'PermissionDeniedError') {\r\n return isEn\r\n ? 'Microphone access denied. Allow microphone access in your browser settings and try again.'\r\n : \"Accès au microphone refusé. Autorisez l'accès au microphone dans les paramètres du navigateur et réessayez.\";\r\n }\r\n if (errorName === 'NotFoundError' || errorName === 'DevicesNotFoundError') {\r\n return isEn\r\n ? 'No microphone found. Please connect a microphone and try again.'\r\n : 'Aucun microphone trouvé. Connectez un microphone et réessayez.';\r\n }\r\n if (errorName === 'NotReadableError' || errorName === 'TrackStartError') {\r\n return isEn\r\n ? 'Microphone is busy or unavailable. Close other apps using the microphone and try again.'\r\n : 'Le microphone est occupé ou indisponible. Fermez les autres applications utilisant le microphone et réessayez.';\r\n }\r\n if (errorName === 'AbortError') {\r\n return isEn\r\n ? 'Microphone access was interrupted. Please try again.'\r\n : \"L'accès au microphone a été interrompu. Veuillez réessayer.\";\r\n }\r\n if (errorName === 'OverconstrainedError') {\r\n return isEn\r\n ? 'Microphone does not support the required audio settings.'\r\n : 'Le microphone ne supporte pas les paramètres audio requis.';\r\n }\r\n if (error.message?.includes('HTTPS') || error.message?.includes('not supported')) {\r\n return isEn\r\n ? 'Microphone access requires HTTPS or localhost.'\r\n : \"L'accès au microphone nécessite HTTPS ou localhost.\";\r\n }\r\n return isEn ? `Microphone error: ${error.message}` : `Erreur microphone : ${error.message}`;\r\n }\r\n\r\n private getReadableErrorMessage(error: Error, phase: string): string {\r\n const isEn = this.language === 'en';\r\n const msg = error.message || '';\r\n if (/401|unauthorized|invalid.{0,20}(api )?key|authentication failed/i.test(msg)) {\r\n return isEn\r\n ? 'Authentication failed: invalid API key. Check your configuration.'\r\n : \"Échec d'authentification : clé API invalide. Vérifiez votre configuration.\";\r\n }\r\n if (/403|forbidden/i.test(msg)) {\r\n return isEn\r\n ? 'Access denied: check your API permissions.'\r\n : 'Accès refusé : vérifiez vos permissions API.';\r\n }\r\n if (/429|rate.{0,10}limit|too many requests/i.test(msg)) {\r\n return isEn\r\n ? 'Rate limit exceeded. Please wait a moment and try again.'\r\n : 'Limite de requêtes dépassée. Veuillez attendre quelques secondes et réessayer.';\r\n }\r\n if (/404|not found/i.test(msg)) {\r\n return isEn\r\n ? 'API endpoint not found. Check your proxy URL configuration.'\r\n : \"Endpoint API introuvable. Vérifiez l'URL de votre proxy.\";\r\n }\r\n if (/5\\d\\d|server error|internal server|bad gateway|service unavailable/i.test(msg)) {\r\n return isEn\r\n ? 'Server error. Please try again in a moment.'\r\n : 'Erreur serveur. Veuillez réessayer dans un instant.';\r\n }\r\n if (/network|failed to fetch|err_connection|connection refused/i.test(msg)) {\r\n return isEn\r\n ? 'Network error: check your connection and proxy server.'\r\n : 'Erreur réseau : vérifiez votre connexion et le serveur proxy.';\r\n }\r\n if (/json|parse error|unexpected token|invalid response/i.test(msg)) {\r\n return isEn\r\n ? 'Unexpected response from AI service. Please try again.'\r\n : 'Réponse inattendue du service IA. Veuillez réessayer.';\r\n }\r\n if (phase === 'transcription') {\r\n return isEn ? `Transcription failed: ${msg}` : `Échec de la transcription : ${msg}`;\r\n }\r\n if (phase === 'llm') {\r\n return isEn ? `Form filling failed: ${msg}` : `Échec du remplissage du formulaire : ${msg}`;\r\n }\r\n if (phase === 'ocr') {\r\n return isEn ? `OCR processing failed: ${msg}` : `Échec du traitement OCR : ${msg}`;\r\n }\r\n return isEn ? `Processing error: ${msg}` : `Erreur de traitement : ${msg}`;\r\n }\r\n\r\n private async handleRecordClick() {\r\n if (this.isProcessing) return;\r\n\r\n if (this.isRecording) {\r\n await this.stopRecordingAndProcess();\r\n } else {\r\n await this.startRecording();\r\n }\r\n }\r\n\r\n private async startRecording() {\r\n try {\r\n this.hasTransientError = false;\r\n this.statusMessage = (this.language == 'en' ? 'Starting recording...' : `Enregistrement ...`);\r\n this.updateDebugInfo('Start Recording Attempt', {});\r\n\r\n await this.audioRecorder.startRecording();\r\n \r\n this.isRecording = true;\r\n this.statusMessage = this.parsedTheme.texts?.recording || (this.language == 'en' ? 'Recording... Click to stop' : 'Enregistrement ... Cliquer pour stopper');\r\n this.updateDebugInfo('Recording Started', {});\r\n \r\n this.recordingStateChanged.emit({ \r\n isRecording: true, \r\n state: 'recording' \r\n });\r\n } catch (error) {\r\n this.hasTransientError = true;\r\n this.statusMessage = this.getMicErrorMessage(error);\r\n this.updateDebugInfo('Recording Error', { error: error.message });\r\n \r\n this.formFilled.emit({\r\n success: false,\r\n error: error.message\r\n });\r\n }\r\n }\r\n\r\n private async processJsonForm(ocrData: any) {\r\n if (this.isProcessing || this.isRecording) return;\r\n this.isProcessing = true;\r\n this.hasTransientError = false;\r\n this.statusMessage = this.parsedTheme.texts?.processing || (this.language == 'en' ? 'Processing document...' : 'Traitement du document ...');\r\n\r\n try {\r\n const extractedData = ocrData?.content || ocrData;\r\n const jsonForm = JSON.stringify(extractedData);\r\n\r\n if (!extractedData) {\r\n throw Object.assign(new Error('OCR returned no data'), { phase: 'ocr' });\r\n }\r\n\r\n this.statusMessage = this.parsedTheme.texts?.filling || (this.language == 'en' ? 'Filling form fields...' : 'Remplissage du formulaire ...');\r\n const trimmedSchema = await this.trimSchemaForAI(this.parsedSchema);\r\n let filledSchema: any;\r\n try {\r\n filledSchema = await this.llmService.fillFormFromJson(jsonForm, trimmedSchema);\r\n } catch (llmError) {\r\n throw Object.assign(new Error(llmError.message), { phase: 'llm' });\r\n }\r\n\r\n this.filledData = this.extractFilledData(filledSchema);\r\n this.updateDebugInfo('Form Filled', { filledSchema, extractedData: this.filledData });\r\n this.parsedSchema = this.filledData;\r\n\r\n this.statusMessage = this.parsedTheme.texts?.completed || (this.language == 'en' ? 'Form completed!' : 'Formulaire rempli !');\r\n this.formFilled.emit({ success: true, data: this.filledData, jsonForm });\r\n\r\n } catch (error) {\r\n console.error('OCR processing error:', error);\r\n this.hasTransientError = true;\r\n this.statusMessage = this.getReadableErrorMessage(error, (error as any).phase || 'llm');\r\n this.updateDebugInfo('OCR Processing Error', { phase: (error as any).phase, error: error.message });\r\n this.formFilled.emit({ success: false, error: error.message, jsonForm: JSON.stringify(ocrData) });\r\n } finally {\r\n this.isProcessing = false;\r\n }\r\n }\r\n\r\n private async processAudioContent(audioFile: File) {\r\n if (this.isProcessing || this.isRecording) return;\r\n this.isProcessing = true;\r\n this.hasTransientError = false;\r\n this.updateDebugInfo('Audio Captured', { size: audioFile.size, type: audioFile.type });\r\n\r\n try {\r\n // Validate audio file before sending to API\r\n const MAX_AUDIO_SIZE = 25 * 1024 * 1024; // 25MB (API limit)\r\n if (audioFile.size <= 44) { // WAV header alone is 44 bytes; effectively empty\r\n this.hasTransientError = true;\r\n this.statusMessage = this.language == 'en'\r\n ? 'Recording is empty or too short. Please try again.'\r\n : \"L'enregistrement est vide ou trop court. Veuillez réessayer.\";\r\n this.formFilled.emit({ success: false, error: 'Empty or too short audio' });\r\n return;\r\n }\r\n if (audioFile.size > MAX_AUDIO_SIZE) {\r\n this.hasTransientError = true;\r\n this.statusMessage = this.language == 'en'\r\n ? `File too large (${Math.round(audioFile.size / 1024 / 1024)}MB). Maximum is 25MB.`\r\n : `Fichier trop volumineux (${Math.round(audioFile.size / 1024 / 1024)}Mo). Maximum : 25Mo.`;\r\n this.formFilled.emit({ success: false, error: 'Audio file too large' });\r\n return;\r\n }\r\n\r\n // Step 1: Transcription\r\n let transcription: string;\r\n try {\r\n this.statusMessage = this.parsedTheme.texts?.transcribing || (this.language == 'en' ? 'Transcribing speech...' : 'Transcription du texte ...');\r\n transcription = await this.speechToTextService.transcribe(audioFile, this.language);\r\n this.transcription = transcription;\r\n this.updateDebugInfo('Transcription Complete', { transcription });\r\n } catch (transcriptionError) {\r\n throw Object.assign(new Error(transcriptionError.message), { phase: 'transcription' });\r\n }\r\n\r\n if (!transcription.trim()) {\r\n this.hasTransientError = true;\r\n this.statusMessage = this.language == 'en'\r\n ? 'No speech detected. Please speak clearly and try again.'\r\n : 'Aucune parole détectée. Parlez clairement et réessayez.';\r\n this.formFilled.emit({ success: false, error: 'No speech detected', transcription: '' });\r\n return;\r\n }\r\n\r\n // Step 2: LLM form filling\r\n let filledSchema: any;\r\n try {\r\n this.statusMessage = this.parsedTheme.texts?.filling || (this.language == 'en' ? 'Filling form fields...' : 'Remplissage du formulaire ...');\r\n const trimmedSchema = await this.trimSchemaForAI(this.parsedSchema);\r\n filledSchema = await this.llmService.fillFormFromTranscription(transcription, trimmedSchema);\r\n } catch (llmError) {\r\n throw Object.assign(new Error(llmError.message), { phase: 'llm' });\r\n }\r\n\r\n this.filledData = this.extractFilledData(filledSchema);\r\n this.updateDebugInfo('Form Filled', { filledSchema, extractedData: this.filledData });\r\n this.parsedSchema = this.filledData;\r\n\r\n this.statusMessage = this.parsedTheme.texts?.completed || (this.language == 'en' ? 'Form completed!' : 'Formulaire rempli !');\r\n this.formFilled.emit({ success: true, data: this.filledData, transcription });\r\n\r\n } catch (error) {\r\n console.error('Audio processing error:', error);\r\n this.hasTransientError = true;\r\n this.statusMessage = this.getReadableErrorMessage(error, (error as any).phase || 'audio-upload');\r\n this.updateDebugInfo('Audio Processing Error', { phase: (error as any).phase, error: error.message });\r\n this.formFilled.emit({ success: false, error: error.message, transcription: this.transcription });\r\n } finally {\r\n this.isProcessing = false;\r\n }\r\n }\r\n\r\n private async stopRecordingAndProcess() {\r\n this.isRecording = false;\r\n this.isProcessing = true;\r\n this.hasTransientError = false;\r\n this.statusMessage = this.parsedTheme.texts?.processing || (this.language == 'en' ? 'Processing audio...' : `Traitement de l'audio ...`);\r\n this.updateDebugInfo('Stop Recording', {});\r\n\r\n this.recordingStateChanged.emit({ isRecording: false, state: 'processing' });\r\n\r\n try {\r\n const audioBlob = await this.audioRecorder.stopRecording();\r\n const audioContent = new File([audioBlob], 'audio.wav', { type: 'audio/wav' });\r\n // processAudioContent manages isProcessing itself; await ensures we don't return early\r\n await this.processAudioContent(audioContent);\r\n } catch (error) {\r\n // Only reached if audioRecorder.stopRecording() itself throws\r\n this.hasTransientError = true;\r\n this.isProcessing = false;\r\n this.statusMessage = (this.language == 'en'\r\n ? `Failed to stop recording: ${error.message}`\r\n : `Impossible d'arrêter l'enregistrement : ${error.message}`);\r\n this.updateDebugInfo('Stop Recording Error', { error: error.message });\r\n this.formFilled.emit({ success: false, error: error.message, transcription: this.transcription });\r\n } finally {\r\n this.recordingStateChanged.emit({ isRecording: false, state: 'idle' });\r\n }\r\n }\r\n\r\n private extractFilledData(filledData: any): any {\r\n // console.log(\"extractFilledData\", filledData);\r\n const updatedSchema = JSON.parse(JSON.stringify(this.parsedSchema));\r\n switch(this.context){\r\n case \"ecoteka\":\r\n // console.log(\"TODO extractFilledData\", filledData);\r\n case \"ng\": \r\n if (filledData?.fields) {\r\n // Map AI response back to original schema structure\r\n filledData.fields.forEach((field: any) => {\r\n const originalField = updatedSchema.Children.find((child: any) => \r\n child.System_Name === field.name || child.Settings?.Label === field.name\r\n );\r\n \r\n if (originalField && field.value !== undefined && field.value !== null && field.value !== '') {\r\n if (!originalField.Settings) originalField.Settings = {};\r\n originalField.Settings.Default_Value = field.value;\r\n }\r\n });\r\n }\r\n \r\n break;\r\n case \"ecoll-veto\":\r\n // console.log(\"TODO extractFilledData\", filledData, updatedSchema);\r\n if (filledData?.fields) {\r\n // Map AI response back to original schema structure\r\n filledData.fields.forEach((field: any) => {\r\n let originalField = updatedSchema[0].items.find((child: any) => \r\n child.label === field.name\r\n );\r\n if (!originalField)\r\n originalField = updatedSchema[1].items.find((child: any) =>\r\n child.label === field.name\r\n );\r\n \r\n if (originalField && field.value !== undefined && field.value !== null && field.value !== '') {\r\n updatedSchema[2][originalField.name] = field.value;\r\n }\r\n });\r\n }\r\n break;\r\n case \"track\":\r\n default:\r\n if (filledData?.fields) {\r\n Object.entries(filledData.fields).forEach(([fieldID, field]: [string, any]) => {\r\n if (field.value !== undefined && field.value !== null && field.value !== '') {\r\n if (field.id) {\r\n const schemaField = updatedSchema.fields[field.id];\r\n if (schemaField) {\r\n schemaField.value = field.value;\r\n schemaField.default = field.value;\r\n }\r\n } else {\r\n const fieldName = field.name;\r\n for (const key in updatedSchema.fields) {\r\n const schemaField = updatedSchema.fields[key];\r\n if (schemaField.title === fieldName) {\r\n schemaField.value = field.value;\r\n schemaField.default = field.value;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n break;\r\n }\r\n \r\n // console.log(\"extractFilledData result\", updatedSchema);\r\n return updatedSchema;\r\n }\r\n\r\n private async trimSchemaForAI(schema: any): Promise<any> {\r\n // console.log(\"trimSchemaForAI\", schema);\r\n switch(this.context){\r\n case \"ecoteka\":\r\n // console.log(\"TODO trimSchemaForAI\", schema)\r\n case \"ng\":\r\n const trimmed = { fields: [] };\r\n schema.Children.forEach((child: any) => {\r\n if (!child.System_Name || !child.Type) return;\r\n \r\n const fieldData: any = {\r\n name: child.Label || child.Settings?.Label || child.System_Name,\r\n type: this.mapFieldType(child.Type),\r\n default: child.Settings?.Default_Value\r\n };\r\n \r\n // Add options for classification/select/multiselect fields\r\n const selectTypes = ['InputClassification', 'select', 'multiselect', 'InputMultiSelect']\r\n if (selectTypes.includes(child.Type) && child.Children && child.Children.length > 0) {\r\n fieldData.options = child.Children.map((option: any) => \r\n option.System_Name || option.Label || option.toString()\r\n );\r\n }\r\n \r\n trimmed.fields.push(fieldData);\r\n });\r\n \r\n // console.log(\"Schema apres transformation, contexte NG:\", trimmed);\r\n return trimmed;\r\n case \"ecoll-veto\":\r\n // console.log(\"TODO trimSchemaForAI\", schema)\r\n const mergedItemsSchema = (this.parsedSchema[0].items).concat(this.parsedSchema[1].items);\r\n\r\n if (mergedItemsSchema) {\r\n const trimmedSchema: FormSchema = {\r\n title: 'Form Name',\r\n description: 'Form Description',\r\n schema: {}\r\n };\r\n\r\n Object.entries(mergedItemsSchema).forEach(async ([key, field]: [string, any]) => {\r\n const fieldName = field.name;\r\n const fieldType = this.mapFieldType(field.type) as any;\r\n const fieldLabel = field.label || fieldName;\r\n const isRequired = field.required || false;\r\n const fieldValue = ''; //TODO\r\n\r\n if (['position', 'thesaurus'].includes(fieldType)) {\r\n try {\r\n const response = await fetch(`${this.classificationRootUrl}/ng/api/v1/classification/getList/${fieldType.toLowerCase() == 'position' ? \"Position\" : \"Thesaurus\"}/?StartNodeID=${field.config.options.options.startNode}`);\r\n if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n const data = await response.json();\r\n if (Array.isArray(data)) {\r\n const options = data.map(item => ({\r\n value: item.ID,\r\n label: item.System_Name\r\n }));\r\n if (options.length > 0) {\r\n field.pickerOptions = options;\r\n // TODO on degage les quotes simples temporairement, a corriger\r\n field.options = options.map(option => option.label.replace(\"'\", \"\"));\r\n }\r\n } else {\r\n console.error(\"Unexpected API response format:\", data);\r\n }\r\n } catch (error) {\r\n console.error(\"Error fetching classification data:\", error);\r\n }\r\n }\r\n \r\n trimmedSchema.schema[fieldName] = {\r\n type: fieldType,\r\n title: fieldLabel,\r\n options: field.options,\r\n readonly: field.readonly === true,\r\n default: '',\r\n };\r\n });\r\n\r\n // console.log(\"Schema apres transformation, contexte Track:\", trimmedSchema);\r\n return trimmedSchema;\r\n }\r\n case \"track\":\r\n default:\r\n if (schema?.schema ?? schema?.fields) {\r\n const trimmedSchema: FormSchema = {\r\n title: schema.title,\r\n description: schema.description,\r\n schema: {}\r\n };\r\n\r\n const finalSchema = schema?.schema ?? schema?.fields;\r\n\r\n Object.entries(finalSchema).forEach(([fieldName, field]: [string, any]) => {\r\n trimmedSchema.schema[fieldName] = {\r\n id: fieldName,\r\n type: field.type,\r\n title: field.title,\r\n options: field.options,\r\n readonly: field.type === 'header' || field.Enabled === false,\r\n default: field.default || field.DefaultValue,\r\n pattern: field.Mask,\r\n min: field.ValidationMin,\r\n max: field.ValidationMax\r\n };\r\n });\r\n\r\n return trimmedSchema;\r\n }\r\n break;\r\n }\r\n \r\n return schema;\r\n }\r\n\r\n private mapFieldType(type: string): string {\r\n const typeMapping = {\r\n 'InputAutocomplete': 'string',\r\n 'InputInteger': 'number',\r\n 'InputTextArea': 'string',\r\n 'InputDateTimePicker': 'datetime',\r\n 'InputDecimal': 'number',\r\n 'InputClassification': 'classification',\r\n 'InputCheckbox': 'boolean',\r\n 'InputTextTranslation': 'string',\r\n 'InputMultiSelect': 'multiselect',\r\n 'thesaurus': 'thesaurus',\r\n 'position': 'position',\r\n 'text': 'string',\r\n 'textarea': 'string',\r\n 'number': 'number',\r\n 'date': 'date',\r\n 'datetime': 'datetime',\r\n 'select': 'select',\r\n 'multiselect': 'multiselect',\r\n 'checkbox': 'checkbox'\r\n };\r\n \r\n return typeMapping[type] || 'string';\r\n }\r\n\r\n // Utility methods exposed as public API\r\n @Method() public async convertXmlToJson(xmlForm: string): Promise<FormSchemaFieldsOnly> {\r\n return SchemaConverter.convertXmlToJson(xmlForm, this.classificationRootUrl, this.language);\r\n }\r\n\r\n @Method() public async convertJsonToXml(jsonForm: FormSchemaFieldsOnlyExtended): Promise<string> {\r\n return SchemaConverter.convertJsonToXml(jsonForm);\r\n }\r\n\r\n // Utility methods exposed as public API\r\n @Method() public async convertXmlToJsonLegacy(xmlForm: string): Promise<FormSchema> {\r\n return SchemaConverter.convertXmlToJsonLegacy(xmlForm);\r\n }\r\n\r\n @Method() public async convertJsonToXmlLegacy(jsonForm: FormSchema): Promise<string> {\r\n return SchemaConverter.convertJsonToXmlLegacy(jsonForm);\r\n }\r\n\r\n private renderUploadButton() {\r\n if (!this.parsedInputTypes.includes('ocr'))\r\n return;\r\n const ocrStyle = this.parsedTheme.buttons?.ocr || {};\r\n const size = ocrStyle.size || '50px';\r\n \r\n // Prepare OCR theme to pass to ocr-file-uploader component\r\n const ocrTheme = {\r\n button: {\r\n size: size,\r\n backgroundColor: ocrStyle.backgroundColor || '#10b981',\r\n hoverColor: ocrStyle.hoverColor || '#059669',\r\n textColor: ocrStyle.textColor || '#ffffff'\r\n }\r\n };\r\n \r\n const isDisabled = this.isProcessing || this.hasError || this.isRecording;\r\n \r\n return(\r\n <div style={{ width: size, height: size, flexShrink: '0', opacity: isDisabled ? '0.6' : '1', pointerEvents: isDisabled ? 'none' : 'auto' }}>\r\n <ocr-file-uploader\r\n batch={false}\r\n json-schema={this.convertSchemaToOcrFormat(this.parsedSchema)}\r\n callback={(data) => {this.processJsonForm(data);}}\r\n theme={JSON.stringify(ocrTheme)}\r\n style={{ width: '100%', height: '100%' }}\r\n >\r\n </ocr-file-uploader>\r\n </div>\r\n );\r\n }\r\n\r\n private convertSchemaToOcrFormat(schema: any): string {\r\n const ocrSchema = {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {\r\n meta: {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {\r\n page: { type: \"integer\" },\r\n confiance_global: { type: \"number\" }\r\n },\r\n required: [\"page\", \"confiance_global\"]\r\n },\r\n content: {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {},\r\n required: []\r\n }\r\n },\r\n required: [\"meta\", \"content\"]\r\n };\r\n\r\n if (schema?.Children) {\r\n schema.Children.forEach((child: any) => {\r\n if (child.System_Name && child.Type) {\r\n const fieldLabel = child.Settings?.Label || child.System_Name;\r\n const fieldType = this.mapOcrFieldType(child.Type);\r\n ocrSchema.properties.content.properties[fieldLabel] = {\r\n anyOf: [{ type: fieldType }, { type: \"null\" }]\r\n };\r\n }\r\n });\r\n }\r\n\r\n return JSON.stringify(ocrSchema);\r\n }\r\n\r\n private mapOcrFieldType(type: string): string {\r\n const typeMapping = {\r\n 'InputInteger': 'number',\r\n 'InputDecimal': 'number',\r\n 'InputDateTimePicker': 'string',\r\n 'InputCheckbox': 'boolean'\r\n };\r\n return typeMapping[type] || 'string';\r\n }\r\n\r\n private fileInputAudioRecord!: HTMLInputElement;\r\n\r\n private triggerAudioRecordUpload = () => {\r\n this.fileInputAudioRecord.click();\r\n };\r\n\r\n private handleAudioRecordChange = async (event: Event) => {\r\n const input = event.target as HTMLInputElement;\r\n if (!input.files || input.files.length === 0) return;\r\n if (this.isProcessing || this.isRecording) {\r\n input.value = '';\r\n return;\r\n }\r\n\r\n const file = input.files[0];\r\n const isEn = this.language === 'en';\r\n\r\n // Validate file type\r\n const validAudioTypes = /^audio\\//;\r\n const validAudioExtensions = /\\.(mp3|wav|webm|m4a|ogg|flac|aac|opus)$/i;\r\n if (!validAudioTypes.test(file.type) && !validAudioExtensions.test(file.name)) {\r\n this.hasTransientError = true;\r\n this.statusMessage = isEn\r\n ? `Invalid file type: \"${file.name}\". Please select an audio file.`\r\n : `Type de fichier invalide : \"${file.name}\". Veuillez sélectionner un fichier audio.`;\r\n input.value = '';\r\n return;\r\n }\r\n\r\n // Reset the input so the same file can be re-selected after an error\r\n input.value = '';\r\n await this.processAudioContent(file);\r\n };\r\n\r\n private renderUploadRecordButton() {\r\n if (!this.parsedInputTypes.includes('audio'))\r\n return;\r\n \r\n const audioStyle = this.parsedTheme.buttons?.audio || {};\r\n const size = audioStyle.size || '50px';\r\n const isDisabled = this.isProcessing || this.hasError || this.isRecording;\r\n const buttonStyle = {\r\n stroke: audioStyle.backgroundColor || '#3b82f6',\r\n fill: audioStyle.backgroundColor || '#3b82f6',\r\n width: size,\r\n height: size,\r\n opacity: isDisabled ? '0.6' : '1'\r\n };\r\n \r\n return (\r\n <div class=\"upload-record-container\" onClick={isDisabled ? null : this.triggerAudioRecordUpload} style={{ width: size, height: size, cursor: isDisabled ? 'not-allowed' : 'pointer' }}>\r\n <input\r\n type=\"file\"\r\n ref={el => (this.fileInputAudioRecord = el!)}\r\n onChange={this.handleAudioRecordChange}\r\n style={{ display: 'none' }}\r\n />\r\n <div class='upload-record-button'>\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={buttonStyle}>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 2.75C6.89137 2.75 2.75 6.89137 2.75 12C2.75 17.1086 6.89137 21.25 12 21.25C12.6345 21.25 13.2534 21.1862 13.8508 21.065C14.2567 20.9826 14.6526 21.2448 14.735 21.6508C14.8174 22.0567 14.5551 22.4526 14.1492 22.535C13.4541 22.6761 12.7353 22.75 12 22.75C6.06294 22.75 1.25 17.9371 1.25 12C1.25 6.06294 6.06294 1.25 12 1.25C17.9371 1.25 22.75 6.06294 22.75 12C22.75 12.7353 22.6761 13.4541 22.535 14.1492C22.4526 14.5551 22.0567 14.8174 21.6508 14.735C21.2448 14.6526 20.9826 14.2567 21.065 13.8508C21.1862 13.2534 21.25 12.6345 21.25 12C21.25 6.89137 17.1086 2.75 12 2.75ZM12.7676 8.52584C12.7661 8.53409 12.7604 8.56729 12.7564 8.64336C12.7502 8.76101 12.75 8.91982 12.75 9.17082C12.75 9.27795 12.7501 9.33904 12.7518 9.38529C12.7528 9.41425 12.7542 9.42649 12.7546 9.42955C12.7662 9.48945 12.7993 9.54303 12.8477 9.58021C12.8502 9.58194 12.8606 9.58864 12.886 9.60252C12.9266 9.62468 12.9812 9.65209 13.0771 9.7L14.3938 10.3584C14.6183 10.4706 14.7604 10.5414 14.8684 10.5885C14.9382 10.6189 14.9705 10.6287 14.9785 10.631C15.0885 10.6405 15.1917 10.5767 15.2324 10.4742C15.2339 10.4659 15.2396 10.4327 15.2436 10.3566C15.2498 10.239 15.25 10.0802 15.25 9.82918C15.25 9.72205 15.2499 9.66096 15.2482 9.61471C15.2472 9.58575 15.2458 9.57351 15.2454 9.57045C15.2338 9.51055 15.2007 9.45697 15.1523 9.41979C15.1498 9.41805 15.1394 9.41136 15.114 9.39748C15.0734 9.37533 15.0188 9.34791 14.9229 9.3L13.6062 8.64164C13.3817 8.52939 13.2396 8.45859 13.1316 8.41151C13.0617 8.38107 13.0295 8.37131 13.0215 8.36896C12.9115 8.35945 12.8083 8.42327 12.7676 8.52584ZM12.75 11.2135L13.7396 11.7083C13.9425 11.8098 14.1204 11.8987 14.269 11.9635C14.4199 12.0293 14.5988 12.097 14.7972 12.1202C15.6037 12.2142 16.3689 11.7413 16.6454 10.978C16.7134 10.7901 16.7328 10.5998 16.7415 10.4355C16.75 10.2735 16.75 10.0747 16.75 9.8479V9.82918C16.75 9.81565 16.75 9.80205 16.75 9.78837C16.7503 9.62647 16.7505 9.45474 16.7188 9.28904C16.638 8.86674 16.4045 8.48898 16.0629 8.22783C15.9289 8.12535 15.7752 8.04877 15.6303 7.97658C15.618 7.97048 15.6059 7.96441 15.5938 7.95836L14.2603 7.29164C14.0575 7.19022 13.8796 7.10128 13.731 7.03647C13.5801 6.97071 13.4012 6.90297 13.2028 6.87982C12.3963 6.78575 11.6311 7.25868 11.3546 8.02203C11.2866 8.20986 11.2672 8.40019 11.2585 8.56454C11.2519 8.68919 11.2504 8.83571 11.2501 9L11.25 9.11944C11.25 9.13026 11.25 9.14115 11.25 9.1521V9.17082C11.25 9.18435 11.25 9.19795 11.25 9.21163C11.2499 9.23918 11.2499 9.26701 11.25 9.29505V12.5499C10.875 12.3581 10.4501 12.25 10 12.25C8.48122 12.25 7.25 13.4812 7.25 15C7.25 16.5188 8.48122 17.75 10 17.75C11.5188 17.75 12.75 16.5188 12.75 15V11.2135ZM11.25 15C11.25 14.3096 10.6904 13.75 10 13.75C9.30964 13.75 8.75 14.3096 8.75 15C8.75 15.6904 9.30964 16.25 10 16.25C10.6904 16.25 11.25 15.6904 11.25 15ZM17.4697 14.4697C17.7626 14.1768 18.2374 14.1768 18.5303 14.4697L21.0303 16.9697C21.3232 17.2626 21.3232 17.7374 21.0303 18.0303C20.7374 18.3232 20.2626 18.3232 19.9697 18.0303L18.75 16.8107V22C18.75 22.4142 18.4142 22.75 18 22.75C17.5858 22.75 17.25 22.4142 17.25 22V16.8107L16.0303 18.0303C15.7374 18.3232 15.2626 18.3232 14.9697 18.0303C14.6768 17.7374 14.6768 17.2626 14.9697 16.9697L17.4697 14.4697Z\" />\r\n </svg>\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n private renderRecordButton() {\r\n if (!this.parsedInputTypes.includes('voice'))\r\n return;\r\n\r\n const buttonClass = [\r\n 'record-button',\r\n this.isRecording && 'recording',\r\n this.isProcessing && 'processing'\r\n ].filter(Boolean).join(' ');\r\n\r\n const isDisabled = this.isProcessing || this.hasError;\r\n \r\n const voiceStyle = this.parsedTheme.buttons?.voice || {};\r\n const size = voiceStyle.size || '50px';\r\n const buttonStyle = {\r\n background: voiceStyle.backgroundColor || '#ee4444',\r\n width: size,\r\n height: size\r\n };\r\n\r\n return (\r\n <button \r\n class={buttonClass}\r\n style={buttonStyle}\r\n onClick={() => this.handleRecordClick()}\r\n disabled={isDisabled}\r\n aria-label={this.isRecording ? 'Stop recording' : 'Start recording'}\r\n >\r\n {this.isProcessing ? (\r\n <svg class=\"record-icon\" viewBox=\"0 0 24 24\">\r\n <circle cx=\"12\" cy=\"12\" r=\"3\">\r\n <animate attributeName=\"r\" values=\"3;6;3\" dur=\"1s\" repeatCount=\"indefinite\" />\r\n <animate attributeName=\"opacity\" values=\"1;0.3;1\" dur=\"1s\" repeatCount=\"indefinite\" />\r\n </circle>\r\n </svg>\r\n ) : this.isRecording ? (\r\n <svg class=\"record-icon\" viewBox=\"0 0 24 24\">\r\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\r\n </svg>\r\n ) : (\r\n <svg class=\"record-icon\" viewBox=\"0 0 24 24\">\r\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\r\n </svg>\r\n )}\r\n </button>\r\n );\r\n }\r\n\r\n private renderLoadingSkeleton() {\r\n const types = this.parsedInputTypes.length > 0 ? this.parsedInputTypes : ['voice'];\r\n const containerStyle = this.getContainerStyle();\r\n const buttons = (this.parsedTheme?.buttons || {}) as any;\r\n const getSize = (type: string) => buttons[type]?.size || buttons.voice?.size || '50px';\r\n\r\n return (\r\n <div>\r\n <div\r\n class={\"voice-recorder-container\" + (this.debug || this.renderForm ? \"-debug\" : \"\")}\r\n style={containerStyle}\r\n >\r\n <div class=\"row-audio-area\">\r\n {types.map(type => {\r\n const size = getSize(type);\r\n return <div class=\"skeleton-circle\" style={{ width: size, height: size }} />;\r\n })}\r\n </div>\r\n {this.displayStatus && <div class=\"skeleton-status\" />}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private renderStatusMessage() {\r\n const hasAnyError = this.hasError || this.hasTransientError;\r\n const statusClass = [\r\n 'status-text',\r\n hasAnyError && 'error',\r\n this.filledData && !hasAnyError && 'success'\r\n ].filter(Boolean).join(' ');\r\n const statusStyle = this.getStatusStyle();\r\n\r\n return <div class={statusClass} style={statusStyle}>{this.statusMessage}</div>;\r\n }\r\n\r\n private renderFormPreview() {\r\n if (!this.parsedSchema) return null;\r\n\r\n const isPreview = this.isReadonlyMode && !this.filledData;\r\n const title = isPreview ? 'Form Preview (Voice input to fill)' : 'Voice-Filled Form:';\r\n \r\n return (\r\n <div class=\"form-preview\">\r\n <div class=\"form-preview-title\">{title}</div>\r\n <form class=\"voice-filled-form\">\r\n {this.renderFormFields()}\r\n </form>\r\n </div>\r\n );\r\n }\r\n\r\n private renderFormFields() {\r\n // console.log(\"renderFormFields\", this.parsedSchema);\r\n if (!this.parsedSchema) return null;\r\n \r\n const largeFieldTypes = ['select', 'multiselect', 'classification', 'thesaurus', 'position'];\r\n \r\n switch(this.context){\r\n case \"ecoteka\":\r\n // console.log(\"TODO renderFormFields\", this.parsedSchema);\r\n case \"ng\":\r\n return this.parsedSchema.Children.map((child: any) => {\r\n if (!child.System_Name || !child.Type) return null;\r\n \r\n const fieldName = child.System_Name;\r\n const fieldType = this.mapFieldType(child.Type);\r\n const fieldLabel = child.Settings?.Label || child.System_Name;\r\n const isRequired = child.Required || false;\r\n const fieldValue = child.Settings?.Default_Value;\r\n const isLargeField = largeFieldTypes.includes(fieldType) || (child.Children && child.Children.length > 5);\r\n \r\n return (\r\n <div class={isLargeField ? \"form-group full-width\" : \"form-group\"} key={fieldName}>\r\n <label htmlFor={fieldName} class=\"form-label\">\r\n {fieldLabel}\r\n {isRequired && <span class=\"required\">*</span>}\r\n </label>\r\n {this.renderFormField(fieldName, {\r\n type: fieldType,\r\n title: fieldLabel,\r\n required: isRequired,\r\n options: child.Children?.map((option: any) => \r\n option.System_Name || option.Label || option.toString()\r\n )\r\n }, fieldValue)}\r\n </div>\r\n );\r\n }).filter(Boolean);\r\n case \"ecoll-veto\":\r\n // NOTE STEP 2\r\n // console.log(\"TODO renderFormFields\", this.parsedSchema);\r\n const mergedItemsSchema = (this.parsedSchema[0].items).concat(this.parsedSchema[1].items);\r\n return Object.entries(mergedItemsSchema).map(([key, field]: [string, any]) => {\r\n \r\n const fieldName = field.name;\r\n field.type = this.mapFieldType(field.type);\r\n const fieldLabel = field.label || fieldName;\r\n const isRequired = field.required || false;\r\n const fieldValue = this.parsedSchema[2][fieldName];\r\n\r\n // if (['position', 'thesaurus'].includes(field.type)) {\r\n // try {\r\n // const response = await fetch(`${this.classificationRootUrl}/ng/api/v1/classification/getList/${fieldType.toLowerCase() == 'position' ? \"Position\" : \"Thesaurus\"}/?StartNodeID=${field.config.options.options.startNode}`);\r\n // if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n // const data = await response.json();\r\n // if (Array.isArray(data)) {\r\n // const options = data.map(item => ({\r\n // value: item.ID,\r\n // label: item.System_Name\r\n // }));\r\n // if (options.length > 0) {\r\n // field.pickerOptions = options;\r\n // // TODO on degage les quotes simples temporairement, a corriger\r\n // field.options = options.map(option => option.label.replace(\"'\", \"\"));\r\n // }\r\n // } else {\r\n // console.error(\"Unexpected API response format:\", data);\r\n // }\r\n // } catch (error) {\r\n // console.error(\"Error fetching classification data:\", error);\r\n // }\r\n // }\r\n\r\n return (\r\n <div class=\"form-group\" key={fieldName}>\r\n <label htmlFor={fieldName} class=\"form-label\">\r\n { fieldLabel }\r\n {isRequired && <span class=\"required\">*</span>}\r\n </label>\r\n {this.renderFormField(fieldName, field, (this.filledData?.[fieldName] ?? fieldValue))}\r\n </div>\r\n );\r\n });\r\n case \"track\":\r\n default:\r\n return Object.entries(this.parsedSchema.fields).map(([fieldName, field]: [string, any]) => {\r\n if (field.type === 'header') {\r\n return (\r\n <div class=\"form-header\" key={fieldName}>\r\n {field.title || fieldName}\r\n </div>\r\n );\r\n }\r\n \r\n return (\r\n <div class=\"form-group\" key={fieldName}>\r\n <label htmlFor={fieldName} class=\"form-label\">\r\n {field.title || fieldName}\r\n {field.required && <span class=\"required\">*</span>}\r\n </label>\r\n {this.renderFormField(fieldName, field, (this.filledData?.[fieldName] ?? field.value))}\r\n </div>\r\n );\r\n });\r\n }\r\n }\r\n\r\n private renderFormField(fieldName: string, field: any, value: any) {\r\n const isReadonly = this.isReadonlyMode && !this.filledData;\r\n const commonProps = {\r\n id: fieldName,\r\n name: fieldName,\r\n class: 'form-input',\r\n required: field.required,\r\n disabled: isReadonly\r\n };\r\n\r\n switch (field.type) {\r\n case 'multiselect':\r\n if (isReadonly) {\r\n return (\r\n <div class=\"readonly-select\">\r\n <div class=\"select-placeholder\">Available options:</div>\r\n <ul class=\"select-options-list\">\r\n {field.options?.map(option => (\r\n <li class=\"select-option\">{option}</li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n }\r\n const selectedValues = Array.isArray(value) ? value : (value ? [value] : []);\r\n return (\r\n <div class=\"multiselect-container\">\r\n {field.options?.map(option => {\r\n const isChecked = selectedValues.some(v => \r\n v?.toString().toLowerCase() === option?.toString().toLowerCase()\r\n );\r\n return (\r\n <label class=\"multiselect-option\">\r\n <input \r\n type=\"checkbox\" \r\n name={fieldName}\r\n value={option}\r\n checked={isChecked}\r\n disabled={isReadonly}\r\n />\r\n <span class=\"multiselect-label\">{option}</span>\r\n </label>\r\n );\r\n })}\r\n </div>\r\n );\r\n \r\n case 'select':\r\n if (isReadonly) {\r\n // In readonly mode, show all options as a list instead of dropdown\r\n return (\r\n <div class=\"readonly-select\">\r\n <div class=\"select-placeholder\">Available options:</div>\r\n <ul class=\"select-options-list\">\r\n {field.options?.map(option => (\r\n <li class=\"select-option\">{option}</li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n }\r\n return (\r\n <select id={fieldName} name={fieldName} class=\"form-input\" required={field.required}>\r\n <option value=\"\">-- Select --</option>\r\n {field.options?.map(option => (\r\n <option value={option} selected={value === option}>\r\n {option}\r\n </option>\r\n ))}\r\n </select>\r\n );\r\n \r\n case 'boolean':\r\n return (\r\n <input \r\n {...commonProps}\r\n type=\"checkbox\" \r\n class=\"form-checkbox\"\r\n checked={value === true || value === 'true'}\r\n />\r\n );\r\n \r\n case 'number':\r\n return (\r\n <input \r\n {...commonProps}\r\n type=\"number\" \r\n min={field.min}\r\n max={field.max}\r\n step=\"any\"\r\n value={value || ''}\r\n />\r\n );\r\n \r\n case 'date':\r\n return (\r\n <input \r\n {...commonProps}\r\n type='date'\r\n value={value ? (([d, m, y]) => `${y}-${m}-${d}`)(value.split(\"/\")) : ''}\r\n />\r\n );\r\n\r\n case 'datetime':\r\n return (\r\n <input \r\n {...commonProps}\r\n type='datetime-local'\r\n value={value || ''}\r\n />\r\n );\r\n \r\n default: // string\r\n return (\r\n <input \r\n {...commonProps}\r\n type=\"text\" \r\n pattern={field.pattern}\r\n placeholder={field.description}\r\n value={value || ''}\r\n />\r\n );\r\n }\r\n }\r\n\r\n private renderDebugPanel() {\r\n if (!this.debug) return null;\r\n\r\n return (\r\n <div class=\"debug-panel\">\r\n <div class=\"debug-title\">Debug Information:</div>\r\n <div class=\"debug-content\">\r\n {JSON.stringify(this.debugInfo, null, 2)}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private getDefaultTheme() {\r\n return {\r\n texts: {\r\n idle: this.language === 'en' ? 'Select an input method' : 'Sélectionner une méthode de saisie',\r\n recording: this.language === 'en' ? 'Recording... Click to stop' : 'Enregistrement ... Cliquer pour stopper',\r\n processing: this.language === 'en' ? 'Processing...' : 'Traitement en cours...',\r\n transcribing: this.language === 'en' ? 'Transcribing speech...' : 'Transcription du texte...',\r\n filling: this.language === 'en' ? 'Filling form fields...' : 'Remplissage du formulaire...',\r\n completed: this.language === 'en' ? 'Form completed!' : 'Formulaire rempli !'\r\n },\r\n container: {\r\n width: 'auto',\r\n height: 'auto',\r\n backgroundColor: '#ffffff',\r\n borderColor: '#e2e8f0',\r\n borderRadius: '8px',\r\n padding: '20px',\r\n gap: '8px'\r\n },\r\n buttons: {\r\n voice: { backgroundColor: '#ee4444', textColor: '#ffffff', hoverColor: '#dd3333', size: '50px' },\r\n audio: { backgroundColor: '#3b82f6', textColor: '#ffffff', hoverColor: '#2563eb', size: '50px' },\r\n ocr: { backgroundColor: '#10b981', textColor: '#ffffff', hoverColor: '#059669', size: '50px' }\r\n },\r\n statusText: { color: '#1e293b', fontSize: '14px' }\r\n };\r\n }\r\n\r\n private getContainerStyle() {\r\n const c = this.parsedTheme?.container || {};\r\n return {\r\n width: c.width || 'auto',\r\n height: c.height || 'auto',\r\n backgroundColor: c.backgroundColor || '#ffffff',\r\n border: `1px solid ${c.borderColor || '#e2e8f0'}`,\r\n borderRadius: c.borderRadius || '8px',\r\n padding: c.padding || '20px',\r\n gap: c.gap || '8px'\r\n };\r\n }\r\n\r\n private getStatusStyle() {\r\n const s = this.parsedTheme?.statusText || {};\r\n return {\r\n color: s.color || '#1e293b',\r\n fontSize: s.fontSize || '14px'\r\n };\r\n }\r\n\r\n render() {\r\n if (this.isInitializing) {\r\n return this.renderLoadingSkeleton();\r\n }\r\n\r\n const containerStyle = this.getContainerStyle();\r\n \r\n return (\r\n <div>\r\n <div \r\n class={\"voice-recorder-container\" + (this.debug || this.renderForm ? \"-debug\" : \"\")}\r\n style={containerStyle}\r\n >\r\n <div class=\"row-audio-area\">\r\n {this.renderRecordButton()}\r\n {this.renderUploadRecordButton()}\r\n {this.renderUploadButton()}\r\n </div>\r\n {this.displayStatus ? this.renderStatusMessage() : \"\"}\r\n {this.renderForm ? this.renderFormPreview() : \"\"}\r\n {this.debug ? this.renderDebugPanel() : \"\"}\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"voice-input-module.js","sourceRoot":"","sources":["../../../src/components/voice-input-module/voice-input-module.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, Event, EventEmitter, State, h, Watch, Method } from '@stencil/core';\r\nimport { FormSchema, VoiceFormRecorderResult, FilledFormData, FormSchemaFieldsOnly, FormSchemaFieldsOnlyExtended } from '../../types/form-schema.types';\r\nimport { ServiceProviderConfig, TranscriptionProvider, CompletionProvider, TRANSCRIPTION_MODELS, COMPLETION_MODELS } from '../../types/service-providers.types';\r\nimport { AudioRecorderService } from '../../services/audio-recorder.service';\r\nimport { SpeechToTextServiceFactory } from '../../services/speech-to-text.service';\r\nimport { LLMServiceFactory } from '../../services/llm.service';\r\nimport { SchemaConverter } from '../../utils/schema-converter';\r\nimport { defineCustomElements } from 'ocr-file-uploader/loader';\r\n\r\n// Initialize OCR\r\ndefineCustomElements();\r\n\r\n@Component({\r\n tag: 'voice-input-module',\r\n styleUrl: 'voice-input-module.css',\r\n shadow: true,\r\n})\r\nexport class VoiceFormRecorder {\r\n @Prop() formJson: string = '{}';\r\n @Prop() serviceConfig: string = '{}';\r\n @Prop() apiKey: string;\r\n @Prop() apiProxyUrl: string = 'http://localhost:8492';\r\n @Prop() transcriptionModel: string = 'gpt-4o-transcribe';\r\n @Prop() completionModel: string = 'gpt-5-mini';\r\n @Prop() transcriptionProvider: TranscriptionProvider = 'openai';\r\n @Prop() completionProvider: CompletionProvider = 'openai';\r\n @Prop() context: 'track'|'ng'|'ecoll-veto'|'ecoteka' = undefined;\r\n @Prop() classificationRootUrl: string = 'http://localhost';\r\n @Prop() language: 'fr'|'en' = 'en';\r\n @Prop() inputTypes: string = '';\r\n @Prop() theme: string = '';\r\n \r\n private get parsedInputTypes(): ('voice' | 'ocr' | 'audio')[] {\r\n if (!this.inputTypes) return [];\r\n try {\r\n return JSON.parse(this.inputTypes.replace(/'/g, '\"'));\r\n } catch {\r\n return this.inputTypes.split(',').map(type => type.trim() as 'voice' | 'ocr' | 'audio');\r\n }\r\n }\r\n \r\n @Prop() debug: boolean = false;\r\n @Prop() renderForm: boolean = false;\r\n @Prop() displayStatus: boolean = false;\r\n \r\n @Event() formFilled: EventEmitter<VoiceFormRecorderResult>;\r\n @Event() recordingStateChanged: EventEmitter<{ isRecording: boolean; state: string }>;\r\n\r\n @State() isRecording: boolean = false;\r\n @State() isProcessing: boolean = false;\r\n @State() statusMessage: string;\r\n @State() hasError: boolean = false;\r\n @State() hasTransientError: boolean = false;\r\n @State() transcription: string = '';\r\n @State() filledData: FilledFormData | null = null;\r\n @State() confidenceScores: Record<string, number> | null = null;\r\n @State() debugInfo: any = {};\r\n @State() isReadonlyMode: boolean = true; // Start in readonly preview mode\r\n @State() isInitializing: boolean = true;\r\n\r\n private audioRecorder: AudioRecorderService;\r\n private speechToTextService: any;\r\n private llmService: any;\r\n private parsedSchema: any; // Support both simple FormSchema and complex nested schema\r\n private parsedConfig: ServiceProviderConfig;\r\n private parsedTheme: any;\r\n\r\n constructor() {\r\n this.audioRecorder = new AudioRecorderService();\r\n }\r\n\r\n componentWillLoad() {\r\n // Parse theme only so the skeleton can be styled correctly on first render.\r\n // Full initialization runs in componentDidLoad() to give the skeleton time to paint.\r\n try {\r\n this.parsedTheme = this.theme ? JSON.parse(this.theme) : this.getDefaultTheme();\r\n } catch {\r\n this.parsedTheme = this.getDefaultTheme();\r\n }\r\n }\r\n\r\n componentDidLoad() {\r\n this.initializeServices();\r\n this.isInitializing = false;\r\n }\r\n\r\n @Watch('formJson')\r\n @Watch('serviceConfig')\r\n @Watch('theme')\r\n @Watch('transcriptionProvider')\r\n @Watch('completionProvider')\r\n @Watch('transcriptionModel')\r\n @Watch('completionModel')\r\n initializeServices() {\r\n // Parse theme\r\n try {\r\n this.parsedTheme = this.theme ? JSON.parse(this.theme) : this.getDefaultTheme();\r\n } catch {\r\n this.parsedTheme = this.getDefaultTheme();\r\n }\r\n try {\r\n if (!this.context){\r\n this.hasError = true;\r\n const errorMessage = (this.language == 'en' ? `Initialization error: context is '${this.context}'` : `Erreur d'initialisation: le contexte est '${this.context}'`);\r\n this.statusMessage = errorMessage;\r\n this.updateDebugInfo(errorMessage, { error: errorMessage });\r\n }\r\n else{\r\n // Validate transcription provider/model\r\n const allowedTranscriptionModels = TRANSCRIPTION_MODELS[this.transcriptionProvider];\r\n if (!allowedTranscriptionModels) {\r\n throw new Error(`Unsupported transcription provider: '${this.transcriptionProvider}'. Allowed: openai, mistral`);\r\n }\r\n if (!allowedTranscriptionModels.includes(this.transcriptionModel)) {\r\n throw new Error(`Model '${this.transcriptionModel}' is not allowed for transcription provider '${this.transcriptionProvider}'. Allowed: ${allowedTranscriptionModels.join(', ')}`);\r\n }\r\n\r\n // Validate completion provider/model\r\n const allowedCompletionModels = COMPLETION_MODELS[this.completionProvider];\r\n if (!allowedCompletionModels) {\r\n throw new Error(`Unsupported completion provider: '${this.completionProvider}'. Allowed: openai, anthropic, mistral`);\r\n }\r\n if (!allowedCompletionModels.includes(this.completionModel)) {\r\n throw new Error(`Model '${this.completionModel}' is not allowed for completion provider '${this.completionProvider}'. Allowed: ${allowedCompletionModels.join(', ')}`);\r\n }\r\n\r\n // Parse form schema\r\n this.parsedSchema = JSON.parse(this.formJson || '{}');\r\n \r\n // Parse service configuration\r\n this.parsedConfig = JSON.parse(this.serviceConfig || '{}');\r\n \r\n // Add API key to config if provided via prop\r\n if (this.apiKey) {\r\n this.parsedConfig = {\r\n ...this.parsedConfig,\r\n speechToText: { ...this.parsedConfig.speechToText, provider: this.transcriptionProvider, apiKey: this.apiKey, model: this.transcriptionModel },\r\n llm: { ...this.parsedConfig.llm, provider: this.completionProvider, apiKey: this.apiKey, model: this.completionModel }\r\n };\r\n } else {\r\n // Use proxy API if no API key provided\r\n this.parsedConfig = {\r\n ...this.parsedConfig,\r\n speechToText: { ...this.parsedConfig.speechToText, provider: this.transcriptionProvider, useProxy: true, proxyUrl: this.apiProxyUrl, model: this.transcriptionModel },\r\n llm: { ...this.parsedConfig.llm, provider: this.completionProvider, useProxy: true, proxyUrl: this.apiProxyUrl, model: this.completionModel }\r\n };\r\n }\r\n \r\n // Initialize services\r\n this.speechToTextService = SpeechToTextServiceFactory.create(this.parsedConfig);\r\n this.llmService = LLMServiceFactory.create(this.parsedConfig);\r\n \r\n this.updateDebugInfo('Initialized', {\r\n schema: this.parsedSchema,\r\n config: this.parsedConfig\r\n });\r\n \r\n this.hasError = false;\r\n this.hasTransientError = false;\r\n this.statusMessage = this.parsedTheme.texts?.idle || (this.language == 'en' ? 'Select an input method' : 'Sélectionner une méthode de saisie');\r\n if (this.parsedInputTypes.length === 0){\r\n this.inputTypes = 'voice';\r\n }\r\n }\r\n } catch (error) {\r\n this.hasError = true;\r\n this.statusMessage = (this.language == 'en' ? `Initialization error: ${error.message}` : `Erreur d'initialisation: ${error.message}`);\r\n this.updateDebugInfo('Initialization Error', { error: error.message });\r\n }\r\n }\r\n\r\n private updateDebugInfo(action: string, data: any) {\r\n if (this.debug) {\r\n this.debugInfo = {\r\n ...this.debugInfo,\r\n [action]: {\r\n timestamp: new Date().toISOString(),\r\n data\r\n }\r\n };\r\n }\r\n }\r\n\r\n private getMicErrorMessage(error: Error): string {\r\n const isEn = this.language === 'en';\r\n const errorName = (error as any).name || '';\r\n if (errorName === 'NotAllowedError' || errorName === 'PermissionDeniedError') {\r\n return isEn\r\n ? 'Microphone access denied. Allow microphone access in your browser settings and try again.'\r\n : \"Accès au microphone refusé. Autorisez l'accès au microphone dans les paramètres du navigateur et réessayez.\";\r\n }\r\n if (errorName === 'NotFoundError' || errorName === 'DevicesNotFoundError') {\r\n return isEn\r\n ? 'No microphone found. Please connect a microphone and try again.'\r\n : 'Aucun microphone trouvé. Connectez un microphone et réessayez.';\r\n }\r\n if (errorName === 'NotReadableError' || errorName === 'TrackStartError') {\r\n return isEn\r\n ? 'Microphone is busy or unavailable. Close other apps using the microphone and try again.'\r\n : 'Le microphone est occupé ou indisponible. Fermez les autres applications utilisant le microphone et réessayez.';\r\n }\r\n if (errorName === 'AbortError') {\r\n return isEn\r\n ? 'Microphone access was interrupted. Please try again.'\r\n : \"L'accès au microphone a été interrompu. Veuillez réessayer.\";\r\n }\r\n if (errorName === 'OverconstrainedError') {\r\n return isEn\r\n ? 'Microphone does not support the required audio settings.'\r\n : 'Le microphone ne supporte pas les paramètres audio requis.';\r\n }\r\n if (error.message?.includes('HTTPS') || error.message?.includes('not supported')) {\r\n return isEn\r\n ? 'Microphone access requires HTTPS or localhost.'\r\n : \"L'accès au microphone nécessite HTTPS ou localhost.\";\r\n }\r\n return isEn ? `Microphone error: ${error.message}` : `Erreur microphone : ${error.message}`;\r\n }\r\n\r\n private getReadableErrorMessage(error: Error, phase: string): string {\r\n const isEn = this.language === 'en';\r\n const msg = error.message || '';\r\n if (/401|unauthorized|invalid.{0,20}(api )?key|authentication failed/i.test(msg)) {\r\n return isEn\r\n ? 'Authentication failed: invalid API key. Check your configuration.'\r\n : \"Échec d'authentification : clé API invalide. Vérifiez votre configuration.\";\r\n }\r\n if (/403|forbidden/i.test(msg)) {\r\n return isEn\r\n ? 'Access denied: check your API permissions.'\r\n : 'Accès refusé : vérifiez vos permissions API.';\r\n }\r\n if (/429|rate.{0,10}limit|too many requests/i.test(msg)) {\r\n return isEn\r\n ? 'Rate limit exceeded. Please wait a moment and try again.'\r\n : 'Limite de requêtes dépassée. Veuillez attendre quelques secondes et réessayer.';\r\n }\r\n if (/404|not found/i.test(msg)) {\r\n return isEn\r\n ? 'API endpoint not found. Check your proxy URL configuration.'\r\n : \"Endpoint API introuvable. Vérifiez l'URL de votre proxy.\";\r\n }\r\n if (/5\\d\\d|server error|internal server|bad gateway|service unavailable/i.test(msg)) {\r\n return isEn\r\n ? 'Server error. Please try again in a moment.'\r\n : 'Erreur serveur. Veuillez réessayer dans un instant.';\r\n }\r\n if (/network|failed to fetch|err_connection|connection refused/i.test(msg)) {\r\n return isEn\r\n ? 'Network error: check your connection and proxy server.'\r\n : 'Erreur réseau : vérifiez votre connexion et le serveur proxy.';\r\n }\r\n if (/json|parse error|unexpected token|invalid response/i.test(msg)) {\r\n return isEn\r\n ? 'Unexpected response from AI service. Please try again.'\r\n : 'Réponse inattendue du service IA. Veuillez réessayer.';\r\n }\r\n if (phase === 'transcription') {\r\n return isEn ? `Transcription failed: ${msg}` : `Échec de la transcription : ${msg}`;\r\n }\r\n if (phase === 'llm') {\r\n return isEn ? `Form filling failed: ${msg}` : `Échec du remplissage du formulaire : ${msg}`;\r\n }\r\n if (phase === 'ocr') {\r\n return isEn ? `OCR processing failed: ${msg}` : `Échec du traitement OCR : ${msg}`;\r\n }\r\n return isEn ? `Processing error: ${msg}` : `Erreur de traitement : ${msg}`;\r\n }\r\n\r\n private async handleRecordClick() {\r\n if (this.isProcessing) return;\r\n\r\n if (this.isRecording) {\r\n await this.stopRecordingAndProcess();\r\n } else {\r\n await this.startRecording();\r\n }\r\n }\r\n\r\n private async startRecording() {\r\n try {\r\n this.hasTransientError = false;\r\n this.statusMessage = (this.language == 'en' ? 'Starting recording...' : `Enregistrement ...`);\r\n this.updateDebugInfo('Start Recording Attempt', {});\r\n\r\n await this.audioRecorder.startRecording();\r\n \r\n this.isRecording = true;\r\n this.statusMessage = this.parsedTheme.texts?.recording || (this.language == 'en' ? 'Recording... Click to stop' : 'Enregistrement ... Cliquer pour stopper');\r\n this.updateDebugInfo('Recording Started', {});\r\n \r\n this.recordingStateChanged.emit({ \r\n isRecording: true, \r\n state: 'recording' \r\n });\r\n } catch (error) {\r\n this.hasTransientError = true;\r\n this.statusMessage = this.getMicErrorMessage(error);\r\n this.updateDebugInfo('Recording Error', { error: error.message });\r\n \r\n this.formFilled.emit({\r\n success: false,\r\n error: error.message\r\n });\r\n }\r\n }\r\n\r\n private async processJsonForm(ocrData: any) {\r\n if (this.isProcessing || this.isRecording) return;\r\n this.isProcessing = true;\r\n this.hasTransientError = false;\r\n this.confidenceScores = null;\r\n this.statusMessage = this.parsedTheme.texts?.processing || (this.language == 'en' ? 'Processing document...' : 'Traitement du document ...');\r\n\r\n try {\r\n const extractedData = ocrData?.content || ocrData;\r\n const jsonForm = JSON.stringify(extractedData);\r\n\r\n if (!extractedData) {\r\n throw Object.assign(new Error('OCR returned no data'), { phase: 'ocr' });\r\n }\r\n\r\n this.statusMessage = this.parsedTheme.texts?.filling || (this.language == 'en' ? 'Filling form fields...' : 'Remplissage du formulaire ...');\r\n const trimmedSchema = await this.trimSchemaForAI(this.parsedSchema);\r\n let filledSchema: any;\r\n try {\r\n filledSchema = await this.llmService.fillFormFromJson(jsonForm, trimmedSchema);\r\n } catch (llmError) {\r\n throw Object.assign(new Error(llmError.message), { phase: 'llm' });\r\n }\r\n\r\n this.filledData = this.extractFilledData(filledSchema);\r\n this.confidenceScores = this.extractConfidenceScores(filledSchema);\r\n this.updateDebugInfo('Form Filled', { filledSchema, extractedData: this.filledData, confidence: this.confidenceScores });\r\n this.parsedSchema = this.filledData;\r\n\r\n this.statusMessage = this.parsedTheme.texts?.completed || (this.language == 'en' ? 'Form completed!' : 'Formulaire rempli !');\r\n this.formFilled.emit({ success: true, data: this.filledData, jsonForm, confidence: this.confidenceScores });\r\n\r\n } catch (error) {\r\n console.error('OCR processing error:', error);\r\n this.hasTransientError = true;\r\n this.statusMessage = this.getReadableErrorMessage(error, (error as any).phase || 'llm');\r\n this.updateDebugInfo('OCR Processing Error', { phase: (error as any).phase, error: error.message });\r\n this.formFilled.emit({ success: false, error: error.message, jsonForm: JSON.stringify(ocrData) });\r\n } finally {\r\n this.isProcessing = false;\r\n }\r\n }\r\n\r\n private async processAudioContent(audioFile: File) {\r\n if (this.isProcessing || this.isRecording) return;\r\n this.isProcessing = true;\r\n this.hasTransientError = false;\r\n this.confidenceScores = null;\r\n this.updateDebugInfo('Audio Captured', { size: audioFile.size, type: audioFile.type });\r\n\r\n try {\r\n // Validate audio file before sending to API\r\n const MAX_AUDIO_SIZE = 25 * 1024 * 1024; // 25MB (API limit)\r\n if (audioFile.size <= 44) { // WAV header alone is 44 bytes; effectively empty\r\n this.hasTransientError = true;\r\n this.statusMessage = this.language == 'en'\r\n ? 'Recording is empty or too short. Please try again.'\r\n : \"L'enregistrement est vide ou trop court. Veuillez réessayer.\";\r\n this.formFilled.emit({ success: false, error: 'Empty or too short audio' });\r\n return;\r\n }\r\n if (audioFile.size > MAX_AUDIO_SIZE) {\r\n this.hasTransientError = true;\r\n this.statusMessage = this.language == 'en'\r\n ? `File too large (${Math.round(audioFile.size / 1024 / 1024)}MB). Maximum is 25MB.`\r\n : `Fichier trop volumineux (${Math.round(audioFile.size / 1024 / 1024)}Mo). Maximum : 25Mo.`;\r\n this.formFilled.emit({ success: false, error: 'Audio file too large' });\r\n return;\r\n }\r\n\r\n let transcription: string;\r\n try {\r\n this.statusMessage = this.parsedTheme.texts?.transcribing || (this.language == 'en' ? 'Transcribing speech...' : 'Transcription du texte ...');\r\n transcription = await this.speechToTextService.transcribe(audioFile, this.language);\r\n this.transcription = transcription;\r\n this.updateDebugInfo('Transcription Complete', { transcription });\r\n } catch (transcriptionError) {\r\n throw Object.assign(new Error(transcriptionError.message), { phase: 'transcription' });\r\n }\r\n\r\n if (!transcription.trim()) {\r\n this.hasTransientError = true;\r\n this.statusMessage = this.language == 'en'\r\n ? 'No speech detected. Please speak clearly and try again.'\r\n : 'Aucune parole détectée. Parlez clairement et réessayez.';\r\n this.formFilled.emit({ success: false, error: 'No speech detected', transcription: '' });\r\n return;\r\n }\r\n\r\n let filledSchema: any;\r\n try {\r\n this.statusMessage = this.parsedTheme.texts?.filling || (this.language == 'en' ? 'Filling form fields...' : 'Remplissage du formulaire ...');\r\n const trimmedSchema = await this.trimSchemaForAI(this.parsedSchema);\r\n filledSchema = await this.llmService.fillFormFromTranscription(transcription, trimmedSchema);\r\n } catch (llmError) {\r\n throw Object.assign(new Error(llmError.message), { phase: 'llm' });\r\n }\r\n\r\n this.filledData = this.extractFilledData(filledSchema);\r\n this.confidenceScores = this.extractConfidenceScores(filledSchema);\r\n this.updateDebugInfo('Form Filled', { filledSchema, extractedData: this.filledData, confidence: this.confidenceScores });\r\n this.parsedSchema = this.filledData;\r\n\r\n this.statusMessage = this.parsedTheme.texts?.completed || (this.language == 'en' ? 'Form completed!' : 'Formulaire rempli !');\r\n this.formFilled.emit({ success: true, data: this.filledData, transcription, confidence: this.confidenceScores });\r\n\r\n } catch (error) {\r\n console.error('Audio processing error:', error);\r\n this.hasTransientError = true;\r\n this.statusMessage = this.getReadableErrorMessage(error, (error as any).phase || 'audio-upload');\r\n this.updateDebugInfo('Audio Processing Error', { phase: (error as any).phase, error: error.message });\r\n this.formFilled.emit({ success: false, error: error.message, transcription: this.transcription });\r\n } finally {\r\n this.isProcessing = false;\r\n }\r\n }\r\n\r\n private async stopRecordingAndProcess() {\r\n this.isRecording = false;\r\n this.isProcessing = true;\r\n this.hasTransientError = false;\r\n this.statusMessage = this.parsedTheme.texts?.processing || (this.language == 'en' ? 'Processing audio...' : `Traitement de l'audio ...`);\r\n this.updateDebugInfo('Stop Recording', {});\r\n\r\n this.recordingStateChanged.emit({ isRecording: false, state: 'processing' });\r\n\r\n try {\r\n const audioBlob = await this.audioRecorder.stopRecording();\r\n const audioContent = new File([audioBlob], 'audio.wav', { type: 'audio/wav' });\r\n // Reset isProcessing so the guard inside processAudioContent doesn't block this internal call\r\n this.isProcessing = false;\r\n await this.processAudioContent(audioContent);\r\n } catch (error) {\r\n // Only reached if audioRecorder.stopRecording() itself throws\r\n this.hasTransientError = true;\r\n this.isProcessing = false;\r\n this.statusMessage = (this.language == 'en'\r\n ? `Failed to stop recording: ${error.message}`\r\n : `Impossible d'arrêter l'enregistrement : ${error.message}`);\r\n this.updateDebugInfo('Stop Recording Error', { error: error.message });\r\n this.formFilled.emit({ success: false, error: error.message, transcription: this.transcription });\r\n } finally {\r\n this.recordingStateChanged.emit({ isRecording: false, state: 'idle' });\r\n }\r\n }\r\n\r\n private extractConfidenceScores(filledData: any): Record<string, number> {\r\n const scores: Record<string, number> = {};\r\n if (!filledData) return scores;\r\n\r\n // Fields array format: [{\"id\": \"...\", \"name\": \"...\", \"value\": \"...\", \"confidence\": 0.87}]\r\n if (filledData.fields && Array.isArray(filledData.fields)) {\r\n filledData.fields.forEach((field: any) => {\r\n const raw = typeof field.confidence === 'number' ? field.confidence : parseFloat(field.confidence);\r\n if (!isNaN(raw)) {\r\n const clamped = Math.min(0.99, Math.max(0.01, Math.round(raw * 100) / 100));\r\n // Store under both id and name so label-based lookups always work\r\n if (field.id) scores[field.id] = clamped;\r\n if (field.name) scores[field.name] = clamped;\r\n }\r\n });\r\n }\r\n\r\n // Simple schema format: {\"schema\": {...}, \"confidence\": {\"field_name\": 0.87}}\r\n if (filledData.confidence && typeof filledData.confidence === 'object') {\r\n Object.entries(filledData.confidence).forEach(([k, v]) => {\r\n const raw = typeof v === 'number' ? v : parseFloat(v as string);\r\n if (!isNaN(raw)) {\r\n scores[k] = Math.min(0.99, Math.max(0.01, Math.round(raw * 100) / 100));\r\n }\r\n });\r\n }\r\n\r\n return scores;\r\n }\r\n\r\n private getFieldConfidence(primary: string, fallback?: string): number | null {\r\n if (!this.confidenceScores) return null;\r\n return this.confidenceScores[primary] ?? (fallback ? (this.confidenceScores[fallback] ?? null) : null);\r\n }\r\n\r\n private renderConfidenceIndicator(confidence: number | null) {\r\n if (confidence === null || confidence >= 0.95) return null;\r\n const pct = Math.round(confidence * 100);\r\n const isApproximate = confidence >= 0.85;\r\n return (\r\n <span\r\n class={`confidence-badge ${isApproximate ? 'confidence-medium' : 'confidence-low'}`}\r\n title={this.language === 'en' ? `Confidence: ${pct}%` : `Confiance : ${pct}%`}\r\n >\r\n {pct}%\r\n </span>\r\n );\r\n }\r\n\r\n private extractFilledData(filledData: any): any {\r\n const updatedSchema = JSON.parse(JSON.stringify(this.parsedSchema));\r\n switch(this.context){\r\n case \"ecoteka\":\r\n case \"ng\": \r\n if (filledData?.fields) {\r\n // Map AI response back to original schema structure\r\n filledData.fields.forEach((field: any) => {\r\n const originalField = updatedSchema.Children.find((child: any) => \r\n child.System_Name === field.name || child.Settings?.Label === field.name\r\n );\r\n \r\n if (originalField && field.value !== undefined && field.value !== null && field.value !== '') {\r\n if (!originalField.Settings) originalField.Settings = {};\r\n originalField.Settings.Default_Value = field.value;\r\n }\r\n });\r\n }\r\n \r\n break;\r\n case \"ecoll-veto\":\r\n if (filledData?.fields) {\r\n // Map AI response back to original schema structure\r\n filledData.fields.forEach((field: any) => {\r\n let originalField = updatedSchema[0].items.find((child: any) => \r\n child.label === field.name\r\n );\r\n if (!originalField)\r\n originalField = updatedSchema[1].items.find((child: any) =>\r\n child.label === field.name\r\n );\r\n \r\n if (originalField && field.value !== undefined && field.value !== null && field.value !== '') {\r\n updatedSchema[2][originalField.name] = field.value;\r\n }\r\n });\r\n }\r\n break;\r\n case \"track\":\r\n default:\r\n if (filledData?.fields) {\r\n Object.entries(filledData.fields).forEach(([fieldID, field]: [string, any]) => {\r\n if (field.value !== undefined && field.value !== null && field.value !== '') {\r\n if (field.id) {\r\n const schemaField = updatedSchema.fields[field.id];\r\n if (schemaField) {\r\n schemaField.value = field.value;\r\n schemaField.default = field.value;\r\n }\r\n } else {\r\n const fieldName = field.name;\r\n for (const key in updatedSchema.fields) {\r\n const schemaField = updatedSchema.fields[key];\r\n if (schemaField.title === fieldName) {\r\n schemaField.value = field.value;\r\n schemaField.default = field.value;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n break;\r\n }\r\n return updatedSchema;\r\n }\r\n\r\n private async trimSchemaForAI(schema: any): Promise<any> {\r\n switch(this.context){\r\n case \"ecoteka\":\r\n case \"ng\":\r\n const trimmed = { fields: [] };\r\n schema.Children.forEach((child: any) => {\r\n if (!child.System_Name || !child.Type) return;\r\n \r\n const fieldData: any = {\r\n name: child.Label || child.Settings?.Label || child.System_Name,\r\n type: this.mapFieldType(child.Type),\r\n default: child.Settings?.Default_Value\r\n };\r\n \r\n // Add options for classification/select/multiselect fields\r\n const selectTypes = ['InputClassification', 'select', 'multiselect', 'InputMultiSelect']\r\n if (selectTypes.includes(child.Type) && child.Children && child.Children.length > 0) {\r\n fieldData.options = child.Children.map((option: any) => \r\n option.System_Name || option.Label || option.toString()\r\n );\r\n }\r\n \r\n trimmed.fields.push(fieldData);\r\n });\r\n \r\n return trimmed;\r\n case \"ecoll-veto\":\r\n const mergedItemsSchema = (this.parsedSchema[0].items).concat(this.parsedSchema[1].items);\r\n\r\n if (mergedItemsSchema) {\r\n const trimmedSchema: FormSchema = {\r\n title: 'Form Name',\r\n description: 'Form Description',\r\n schema: {}\r\n };\r\n\r\n Object.entries(mergedItemsSchema).forEach(async ([key, field]: [string, any]) => {\r\n const fieldName = field.name;\r\n const fieldType = this.mapFieldType(field.type) as any;\r\n const fieldLabel = field.label || fieldName;\r\n const isRequired = field.required || false;\r\n const fieldValue = ''; //TODO\r\n\r\n if (['position', 'thesaurus'].includes(fieldType)) {\r\n try {\r\n const response = await fetch(`${this.classificationRootUrl}/ng/api/v1/classification/getList/${fieldType.toLowerCase() == 'position' ? \"Position\" : \"Thesaurus\"}/?StartNodeID=${field.config.options.options.startNode}`);\r\n if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n const data = await response.json();\r\n if (Array.isArray(data)) {\r\n const options = data.map(item => ({\r\n value: item.ID,\r\n label: item.System_Name\r\n }));\r\n if (options.length > 0) {\r\n field.pickerOptions = options;\r\n // TODO on degage les quotes simples temporairement, a corriger\r\n field.options = options.map(option => option.label.replace(\"'\", \"\"));\r\n }\r\n } else {\r\n console.error(\"Unexpected API response format:\", data);\r\n }\r\n } catch (error) {\r\n console.error(\"Error fetching classification data:\", error);\r\n }\r\n }\r\n \r\n trimmedSchema.schema[fieldName] = {\r\n type: fieldType,\r\n title: fieldLabel,\r\n options: field.options,\r\n readonly: field.readonly === true,\r\n default: '',\r\n };\r\n });\r\n return trimmedSchema;\r\n }\r\n case \"track\":\r\n default:\r\n if (schema?.schema ?? schema?.fields) {\r\n const trimmedSchema: FormSchema = {\r\n title: schema.title,\r\n description: schema.description,\r\n schema: {}\r\n };\r\n\r\n const finalSchema = schema?.schema ?? schema?.fields;\r\n\r\n Object.entries(finalSchema).forEach(([fieldName, field]: [string, any]) => {\r\n trimmedSchema.schema[fieldName] = {\r\n id: fieldName,\r\n type: field.type,\r\n title: field.title,\r\n options: field.options,\r\n readonly: field.type === 'header' || field.Enabled === false,\r\n default: field.default || field.DefaultValue,\r\n pattern: field.Mask,\r\n min: field.ValidationMin,\r\n max: field.ValidationMax\r\n };\r\n });\r\n\r\n return trimmedSchema;\r\n }\r\n break;\r\n }\r\n \r\n return schema;\r\n }\r\n\r\n private mapFieldType(type: string): string {\r\n const typeMapping = {\r\n 'InputAutocomplete': 'string',\r\n 'InputInteger': 'number',\r\n 'InputTextArea': 'string',\r\n 'InputDateTimePicker': 'datetime',\r\n 'InputDecimal': 'number',\r\n 'InputClassification': 'classification',\r\n 'InputCheckbox': 'boolean',\r\n 'InputTextTranslation': 'string',\r\n 'InputMultiSelect': 'multiselect',\r\n 'thesaurus': 'thesaurus',\r\n 'position': 'position',\r\n 'text': 'string',\r\n 'textarea': 'string',\r\n 'number': 'number',\r\n 'date': 'date',\r\n 'datetime': 'datetime',\r\n 'select': 'select',\r\n 'multiselect': 'multiselect',\r\n 'checkbox': 'checkbox'\r\n };\r\n \r\n return typeMapping[type] || 'string';\r\n }\r\n\r\n // Utility methods exposed as public API\r\n @Method() public async convertXmlToJson(xmlForm: string): Promise<FormSchemaFieldsOnly> {\r\n return SchemaConverter.convertXmlToJson(xmlForm, this.classificationRootUrl, this.language);\r\n }\r\n\r\n @Method() public async convertJsonToXml(jsonForm: FormSchemaFieldsOnlyExtended): Promise<string> {\r\n return SchemaConverter.convertJsonToXml(jsonForm);\r\n }\r\n\r\n // Utility methods exposed as public API\r\n @Method() public async convertXmlToJsonLegacy(xmlForm: string): Promise<FormSchema> {\r\n return SchemaConverter.convertXmlToJsonLegacy(xmlForm);\r\n }\r\n\r\n @Method() public async convertJsonToXmlLegacy(jsonForm: FormSchema): Promise<string> {\r\n return SchemaConverter.convertJsonToXmlLegacy(jsonForm);\r\n }\r\n\r\n private renderUploadButton() {\r\n if (!this.parsedInputTypes.includes('ocr'))\r\n return;\r\n const ocrStyle = this.parsedTheme.buttons?.ocr || {};\r\n const size = ocrStyle.size || '50px';\r\n \r\n // Prepare OCR theme to pass to ocr-file-uploader component\r\n const ocrTheme = {\r\n button: {\r\n size: size,\r\n backgroundColor: ocrStyle.backgroundColor || '#10b981',\r\n hoverColor: ocrStyle.hoverColor || '#059669',\r\n textColor: ocrStyle.textColor || '#ffffff'\r\n }\r\n };\r\n \r\n const isDisabled = this.isProcessing || this.hasError || this.isRecording;\r\n \r\n return(\r\n <div style={{ width: size, height: size, flexShrink: '0', opacity: isDisabled ? '0.6' : '1', pointerEvents: isDisabled ? 'none' : 'auto' }}>\r\n <ocr-file-uploader\r\n batch={false}\r\n json-schema={this.convertSchemaToOcrFormat(this.parsedSchema)}\r\n callback={(data) => {this.processJsonForm(data);}}\r\n theme={JSON.stringify(ocrTheme)}\r\n style={{ width: '100%', height: '100%' }}\r\n >\r\n </ocr-file-uploader>\r\n </div>\r\n );\r\n }\r\n\r\n private convertSchemaToOcrFormat(schema: any): string {\r\n const ocrSchema = {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {\r\n meta: {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {\r\n page: { type: \"integer\" },\r\n confiance_global: { type: \"number\" }\r\n },\r\n required: [\"page\", \"confiance_global\"]\r\n },\r\n content: {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {},\r\n required: []\r\n }\r\n },\r\n required: [\"meta\", \"content\"]\r\n };\r\n\r\n if (schema?.Children) {\r\n schema.Children.forEach((child: any) => {\r\n if (child.System_Name && child.Type) {\r\n const fieldLabel = child.Settings?.Label || child.System_Name;\r\n const fieldType = this.mapOcrFieldType(child.Type);\r\n ocrSchema.properties.content.properties[fieldLabel] = {\r\n anyOf: [{ type: fieldType }, { type: \"null\" }]\r\n };\r\n }\r\n });\r\n }\r\n\r\n return JSON.stringify(ocrSchema);\r\n }\r\n\r\n private mapOcrFieldType(type: string): string {\r\n const typeMapping = {\r\n 'InputInteger': 'number',\r\n 'InputDecimal': 'number',\r\n 'InputDateTimePicker': 'string',\r\n 'InputCheckbox': 'boolean'\r\n };\r\n return typeMapping[type] || 'string';\r\n }\r\n\r\n private fileInputAudioRecord!: HTMLInputElement;\r\n\r\n private triggerAudioRecordUpload = () => {\r\n this.fileInputAudioRecord.click();\r\n };\r\n\r\n private handleAudioRecordChange = async (event: Event) => {\r\n const input = event.target as HTMLInputElement;\r\n if (!input.files || input.files.length === 0) return;\r\n if (this.isProcessing || this.isRecording) {\r\n input.value = '';\r\n return;\r\n }\r\n\r\n const file = input.files[0];\r\n const isEn = this.language === 'en';\r\n\r\n // Validate file type\r\n const validAudioTypes = /^audio\\//;\r\n const validAudioExtensions = /\\.(mp3|wav|webm|m4a|ogg|flac|aac|opus)$/i;\r\n if (!validAudioTypes.test(file.type) && !validAudioExtensions.test(file.name)) {\r\n this.hasTransientError = true;\r\n this.statusMessage = isEn\r\n ? `Invalid file type: \"${file.name}\". Please select an audio file.`\r\n : `Type de fichier invalide : \"${file.name}\". Veuillez sélectionner un fichier audio.`;\r\n input.value = '';\r\n return;\r\n }\r\n\r\n // Reset the input so the same file can be re-selected after an error\r\n input.value = '';\r\n await this.processAudioContent(file);\r\n };\r\n\r\n private renderUploadRecordButton() {\r\n if (!this.parsedInputTypes.includes('audio'))\r\n return;\r\n \r\n const audioStyle = this.parsedTheme.buttons?.audio || {};\r\n const size = audioStyle.size || '50px';\r\n const isDisabled = this.isProcessing || this.hasError || this.isRecording;\r\n const buttonStyle = {\r\n stroke: audioStyle.backgroundColor || '#3b82f6',\r\n fill: audioStyle.backgroundColor || '#3b82f6',\r\n width: size,\r\n height: size,\r\n opacity: isDisabled ? '0.6' : '1'\r\n };\r\n \r\n return (\r\n <div class=\"upload-record-container\" onClick={isDisabled ? null : this.triggerAudioRecordUpload} style={{ width: size, height: size, cursor: isDisabled ? 'not-allowed' : 'pointer' }}>\r\n <input\r\n type=\"file\"\r\n ref={el => (this.fileInputAudioRecord = el!)}\r\n onChange={this.handleAudioRecordChange}\r\n style={{ display: 'none' }}\r\n />\r\n <div class='upload-record-button'>\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={buttonStyle}>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 2.75C6.89137 2.75 2.75 6.89137 2.75 12C2.75 17.1086 6.89137 21.25 12 21.25C12.6345 21.25 13.2534 21.1862 13.8508 21.065C14.2567 20.9826 14.6526 21.2448 14.735 21.6508C14.8174 22.0567 14.5551 22.4526 14.1492 22.535C13.4541 22.6761 12.7353 22.75 12 22.75C6.06294 22.75 1.25 17.9371 1.25 12C1.25 6.06294 6.06294 1.25 12 1.25C17.9371 1.25 22.75 6.06294 22.75 12C22.75 12.7353 22.6761 13.4541 22.535 14.1492C22.4526 14.5551 22.0567 14.8174 21.6508 14.735C21.2448 14.6526 20.9826 14.2567 21.065 13.8508C21.1862 13.2534 21.25 12.6345 21.25 12C21.25 6.89137 17.1086 2.75 12 2.75ZM12.7676 8.52584C12.7661 8.53409 12.7604 8.56729 12.7564 8.64336C12.7502 8.76101 12.75 8.91982 12.75 9.17082C12.75 9.27795 12.7501 9.33904 12.7518 9.38529C12.7528 9.41425 12.7542 9.42649 12.7546 9.42955C12.7662 9.48945 12.7993 9.54303 12.8477 9.58021C12.8502 9.58194 12.8606 9.58864 12.886 9.60252C12.9266 9.62468 12.9812 9.65209 13.0771 9.7L14.3938 10.3584C14.6183 10.4706 14.7604 10.5414 14.8684 10.5885C14.9382 10.6189 14.9705 10.6287 14.9785 10.631C15.0885 10.6405 15.1917 10.5767 15.2324 10.4742C15.2339 10.4659 15.2396 10.4327 15.2436 10.3566C15.2498 10.239 15.25 10.0802 15.25 9.82918C15.25 9.72205 15.2499 9.66096 15.2482 9.61471C15.2472 9.58575 15.2458 9.57351 15.2454 9.57045C15.2338 9.51055 15.2007 9.45697 15.1523 9.41979C15.1498 9.41805 15.1394 9.41136 15.114 9.39748C15.0734 9.37533 15.0188 9.34791 14.9229 9.3L13.6062 8.64164C13.3817 8.52939 13.2396 8.45859 13.1316 8.41151C13.0617 8.38107 13.0295 8.37131 13.0215 8.36896C12.9115 8.35945 12.8083 8.42327 12.7676 8.52584ZM12.75 11.2135L13.7396 11.7083C13.9425 11.8098 14.1204 11.8987 14.269 11.9635C14.4199 12.0293 14.5988 12.097 14.7972 12.1202C15.6037 12.2142 16.3689 11.7413 16.6454 10.978C16.7134 10.7901 16.7328 10.5998 16.7415 10.4355C16.75 10.2735 16.75 10.0747 16.75 9.8479V9.82918C16.75 9.81565 16.75 9.80205 16.75 9.78837C16.7503 9.62647 16.7505 9.45474 16.7188 9.28904C16.638 8.86674 16.4045 8.48898 16.0629 8.22783C15.9289 8.12535 15.7752 8.04877 15.6303 7.97658C15.618 7.97048 15.6059 7.96441 15.5938 7.95836L14.2603 7.29164C14.0575 7.19022 13.8796 7.10128 13.731 7.03647C13.5801 6.97071 13.4012 6.90297 13.2028 6.87982C12.3963 6.78575 11.6311 7.25868 11.3546 8.02203C11.2866 8.20986 11.2672 8.40019 11.2585 8.56454C11.2519 8.68919 11.2504 8.83571 11.2501 9L11.25 9.11944C11.25 9.13026 11.25 9.14115 11.25 9.1521V9.17082C11.25 9.18435 11.25 9.19795 11.25 9.21163C11.2499 9.23918 11.2499 9.26701 11.25 9.29505V12.5499C10.875 12.3581 10.4501 12.25 10 12.25C8.48122 12.25 7.25 13.4812 7.25 15C7.25 16.5188 8.48122 17.75 10 17.75C11.5188 17.75 12.75 16.5188 12.75 15V11.2135ZM11.25 15C11.25 14.3096 10.6904 13.75 10 13.75C9.30964 13.75 8.75 14.3096 8.75 15C8.75 15.6904 9.30964 16.25 10 16.25C10.6904 16.25 11.25 15.6904 11.25 15ZM17.4697 14.4697C17.7626 14.1768 18.2374 14.1768 18.5303 14.4697L21.0303 16.9697C21.3232 17.2626 21.3232 17.7374 21.0303 18.0303C20.7374 18.3232 20.2626 18.3232 19.9697 18.0303L18.75 16.8107V22C18.75 22.4142 18.4142 22.75 18 22.75C17.5858 22.75 17.25 22.4142 17.25 22V16.8107L16.0303 18.0303C15.7374 18.3232 15.2626 18.3232 14.9697 18.0303C14.6768 17.7374 14.6768 17.2626 14.9697 16.9697L17.4697 14.4697Z\" />\r\n </svg>\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n private renderRecordButton() {\r\n if (!this.parsedInputTypes.includes('voice'))\r\n return;\r\n\r\n const buttonClass = [\r\n 'record-button',\r\n this.isRecording && 'recording',\r\n this.isProcessing && 'processing'\r\n ].filter(Boolean).join(' ');\r\n\r\n const isDisabled = this.isProcessing || this.hasError;\r\n \r\n const voiceStyle = this.parsedTheme.buttons?.voice || {};\r\n const size = voiceStyle.size || '50px';\r\n const buttonStyle = {\r\n background: voiceStyle.backgroundColor || '#ee4444',\r\n width: size,\r\n height: size\r\n };\r\n\r\n return (\r\n <button \r\n class={buttonClass}\r\n style={buttonStyle}\r\n onClick={() => this.handleRecordClick()}\r\n disabled={isDisabled}\r\n aria-label={this.isRecording ? 'Stop recording' : 'Start recording'}\r\n >\r\n {this.isProcessing ? (\r\n <svg class=\"record-icon\" viewBox=\"0 0 24 24\">\r\n <circle cx=\"12\" cy=\"12\" r=\"3\">\r\n <animate attributeName=\"r\" values=\"3;6;3\" dur=\"1s\" repeatCount=\"indefinite\" />\r\n <animate attributeName=\"opacity\" values=\"1;0.3;1\" dur=\"1s\" repeatCount=\"indefinite\" />\r\n </circle>\r\n </svg>\r\n ) : this.isRecording ? (\r\n <svg class=\"record-icon\" viewBox=\"0 0 24 24\">\r\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\r\n </svg>\r\n ) : (\r\n <svg class=\"record-icon\" viewBox=\"0 0 24 24\">\r\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\r\n </svg>\r\n )}\r\n </button>\r\n );\r\n }\r\n\r\n private renderLoadingSkeleton() {\r\n const types = this.parsedInputTypes.length > 0 ? this.parsedInputTypes : ['voice'];\r\n const containerStyle = this.getContainerStyle();\r\n const buttons = (this.parsedTheme?.buttons || {}) as any;\r\n const getSize = (type: string) => buttons[type]?.size || buttons.voice?.size || '50px';\r\n\r\n return (\r\n <div>\r\n <div\r\n class={\"voice-recorder-container\" + (this.debug || this.renderForm ? \"-debug\" : \"\")}\r\n style={containerStyle}\r\n >\r\n <div class=\"row-audio-area\">\r\n {types.map(type => {\r\n const size = getSize(type);\r\n return <div class=\"skeleton-circle\" style={{ width: size, height: size }} />;\r\n })}\r\n </div>\r\n {this.displayStatus && <div class=\"skeleton-status\" />}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private renderStatusMessage() {\r\n const hasAnyError = this.hasError || this.hasTransientError;\r\n const statusClass = [\r\n 'status-text',\r\n hasAnyError && 'error',\r\n this.filledData && !hasAnyError && 'success'\r\n ].filter(Boolean).join(' ');\r\n const statusStyle = this.getStatusStyle();\r\n\r\n return <div class={statusClass} style={statusStyle}>{this.statusMessage}</div>;\r\n }\r\n\r\n private renderFormPreview() {\r\n if (!this.parsedSchema) return null;\r\n\r\n const isPreview = this.isReadonlyMode && !this.filledData;\r\n const title = isPreview ? 'Form Preview (Voice input to fill)' : 'Voice-Filled Form:';\r\n \r\n return (\r\n <div class=\"form-preview\">\r\n <div class=\"form-preview-title\">{title}</div>\r\n <form class=\"voice-filled-form\">\r\n {this.renderFormFields()}\r\n </form>\r\n </div>\r\n );\r\n }\r\n\r\n private renderFormFields() {\r\n if (!this.parsedSchema) return null;\r\n \r\n const largeFieldTypes = ['select', 'multiselect', 'classification', 'thesaurus', 'position'];\r\n \r\n switch(this.context){\r\n case \"ecoteka\":\r\n case \"ng\":\r\n return this.parsedSchema.Children.map((child: any) => {\r\n if (!child.System_Name || !child.Type) return null;\r\n \r\n const fieldName = child.System_Name;\r\n const fieldType = this.mapFieldType(child.Type);\r\n const fieldLabel = child.Settings?.Label || child.System_Name;\r\n const isRequired = child.Required || false;\r\n const fieldValue = child.Settings?.Default_Value;\r\n const isLargeField = largeFieldTypes.includes(fieldType) || (child.Children && child.Children.length > 5);\r\n \r\n return (\r\n <div class={isLargeField ? \"form-group full-width\" : \"form-group\"} key={fieldName}>\r\n <label htmlFor={fieldName} class=\"form-label\">\r\n {fieldLabel}\r\n {isRequired && <span class=\"required\">*</span>}\r\n {this.renderConfidenceIndicator(this.getFieldConfidence(fieldLabel, fieldName))}\r\n </label>\r\n {this.renderFormField(fieldName, {\r\n type: fieldType,\r\n title: fieldLabel,\r\n required: isRequired,\r\n options: child.Children?.map((option: any) => \r\n option.System_Name || option.Label || option.toString()\r\n )\r\n }, fieldValue)}\r\n </div>\r\n );\r\n }).filter(Boolean);\r\n case \"ecoll-veto\":\r\n const mergedItemsSchema = (this.parsedSchema[0].items).concat(this.parsedSchema[1].items);\r\n return Object.entries(mergedItemsSchema).map(([key, field]: [string, any]) => {\r\n \r\n const fieldName = field.name;\r\n field.type = this.mapFieldType(field.type);\r\n const fieldLabel = field.label || fieldName;\r\n const isRequired = field.required || false;\r\n const fieldValue = this.parsedSchema[2][fieldName];\r\n\r\n // if (['position', 'thesaurus'].includes(field.type)) {\r\n // try {\r\n // const response = await fetch(`${this.classificationRootUrl}/ng/api/v1/classification/getList/${fieldType.toLowerCase() == 'position' ? \"Position\" : \"Thesaurus\"}/?StartNodeID=${field.config.options.options.startNode}`);\r\n // if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n // const data = await response.json();\r\n // if (Array.isArray(data)) {\r\n // const options = data.map(item => ({\r\n // value: item.ID,\r\n // label: item.System_Name\r\n // }));\r\n // if (options.length > 0) {\r\n // field.pickerOptions = options;\r\n // // TODO on degage les quotes simples temporairement, a corriger\r\n // field.options = options.map(option => option.label.replace(\"'\", \"\"));\r\n // }\r\n // } else {\r\n // console.error(\"Unexpected API response format:\", data);\r\n // }\r\n // } catch (error) {\r\n // console.error(\"Error fetching classification data:\", error);\r\n // }\r\n // }\r\n\r\n return (\r\n <div class=\"form-group\" key={fieldName}>\r\n <label htmlFor={fieldName} class=\"form-label\">\r\n { fieldLabel }\r\n {isRequired && <span class=\"required\">*</span>}\r\n {this.renderConfidenceIndicator(this.getFieldConfidence(fieldLabel, fieldName))}\r\n </label>\r\n {this.renderFormField(fieldName, field, (this.filledData?.[fieldName] ?? fieldValue))}\r\n </div>\r\n );\r\n });\r\n case \"track\":\r\n default:\r\n return Object.entries(this.parsedSchema.fields).map(([fieldName, field]: [string, any]) => {\r\n if (field.type === 'header') {\r\n return (\r\n <div class=\"form-header\" key={fieldName}>\r\n {field.title || fieldName}\r\n </div>\r\n );\r\n }\r\n \r\n return (\r\n <div class=\"form-group\" key={fieldName}>\r\n <label htmlFor={fieldName} class=\"form-label\">\r\n {field.title || fieldName}\r\n {field.required && <span class=\"required\">*</span>}\r\n {this.renderConfidenceIndicator(this.getFieldConfidence(fieldName))}\r\n </label>\r\n {this.renderFormField(fieldName, field, (this.filledData?.[fieldName] ?? field.value))}\r\n </div>\r\n );\r\n });\r\n }\r\n }\r\n\r\n private renderFormField(fieldName: string, field: any, value: any) {\r\n const isReadonly = this.isReadonlyMode && !this.filledData;\r\n const commonProps = {\r\n id: fieldName,\r\n name: fieldName,\r\n class: 'form-input',\r\n required: field.required,\r\n disabled: isReadonly\r\n };\r\n\r\n switch (field.type) {\r\n case 'multiselect':\r\n if (isReadonly) {\r\n return (\r\n <div class=\"readonly-select\">\r\n <div class=\"select-placeholder\">Available options:</div>\r\n <ul class=\"select-options-list\">\r\n {field.options?.map(option => (\r\n <li class=\"select-option\">{option}</li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n }\r\n const selectedValues = Array.isArray(value) ? value : (value ? [value] : []);\r\n return (\r\n <div class=\"multiselect-container\">\r\n {field.options?.map(option => {\r\n const isChecked = selectedValues.some(v => \r\n v?.toString().toLowerCase() === option?.toString().toLowerCase()\r\n );\r\n return (\r\n <label class=\"multiselect-option\">\r\n <input \r\n type=\"checkbox\" \r\n name={fieldName}\r\n value={option}\r\n checked={isChecked}\r\n disabled={isReadonly}\r\n />\r\n <span class=\"multiselect-label\">{option}</span>\r\n </label>\r\n );\r\n })}\r\n </div>\r\n );\r\n \r\n case 'select':\r\n if (isReadonly) {\r\n // In readonly mode, show all options as a list instead of dropdown\r\n return (\r\n <div class=\"readonly-select\">\r\n <div class=\"select-placeholder\">Available options:</div>\r\n <ul class=\"select-options-list\">\r\n {field.options?.map(option => (\r\n <li class=\"select-option\">{option}</li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n }\r\n return (\r\n <select id={fieldName} name={fieldName} class=\"form-input\" required={field.required}>\r\n <option value=\"\">-- Select --</option>\r\n {field.options?.map(option => (\r\n <option value={option} selected={value === option}>\r\n {option}\r\n </option>\r\n ))}\r\n </select>\r\n );\r\n \r\n case 'boolean':\r\n return (\r\n <input \r\n {...commonProps}\r\n type=\"checkbox\" \r\n class=\"form-checkbox\"\r\n checked={value === true || value === 'true'}\r\n />\r\n );\r\n \r\n case 'number':\r\n return (\r\n <input \r\n {...commonProps}\r\n type=\"number\" \r\n min={field.min}\r\n max={field.max}\r\n step=\"any\"\r\n value={value || ''}\r\n />\r\n );\r\n \r\n case 'date':\r\n return (\r\n <input \r\n {...commonProps}\r\n type='date'\r\n value={value ? (([d, m, y]) => `${y}-${m}-${d}`)(value.split(\"/\")) : ''}\r\n />\r\n );\r\n\r\n case 'datetime':\r\n return (\r\n <input \r\n {...commonProps}\r\n type='datetime-local'\r\n value={value || ''}\r\n />\r\n );\r\n \r\n default: // string\r\n return (\r\n <input \r\n {...commonProps}\r\n type=\"text\" \r\n pattern={field.pattern}\r\n placeholder={field.description}\r\n value={value || ''}\r\n />\r\n );\r\n }\r\n }\r\n\r\n private renderDebugPanel() {\r\n if (!this.debug) return null;\r\n\r\n return (\r\n <div class=\"debug-panel\">\r\n <div class=\"debug-title\">Debug Information:</div>\r\n <div class=\"debug-content\">\r\n {JSON.stringify(this.debugInfo, null, 2)}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private getDefaultTheme() {\r\n return {\r\n texts: {\r\n idle: this.language === 'en' ? 'Select an input method' : 'Sélectionner une méthode de saisie',\r\n recording: this.language === 'en' ? 'Recording... Click to stop' : 'Enregistrement ... Cliquer pour stopper',\r\n processing: this.language === 'en' ? 'Processing...' : 'Traitement en cours...',\r\n transcribing: this.language === 'en' ? 'Transcribing speech...' : 'Transcription du texte...',\r\n filling: this.language === 'en' ? 'Filling form fields...' : 'Remplissage du formulaire...',\r\n completed: this.language === 'en' ? 'Form completed!' : 'Formulaire rempli !'\r\n },\r\n container: {\r\n width: 'auto',\r\n height: 'auto',\r\n backgroundColor: '#ffffff',\r\n borderColor: '#e2e8f0',\r\n borderRadius: '8px',\r\n padding: '20px',\r\n gap: '8px'\r\n },\r\n buttons: {\r\n voice: { backgroundColor: '#ee4444', textColor: '#ffffff', hoverColor: '#dd3333', size: '50px' },\r\n audio: { backgroundColor: '#3b82f6', textColor: '#ffffff', hoverColor: '#2563eb', size: '50px' },\r\n ocr: { backgroundColor: '#10b981', textColor: '#ffffff', hoverColor: '#059669', size: '50px' }\r\n },\r\n statusText: { color: '#1e293b', fontSize: '14px' }\r\n };\r\n }\r\n\r\n private getContainerStyle() {\r\n const c = this.parsedTheme?.container || {};\r\n return {\r\n width: c.width || 'auto',\r\n height: c.height || 'auto',\r\n backgroundColor: c.backgroundColor || '#ffffff',\r\n border: `1px solid ${c.borderColor || '#e2e8f0'}`,\r\n borderRadius: c.borderRadius || '8px',\r\n padding: c.padding || '20px',\r\n gap: c.gap || '8px'\r\n };\r\n }\r\n\r\n private getStatusStyle() {\r\n const s = this.parsedTheme?.statusText || {};\r\n return {\r\n color: s.color || '#1e293b',\r\n fontSize: s.fontSize || '14px'\r\n };\r\n }\r\n\r\n render() {\r\n if (this.isInitializing) {\r\n return this.renderLoadingSkeleton();\r\n }\r\n\r\n const containerStyle = this.getContainerStyle();\r\n \r\n return (\r\n <div>\r\n <div \r\n class={\"voice-recorder-container\" + (this.debug || this.renderForm ? \"-debug\" : \"\")}\r\n style={containerStyle}\r\n >\r\n <div class=\"row-audio-area\">\r\n {this.renderRecordButton()}\r\n {this.renderUploadRecordButton()}\r\n {this.renderUploadButton()}\r\n </div>\r\n {this.displayStatus ? this.renderStatusMessage() : \"\"}\r\n {this.renderForm ? this.renderFormPreview() : \"\"}\r\n {this.debug ? this.renderDebugPanel() : \"\"}\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
@@ -211,8 +211,9 @@ export class OpenAILLMService {
211
211
  14. CRITICAL: Each field has a unique ID shown as "ID:xxx" at the start of its description. You MUST include this exact ID in your response for each field you fill. The ID is the ONLY way to distinguish between fields with the same name
212
212
  15. CRITICAL - DEFAULT VALUES: Some fields have default values shown as "default=xxx". If the user does NOT mention a specific value for that field in the transcription, you MUST return the default value. Default values should be preserved unless explicitly overridden by the user
213
213
  16. CRITICAL - PATTERN VALIDATION: Some fields have a regex pattern shown as "pattern=xxx". The value you extract MUST match this pattern exactly. If the transcription is too ambiguous to produce a value that matches the pattern, leave the field EMPTY
214
+ 17. CONFIDENCE SCORE: For each field you fill, add a "confidence" property (number between 0.01 and 0.99, maximum 2 decimal places) reflecting how certain you are about the extracted value. Use values close to 0.99 for values that are explicitly and unambiguously stated, lower values when you had to infer, interpret, paraphrase, or when the match was approximate.
214
215
 
215
- Respond with JSON in this exact format: {"fields": [{"id": "field_id", "name": "field_name", "value": "extracted_value"}]}`;
216
+ Respond with JSON in this exact format: {"fields": [{"id": "field_id", "name": "field_name", "value": "extracted_value", "confidence": 0.87}]}`;
216
217
  let userPrompt = `
217
218
  Voice transcription: "${data}"
218
219
 
@@ -285,8 +286,9 @@ export class OpenAILLMService {
285
286
  13. Use readonly fields as contextual hints to understand form structure and field grouping, but never fill them
286
287
  14. CRITICAL - UNKNOWN/NO/N-A VALUES: The interpretation of words like "Unknown", "Inconnu", "No", "Non", "N/A", "Non applicable" depends ENTIRELY on whether the field has those words as explicit options. Rule: if the user says "field X is Unknown" (or any similar phrasing) AND "Unknown" (or a close variant) exists in the options list for that field, then SELECT that option - it is a valid value. If the user says such words for a field that does NOT have them as options (string, number, date, etc.), then it means the user has no value to provide - leave the field empty, do NOT fill it with the literal text
287
288
  15. CRITICAL - PATTERN VALIDATION: Some fields have a regex pattern shown as "pattern=xxx". The value you extract MUST match this pattern exactly. If the transcription is too ambiguous to produce a value that matches the pattern, leave the field EMPTY
289
+ 16. CONFIDENCE SCORE: For each field you fill, add its name as a key in a top-level "confidence" object with a score from 0.01 to 0.99 (max 2 decimal places). Use values close to 0.99 for clearly stated values, lower when you had to infer, interpret, or approximate.
288
290
 
289
- Respond with JSON in this exact format: {"schema": {...}}`;
291
+ Respond with JSON in this exact format: {"schema": {...}, "confidence": {"field_name": 0.87}}`;
290
292
  let userPrompt = `
291
293
  Voice transcription: "${data}"
292
294
 
@@ -379,7 +381,7 @@ export class AnthropicLLMService {
379
381
  Form fields:
380
382
  ${JSON.stringify(finalSchema, null, 2)}
381
383
 
382
- Respond with JSON: {"fields": [{"id": "field_id", "name": "field_name", "value": "extracted_value"}]}`;
384
+ Respond with JSON: {"fields": [{"id": "field_id", "name": "field_name", "value": "extracted_value", "confidence": 0.87}]}`;
383
385
  const body = this.useProxy
384
386
  ? { model: this.model, messages: [{ role: 'user', content: userPrompt }], system: systemPrompt }
385
387
  : { model: this.model, max_tokens: 4096, system: systemPrompt, messages: [{ role: 'user', content: userPrompt }] };
@@ -405,6 +407,7 @@ Rules:
405
407
  8. DATE/DATETIME OUT OF RANGE: if a date falls outside min/max constraints, leave the field EMPTY
406
408
  9. PATTERN VALIDATION: if a field has a pattern, the value MUST match it exactly, otherwise leave empty
407
409
  10. UNKNOWN VALUES: if the user says "Unknown" and it exists as an option, select it; otherwise leave empty
410
+ 11. CONFIDENCE SCORE: For each field you fill, add a "confidence" property (number between 0.01 and 0.99, max 2 decimal places) reflecting how certain you are about the extracted value. Use values close to 0.99 for clearly stated values, lower when you had to infer or approximate.
408
411
  Respond ONLY with valid JSON.`;
409
412
  }
410
413
  }
@@ -438,7 +441,7 @@ export class MistralLLMService {
438
441
  Form fields:
439
442
  ${JSON.stringify(finalSchema, null, 2)}
440
443
 
441
- Respond with JSON: {"fields": [{"id": "field_id", "name": "field_name", "value": "extracted_value"}]}`;
444
+ Respond with JSON: {"fields": [{"id": "field_id", "name": "field_name", "value": "extracted_value", "confidence": 0.87}]}`;
442
445
  const response = await fetch(endpoint, {
443
446
  method: 'POST',
444
447
  headers,
@@ -468,6 +471,7 @@ Rules:
468
471
  8. DATE/DATETIME OUT OF RANGE: if a date falls outside min/max constraints, leave the field EMPTY
469
472
  9. PATTERN VALIDATION: if a field has a pattern, the value MUST match it exactly, otherwise leave empty
470
473
  10. UNKNOWN VALUES: if the user says "Unknown" and it exists as an option, select it; otherwise leave empty
474
+ 11. CONFIDENCE SCORE: For each field you fill, add a "confidence" property (number between 0.01 and 0.99, max 2 decimal places) reflecting how certain you are about the extracted value. Use values close to 0.99 for clearly stated values, lower when you had to infer or approximate.
471
475
  Respond ONLY with valid JSON.`;
472
476
  }
473
477
  }