feat: add better provider support, icons, regen, and a lot more

This commit is contained in:
Zoe
2026-02-12 14:56:13 +00:00
parent d5a5945c03
commit d29f95bacf
124 changed files with 6374 additions and 1861 deletions
+40 -25
View File
@@ -10,42 +10,57 @@ export type ProviderWithModels = Entity<typeof schema, 'providers'> & {
};
export const useModels = async () => {
const triplit = useTriplitClient();
const nuxtApp = useNuxtApp() as any;
const providersQuery = triplit
.query('providers')
.Include('models')
if (!nuxtApp._modelsSubscription) {
if (!nuxtApp._modelsPromise) {
const triplit = useTriplitClient();
const { results: providers, unsubscribe } = await useQuery('providers', triplit, providersQuery);
const providersQuery = triplit
.query('providers')
.Include('models');
console.log("GET PROVIDERS", providers.value);
nuxtApp._modelsPromise = useQuery('providers', triplit, providersQuery).then((sub) => {
nuxtApp._modelsSubscription = sub;
return sub;
});
}
await nuxtApp._modelsPromise;
}
// const enabledProvidersWithModels = computed<ProviderWithModels[]>(() => {
// if (!providers.value) return [];
const { results: providers } = nuxtApp._modelsSubscription;
// return (providers.value as unknown as ProviderWithModels[]).filter(
// (provider: ProviderWithModels) => provider.models && provider.models.length > 0
// );
// });
if (!nuxtApp._allModels) {
nuxtApp._allModels = computed<ModelWithProvider[]>(() => {
if (!providers.value) return [];
const allEnabledModels = computed<ModelWithProvider[]>(() => {
return providers.value?.flatMap((provider) =>
provider.models.map((model) => ({
...model,
provider,
}))
);
});
const list: ModelWithProvider[] = [];
for (const provider of (providers.value as ProviderWithModels[])) {
if (!provider.enabled) continue;
for (const model of provider.models) {
if (!model.enabled) continue;
list.push({
...model,
provider
} as unknown as ModelWithProvider);
}
}
return list;
});
}
const getFirstAvailableModel = (): ModelWithProvider | null => {
if (allEnabledModels.value.length === 0) return null;
return allEnabledModels.value[0]!;
if (nuxtApp._allModels.value.length === 0) return null;
return nuxtApp._allModels.value[0]!;
};
return {
providers,
allModels: allEnabledModels,
providers: providers as Ref<ProviderWithModels[]>,
allModels: nuxtApp._allModels as ComputedRef<ModelWithProvider[]>,
getFirstAvailableModel,
unsubscribe,
unsubscribe: () => { },
};
};