@@ -228,7 +228,7 @@ <h3 class="engine-title u-mb-0">🤖 Silnik Rider-Pi (Health)</h3>
228228 chatgpt : [ 'gpt-4o-mini' , 'gpt-4o' , 'o1-mini' ]
229229 } ,
230230 // Obecnie aktywna konfiguracja (z /api/models/active)
231- activeConfig : { text : { } , vision : { } , voice : { } } ,
231+ activeConfig : { text : { } , vision : { } , voice_asr : { } , voice_tts : { } } ,
232232 textProviderStatus : null
233233 } ,
234234 pi : {
@@ -262,6 +262,9 @@ <h3 class="engine-title u-mb-0">🤖 Silnik Rider-Pi (Health)</h3>
262262
263263const LOCAL_PROVIDERS = new Set ( [ 'local' , 'ollama' , 'whisper' , 'piper' , 'yolo' ] ) ;
264264const CLOUD_PROVIDERS = new Set ( [ 'gemini' , 'chatgpt' , 'openai' , 'auto' ] ) ;
265+ const DOMAIN_SLOT_MAP = {
266+ voice : 'voice_asr'
267+ } ;
265268
266269
267270// --- 2. INICJALIZACJA ---
@@ -476,6 +479,7 @@ <h3 class="engine-title u-mb-0">🤖 Silnik Rider-Pi (Health)</h3>
476479 const card = btn . closest ( '.pipeline-card' ) ;
477480 const domain = card . dataset . domain ; // text, vision, voice
478481 const device = card . dataset . device ; // pc, pi
482+ const slot = resolveSlot ( domain ) ;
479483
480484 const source = card . querySelector ( '.source-select' ) . value ;
481485 const model = card . querySelector ( '.model-select' ) . value ;
@@ -498,10 +502,10 @@ <h3 class="engine-title u-mb-0">🤖 Silnik Rider-Pi (Health)</h3>
498502 provider = 'gemini' ;
499503 } else if ( model . includes ( 'gpt' ) || model . includes ( 'o1' ) ) {
500504 provider = 'chatgpt' ;
501- } else if ( domain === 'voice ' ) {
505+ } else if ( slot === 'voice_asr ' ) {
502506 provider = 'openai' ;
503507 }
504- } else if ( source === 'local' && domain === 'text' ) {
508+ } else if ( source === 'local' && slot === 'text' ) {
505509 provider = 'ollama' ;
506510 }
507511 // Dla vision/voice 'local' jest ok.
@@ -510,12 +514,12 @@ <h3 class="engine-title u-mb-0">🤖 Silnik Rider-Pi (Health)</h3>
510514 const res = await fetch ( '/api/models/bind' , {
511515 method : 'POST' ,
512516 headers : { 'Content-Type' : 'application/json' } ,
513- body : JSON . stringify ( { slot : domain , provider : provider , model : model } )
517+ body : JSON . stringify ( { slot : slot , provider : provider , model : model } )
514518 } ) ;
515519 if ( ! res . ok ) throw new Error ( `API Error: ${ res . status } ` ) ;
516520
517521 // 3. (Opcjonalnie) Jeśli zmieniamy text, wymuś też zmianę backendu
518- if ( domain === 'text' ) {
522+ if ( slot === 'text' ) {
519523 const backend = ( provider === 'ollama' ) ? 'local' : provider ;
520524 await fetch ( '/api/providers/text/backend' , {
521525 method : 'PATCH' , headers : { 'Content-Type' : 'application/json' } ,
@@ -675,7 +679,8 @@ <h3 class="engine-title u-mb-0">🤖 Silnik Rider-Pi (Health)</h3>
675679}
676680
677681function getEffectiveConfigForDomain ( domain ) {
678- const base = { ...( AppState . pc . activeConfig [ domain ] || { } ) } ;
682+ const slot = resolveSlot ( domain ) ;
683+ const base = { ...( AppState . pc . activeConfig [ slot ] || { } ) } ;
679684 base . providerLabel = formatProviderLabel ( base . provider ) ;
680685
681686 if ( domain === 'text' ) {
@@ -717,6 +722,10 @@ <h3 class="engine-title u-mb-0">🤖 Silnik Rider-Pi (Health)</h3>
717722 if ( ! name ) return false ;
718723 return CLOUD_PROVIDERS . has ( name . toLowerCase ( ) ) ;
719724}
725+
726+ function resolveSlot ( domain ) {
727+ return DOMAIN_SLOT_MAP [ domain ] || domain ;
728+ }
720729</ script >
721730< script type ="module " src ="/web/assets/menu.js "> </ script >
722731< script type ="module " src ="/web/assets/footer.js "> </ script >
0 commit comments