tikslop / lib /models /llm_provider.dart
jbilcke-hf's picture
jbilcke-hf HF Staff
improving the model selection
233cefb
/// LLM Provider configuration for Hugging Face supported providers
class LLMProvider {
final String id;
final String name;
final String? apiBaseUrl;
final String routerBaseUrl;
final bool supportsHuggingFaceKey;
final bool isAvailable;
const LLMProvider({
required this.id,
required this.name,
this.apiBaseUrl,
required this.routerBaseUrl,
this.supportsHuggingFaceKey = true,
this.isAvailable = true,
});
/// Create a copy with updated availability
LLMProvider copyWith({bool? isAvailable}) {
return LLMProvider(
id: id,
name: name,
apiBaseUrl: apiBaseUrl,
routerBaseUrl: routerBaseUrl,
supportsHuggingFaceKey: supportsHuggingFaceKey,
isAvailable: isAvailable ?? this.isAvailable,
);
}
/// Get the API key label for this provider
String get apiKeyLabel {
if (!supportsHuggingFaceKey) {
return '$name API Key';
}
return 'Hugging Face API Key';
}
/// List of all supported providers based on HF documentation
static const List<LLMProvider> supportedProviders = [
LLMProvider(
id: 'built-in',
name: 'Built-in (free, slow)',
routerBaseUrl: '',
supportsHuggingFaceKey: false,
),
LLMProvider(
id: 'cerebras',
name: 'Cerebras',
apiBaseUrl: 'https://api.cerebras.ai/v1',
routerBaseUrl: 'https://router.huggingface.co/cerebras/v1',
),
LLMProvider(
id: 'cohere',
name: 'Cohere',
apiBaseUrl: 'https://api.cohere.com/compatibility/v1',
routerBaseUrl: 'https://router.huggingface.co/cohere/v1',
),
LLMProvider(
id: 'fal-ai',
name: 'Fal AI',
apiBaseUrl: 'https://api.fal.ai/v1',
routerBaseUrl: 'https://router.huggingface.co/fal-ai/v1',
),
LLMProvider(
id: 'featherless',
name: 'Featherless AI',
apiBaseUrl: 'https://api.featherless.ai/v1',
routerBaseUrl: 'https://router.huggingface.co/featherless/v1',
),
LLMProvider(
id: 'fireworks',
name: 'Fireworks',
apiBaseUrl: 'https://api.fireworks.ai/inference/v1',
routerBaseUrl: 'https://router.huggingface.co/fireworks/v1',
),
LLMProvider(
id: 'groq',
name: 'Groq',
apiBaseUrl: 'https://api.groq.com/openai/v1',
routerBaseUrl: 'https://router.huggingface.co/groq/v1',
),
LLMProvider(
id: 'hf-inference',
name: 'HF Inference',
apiBaseUrl: 'https://api-inference.huggingface.co/v1',
routerBaseUrl: 'https://router.huggingface.co/hf-inference/v1',
),
LLMProvider(
id: 'hyperbolic',
name: 'Hyperbolic',
apiBaseUrl: 'https://api.hyperbolic.xyz/v1',
routerBaseUrl: 'https://router.huggingface.co/hyperbolic/v1',
),
LLMProvider(
id: 'nebius',
name: 'Nebius',
apiBaseUrl: 'https://api.studio.nebius.ai/v1',
routerBaseUrl: 'https://router.huggingface.co/nebius/v1',
),
LLMProvider(
id: 'novita',
name: 'Novita',
apiBaseUrl: 'https://api.novita.ai/v3/openai',
routerBaseUrl: 'https://router.huggingface.co/novita/v1',
),
LLMProvider(
id: 'nscale',
name: 'Nscale',
apiBaseUrl: 'https://inference.api.nscale.com/v1',
routerBaseUrl: 'https://router.huggingface.co/nscale/v1',
),
LLMProvider(
id: 'replicate',
name: 'Replicate',
apiBaseUrl: 'https://api.replicate.com/v1',
routerBaseUrl: 'https://router.huggingface.co/replicate/v1',
),
LLMProvider(
id: 'sambanova',
name: 'SambaNova',
apiBaseUrl: 'https://api.sambanova.ai/v1',
routerBaseUrl: 'https://router.huggingface.co/sambanova/v1',
),
LLMProvider(
id: 'together',
name: 'Together',
apiBaseUrl: 'https://api.together.xyz/v1',
routerBaseUrl: 'https://router.huggingface.co/together/v1',
),
];
/// Get provider by ID
static LLMProvider? getById(String id) {
try {
return supportedProviders.firstWhere((provider) => provider.id == id);
} catch (e) {
return null;
}
}
/// Get default provider
static LLMProvider get defaultProvider {
return supportedProviders.first; // Built-in is first in the list
}
}