-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathregistry.ts
More file actions
96 lines (86 loc) · 2.47 KB
/
registry.ts
File metadata and controls
96 lines (86 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import { settings } from '$lib/config'
export interface ProviderConfig {
id: string
name: string
displayName: string
envVar: string
isAvailable: boolean
}
// Registry of all possible AI providers
const PROVIDER_REGISTRY: Omit<ProviderConfig, 'isAvailable'>[] = [
{
id: 'khoj',
name: 'Khoj',
displayName: 'Khoj (Local)',
envVar: 'KHOJ_API_URL',
},
{
id: 'openai',
name: 'OpenAI',
displayName: 'OpenAI (GPT)',
envVar: 'OPENAI_API_KEY',
},
{
id: 'anthropic',
name: 'Anthropic',
displayName: 'Anthropic (Claude)',
envVar: 'ANTHROPIC_API_KEY',
},
{
id: 'grok',
name: 'Grok',
displayName: 'Grok (X.ai)',
envVar: 'GROK_API_KEY',
},
// Future providers can be added here with their corresponding env vars
// {
// id: 'gemini',
// name: 'Google',
// displayName: 'Google (Gemini)',
// envVar: 'GOOGLE_API_KEY'
// }
]
/**
* Get all available AI providers based on configured settings
*/
export function getAvailableProviders(): ProviderConfig[] {
return PROVIDER_REGISTRY.map((provider) => ({
...provider,
isAvailable: !!settings[provider.envVar],
})).filter((provider) => provider.isAvailable)
}
/**
* Get the default provider (prioritizes Khoj if available, falls back to OpenAI)
*/
export function getDefaultProvider(): string {
const available = getAvailableProviders()
if (available.length === 0) {
throw new Error(
'No AI providers are configured. Please set at least one provider in settings.'
)
}
// Prefer Khoj if available, otherwise use the first available provider
const khojProvider = available.find((p) => p.id === 'khoj')
return khojProvider ? 'khoj' : available[0].id
}
/**
* Check if multiple providers are available
*/
export function hasMultipleProviders(): boolean {
return getAvailableProviders().length > 1
}
/**
* Validate that at least one provider is configured
*/
export function validateProviders(): void {
const available = getAvailableProviders()
if (available.length === 0) {
console.error(
'Error: No AI providers are configured. Set at least one of the following settings:'
)
PROVIDER_REGISTRY.forEach((provider) => {
console.error(` - ${provider.envVar} (for ${provider.displayName})`)
})
process.exit(1)
}
}