ts import { AIModelInfo, AIModel, AICategory } from '@/types' /** * Maximum character limits for different purposes */ export const CHARACTER_LIMITS = { INPUT: 8000, WARNING: 2000, MINIMUM: 20, TOKEN_ESTIMATE_FACTOR: 4 // Approximate characters per token } as const /** * Animation durations in milliseconds */ export const ANIMATION_DURATIONS = { FAST: 150, NORMAL: 300, SLOW: 500, COPY_FEEDBACK: 2000 } as const /** * Available AI models with their metadata */ export const AI_MODELS: AIModelInfo[] = [ // LLM Models { id: 'gpt-5', name: 'GPT-5', category: 'llm', description: 'Neueste Version von OpenAIs GPT-Modell', maxTokens: 128000, supportsStreaming: true }, { id: 'gpt-5.1', name: 'GPT-5.1', category: 'llm', description: 'Optimierte GPT-5 Variante mit verbesserter Reasoning-Fähigkeit', maxTokens: 128000, supportsStreaming: true }, { id: 'claude-4.5-opus', name: 'Claude 4.5 Opus', category: 'llm', description: 'Anthropics leistungsstärkstes Modell für komplexe Reasoning-Aufgaben', maxTokens: 200000, supportsStreaming: true }, { id: 'claude-4.5-sonnet', name: 'Claude 4.5 Sonnet', category: 'llm', description: 'Ausgewogenes Claude-Modell für vielseitige Anwendungen', maxTokens: 200000, supportsStreaming: true }, { id: 'claude-4.5-haiku', name: 'Claude 4.5 Haiku', category: 'llm', description: 'Schnelles Claude-Modell für effiziente Aufgaben', maxTokens: 200000, supportsStreaming: true }, { id: 'gemini-3-pro', name: 'Gemini 3 Pro', category: 'llm', description: 'Google DeepMinds fortschrittlichstes Multimodal-Modell', maxTokens: 1000000, supportsStreaming: true }, { id: 'llama-3', name: 'Llama 3', category: 'llm', description: 'Metas Open-Source Large Language Model', maxTokens: 128000, supportsStreaming: true }, { id: 'mistral-large', name: 'Mistral Large', category: 'llm', description: 'Mistral AIs leistungsstarkes europäisches LLM', maxTokens: 32000, supportsStreaming: true }, { id: 'mixtral', name: 'Mixtral', category: 'llm', description: 'Mistral AIs Sparse Mixture of Experts Modell', maxTokens: 32000, supportsStreaming: true }, { id: 'minimax2', name: 'MiniMax2', category: 'llm', description: 'MiniMax Chinas fortschrittliches LLM', maxTokens: 245000, supportsStreaming: true }, { id: 'kimik2', name: 'KimiK2', category: 'llm', description: 'Moonshot AIs Long-Context LLM', maxTokens: 200000, supportsStreaming: true }, { id: 'deepseek', name: 'DeepSeek', category: 'llm', description: 'Chinas Open-Source Alternative mit starken Coding-Fähigkeiten', maxTokens: 128000, supportsStreaming: true }, { id: 'qwen3', name: 'Qwen3', category: 'llm', description: 'Alibaba Clouds Quantum Series LLM', maxTokens: 131072, supportsStreaming: true }, // Development Tools { id: 'manus', name: 'MANUS', category: 'code', description: 'AI-gestützte Full-Stack-Entwicklung', maxTokens: 32000, supportsStreaming: true }, { id: 'replit-agent', name: 'Replit Agent', category: 'code', description: 'Replit\'s AI-Assistent für Code-Entwicklung', maxTokens: 16000, supportsStreaming: true }, { id: 'bolt-new', name: 'Bolt.new', category: 'code', description: 'StackBlitzs AI für schnelle Web-Entwicklung', maxTokens: 32000, supportsStreaming: true }, { id: 'v0-dev', name: 'v0.dev', category: 'code', description: 'Verkels UI-Komponenten-Generator', maxTokens: 16000, supportsStreaming: true }, { id: 'cursor-ai', name: 'Cursor AI', category: 'code', description: 'AI-fähiger Code-Editor mit In-Context-Wissen', maxTokens: 32000, supportsStreaming: true }, { id: 'github-copilot', name: 'GitHub Copilot', category: 'code', description: 'GitHub & OpenAIs Code-Completion-Assistent', maxTokens: 16000, supportsStreaming: true }, { id: 'google-antigravity', name: 'Google Antigravity', category: 'code', description: 'Google\'s experimenteller Code-Assistent', maxTokens: 32000, supportsStreaming: true }, { id: 'kiro', name: 'Kiro', category: 'code', description: 'KI-basierte Code-Entwicklungsplattform', maxTokens: 16000, supportsStreaming: true }, { id: 'minimax-agent', name: 'MiniMax Agent', category: 'code', description: 'MiniMax\'s Entwickler-Assistent', maxTokens: 32000, supportsStreaming: true }, // Specialized Tools { id: 'base44', name: 'Base44', category: 'special', description: 'Spezialisiertes Tool für komplexe AI-Workflows', maxTokens: 32000, supportsStreaming: false }, { id: 'midjourney', name: 'Midjourney', category: 'image', description: 'KI-Bildgenerator für künstlerische Bilder', maxTokens: 4000, supportsStreaming: false }, { id: 'dall-e-3', name: 'DALL-E 3', category: 'image', description: 'OpenAIs fortschrittlicher Bildgenerator', maxTokens: 4000, supportsStreaming: false }, { id: 'stable-diffusion', name: 'Stable Diffusion', category: 'image', description: 'Open-Source KI-Bildgenerator', maxTokens: 4000, supportsStreaming: false }, { id: 'runwayml', name: 'RunwayML', category: 'image', description: 'KI-Plattform für kreative Inhalte und Videos', maxTokens: 4000, supportsStreaming: false } ] /** * Category display names in German */ export const CATEGORY_NAMES: Record = { llm: 'LLM-Modelle', code: 'Entwicklungstools', image: 'Bildgeneratoren', special: 'Spezialisierte Tools' } as const /** * Category descriptions in German */ export const CATEGORY_DESCRIPTIONS: Record = { llm: 'Large Language Models für Konversation und Textgenerierung', code: 'AI-Tools für Code-Entwicklung und -Generierung', image: 'KI-Bildgeneratoren für visuelle Inhalte', special: 'Spezialisierte Tools für einzigartige Anwendungsfälle' } as const /** * Get models by category */ export function getModelsByCategory(category: AICategory): AIModelInfo[] { return AI_MODELS.filter(model => model.category === category) } /** * Find model by ID */ export function getModelById(id: AIModel): AIModelInfo | undefined { return AI_MODELS.find(model => model.id === id) } /** * Check if character count exceeds warning threshold */ export function getCharacterWarning(count: number): { type: 'warning' | 'error' | null, message: string | null } { if (count === 0) { return { type: null, message: null } } if (count < CHARACTER_LIMITS.MINIMUM) { return { type: 'warning', message: 'Prompt ist sehr kurz. Erwäge mehr Details hinzuzufügen für bessere Ergebnisse.' } } if (count > CHARACTER_LIMITS.WARNING) { return { type: 'warning', message: `Achtung: Sehr langer Prompt (${count} Zeichen) könnte Token-Limits einiger KIs überschreiten.` } } return { type: null, message: null } }