feat: ollama check (#803)

This commit is contained in:
lily-de
2025-01-27 10:49:07 -05:00
committed by GitHub
parent b3d2378bdd
commit 405c3dc58a
7 changed files with 145 additions and 21 deletions
@@ -1,24 +1,38 @@
import { Provider, ProviderResponse } from './types';
import { getApiUrl, getSecretKey } from '../../../config';
import { special_provider_cases } from '../providers/utils';
export async function getActiveProviders(): Promise<string[]> {
try {
// Fetch the secrets settings
const secretsSettings = await getSecretsSettings();
// Check for special provider cases (e.g. ollama needs to be installed in Applications folder)
const specialCasesResults = await Promise.all(
Object.entries(special_provider_cases).map(async ([providerName, checkFunction]) => {
const isActive = await checkFunction(); // Dynamically re-check status
console.log(`Special case result for ${providerName}:`, isActive);
return isActive ? providerName : null;
})
);
// Extract active providers based on `is_set` in `secret_status` or providers with no keys
const activeProviders = Object.values(secretsSettings) // Convert object to array
.filter((provider) => {
const apiKeyStatus = Object.values(provider.secret_status || {}); // Get all key statuses
// Include providers if:
// - They have at least one key set (`is_set: true`), OR
// - They have no keys (`secret_status` is empty or undefined)
return apiKeyStatus.some((key) => key.is_set) || apiKeyStatus.length === 0;
// - They have at least one key set (`is_set: true`)
return apiKeyStatus.some((key) => key.is_set);
})
.map((provider) => provider.name || 'Unknown Provider'); // Extract provider name
return activeProviders;
// Combine active providers from secrets settings and special cases
const allActiveProviders = [
...activeProviders,
...specialCasesResults.filter((provider) => provider !== null), // Filter out null results
];
return allActiveProviders;
} catch (error) {
console.error('Failed to get active providers:', error);
return [];