feat: Add Azure AI Foundry provider for consciousness (#272)
This commit is contained in:
@@ -31,7 +31,7 @@ async function handleSend() {
|
||||
const providerConfig = providersStore.getProviderConfig(activeProvider.value)
|
||||
await send(messageInput.value, {
|
||||
model: activeModel.value,
|
||||
chatProvider: providersStore.getProviderInstance(activeProvider.value) as ChatProvider,
|
||||
chatProvider: await providersStore.getProviderInstance(activeProvider.value) as ChatProvider,
|
||||
providerConfig,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ async function generateTestSpeech() {
|
||||
return
|
||||
}
|
||||
|
||||
const provider = providersStore.getProviderInstance(activeSpeechProvider.value) as SpeechProviderWithExtraOptions<string, any>
|
||||
const provider = await providersStore.getProviderInstance(activeSpeechProvider.value) as SpeechProviderWithExtraOptions<string, any>
|
||||
if (!provider) {
|
||||
console.error('Failed to initialize speech provider')
|
||||
return
|
||||
|
||||
@@ -39,7 +39,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 SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
const provider = await providersStore.getProviderInstance(providerId) as SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
if (!provider) {
|
||||
throw new Error('Failed to initialize speech provider')
|
||||
}
|
||||
|
||||
@@ -47,7 +47,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 SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
const provider = await providersStore.getProviderInstance(providerId) as SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
if (!provider) {
|
||||
throw new Error('Failed to initialize speech provider')
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ watch([apiKeyConfigured, region], async () => {
|
||||
|
||||
// Generate speech with Microsoft-specific parameters
|
||||
async function handleGenerateSpeech(input: string, voiceId: string, useSSML: boolean) {
|
||||
const provider = providersStore.getProviderInstance(providerId) as SpeechProviderWithExtraOptions<string, UnMicrosoftOptions>
|
||||
const provider = await providersStore.getProviderInstance(providerId) as SpeechProviderWithExtraOptions<string, UnMicrosoftOptions>
|
||||
if (!provider) {
|
||||
throw new Error('Failed to initialize speech provider')
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ const availableVoices = computed(() => {
|
||||
})
|
||||
// Generate speech with Player2-specific parameters
|
||||
async function handleGenerateSpeech(input: string, voiceId: string, _useSSML: boolean) {
|
||||
const provider = providersStore.getProviderInstance(providerId) as SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
const provider = await providersStore.getProviderInstance(providerId) as SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
if (!provider) {
|
||||
throw new Error('Failed to initialize speech provider')
|
||||
}
|
||||
|
||||
@@ -45,7 +45,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 SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
const provider = await providersStore.getProviderInstance(providerId) as SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
if (!provider) {
|
||||
throw new Error('Failed to initialize speech provider')
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ const { transcribe: generate, terminate } = useWhisper(WhisperWorker, {
|
||||
const providerConfig = providersStore.getProviderConfig(activeProvider.value)
|
||||
|
||||
await send(res, {
|
||||
chatProvider: providersStore.getProviderInstance(activeProvider.value) as ChatProvider,
|
||||
chatProvider: await providersStore.getProviderInstance(activeProvider.value) as ChatProvider,
|
||||
model: activeModel.value,
|
||||
providerConfig,
|
||||
})
|
||||
@@ -56,7 +56,7 @@ async function handleSend() {
|
||||
const providerConfig = providersStore.getProviderConfig(activeProvider.value)
|
||||
|
||||
await send(messageInput.value, {
|
||||
chatProvider: providersStore.getProviderInstance(activeProvider.value) as ChatProvider,
|
||||
chatProvider: await providersStore.getProviderInstance(activeProvider.value) as ChatProvider,
|
||||
model: activeModel.value,
|
||||
providerConfig,
|
||||
})
|
||||
|
||||
@@ -42,7 +42,7 @@ async function handleSend() {
|
||||
const providerConfig = providersStore.getProviderConfig(activeProvider.value)
|
||||
|
||||
await send(messageInput.value, {
|
||||
chatProvider: providersStore.getProviderInstance(activeProvider.value) as ChatProvider,
|
||||
chatProvider: await providersStore.getProviderInstance(activeProvider.value) as ChatProvider,
|
||||
model: activeModel.value,
|
||||
providerConfig,
|
||||
})
|
||||
|
||||
@@ -81,7 +81,7 @@ async function generateTestSpeech() {
|
||||
return
|
||||
}
|
||||
|
||||
const provider = providersStore.getProviderInstance(activeSpeechProvider.value) as SpeechProviderWithExtraOptions<string, any>
|
||||
const provider = await providersStore.getProviderInstance(activeSpeechProvider.value) as SpeechProviderWithExtraOptions<string, any>
|
||||
if (!provider) {
|
||||
console.error('Failed to initialize speech provider')
|
||||
return
|
||||
|
||||
@@ -39,7 +39,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 SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
const provider = await providersStore.getProviderInstance(providerId) as SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
if (!provider) {
|
||||
throw new Error('Failed to initialize speech provider')
|
||||
}
|
||||
|
||||
@@ -0,0 +1,148 @@
|
||||
<script setup lang="ts">
|
||||
import type { RemovableRef } from '@vueuse/core'
|
||||
|
||||
import {
|
||||
ProviderAccountIdInput,
|
||||
ProviderAdvancedSettings,
|
||||
ProviderApiKeyInput,
|
||||
ProviderBasicSettings,
|
||||
ProviderSettingsContainer,
|
||||
ProviderSettingsLayout,
|
||||
} from '@proj-airi/stage-ui/components'
|
||||
import { useProvidersStore } from '@proj-airi/stage-ui/stores'
|
||||
import { storeToRefs } from 'pinia'
|
||||
import { computed, onMounted, watch } from 'vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
const { t } = useI18n()
|
||||
const router = useRouter()
|
||||
const providersStore = useProvidersStore()
|
||||
const { providers } = storeToRefs(providersStore) as { providers: RemovableRef<Record<string, any>> }
|
||||
|
||||
// Get provider metadata
|
||||
const providerId = 'azure-ai-foundry'
|
||||
const providerMetadata = computed(() => providersStore.getProviderMetadata(providerId))
|
||||
|
||||
// Use computed properties for settings
|
||||
const apiKey = computed({
|
||||
get: () => providers.value[providerId]?.apiKey || '',
|
||||
set: (value) => {
|
||||
if (!providers.value[providerId])
|
||||
providers.value[providerId] = {}
|
||||
|
||||
providers.value[providerId].apiKey = value
|
||||
},
|
||||
})
|
||||
|
||||
const resourceName = computed({
|
||||
get: () => providers.value[providerId]?.resourceName || '',
|
||||
set: (value) => {
|
||||
if (!providers.value[providerId])
|
||||
providers.value[providerId] = {}
|
||||
|
||||
providers.value[providerId].resourceName = value
|
||||
},
|
||||
})
|
||||
|
||||
const apiVersion = computed({
|
||||
get: () => providers.value[providerId]?.apiVersion || '',
|
||||
set: (value) => {
|
||||
if (!providers.value[providerId])
|
||||
providers.value[providerId] = {}
|
||||
|
||||
providers.value[providerId].apiVersion = value
|
||||
},
|
||||
})
|
||||
|
||||
const modelId = computed({
|
||||
get: () => providers.value[providerId]?.modelId || '',
|
||||
set: (value) => {
|
||||
if (!providers.value[providerId])
|
||||
providers.value[providerId] = {}
|
||||
|
||||
providers.value[providerId].modelId = value
|
||||
},
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
// Initialize provider if it doesn't exist
|
||||
if (!providers.value[providerId]) {
|
||||
providers.value[providerId] = {}
|
||||
}
|
||||
|
||||
// Initialize refs with current values
|
||||
apiKey.value = providers.value[providerId]?.apiKey || ''
|
||||
resourceName.value = providers.value[providerId]?.resourceName || ''
|
||||
apiVersion.value = providers.value[providerId]?.apiVersion || ''
|
||||
modelId.value = providers.value[providerId]?.modelId || ''
|
||||
})
|
||||
|
||||
// Watch settings and update the provider configuration
|
||||
watch([apiKey, resourceName, apiVersion, modelId], () => {
|
||||
providers.value[providerId] = {
|
||||
...providers.value[providerId],
|
||||
apiKey: apiKey.value,
|
||||
resourceName: resourceName.value,
|
||||
apiVersion: apiVersion.value,
|
||||
modelId: modelId.value,
|
||||
}
|
||||
})
|
||||
|
||||
function handleResetSettings() {
|
||||
providers.value[providerId] = {}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ProviderSettingsLayout
|
||||
:provider-name="providerMetadata?.localizedName || 'Azure OpenAI'"
|
||||
:provider-icon="providerMetadata?.icon"
|
||||
:on-back="() => router.back()"
|
||||
>
|
||||
<ProviderSettingsContainer>
|
||||
<ProviderBasicSettings
|
||||
:title="t('settings.pages.providers.common.section.basic.title')"
|
||||
:description="t('settings.pages.providers.common.section.basic.description')"
|
||||
:on-reset="handleResetSettings"
|
||||
>
|
||||
<ProviderApiKeyInput
|
||||
v-model="apiKey"
|
||||
:provider-name="providerMetadata?.localizedName || 'Azure OpenAI'"
|
||||
placeholder="..."
|
||||
required
|
||||
/>
|
||||
<ProviderAccountIdInput
|
||||
v-model="resourceName"
|
||||
label="Resouce name"
|
||||
placeholder="..."
|
||||
description="Prefix used in https://<prefix>.services.ai.azure.com"
|
||||
required
|
||||
/>
|
||||
<ProviderAccountIdInput
|
||||
v-model="modelId"
|
||||
label="Model id"
|
||||
placeholder="..."
|
||||
description="Model ID on Azure AI Foundry"
|
||||
required
|
||||
/>
|
||||
</ProviderBasicSettings>
|
||||
|
||||
<ProviderAdvancedSettings :title="t('settings.pages.providers.common.section.advanced.title')">
|
||||
<ProviderAccountIdInput
|
||||
v-model="apiVersion"
|
||||
label="API version"
|
||||
placeholder="e.g. 2025-04-01-preview"
|
||||
description="API version for snapshot of the models"
|
||||
/>
|
||||
</ProviderAdvancedSettings>
|
||||
</ProviderSettingsContainer>
|
||||
</ProviderSettingsLayout>
|
||||
</template>
|
||||
|
||||
<route lang="yaml">
|
||||
meta:
|
||||
layout: settings
|
||||
stageTransition:
|
||||
name: slide
|
||||
</route>
|
||||
@@ -47,7 +47,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 SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
const provider = await providersStore.getProviderInstance(providerId) as SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
if (!provider) {
|
||||
throw new Error('Failed to initialize speech provider')
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ watch([apiKeyConfigured, region], async () => {
|
||||
|
||||
// Generate speech with Microsoft-specific parameters
|
||||
async function handleGenerateSpeech(input: string, voiceId: string, useSSML: boolean) {
|
||||
const provider = providersStore.getProviderInstance(providerId) as SpeechProviderWithExtraOptions<string, UnMicrosoftOptions>
|
||||
const provider = await providersStore.getProviderInstance(providerId) as SpeechProviderWithExtraOptions<string, UnMicrosoftOptions>
|
||||
if (!provider) {
|
||||
throw new Error('Failed to initialize speech provider')
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ const availableVoices = computed(() => {
|
||||
|
||||
// Generate speech with Player2-specific parameters
|
||||
async function handleGenerateSpeech(input: string, voiceId: string, _useSSML: boolean) {
|
||||
const provider = providersStore.getProviderInstance(providerId) as SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
const provider = await providersStore.getProviderInstance(providerId) as SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
if (!provider) {
|
||||
throw new Error('Failed to initialize speech provider')
|
||||
}
|
||||
|
||||
@@ -45,7 +45,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 SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
const provider = await providersStore.getProviderInstance(providerId) as SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
if (!provider) {
|
||||
throw new Error('Failed to initialize speech provider')
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ async function handleSpeechGeneration(ctx: { data: string }) {
|
||||
}
|
||||
|
||||
// TODO: UnElevenLabsOptions
|
||||
const provider = providersStore.getProviderInstance(activeSpeechProvider.value) as SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
const provider = await providersStore.getProviderInstance(activeSpeechProvider.value) as SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>
|
||||
if (!provider) {
|
||||
console.error('Failed to initialize speech provider')
|
||||
return
|
||||
|
||||
@@ -20,6 +20,7 @@ import type {
|
||||
import { computedAsync, useLocalStorage } from '@vueuse/core'
|
||||
import {
|
||||
createAnthropic,
|
||||
createAzure,
|
||||
createDeepSeek,
|
||||
createFireworks,
|
||||
createGoogleGenerativeAI,
|
||||
@@ -94,7 +95,7 @@ export interface ProviderMetadata {
|
||||
*/
|
||||
iconImage?: string
|
||||
defaultOptions?: () => Record<string, unknown>
|
||||
createProvider: (config: Record<string, unknown>) =>
|
||||
createProvider: (config: Record<string, unknown>) => Promise<
|
||||
| ChatProvider
|
||||
| ChatProviderWithExtraOptions
|
||||
| EmbedProvider
|
||||
@@ -103,6 +104,7 @@ export interface ProviderMetadata {
|
||||
| SpeechProviderWithExtraOptions
|
||||
| TranscriptionProvider
|
||||
| TranscriptionProviderWithExtraOptions
|
||||
>
|
||||
capabilities: {
|
||||
listModels?: (config: Record<string, unknown>) => Promise<ModelInfo[]>
|
||||
listVoices?: (config: Record<string, unknown>) => Promise<VoiceInfo[]>
|
||||
@@ -185,7 +187,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'https://openrouter.ai/api/v1/',
|
||||
}),
|
||||
createProvider: config => createOpenRouter((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createOpenRouter((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return fetchOpenRouterModels(config)
|
||||
@@ -216,7 +218,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
description: 'https://github.com/huggingface/candle',
|
||||
icon: 'i-lobe-icons:huggingface',
|
||||
defaultOptions: () => ({}),
|
||||
createProvider: config => createOpenAI((config.baseUrl as string).trim()),
|
||||
createProvider: async config => createOpenAI((config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -264,7 +266,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
description: 'https://github.com/huggingface/candle',
|
||||
icon: 'i-lobe-icons:huggingface',
|
||||
defaultOptions: () => ({}),
|
||||
createProvider: config => createOpenAI((config.baseUrl as string).trim()),
|
||||
createProvider: async config => createOpenAI((config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -319,7 +321,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
description: 'https://github.com/moeru-ai/xsai-transformers',
|
||||
icon: 'i-lobe-icons:huggingface',
|
||||
defaultOptions: () => ({}),
|
||||
createProvider: config => createOpenAI((config.baseUrl as string).trim()),
|
||||
createProvider: async config => createOpenAI((config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -374,7 +376,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
description: 'https://github.com/moeru-ai/xsai-transformers',
|
||||
icon: 'i-lobe-icons:huggingface',
|
||||
defaultOptions: () => ({}),
|
||||
createProvider: config => createOpenAI((config.baseUrl as string).trim()),
|
||||
createProvider: async config => createOpenAI((config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -415,7 +417,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'http://localhost:11434/v1/',
|
||||
}),
|
||||
createProvider: config => createOllama((config.baseUrl as string).trim()),
|
||||
createProvider: async config => createOllama((config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -456,7 +458,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'http://localhost:11434/v1/',
|
||||
}),
|
||||
createProvider: config => createOllama((config.baseUrl as string).trim()),
|
||||
createProvider: async config => createOllama((config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -488,7 +490,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
descriptionKey: 'settings.pages.providers.provider.vllm.description',
|
||||
description: 'vllm.ai',
|
||||
iconColor: 'i-lobe-icons:vllm',
|
||||
createProvider: config => createOllama((config.baseUrl as string).trim()),
|
||||
createProvider: async config => createOllama((config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async () => {
|
||||
return [
|
||||
@@ -555,7 +557,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'https://api.openai.com/v1/',
|
||||
}),
|
||||
createProvider: config => createOpenAI((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createOpenAI((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -590,7 +592,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'https://api.openai.com/v1/',
|
||||
}),
|
||||
createProvider: config => createOpenAI((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createOpenAI((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -695,7 +697,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'https://api.openai.com/v1/',
|
||||
}),
|
||||
createProvider: config => createOpenAI((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createOpenAI((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -718,6 +720,43 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
},
|
||||
},
|
||||
},
|
||||
'azure-ai-foundry': {
|
||||
id: 'azure-ai-foundry',
|
||||
category: 'chat',
|
||||
tasks: ['text-generation'],
|
||||
nameKey: 'settings.pages.providers.provider.azure_ai_foundry.title',
|
||||
name: 'Azure AI Foundry',
|
||||
descriptionKey: 'settings.pages.providers.provider.azure_ai_foundry.description',
|
||||
description: 'azure.com',
|
||||
icon: 'i-lobe-icons:microsoft',
|
||||
defaultOptions: () => ({}),
|
||||
createProvider: async (config) => {
|
||||
return await createAzure({
|
||||
apiKey: async () => (config.apiKey as string).trim(),
|
||||
resourceName: config.resourceName as string,
|
||||
apiVersion: config.apiVersion as string,
|
||||
})
|
||||
},
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return [{ id: config.modelId }].map((model) => {
|
||||
return {
|
||||
id: model.id as string,
|
||||
name: model.id as string,
|
||||
provider: 'azure-ai-foundry',
|
||||
description: '',
|
||||
contextLength: 0,
|
||||
deprecated: false,
|
||||
} satisfies ModelInfo
|
||||
})
|
||||
},
|
||||
},
|
||||
validators: {
|
||||
validateProviderConfig: (config) => {
|
||||
return !!config.apiKey && !!config.resourceName && !!config.modelId
|
||||
},
|
||||
},
|
||||
},
|
||||
'anthropic': {
|
||||
id: 'anthropic',
|
||||
category: 'chat',
|
||||
@@ -730,7 +769,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'https://api.anthropic.com/v1/',
|
||||
}),
|
||||
createProvider: config => createAnthropic((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createAnthropic((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async () => {
|
||||
return [
|
||||
@@ -803,7 +842,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'https://generativelanguage.googleapis.com/v1beta/openai/',
|
||||
}),
|
||||
createProvider: config => createGoogleGenerativeAI((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createGoogleGenerativeAI((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -835,7 +874,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
descriptionKey: 'settings.pages.providers.provider.xai.description',
|
||||
description: 'x.ai',
|
||||
icon: 'i-lobe-icons:xai',
|
||||
createProvider: config => createXAI((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createXAI((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -870,7 +909,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'https://api.deepseek.com/',
|
||||
}),
|
||||
createProvider: config => createDeepSeek((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createDeepSeek((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -909,7 +948,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
stability: 0.5,
|
||||
},
|
||||
}),
|
||||
createProvider: config => createUnElevenLabs((config.apiKey as string).trim(), (config.baseUrl as string).trim()) as SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>,
|
||||
createProvider: async config => createUnElevenLabs((config.apiKey as string).trim(), (config.baseUrl as string).trim()) as SpeechProviderWithExtraOptions<string, UnElevenLabsOptions>,
|
||||
capabilities: {
|
||||
listModels: async () => {
|
||||
return elevenLabsModels.map((model) => {
|
||||
@@ -976,7 +1015,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'https://unspeech.hyp3r.link/v1/',
|
||||
}),
|
||||
createProvider: config => createUnMicrosoft((config.apiKey as string).trim(), (config.baseUrl as string).trim()) as SpeechProviderWithExtraOptions<string, UnMicrosoftOptions>,
|
||||
createProvider: async config => createUnMicrosoft((config.apiKey as string).trim(), (config.baseUrl as string).trim()) as SpeechProviderWithExtraOptions<string, UnMicrosoftOptions>,
|
||||
capabilities: {
|
||||
listModels: async () => {
|
||||
return [
|
||||
@@ -1027,7 +1066,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'https://unspeech.hyp3r.link/v1/',
|
||||
}),
|
||||
createProvider: config => createUnAlibabaCloud((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createUnAlibabaCloud((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listVoices: async (config) => {
|
||||
const provider = createUnAlibabaCloud((config.apiKey as string).trim(), (config.baseUrl as string).trim()) as VoiceProviderWithExtraOptions<UnAlibabaCloudOptions>
|
||||
@@ -1086,7 +1125,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'https://unspeech.hyp3r.link/v1/',
|
||||
}),
|
||||
createProvider: config => createUnVolcengine((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createUnVolcengine((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listVoices: async (config) => {
|
||||
const provider = createUnVolcengine((config.apiKey as string).trim(), (config.baseUrl as string).trim()) as VoiceProviderWithExtraOptions<UnVolcengineOptions>
|
||||
@@ -1134,7 +1173,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
descriptionKey: 'settings.pages.providers.provider.together.description',
|
||||
description: 'together.ai',
|
||||
iconColor: 'i-lobe-icons:together',
|
||||
createProvider: config => createTogetherAI((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createTogetherAI((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -1166,7 +1205,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
descriptionKey: 'settings.pages.providers.provider.novita.description',
|
||||
description: 'novita.ai',
|
||||
iconColor: 'i-lobe-icons:novita',
|
||||
createProvider: config => createNovita((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createNovita((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -1198,7 +1237,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
descriptionKey: 'settings.pages.providers.provider.fireworks.description',
|
||||
description: 'fireworks.ai',
|
||||
icon: 'i-lobe-icons:fireworks',
|
||||
createProvider: config => createFireworks((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createFireworks((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -1233,7 +1272,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'https://api.featherless.ai/v1/',
|
||||
}),
|
||||
createProvider: config => createOpenAI((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createOpenAI((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -1266,7 +1305,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
descriptionKey: 'settings.pages.providers.provider.cloudflare-workers-ai.description',
|
||||
description: 'cloudflare.com',
|
||||
iconColor: 'i-lobe-icons:cloudflare',
|
||||
createProvider: config => createWorkersAI((config.apiKey as string).trim(), config.accountId as string),
|
||||
createProvider: async config => createWorkersAI((config.apiKey as string).trim(), config.accountId as string),
|
||||
capabilities: {
|
||||
listModels: async () => {
|
||||
return []
|
||||
@@ -1290,7 +1329,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'https://api.perplexity.ai',
|
||||
}),
|
||||
createProvider: config => createPerplexity((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createPerplexity((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async () => {
|
||||
return [
|
||||
@@ -1347,7 +1386,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
descriptionKey: 'settings.pages.providers.provider.mistral.description',
|
||||
description: 'mistral.ai',
|
||||
iconColor: 'i-lobe-icons:mistral',
|
||||
createProvider: config => createMistral((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createMistral((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -1379,7 +1418,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
descriptionKey: 'settings.pages.providers.provider.moonshot.description',
|
||||
description: 'moonshot.ai',
|
||||
icon: 'i-lobe-icons:moonshot',
|
||||
createProvider: config => createMoonshot((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
createProvider: async config => createMoonshot((config.apiKey as string).trim(), (config.baseUrl as string).trim()),
|
||||
capabilities: {
|
||||
listModels: async (config) => {
|
||||
return (await listModels({
|
||||
@@ -1452,7 +1491,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
defaultOptions: () => ({
|
||||
baseUrl: 'http://localhost:4315/v1/',
|
||||
}),
|
||||
createProvider: config => createPlayer2((config.baseUrl as string).trim(), 'airi'),
|
||||
createProvider: async config => createPlayer2((config.baseUrl as string).trim(), 'airi'),
|
||||
capabilities: {
|
||||
listVoices: async () => {
|
||||
return await fetch('http://localhost:4315/v1/tts/voices').then(res => res.json()).then(({ voices }) => (voices as { id: string, language: 'american_english' | 'british_english' | 'japanese' | 'mandarin_chinese' | 'spanish' | 'french' | 'hindi' | 'italian' | 'brazilian_portuguese', name: string, gender: string }[]).map(({ id, language, name, gender }) => (
|
||||
@@ -1650,7 +1689,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
})
|
||||
|
||||
// Function to get provider object by provider id
|
||||
function getProviderInstance(providerId: string) {
|
||||
async function getProviderInstance(providerId: string) {
|
||||
const config = providerCredentials.value[providerId]
|
||||
if (!config)
|
||||
throw new Error(`Provider credentials for ${providerId} not found`)
|
||||
@@ -1660,7 +1699,7 @@ export const useProvidersStore = defineStore('providers', () => {
|
||||
throw new Error(`Provider metadata for ${providerId} not found`)
|
||||
|
||||
try {
|
||||
return metadata.createProvider(config)
|
||||
return await metadata.createProvider(config)
|
||||
}
|
||||
catch (error) {
|
||||
console.error(`Error creating provider instance for ${providerId}:`, error)
|
||||
|
||||
Reference in New Issue
Block a user