fix(provider-transformers|stage-ui|stage-web): fix embed error, added vector tests, implemented provider config

Signed-off-by: Neko Ayaka <neko@ayaka.moe>
This commit is contained in:
Neko Ayaka
2025-02-28 01:42:49 +08:00
parent 49be0b29b9
commit ab893fc147
17 changed files with 147 additions and 57 deletions
+3
View File
@@ -58,6 +58,8 @@
"@xsai/stream-text": "catalog:",
"@xsai/utils-chat": "catalog:",
"defu": "^6.1.4",
"drizzle-kit": "^0.30.5",
"drizzle-orm": "^0.40.0",
"jszip": "^3.10.1",
"nprogress": "^0.2.0",
"ofetch": "^1.4.1",
@@ -92,6 +94,7 @@
"@iconify-json/svg-spinners": "^1.2.2",
"@iconify/utils": "^2.3.0",
"@intlify/unplugin-vue-i18n": "^6.0.3",
"@proj-airi/drizzle-duckdb-wasm": "workspace:^",
"@proj-airi/elevenlabs": "workspace:^",
"@proj-airi/lobe-icons": "workspace:^",
"@proj-airi/provider-transformers": "workspace:^",
@@ -1,8 +1,10 @@
<script setup lang="ts">
import { Collapsable } from '@proj-airi/stage-ui/components'
import { useProvidersStore } from '@proj-airi/stage-ui/stores'
import { toJsonSchema } from '@valibot/to-json-schema'
import { storeToRefs } from 'pinia'
import { description, object, optional, pipe, record, string, title } from 'valibot'
import { computed, ref } from 'vue'
import { computed } from 'vue'
interface ModelProvider {
id: string
@@ -158,13 +160,13 @@ const providers = computed<ModelProvider[]>(() => [
},
])
const providerValues = ref<Record<string, Record<string, string>>>({})
const { providers: providerValues } = storeToRefs(useProvidersStore())
function getFieldValue(providerId: string, fieldName: string): string {
function getFieldValue(providerId: string, fieldName: string): unknown {
return providerValues.value[providerId]?.[fieldName] || ''
}
function setFieldValue(providerId: string, fieldName: string, value: string) {
function setFieldValue(providerId: string, fieldName: string, value: unknown) {
if (!providerValues.value[providerId]) {
providerValues.value[providerId] = {}
}
@@ -176,7 +178,7 @@ function getRecordEntries(providerId: string, fieldName: string): Array<[string,
if (!value)
return [['', '']]
try {
return Object.entries(JSON.parse(value))
return Object.entries(value)
}
catch {
return [['', '']]
@@ -191,7 +193,7 @@ function setRecordValue(providerId: string, fieldName: string, entries: Array<[s
}
const record = Object.fromEntries(validEntries)
setFieldValue(providerId, fieldName, JSON.stringify(record))
setFieldValue(providerId, fieldName, record)
}
function addRecordEntry(entries: Array<[string, string]>) {
+2 -2
View File
@@ -53,8 +53,8 @@ export default defineConfig({
resolve: {
alias: {
'@proj-airi/stage-ui': resolve(join(import.meta.dirname, '..', '..', 'packages', 'stage-ui', 'dist')),
'@proj-airi/stage-ui/stores': resolve(join(import.meta.dirname, '..', '..', 'packages', 'stage-ui', 'dist', 'stores')),
'@proj-airi/stage-ui': resolve(join(import.meta.dirname, '..', '..', 'packages', 'stage-ui', 'src')),
'@proj-airi/stage-ui/stores': resolve(join(import.meta.dirname, '..', '..', 'packages', 'stage-ui', 'src', 'stores')),
},
},
+2
View File
@@ -88,6 +88,7 @@ words:
- neuri
- Neuro
- Neuro-sama
- nomic
- novita
- nuxi
- nuxt
@@ -131,6 +132,7 @@ words:
- superjson
- tamagotchi
- taze
- tolist
- tresjs
- typeschema
- unhead
@@ -220,4 +220,12 @@ describe('drizzle with duckdb wasm in browser', { timeout: 10000 }, async () =>
expect(await db2.execute('SHOW TABLES')).toEqual([{ name: 'test' }])
expect(await db2.execute('SELECT * FROM test')).toEqual([{ v: 1 }, { v: 2 }, { v: 3 }])
})
it('should create a table with a float array column', async () => {
const db = drizzle({ connection: { bundles: getImportUrlBundles() } })
await db.execute('CREATE TABLE test (v FLOAT[26880], v2 text)')
await db.execute('INSERT INTO test VALUES (1, 2, 3, 4, "test")')
const res = await db.execute('SELECT * FROM test')
expect(res).toEqual([{ v: [1, 2, 3, 4], v2: 'test' }])
})
})
@@ -104,4 +104,12 @@ describe('drizzle with duckdb wasm in node', { timeout: 10000 }, async () => {
expect(await db2.execute('SHOW TABLES')).toEqual([{ name: 'test' }])
expect(await db2.execute('SELECT * FROM test')).toEqual([{ v: 1 }, { v: 2 }, { v: 3 }])
})
it('should create a table with a float array column', async () => {
const db = drizzle({ connection: { bundles: getBundles() } })
await db.execute('CREATE TABLE vector_test_table (v FLOAT[26880], v2 text)')
await db.execute(`INSERT INTO vector_test_table VALUES (${JSON.stringify(Array.from({ length: 26880 }).fill(1))}, 'text')`)
const res = await db.execute('SELECT * FROM vector_test_table')
expect(res).toEqual([{ v: Array.from({ length: 26880 }).fill(1), v2: 'text' }])
})
})
+13 -7
View File
@@ -1,23 +1,27 @@
import type { CreateProviderOptions, EmbedProviderWithExtraOptions } from '@xsai-ext/shared-providers'
import type { EmbedResponse } from '@xsai/embed'
import type { CommonRequestOptions } from '@xsai/shared'
import type { LoadOptions, WorkerMessageEvent } from './types'
import type { LoadOptionProgressCallback, LoadOptions, WorkerMessageEvent } from './types'
import { merge } from '@xsai-ext/shared-providers'
import defu from 'defu'
export type Loadable<P, T = string, T2 = undefined> = P & {
loadEmbed: (model: (string & {}) | T, options?: T2) => Promise<void>
terminateEmbed: () => void
}
export function createEmbedProvider<T extends string, T2 extends Omit<CommonRequestOptions, 'baseURL' | 'model'> & LoadOptions>(createOptions: CreateProviderOptions): Loadable<EmbedProviderWithExtraOptions<T, T2>, T, T2> {
function createEmbedProvider<T extends string, T2 extends Omit<CommonRequestOptions, 'baseURL' | 'model'> & LoadOptions>(createOptions: CreateProviderOptions): Loadable<EmbedProviderWithExtraOptions<T, T2>, T, T2> {
let worker: Worker
let isReady = false
function loadModel(model: (string & {}) | T, options: T2) {
function loadModel(model: (string & {}) | T, options?: T2) {
return new Promise<void>((resolve, reject) => {
const onProgress = options.onProgress
delete options.onProgress
let onProgress: LoadOptionProgressCallback | undefined
if (options != null && 'onProgress' in options && options.onProgress != null) {
onProgress = options?.onProgress
delete options?.onProgress
}
try {
const workerURL = new URL(createOptions.baseURL)
@@ -95,18 +99,20 @@ export function createEmbedProvider<T extends string, T2 extends Omit<CommonRequ
break
case 'extractResult':
resultDone = true
// eslint-disable-next-line no-case-declarations
const result = { data: [{ embedding: event.data.data.output.data, index: 0, object: 'embedding' }], model, object: 'list', usage: { prompt_tokens: 0, total_tokens: 0 } } satisfies EmbedResponse
// eslint-disable-next-line no-case-declarations
const encoder = new TextEncoder()
resolve(new Response(encoder.encode(JSON.stringify(result))))
break
}
})
if (!errored && !resultDone)
worker.postMessage({ type: 'extract', data: { text, options: body as any } } satisfies WorkerMessageEvent)
worker.postMessage({ type: 'extract', data: { text, options: defu<LoadOptions, LoadOptions[]>(options, { pooling: 'mean', normalize: true }) } } satisfies WorkerMessageEvent)
})
})
},
@@ -123,6 +129,6 @@ export function createEmbedProvider<T extends string, T2 extends Omit<CommonRequ
export function createTransformers(options: { embedWorkerURL: string }) {
return merge(
createEmbedProvider<'Xenova/all-MiniLM-L6-v2', Omit<CreateProviderOptions, 'baseURL'> & LoadOptions>({ baseURL: `xsai-provider-ext:///?worker-url=${options.embedWorkerURL}&other=` }),
createEmbedProvider<'Xenova/all-MiniLM-L6-v2', Omit<CreateProviderOptions, 'baseURL'> & LoadOptions>({ baseURL: `xsai-provider-ext:///?worker-url=${options.embedWorkerURL}&other=true` }),
)
}
@@ -6,7 +6,7 @@ export enum MessageStatus {
Ready = 'ready',
}
export type LoadOptions = Omit<PretrainedOptions & ModelSpecificPretrainedOptions, 'progress_callback'> & { onProgress?: LoadOptionProgressCallback }
export type LoadOptions = Omit<PretrainedOptions & ModelSpecificPretrainedOptions, 'progress_callback'> & { onProgress?: LoadOptionProgressCallback } & FeatureExtractionPipelineOptions
export type LoadOptionProgressCallback = (progress: ProgressInfo) => void | Promise<void>
export type { ProgressInfo }
@@ -37,7 +37,8 @@ async function load(modelId: string, options?: Omit<PipelineOptionsFrom<typeof p
async function extract(text: string | string[], options?: FeatureExtractionPipelineOptions) {
const result = await embed(text, options)
self.postMessage({ type: 'extractResult', data: { input: { text, options }, output: { data: Array.from(result.data), dims: result.dims } } } satisfies WorkerMessageEvent)
const resultArray = result.tolist()
self.postMessage({ type: 'extractResult', data: { input: { text, options }, output: { data: Array.from(resultArray[0] || []), dims: result.dims } } } satisfies WorkerMessageEvent)
}
self.addEventListener('message', (event: MessageEvent<WorkerMessageEvent>) => {
+4 -1
View File
@@ -52,6 +52,9 @@
"typecheck": "vue-tsc --noEmit"
},
"devDependencies": {
"@electron-toolkit/preload": "^3.0.1"
"@electron-toolkit/preload": "^3.0.1",
"@proj-airi/provider-transformers": "workspace:^",
"@proj-airi/utils-transformers": "workspace:^",
"@xsai/embed": "catalog:"
}
}
@@ -1,9 +1,15 @@
<script setup lang="ts">
import type { ElectronAPI } from '@electron-toolkit/preload'
import type { DuckDBWasmDrizzleDatabase } from '@proj-airi/drizzle-duckdb-wasm'
import type { Emotion } from '../../constants/emotions'
import { drizzle } from '@proj-airi/drizzle-duckdb-wasm'
// import { createTransformers } from '@proj-airi/provider-transformers'
// import embedWorkerURL from '@proj-airi/provider-transformers/worker?worker&url'
// import { embed } from '@xsai/embed'
import { generateSpeech } from '@xsai/generate-speech'
import { createUnElevenLabs } from '@xsai/providers'
import { sql } from 'drizzle-orm'
import { storeToRefs } from 'pinia'
import { onMounted, onUnmounted, ref } from 'vue'
import { useI18n } from 'vue-i18n'
@@ -22,20 +28,18 @@ import VRMScene from '../Scenes/VRM.vue'
import '../../utils/live2d-zip-loader'
withDefaults(defineProps<{
paused?: boolean
}>(), {
paused: false,
})
withDefaults(defineProps<{ paused?: boolean }>(), { paused: false })
const db = ref<DuckDBWasmDrizzleDatabase>()
// const transformersProvider = createTransformers({ embedWorkerURL })
const vrmViewerRef = ref<{ setExpression: (expression: string) => void }>()
const motion = ref('')
const { stageView, elevenLabsApiKey, elevenlabsVoiceEnglish, elevenlabsVoiceJapanese } = storeToRefs(useSettings())
const { mouthOpenSize } = storeToRefs(useSpeakingStore())
const { audioContext, calculateVolume } = useAudioContext()
const { onBeforeMessageComposed, onBeforeSend, onTokenLiteral, onTokenSpecial, onStreamEnd, streamingMessage } = useChatStore()
const { onBeforeMessageComposed, onBeforeSend, onTokenLiteral, onTokenSpecial, onStreamEnd, streamingMessage, onAssistantResponseEnd } = useChatStore()
const { process } = useMarkdown()
const { locale } = useI18n()
@@ -184,6 +188,15 @@ onStreamEnd(async () => {
await delaysQueue.add(llmInferenceEndToken)
})
onAssistantResponseEnd(async (_message) => {
// const res = await embed({
// ...transformersProvider.embed('Xenova/nomic-embed-text-v1'),
// input: message,
// })
// await db.value?.execute(`INSERT INTO memory_test (vec) VALUES (${JSON.stringify(res.embedding)});`)
})
onUnmounted(() => {
lipSyncStarted.value = false
@@ -207,6 +220,11 @@ onMounted(() => {
motion.value = EmotionThinkMotionName
})
})
onMounted(async () => {
db.value = drizzle('duckdb-wasm://?bundles=import-url')
await db.value.execute(sql`CREATE TABLE memory_test (vec FLOAT[768]);`)
})
</script>
<template>
+17 -7
View File
@@ -1,19 +1,19 @@
import type { AssistantMessage, Message } from '@xsai/shared-chat'
import { defineStore, storeToRefs } from 'pinia'
import { ref } from 'vue'
import { ref, toRaw } from 'vue'
import { useI18n } from 'vue-i18n'
import { useLlmmarkerParser } from '../composables/llmmarkerParser'
import SystemPromptV2 from '../constants/prompts/system-v2'
import { useLLM } from '../stores/llm'
import { useSettings } from '../stores/settings'
import { useProvidersStore } from '../stores/providers'
import { asyncIteratorFromReadableStream } from '../utils/iterator'
export const useChatStore = defineStore('chat', () => {
const { stream } = useLLM()
const { t } = useI18n()
const { openAiApiBaseURL, openAiApiKey, openAiModel } = storeToRefs(useSettings())
const { providers: providerValues } = storeToRefs(useProvidersStore())
const onBeforeMessageComposedHooks = ref<Array<(message: string) => Promise<void>>>([])
const onAfterMessageComposedHooks = ref<Array<(message: string) => Promise<void>>>([])
@@ -22,6 +22,7 @@ export const useChatStore = defineStore('chat', () => {
const onTokenLiteralHooks = ref<Array<(literal: string) => Promise<void>>>([])
const onTokenSpecialHooks = ref<Array<(special: string) => Promise<void>>>([])
const onStreamEndHooks = ref<Array<() => Promise<void>>>([])
const onAssistantResponseEndHooks = ref<Array<(message: string) => Promise<void>>>([])
function onBeforeMessageComposed(cb: (message: string) => Promise<void>) {
onBeforeMessageComposedHooks.value.push(cb)
@@ -51,6 +52,10 @@ export const useChatStore = defineStore('chat', () => {
onStreamEndHooks.value.push(cb)
}
function onAssistantResponseEnd(cb: (message: string) => Promise<void>) {
onAssistantResponseEndHooks.value.push(cb)
}
const messages = ref<Array<Message>>([
SystemPromptV2(
t('prompt.prefix'),
@@ -73,15 +78,15 @@ export const useChatStore = defineStore('chat', () => {
}
const {
baseUrl = openAiApiBaseURL.value,
apiKey = openAiApiKey.value,
model = openAiModel.value,
baseUrl = providerValues.value['openrouter-ai']?.baseUrl as string | undefined || '',
apiKey = providerValues.value['openrouter-ai']?.apiKey as string | undefined || '',
model = providerValues.value['openrouter-ai']?.model as { id: string } | undefined || { id: 'openai/gpt-4o-mini' },
} = options ?? { }
streamingMessage.value = { role: 'assistant', content: '' }
messages.value.push({ role: 'user', content: sendingMessage })
messages.value.push(streamingMessage.value)
const newMessages = messages.value.slice(0, messages.value.length - 1)
const newMessages = messages.value.slice(0, messages.value.length - 1).map(msg => toRaw(msg))
for (const hook of onAfterMessageComposedHooks.value) {
await hook(sendingMessage)
@@ -125,6 +130,10 @@ export const useChatStore = defineStore('chat', () => {
await hook()
}
for (const hook of onAssistantResponseEndHooks.value) {
await hook(fullText)
}
// eslint-disable-next-line no-console
console.debug('LLM output:', fullText)
}
@@ -140,5 +149,6 @@ export const useChatStore = defineStore('chat', () => {
onTokenLiteral,
onTokenSpecial,
onStreamEnd,
onAssistantResponseEnd,
}
})
+1
View File
@@ -1,4 +1,5 @@
export * from './audio'
export * from './chat'
export * from './llm'
export * from './providers'
export * from './settings'
+10
View File
@@ -0,0 +1,10 @@
import { useLocalStorage } from '@vueuse/core'
import { defineStore } from 'pinia'
export const useProvidersStore = defineStore('providers', () => {
const providers = useLocalStorage<Record<string, Record<string, unknown>>>('settings/credentials/providers', {})
return {
providers,
}
})
+2 -1
View File
@@ -10,7 +10,8 @@
"moduleResolution": "Bundler",
"resolveJsonModule": true,
"types": [
"vitest"
"vitest",
"vite/client"
],
"allowJs": true,
"strict": true,
+41 -23
View File
@@ -179,7 +179,7 @@ importers:
version: 0.8.2
'@gcornut/valibot-json-schema':
specifier: ^0.42.0
version: 0.42.0(esbuild@0.25.0)(typescript@5.7.3)
version: 0.42.0(esbuild@0.24.2)(typescript@5.7.3)
'@huggingface/transformers':
specifier: ^3.3.3
version: 3.3.3
@@ -248,7 +248,7 @@ importers:
version: 2.10.3
'@typeschema/valibot':
specifier: ^0.14.0
version: 0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.25.0)(typescript@5.7.3))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.9(typescript@5.7.3))
version: 0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.24.2)(typescript@5.7.3))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.9(typescript@5.7.3))
'@unhead/vue':
specifier: ^2.0.0-alpha.27
version: 2.0.0-alpha.27(vue@3.5.13(typescript@5.7.3))
@@ -378,7 +378,7 @@ importers:
version: 2.3.0
'@intlify/unplugin-vue-i18n':
specifier: ^6.0.3
version: 6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.21.0(jiti@2.4.2))(rollup@4.34.8)(typescript@5.7.3)(vue-i18n@11.1.1(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))
version: 6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.21.0(jiti@2.4.2))(rollup@2.79.1)(typescript@5.7.3)(vue-i18n@11.1.1(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))
'@proj-airi/elevenlabs':
specifier: workspace:^
version: link:../../packages/elevenlabs
@@ -405,10 +405,10 @@ importers:
version: 5.2.1(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))
'@vue-macros/volar':
specifier: ^0.30.14
version: 0.30.14(rollup@4.34.8)(typescript@5.7.3)(vue-tsc@2.2.4(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3))
version: 0.30.14(rollup@2.79.1)(typescript@5.7.3)(vue-tsc@2.2.4(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3))
'@vueuse/motion':
specifier: ^2.2.6
version: 2.2.6(magicast@0.3.5)(rollup@4.34.8)(vue@3.5.13(typescript@5.7.3))
version: 2.2.6(magicast@0.3.5)(rollup@2.79.1)(vue@3.5.13(typescript@5.7.3))
electron:
specifier: ^34.3.0
version: 34.3.0
@@ -426,28 +426,28 @@ importers:
version: 3.2.0(unocss@66.1.0-beta.3(postcss@8.5.3)(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)))
unplugin-auto-import:
specifier: ^19.1.1
version: 19.1.1(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.34.8))(@vueuse/core@12.7.0(typescript@5.7.3))
version: 19.1.1(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@2.79.1))(@vueuse/core@12.7.0(typescript@5.7.3))
unplugin-vue-components:
specifier: ^28.4.1
version: 28.4.1(@babel/parser@7.26.7)(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.34.8))(vue@3.5.13(typescript@5.7.3))
version: 28.4.1(@babel/parser@7.26.7)(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@2.79.1))(vue@3.5.13(typescript@5.7.3))
unplugin-vue-macros:
specifier: ^2.14.4
version: 2.14.4(@vueuse/core@12.7.0(typescript@5.7.3))(esbuild@0.25.0)(rollup@4.34.8)(typescript@5.7.3)(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@2.2.4(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3))
version: 2.14.4(@vueuse/core@12.7.0(typescript@5.7.3))(esbuild@0.24.2)(rollup@2.79.1)(typescript@5.7.3)(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@2.2.4(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3))
unplugin-vue-markdown:
specifier: ^28.3.1
version: 28.3.1(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))
unplugin-vue-router:
specifier: ^0.11.2
version: 0.11.2(rollup@4.34.8)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))
version: 0.11.2(rollup@2.79.1)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))
vite-bundle-visualizer:
specifier: ^1.2.1
version: 1.2.1(rollup@4.34.8)
version: 1.2.1(rollup@2.79.1)
vite-plugin-pwa:
specifier: ^0.21.1
version: 0.21.1(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(workbox-build@7.3.0)(workbox-window@7.3.0)
vite-plugin-vue-devtools:
specifier: ^7.7.2
version: 7.7.2(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.34.8))(rollup@4.34.8)(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))
version: 7.7.2(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@2.79.1))(rollup@2.79.1)(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))
vite-plugin-vue-layouts:
specifier: ^0.11.0
version: 0.11.0(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))
@@ -465,7 +465,7 @@ importers:
version: 0.8.2
'@gcornut/valibot-json-schema':
specifier: ^0.42.0
version: 0.42.0(esbuild@0.24.2)(typescript@5.7.3)
version: 0.42.0(esbuild@0.25.0)(typescript@5.7.3)
'@huggingface/transformers':
specifier: ^3.3.3
version: 3.3.3
@@ -537,7 +537,7 @@ importers:
version: 2.10.3
'@typeschema/valibot':
specifier: ^0.14.0
version: 0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.24.2)(typescript@5.7.3))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.9(typescript@5.7.3))
version: 0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.25.0)(typescript@5.7.3))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.9(typescript@5.7.3))
'@unhead/vue':
specifier: ^2.0.0-alpha.27
version: 2.0.0-alpha.27(vue@3.5.13(typescript@5.7.3))
@@ -580,6 +580,12 @@ importers:
defu:
specifier: ^6.1.4
version: 6.1.4
drizzle-kit:
specifier: ^0.30.5
version: 0.30.5
drizzle-orm:
specifier: ^0.40.0
version: 0.40.0(@types/pg@8.11.11)(gel@2.0.0)(pg@8.13.3)
jszip:
specifier: ^3.10.1
version: 3.10.1
@@ -676,7 +682,10 @@ importers:
version: 2.3.0
'@intlify/unplugin-vue-i18n':
specifier: ^6.0.3
version: 6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.21.0(jiti@2.4.2))(rollup@2.79.1)(typescript@5.7.3)(vue-i18n@11.1.1(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))
version: 6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.21.0(jiti@2.4.2))(rollup@4.34.8)(typescript@5.7.3)(vue-i18n@11.1.1(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))
'@proj-airi/drizzle-duckdb-wasm':
specifier: workspace:^
version: link:../../packages/drizzle-duckdb-wasm
'@proj-airi/elevenlabs':
specifier: workspace:^
version: link:../../packages/elevenlabs
@@ -709,10 +718,10 @@ importers:
version: 5.2.1(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))
'@vue-macros/volar':
specifier: ^0.30.14
version: 0.30.14(rollup@2.79.1)(typescript@5.7.3)(vue-tsc@2.2.4(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3))
version: 0.30.14(rollup@4.34.8)(typescript@5.7.3)(vue-tsc@2.2.4(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3))
'@vueuse/motion':
specifier: ^2.2.6
version: 2.2.6(magicast@0.3.5)(rollup@2.79.1)(vue@3.5.13(typescript@5.7.3))
version: 2.2.6(magicast@0.3.5)(rollup@4.34.8)(vue@3.5.13(typescript@5.7.3))
hfup:
specifier: workspace:^
version: link:../../packages/hfup
@@ -721,28 +730,28 @@ importers:
version: 4.0.1
unplugin-auto-import:
specifier: ^19.1.1
version: 19.1.1(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@2.79.1))(@vueuse/core@12.7.0(typescript@5.7.3))
version: 19.1.1(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.34.8))(@vueuse/core@12.7.0(typescript@5.7.3))
unplugin-vue-components:
specifier: ^28.4.1
version: 28.4.1(@babel/parser@7.26.7)(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@2.79.1))(vue@3.5.13(typescript@5.7.3))
version: 28.4.1(@babel/parser@7.26.7)(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.34.8))(vue@3.5.13(typescript@5.7.3))
unplugin-vue-macros:
specifier: ^2.14.4
version: 2.14.4(@vueuse/core@12.7.0(typescript@5.7.3))(esbuild@0.24.2)(rollup@2.79.1)(typescript@5.7.3)(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@2.2.4(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3))
version: 2.14.4(@vueuse/core@12.7.0(typescript@5.7.3))(esbuild@0.25.0)(rollup@4.34.8)(typescript@5.7.3)(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@2.2.4(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3))
unplugin-vue-markdown:
specifier: ^28.3.1
version: 28.3.1(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))
unplugin-vue-router:
specifier: ^0.11.2
version: 0.11.2(rollup@2.79.1)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))
version: 0.11.2(rollup@4.34.8)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))
vite-bundle-visualizer:
specifier: ^1.2.1
version: 1.2.1(rollup@2.79.1)
version: 1.2.1(rollup@4.34.8)
vite-plugin-pwa:
specifier: ^0.21.1
version: 0.21.1(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(workbox-build@7.3.0)(workbox-window@7.3.0)
vite-plugin-vue-devtools:
specifier: ^7.7.2
version: 7.7.2(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@2.79.1))(rollup@2.79.1)(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))
version: 7.7.2(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.34.8))(rollup@4.34.8)(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))
vite-plugin-vue-layouts:
specifier: ^0.11.0
version: 0.11.0(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))
@@ -1017,6 +1026,15 @@ importers:
'@electron-toolkit/preload':
specifier: ^3.0.1
version: 3.0.1(electron@34.3.0)
'@proj-airi/provider-transformers':
specifier: workspace:^
version: link:../provider-transformers
'@proj-airi/utils-transformers':
specifier: workspace:^
version: link:../utils-transformers
'@xsai/embed':
specifier: 'catalog:'
version: 0.1.0-beta.9
packages/unplugin-download:
dependencies:
@@ -14576,7 +14594,7 @@ snapshots:
dependencies:
'@typeschema/core': 0.14.0(@types/json-schema@7.0.15)
optionalDependencies:
'@typeschema/valibot': 0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.25.0)(typescript@5.7.3))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.9(typescript@5.7.3))
'@typeschema/valibot': 0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.24.2)(typescript@5.7.3))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.9(typescript@5.7.3))
'@typeschema/zod': 0.14.0(@types/json-schema@7.0.15)(zod-to-json-schema@3.24.3(zod@3.24.2))(zod@3.24.2)
transitivePeerDependencies:
- '@types/json-schema'
-1
View File
@@ -5,5 +5,4 @@ export default defineWorkspace([
'apps/*',
'services/*',
'examples/*',
'docs/*',
])