@php use App\Domains\Engine\Enums\EngineEnum; use App\Domains\Entity\Enums\EntityEnum; use App\Domains\Entity\Models\Entity; use App\Domains\Entity\Facades\Entity as EntityFacade; use App\Helpers\Classes\MarketplaceHelper; use App\Extensions\OpenRouter\System\Enums\OpenRouterEngine; // Initialize default engine and model $defaultEngineSlug = setting('default_ai_engine', EngineEnum::OPEN_AI->slug()); $defaultEngine = EngineEnum::fromSlug($defaultEngineSlug); $defaultModel = $defaultEngine?->getDefaultWordModel($setting); // Get all selected models with word tokens $selectedModels = Entity::where('is_selected', true) ->whereHas('tokens', function ($query) { $query->where('type', 'word'); }) ->get() ->filter(function ($model) { return !empty($model->key); }) ->pluck('key') ->toArray(); // Initialize OpenRouter models if registered $openRouterModels = []; if (MarketplaceHelper::isRegistered('open-router')) { try { $openRouterModels = OpenRouterEngine::cases(); } catch (\Exception $e) { \Log::warning('Failed to load OpenRouter models: ' . $e->getMessage()); $openRouterModels = []; } } // Merge all models and ensure uniqueness $fullModels = collect() ->when($defaultModel, fn($collection) => $collection->push($defaultModel)) ->merge($selectedModels) ->merge($openRouterModels) ->filter() // Remove null/empty values ->unique('value') ->values(); // Initialize selected model driver $selectedModel = null; if ($defaultModel?->value) { try { $entityEnum = EntityEnum::tryFrom($defaultModel->value); $selectedModel = $entityEnum ? EntityFacade::driver($entityEnum) : null; } catch (\Exception $e) { \Log::warning('Failed to initialize selected model driver: ' . $e->getMessage()); $selectedModel = null; } } // Fallback if no selected model if (!$selectedModel && $fullModels->isNotEmpty()) { try { $firstModel = EntityEnum::tryFrom($fullModels->first()?->value); $selectedModel = $firstModel ? EntityFacade::driver($firstModel) : null; } catch (\Exception $e) { $selectedModel = null; } } // Check authentication status $isAuthenticated = auth()->check(); // Pre-load model drivers to avoid N+1 queries in the loop $modelDrivers = collect(); foreach ($fullModels as $model) { try { $entityEnum = EntityEnum::fromSlug($model?->value); if ($entityEnum) { $driver = EntityFacade::driver($entityEnum); $modelDrivers->put($model->value, $driver); } } catch (\Exception $e) { \Log::warning("Failed to load driver for model {$model?->value}: " . $e->getMessage()); } } @endphp
@lang('AI Model: ') {{ Str::limit($selectedModel?->model()?->selected_title ?? $selectedModel?->enum()?->value ?? __('Default Model'), 20) }}

@lang('AI Models')

@lang('Choose the AI model that best suits your needs.')

@forelse ($fullModels as $engine) @php $modelEnum = EntityEnum::fromSlug($engine?->value); $driver = $modelDrivers->get($engine?->value); $isDefaultModel = $modelEnum?->value === $defaultModel?->value; $modelTitle = $driver?->model()?->selected_title ?? $modelEnum?->value ?? __('Unknown Model'); $isAccessible = $isDefaultModel || $isAuthenticated; @endphp !$isAccessible, ]) variant="outline-shadow" @click.prevent="updateSelectedModels({ value: $el.getAttribute('data-model-value'), label: $el.getAttribute('data-model-label') })" ::data-selected="isModelSelected($el.getAttribute('data-model-value'))" x-show="searchString === '' || $el.getAttribute('data-model-label').toLowerCase().includes(searchString.toLowerCase())" >

@lang('Words')

@if($isDefaultModel) @lang('Free') @elseif(!$isAuthenticated) @lang('Login Required') @else @lang('Unlimited Credits') @endif

{{ $modelTitle }}

@if(!$isAccessible && !$isDefaultModel)

@lang('Login required to access this model')

@endif
@empty

@lang('No AI models available')

@endforelse
@foreach ($fullModels as $model) @php $modelEnum = EntityEnum::fromSlug($model?->value); $driver = $modelDrivers->get($model?->value); $label = $driver?->model()?->selected_title ?? $modelEnum?->value ?? __('Unknown Model'); @endphp @endforeach {{ __('Apply') }}