{"repo": "capevace/llm-magic", "files": {"config/llm-magic.php": {"eb4badfc016115c1f17e8df4556b536a3834238a": {"t": 1785745757.4717157, "n": 2382, "h": "d85cff34745285b2", "c": " [\n 'default' => env('LLM_MAGIC_MODEL', $builtin_default),\n ],\n 'models' => [\n 'default' => env('LLM_MAGIC_MODEL', $builtin_default),\n\t\t'cheap' => env('LLM_MAGIC_CHEAP_MODEL', $builtin_cheap),\n\t\t'extraction' => env('LLM_MAGIC_EXTRACTION_MODEL', null),\n\t\t'chat' => env('LLM_MAGIC_CHAT_MODEL', null),\n\t\t'embeddings' => env('LLM_MAGIC_EMBEDDINGS_MODEL', $builtin_default_embeddings),\n ],\n\t'extraction' => [\n\t\t'concurrency' => intval(env('LLM_MAGIC_EXTRACTION_CONCURRENCY', 3)),\n\t],\n 'artifacts' => [\n 'base' => env('LLM_MAGIC_ARTIFACTS_BASE', storage_path('app/magic-artifacts')),\n 'disk' => env('LLM_MAGIC_ARTIFACTS_DISK', 'artifacts'),\n 'prefix' => env('LLM_MAGIC_ARTIFACTS_PREFIX', ''),\n\n\t\t// This is the default max token count for an LLM model if it doesn't implement HasMaximumTokenCount.\n\t\t// This is used in the ArtifactSplitter to determine the maximum token count for each split when using .\n\t\t'default_max_tokens' => env('LLM_MAGIC_DEFAULT_MAX_TOKENS', 10000),\n ],\n 'python' => [\n 'cwd' => env('LLM_MAGIC_PYTHON_CWD', realpath(__DIR__ . '/../python')),\n 'use_uv' => env('LLM_MAGIC_PYTHON_USE_UV', true),\n 'uv' => [\n 'path' => env('LLM_MAGIC_PYTHON_UV_PATH', '/usr/bin/env uv'),\n ],\n 'bin' => [\n 'path' => env('LLM_MAGIC_PYTHON_BIN_PATH', realpath(__DIR__ . '/../python/.venv/bin/python')),\n ],\n ],\n 'apis' => [\n 'anthropic' => [\n 'token' => env('ANTHROPIC_API_KEY'),\n ],\n 'openai' => [\n 'token' => env('OPENAI_API_KEY'),\n 'organization_id' => env('OPENAI_ORGANIZATION_ID'),\n ],\n 'groq' => [\n 'token' => env('GROQ_API_KEY'),\n ],\n 'openrouter' => [\n 'token' => env('OPENROUTER_API_KEY'),\n ],\n\t\t'mistral' => [\n\t\t\t'token' => env('MISTRAL_API_KEY'),\n\t\t],\n 'togetherai' => [\n 'token' => env('TOGETHERAI_API_KEY'),\n ],\n\t\t'gemini' => [\n\t\t\t'token' => env('GEMINI_API_KEY'),\n\t\t],\n\t\t'google' => [\n\t\t\t'token' => env('GEMINI_API_KEY'),\n\t\t],\n\t\t'deepseek' => [\n\t\t\t'token' => env('DEEPSEEK_API_KEY'),\n\t\t]\n ],\n];\n"}, "385c4319610cd64edc7ee8204b55a7c10afca587": {"t": 1785756205.5205631, "n": 2382, "h": "d85cff34745285b2", "c": " [\n 'default' => env('LLM_MAGIC_MODEL', $builtin_default),\n ],\n 'models' => [\n 'default' => env('LLM_MAGIC_MODEL', $builtin_default),\n\t\t'cheap' => env('LLM_MAGIC_CHEAP_MODEL', $builtin_cheap),\n\t\t'extraction' => env('LLM_MAGIC_EXTRACTION_MODEL', null),\n\t\t'chat' => env('LLM_MAGIC_CHAT_MODEL', null),\n\t\t'embeddings' => env('LLM_MAGIC_EMBEDDINGS_MODEL', $builtin_default_embeddings),\n ],\n\t'extraction' => [\n\t\t'concurrency' => intval(env('LLM_MAGIC_EXTRACTION_CONCURRENCY', 3)),\n\t],\n 'artifacts' => [\n 'base' => env('LLM_MAGIC_ARTIFACTS_BASE', storage_path('app/magic-artifacts')),\n 'disk' => env('LLM_MAGIC_ARTIFACTS_DISK', 'artifacts'),\n 'prefix' => env('LLM_MAGIC_ARTIFACTS_PREFIX', ''),\n\n\t\t// This is the default max token count for an LLM model if it doesn't implement HasMaximumTokenCount.\n\t\t// This is used in the ArtifactSplitter to determine the maximum token count for each split when using .\n\t\t'default_max_tokens' => env('LLM_MAGIC_DEFAULT_MAX_TOKENS', 10000),\n ],\n 'python' => [\n 'cwd' => env('LLM_MAGIC_PYTHON_CWD', realpath(__DIR__ . '/../python')),\n 'use_uv' => env('LLM_MAGIC_PYTHON_USE_UV', true),\n 'uv' => [\n 'path' => env('LLM_MAGIC_PYTHON_UV_PATH', '/usr/bin/env uv'),\n ],\n 'bin' => [\n 'path' => env('LLM_MAGIC_PYTHON_BIN_PATH', realpath(__DIR__ . '/../python/.venv/bin/python')),\n ],\n ],\n 'apis' => [\n 'anthropic' => [\n 'token' => env('ANTHROPIC_API_KEY'),\n ],\n 'openai' => [\n 'token' => env('OPENAI_API_KEY'),\n 'organization_id' => env('OPENAI_ORGANIZATION_ID'),\n ],\n 'groq' => [\n 'token' => env('GROQ_API_KEY'),\n ],\n 'openrouter' => [\n 'token' => env('OPENROUTER_API_KEY'),\n ],\n\t\t'mistral' => [\n\t\t\t'token' => env('MISTRAL_API_KEY'),\n\t\t],\n 'togetherai' => [\n 'token' => env('TOGETHERAI_API_KEY'),\n ],\n\t\t'gemini' => [\n\t\t\t'token' => env('GEMINI_API_KEY'),\n\t\t],\n\t\t'google' => [\n\t\t\t'token' => env('GEMINI_API_KEY'),\n\t\t],\n\t\t'deepseek' => [\n\t\t\t'token' => env('DEEPSEEK_API_KEY'),\n\t\t]\n ],\n];\n"}, "1cd695492f742d19277679db1e5bd60742298283": {"t": 1785756207.5625312, "n": 2187, "h": "89ba9dbc2e382e76", "c": " [\n 'default' => env('LLM_MAGIC_MODEL', $builtin_default),\n ],\n 'models' => [\n 'default' => env('LLM_MAGIC_MODEL', $builtin_default),\n\t\t'cheap' => env('LLM_MAGIC_CHEAP_MODEL', $builtin_cheap),\n\t\t'extraction' => env('LLM_MAGIC_EXTRACTION_MODEL', null),\n\t\t'chat' => env('LLM_MAGIC_CHAT_MODEL', null),\n\t\t'embeddings' => env('LLM_MAGIC_EMBEDDINGS_MODEL', $builtin_default_embeddings),\n ],\n\t'extraction' => [\n\t\t'concurrency' => intval(env('LLM_MAGIC_EXTRACTION_CONCURRENCY', 3)),\n\t],\n 'artifacts' => [\n 'base' => env('LLM_MAGIC_ARTIFACTS_BASE', storage_path('app/magic-artifacts')),\n 'disk' => env('LLM_MAGIC_ARTIFACTS_DISK', 'artifacts'),\n 'prefix' => env('LLM_MAGIC_ARTIFACTS_PREFIX', ''),\n\n\t\t// This is the default max token count for an LLM model if it doesn't implement HasMaximumTokenCount.\n\t\t// This is used in the ArtifactSplitter to determine the maximum token count for each split when using .\n\t\t'default_max_tokens' => env('LLM_MAGIC_DEFAULT_MAX_TOKENS', 10000),\n ],\n 'python' => [\n 'cwd' => env('LLM_MAGIC_PYTHON_CWD', realpath(__DIR__ . '/../python')),\n 'uv' => [\n 'path' => env('LLM_MAGIC_PYTHON_UV_PATH', '/usr/bin/env uv'),\n ],\n ],\n 'apis' => [\n 'anthropic' => [\n 'token' => env('ANTHROPIC_API_KEY'),\n ],\n 'openai' => [\n 'token' => env('OPENAI_API_KEY'),\n 'organization_id' => env('OPENAI_ORGANIZATION_ID'),\n ],\n 'groq' => [\n 'token' => env('GROQ_API_KEY'),\n ],\n 'openrouter' => [\n 'token' => env('OPENROUTER_API_KEY'),\n ],\n\t\t'mistral' => [\n\t\t\t'token' => env('MISTRAL_API_KEY'),\n\t\t],\n 'togetherai' => [\n 'token' => env('TOGETHERAI_API_KEY'),\n ],\n\t\t'gemini' => [\n\t\t\t'token' => env('GEMINI_API_KEY'),\n\t\t],\n\t\t'google' => [\n\t\t\t'token' => env('GEMINI_API_KEY'),\n\t\t],\n\t\t'deepseek' => [\n\t\t\t'token' => env('DEEPSEEK_API_KEY'),\n\t\t]\n ],\n];\n"}, "7f24f162c3543225c0987abf14633bd96b446a8f": {"t": 1785756209.4397187, "n": 2129, "h": "6e8aac7f2948d375", "c": " [\n 'default' => env('LLM_MAGIC_MODEL', $builtin_default),\n ],\n 'models' => [\n 'default' => env('LLM_MAGIC_MODEL', $builtin_default),\n\t\t'cheap' => env('LLM_MAGIC_CHEAP_MODEL', $builtin_cheap),\n\t\t'extraction' => env('LLM_MAGIC_EXTRACTION_MODEL', null),\n\t\t'chat' => env('LLM_MAGIC_CHAT_MODEL', null),\n\t\t'embeddings' => env('LLM_MAGIC_EMBEDDINGS_MODEL', $builtin_default_embeddings),\n ],\n\t'extraction' => [\n\t\t'concurrency' => intval(env('LLM_MAGIC_EXTRACTION_CONCURRENCY', 3)),\n\t],\n 'artifacts' => [\n 'base' => env('LLM_MAGIC_ARTIFACTS_BASE', storage_path('app/magic-artifacts')),\n 'disk' => env('LLM_MAGIC_ARTIFACTS_DISK', 'artifacts'),\n 'prefix' => env('LLM_MAGIC_ARTIFACTS_PREFIX', ''),\n\n\t\t// This is the default max token count for an LLM model if it doesn't implement HasMaximumTokenCount.\n\t\t// This is used in the ArtifactSplitter to determine the maximum token count for each split when using .\n\t\t'default_max_tokens' => env('LLM_MAGIC_DEFAULT_MAX_TOKENS', 10000),\n ],\n 'python' => [\n 'cwd' => env('LLM_MAGIC_PYTHON_CWD', realpath(__DIR__ . '/../python')),\n 'uv' => [\n 'path' => env('LLM_MAGIC_PYTHON_UV_PATH', '/usr/bin/env uv'),\n ],\n ],\n 'apis' => [\n 'anthropic' => [\n 'token' => env('ANTHROPIC_API_KEY'),\n ],\n 'openai' => [\n 'token' => env('OPENAI_API_KEY'),\n 'organization_id' => env('OPENAI_ORGANIZATION_ID'),\n ],\n 'groq' => [\n 'token' => env('GROQ_API_KEY'),\n ],\n 'openrouter' => [\n 'token' => env('OPENROUTER_API_KEY'),\n ],\n\t\t'mistral' => [\n\t\t\t'token' => env('MISTRAL_API_KEY'),\n\t\t],\n 'togetherai' => [\n 'token' => env('TOGETHERAI_API_KEY'),\n ],\n\t\t'gemini' => [\n\t\t\t'token' => env('GEMINI_API_KEY'),\n\t\t],\n\t\t'deepseek' => [\n\t\t\t'token' => env('DEEPSEEK_API_KEY'),\n\t\t]\n ],\n];\n"}, "3d093d926884ce9ae3318f4d696bc254423f7a32": {"t": 1785756211.0208309, "n": 4551, "h": "1c7c10b3e397c282", "c": " [\n 'default' => env('LLM_MAGIC_MODEL', $builtin_default),\n ],\n 'models' => [\n 'default' => env('LLM_MAGIC_MODEL', $builtin_default),\n\t\t'cheap' => env('LLM_MAGIC_CHEAP_MODEL', $builtin_cheap),\n\t\t'extraction' => env('LLM_MAGIC_EXTRACTION_MODEL', null),\n\t\t'chat' => env('LLM_MAGIC_CHAT_MODEL', null),\n\t\t'embeddings' => env('LLM_MAGIC_EMBEDDINGS_MODEL', $builtin_default_embeddings),\n ],\n 'artifacts' => [\n 'base' => env('LLM_MAGIC_ARTIFACTS_BASE', storage_path('app/magic-artifacts')),\n 'disk' => env('LLM_MAGIC_ARTIFACTS_DISK', 'artifacts'),\n 'prefix' => env('LLM_MAGIC_ARTIFACTS_PREFIX', ''),\n\n\t\t// This is the default max token count for an LLM model if it doesn't implement HasMaximumTokenCount.\n\t\t// This is used in the ArtifactSplitter to determine the maximum token count for each split when using .\n\t\t'default_max_tokens' => env('LLM_MAGIC_DEFAULT_MAX_TOKENS', 10000),\n ],\n 'python' => [\n 'cwd' => env('LLM_MAGIC_PYTHON_CWD', realpath(__DIR__ . '/../python')),\n 'uv' => [\n 'path' => env('LLM_MAGIC_PYTHON_UV_PATH', '/usr/bin/env uv'),\n ],\n ],\n 'apis' => [\n 'anthropic' => [\n 'token' => env('ANTHROPIC_API_KEY'),\n ],\n 'openai' => [\n 'token' => env('OPENAI_API_KEY'),\n 'organization_id' => env('OPENAI_ORGANIZATION_ID'),\n ],\n 'groq' => [\n 'token' => env('GROQ_API_KEY'),\n ],\n 'openrouter' => [\n 'token' => env('OPENROUTER_API_KEY'),\n ],\n\t\t'mistral' => [\n\t\t\t'token' => env('MISTRAL_API_KEY'),\n\t\t],\n 'togetherai' => [\n 'token' => env('TOGETHERAI_API_KEY'),\n ],\n\t\t'gemini' => [\n\t\t\t'token' => env('GEMINI_API_KEY'),\n\t\t],\n\t\t'deepseek' => [\n\t\t\t'token' => env('DEEPSEEK_API_KEY'),\n\t\t]\n ],\n\n 'extractors' => [\n 'crm' => [\n 'title' => 'Kontakt/Firma importieren',\n 'description' => 'Extrahiere Daten aus verschiedenen Dokumenten und importiere sie in dein CRM-System.',\n\n 'files' => [\n 'maxSize' => 50, // MB\n 'maxNumberOfFiles' => null, // Unlimited\n 'allowedTypes' => [\n // Using MIME types\n 'application/pdf',\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n\n // Using presets\n 'documents',\n 'images',\n\n // Using specific type/preset options\n ['type' => 'application/pdf', 'extractImages' => false], // Don't extract images from PDFs\n ['type' => 'images', 'maxSize' => 20], // Allow images up to 20 MB\n ],\n ],\n\n 'llm' => [\n 'model' => 'openai/gpt-4',\n 'options' => [\n 'temperature' => 0.5,\n 'maxTokens' => 100,\n 'topP' => 0.9,\n ],\n ],\n\n 'strategy' => 'simple', // \"sequential\", \"parallel\"\n\n 'output' => [\n 'format' => [ // JSON Schema\n 'contacts' => [\n 'type' => 'array',\n 'items' => [\n 'type' => 'object',\n 'properties' => [\n 'name' => ['type' => 'string'],\n 'email' => ['type' => 'string', 'format' => 'email'],\n 'phone' => ['type' => 'string'],\n ],\n 'required' => ['name'],\n ],\n ],\n 'companies' => [\n 'type' => 'array',\n 'items' => [\n 'type' => 'object',\n 'properties' => [\n 'name' => ['type' => 'string'],\n 'website' => ['type' => 'string', 'format' => 'uri'],\n 'phone' => ['type' => 'string', 'format' => 'phone'],\n ],\n 'required' => ['name'],\n ],\n ],\n ],\n ],\n ],\n ],\n];\n"}, "072f0cdf76a058b1b838a2c0f616a3e743b8dd1a": {"t": 1785756213.5459833, "n": 4289, "h": "12d3a1bd3d1ffd03", "c": " [\n 'default' => env('LLM_MAGIC_MODEL', $builtin_default),\n ],\n 'models' => [\n 'default' => env('LLM_MAGIC_MODEL', $builtin_default),\n\t\t'cheap' => env('LLM_MAGIC_CHEAP_MODEL', $builtin_cheap),\n\t\t'extraction' => env('LLM_MAGIC_EXTRACTION_MODEL', null),\n\t\t'chat' => env('LLM_MAGIC_CHAT_MODEL', null),\n\t\t'embeddings' => env('LLM_MAGIC_EMBEDDINGS_MODEL', $builtin_default_embeddings),\n ],\n 'artifacts' => [\n 'base' => env('LLM_MAGIC_ARTIFACTS_BASE', storage_path('app/magic-artifacts')),\n 'disk' => env('LLM_MAGIC_ARTIFACTS_DISK', 'artifacts'),\n 'prefix' => env('LLM_MAGIC_ARTIFACTS_PREFIX', ''),\n ],\n 'python' => [\n 'cwd' => env('LLM_MAGIC_PYTHON_CWD', realpath(__DIR__ . '/../python')),\n 'uv' => [\n 'path' => env('LLM_MAGIC_PYTHON_UV_PATH', '/usr/bin/env uv'),\n ],\n ],\n 'apis' => [\n 'anthropic' => [\n 'token' => env('ANTHROPIC_API_KEY'),\n ],\n 'openai' => [\n 'token' => env('OPENAI_API_KEY'),\n 'organization_id' => env('OPENAI_ORGANIZATION_ID'),\n ],\n 'groq' => [\n 'token' => env('GROQ_API_KEY'),\n ],\n 'openrouter' => [\n 'token' => env('OPENROUTER_API_KEY'),\n 'url' => env('OPENROUTER_API_URL', 'https://openrouter.ai/api/v1'),\n ],\n 'togetherai' => [\n 'token' => env('TOGETHERAI_API_KEY'),\n ],\n\t\t'gemini' => [\n\t\t\t'token' => env('GEMINI_API_KEY'),\n\t\t],\n\t\t'deepseek' => [\n\t\t\t'token' => env('DEEPSEEK_API_KEY'),\n\t\t]\n ],\n\n 'extractors' => [\n 'crm' => [\n 'title' => 'Kontakt/Firma importieren',\n 'description' => 'Extrahiere Daten aus verschiedenen Dokumenten und importiere sie in dein CRM-System.',\n\n 'files' => [\n 'maxSize' => 50, // MB\n 'maxNumberOfFiles' => null, // Unlimited\n 'allowedTypes' => [\n // Using MIME types\n 'application/pdf',\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n\n // Using presets\n 'documents',\n 'images',\n\n // Using specific type/preset options\n ['type' => 'application/pdf', 'extractImages' => false], // Don't extract images from PDFs\n ['type' => 'images', 'maxSize' => 20], // Allow images up to 20 MB\n ],\n ],\n\n 'llm' => [\n 'model' => 'openai/gpt-4',\n 'options' => [\n 'temperature' => 0.5,\n 'maxTokens' => 100,\n 'topP' => 0.9,\n ],\n ],\n\n 'strategy' => 'simple', // \"sequential\", \"parallel\"\n\n 'output' => [\n 'format' => [ // JSON Schema\n 'contacts' => [\n 'type' => 'array',\n 'items' => [\n 'type' => 'object',\n 'properties' => [\n 'name' => ['type' => 'string'],\n 'email' => ['type' => 'string', 'format' => 'email'],\n 'phone' => ['type' => 'string'],\n ],\n 'required' => ['name'],\n ],\n ],\n 'companies' => [\n 'type' => 'array',\n 'items' => [\n 'type' => 'object',\n 'properties' => [\n 'name' => ['type' => 'string'],\n 'website' => ['type' => 'string', 'format' => 'uri'],\n 'phone' => ['type' => 'string', 'format' => 'phone'],\n ],\n 'required' => ['name'],\n ],\n ],\n ],\n ],\n ],\n ],\n];\n"}, "7f305af9be43dfc7e89971cbb62ba91675d836b6": {"t": 1785756214.825665, "n": 4081, "h": "417d4201f552307d", "c": " [\n 'default' => env('LLM_MAGIC_MODEL', $builtin_default),\n ],\n 'models' => [\n 'default' => env('LLM_MAGIC_MODEL', $builtin_default),\n\t\t'cheap' => env('LLM_MAGIC_CHEAP_MODEL', $builtin_cheap),\n\t\t'extraction' => env('LLM_MAGIC_EXTRACTION_MODEL', null),\n\t\t'chat' => env('LLM_MAGIC_CHAT_MODEL', null),\n\t\t'embeddings' => env('LLM_MAGIC_EMBEDDINGS_MODEL', $builtin_default_embeddings),\n ],\n 'artifacts' => [\n 'base' => env('LLM_MAGIC_ARTIFACTS_BASE', storage_path('app/magic-artifacts')),\n 'disk' => env('LLM_MAGIC_ARTIFACTS_DISK', 'artifacts'),\n 'prefix' => env('LLM_MAGIC_ARTIFACTS_PREFIX', ''),\n ],\n 'apis' => [\n 'anthropic' => [\n 'token' => env('ANTHROPIC_API_KEY'),\n ],\n 'openai' => [\n 'token' => env('OPENAI_API_KEY'),\n 'organization_id' => env('OPENAI_ORGANIZATION_ID'),\n ],\n 'groq' => [\n 'token' => env('GROQ_API_KEY'),\n ],\n 'openrouter' => [\n 'token' => env('OPENROUTER_API_KEY'),\n 'url' => env('OPENROUTER_API_URL', 'https://openrouter.ai/api/v1'),\n ],\n 'togetherai' => [\n 'token' => env('TOGETHERAI_API_KEY'),\n ],\n\t\t'gemini' => [\n\t\t\t'token' => env('GEMINI_API_KEY'),\n\t\t],\n\t\t'deepseek' => [\n\t\t\t'token' => env('DEEPSEEK_API_KEY'),\n\t\t]\n ],\n\n 'extractors' => [\n 'crm' => [\n 'title' => 'Kontakt/Firma importieren',\n 'description' => 'Extrahiere Daten aus verschiedenen Dokumenten und importiere sie in dein CRM-System.',\n\n 'files' => [\n 'maxSize' => 50, // MB\n 'maxNumberOfFiles' => null, // Unlimited\n 'allowedTypes' => [\n // Using MIME types\n 'application/pdf',\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n\n // Using presets\n 'documents',\n 'images',\n\n // Using specific type/preset options\n ['type' => 'application/pdf', 'extractImages' => false], // Don't extract images from PDFs\n ['type' => 'images', 'maxSize' => 20], // Allow images up to 20 MB\n ],\n ],\n\n 'llm' => [\n 'model' => 'openai/gpt-4',\n 'options' => [\n 'temperature' => 0.5,\n 'maxTokens' => 100,\n 'topP' => 0.9,\n ],\n ],\n\n 'strategy' => 'simple', // \"sequential\", \"parallel\"\n\n 'output' => [\n 'format' => [ // JSON Schema\n 'contacts' => [\n 'type' => 'array',\n 'items' => [\n 'type' => 'object',\n 'properties' => [\n 'name' => ['type' => 'string'],\n 'email' => ['type' => 'string', 'format' => 'email'],\n 'phone' => ['type' => 'string'],\n ],\n 'required' => ['name'],\n ],\n ],\n 'companies' => [\n 'type' => 'array',\n 'items' => [\n 'type' => 'object',\n 'properties' => [\n 'name' => ['type' => 'string'],\n 'website' => ['type' => 'string', 'format' => 'uri'],\n 'phone' => ['type' => 'string', 'format' => 'phone'],\n ],\n 'required' => ['name'],\n ],\n ],\n ],\n ],\n ],\n ],\n];\n"}, "f4074fdfc4f9f1a7371a40802473f02462bfc4f7": {"t": 1785756216.0291324, "n": 3681, "h": "505e2f7eb16df2ee", "c": " [\n 'default' => 'anthropic/claude-3-haiku',\n// 'default' => 'groq/llama-3.3-70b-versatile',\n ],\n 'artifacts' => [\n 'base' => env('LLM_MAGIC_ARTIFACTS_BASE', storage_path('app/magic-artifacts')),\n 'disk' => env('LLM_MAGIC_ARTIFACTS_DISK', 'artifacts'),\n 'prefix' => env('LLM_MAGIC_ARTIFACTS_PREFIX', ''),\n ],\n 'python' => [\n 'uv' => [\n 'path' => env('LLM_MAGIC_UV_PATH', '/usr/bin/env uv'),\n ],\n 'cwd' => env('LLM_MAGIC_PYTHON_CWD', realpath(__DIR__ . '/../python')),\n ],\n 'apis' => [\n 'anthropic' => [\n 'token' => env('ANTHROPIC_API_KEY'),\n ],\n 'openai' => [\n 'token' => env('OPENAI_API_KEY'),\n 'organization_id' => env('OPENAI_ORGANIZATION_ID'),\n ],\n 'groq' => [\n 'token' => env('GROQ_API_KEY'),\n ],\n 'openrouter' => [\n 'token' => env('OPENROUTER_API_KEY'),\n 'url' => env('OPENROUTER_API_URL', 'https://openrouter.ai/api/v1'),\n ],\n 'togetherai' => [\n 'token' => env('TOGETHERAI_API_KEY'),\n ],\n ],\n\n 'extractors' => [\n 'crm' => [\n 'title' => 'Kontakt/Firma importieren',\n 'description' => 'Extrahiere Daten aus verschiedenen Dokumenten und importiere sie in dein CRM-System.',\n\n 'files' => [\n 'maxSize' => 50, // MB\n 'maxNumberOfFiles' => null, // Unlimited\n 'allowedTypes' => [\n // Using MIME types\n 'application/pdf',\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n\n // Using presets\n 'documents',\n 'images',\n\n // Using specific type/preset options\n ['type' => 'application/pdf', 'extractImages' => false], // Don't extract images from PDFs\n ['type' => 'images', 'maxSize' => 20], // Allow images up to 20 MB\n ],\n ],\n\n 'llm' => [\n 'model' => 'openai/gpt-4',\n 'options' => [\n 'temperature' => 0.5,\n 'maxTokens' => 100,\n 'topP' => 0.9,\n ],\n ],\n\n 'strategy' => 'simple', // \"sequential\", \"parallel\"\n\n 'output' => [\n 'format' => [ // JSON Schema\n 'contacts' => [\n 'type' => 'array',\n 'items' => [\n 'type' => 'object',\n 'properties' => [\n 'name' => ['type' => 'string'],\n 'email' => ['type' => 'string', 'format' => 'email'],\n 'phone' => ['type' => 'string'],\n ],\n 'required' => ['name'],\n ],\n ],\n 'companies' => [\n 'type' => 'array',\n 'items' => [\n 'type' => 'object',\n 'properties' => [\n 'name' => ['type' => 'string'],\n 'website' => ['type' => 'string', 'format' => 'uri'],\n 'phone' => ['type' => 'string', 'format' => 'phone'],\n ],\n 'required' => ['name'],\n ],\n ],\n ],\n ],\n ],\n ],\n];\n"}, "029388ddb468b8fbf2ffb1d94e72884c7173c272": {"t": 1785756217.286197, "n": 2861, "h": "0f1bcfdf364b1b24", "c": " [\n 'anthropic' => [\n 'token' => env('ANTHROPIC_API_KEY'),\n ],\n 'openai' => [\n 'token' => env('OPENAI_API_KEY'),\n 'organization_id' => env('OPENAI_ORGANIZATION_ID'),\n ],\n 'groq' => [\n 'token' => env('GROQ_API_KEY'),\n ],\n ],\n\n 'extractors' => [\n 'crm' => [\n 'title' => 'Kontakt/Firma importieren',\n 'description' => 'Extrahiere Daten aus verschiedenen Dokumenten und importiere sie in dein CRM-System.',\n\n 'files' => [\n 'maxSize' => 50, // MB\n 'maxNumberOfFiles' => null, // Unlimited\n 'allowedTypes' => [\n // Using MIME types\n 'application/pdf',\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n\n // Using presets\n 'documents',\n 'images',\n\n // Using specific type/preset options\n ['type' => 'application/pdf', 'extractImages' => false], // Don't extract images from PDFs\n ['type' => 'images', 'maxSize' => 20], // Allow images up to 20 MB\n ],\n ],\n\n 'llm' => [\n 'model' => 'openai/gpt-4',\n 'options' => [\n 'temperature' => 0.5,\n 'maxTokens' => 100,\n 'topP' => 0.9,\n ],\n ],\n\n 'strategy' => 'simple', // \"sequential\", \"parallel\"\n\n 'output' => [\n 'format' => [ // JSON Schema\n 'contacts' => [\n 'type' => 'array',\n 'items' => [\n 'type' => 'object',\n 'properties' => [\n 'name' => ['type' => 'string'],\n 'email' => ['type' => 'string', 'format' => 'email'],\n 'phone' => ['type' => 'string'],\n ],\n 'required' => ['name'],\n ],\n ],\n 'companies' => [\n 'type' => 'array',\n 'items' => [\n 'type' => 'object',\n 'properties' => [\n 'name' => ['type' => 'string'],\n 'website' => ['type' => 'string', 'format' => 'uri'],\n 'phone' => ['type' => 'string', 'format' => 'phone'],\n ],\n 'required' => ['name'],\n ],\n ],\n ],\n ],\n ],\n ],\n];\n"}}, "src/Magic/Models/DeepSeek.php": {"eb4badfc016115c1f17e8df4556b536a3834238a": {"t": 1785746142.136429, "n": 1515, "h": "9613447b4a1144c9", "c": "resolve('deepseek');\n }\n\n protected function getOpenAiOrganization(): ?string\n {\n return null;\n }\n\n protected function getOpenAiBaseUri(): ?string\n {\n return 'api.deepseek.com';\n }\n\n public function send(Prompt $prompt): MessageCollection\n {\n // TODO: Implement send() method.\n }\n\n public static function chat(): static\n {\n return new static(\n model: 'deepseek-chat',\n options: new ChatGptOptions,\n );\n }\n}\n"}, "3d093d926884ce9ae3318f4d696bc254423f7a32": {"t": 1785756204.6475039, "n": 1515, "h": "9613447b4a1144c9", "c": "resolve('deepseek');\n }\n\n protected function getOpenAiOrganization(): ?string\n {\n return null;\n }\n\n protected function getOpenAiBaseUri(): ?string\n {\n return 'api.deepseek.com';\n }\n\n public function send(Prompt $prompt): MessageCollection\n {\n // TODO: Implement send() method.\n }\n\n public static function chat(): static\n {\n return new static(\n model: 'deepseek-chat',\n options: new ChatGptOptions,\n );\n }\n}\n"}, "7f305af9be43dfc7e89971cbb62ba91675d836b6": {"t": 1785756205.8752658, "n": 1457, "h": "dc61aa33182593e4", "c": "