diff --git a/apps/stage-tamagotchi/src/components/InteractiveArea.vue b/apps/stage-tamagotchi/src/components/InteractiveArea.vue index 6675f1eb0..fd9e7231f 100644 --- a/apps/stage-tamagotchi/src/components/InteractiveArea.vue +++ b/apps/stage-tamagotchi/src/components/InteractiveArea.vue @@ -31,7 +31,7 @@ async function handleSend() { const providerConfig = providersStore.getProviderConfig(activeProvider.value) await send(messageInput.value, { model: activeModel.value, - chatProvider: await providersStore.getProviderInstance(activeProvider.value) as ChatProvider, + chatProvider: await providersStore.getProviderInstance(activeProvider.value), providerConfig, }) } @@ -94,7 +94,7 @@ watch(isAudioInputOn, async (value) => { watch([activeProvider, activeModel], async () => { if (activeProvider.value && activeModel.value) { - await discoverToolsCompatibility(activeModel.value, providersStore.getProviderInstance(activeProvider.value) as ChatProvider, []) + await discoverToolsCompatibility(activeModel.value, await providersStore.getProviderInstance(activeProvider.value), []) } }) diff --git a/apps/stage-tamagotchi/src/pages/settings/modules/hearing.vue b/apps/stage-tamagotchi/src/pages/settings/modules/hearing.vue index 661ab870e..e31765379 100644 --- a/apps/stage-tamagotchi/src/pages/settings/modules/hearing.vue +++ b/apps/stage-tamagotchi/src/pages/settings/modules/hearing.vue @@ -163,7 +163,7 @@ async function setupAudioMonitoring() { if (recording) { audios.value.push(recording) - const provider = providersStore.getProviderInstance(activeTranscriptionProvider.value) as TranscriptionProvider + const provider = await providersStore.getProviderInstance>(activeTranscriptionProvider.value) if (!provider) { throw new Error('Failed to initialize speech provider') } diff --git a/apps/stage-tamagotchi/src/pages/settings/providers/openai-audio-speech.vue b/apps/stage-tamagotchi/src/pages/settings/providers/openai-audio-speech.vue index 7cb2a2753..a095a149a 100644 --- a/apps/stage-tamagotchi/src/pages/settings/providers/openai-audio-speech.vue +++ b/apps/stage-tamagotchi/src/pages/settings/providers/openai-audio-speech.vue @@ -35,7 +35,7 @@ const availableVoices = computed(() => { // Generate speech with ElevenLabs-specific parameters async function handleGenerateSpeech(input: string, voiceId: string, _useSSML: boolean) { - const provider = providersStore.getProviderInstance(providerId) as SpeechProvider + const provider = await providersStore.getProviderInstance>(providerId) if (!provider) { throw new Error('Failed to initialize speech provider') } diff --git a/apps/stage-tamagotchi/src/pages/settings/providers/openai-audio-transcription.vue b/apps/stage-tamagotchi/src/pages/settings/providers/openai-audio-transcription.vue index 3fc54c9af..5db6d2c80 100644 --- a/apps/stage-tamagotchi/src/pages/settings/providers/openai-audio-transcription.vue +++ b/apps/stage-tamagotchi/src/pages/settings/providers/openai-audio-transcription.vue @@ -22,7 +22,7 @@ const apiKeyConfigured = computed(() => !!providers.value[providerId]?.apiKey) // Generate speech with ElevenLabs-specific parameters async function handleGenerateTranscription(file: File) { - const provider = providersStore.getProviderInstance(providerId) as TranscriptionProvider + const provider = await providersStore.getProviderInstance>(providerId) if (!provider) { throw new Error('Failed to initialize speech provider') } diff --git a/apps/stage-web/src/components/Layouts/InteractiveArea.vue b/apps/stage-web/src/components/Layouts/InteractiveArea.vue index 9b14d13d5..ee969d909 100644 --- a/apps/stage-web/src/components/Layouts/InteractiveArea.vue +++ b/apps/stage-web/src/components/Layouts/InteractiveArea.vue @@ -119,7 +119,7 @@ watch(showMicrophoneSelect, async (value) => { watch([activeProvider, activeModel], async () => { if (activeProvider.value && activeModel.value) { - await discoverToolsCompatibility(activeModel.value, providersStore.getProviderInstance(activeProvider.value) as ChatProvider, []) + await discoverToolsCompatibility(activeModel.value, await providersStore.getProviderInstance(activeProvider.value), []) } }) diff --git a/apps/stage-web/src/components/Layouts/MobileInteractiveArea.vue b/apps/stage-web/src/components/Layouts/MobileInteractiveArea.vue index c853cf8dd..57742e21b 100644 --- a/apps/stage-web/src/components/Layouts/MobileInteractiveArea.vue +++ b/apps/stage-web/src/components/Layouts/MobileInteractiveArea.vue @@ -99,7 +99,7 @@ onAfterSend(async () => { watch([activeProvider, activeModel], async () => { if (activeProvider.value && activeModel.value) { - await discoverToolsCompatibility(activeModel.value, providersStore.getProviderInstance(activeProvider.value) as ChatProvider, []) + await discoverToolsCompatibility(activeModel.value, await providersStore.getProviderInstance(activeProvider.value), []) } }) diff --git a/apps/stage-web/src/pages/settings/modules/hearing.vue b/apps/stage-web/src/pages/settings/modules/hearing.vue index 8847d2298..113895c6f 100644 --- a/apps/stage-web/src/pages/settings/modules/hearing.vue +++ b/apps/stage-web/src/pages/settings/modules/hearing.vue @@ -163,7 +163,7 @@ async function setupAudioMonitoring() { if (recording) { audios.value.push(recording) - const provider = providersStore.getProviderInstance(activeTranscriptionProvider.value) as TranscriptionProvider + const provider = await providersStore.getProviderInstance>(activeTranscriptionProvider.value) if (!provider) { throw new Error('Failed to initialize speech provider') } diff --git a/apps/stage-web/src/pages/settings/providers/openai-audio-speech.vue b/apps/stage-web/src/pages/settings/providers/openai-audio-speech.vue index 7cb2a2753..a095a149a 100644 --- a/apps/stage-web/src/pages/settings/providers/openai-audio-speech.vue +++ b/apps/stage-web/src/pages/settings/providers/openai-audio-speech.vue @@ -35,7 +35,7 @@ const availableVoices = computed(() => { // Generate speech with ElevenLabs-specific parameters async function handleGenerateSpeech(input: string, voiceId: string, _useSSML: boolean) { - const provider = providersStore.getProviderInstance(providerId) as SpeechProvider + const provider = await providersStore.getProviderInstance>(providerId) if (!provider) { throw new Error('Failed to initialize speech provider') } diff --git a/apps/stage-web/src/pages/settings/providers/openai-audio-transcription.vue b/apps/stage-web/src/pages/settings/providers/openai-audio-transcription.vue index 3fc54c9af..5db6d2c80 100644 --- a/apps/stage-web/src/pages/settings/providers/openai-audio-transcription.vue +++ b/apps/stage-web/src/pages/settings/providers/openai-audio-transcription.vue @@ -22,7 +22,7 @@ const apiKeyConfigured = computed(() => !!providers.value[providerId]?.apiKey) // Generate speech with ElevenLabs-specific parameters async function handleGenerateTranscription(file: File) { - const provider = providersStore.getProviderInstance(providerId) as TranscriptionProvider + const provider = await providersStore.getProviderInstance>(providerId) if (!provider) { throw new Error('Failed to initialize speech provider') } diff --git a/packages/stage-ui/src/components/Menu/CharacterCard.vue b/packages/stage-ui/src/components/Menu/CharacterCard.vue index b0eb9e1a6..c35f106a3 100644 --- a/packages/stage-ui/src/components/Menu/CharacterCard.vue +++ b/packages/stage-ui/src/components/Menu/CharacterCard.vue @@ -117,15 +117,14 @@ const cssVars = computed(() => { {{ backgroundLabel }} -
+
@@ -135,7 +134,7 @@ const cssVars = computed(() => {
@@ -162,7 +161,7 @@ const cssVars = computed(() => {
-
+
{{ description }}
diff --git a/packages/stage-ui/src/stores/providers.ts b/packages/stage-ui/src/stores/providers.ts index ff43eb47c..400651f36 100644 --- a/packages/stage-ui/src/stores/providers.ts +++ b/packages/stage-ui/src/stores/providers.ts @@ -95,7 +95,9 @@ export interface ProviderMetadata { */ iconImage?: string defaultOptions?: () => Record - createProvider: (config: Record) => Promise< + createProvider: ( + config: Record + ) => | ChatProvider | ChatProviderWithExtraOptions | EmbedProvider @@ -104,7 +106,14 @@ export interface ProviderMetadata { | SpeechProviderWithExtraOptions | TranscriptionProvider | TranscriptionProviderWithExtraOptions - > + | Promise + | Promise + | Promise + | Promise + | Promise + | Promise + | Promise + | Promise capabilities: { listModels?: (config: Record) => Promise listVoices?: (config: Record) => Promise @@ -1689,7 +1698,16 @@ export const useProvidersStore = defineStore('providers', () => { }) // Function to get provider object by provider id - async function getProviderInstance(providerId: string) { + async function getProviderInstance(providerId: string): Promise { const config = providerCredentials.value[providerId] if (!config) throw new Error(`Provider credentials for ${providerId} not found`) @@ -1699,7 +1717,7 @@ export const useProvidersStore = defineStore('providers', () => { throw new Error(`Provider metadata for ${providerId} not found`) try { - return await metadata.createProvider(config) + return await metadata.createProvider(config) as R } catch (error) { console.error(`Error creating provider instance for ${providerId}:`, error)