Files
SuperCharged-Claude-Code-Up…/dexto/packages/webui/components/ModelPicker/constants.tsx
admin b52318eeae feat: Add intelligent auto-router and enhanced integrations
- Add intelligent-router.sh hook for automatic agent routing
- Add AUTO-TRIGGER-SUMMARY.md documentation
- Add FINAL-INTEGRATION-SUMMARY.md documentation
- Complete Prometheus integration (6 commands + 4 tools)
- Complete Dexto integration (12 commands + 5 tools)
- Enhanced Ralph with access to all agents
- Fix /clawd command (removed disable-model-invocation)
- Update hooks.json to v5 with intelligent routing
- 291 total skills now available
- All 21 commands with automatic routing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-28 00:27:56 +04:00

108 lines
4.1 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import React from 'react';
import { Sparkles, FlaskConical, Zap } from 'lucide-react';
import type { LLMProvider } from '@dexto/core';
// Provider logo file mapping - single source of truth
// Empty string means "use Bot icon fallback" in components
export const PROVIDER_LOGOS: Record<LLMProvider, string> = {
openai: '/logos/openai.svg',
anthropic: '/logos/claude-color.svg',
google: '/logos/gemini-color.svg',
groq: '/logos/groq.svg',
xai: '/logos/grok.svg',
'openai-compatible': '/logos/openai.svg',
cohere: '/logos/cohere-color.svg',
openrouter: '/logos/openrouter.svg',
litellm: '/logos/litellm.svg',
glama: '/logos/glama.svg',
vertex: '/logos/gemini-color.svg', // Vertex AI uses Gemini logo (primary model family)
bedrock: '/logos/aws-color.svg',
local: '', // Uses Bot icon fallback - local GGUF models via node-llama-cpp
ollama: '/logos/ollama.svg', // Ollama server
dexto: '/logos/dexto/dexto_logo_icon.svg', // Dexto gateway - use Dexto logo
};
// Provider pricing URLs (for quick access from Model Picker)
export const PROVIDER_PRICING_URLS: Partial<Record<LLMProvider, string>> = {
openai: 'https://platform.openai.com/docs/pricing',
anthropic: 'https://www.anthropic.com/pricing#api',
google: 'https://ai.google.dev/gemini-api/docs/pricing',
groq: 'https://groq.com/pricing/',
xai: 'https://docs.x.ai/docs/models',
cohere: 'https://cohere.com/pricing',
openrouter: 'https://openrouter.ai/models',
litellm: 'https://docs.litellm.ai/',
glama: 'https://glama.ai/',
vertex: 'https://cloud.google.com/vertex-ai/generative-ai/pricing',
bedrock: 'https://aws.amazon.com/bedrock/pricing/',
// TODO: make this a valid URL
dexto: 'https://dexto.ai/pricing',
// 'openai-compatible' intentionally omitted (varies by vendor)
};
// Helper: Format pricing from permillion to perthousand tokens
export function formatPricingLines(pricing?: {
inputPerM?: number;
outputPerM?: number;
cacheReadPerM?: number;
cacheWritePerM?: number;
currency?: 'USD';
unit?: 'per_million_tokens';
}): string[] {
if (!pricing) return [];
// Bail early if required pricing fields are missing
if (pricing.inputPerM == null || pricing.outputPerM == null) return [];
const currency = pricing.currency || 'USD';
const cur = currency === 'USD' ? '$' : '';
const lines: string[] = [];
lines.push(
`Cost: ${cur}${pricing.inputPerM.toFixed(2)} in / ${cur}${pricing.outputPerM.toFixed(2)} out per 1M tokens`
);
if (pricing.cacheReadPerM != null) {
lines.push(`Cache read: ${cur}${pricing.cacheReadPerM.toFixed(2)} per 1M tokens`);
}
if (pricing.cacheWritePerM != null) {
lines.push(`Cache write: ${cur}${pricing.cacheWritePerM.toFixed(2)} per 1M tokens`);
}
return lines;
}
// Logos that have hardcoded colors and don't need dark mode inversion
export const COLORED_LOGOS: readonly LLMProvider[] = [
'google',
'cohere',
'anthropic',
'vertex',
'dexto',
] as const;
// Helper to check if a logo needs dark mode inversion
export const needsDarkModeInversion = (provider: LLMProvider): boolean => {
return !COLORED_LOGOS.includes(provider);
};
// Helper to check if a provider has a logo
export const hasLogo = (provider: LLMProvider): boolean => {
return !!PROVIDER_LOGOS[provider];
};
// Model capability icons - sleek emojis for current capabilities
export const CAPABILITY_ICONS = {
// File type capabilities (what we currently use)
image: <span className="text-sm">🖼</span>,
audio: <span className="text-sm">🎵</span>,
pdf: <span className="text-sm">📄</span>,
// Other capabilities we currently have
reasoning: <span className="text-sm">🧠</span>,
experimental: (
<FlaskConical className="h-3.5 w-3.5 text-muted-foreground hover:text-amber-500 transition-colors cursor-help" />
),
new: (
<Sparkles className="h-3.5 w-3.5 text-muted-foreground hover:text-yellow-500 transition-colors cursor-help" />
),
realtime: (
<Zap className="h-3.5 w-3.5 text-muted-foreground hover:text-blue-500 transition-colors cursor-help" />
),
};